* Non-edge; merge the two dsf classes on either
* side of it.
*/
- assert(pos < 2*cr*(cr-1));
+ if (pos >= 2*cr*(cr-1)) {
+ sfree(dsf);
+ return "Too much data in block structure specification";
+ }
+
if (pos < cr*(cr-1)) {
int y = pos/(cr-1);
int x = pos%(cr-1);
return dupstr(buf);
}
+ if (button == 'M' || button == 'm')
+ return dupstr("M");
+
return NULL;
}
}
}
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;
} else
return NULL; /* couldn't parse move string */
}