diff --git a/grid.c b/grid.c index d7e6442..4ad8c30 100644 --- a/grid.c +++ b/grid.c @@ -12,7 +12,7 @@ #include #include #include -#include +#include #include "puzzles.h" #include "tree234.h" @@ -52,7 +52,7 @@ void grid_free(grid *g) /* Used by the other grid generators. Create a brand new grid with nothing * initialised (all lists are NULL) */ -static grid *grid_empty() +static grid *grid_empty(void) { grid *g = snew(grid); g->faces = NULL; @@ -225,6 +225,8 @@ xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n\n"); #endif #ifdef SVG_GRID +#include + static void grid_try_svg(grid *g, int which) { char *svg = getenv("PUZZLES_SVG_GRID"); @@ -1268,7 +1270,15 @@ void grid_find_incentre(grid_face *f) } if (in) { +#ifdef HUGE_VAL double mindist = HUGE_VAL; +#else +#ifdef DBL_MAX + double mindist = DBL_MAX; +#else +#error No way to get maximum floating-point number. +#endif +#endif int e, d; /* @@ -1377,7 +1387,7 @@ void grid_find_incentre(grid_face *f) #define SQUARE_TILESIZE 20 -void grid_size_square(int width, int height, +static void grid_size_square(int width, int height, int *tilesize, int *xextent, int *yextent) { int a = SQUARE_TILESIZE; @@ -1387,7 +1397,7 @@ void grid_size_square(int width, int height, *yextent = height * a; } -grid *grid_new_square(int width, int height, char *desc) +static grid *grid_new_square(int width, int height, char *desc) { int x, y; /* Side length */ @@ -1439,7 +1449,7 @@ grid *grid_new_square(int width, int height, char *desc) #define HONEY_A 15 #define HONEY_B 26 -void grid_size_honeycomb(int width, int height, +static void grid_size_honeycomb(int width, int height, int *tilesize, int *xextent, int *yextent) { int a = HONEY_A; @@ -1450,7 +1460,7 @@ void grid_size_honeycomb(int width, int height, *yextent = (2 * b * (height-1)) + 3*b; } -grid *grid_new_honeycomb(int width, int height, char *desc) +static grid *grid_new_honeycomb(int width, int height, char *desc) { int x, y; int a = HONEY_A; @@ -1508,7 +1518,7 @@ grid *grid_new_honeycomb(int width, int height, char *desc) #define TRIANGLE_VEC_X 15 #define TRIANGLE_VEC_Y 26 -void grid_size_triangular(int width, int height, +static void grid_size_triangular(int width, int height, int *tilesize, int *xextent, int *yextent) { int vec_x = TRIANGLE_VEC_X; @@ -1521,7 +1531,7 @@ void grid_size_triangular(int width, int height, /* Doesn't use the previous method of generation, it pre-dates it! * A triangular grid is just about simple enough to do by "brute force" */ -grid *grid_new_triangular(int width, int height, char *desc) +static grid *grid_new_triangular(int width, int height, char *desc) { int x,y; @@ -1603,7 +1613,7 @@ grid *grid_new_triangular(int width, int height, char *desc) #define SNUBSQUARE_A 15 #define SNUBSQUARE_B 26 -void grid_size_snubsquare(int width, int height, +static void grid_size_snubsquare(int width, int height, int *tilesize, int *xextent, int *yextent) { int a = SNUBSQUARE_A; @@ -1614,7 +1624,7 @@ void grid_size_snubsquare(int width, int height, *yextent = (a+b) * (height-1) + a + b; } -grid *grid_new_snubsquare(int width, int height, char *desc) +static grid *grid_new_snubsquare(int width, int height, char *desc) { int x, y; int a = SNUBSQUARE_A; @@ -1717,7 +1727,7 @@ grid *grid_new_snubsquare(int width, int height, char *desc) #define CAIRO_A 14 #define CAIRO_B 31 -void grid_size_cairo(int width, int height, +static void grid_size_cairo(int width, int height, int *tilesize, int *xextent, int *yextent) { int b = CAIRO_B; /* a unused in determining grid size. */ @@ -1727,7 +1737,7 @@ void grid_size_cairo(int width, int height, *yextent = 2*b*(height-1) + 2*b; } -grid *grid_new_cairo(int width, int height, char *desc) +static grid *grid_new_cairo(int width, int height, char *desc) { int x, y; int a = CAIRO_A; @@ -1823,7 +1833,7 @@ grid *grid_new_cairo(int width, int height, char *desc) #define GREATHEX_A 15 #define GREATHEX_B 26 -void grid_size_greathexagonal(int width, int height, +static void grid_size_greathexagonal(int width, int height, int *tilesize, int *xextent, int *yextent) { int a = GREATHEX_A; @@ -1834,7 +1844,7 @@ void grid_size_greathexagonal(int width, int height, *yextent = (2*a + 2*b) * (height-1) + 3*b + a; } -grid *grid_new_greathexagonal(int width, int height, char *desc) +static grid *grid_new_greathexagonal(int width, int height, char *desc) { int x, y; int a = GREATHEX_A; @@ -1953,7 +1963,7 @@ grid *grid_new_greathexagonal(int width, int height, char *desc) #define OCTAGONAL_A 29 #define OCTAGONAL_B 41 -void grid_size_octagonal(int width, int height, +static void grid_size_octagonal(int width, int height, int *tilesize, int *xextent, int *yextent) { int a = OCTAGONAL_A; @@ -1964,7 +1974,7 @@ void grid_size_octagonal(int width, int height, *yextent = (2*a + b) * height; } -grid *grid_new_octagonal(int width, int height, char *desc) +static grid *grid_new_octagonal(int width, int height, char *desc) { int x, y; int a = OCTAGONAL_A; @@ -2036,7 +2046,7 @@ grid *grid_new_octagonal(int width, int height, char *desc) #define KITE_A 15 #define KITE_B 26 -void grid_size_kites(int width, int height, +static void grid_size_kites(int width, int height, int *tilesize, int *xextent, int *yextent) { int a = KITE_A; @@ -2047,7 +2057,7 @@ void grid_size_kites(int width, int height, *yextent = 6*a * (height-1) + 8*a; } -grid *grid_new_kites(int width, int height, char *desc) +static grid *grid_new_kites(int width, int height, char *desc) { int x, y; int a = KITE_A; @@ -2158,7 +2168,7 @@ grid *grid_new_kites(int width, int height, char *desc) #define FLORET_PX 75 #define FLORET_PY -26 -void grid_size_floret(int width, int height, +static void grid_size_floret(int width, int height, int *tilesize, int *xextent, int *yextent) { int px = FLORET_PX, py = FLORET_PY; /* |( 75, -26)| = 79.43 */ @@ -2171,7 +2181,7 @@ void grid_size_floret(int width, int height, *yextent = (5*qy-4*py) * (height-1) + 4*qy + 2*ry; } -grid *grid_new_floret(int width, int height, char *desc) +static grid *grid_new_floret(int width, int height, char *desc) { int x, y; /* Vectors for sides; weird numbers needed to keep puzzle aligned with window @@ -2265,7 +2275,7 @@ grid *grid_new_floret(int width, int height, char *desc) #define DODEC_A 15 #define DODEC_B 26 -void grid_size_dodecagonal(int width, int height, +static void grid_size_dodecagonal(int width, int height, int *tilesize, int *xextent, int *yextent) { int a = DODEC_A; @@ -2276,7 +2286,7 @@ void grid_size_dodecagonal(int width, int height, *yextent = (3*a + 2*b) * (height-1) + 2*(2*a + b); } -grid *grid_new_dodecagonal(int width, int height, char *desc) +static grid *grid_new_dodecagonal(int width, int height, char *desc) { int x, y; int a = DODEC_A; @@ -2345,7 +2355,7 @@ grid *grid_new_dodecagonal(int width, int height, char *desc) return g; } -void grid_size_greatdodecagonal(int width, int height, +static void grid_size_greatdodecagonal(int width, int height, int *tilesize, int *xextent, int *yextent) { int a = DODEC_A; @@ -2356,7 +2366,7 @@ void grid_size_greatdodecagonal(int width, int height, *yextent = (3*a + 3*b) * (height-1) + 2*(2*a + b); } -grid *grid_new_greatdodecagonal(int width, int height, char *desc) +static grid *grid_new_greatdodecagonal(int width, int height, char *desc) { int x, y; /* Vector for side of triangle - ratio is close to sqrt(3) */ @@ -2468,12 +2478,12 @@ typedef struct setface_ctx tree234 *points; } setface_ctx; -double round(double r) +static double round_int_nearest_away(double r) { return (r > 0.0) ? floor(r + 0.5) : ceil(r - 0.5); } -int set_faces(penrose_state *state, vector *vs, int n, int depth) +static int set_faces(penrose_state *state, vector *vs, int n, int depth) { setface_ctx *sf_ctx = (setface_ctx *)state->ctx; int i; @@ -2489,8 +2499,8 @@ int set_faces(penrose_state *state, vector *vs, int n, int depth) for (i = 0; i < n; i++) { double tx = v_x(vs, i), ty = v_y(vs, i); - xs[i] = (int)round( tx*cosa + ty*sina); - ys[i] = (int)round(-tx*sina + ty*cosa); + xs[i] = (int)round_int_nearest_away( tx*cosa + ty*sina); + ys[i] = (int)round_int_nearest_away(-tx*sina + ty*cosa); if (xs[i] < sf_ctx->xmin || xs[i] > sf_ctx->xmax) return 0; if (ys[i] < sf_ctx->ymin || ys[i] > sf_ctx->ymax) return 0; @@ -2512,7 +2522,7 @@ int set_faces(penrose_state *state, vector *vs, int n, int depth) #define PENROSE_TILESIZE 100 -void grid_size_penrose(int width, int height, +static void grid_size_penrose(int width, int height, int *tilesize, int *xextent, int *yextent) { int l = PENROSE_TILESIZE; @@ -2669,24 +2679,24 @@ static grid *grid_new_penrose(int width, int height, int which, char *desc) return g; } -void grid_size_penrose_p2_kite(int width, int height, +static void grid_size_penrose_p2_kite(int width, int height, int *tilesize, int *xextent, int *yextent) { grid_size_penrose(width, height, tilesize, xextent, yextent); } -void grid_size_penrose_p3_thick(int width, int height, +static void grid_size_penrose_p3_thick(int width, int height, int *tilesize, int *xextent, int *yextent) { grid_size_penrose(width, height, tilesize, xextent, yextent); } -grid *grid_new_penrose_p2_kite(int width, int height, char *desc) +static grid *grid_new_penrose_p2_kite(int width, int height, char *desc) { return grid_new_penrose(width, height, PENROSE_P2, desc); } -grid *grid_new_penrose_p3_thick(int width, int height, char *desc) +static grid *grid_new_penrose_p3_thick(int width, int height, char *desc) { return grid_new_penrose(width, height, PENROSE_P3, desc); } diff --git a/loopy.c b/loopy.c index 8617c72..e7fb6cb 100644 --- a/loopy.c +++ b/loopy.c @@ -201,7 +201,7 @@ static char const diffchars[] = DIFFLIST(ENCODE); SOLVERLIST(SOLVER_FN_DECL) static int (*(solver_fns[]))(solver_state *) = { SOLVERLIST(SOLVER_FN) }; static int const solver_diffs[] = { SOLVERLIST(SOLVER_DIFF) }; -const int NUM_SOLVERS = sizeof(solver_diffs)/sizeof(*solver_diffs); +static const int NUM_SOLVERS = sizeof(solver_diffs)/sizeof(*solver_diffs); struct game_params { int w, h; @@ -1901,7 +1901,7 @@ static char *new_game_desc(game_params *params, random_state *rs, if (grid_desc) { retval = snewn(strlen(grid_desc) + 1 + strlen(game_desc) + 1, char); - sprintf(retval, "%s%c%s", grid_desc, GRID_DESC_SEP, game_desc); + sprintf(retval, "%s%c%s", grid_desc, (int)GRID_DESC_SEP, game_desc); sfree(grid_desc); sfree(game_desc); } else { diff --git a/penrose.c b/penrose.c index 18c4258..7adab03 100644 --- a/penrose.c +++ b/penrose.c @@ -96,7 +96,7 @@ struct vector { int a, b, c, d; }; -static vector v_origin() +static vector v_origin(void) { vector v; v.a = v.b = v.c = v.d = 0; @@ -107,7 +107,7 @@ static vector v_origin() * draw an isoceles triangle centred on the X axis. */ #ifdef TEST_VECTORS -static vector v_unit() +static vector v_unit(void) { vector v; @@ -219,7 +219,7 @@ static const char *v_debug(vector v) * Tiling routines. */ -vector xform_coord(vector vo, int shrink, vector vtrans, int ang) +static vector xform_coord(vector vo, int shrink, vector vtrans, int ang) { if (shrink < 0) vo = v_shrinkphi(vo); @@ -539,7 +539,7 @@ int test_cb(penrose_state *state, vector *vs, int n, int depth) return 0; } -void usage_exit() +void usage_exit(void) { fprintf(stderr, "Usage: penrose-test [--recursion] P2|P3 SIZE DEPTH\n"); exit(1); diff --git a/range.c b/range.c index 9bc28e6..6bdba76 100644 --- a/range.c +++ b/range.c @@ -49,7 +49,7 @@ #define setmember(obj, field) ( (obj) . field = field ) -char *nfmtstr(int n, char *fmt, ...) { +static char *nfmtstr(int n, char *fmt, ...) { va_list va; char *ret = snewn(n+1, char); va_start(va, fmt); @@ -83,7 +83,7 @@ struct game_state { }; #define DEFAULT_PRESET 0 -static struct game_params presets[] = {{9, 6}, {12, 8}, {13, 9}, {16, 11}}; +static struct game_params range_presets[] = {{9, 6}, {12, 8}, {13, 9}, {16, 11}}; /* rationale: I want all four combinations of {odd/even, odd/even}, as * they play out differently with respect to two-way symmetry. I also * want them to be generated relatively fast yet still be large enough @@ -95,7 +95,7 @@ static struct game_params presets[] = {{9, 6}, {12, 8}, {13, 9}, {16, 11}}; static game_params *default_params(void) { game_params *ret = snew(game_params); - *ret = presets[DEFAULT_PRESET]; /* structure copy */ + *ret = range_presets[DEFAULT_PRESET]; /* structure copy */ return ret; } @@ -108,10 +108,15 @@ static game_params *dup_params(game_params *params) static int game_fetch_preset(int i, char **name, game_params **params) { - if (i < 0 || i >= lenof(presets)) return FALSE; + game_params *ret; - *name = nfmtstr(40, "%d x %d", presets[i].w, presets[i].h); - *params = dup_params(&presets[i]); + if (i < 0 || i >= lenof(range_presets)) return FALSE; + + ret = default_params(); + *ret = range_presets[i]; /* struct copy */ + *params = ret; + + *name = nfmtstr(40, "%d x %d", range_presets[i].w, range_presets[i].h); return TRUE; } @@ -333,19 +338,19 @@ static move *solve_internal(game_state *state, move *base, int diff) return moves; } +static reasoning *const reasonings[] = { + solver_reasoning_not_too_big, + solver_reasoning_adjacency, + solver_reasoning_connectedness, + solver_reasoning_recursion +}; + static move *do_solve(game_state *state, int nclues, const square *clues, move *move_buffer, int difficulty) { - reasoning *reasonings[] = { - solver_reasoning_not_too_big, - solver_reasoning_adjacency, - solver_reasoning_connectedness, - solver_reasoning_recursion - }; - struct move *buf = move_buffer, *oldbuf; int i; diff --git a/signpost.c b/signpost.c index a9c38f5..fdeadba 100644 --- a/signpost.c +++ b/signpost.c @@ -1496,7 +1496,7 @@ static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds, if (state->prev[si] == -1 && state->next[si] == -1) return ""; sprintf(buf, "%c%d,%d", - ui->drag_is_from ? 'C' : 'X', ui->sx, ui->sy); + (int)(ui->drag_is_from ? 'C' : 'X'), ui->sx, ui->sy); return dupstr(buf); } @@ -1515,7 +1515,7 @@ static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds, if (state->prev[si] == -1 && state->next[si] == -1) return ""; sprintf(buf, "%c%d,%d", - (button == 'x') ? 'C' : 'X', ui->cx, ui->cy); + (int)((button == 'x') ? 'C' : 'X'), ui->cx, ui->cy); return dupstr(buf); }