From 6db5cdadd09fad0c8373e32dcfc7ab5b8bcb74e6 Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Thu, 22 Jun 2023 23:08:19 +0100 Subject: [PATCH] Blackbox: correct FROMDRAW() macro for C division semantics Integer division in C rounds towards zero, so if you want it to consistently round down you need to ensure that the arguments are positive. FROMDRAW() didn't do that, so clicks off the top and left corners of the grid got treated as being in the top row or left column (row and column 0) rather than ignored. This commit fixes the macro so that it offsets its argument upward before the division and compensates afterwards. --- blackbox.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blackbox.c b/blackbox.c index 01833f4..2025d1d 100644 --- a/blackbox.c +++ b/blackbox.c @@ -905,7 +905,7 @@ done: #define TILE_SIZE (ds->tilesize) #define TODRAW(x) ((TILE_SIZE * (x)) + (TILE_SIZE / 2)) -#define FROMDRAW(x) (((x) - (TILE_SIZE / 2)) / TILE_SIZE) +#define FROMDRAW(x) (((x) + (TILE_SIZE / 2)) / TILE_SIZE - 1) #define CAN_REVEAL(state) ((state)->nguesses >= (state)->minballs && \ (state)->nguesses <= (state)->maxballs && \