16-bit cleanliness patch from James H.
[sgt/puzzles] / midend.c
index 5229935..1ba0fa3 100644 (file)
--- a/midend.c
+++ b/midend.c
@@ -278,6 +278,8 @@ void midend_size(midend *me, int *x, int *y, int user_size)
     *y = me->winheight;
 }
 
+int midend_tilesize(midend *me) { return me->tilesize; }
+
 void midend_set_params(midend *me, game_params *params)
 {
     me->ourgame->free_params(me->params);
@@ -383,6 +385,25 @@ void midend_new_game(midend *me)
     me->states[me->nstates].state =
        me->ourgame->new_game(me, me->params, me->desc);
 
+    /*
+     * As part of our commitment to self-testing, test the aux
+     * string to make sure nothing ghastly went wrong.
+     */
+    if (me->ourgame->can_solve && me->aux_info) {
+       game_state *s;
+       char *msg, *movestr;
+
+       msg = NULL;
+       movestr = me->ourgame->solve(me->states[0].state,
+                                    me->states[0].state,
+                                    me->aux_info, &msg);
+       assert(movestr && !msg);
+       s = me->ourgame->execute_move(me->states[0].state, movestr);
+       assert(s);
+       me->ourgame->free_game(s);
+       sfree(movestr);
+    }
+
     me->states[me->nstates].movestr = NULL;
     me->states[me->nstates].movetype = NEWGAME;
     me->nstates++;
@@ -538,6 +559,9 @@ static int midend_really_process_key(midend *me, int x, int y, int button)
            midend_stop_anim(me);
            if (!midend_redo(me))
                goto done;
+       } else if (button == '\x13' && me->ourgame->can_solve) {
+           if (midend_solve(me))
+               goto done;
        } else if (button == 'q' || button == 'Q' || button == '\x11') {
            ret = 0;
            goto done;
@@ -729,6 +753,15 @@ int midend_process_key(midend *me, int x, int y, int button)
       button = CURSOR_SELECT2;
 
     /*
+     * Normalise both backspace characters (8 and 127) to \b. Easier
+     * to do this once, here, than to require all front ends to
+     * carefully generate the same one - now each front end can
+     * generate whichever is easiest.
+     */
+    if (button == '\177')
+       button = '\b';
+
+    /*
      * Now send on the event we originally received.
      */
     ret = ret && midend_really_process_key(me, x, y, button);
@@ -923,6 +956,7 @@ int midend_num_presets(midend *me)
                    me->ourgame->encode_params(preset, TRUE);
                 me->npresets++;
             }
+            sfree(e);
         }
     }