Fix undo, remove commands
authorH.G. Muller <h.g.muller@hccnet.nl>
Sat, 11 Jan 2014 14:34:36 +0000 (15:34 +0100)
committerH.G. Muller <h.g.muller@hccnet.nl>
Sat, 11 Jan 2014 14:34:36 +0000 (15:34 +0100)
The Init() done in the framework of takebacks did refer to the variant
by V_number, rather than by table index. A V_number as now been added
to signify 'same variant'.

hachu.c

diff --git a/hachu.c b/hachu.c
index 778182b..f5fd5d2 100644 (file)
--- a/hachu.c
+++ b/hachu.c
@@ -432,7 +432,7 @@ typedef struct {
   char *array; // initial position\r
 } VariantDesc;\r
 \r
-typedef enum { V_CHESS, V_SHO, V_CHU, V_DAI, V_DADA, V_MAKA, V_TAI, V_KYOKU, V_TENJIKU, V_SHATRANJ, V_MAKRUK, V_LION } Variant;\r
+typedef enum { V_SAME, V_CHESS, V_SHO, V_CHU, V_DAI, V_DADA, V_MAKA, V_TAI, V_KYOKU, V_TENJIKU, V_SHATRANJ, V_MAKRUK, V_LION } Variant;\r
 \r
 VariantDesc variants[] = {\r
   { 16,  8,  8, 1, V_CHESS,  "normal", chessArray }, // FIDE\r
@@ -890,11 +890,13 @@ Init (int var)
   int i, j, k;\r
   PieceDesc *pawn;\r
 \r
+  if(var != V_SAME) { // the following should be already set if we stay in same variant (for TakeBack)\r
   currentVariant = variants[var].varNr;\r
   bWidth  = variants[var].boardWidth;\r
   bHeight = variants[var].boardRanks;\r
   zone    = variants[var].zoneDepth;\r
   array   = variants[var].array;\r
+  }\r
   bsize = bWidth*bHeight;\r
   chuFlag = (currentVariant == V_CHU || currentVariant == V_LION);\r
   tenFlag = (currentVariant == V_TENJIKU);\r
@@ -2485,7 +2487,7 @@ printf("# ponder=%s\n", MoveToText(pv[1],0));
     { // reset the game and then replay it to the desired point\r
       int last, stm;\r
       last = moveNr - n; if(last < 0) last = 0;\r
-      Init(currentVariant); stm = Setup2(startPos);\r
+      Init(V_SAME); stm = Setup2(startPos);\r
 printf("# setup done");fflush(stdout);\r
       for(moveNr=0; moveNr<last; moveNr++) stm = MakeMove2(stm, gameMove[moveNr]),printf("make %2d: %x\n", moveNr, gameMove[moveNr]);\r
       return stm;\r