ref: 6db5cdadd09fad0c8373e32dcfc7ab5b8bcb74e6
parent: da014d23dad4bcff0215d9ba7758652c85c06a20
author: Ben Harris <[email protected]>
date: Thu Jun 22 19:08:19 EDT 2023
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.
--- a/blackbox.c
+++ b/blackbox.c
@@ -905,7 +905,7 @@
#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 && \