Alter the `Octagon' board preset so that instead of presenting you
[sgt/puzzles] / mines.c
diff --git a/mines.c b/mines.c
index 7597d07..f3e216c 100644 (file)
--- a/mines.c
+++ b/mines.c
@@ -237,7 +237,7 @@ static game_params *custom_params(config_item *cfg)
     return ret;
 }
 
-static char *validate_params(game_params *params)
+static char *validate_params(game_params *params, int full)
 {
     /*
      * Lower limit on grid size: each dimension must be at least 3.
@@ -253,7 +253,7 @@ static char *validate_params(game_params *params)
      * _have_ to have a gap somewhere which you can't determine the
      * position of.
      */
-    if (params->w <= 2 || params->h <= 2)
+    if (full && params->unique && (params->w <= 2 || params->h <= 2))
        return "Width and height must both be greater than two";
     if (params->n > params->w * params->h - 9)
        return "Too many mines for grid size";
@@ -2604,27 +2604,23 @@ static game_state *execute_move(game_state *from, char *move)
  * Drawing routines.
  */
 
-static void game_size(game_params *params, game_drawstate *ds,
-                      int *x, int *y, int expand)
+static void game_compute_size(game_params *params, int tilesize,
+                             int *x, int *y)
 {
-    double tsx, tsy, ts;
-    /*
-     * Each window dimension equals the tile size times 3 more than
-     * the grid dimension (the border is 3/2 the width of the
-     * tiles).
-     */
-    tsx = (double)*x / ((double)params->w + 3.0);
-    tsy = (double)*y / ((double)params->h + 3.0);
-    ts = min(tsx, tsy);
-    if (expand)
-        ds->tilesize = (int)(ts + 0.5);
-    else
-        ds->tilesize = min((int)ts, PREFERRED_TILE_SIZE);
+    /* Ick: fake up `ds->tilesize' for macro expansion purposes */
+    struct { int tilesize; } ads, *ds = &ads;
+    ads.tilesize = tilesize;
 
     *x = BORDER * 2 + TILE_SIZE * params->w;
     *y = BORDER * 2 + TILE_SIZE * params->h;
 }
 
+static void game_set_size(game_drawstate *ds, game_params *params,
+                         int tilesize)
+{
+    ds->tilesize = tilesize;
+}
+
 static float *game_colours(frontend *fe, game_state *state, int *ncolours)
 {
     float *ret = snewn(3 * NCOLOURS, float);
@@ -3048,7 +3044,7 @@ const struct game thegame = {
     game_changed_state,
     interpret_move,
     execute_move,
-    game_size,
+    PREFERRED_TILE_SIZE, game_compute_size, game_set_size,
     game_colours,
     game_new_drawstate,
     game_free_drawstate,
@@ -3074,7 +3070,7 @@ const struct game thegame = {
  * $ ./mineobfusc 9x9:4,4,004000007c00010022080
  * 9x9:4,4,mb071b49fbd1cb6a0d5868
  *
- * gcc -DSTANDALONE_OBFUSCATOR -o mineobfusc mines.c malloc.c random.c tree234.c
+ * gcc -DSTANDALONE_OBFUSCATOR -o mineobfusc mines.c malloc.c random.c tree234.c misc.c
  */
 
 #include <stdarg.h>
@@ -3091,7 +3087,7 @@ void unclip(frontend *fe) {}
 void start_draw(frontend *fe) {}
 void draw_update(frontend *fe, int x, int y, int w, int h) {}
 void end_draw(frontend *fe) {}
-void midend_supersede_game_desc(midend_data *me, char *desc) {}
+void midend_supersede_game_desc(midend_data *me, char *desc, char *privdesc) {}
 void status_bar(frontend *fe, char *text) {}
 
 void fatal(char *fmt, ...)
@@ -3112,15 +3108,13 @@ int main(int argc, char **argv)
 {
     game_params *p;
     game_state *s;
-    int recurse = TRUE;
     char *id = NULL, *desc, *err;
     int y, x;
-    int grade = FALSE;
 
     while (--argc > 0) {
         char *p = *++argv;
        if (*p == '-') {
-            fprintf(stderr, "%s: unrecognised option `%s'\n", argv[0]);
+            fprintf(stderr, "%s: unrecognised option `%s'\n", argv[0], p);
             return 1;
         } else {
             id = p;