Prevent transmission of spurious promo char to other engine
[xboard.git] / backend.c
index 7174d7a..b124be6 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -131,6 +131,7 @@ extern int gettimeofday(struct timeval *, struct timezone *);
 #ifdef ENABLE_NLS 
 # define _(s) gettext (s) 
 # define N_(s) gettext_noop (s) 
+# define T_(s) gettext(s)
 #else 
 # ifdef WIN32
 #   define _(s) T_(s)
@@ -138,6 +139,7 @@ extern int gettimeofday(struct timeval *, struct timezone *);
 # else
 #   define _(s) (s) 
 #   define N_(s) s 
+#   define T_(s) s
 # endif
 #endif 
 
@@ -719,8 +721,8 @@ InitBackEnd1()
     /* [AS] Adjudication threshold */
     adjudicateLossThreshold = appData.adjudicateLossThreshold;
     
-    first.which = "first";
-    second.which = "second";
+    first.which = _("first");
+    second.which = _("second");
     first.maybeThinking = second.maybeThinking = FALSE;
     first.pr = second.pr = NoProc;
     first.isr = second.isr = NULL;
@@ -4573,6 +4575,10 @@ SendMoveToICS(moveType, fromX, fromY, toX, toY)
       /* POP Fabien */
        sprintf(user_move, "o-o-o\n");
        break;
+      case WhiteNonPromotion:
+      case BlackNonPromotion:
+        sprintf(user_move, "%c%c%c%c=\n", AAA + fromX, ONE + fromY, AAA + toX, ONE + toY);
+        break;
       case WhitePromotionQueen:
       case BlackPromotionQueen:
       case WhitePromotionRook:
@@ -4801,6 +4807,8 @@ ParseOneMove(move, moveNum, moveType, fromX, fromY, toX, toY, promoChar)
       case BlackPromotionKnight:
       case WhitePromotionKing:
       case BlackPromotionKing:
+      case WhiteNonPromotion:
+      case BlackNonPromotion:
       case NormalMove:
       case WhiteCapturesEnPassant:
       case BlackCapturesEnPassant:
@@ -6721,7 +6729,7 @@ Adjudicate(ChessProgramState *cps)
                           SendMoveToProgram(forwardMostMove-1, engineOpponent); // make sure opponent gets move
                          ShowMove(fromX, fromY, toX, toY); /*updates currentMove*/
                          GameEnds( WhiteOnMove(forwardMostMove) ? BlackWins : WhiteWins, 
-                                                       _("Xboard adjudication: King destroyed"), GE_XBOARD );
+                                                       "Xboard adjudication: King destroyed", GE_XBOARD );
                          return 1;
                     }
                }
@@ -6735,7 +6743,7 @@ Adjudicate(ChessProgramState *cps)
                           SendMoveToProgram(forwardMostMove-1, engineOpponent); // make sure opponent gets to see move
                          ShowMove(fromX, fromY, toX, toY); /*updates currentMove*/
                          GameEnds( WhiteOnMove(forwardMostMove) ? WhiteWins : BlackWins, 
-                                                       _("Xboard adjudication: Bare king"), GE_XBOARD );
+                                                       "Xboard adjudication: Bare king", GE_XBOARD );
                          return 1;
                     }
                  } else
@@ -6748,7 +6756,7 @@ Adjudicate(ChessProgramState *cps)
                              SendMoveToProgram(forwardMostMove-1, engineOpponent); // make sure opponent gets move
                            ShowMove(fromX, fromY, toX, toY); /*updates currentMove*/
                            GameEnds( nrW > 1 ? WhiteWins : nrB > 1 ? BlackWins : GameIsDrawn, 
-                                                       _("Xboard adjudication: Bare king"), GE_XBOARD );
+                                                       "Xboard adjudication: Bare king", GE_XBOARD );
                            return 1;
                        }
                  }
@@ -6764,7 +6772,7 @@ Adjudicate(ChessProgramState *cps)
                        if(MateTest(boards[i], PosFlags(i)) == MT_CHECK)
                            checkCnt++;
                        if(checkCnt >= 2) {
-                           reason = _("Xboard adjudication: 3rd check");
+                           reason = "Xboard adjudication: 3rd check";
                            boards[forwardMostMove][EP_STATUS] = EP_CHECKMATE;
                            break;
                        }
@@ -6775,7 +6783,7 @@ Adjudicate(ChessProgramState *cps)
                break;
              case MT_STALEMATE:
              case MT_STAINMATE:
-               reason = _("Xboard adjudication: Stalemate");
+               reason = "Xboard adjudication: Stalemate";
                if((signed char)boards[forwardMostMove][EP_STATUS] != EP_CHECKMATE) { // [HGM] don't touch win through baring or K-capt
                    boards[forwardMostMove][EP_STATUS] = EP_STALEMATE;   // default result for stalemate is draw
                    if(gameInfo.variant == VariantLosers  || gameInfo.variant == VariantGiveaway) // [HGM] losers:
@@ -6789,7 +6797,7 @@ Adjudicate(ChessProgramState *cps)
                }
                break;
              case MT_CHECKMATE:
-               reason = _("Xboard adjudication: Checkmate");
+               reason = "Xboard adjudication: Checkmate";
                boards[forwardMostMove][EP_STATUS] = (gameInfo.variant == VariantLosers ? EP_WINS : EP_CHECKMATE);
                break;
            }
@@ -6827,7 +6835,7 @@ Adjudicate(ChessProgramState *cps)
                           SendMoveToProgram(forwardMostMove-1, engineOpponent); /* make sure opponent gets to see last move */
                         }
                          ShowMove(fromX, fromY, toX, toY); /*updates currentMove*/
