chiark / gitweb /
tracks: Greyscale colour initialisation: line up columns
[sgt-puzzles.git] / midend.c
index c8250ab63fbeb04d3fa7a96bba4a43a31bc13da4..2edc1ec6ef4286a4124f7d2f440a0b2ed472dee2 100644 (file)
--- a/midend.c
+++ b/midend.c
@@ -590,33 +590,40 @@ static int midend_really_process_key(midend *me, int x, int y, int button)
     int type = MOVE, gottype = FALSE, ret = 1;
     float anim_time;
     game_state *s;
-    char *movestr;
-       
-    movestr =
-       me->ourgame->interpret_move(me->states[me->statepos-1].state,
-                                   me->ui, me->drawstate, x, y, button);
+    char *movestr = NULL;
+
+    if (!IS_UI_FAKE_KEY(button)) {
+        movestr = me->ourgame->interpret_move(
+            me->states[me->statepos-1].state,
+            me->ui, me->drawstate, x, y, button);
+    }
 
     if (!movestr) {
-       if (button == 'n' || button == 'N' || button == '\x0E') {
+       if (button == 'n' || button == 'N' || button == '\x0E' ||
+            button == UI_NEWGAME) {
            midend_new_game(me);
            midend_redraw(me);
            goto done;                 /* never animate */
        } else if (button == 'u' || button == 'U' ||
-                  button == '\x1A' || button == '\x1F') {
+                  button == '\x1A' || button == '\x1F' ||
+                   button == UI_UNDO) {
            midend_stop_anim(me);
            type = me->states[me->statepos-1].movetype;
            gottype = TRUE;
            if (!midend_undo(me))
                goto done;
        } else if (button == 'r' || button == 'R' ||
-                  button == '\x12' || button == '\x19') {
+                  button == '\x12' || button == '\x19' ||
+                   button == UI_REDO) {
            midend_stop_anim(me);
            if (!midend_redo(me))
                goto done;
-       } else if (button == '\x13' && me->ourgame->can_solve) {
+       } else if ((button == '\x13' || button == UI_SOLVE) &&
+                   me->ourgame->can_solve) {
            if (midend_solve(me))
                goto done;
-       } else if (button == 'q' || button == 'Q' || button == '\x11') {
+       } else if (button == 'q' || button == 'Q' || button == '\x11' ||
+                   button == UI_QUIT) {
            ret = 0;
            goto done;
        } else
@@ -1610,7 +1617,9 @@ void midend_serialise(midend *me,
 #define wr(h,s) do { \
     char hbuf[80]; \
     char *str = (s); \
-    sprintf(hbuf, "%-8.8s:%d:", (h), (int)strlen(str)); \
+    char lbuf[9];                               \
+    copy_left_justified(lbuf, sizeof(lbuf), h); \
+    sprintf(hbuf, "%s:%d:", lbuf, (int)strlen(str)); \
     write(wctx, hbuf, strlen(hbuf)); \
     write(wctx, str, strlen(str)); \
     write(wctx, "\n", 1); \
@@ -2057,6 +2066,8 @@ char *midend_deserialise(midend *me,
         me->ourgame->new_drawstate(me->drawing,
                                   me->states[me->statepos-1].state);
     midend_size_new_drawstate(me);
+    if (me->game_id_change_notify_function)
+        me->game_id_change_notify_function(me->game_id_change_notify_ctx);
 
     ret = NULL;                        /* success! */