shithub: puzzles

Download patch

ref: 6db5cdadd09fad0c8373e32dcfc7ab5b8bcb74e6
parent: da014d23dad4bcff0215d9ba7758652c85c06a20
author: Ben Harris <bjh21@bjh21.me.uk>
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 && \