Fix ScorePosition() for MiniShogi.
authorYann Dirson <ydirson@free.fr>
Wed, 28 Sep 2011 21:25:24 +0000 (23:25 +0200)
committerYann Dirson <ydirson@free.fr>
Mon, 4 Nov 2013 21:55:37 +0000 (22:55 +0100)
Gcc's stack-smashing protection combined with glibc's -D_FORTIFY_SOURCE
detected with a segfault that we were using 9x9-board offsets on our 5x5
board.  This patch abstracts the relevant hardcoded constants and provides
correct values for MiniShogi.

gnushogi/eval.c

index 272db91..987b304 100644 (file)
@@ -2241,6 +2241,21 @@ ScorePosition(short side)
             ScoreCaptures();
         }
 
+#ifndef MINISHOGI
+# define BLACKHOME_START  0
+# define BLACKHOME_END   26
+# define MIDDLEROW_START 36
+# define MIDDLEROW_END   44
+# define WHITEHOME_START 54
+# define WHITEHOME_END   80
+#else
+# define BLACKHOME_START  0
+# define BLACKHOME_END    4
+# define MIDDLEROW_START 10
+# define MIDDLEROW_END   14
+# define WHITEHOME_START 19
+# define WHITEHOME_END   24
+#endif
         for (c1 = black, c2 = white; c1 <= white; c1++, c2--)
         {
             short n;
@@ -2248,7 +2263,7 @@ ScorePosition(short side)
             fv1 = fvalue[c1];
 
             /* Score fifth rank */
-            for (sq = 36, n = 0; sq <= 44; sq++)
+            for (sq = MIDDLEROW_START, n = 0; sq <= MIDDLEROW_END; sq++)
             {
                 if ((color[sq] == c1) || (attack[c1][sq] != 0))
                     n++;
@@ -2260,8 +2275,8 @@ ScorePosition(short side)
             }
 
             /* Score holes */
-            for (sq = ((c1 == black) ? 0 : 54), n = 0;
-                 sq <= ((c1 == black) ? 26 : 80);
+            for (sq = ((c1 == black) ? BLACKHOME_START : WHITEHOME_START), n = 0;
+                 sq <= ((c1 == black) ? BLACKHOME_END : WHITEHOME_END);
                  sq++)
             {
                 if (board[sq] == no_piece && attack[c1][sq] == 0)