ref: cb57de3e44a68a642ba088c980345e0e6e42a9df
parent: 472deca37cef4e5f5c8cd865406fab71a44d0668
author: Simon Tatham <[email protected]>
date: Mon Jan 15 15:21:57 EST 2007
Patch from James H which shouldn't change the functionality of Loopy, but makes it build more sensibly on the Palm. [originally from svn r7114]
--- a/loopy.c
+++ b/loopy.c
@@ -1876,10 +1876,7 @@
(d==DLINE_DR) ? "DLINE_DR": \
"oops")
-static const struct dline *get_dline(enum dline_desc desc)
-{
- return &dlines[desc];
-}
+#define CHECK_DLINE_SENSIBLE(d) assert(dlines[(d)].dx != -1 && dlines[(d)].dy != -1)
/* This will fail an assertion if the directions handed to it are the same, as
* no dline corresponds to that */
@@ -1932,10 +1929,9 @@
static int get_square_dline(game_state *state, char *dline_array,
int i, int j, enum dline_desc desc)
{
- const struct dline *dl = get_dline(desc);
- assert(dl->dx != -1 && dl->dy != -1);
+ CHECK_DLINE_SENSIBLE(desc);
/* fprintf(stderr, "get_square_dline %p [%d,%d] %s\n", dline_array, i, j, DL2STR(desc)); */
- return BIT_SET(dline_array[(i+dl->dx) + (state->w + 1) * (j+dl->dy)],
+ return BIT_SET(dline_array[(i+dlines[desc].dx) + (state->w + 1) * (j+dlines[desc].dy)],
desc);
}
@@ -1946,10 +1942,9 @@
#endif
)
{
- const struct dline *dl = get_dline(desc);
int ret;
- assert(dl->dx != -1 && dl->dy != -1);
- ret = SET_BIT(dline_array[(i+dl->dx) + (state->w + 1) * (j+dl->dy)], desc);
+ CHECK_DLINE_SENSIBLE(desc);
+ ret = SET_BIT(dline_array[(i+dlines[desc].dx) + (state->w + 1) * (j+dlines[desc].dy)], desc);
#ifdef SHOW_WORKING
if (ret)
fprintf(stderr, "set_square_dline %p [%d,%d] %s (%s)\n", dline_array, i, j, DL2STR(desc), reason);
@@ -1980,10 +1975,9 @@
static int dline_both_unknown(const game_state *state, int i, int j,
enum dline_desc desc)
{
- const struct dline *dl = get_dline(desc);
return
- (get_line_status_from_point(state, i, j, dl->dir1) == LINE_UNKNOWN) &&
- (get_line_status_from_point(state, i, j, dl->dir2) == LINE_UNKNOWN);
+ (get_line_status_from_point(state, i, j, dlines[desc].dir1) == LINE_UNKNOWN) &&
+ (get_line_status_from_point(state, i, j, dlines[desc].dir2) == LINE_UNKNOWN);
}
#define SQUARE_DLINES \
@@ -2143,7 +2137,7 @@
int i, int j, enum line_state line_new)
{
int retval = FALSE;
- const struct dline *dl = get_dline(dd);
+ const struct dline dll = dlines[dd], *dl = &dll;
#if 0
fprintf(stderr, "square_setboth_in_dline %s [%d,%d] to %d\n",
@@ -2150,7 +2144,7 @@
DL2STR(dd), i, j, line_new);
#endif
- assert(dl->dx != -1 && dl->dy != -1);
+ CHECK_DLINE_SENSIBLE(dd);
retval |=
set_line_bydot(sstate, i+dl->dx, j+dl->dy, dl->dir1, line_new);
@@ -2651,7 +2645,6 @@
enum direction dir1, dir2;
int can1, can2, inv1, inv2;
int diff = DIFF_MAX;
- const struct dline *dl;
enum dline_desc dd;
FORALL_SQUARES(state, i, j) {
@@ -2774,7 +2767,7 @@
continue;
FORALL_DOT_DLINES(dd) {
- dl = get_dline(dd);
+ const struct dline dll = dlines[dd], *dl = &dll;
if (i == 0 && (dl->dir1 == LEFT || dl->dir2 == LEFT))
continue;
if (i == w && (dl->dir1 == RIGHT || dl->dir2 == RIGHT))