Support user-specified extra link flags (XLFLAGS) in the Unix
[sgt/puzzles] / midend.c
index 05ea663..0c8b3c0 100644 (file)
--- 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,21 @@ char *midend_solve(midend *me)
     return NULL;
 }
 
+int midend_is_solved(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.
+     */
+    return (me->statepos == 0 ||
+            me->ourgame->is_solved(me->states[me->statepos-1].state));
+}
+
 char *midend_rewrite_statusbar(midend *me, char *text)
 {
     /*