or two, a debugging fix, a couple of explicit initialisations of
variables that were previously read uninitialised, and a fix for a
whopping great big memory leak in Slant owing to me having
completely forgotten to write free_game().
git-svn-id: svn://svn.tartarus.org/sgt/puzzles@6159
cda61777-01e9-0310-a592-
d414129be87e
if (isball(state, x, y, direction, LOOK_FORWARD)) {
/* we're facing a ball; send back a reflection. */
- debug(("Ball ahead of (%d, %d); HIT at (%d, %d), new grid 0x%x\n",
- x, y, xstart, ystart, GRID(state, xstart, ystart)));
+ debug(("Ball ahead of (%d, %d)", x, y));
return LASER_HIT; /* hit */
}
ds->w = state->w; ds->h = state->h;
ds->grid = snewn((state->w+2)*(state->h+2), unsigned int);
memset(ds->grid, 0, (state->w+2)*(state->h+2)*sizeof(unsigned int));
- ds->started = 0;
+ ds->started = ds->reveal = 0;
ds->flash_laserno = LASER_EMPTY;
return ds;
* worry about avoiding closed loops.
*/
+#include "puzzles.h"
+
int dsf_canonify(int *dsf, int val)
{
int v2 = val;
int *dsf;
};
-struct solver_scratch *new_scratch(int w, int h)
+static struct solver_scratch *new_scratch(int w, int h)
{
int W = w+1, H = h+1;
struct solver_scratch *ret = snew(struct solver_scratch);
return ret;
}
-void free_scratch(struct solver_scratch *sc)
+static void free_scratch(struct solver_scratch *sc)
{
sfree(sc->dsf);
sfree(sc);
static void free_game(game_state *state)
{
+ sfree(state->soln);
+ assert(state->clues);
+ if (--state->clues->refcount <= 0) {
+ sfree(state->clues->clues);
+ sfree(state->clues->dsf);
+ sfree(state->clues);
+ }
sfree(state);
}
for (x = 0; x < w; x++) {
int v = (soln[y*w+x] == bs ? -1 : +1);
if (state->soln[y*w+x] != v) {
- int len = sprintf(buf, ";%c%d,%d", v < 0 ? '\\' : '/', x, y);
+ int len = sprintf(buf, ";%c%d,%d", (int)(v < 0 ? '\\' : '/'), x, y);
if (movelen + len >= movesize) {
movesize = movelen + len + 256;
move = sresize(move, movesize, char);
v = -1;
}
- sprintf(buf, "%c%d,%d", v==-1 ? '\\' : v==+1 ? '/' : 'C', x, y);
+ sprintf(buf, "%c%d,%d", (int)(v==-1 ? '\\' : v==+1 ? '/' : 'C'), x, y);
return dupstr(buf);
}
static void game_free_drawstate(game_drawstate *ds)
{
+ sfree(ds->todraw);
sfree(ds->grid);
sfree(ds);
}
#define greater64(i,j) ( (i).hi>(j).hi || ((i).hi==(j).hi && (i).lo>(j).lo))
#define sign64(i) ((i).hi < 0 ? -1 : (i).hi==0 && (i).lo==0 ? 0 : +1)
-int64 mulu32to64(unsigned long x, unsigned long y)
+static int64 mulu32to64(unsigned long x, unsigned long y)
{
unsigned long a, b, c, d, t;
int64 ret;
return ret;
}
-int64 mul32to64(long x, long y)
+static int64 mul32to64(long x, long y)
{
int sign = +1;
int64 ret;
return ret;
}
-int64 dotprod64(long a, long b, long p, long q)
+static int64 dotprod64(long a, long b, long p, long q)
{
int64 ab, pq;
void deactivate_timer(frontend *fe)
{
- KillTimer(fe->hwnd, fe->timer);
+ if (fe->hwnd) KillTimer(fe->hwnd, fe->timer);
fe->timer = 0;
}
find_help_file(fe);
fe->inst = inst;
- midend_new_game(fe->me);
fe->timer = 0;
+ fe->hwnd = NULL;
+
+ midend_new_game(fe->me);
fe->fonts = NULL;
fe->nfonts = fe->fontsize = 0;