diff options
| author | Simon Tatham <anakin@pobox.com> | 2005-06-01 17:47:56 +0000 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2005-06-01 17:47:56 +0000 |
| commit | 50edaa578b614eb74c57a38faa2d05ab628ff81b (patch) | |
| tree | a48afa49172e113d2f867f33bb8f1c216b4bda8f /pattern.c | |
| parent | ad3abd9867962c94feeb09956e53c6fde886df0e (diff) | |
| download | puzzles-50edaa578b614eb74c57a38faa2d05ab628ff81b.zip puzzles-50edaa578b614eb74c57a38faa2d05ab628ff81b.tar.gz puzzles-50edaa578b614eb74c57a38faa2d05ab628ff81b.tar.bz2 puzzles-50edaa578b614eb74c57a38faa2d05ab628ff81b.tar.xz | |
Miscellaneous fixes from James Harvey's PalmOS porting work:
- fixed numerous memory leaks (not Palm-specific)
- corrected a couple of 32-bit-int assumptions (vital for Palm but
generally a good thing anyway)
- lifted a few function pointer types into explicit typedefs
(neutral for me but convenient for the source-munging Perl
scripts he uses to deal with Palm code segment rules)
- lifted a few function-level static arrays into global static
arrays (neutral for me but apparently works round a Palm tools
bug)
- a couple more presets in Rectangles (so that Palm, or any other
slow platform which can't handle the larger sizes easily, can
still have some variety available)
- in Solo, arranged a means of sharing scratch space between calls
to nsolve to prevent a lot of redundant malloc/frees (gives a 10%
speed increase even on existing platforms)
[originally from svn r5897]
Diffstat (limited to 'pattern.c')
| -rw-r--r-- | pattern.c | 36 |
1 files changed, 15 insertions, 21 deletions
@@ -11,9 +11,6 @@ #include "puzzles.h" -#define max(x,y) ( (x)>(y) ? (x):(y) ) -#define min(x,y) ( (x)<(y) ? (x):(y) ) - enum { COL_BACKGROUND, COL_EMPTY, @@ -62,24 +59,26 @@ static game_params *default_params(void) return ret; } +static const struct game_params pattern_presets[] = { + {10, 10}, + {15, 15}, + {20, 20}, +#ifndef SLOW_SYSTEM + {25, 25}, + {30, 30}, +#endif +}; + static int game_fetch_preset(int i, char **name, game_params **params) { game_params *ret; char str[80]; - static const struct { int x, y; } values[] = { - {10, 10}, - {15, 15}, - {20, 20}, - {25, 25}, - {30, 30}, - }; - - if (i < 0 || i >= lenof(values)) + + if (i < 0 || i >= lenof(pattern_presets)) return FALSE; ret = snew(game_params); - ret->w = values[i].x; - ret->h = values[i].y; + *ret = pattern_presets[i]; sprintf(str, "%dx%d", ret->w, ret->h); @@ -166,12 +165,8 @@ static game_params *custom_params(config_item *cfg) static char *validate_params(game_params *params) { - if (params->w <= 0 && params->h <= 0) + if (params->w <= 0 || params->h <= 0) return "Width and height must both be greater than zero"; - if (params->w <= 0) - return "Width must be greater than zero"; - if (params->h <= 0) - return "Height must be greater than zero"; return NULL; } @@ -494,8 +489,7 @@ static char *new_game_desc(game_params *params, random_state *rs, ai->w = params->w; ai->h = params->h; - ai->grid = snewn(ai->w * ai->h, unsigned char); - memcpy(ai->grid, grid, ai->w * ai->h); + ai->grid = grid; *aux = ai; } |