-                         GameEnds( GameIsDrawn, _("Xboard adjudication: Insufficient mating material"), GE_XBOARD );
+                         GameEnds( GameIsDrawn, "Xboard adjudication: Insufficient mating material", GE_XBOARD );
                          return 1;
                      }
                 }
@@ -6848,7 +6856,7 @@ Adjudicate(ChessProgramState *cps)
                            SendMoveToProgram(forwardMostMove-1, engineOpponent); /* make sure opponent gets to see move */
                          }
                           ShowMove(fromX, fromY, toX, toY); /*updates currentMove*/
-                          GameEnds( GameIsDrawn, _("Xboard adjudication: Trivial draw"), GE_XBOARD );
+                          GameEnds( GameIsDrawn, "Xboard adjudication: Trivial draw", GE_XBOARD );
                           return 1;
                      }
                 } else moveCount = 6;
@@ -6896,7 +6904,7 @@ Adjudicate(ChessProgramState *cps)
                             && appData.drawRepeats > 1) {
                              /* adjudicate after user-specified nr of repeats */
                             int result = GameIsDrawn;
-                            char *details = _("XBoard adjudication: repetition draw");
+                            char *details = "XBoard adjudication: repetition draw";
                             if(gameInfo.variant == VariantXiangqi && appData.testLegality) { 
                                // [HGM] xiangqi: check for forbidden perpetuals
                                int m, ourPerpetual = 1, hisPerpetual = 1;
@@ -6910,7 +6918,7 @@ Adjudicate(ChessProgramState *cps)
                                                                        ourPerpetual, hisPerpetual);
                                if(ourPerpetual && !hisPerpetual) { // we are actively checking him: forfeit
                                    result = WhiteOnMove(forwardMostMove) ? WhiteWins : BlackWins;
-                                   details = _("Xboard adjudication: perpetual checking");
+                                   details = "Xboard adjudication: perpetual checking";
                                } else
                                if(hisPerpetual && !ourPerpetual) { // he is checking us, but did not repeat yet
                                    break; // (or we would have caught him before). Abort repetition-checking loop.
@@ -6921,7 +6929,7 @@ Adjudicate(ChessProgramState *cps)
                                    ourPerpetual = PerpetualChase(k+1, forwardMostMove);
                                    if(ourPerpetual && !hisPerpetual) { // we are actively chasing him: forfeit
                                        result = WhiteOnMove(forwardMostMove) ? WhiteWins : BlackWins;
-                                       details = _("Xboard adjudication: perpetual chasing");
+                                       details = "Xboard adjudication: perpetual chasing";
                                    } else
                                    if(hisPerpetual && !ourPerpetual)   // he is chasing us, but did not repeat yet
                                        break; // Abort repetition-checking loop.
@@ -6970,7 +6978,7 @@ Adjudicate(ChessProgramState *cps)
                           SendMoveToProgram(forwardMostMove-1, engineOpponent); /* make sure opponent gets to see move */
                         }
                          ShowMove(fromX, fromY, toX, toY); /*updates currentMove*/
-                         GameEnds( GameIsDrawn, _("Xboard adjudication: 50-move rule"), GE_XBOARD );
+                         GameEnds( GameIsDrawn, "Xboard adjudication: 50-move rule", GE_XBOARD );
                          return 1;
                 }
 
@@ -7004,7 +7012,7 @@ Adjudicate(ChessProgramState *cps)
                      SendMoveToProgram(forwardMostMove-1, engineOpponent); /* make sure opponent gets to see move */
                    }
                    ShowMove(fromX, fromY, toX, toY); /*updates currentMove*/
-                   GameEnds( GameIsDrawn, _("Xboard adjudication: long game"), GE_XBOARD );
+                   GameEnds( GameIsDrawn, "Xboard adjudication: long game", GE_XBOARD );
                    return 1;
                }
        return 0;
@@ -7275,7 +7283,7 @@ FakeBookMove: // [HGM] book: we jump here to simulate machine moves after book h
                ShowMove(fromX, fromY, toX, toY); /*updates currentMove*/
 
                 GameEnds( WhiteOnMove(forwardMostMove) ? WhiteWins : BlackWins, 
-                    _("Xboard adjudication"), 
+                    "Xboard adjudication", 
                     GE_XBOARD );
 
                 return;
@@ -8168,6 +8176,8 @@ ParseGameHistory(game)
          case BlackPromotionKnight:
          case WhitePromotionKing:
          case BlackPromotionKing:
+         case WhiteNonPromotion:
+         case BlackNonPromotion:
          case NormalMove:
          case WhiteCapturesEnPassant:
          case BlackCapturesEnPassant:
@@ -9644,6 +9654,8 @@ LoadGameOneMove(readAhead)
       case BlackPromotionKnight:
       case WhitePromotionKing:
       case BlackPromotionKing:
+      case WhiteNonPromotion:
+      case BlackNonPromotion:
       case NormalMove:
       case WhiteKingSideCastle:
       case WhiteQueenSideCastle:
@@ -14012,7 +14024,7 @@ DisplayMove(moveNumber)
            sprintf(res, " %s", PGNResult(gameInfo.result));
        } else {
            sprintf(res, " {%s} %s",
-                   gameInfo.resultDetails, PGNResult(gameInfo.result));
+                   T_(gameInfo.resultDetails), PGNResult(gameInfo.result));
        }
     } else {
        res[0] = NULLCHAR;