+
+int midend_wants_statusbar(midend_data *me)
+{
+ return game_wants_statusbar();
+}
+
+config_item *midend_get_config(midend_data *me, int which, char **wintitle)
+{
+ char *titlebuf;
+ config_item *ret;
+
+ titlebuf = snewn(40 + strlen(game_name), char);
+
+ switch (which) {
+ case CFG_SETTINGS:
+ sprintf(titlebuf, "%s configuration", game_name);
+ *wintitle = dupstr(titlebuf);
+ return game_configure(me->params);
+ case CFG_SEED:
+ sprintf(titlebuf, "%s game selection", game_name);
+ *wintitle = dupstr(titlebuf);
+
+ ret = snewn(2, config_item);
+
+ ret[0].type = C_STRING;
+ ret[0].name = "Game ID";
+ ret[0].ival = 0;
+ ret[0].sval = dupstr(me->seed);
+
+ ret[1].type = C_END;
+ ret[1].name = ret[1].sval = NULL;
+ ret[1].ival = 0;
+
+ return ret;
+ }
+
+ assert(!"We shouldn't be here");
+ return NULL;
+}
+
+char *midend_set_config(midend_data *me, int which, config_item *cfg)
+{
+ char *error;
+ game_params *params;
+
+ switch (which) {
+ case CFG_SETTINGS:
+ params = custom_params(cfg);
+ error = validate_params(params);
+
+ if (error) {
+ free_params(params);
+ return error;
+ }
+
+ free_params(me->params);
+ me->params = params;
+ break;
+
+ case CFG_SEED:
+ error = validate_seed(me->params, cfg[0].sval);
+ if (error)
+ return error;
+
+ sfree(me->seed);
+ me->seed = dupstr(cfg[0].sval);
+ me->fresh_seed = TRUE;
+
+ break;
+ }
+
+ return NULL;
+}