aboutsummaryrefslogtreecommitdiff
path: root/midend.c
diff options
context:
space:
mode:
Diffstat (limited to 'midend.c')
-rw-r--r--midend.c32
1 files changed, 24 insertions, 8 deletions
diff --git a/midend.c b/midend.c
index dec0cc9..5f4e795 100644
--- a/midend.c
+++ b/midend.c
@@ -367,9 +367,22 @@ static int midend_really_process_key(midend_data *me, int x, int y, int button)
ret = 0;
goto done;
} else {
- game_state *s =
- me->ourgame->make_move(me->states[me->statepos-1].state,
- me->ui, me->drawstate, x, y, button);
+ game_state *s;
+ char *movestr;
+
+ movestr =
+ me->ourgame->interpret_move(me->states[me->statepos-1].state,
+ me->ui, me->drawstate, x, y, button);
+ if (!movestr)
+ s = NULL;
+ else if (!*movestr)
+ s = me->states[me->statepos-1].state;
+ else {
+ s = me->ourgame->execute_move(me->states[me->statepos-1].state,
+ movestr);
+ assert(s != NULL);
+ sfree(movestr);
+ }
if (s == me->states[me->statepos-1].state) {
/*
@@ -938,7 +951,7 @@ char *midend_text_format(midend_data *me)
char *midend_solve(midend_data *me)
{
game_state *s;
- char *msg;
+ char *msg, *movestr;
if (!me->ourgame->can_solve)
return "This game does not support the Solve operation";
@@ -947,11 +960,14 @@ char *midend_solve(midend_data *me)
return "No game set up to solve"; /* _shouldn't_ happen! */
msg = "Solve operation failed"; /* game _should_ overwrite on error */
- s = me->ourgame->solve(me->states[0].state,
- me->states[me->statepos-1].state,
- me->aux_info, &msg);
- if (!s)
+ movestr = me->ourgame->solve(me->states[0].state,
+ me->states[me->statepos-1].state,
+ me->aux_info, &msg);
+ if (!movestr)
return msg;
+ s = me->ourgame->execute_move(me->states[me->statepos-1].state, movestr);
+ assert(s);
+ sfree(movestr);
/*
* Now enter the solved state as the next move.