new developer release
[xboard.git] / backend.c
index 35cc84d..3fa521b 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -5,7 +5,7 @@
  * Massachusetts.
  *
  * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,
- * 2007, 2008, 2009 Free Software Foundation, Inc.
+ * 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
  *
  * Enhancements Copyright 2005 Alessandro Scotti
  *
@@ -12023,11 +12023,13 @@ EditPositionDone(Boolean fakeRights)
       kf = NoRights; err = 0;
       for(f=BOARD_RGHT-1; f>=0; f--)
        if(rightsBoard[0][f] == 2) { if(kf != NoRights) err=10; boards[0][CASTLING][2] = kf = f; }
+      if(kf == NoRights) kf = 4;
       for(f=BOARD_RGHT-1; f>=0; f--)
        if(rightsBoard[0][f] == 1) { err++; boards[0][CASTLING][f<kf] = f; }
       kf = NoRights; err = 0;
       for(f=BOARD_RGHT-1; f>=0; f--)
        if(rightsBoard[BOARD_HEIGHT-1][f] == 2) { if(kf != NoRights) err=10; boards[0][CASTLING][5] = kf = f; }
+      if(kf == NoRights) kf = 4;
       for(f=BOARD_RGHT-1; f>=0; f--)
        if(rightsBoard[BOARD_HEIGHT-1][f] == 1) { err++; boards[0][CASTLING][3+(f<kf)] = f; }
       if(err + 2 > nrCastlingRights) DisplayError("unclear castling rights", 0);
@@ -12183,6 +12185,18 @@ EditPositionMenuEvent(selection, x, y)
        SetBlackToPlayEvent();
        break;
 
+      case NoRights:
+       rightsBoard[y][x] = 0;
+        break;
+
+      case GrantRights:
+        { ChessSquare p = boards[0][y][x];
+         rightsBoard[y][x] = 1;
+         if(p == WhiteKing || p == WhiteUnicorn || p == BlackKing || p == BlackUnicorn)
+               rightsBoard[y][x] = 2;
+       }
+        break;
+
       case EmptySquare:
        if (gameMode == IcsExamining) {
             if (x < BOARD_LEFT || x >= BOARD_RGHT) break; // [HGM] holdings