ref: 5e1c335eea905ee031e440399f7a575c5c7a1ad3
parent: aa1a9375be96cd8e0f89a670359c3c80ad7cf937
author: Simon Tatham <anakin@pobox.com>
date: Mon Jul 13 15:06:53 EDT 2015
Solo, Undead: support 'm' to fill in all pencils. Keen, Towers and Unequal (and Group) already have this feature in common: pressing m while no square is selected, causes a full set of pencil marks to be filled in for every square without a real number/ letter/whatever in it. Solo and Undead share the basic UI principles (left-click to select a square then type a thing to go in it, vs right-click to select a square then type things to pencil-mark in it), but did not have that same feature. Now they do.
--- a/solo.c
+++ b/solo.c
@@ -4614,6 +4614,9 @@
return dupstr(buf);
}
+ if (button == 'M' || button == 'm')
+ return dupstr("M");
+
return NULL;
}
@@ -4662,6 +4665,21 @@
if (!ret->completed && check_valid(cr, ret->blocks, ret->kblocks,
ret->xtype, ret->grid)) {
ret->completed = TRUE;
+ }
+ }
+ return ret;
+ } else if (move[0] == 'M') {
+ /*
+ * Fill in absolutely all pencil marks in unfilled squares,
+ * for those who like to play by the rigorous approach of
+ * starting off in that state and eliminating things.
+ */
+ ret = dup_game(from);
+ for (y = 0; y < cr; y++) {
+ for (x = 0; x < cr; x++) {
+ if (!ret->grid[y*cr+x]) {
+ memset(ret->pencil + (y*cr+x)*cr, 1, cr);
+ }
}
}
return ret;
--- a/undead.c
+++ b/undead.c
@@ -1727,6 +1727,10 @@
ui->ascii = !ui->ascii;
return "";
}
+
+ if (button == 'm' || button == 'M') {
+ return dupstr("M");
+ }
if (ui->hshow == 1 && ui->hpencil == 0) {
xi = state->common->xinfo[ui->hx + ui->hy*(state->common->params.w+2)];
@@ -2019,6 +2023,18 @@
is_clue(ret, x, y)) {
ret->hints_done[clue_index(ret, x, y)] ^= 1;
move += n + 1;
+ }
+ if (c == 'M') {
+ /*
+ * Fill in absolutely all pencil marks in unfilled
+ * squares, for those who like to play by the rigorous
+ * approach of starting off in that state and eliminating
+ * things.
+ */
+ for (i = 0; i < ret->common->wh; i++)
+ if (ret->guess[i] == 7)
+ ret->pencils[i] = 7;
+ move++;
}
if (*move == ';') move++;
}