~mdw
/
sgt
/
puzzles
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add the ability to reorder the rows and columns in Group. It becomes
[sgt/puzzles]
/
midend.c
diff --git
a/midend.c
b/midend.c
index
323ac97
..
05ea663
100644
(file)
--- a/
midend.c
+++ b/
midend.c
@@
-156,6
+156,15
@@
midend *midend_new(frontend *fe, const game *ourgame,
return me;
}
return me;
}
+static void midend_purge_states(midend *me)
+{
+ while (me->nstates > me->statepos) {
+ me->ourgame->free_game(me->states[--me->nstates].state);
+ if (me->states[me->nstates].movestr)
+ sfree(me->states[me->nstates].movestr);
+ }
+}
+
static void midend_free_game(midend *me)
{
while (me->nstates > 0) {
static void midend_free_game(midend *me)
{
while (me->nstates > 0) {
@@
-511,8
+520,7
@@
void midend_restart_game(midend *me)
* Now enter the restarted state as the next move.
*/
midend_stop_anim(me);
* Now enter the restarted state as the next move.
*/
midend_stop_anim(me);
- while (me->nstates > me->statepos)
- me->ourgame->free_game(me->states[--me->nstates].state);
+ midend_purge_states(me);
ensure(me);
me->states[me->nstates].state = s;
me->states[me->nstates].movestr = dupstr(me->desc);
ensure(me);
me->states[me->nstates].state = s;
me->states[me->nstates].movestr = dupstr(me->desc);
@@
-587,8
+595,7
@@
static int midend_really_process_key(midend *me, int x, int y, int button)
goto done;
} else if (s) {
midend_stop_anim(me);
goto done;
} else if (s) {
midend_stop_anim(me);
- while (me->nstates > me->statepos)
- me->ourgame->free_game(me->states[--me->nstates].state);
+ midend_purge_states(me);
ensure(me);
assert(movestr != NULL);
me->states[me->nstates].state = s;
ensure(me);
assert(movestr != NULL);
me->states[me->nstates].state = s;
@@
-753,6
+760,15
@@
int midend_process_key(midend *me, int x, int y, int button)
button = CURSOR_SELECT2;
/*
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);
* Now send on the event we originally received.
*/
ret = ret && midend_really_process_key(me, x, y, button);
@@
-1283,11
+1299,7
@@
char *midend_solve(midend *me)
* Now enter the solved state as the next move.
*/
midend_stop_anim(me);
* Now enter the solved state as the next move.
*/
midend_stop_anim(me);
- while (me->nstates > me->statepos) {
- me->ourgame->free_game(me->states[--me->nstates].state);
- if (me->states[me->nstates].movestr)
- sfree(me->states[me->nstates].movestr);
- }
+ midend_purge_states(me);
ensure(me);
me->states[me->nstates].state = s;
me->states[me->nstates].movestr = movestr;
ensure(me);
me->states[me->nstates].state = s;
me->states[me->nstates].movestr = movestr;