X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/puzzles/blobdiff_plain/0c5f131395979c85963f77271c04058bca749e65..ed375bd341a1d52ffd27a3245980bcb970b10848:/midend.c diff --git a/midend.c b/midend.c index 05ea663..8f4e4c9 100644 --- a/midend.c +++ b/midend.c @@ -428,6 +428,16 @@ void midend_new_game(midend *me) me->pressed_mouse_button = 0; } +int midend_can_undo(midend *me) +{ + return (me->statepos > 1); +} + +int midend_can_redo(midend *me) +{ + return (me->statepos < me->nstates); +} + static int midend_undo(midend *me) { if (me->statepos > 1) { @@ -1326,6 +1336,23 @@ char *midend_solve(midend *me) return NULL; } +int midend_status(midend *me) +{ + /* + * We should probably never be called when the state stack has no + * states on it at all - ideally, midends should never be left in + * that state for long enough to get put down and forgotten about. + * But if we are, I think we return _true_ - pedantically speaking + * a midend in that state is 'vacuously solved', and more + * practically, a user whose midend has been left in that state + * probably _does_ want the 'new game' option to be prominent. + */ + if (me->statepos == 0) + return +1; + + return me->ourgame->status(me->states[me->statepos-1].state); +} + char *midend_rewrite_statusbar(midend *me, char *text) { /*