Merge branch 'v4.8.x' into master
authorArun Persaud <arun@nubati.net>
Fri, 8 May 2015 15:00:11 +0000 (08:00 -0700)
committerArun Persaud <arun@nubati.net>
Fri, 8 May 2015 15:00:11 +0000 (08:00 -0700)
62 files changed:
Makefile.am
args.h
backend.c
book.c
common.h
conf/chu
conf/shogi
configure.ac
dialogs.c
dialogs.h
draw.c
gamelist.c
gtk/xboard.c
gtk/xoptions.c
menus.c
moves.c
moves.h
ngamelist.c
osxapp/OSX-theme/gtk-2.0/assets/handle.png [deleted file]
osxapp/OSX-theme/gtk-2.0/assets/l-checkbox-checked-18.png [deleted file]
osxapp/OSX-theme/gtk-2.0/assets/l-checkbox-checked-insensitive-18.png [deleted file]
osxapp/OSX-theme/gtk-2.0/assets/l-checkbox-unchecked-18.png [deleted file]
osxapp/OSX-theme/gtk-2.0/assets/l-checkbox-unchecked-insensitive-18.png [deleted file]
osxapp/OSX-theme/gtk-2.0/assets/l-radio-selected-18.png [deleted file]
osxapp/OSX-theme/gtk-2.0/assets/l-radio-selected-insensitive-18.png [deleted file]
osxapp/OSX-theme/gtk-2.0/assets/l-radio-unselected-18.png [deleted file]
osxapp/OSX-theme/gtk-2.0/assets/l-radio-unselected-insensitive-18.png [deleted file]
osxapp/OSX-theme/gtk-2.0/assets/notebook-gap-bottom.png [deleted file]
osxapp/OSX-theme/gtk-2.0/assets/notebook-gap-left.png [deleted file]
osxapp/OSX-theme/gtk-2.0/assets/notebook-gap-right.png [deleted file]
osxapp/OSX-theme/gtk-2.0/assets/notebook-gap-top.png [deleted file]
osxapp/OSX-theme/gtk-2.0/assets/notebook.png [deleted file]
osxapp/OSX-theme/gtk-2.0/assets/null.png [deleted file]
osxapp/OSX-theme/gtk-2.0/assets/scroll-background.png [deleted file]
osxapp/OSX-theme/gtk-2.0/assets/slider-horizontal.png [deleted file]
osxapp/OSX-theme/gtk-2.0/assets/tab-bottom-active.png [deleted file]
osxapp/OSX-theme/gtk-2.0/assets/tab-bottom.png [deleted file]
osxapp/OSX-theme/gtk-2.0/assets/tab-left-active.png [deleted file]
osxapp/OSX-theme/gtk-2.0/assets/tab-left.png [deleted file]
osxapp/OSX-theme/gtk-2.0/assets/tab-right-active.png [deleted file]
osxapp/OSX-theme/gtk-2.0/assets/tab-right.png [deleted file]
osxapp/OSX-theme/gtk-2.0/assets/tab-top-active.png [deleted file]
osxapp/OSX-theme/gtk-2.0/assets/tab-top.png [deleted file]
osxapp/OSX-theme/gtk-2.0/assets/toolbar.png [deleted file]
osxapp/OSX-theme/gtk-2.0/gtkrc [deleted file]
parser.c
po/LINGUAS
po/da.po
po/de.po
po/es.po
po/fr.po [new file with mode: 0644]
po/it.po
po/nl.po
po/pl.po
po/ru.po
po/tr.po
po/uk.po
po/vi.po
po/xboard.pot
po/zh_CN.po
po/zh_HK.po
po/zh_TW.po

index 61bf260..eaba7f4 100644 (file)
@@ -179,7 +179,7 @@ dist_xiangqi_DATA = themes/xiangqi/BlackAdvisor.svg  themes/xiangqi/WhiteAdvisor
 ### directory and files for themes (and other) configuration files
 
 themesdir = $(datadir)/games/xboard/themes/conf
-dist_themes_DATA = conf/shogi conf/xq conf/chu conf/ics conf/mini conf/mini.fen conf/sho conf/sho.fen
+dist_themes_DATA = conf/shogi conf/xq conf/ics conf/mini conf/mini.fen conf/sho conf/sho.fen
 
 ### directory and files for pixmaps
 
diff --git a/args.h b/args.h
index 8e824a5..7e39735 100644 (file)
--- a/args.h
+++ b/args.h
@@ -230,6 +230,7 @@ ArgDescriptor argDescriptors[] = {
   { "dropMenu", ArgBoolean, (void *) &appData.dropMenu, TRUE, (ArgIniType) FALSE },
   { "pieceMenu", ArgBoolean, (void *) &appData.pieceMenu, TRUE, (ArgIniType) TRUE },
   { "sweepPromotions", ArgBoolean, (void *) &appData.sweepSelect, TRUE, (ArgIniType) FALSE },
+  { "monoMouse", ArgBoolean, (void *) &appData.monoMouse, XBOARD, (ArgIniType) FALSE },
   { "remoteShell", ArgFilename, (void *) &appData.remoteShell, FALSE, (ArgIniType) REMOTE_SHELL },
   { "rsh", ArgFilename, (void *) &appData.remoteShell, FALSE, INVALID },
   { "remoteUser", ArgString, (void *) &appData.remoteUser, FALSE, (ArgIniType) "" },
@@ -633,6 +634,7 @@ ArgDescriptor argDescriptors[] = {
   { "oneClickMove", ArgBoolean, (void *) &appData.oneClick, TRUE, (ArgIniType) FALSE },
   { "boardWidth", ArgInt, (void *) &appData.NrFiles, FALSE, (ArgIniType) -1 },
   { "boardHeight", ArgInt, (void *) &appData.NrRanks, FALSE, (ArgIniType) -1 },
+  { "rankOffset", ArgInt, (void *) &appData.rankOffset, FALSE, (ArgIniType) 0 },
   { "holdingsSize", ArgInt, (void *) &appData.holdingsSize, FALSE, (ArgIniType) -1 },
   { "defaultMatchGames", ArgInt, (void *) &appData.defaultMatchGames, TRUE, (ArgIniType) 10 },
   { "matchPause", ArgInt, (void *) &appData.matchPause, TRUE, (ArgIniType) 10000 },
index e68b3af..295b600 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -5141,10 +5141,17 @@ SendMoveToProgram (int moveNum, ChessProgramState *cps)
        else SendToProgram(moveList[moveNum], cps);
       } else
       if(moveList[moveNum][4] == ';') { // [HGM] lion: move is double-step over intermediate square
-         snprintf(buf, MSG_SIZ, "%c%d%c%d,%c%d%c%d\n", moveList[moveNum][0], moveList[moveNum][1] - '0', // convert to two moves
-                                              moveList[moveNum][5], moveList[moveNum][6] - '0',
-                                              moveList[moveNum][5], moveList[moveNum][6] - '0',
-                                              moveList[moveNum][2], moveList[moveNum][3] - '0');
+       char *m = moveList[moveNum];
+       if((boards[moveNum][m[6]-ONE][m[5]-AAA] < BlackPawn) == (boards[moveNum][m[1]-ONE][m[0]-AAA] < BlackPawn)) // move is kludge to indicate castling
+         snprintf(buf, MSG_SIZ, "%c%d%c%d,%c%d%c%d\n", m[0], m[1] - '0', // convert to two moves
+                                              m[2], m[3] - '0',
+                                              m[5], m[6] - '0',
+                                              m[2] + (m[0] > m[5] ? 1 : -1), m[3] - '0');
+       else
+         snprintf(buf, MSG_SIZ, "%c%d%c%d,%c%d%c%d\n", m[0], m[1] - '0', // convert to two moves
+                                              m[5], m[6] - '0',
+                                              m[5], m[6] - '0',
+                                              m[2], m[3] - '0');
          SendToProgram(buf, cps);
       } else
       if(BOARD_HEIGHT > 10) { // [HGM] big: convert ranks to double-digit where needed
@@ -5327,11 +5334,11 @@ UploadGameEvent ()
     SendToICS(ics_type == ICS_ICC ? "tag result Game in progress\n" : "commit\n");
 }
 
-int killX = -1, killY = -1; // [HGM] lion: used for passing e.p. capture square to MakeMove
+int killX = -1, killY = -1, kill2X, kill2Y; // [HGM] lion: used for passing e.p. capture square to MakeMove
 int legNr = 1;
 
 void
-CoordsToComputerAlgebraic (int rf, int ff, int rt, int ft, char promoChar, char move[7])
+CoordsToComputerAlgebraic (int rf, int ff, int rt, int ft, char promoChar, char move[9])
 {
     if (rf == DROP_RANK) {
       if(ff == EmptySquare) sprintf(move, "@@@@\n"); else // [HGM] pass
@@ -5341,7 +5348,10 @@ CoordsToComputerAlgebraic (int rf, int ff, int rt, int ft, char promoChar, char
        if (promoChar == 'x' || promoChar == NULLCHAR) {
          sprintf(move, "%c%c%c%c\n",
                     AAA + ff, ONE + rf, AAA + ft, ONE + rt);
-         if(killX >= 0 && killY >= 0) sprintf(move+4, ";%c%c\n", AAA + killX, ONE + killY);
+         if(killX >= 0 && killY >= 0) {
+           sprintf(move+4, ";%c%c\n", AAA + killX, ONE + killY);
+           if(kill2X >= 0 && kill2Y >= 0) sprintf(move+7, "%c%c\n", AAA + killX, ONE + killY);
+         }
        } else {
            sprintf(move, "%c%c%c%c%c\n",
                     AAA + ff, ONE + rf, AAA + ft, ONE + rt, promoChar);
@@ -5392,8 +5402,8 @@ Sweep (int step)
        if(step && !(toggleFlag && Partner(&promoSweep))) promoSweep -= step;
        if(promoSweep == EmptySquare) promoSweep = BlackPawn; // wrap
        else if((int)promoSweep == -1) promoSweep = WhiteKing;
-       else if(promoSweep == BlackPawn && step < 0) promoSweep = WhitePawn;
-       else if(promoSweep == WhiteKing && step > 0) promoSweep = BlackKing;
+       else if(promoSweep == BlackPawn && step < 0 && !toggleFlag) promoSweep = WhitePawn;
+       else if(promoSweep == WhiteKing && step > 0 && !toggleFlag) promoSweep = BlackKing;
        if(!step) step = -1;
     } while(PieceToChar(promoSweep) == '.' || PieceToChar(promoSweep) == '~' || promoSweep == pawn ||
            !toggleFlag && PieceToChar(promoSweep) == '+' || // skip promoted versions of other
@@ -5520,6 +5530,12 @@ ParseOneMove (char *move, int moveNum, ChessMove *moveType, int *fromX, int *fro
       case BlackASideCastleFR:
       /* End of code added by Tord */
       case IllegalMove:                /* bug or odd chess variant */
+       if(currentMoveString[1] == '@') { // illegal drop
+         *fromX = WhiteOnMove(moveNum) ?
+           (int) CharToPiece(ToUpper(currentMoveString[0])) :
+           (int) CharToPiece(ToLower(currentMoveString[0]));
+         goto drop;
+       }
         *fromX = currentMoveString[0] - AAA;
         *fromY = currentMoveString[1] - ONE;
         *toX = currentMoveString[2] - AAA;
@@ -5546,6 +5562,7 @@ ParseOneMove (char *move, int moveNum, ChessMove *moveType, int *fromX, int *fro
        *fromX = *moveType == WhiteDrop ?
          (int) CharToPiece(ToUpper(currentMoveString[0])) :
          (int) CharToPiece(ToLower(currentMoveString[0]));
+      drop:
        *fromY = DROP_RANK;
         *toX = currentMoveString[2] - AAA;
         *toY = currentMoveString[3] - ONE;
@@ -5933,23 +5950,40 @@ SetUpShuffle (Board board, int number)
 }
 
 int
-SetCharTable (char *table, const char * map)
+ptclen (const char *s, char *escapes)
+{
+    int n = 0;
+    if(!*escapes) return strlen(s);
+    while(*s) n += (*s != ':' && !strchr(escapes, *s)), s++;
+    return n;
+}
+
+int
+SetCharTableEsc (unsigned char *table, const char * map, char * escapes)
 /* [HGM] moved here from winboard.c because of its general usefulness */
 /*       Basically a safe strcpy that uses the last character as King */
 {
     int result = FALSE; int NrPieces;
 
-    if( map != NULL && (NrPieces=strlen(map)) <= (int) EmptySquare
+    if( map != NULL && (NrPieces=ptclen(map, escapes)) <= (int) EmptySquare
                     && NrPieces >= 12 && !(NrPieces&1)) {
-        int i; /* [HGM] Accept even length from 12 to 34 */
+        int i, j = 0; /* [HGM] Accept even length from 12 to 88 */
 
         for( i=0; i<(int) EmptySquare; i++ ) table[i] = '.';
         for( i=0; i<NrPieces/2-1; i++ ) {
-            table[i] = map[i];
-            table[i + (int)BlackPawn - (int) WhitePawn] = map[i+NrPieces/2];
+            char *p;
+            if(map[j] == ':' && *escapes) i = CHUPROMOTED WhitePawn, j++;
+            table[i] = map[j++];
+            if(p = strchr(escapes, map[j])) j++, table[i] += 64*(p - escapes + 1);
+        }
+        table[(int) WhiteKing]  = map[j++];
+        for( i=0; i<NrPieces/2-1; i++ ) {
+            char *p;
+            if(map[j] == ':' && *escapes) i = CHUPROMOTED WhitePawn, j++;
+            table[WHITE_TO_BLACK i] = map[j++];
+            if(p = strchr(escapes, map[j])) j++, table[WHITE_TO_BLACK i] += 64*(p - escapes + 1);
         }
-        table[(int) WhiteKing]  = map[NrPieces/2-1];
-        table[(int) BlackKing]  = map[NrPieces-1];
+        table[(int) BlackKing]  = map[j++];
 
         result = TRUE;
     }
@@ -5957,6 +5991,12 @@ SetCharTable (char *table, const char * map)
     return result;
 }
 
+int
+SetCharTable (unsigned char *table, const char * map)
+{
+    return SetCharTableEsc(table, map, "");
+}
+
 void
 Prelude (Board board)
 {      // [HGM] superchess: random selection of exo-pieces
@@ -6130,8 +6170,8 @@ InitPosition (int redraw)
       gameInfo.boardWidth  = 12;
       gameInfo.boardHeight = 12;
       nrCastlingRights = 0;
-      SetCharTable(pieceToChar, "P.BRQSEXOGCATHD.VMLIFN+.++.++++++++++.+++++K"
-                                "p.brqsexogcathd.vmlifn+.++.++++++++++.+++++k");
+      SetCharTableEsc(pieceToChar, "P.BRQSEXOGCATHD.VMLIFN:+.++.++++++++++.+++++K"
+                                   "p.brqsexogcathd.vmlifn:+.++.++++++++++.+++++k", SUFFIXES);
       break;
     case VariantCourier:
       pieces = CourierArray;
@@ -6217,7 +6257,7 @@ InitPosition (int redraw)
 
     /* User pieceToChar list overrules defaults */
     if(appData.pieceToCharTable != NULL)
-        SetCharTable(pieceToChar, appData.pieceToCharTable);
+        SetCharTableEsc(pieceToChar, appData.pieceToCharTable, SUFFIXES);
 
     for( j=0; j<BOARD_WIDTH; j++ ) { ChessSquare s = EmptySquare;
 
@@ -6553,8 +6593,8 @@ HasPromotionChoice (int fromX, int fromY, int toX, int toY, char *promoChoice, i
         int p = piece >= BlackPawn ? BLACK_TO_WHITE piece : piece;
         promotionZoneSize = BOARD_HEIGHT/3;
         highestPromotingPiece = (p >= WhiteLion || PieceToChar(piece + 22) == '.') ? WhitePawn : WhiteLion;
-    } else if(gameInfo.variant == VariantShogi || gameInfo.variant == VariantChuChess) {
-        promotionZoneSize = BOARD_HEIGHT/3;
+    } else if(gameInfo.variant == VariantShogi) {
+        promotionZoneSize = BOARD_HEIGHT/3 +(BOARD_HEIGHT == 8);
         highestPromotingPiece = (int)WhiteAlfil;
     } else if(gameInfo.variant == VariantMakruk || gameInfo.variant == VariantGrand || gameInfo.variant == VariantChuChess) {
         promotionZoneSize = 3;
@@ -6950,7 +6990,7 @@ UserMoveEvent(int fromX, int fromY, int toX, int toY, int promoChar)
        /* EditPosition, empty square, or different color piece;
           click-click move is possible */
        if (toX == -2 || toY == -2) {
-           boards[0][fromY][fromX] = EmptySquare;
+           boards[0][fromY][fromX] = (boards[0][fromY][fromX] == EmptySquare ? DarkSquare : EmptySquare);
            DrawPosition(FALSE, boards[currentMove]);
            return;
        } else if (toX >= 0 && toY >= 0) {
@@ -7021,6 +7061,7 @@ UserMoveEvent(int fromX, int fromY, int toX, int toY, int promoChar)
     if(addToBookFlag) { // adding moves to book
        char buf[MSG_SIZ], move[MSG_SIZ];
         CoordsToAlgebraic(boards[currentMove], PosFlags(currentMove), fromY, fromX, toY, toX, promoChar, move);
+       if(killX >= 0) snprintf(move, MSG_SIZ, "%c%dx%c%d-%c%d", fromX + AAA, fromY + ONE - '0', killX + AAA, killY + ONE - '0', toX + AAA, toY + ONE - '0');
        snprintf(buf, MSG_SIZ, "  0.0%%     1  %s\n", move);
        AddBookMove(buf);
        addToBookFlag = FALSE;
@@ -7325,8 +7366,8 @@ CanPromote (ChessSquare piece, int y)
          gameInfo.variant == VariantMakruk) return FALSE;
        return (piece == BlackPawn && y <= zone ||
                piece == WhitePawn && y >= BOARD_HEIGHT-1-zone ||
-               piece == BlackLance && y == 1 ||
-               piece == WhiteLance && y == BOARD_HEIGHT-2 );
+               piece == BlackLance && y <= zone ||
+               piece == WhiteLance && y >= BOARD_HEIGHT-1-zone );
 }
 
 void
@@ -7369,6 +7410,8 @@ void ReportClick(char *action, int x, int y)
        SendToProgram(buf, &first);
 }
 
+Boolean right; // instructs front-end to use button-1 events as if they were button 3
+
 void
 LeftClick (ClickType clickType, int xPix, int yPix)
 {
@@ -7379,13 +7422,6 @@ LeftClick (ClickType clickType, int xPix, int yPix)
     ChessSquare piece;
     static TimeMark lastClickTime, prevClickTime;
 
-    if(SeekGraphClick(clickType, xPix, yPix, 0)) return;
-
-    prevClickTime = lastClickTime; GetTimeMark(&lastClickTime);
-
-    if (clickType == Press) ErrorPopDown();
-    lastClickType = clickType, lastLeftX = xPix, lastLeftY = yPix; // [HGM] alien: remember state
-
     x = EventToSquare(xPix, BOARD_WIDTH);
     y = EventToSquare(yPix, BOARD_HEIGHT);
     if (!flipView && y >= 0) {
@@ -7395,6 +7431,20 @@ LeftClick (ClickType clickType, int xPix, int yPix)
        x = BOARD_WIDTH - 1 - x;
     }
 
+    if(appData.monoMouse && gameMode == EditPosition && fromX < 0 && clickType == Press && boards[currentMove][y][x] == EmptySquare) {
+       static int dummy;
+       RightClick(clickType, xPix, yPix, &dummy, &dummy);
+       right = TRUE;
+       return;
+    }
+
+    if(SeekGraphClick(clickType, xPix, yPix, 0)) return;
+
+    prevClickTime = lastClickTime; GetTimeMark(&lastClickTime);
+
+    if (clickType == Press) ErrorPopDown();
+    lastClickType = clickType, lastLeftX = xPix, lastLeftY = yPix; // [HGM] alien: remember state
+
     if(promoSweep != EmptySquare) { // up-click during sweep-select of promo-piece
        defaultPromoChoice = promoSweep;
        promoSweep = EmptySquare;   // terminate sweep
@@ -7488,7 +7538,7 @@ LeftClick (ClickType clickType, int xPix, int yPix)
            return;
        }
     }
-
+printf("to click %d,%d\n",x,y);
     /* fromX != -1 */
     if (clickType == Press && gameMode != EditPosition) {
        ChessSquare fromP;
@@ -7503,6 +7553,7 @@ LeftClick (ClickType clickType, int xPix, int yPix)
        toP = boards[currentMove][y][x];
        frc = appData.fischerCastling || gameInfo.variant == VariantSChess;
        if( (killX < 0 || x != fromX || y != fromY) && // [HGM] lion: do not interpret igui as deselect!
+           marker[y][x] == 0 && // if engine told we can move to here, do it even if own piece
           ((WhitePawn <= fromP && fromP <= WhiteKing &&
             WhitePawn <= toP && toP <= WhiteKing &&
             !(fromP == WhiteKing && toP == WhiteRook && frc) &&
@@ -7534,7 +7585,7 @@ LeftClick (ClickType clickType, int xPix, int yPix)
                else gatingPiece = doubleClick ? fromP : EmptySquare;
                fromX = x;
                fromY = y; dragging = 1;
-               ReportClick("lift", x, y);
+               if(!second) ReportClick("lift", x, y);
                MarkTargetSquares(0);
                DragPieceBegin(xPix, yPix, FALSE);
                if(appData.sweepSelect && CanPromote(piece = boards[currentMove][y][x], y)) {
@@ -7550,8 +7601,14 @@ LeftClick (ClickType clickType, int xPix, int yPix)
        // ignore clicks on holdings
        if(x < BOARD_LEFT || x >= BOARD_RGHT) return;
     }
+printf("A type=%d\n",clickType);
 
-    if (clickType == Release && x == fromX && y == fromY && killX < 0) {
+    if(x == fromX && y == fromY && gameMode == EditPosition && SubtractTimeMarks(&lastClickTime, &prevClickTime) < 200) {
+       gatingPiece = boards[currentMove][fromY][fromX]; // prepare to copy rather than move
+       return;
+    }
+
+    if (clickType == Release && x == fromX && y == fromY && killX < 0 && !sweepSelecting) {
        DragPieceEnd(xPix, yPix); dragging = 0;
        if(clearFlag) {
            // a deferred attempt to click-click move an empty square on top of a piece
@@ -7565,10 +7622,9 @@ LeftClick (ClickType clickType, int xPix, int yPix)
            /* Undo animation damage if any */
            DrawPosition(FALSE, NULL);
        }
-       if (second || sweepSelecting) {
+       if (second) {
            /* Second up/down in same square; just abort move */
-           if(sweepSelecting) DrawPosition(FALSE, boards[currentMove]);
-           second = sweepSelecting = 0;
+           second = 0;
            fromX = fromY = -1;
            gatingPiece = EmptySquare;
            MarkTargetSquares(1);
@@ -7583,7 +7639,7 @@ LeftClick (ClickType clickType, int xPix, int yPix)
     }
 
     clearFlag = 0;
-
+printf("B\n");
     if(gameMode != EditPosition && !appData.testLegality && !legal[y][x] &&
        fromX >= BOARD_LEFT && fromX < BOARD_RGHT && (x != killX || y != killY) && !sweepSelecting) {
        if(dragging) DragPieceEnd(xPix, yPix), dragging = 0;
@@ -7591,7 +7647,7 @@ LeftClick (ClickType clickType, int xPix, int yPix)
        DrawPosition(TRUE, NULL);
        return; // ignore to-click
     }
-
+printf("(%d,%d)-(%d,%d) %d %d\n",fromX,fromY,toX,toY,x,y);
     /* we now have a different from- and (possibly off-board) to-square */
     /* Completed move */
     if(!sweepSelecting) {
@@ -7656,7 +7712,9 @@ LeftClick (ClickType clickType, int xPix, int yPix)
        if(marker[y][x] == 5) { // [HGM] lion: this was the release of a to-click or drag on a cyan square
          dragging *= 2;            // flag button-less dragging if we are dragging
          MarkTargetSquares(1);
-         if(x == killX && y == killY) killX = killY = -1; else {
+         if(x == killX && y == killY) killX = kill2X, killY = kill2Y, kill2X = kill2Y = -1; // cancel last kill
+         else {
+           kill2X = killX; kill2Y = killY;
            killX = x; killY = y;     //remeber this square as intermediate
            ReportClick("put", x, y); // and inform engine
            ReportClick("lift", x, y);
@@ -7703,7 +7761,9 @@ LeftClick (ClickType clickType, int xPix, int yPix)
 
     if(gatingPiece != EmptySquare && gameInfo.variant == VariantSChess) promoChoice = ToLower(PieceToChar(gatingPiece));
 
-    if (HasPromotionChoice(fromX, fromY, toX, toY, &promoChoice, appData.sweepSelect)) {
+    if(legal[toY][toX] == 2) promoChoice = ToLower(PieceToChar(defaultPromoChoice)); // highlight-induced promotion
+
+    if (legal[toY][toX] == 2 && !appData.sweepSelect || HasPromotionChoice(fromX, fromY, toX, toY, &promoChoice, appData.sweepSelect)) {
        SetHighlights(fromX, fromY, toX, toY);
         MarkTargetSquares(1);
        if(gameInfo.variant == VariantSuper || gameInfo.variant == VariantGreat || gameInfo.variant == VariantGrand) {
@@ -8639,17 +8699,23 @@ FakeBookMove: // [HGM] book: we jump here to simulate machine moves after book h
         if(cps->alphaRank) AlphaRank(machineMove, 4);
 
        // [HGM] lion: (some very limited) support for Alien protocol
-       killX = killY = -1;
+       killX = killY = kill2X = kill2Y = -1;
        if(machineMove[strlen(machineMove)-1] == ',') { // move ends in coma: non-final leg of composite move
            safeStrCpy(firstLeg, machineMove, 20); // just remember it for processing when second leg arrives
            return;
-       } else if(firstLeg[0]) { // there was a previous leg;
-           // only support case where same piece makes two step (and don't even test that!)
+       }
+       if(p = strchr(machineMove, ',')) {         // we got both legs in one (happens on book move)
+           safeStrCpy(firstLeg, machineMove, 20); // kludge: fake we received the first leg earlier, and clip it off
+           safeStrCpy(machineMove, firstLeg + (p - machineMove) + 1, 20);
+       }
+       if(firstLeg[0]) { // there was a previous leg;
+           // only support case where same piece makes two step
            char buf[20], *p = machineMove+1, *q = buf+1, f;
            safeStrCpy(buf, machineMove, 20);
            while(isdigit(*q)) q++; // find start of to-square
            safeStrCpy(machineMove, firstLeg, 20);
-           while(isdigit(*p)) p++;
+           while(isdigit(*p)) p++; // to-square of first leg (which is now copied to machineMove)
+           if(*p == *buf)          // if first-leg to not equal to second-leg from first leg says unmodified (assume it ia King move of castling)
            safeStrCpy(p, q, 20); // glue to-square of second leg to from-square of first, to process over-all move
            sscanf(buf, "%c%d", &f, &killY); killX = f - AAA; killY -= ONE - '0'; // pass intermediate square to MakeMove in global
            firstLeg[0] = NULLCHAR;
@@ -8661,8 +8727,8 @@ FakeBookMove: // [HGM] book: we jump here to simulate machine moves after book h
          snprintf(buf1, MSG_SIZ*10, _("Illegal move \"%s\" from %s machine"),
                    machineMove, _(cps->which));
            DisplayMoveError(buf1);
-            snprintf(buf1, MSG_SIZ*10, "Xboard: Forfeit due to invalid move: %s (%c%c%c%c via %c%c) res=%d",
-                    machineMove, fromX+AAA, fromY+ONE, toX+AAA, toY+ONE, killX+AAA, killY+ONE, moveType);
+            snprintf(buf1, MSG_SIZ*10, "Xboard: Forfeit due to invalid move: %s (%c%c%c%c via %c%c, %c%c) res=%d",
+                    machineMove, fromX+AAA, fromY+ONE, toX+AAA, toY+ONE, killX+AAA, killY+ONE, kill2X+AAA, kill2Y+ONE, moveType);
            if (gameMode == TwoMachinesPlay) {
              GameEnds(machineWhite ? BlackWins : WhiteWins,
                        buf1, GE_XBOARD);
@@ -8877,7 +8943,7 @@ FakeBookMove: // [HGM] book: we jump here to simulate machine moves after book h
       if(appData.icsActive || forwardMostMove != 0 || cps != &first) return;
       *buf = NULLCHAR;
       if(sscanf(message, "setup (%s", buf) == 1) {
-        s = 8 + strlen(buf), buf[s-9] = NULLCHAR, SetCharTable(pieceToChar, buf);
+        s = 8 + strlen(buf), buf[s-9] = NULLCHAR, SetCharTableEsc(pieceToChar, buf, SUFFIXES);
         ASSIGN(appData.pieceToCharTable, buf);
       }
       dummy = sscanf(message+s, "%dx%d+%d_%s", &w, &h, &hand, varName);
@@ -8888,7 +8954,7 @@ FakeBookMove: // [HGM] book: we jump here to simulate machine moves after book h
            appData.NrFiles = w; appData.NrRanks = h; appData.holdingsSize = hand;
            if(dummy == 4) gameInfo.variant = StringToVariant(varName);     // parent variant
           InitPosition(1); // calls InitDrawingSizes to let new parameters take effect
-          if(*buf) SetCharTable(pieceToChar, buf); // do again, for it was spoiled by InitPosition
+          if(*buf) SetCharTableEsc(pieceToChar, buf, SUFFIXES); // do again, for it was spoiled by InitPosition
           startedFromSetupPosition = FALSE;
         }
       }
@@ -8901,9 +8967,10 @@ FakeBookMove: // [HGM] book: we jump here to simulate machine moves after book h
     }
     if(sscanf(message, "piece %s %s", buf2, buf1) == 2) {
       ChessSquare piece = WhitePawn;
-      char *p=buf2;
-      if(*p == '+') piece = CHUPROMOTED WhitePawn, p++;
-      piece += CharToPiece(*p) - WhitePawn;
+      char *p=buf2, *q, *s = SUFFIXES, ID = *p;
+      if(*p == '+') piece = CHUPROMOTED WhitePawn, ID = *++p;
+      if(q = strchr(s, p[1])) ID += 64*(q - s + 1), p++;
+      piece += CharToPiece(ID) - WhitePawn;
       if(cps != &first || appData.testLegality && *engineVariant == NULLCHAR
       /* always accept definition of  */       && piece != WhiteFalcon && piece != BlackFalcon
       /* wild-card pieces.            */       && piece != WhiteCobra  && piece != BlackCobra
@@ -9038,7 +9105,7 @@ FakeBookMove: // [HGM] book: we jump here to simulate machine moves after book h
        return;
     }
     if(!strncmp(message, "highlight ", 10)) {
-       if(appData.testLegality && appData.markers) return;
+       if(appData.testLegality && !*engineVariant && appData.markers) return;
        MarkByFEN(message+10); // [HGM] alien: allow engine to mark board squares
        return;
     }
@@ -9891,14 +9958,14 @@ ParseGameHistory (char *game)
 void
 ApplyMove (int fromX, int fromY, int toX, int toY, int promoChar, Board board)
 {
-  ChessSquare captured = board[toY][toX], piece, king; int p, oldEP = EP_NONE, berolina = 0;
+  ChessSquare captured = board[toY][toX], piece, pawn, king, killed, killed2; int p, rookX, oldEP, epRank, berolina = 0;
   int promoRank = gameInfo.variant == VariantMakruk || gameInfo.variant == VariantGrand || gameInfo.variant == VariantChuChess ? 3 : 1;
 
     /* [HGM] compute & store e.p. status and castling rights for new position */
     /* we can always do that 'in place', now pointers to these rights are passed to ApplyMove */
 
       if(gameInfo.variant == VariantBerolina) berolina = EP_BEROLIN_A;
-      oldEP = (signed char)board[EP_STATUS];
+      oldEP = (signed char)board[EP_FILE]; epRank = board[EP_RANK];
       board[EP_STATUS] = EP_NONE;
       board[EP_FILE] = board[EP_RANK] = 100;
 
@@ -9913,10 +9980,14 @@ ApplyMove (int fromX, int fromY, int toX, int toY, int promoChar, Board board)
 //      ChessSquare victim;
       int i;
 
-      if( killX >= 0 && killY >= 0 ) // [HGM] lion: Lion trampled over something
+      if( killX >= 0 && killY >= 0 ) { // [HGM] lion: Lion trampled over something
 //           victim = board[killY][killX],
+           killed = board[killY][killX],
            board[killY][killX] = EmptySquare,
            board[EP_STATUS] = EP_CAPTURE;
+           if( kill2X >= 0 && kill2Y >= 0)
+             killed2 = board[kill2Y][kill2X], board[kill2Y][kill2X] = EmptySquare;
+      }
 
       if( board[toY][toX] != EmptySquare ) {
            board[EP_STATUS] = EP_CAPTURE;
@@ -9927,15 +9998,18 @@ ApplyMove (int fromX, int fromY, int toX, int toY, int promoChar, Board board)
            }
       }
 
-      if( board[fromY][fromX] == WhiteLance || board[fromY][fromX] == BlackLance ) {
-           if( gameInfo.variant != VariantSuper && gameInfo.variant != VariantShogi )
-               board[EP_STATUS] = EP_PAWN_MOVE; // Lance is Pawn-like in most variants
-      } else
-      if( board[fromY][fromX] == WhitePawn ) {
+      pawn = board[fromY][fromX];
+      if( pawn == WhiteLance || pawn == BlackLance ) {
+           if( gameInfo.variant != VariantSuper && gameInfo.variant != VariantChu ) {
+               if(gameInfo.variant == VariantSpartan) board[EP_STATUS] = EP_PAWN_MOVE; // in Spartan no e.p. rights must be set
+               else pawn += WhitePawn - WhiteLance; // Lance is Pawn-like in most variants, so let Pawn code treat it by this kludge
+           }
+      }
+      if( pawn == WhitePawn ) {
            if(fromY != toY) // [HGM] Xiangqi sideway Pawn moves should not count as 50-move breakers
               board[EP_STATUS] = EP_PAWN_MOVE;
-           if( toY-fromY==2) {
-               board[EP_FILE] = (fromX + toX)/2; board[EP_RANK] = (fromY + toY)/2;
+           if( toY-fromY>=2) {
+               board[EP_FILE] = (fromX + toX)/2; board[EP_RANK] = toY - 1 | 128*(toY - fromY > 2);
                if(toX>BOARD_LEFT   && board[toY][toX-1] == BlackPawn &&
                        gameInfo.variant != VariantBerolina || toX < fromX)
                      board[EP_STATUS] = toX | berolina;
@@ -9944,11 +10018,11 @@ ApplyMove (int fromX, int fromY, int toX, int toY, int promoChar, Board board)
                      board[EP_STATUS] = toX;
           }
       } else
-      if( board[fromY][fromX] == BlackPawn ) {
+      if( pawn == BlackPawn ) {
            if(fromY != toY) // [HGM] Xiangqi sideway Pawn moves should not count as 50-move breakers
               board[EP_STATUS] = EP_PAWN_MOVE;
-           if( toY-fromY== -2) {
-               board[EP_FILE] = (fromX + toX)/2; board[EP_RANK] = (fromY + toY)/2;
+           if( toY-fromY<= -2) {
+               board[EP_FILE] = (fromX + toX)/2; board[EP_RANK] = toY + 1 | 128*(fromY - toY > 2);
                if(toX>BOARD_LEFT   && board[toY][toX-1] == WhitePawn &&
                        gameInfo.variant != VariantBerolina || toX < fromX)
                      board[EP_STATUS] = toX | berolina;
@@ -9983,6 +10057,12 @@ ApplyMove (int fromX, int fromY, int toX, int toY, int promoChar, Board board)
      if(gameInfo.variant == VariantKnightmate)
          king += (int) WhiteUnicorn - (int) WhiteKing;
 
+    if(pieceDesc[piece] && killX >= 0 && strchr(pieceDesc[piece], 'O') // Betza castling-enabled
+       && (piece < BlackPawn ? killed < BlackPawn : killed >= BlackPawn)) {    // and tramples own
+       board[toY][toX] = piece; board[fromY][fromX] = EmptySquare;
+       board[toY][toX + (killX < fromX ? 1 : -1)] = killed;
+        board[EP_STATUS] = EP_NONE; // capture was fake!
+    } else
     /* Code added by Tord: */
     /* FRC castling assumed when king captures friendly rook. [HGM] or RxK for S-Chess */
     if (board[fromY][fromX] == WhiteKing && board[toY][toX] == WhiteRook ||
@@ -10010,17 +10090,19 @@ ApplyMove (int fromX, int fromY, int toX, int toY, int promoChar, Board board)
     } else if (board[fromY][fromX] == king
         && fromX != BOARD_LEFT && fromX != BOARD_RGHT-1 // [HGM] cylinder */
         && toY == fromY && toX > fromX+1) {
+       for(rookX=fromX+1; board[toY][rookX] == EmptySquare && rookX < BOARD_RGHT-1; rookX++); // castle with nearest piece
+        board[fromY][toX-1] = board[fromY][rookX];
+        board[fromY][rookX] = EmptySquare;
        board[fromY][fromX] = EmptySquare;
         board[toY][toX] = king;
-        board[toY][toX-1] = board[fromY][BOARD_RGHT-1];
-        board[fromY][BOARD_RGHT-1] = EmptySquare;
     } else if (board[fromY][fromX] == king
         && fromX != BOARD_LEFT && fromX != BOARD_RGHT-1 // [HGM] cylinder */
                && toY == fromY && toX < fromX-1) {
+       for(rookX=fromX-1; board[toY][rookX] == EmptySquare && rookX > 0; rookX--); // castle with nearest piece
+        board[fromY][toX+1] = board[fromY][rookX];
+        board[fromY][rookX] = EmptySquare;
        board[fromY][fromX] = EmptySquare;
         board[toY][toX] = king;
-        board[toY][toX+1] = board[fromY][BOARD_LEFT];
-        board[fromY][BOARD_LEFT] = EmptySquare;
     } else if ((board[fromY][fromX] == WhitePawn && gameInfo.variant != VariantXiangqi ||
                 board[fromY][fromX] == WhiteLance && gameInfo.variant != VariantSuper && gameInfo.variant != VariantChu)
                && toY >= BOARD_HEIGHT-promoRank && promoChar // defaulting to Q is done elsewhere
@@ -10035,12 +10117,14 @@ ApplyMove (int fromX, int fromY, int toX, int toY, int promoChar, Board board)
               && (toX != fromX)
                && gameInfo.variant != VariantXiangqi
                && gameInfo.variant != VariantBerolina
-              && (board[fromY][fromX] == WhitePawn)
+              && (pawn == WhitePawn)
               && (board[toY][toX] == EmptySquare)) {
        board[fromY][fromX] = EmptySquare;
-       board[toY][toX] = WhitePawn;
-       captured = board[toY - 1][toX];
-       board[toY - 1][toX] = EmptySquare;
+       board[toY][toX] = piece;
+       if(toY == epRank - 128 + 1)
+           captured = board[toY - 2][toX], board[toY - 2][toX] = EmptySquare;
+       else
+           captured = board[toY - 1][toX], board[toY - 1][toX] = EmptySquare;
     } else if ((fromY == BOARD_HEIGHT-4)
               && (toX == fromX)
                && gameInfo.variant == VariantBerolina
@@ -10057,17 +10141,19 @@ ApplyMove (int fromX, int fromY, int toX, int toY, int promoChar, Board board)
     } else if (board[fromY][fromX] == king
         && fromX != BOARD_LEFT && fromX != BOARD_RGHT-1 // [HGM] cylinder */
                && toY == fromY && toX > fromX+1) {
+       for(rookX=toX+1; board[toY][rookX] == EmptySquare && rookX < BOARD_RGHT - 1; rookX++);
+        board[fromY][toX-1] = board[fromY][rookX];
+        board[fromY][rookX] = EmptySquare;
        board[fromY][fromX] = EmptySquare;
         board[toY][toX] = king;
-        board[toY][toX-1] = board[fromY][BOARD_RGHT-1];
-        board[fromY][BOARD_RGHT-1] = EmptySquare;
     } else if (board[fromY][fromX] == king
         && fromX != BOARD_LEFT && fromX != BOARD_RGHT-1 // [HGM] cylinder */
                && toY == fromY && toX < fromX-1) {
+       for(rookX=toX-1; board[toY][rookX] == EmptySquare && rookX > 0; rookX--);
+        board[fromY][toX+1] = board[fromY][rookX];
+        board[fromY][rookX] = EmptySquare;
        board[fromY][fromX] = EmptySquare;
         board[toY][toX] = king;
-        board[toY][toX+1] = board[fromY][BOARD_LEFT];
-        board[fromY][BOARD_LEFT] = EmptySquare;
     } else if (fromY == 7 && fromX == 3
               && board[fromY][fromX] == BlackKing
               && toY == 7 && toX == 5) {
@@ -10096,12 +10182,14 @@ ApplyMove (int fromX, int fromY, int toX, int toY, int promoChar, Board board)
               && (toX != fromX)
                && gameInfo.variant != VariantXiangqi
                && gameInfo.variant != VariantBerolina
-              && (board[fromY][fromX] == BlackPawn)
+              && (pawn == BlackPawn)
               && (board[toY][toX] == EmptySquare)) {
        board[fromY][fromX] = EmptySquare;
-       board[toY][toX] = BlackPawn;
-       captured = board[toY + 1][toX];
-       board[toY + 1][toX] = EmptySquare;
+       board[toY][toX] = piece;
+       if(toY == epRank - 128 - 1)
+           captured = board[toY + 2][toX], board[toY + 2][toX] = EmptySquare;
+       else
+           captured = board[toY + 1][toX], board[toY + 1][toX] = EmptySquare;
     } else if ((fromY == 3)
               && (toX == fromX)
                && gameInfo.variant == VariantBerolina
@@ -12027,8 +12115,13 @@ LoadGameOneMove (ChessMove readAhead)
            if (appData.debugMode)
              fprintf(debugFP, "Parsed %s into IllegalMove %s\n",
                      yy_text, currentMoveString);
-            fromX = currentMoveString[0] - AAA;
-            fromY = currentMoveString[1] - ONE;
+            if(currentMoveString[1] == '@') {
+                fromX = CharToPiece(WhiteOnMove(currentMove) ? ToUpper(currentMoveString[0]) : ToLower(currentMoveString[0]));
+                fromY = DROP_RANK;
+            } else {
+                fromX = currentMoveString[0] - AAA;
+                fromY = currentMoveString[1] - ONE;
+            }
             toX = currentMoveString[2] - AAA;
             toY = currentMoveString[3] - ONE;
            promoChar = currentMoveString[4];
@@ -12645,7 +12738,10 @@ LoadGame (FILE *f, int gameNumber, char *title, int useList)
     int numPGNTags = 0;
     int err, pos = -1;
     GameMode oldGameMode;
-    VariantClass oldVariant = gameInfo.variant; /* [HGM] PGNvariant */
+    VariantClass v, oldVariant = gameInfo.variant; /* [HGM] PGNvariant */
+    char oldName[MSG_SIZ];
+
+    safeStrCpy(oldName, engineVariant, MSG_SIZ); v = oldVariant;
 
     if (appData.debugMode)
        fprintf(debugFP, "LoadGame(): on entry, gameMode %d\n", gameMode);
@@ -13003,6 +13099,10 @@ LoadGame (FILE *f, int gameNumber, char *title, int useList)
        StartChessProgram(&first);
     }
     InitChessProgram(&first, FALSE);
+    if(gameInfo.variant == VariantUnknown && *oldName) {
+       safeStrCpy(engineVariant, oldName, MSG_SIZ);
+       gameInfo.variant = v;
+    }
     SendToProgram("force\n", &first);
     if (startedFromSetupPosition) {
        SendBoard(&first, forwardMostMove);
@@ -13195,8 +13295,8 @@ LoadPosition (FILE *f, int positionNumber, char *title)
        DisplayError(_("Position not found in file"), 0);
        return FALSE;
     }
-    // [HGM] FEN can begin with digit, any piece letter valid in this variant, or a + for Shogi promoted pieces
-    fenMode = line[0] >= '0' && line[0] <= '9' || line[0] == '+' || CharToPiece(line[0]) != EmptySquare;
+    // [HGM] FEN can begin with digit, any piece letter valid in this variant, or a + for Shogi promoted pieces (or * for blackout)
+    fenMode = line[0] >= '0' && line[0] <= '9' || line[0] == '+' || line[0] == '*' || CharToPiece(line[0]) != EmptySquare;
 
     if (pn >= 2) {
        if (fenMode || line[0] == '#') pn--;
@@ -15104,7 +15204,7 @@ EditPositionMenuEvent (ChessSquare selection, int x, int y)
                                     AAA + x, ONE + y);
                            SendToICS(buf);
                        }
-                   } else {
+                   } else if(boards[0][y][x] != DarkSquare) {
                        if(boards[0][y][x] != p) nonEmpty++;
                        boards[0][y][x] = p;
                    }
@@ -17788,6 +17888,7 @@ PositionToFEN (int move, char *overrideCastling, int moveCounts)
                     piece = (ChessSquare)(CHUDEMOTED piece);
                 }
                 *p++ = (piece == DarkSquare ? '*' : PieceToChar(piece));
+                if(*p = PieceSuffix(piece)) p++;
                 if(p[-1] == '~') {
                     /* [HGM] flag promoted pieces as '<promoted>~' (Crazyhouse) */
                     p[-1] = PieceToChar((ChessSquare)(CHUDEMOTED piece));
@@ -17957,7 +18058,7 @@ PositionToFEN (int move, char *overrideCastling, int moveCounts)
 Boolean
 ParseFEN (Board board, int *blackPlaysFirst, char *fen, Boolean autoSize)
 {
-    int i, j, k, w=0, subst=0, shuffle=0;
+    int i, j, k, w=0, subst=0, shuffle=0, wKingRank = -1, bKingRank = -1;
     char *p, c;
     int emptycount, virgin[BOARD_FILES];
     ChessSquare piece;
@@ -18007,13 +18108,20 @@ ParseFEN (Board board, int *blackPlaysFirst, char *fen, Boolean autoSize)
                 if (i != 0  && i != BOARD_HEIGHT-1) return FALSE; // only on back-rank
                board[i][(j++)+gameInfo.holdingsWidth] = ClearBoard; p++; subst++; // placeHolder
             } else if (*p == '+' || isalpha(*p)) {
+               char *q, *s = SUFFIXES;
                 if (j >= gameInfo.boardWidth) return FALSE;
                 if(*p=='+') {
-                    piece = CharToPiece(*++p);
+                    char c = *++p;
+                    if(q = strchr(s, p[1])) p++;
+                    piece = CharToPiece(c + (q ? 64*(q - s + 1) : 0));
                     if(piece == EmptySquare) return FALSE; /* unknown piece */
                     piece = (ChessSquare) (CHUPROMOTED piece ); p++;
                     if(PieceToChar(piece) != '+') return FALSE; /* unpromotable piece */
-                } else piece = CharToPiece(*p++);
+                } else {
+                    char c = *p++;
+                   if(q = strchr(s, *p)) p++;
+                   piece = CharToPiece(c + (q ? 64*(q - s + 1) : 0));
+               }
 
                 if(piece==EmptySquare) return FALSE; /* unknown piece */
                 if(*p == '~') { /* [HGM] make it a promoted piece for Crazyhouse */
@@ -18022,6 +18130,8 @@ ParseFEN (Board board, int *blackPlaysFirst, char *fen, Boolean autoSize)
                     p++;
                 }
                 board[i][(j++)+gameInfo.holdingsWidth] = piece;
+                if(piece == WhiteKing) wKingRank = i;
+                if(piece == BlackKing) bKingRank = i;
            } else {
                return FALSE;
            }
@@ -18121,6 +18231,13 @@ ParseFEN (Board board, int *blackPlaysFirst, char *fen, Boolean autoSize)
     /* [HGM] We NO LONGER ignore the rest of the FEN notation */
     /* return the extra info in global variiables             */
 
+    while(*p==' ') p++;
+
+    if(!isdigit(*p) && *p != '-') { // we seem to have castling rights. Make sure they are on the rank the King actually is.
+        if(wKingRank >= 0) for(i=0; i<3; i++) castlingRank[i] = wKingRank;
+        if(bKingRank >= 0) for(i=3; i<6; i++) castlingRank[i] = bKingRank;
+    }
+
     /* set defaults in case FEN is incomplete */
     board[EP_STATUS] = EP_UNKNOWN;
     for(i=0; i<nrCastlingRights; i++ ) {
@@ -18137,7 +18254,6 @@ ParseFEN (Board board, int *blackPlaysFirst, char *fen, Boolean autoSize)
                                  && board[castlingRank[5]][initialRights[5]] != BlackKing) board[CASTLING][5] = NoRights;
     FENrulePlies = 0;
 
-    while(*p==' ') p++;
     if(nrCastlingRights) {
       int fischer = 0;
       if(gameInfo.variant == VariantSChess) for(i=0; i<BOARD_FILES; i++) virgin[i] = 0;
@@ -18154,8 +18270,8 @@ ParseFEN (Board board, int *blackPlaysFirst, char *fen, Boolean autoSize)
         int c = *p++, whiteKingFile=NoRights, blackKingFile=NoRights;
 
         for(i=BOARD_LEFT; i<BOARD_RGHT; i++) {
-            if(board[BOARD_HEIGHT-1][i] == BlackKing) blackKingFile = i;
-            if(board[0             ][i] == WhiteKing) whiteKingFile = i;
+            if(board[castlingRank[5]][i] == BlackKing) blackKingFile = i;
+            if(board[castlingRank[2]][i] == WhiteKing) whiteKingFile = i;
         }
         if(gameInfo.variant == VariantTwoKings || gameInfo.variant == VariantKnightmate)
             whiteKingFile = blackKingFile = BOARD_WIDTH >> 1; // for these variant scanning fails
@@ -18165,7 +18281,7 @@ ParseFEN (Board board, int *blackPlaysFirst, char *fen, Boolean autoSize)
                                      && board[BOARD_HEIGHT-1][blackKingFile] != BlackKing) blackKingFile = NoRights;
         switch(c) {
           case'K':
-              for(i=BOARD_RGHT-1; board[0][i]!=WhiteRook && i>whiteKingFile; i--);
+              for(i=BOARD_RGHT-1; board[castlingRank[2]][i]!=WhiteRook && i>whiteKingFile; i--);
               board[CASTLING][0] = i != whiteKingFile ? i : NoRights;
               board[CASTLING][2] = whiteKingFile;
              if(board[CASTLING][0] != NoRights) virgin[board[CASTLING][0]] |= VIRGIN_W;
@@ -18173,7 +18289,7 @@ ParseFEN (Board board, int *blackPlaysFirst, char *fen, Boolean autoSize)
               if(whiteKingFile != BOARD_WIDTH>>1|| i != BOARD_RGHT-1) fischer = 1;
               break;
           case'Q':
-              for(i=BOARD_LEFT;  i<BOARD_RGHT && board[0][i]!=WhiteRook && i<whiteKingFile; i++);
+              for(i=BOARD_LEFT;  i<BOARD_RGHT && board[castlingRank[2]][i]!=WhiteRook && i<whiteKingFile; i++);
               board[CASTLING][1] = i != whiteKingFile ? i : NoRights;
               board[CASTLING][2] = whiteKingFile;
              if(board[CASTLING][1] != NoRights) virgin[board[CASTLING][1]] |= VIRGIN_W;
@@ -18181,7 +18297,7 @@ ParseFEN (Board board, int *blackPlaysFirst, char *fen, Boolean autoSize)
               if(whiteKingFile != BOARD_WIDTH>>1|| i != BOARD_LEFT) fischer = 1;
               break;
           case'k':
-              for(i=BOARD_RGHT-1; board[BOARD_HEIGHT-1][i]!=BlackRook && i>blackKingFile; i--);
+              for(i=BOARD_RGHT-1; board[castlingRank[5]][i]!=BlackRook && i>blackKingFile; i--);
               board[CASTLING][3] = i != blackKingFile ? i : NoRights;
               board[CASTLING][5] = blackKingFile;
              if(board[CASTLING][3] != NoRights) virgin[board[CASTLING][3]] |= VIRGIN_B;
@@ -18189,7 +18305,7 @@ ParseFEN (Board board, int *blackPlaysFirst, char *fen, Boolean autoSize)
               if(blackKingFile != BOARD_WIDTH>>1|| i != BOARD_RGHT-1) fischer = 1;
               break;
           case'q':
-              for(i=BOARD_LEFT; i<BOARD_RGHT && board[BOARD_HEIGHT-1][i]!=BlackRook && i<blackKingFile; i++);
+              for(i=BOARD_LEFT; i<BOARD_RGHT && board[castlingRank[5]][i]!=BlackRook && i<blackKingFile; i++);
               board[CASTLING][4] = i != blackKingFile ? i : NoRights;
               board[CASTLING][5] = blackKingFile;
              if(board[CASTLING][4] != NoRights) virgin[board[CASTLING][4]] |= VIRGIN_B;
diff --git a/book.c b/book.c
index dc81458..090ae1b 100644 (file)
--- a/book.c
+++ b/book.c
@@ -313,8 +313,9 @@ hash (int moveNr)
             ChessSquare p = boards[moveNr][r][f];
            if(f == BOARD_LEFT-1 || f == BOARD_RGHT) continue; // between board and holdings
             if(p != EmptySquare){
-                   int j = (int)p;
+                   int j = (int)p, promoted = 0;
                    j -= (j >= (int)BlackPawn) ? (int)BlackPawn :(int)WhitePawn;
+                   if(j >= CHUPROMOTED WhitePawn) promoted++, j -= CHUPROMOTED WhitePawn;
                    if(j > (int)WhiteQueen) j++;  // make space for King
                    if(j > (int) WhiteKing) j = (int)WhiteQueen + 1;
                    p_enc = 2*j + ((int)p < (int)BlackPawn);
@@ -328,7 +329,8 @@ hash (int moveNr)
                    pieceGroup = p_enc / 12;
                    p_enc      = p_enc % 12;
                    Zobrist = RandomPiece[64*p_enc + (squareNr & 63)];
-                   switch(pieceGroup) {
+                   if(pieceGroup & 4) Zobrist *= 987654321;
+                   switch(pieceGroup & 3) {
                        case 1: // pieces 5-10 (FEACWM)
                                Zobrist = (Zobrist << 16) ^ (Zobrist >> 48);
                                break;
@@ -339,7 +341,9 @@ hash (int moveNr)
                                Zobrist = (Zobrist << 48) ^ (Zobrist >> 16);
                                break;
                    }
-                   if(squareNr >= 64) Zobrist = (Zobrist << 8) ^ (Zobrist >> 56);
+                   if(promoted) Zobrist ^= 123456789*RandomPiece[squareNr & 63];
+                   if(squareNr &  64) Zobrist = (Zobrist << 8) ^ (Zobrist >> 56);
+                   if(squareNr & 128) Zobrist = (Zobrist << 4) ^ (Zobrist >> 60);
                    // holdings have separate (additive) key, to encode presence of multiple pieces on same square
                    if(f == BOARD_LEFT-2) holdingsKey += Zobrist * boards[moveNr][r][f+1]; else
                    if(f == BOARD_RGHT+1) holdingsKey += Zobrist * boards[moveNr][r][f-1]; else
@@ -480,8 +484,11 @@ find_key (FILE *f, uint64 key, entry_t *entry)
     }
 }
 
+static int xStep[] = { 0, 1, 1, 1, 0,-1,-1,-1 };
+static int yStep[] = { 1, 1, 0,-1,-1,-1, 0, 1 };
+
 void
-move_to_string (char move_s[6], uint16 move)
+move_to_string (char move_s[20], uint16 move)
 {
     int f,fr,ff,t,tr,tf,p;
     int width = BOARD_RGHT - BOARD_LEFT, size; // allow for alternative board formats
@@ -495,24 +502,33 @@ move_to_string (char move_s[6], uint16 move)
     t  = move % size;
     tr = t / width;
     tf = t % width;
-    move_s[0] = ff + 'a';
-    move_s[1] = fr + '1' - (BOARD_HEIGHT > 9);
-    move_s[2] = tf + 'a';
-    move_s[3] = tr + '1' - (BOARD_HEIGHT > 9);
+    snprintf(move_s, 9, "%c%d%c%d", ff + 'a', fr + 1 - (BOARD_HEIGHT == 10), tf + 'a', tr + 1 - (BOARD_HEIGHT == 10));
+
+    if(IS_SHOGI(gameInfo.variant) && p) {
+       if(p == 2) p = 10;     // Lion moves, for boards so big that 10 is out of range
+       else if(p != 7) p = 8; // use '+' for all others that do not explicitly defer
+    }
 
     // kludge: encode drops as special promotion code
     if(gameInfo.holdingsSize && p == 9) {
        move_s[0] = f + '@'; // from square encodes piece type
        move_s[1] = '@';     // drop symbol
        p = 0;
+    } else if(p == 10) { // decode Lion move
+       int i = t & 7, j = t >> 3 & 7;
+       tf = ff + xStep[i] + xStep[j]; tr = fr + yStep[i] + yStep[j]; // calculate true to-square
+       snprintf(move_s, 20, "%c%d%c%d,%c%d%c%d", ff + 'a', fr + 1 - (BOARD_HEIGHT == 10),
+                                                 ff + xStep[i] + 'a', fr + yStep[i] + 1 - (BOARD_HEIGHT == 10),
+                                                 ff + xStep[i] + 'a', fr + yStep[i] + 1 - (BOARD_HEIGHT == 10),
+                                                 tf + 'a', tr + 1 - (BOARD_HEIGHT == 10) );
+       p = 0;
     }
 
     // add promotion piece, if any
     if(p){
-        move_s[4] = promote_pieces[p];
-        move_s[5] = '\0';
-    }else{
-        move_s[4] = '\0';
+       int len = strlen(move_s);
+        move_s[len] = promote_pieces[p];
+        move_s[len+1] = '\0';
     }
 
     if(gameInfo.variant != VariantNormal) return;
@@ -563,6 +579,8 @@ GetBookMoves (FILE *f, int moveNr, entry_t entries[], int max)
     return count;
 }
 
+static int dirty;
+
 int
 ReadFromBookFile (int moveNr, char *book, entry_t entries[])
 {   // retrieve all entries for given position from book in 'entries', return number.
@@ -570,6 +588,7 @@ ReadFromBookFile (int moveNr, char *book, entry_t entries[])
     static char curBook[MSG_SIZ];
 
     if(book == NULL) return -1;
+    if(dirty) { if(f) fclose(f); dirty = 0; f = NULL; }
     if(!f || strcmp(book, curBook)){ // keep book file open until book changed
        strncpy(curBook, book, MSG_SIZ);
        if(f) fclose(f);
@@ -714,13 +733,15 @@ char *
 MovesToText(int count, entry_t *entries)
 {
        int i, totalWeight = 0;
-       char algMove[6];
+       char algMove[12];
        char *p = (char*) malloc(40*count+1);
        for(i=0; i<count; i++) totalWeight += entries[i].weight;
        *p = 0;
        for(i=0; i<count; i++) {
-           char buf[MSG_SIZ];
+           char buf[MSG_SIZ], c1, c2, c3; int i1, i2, i3;
            move_to_string(algMove, entries[i].move);
+           if(sscanf(algMove, "%c%d%*c%*d,%c%d%c%d", &c1, &i1, &c2, &i2, &c3, &i3) == 6)
+               snprintf(algMove, 12, "%c%dx%c%d-%c%d", c1, i1, c2, i2, c3, i3); // cast double-moves in format SAN parser will understand
            buf[0] = NULLCHAR;
            if(entries[i].learnCount || entries[i].learnPoints)
                snprintf(buf, MSG_SIZ, " {%d/%d}", entries[i].learnPoints, entries[i].learnCount);
@@ -739,7 +760,20 @@ CoordsToMove (int fromX, int fromY, int toX, int toY, char promoChar)
     int from = fromX - BOARD_LEFT + fromY * width;
     for(i=0; promote_pieces[i]; i++) if(promote_pieces[i] == promoChar) break;
     if(!promote_pieces[i]) i = 0;
+    else if(i == 9 && gameInfo.variant == VariantChu) i = 1; // on 12x12 only 3 promotion codes available, so use 1 to indicate promotion
     if(fromY == DROP_RANK) i = 9, from = ToUpper(PieceToChar(fromX)) - '@';
+    if(killX >= 0) { // multi-leg move
+       int dx = killX - fromX, dy = killY - fromY;
+       for(i=0; i<8; i++) if(dx == xStep[i] && dy == yStep[i]) {
+           int j;
+           dx = toX - killX; dy = toY - killY;
+           for(j=0; j<8; j++) if(dx == xStep[j] && dy == yStep[j]) {
+               // special encoding in to-square, with promoType = 2. Assumes board >= 64 squares!
+               return i + 8*j + (2 * width * BOARD_HEIGHT + from) * width * BOARD_HEIGHT;
+           }
+       }
+       i = 0; // if not a valid Lion move, ignore kill-square and promoChar
+    }
     return to + (i * width * BOARD_HEIGHT + from) * width * BOARD_HEIGHT;
 }
 
@@ -760,6 +794,7 @@ TextToMoves (char *text, int moveNum, entry_t *entries)
            valid = ParseOneMove(text, moveNum, &moveType, &fromX, &fromY, &toX, &toY, &promoChar);
            text = strstr(text, yy_textstr) + strlen(yy_textstr); // skip what we parsed
            if(!valid || moveType != NormalMove && moveType != WhiteDrop && moveType != BlackDrop
+                                               && moveType != FirstLeg
                                                 && moveType != WhitePromotion && moveType != BlackPromotion
                                                 && moveType != WhiteCapturesEnPassant && moveType != BlackCapturesEnPassant
                                                 && moveType != WhiteKingSideCastle && moveType != BlackKingSideCastle
@@ -771,7 +806,7 @@ TextToMoves (char *text, int moveNum, entry_t *entries)
                entries[count].learnPoints = 0;
                entries[count].learnCount  = 0;
            }
-           entries[count].move = CoordsToMove(fromX, fromY, toX, toY, promoChar);
+           entries[count].move = CoordsToMove(fromX, fromY, toX, toY, promoChar); killX = killY = -1;
            entries[count].key  = hashKey;
            entries[count].weight = w;
            count++;
@@ -860,6 +895,7 @@ SaveToBook (char *text)
            writepos += len2;
        } while(len1);
     }
+    dirty = 1;
     fclose(f);
 }
 
@@ -981,7 +1017,6 @@ AddGameToBook (int always)
     }
 
     if(appData.debugMode) fprintf(debugFP, "add game to book (%d-%d)\n", backwardMostMove, forwardMostMove);
-
     for(i=backwardMostMove; i<forwardMostMove && i < 2*appData.bookDepth; i++)
        AddToBook(i, WhiteOnMove(i) ? result : 2-result); // flip result when black moves
 }
index b271821..fa06beb 100644 (file)
--- a/common.h
+++ b/common.h
@@ -186,7 +186,7 @@ typedef char *String;
 #define EP_FILE      CASTLING][(BOARD_FILES-3) /* [HGM] in upper rank        */
 #define EP_STATUS    CASTLING][(BOARD_FILES-2) /* [HGM] in upper rank        */
 #define HOLDINGS_SET CASTLING][(BOARD_FILES-1) /* [HGM] in upper-right corner*/
-#define ONE          ('1'-(BOARD_HEIGHT==10))  /* [HGM] foremost board rank  */
+#define ONE          ('1'-(BOARD_HEIGHT==10)-appData.rankOffset)  /* [HGM] foremost board rank  */
 #define AAA          ('a'-BOARD_LEFT)          /* [HGM] leftmost board file  */
 #define VIRGIN_W                 1             /* [HGM] flags in Board[VIRGIN][X] */
 #define VIRGIN_B                 2
@@ -293,7 +293,7 @@ typedef enum {
     WhiteFerz, WhiteAlfil, WhiteAngel, WhiteMarshall, WhiteWazir, WhiteMan,
     WhiteCannon, WhiteNightrider, WhiteCardinal, WhiteDragon, WhiteGrasshopper,
     WhiteSilver, WhiteFalcon, WhiteLance, WhiteCobra, WhiteUnicorn, WhiteLion,
-    WhiteTokin, WhiteDagger, WhitePCardinal, WhitePDragon, WhiteCat,
+    WhiteTokin, WhiteClaw, WhitePCardinal, WhitePDragon, WhiteCat,
     WhitePSword, WhiteMonarch, WhiteMother, WhiteNothing, WhitePRook, WhitePDagger,
     WhiteDolphin, WhiteStag, WhiteHorned, WhiteEagle, WhiteSword,
     WhiteCrown, WhiteHCrown, WhiteHorse, WhiteDrunk, WhitePBishop, WhiteKing,
@@ -301,7 +301,7 @@ typedef enum {
     BlackFerz, BlackAlfil, BlackAngel, BlackMarshall, BlackWazir, BlackMan,
     BlackCannon, BlackNightrider, BlackCardinal, BlackDragon, BlackGrasshopper,
     BlackSilver, BlackFalcon, BlackLance, BlackCobra, BlackUnicorn, BlackLion,
-    BlackTokin, BlackDagger, BlackPCardinal, BlackPDragon, BlackCat,
+    BlackTokin, BlackClaw, BlackPCardinal, BlackPDragon, BlackCat,
     BlackPSword, BlackMonarch, BlackMother, BlackNothing, BlackPRook, BlackPDagger,
     BlackDolphin, BlackStag, BlackHorned, BlackEagle, BlackSword,
     BlackCrown, BlackHCrown, BlackHorse, BlackDrunk, BlackPBishop, BlackKing,
@@ -689,6 +689,7 @@ typedef struct {
     /* [HGM] Board size */
     int NrFiles;
     int NrRanks;
+    int rankOffset;
     int holdingsSize;
     int matchPause;
     char * pieceToCharTable;
@@ -778,6 +779,7 @@ typedef struct {
     Boolean autoCopyPV;
     Boolean pieceMenu;
     Boolean sweepSelect;
+    Boolean monoMouse;
     Boolean whitePOV;
     Boolean scoreWhite;
     Boolean pvSAN[ENGINES];
index 45195ef..56ad943 100644 (file)
--- a/conf/chu
+++ b/conf/chu
@@ -28,7 +28,7 @@
 ;
 ; make the Lion roar on double captures
 ;
--roarSound roar.wav
+-soundRoar roar.wav
 ;
 ; redefine default engine
 ;
index 90cde91..f808c91 100644 (file)
 -trivialDraws false
 -materialDraws false
 ;
+; direct Load Position to handicap positions
+;
+-positionDir ~~/positions/shogihandicaps
+;
 ; common non-compliant notations
 ;
 -colorNickNames "sg"
index c0058e0..a168db1 100644 (file)
@@ -136,9 +136,9 @@ FRONTEND_CFLAGS=""
 FRONTEND_LIBS=""
 
 AC_ARG_WITH([gtk],
-            [AS_HELP_STRING([--with-gtk],[use GTK front-end])],
+            [AS_HELP_STRING([--with-gtk],[use GTK front-end (default)])],
             [with_GTK=$withval],
-            [with_GTK="no"])
+            [with_GTK="yes"])
 
 AC_ARG_WITH([Xaw3d],
             [AS_HELP_STRING([--with-Xaw3d],[use Xaw3d front-end (not fully supported anymore)])],
@@ -146,9 +146,9 @@ AC_ARG_WITH([Xaw3d],
             [with_Xaw3d="no"])
 
 AC_ARG_WITH([Xaw],
-            [AS_HELP_STRING([--with-Xaw],[use Xaw front-end (default)])],
+            [AS_HELP_STRING([--with-Xaw],[use Xaw front-end])],
             [with_Xaw="$withval"],
-            [with_Xaw="yes"])
+            [with_Xaw="no"])
 
 AC_ARG_WITH([iconsdir],
             [AS_HELP_STRING([--with-iconsdir=DIR],
@@ -552,7 +552,7 @@ CONFIGURE_OPTIONS="prefix=$prefix; datarootdir=$datarootdir; \
 datadir=$datadir; gamedatadir=$GAMEDATADIR; desktopdir=$DESKTOPDIR; \
 mimedir=$MIMEDIR; iconsdir=$ICONSDIR; svgiconsdir=$SVGICONSDIR; infodir=$infodir; \
 sysconfigdir=$sysconfigdir; update_mimedb=$enable_mimedb; NLS=$USE_NLS; \
-GKT=$with_GTK; Xaw3d=$with_Xaw3d; Xaw=$with_Xaw; \
+GTK=$with_GTK; Xaw3d=$with_Xaw3d; Xaw=$with_Xaw; \
 ptys=$enable_ptys; zippy=$enable_zippy; sigint=$enable_sigint"
 
 AC_SUBST(CONFIGURE_OPTIONS)
index 2e63442..86ea1d3 100644 (file)
--- a/dialogs.c
+++ b/dialogs.c
@@ -1900,7 +1900,14 @@ IcsHist (int n, Option *opt, DialogClass dlg)
 
     if(opt != &chatOptions[CHAT_IN] && !(opt == &chatOptions[CHAT_PARTNER] && n == 33)) return 0;
     switch(n) {
+      case 5:
+       if(!hidden) ClearChat();
+       break;
+      case 8:
+       if(!hidden) PaneSwitch();
+       break;
       case 33: // <Esc>
+       if(1) BoardToTop(); else
        if(hidden) BoardToTop();
        else PaneSwitch();
        break;
@@ -1916,7 +1923,7 @@ IcsHist (int n, Option *opt, DialogClass dlg)
         while(!dirty[chat = (chat + 1)%MAX_CHAT]) if(chat == start) break;
        if(!dirty[chat])
         while(!chatPartner[chat = (chat + 1)%MAX_CHAT][0]) if(chat == start) break;
-       if(chat == start && hidden) chat = 0; // if all unused, start left
+       if(!chatPartner[chat][0]) break; // if all unused, ignore
         ChatSwitch(chat + 1);
        break;
       case 1:
@@ -1955,11 +1962,12 @@ ChatOK (int n)
 {   // can only be called through <Enter> in chat-partner text-edit, as there is no OK button
     char buf[MSG_SIZ];
 
-    if(!hidden && (!partner || strcmp(partner, chatPartner[activePartner]))) {
+    if(!hidden && (!partner || strcmp(partner, chatPartner[activePartner]) || !*partner)) {
        safeStrCpy(chatPartner[activePartner], partner, MSG_SIZ);
        SetWidgetText(&chatOptions[CHAT_OUT], "", -1); // clear text if we alter partner
        SetWidgetText(&chatOptions[CHAT_IN], "", ChatDlg); // clear text if we alter partner
        SetWidgetLabel(&chatOptions[activePartner+1], chatPartner[activePartner][0] ? chatPartner[activePartner] : _("New Chat"));
+       if(!*partner) PaneSwitch();
        HardSetFocus(&chatOptions[CHAT_IN], 0);
     }
     if(line[0] || hidden) { // something was typed (for ICS commands we also allow empty line!)
@@ -1972,6 +1980,10 @@ ChatOK (int n)
              snprintf(buf, MSG_SIZ, "whisper %s\n", line); // WHISPER box uses "whisper" to send
        else if(!strcmp("shouts", chatPartner[activePartner]))
              snprintf(buf, MSG_SIZ, "shout %s\n", line); // SHOUT box uses "shout" to send
+       else if(!strcmp("c-shouts", chatPartner[activePartner]))
+             snprintf(buf, MSG_SIZ, "cshout %s\n", line); // C-SHOUT box uses "cshout" to send
+       else if(!strcmp("kibitzes", chatPartner[activePartner]))
+             snprintf(buf, MSG_SIZ, "kibitz %s\n", line); // KIBITZ box uses "kibitz" to send
        else {
            if(!atoi(chatPartner[activePartner])) {
                snprintf(buf, MSG_SIZ, "> %s\n", line); // echo only tells to handle, not channel
@@ -2094,6 +2106,7 @@ ChatProc ()
 void
 ConsoleAutoPopUp (char *buf)
 {
+       if(*buf == 27) { if(appData.icsActive && DialogExists(ChatDlg)) HardSetFocus (&chatOptions[CHAT_IN], ChatDlg); return; }
        if(!appData.autoBox) return;
        if(appData.icsActive) { // text typed to board in ICS mode: divert to ICS input box
            if(DialogExists(ChatDlg)) { // box already exists: append to current contents
@@ -2476,14 +2489,14 @@ CCB (int n)
 
 Option mainOptions[] = { // description of main window in terms of generic dialog creator
 { 0, 0xCA, 0, NULL, NULL, "", NULL, BarBegin, "" }, // menu bar
-  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("File") },
-  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("Edit") },
-  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("View") },
-  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("Mode") },
-  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("Action") },
-  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("Engine") },
-  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("Options") },
-  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("Help") },
+  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("_File") },
+  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("_Edit") },
+  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("_View") },
+  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("_Mode") },
+  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("_Action") },
+  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("E_ngine") },
+  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("_Options") },
+  { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("_Help") },
 { 0, 0, 0, NULL, (void*)&SizeKludge, "", NULL, BarEnd, "" },
 { 0, LR|T2T|BORDER|SAME_ROW, 0, NULL, NULL, NULL, NULL, Label, "1" }, // optional title in window
 { 50,    LL|TT,            100, NULL, (void*) &LogoW, NULL, NULL, Skip, "" }, // white logo
@@ -2544,6 +2557,12 @@ Exp (int n, int x, int y)
     static int but1, but3, oldW, oldH;
     int menuNr = -3, sizing, f, r;
     TimeMark now;
+    extern Boolean right;
+
+    if(right) {  // kludgy way to let button 1 double as button 3 when back-end requests this
+       if(but1 && n == 0) but1 = 0, but3 = 1;
+       else if(n == -1) n = -3, right = FALSE;
+    }
 
     if(n == 0) { // motion
        if(SeekGraphClick(Press, x, y, 1)) return NULL;
@@ -2961,6 +2980,34 @@ DirSelProc (int n, int sel)
 }
 
 void
+StartDir (char *filter, char *newName)
+{
+    static char *gamesDir, *trnDir, *imgDir, *bookDir;
+    static char curDir[MSG_SIZ];
+    char **res = NULL;
+    if(!filter || !*filter) return;
+    if(strstr(filter, "pgn")) res = &gamesDir; else
+    if(strstr(filter, "bin")) res = &bookDir; else
+    if(strstr(filter, "png")) res = &imgDir; else
+    if(strstr(filter, "trn")) res = &trnDir; else
+    if(strstr(filter, "fen")) res = &appData.positionDir;
+    if(res) {
+       if(newName) {
+           char *p, *q;
+           if(*newName) {
+               ASSIGN(*res, newName);
+               for(p=*res; q=strchr(p, '/');) p = q + 1; *p = NULLCHAR;
+           }
+           if(*curDir) chdir(curDir);
+           *curDir = NULLCHAR;
+       } else {
+           getcwd(curDir, MSG_SIZ);
+           if(*res && **res) chdir(*res);
+       }
+    }
+}
+
+void
 Browse (DialogClass dlg, char *label, char *proposed, char *ext, Boolean pathFlag, char *mode, char **name, FILE **fp)
 {
     int j=0;
index 9c00356..36cd212 100644 (file)
--- a/dialogs.h
+++ b/dialogs.h
@@ -169,6 +169,7 @@ void SetScroll P((Option *opt, float f));
 void AddHandler  P((Option *opt, DialogClass dlg, int nr));
 void SendText P((int n));
 void DisplayLogos P((Option *left, Option *right));
+void StartDir P((char *filter, char *newName));
 void Browse P((DialogClass dlg, char *label, char *proposed, char *ext,
                        Boolean pathFlag, char *mode, char **name, FILE **fp));
 void FileNamePopUpWrapper P((char *label, char *def, char *filter, FileProc proc,
diff --git a/draw.c b/draw.c
index d0b3eda..3cb5727 100644 (file)
--- a/draw.c
+++ b/draw.c
@@ -162,10 +162,14 @@ SelectPieces(VariantClass v)
           pngPieceBitmaps[i][(int)WhiteNightrider] = pngPieceBitmaps2[i][(int)WhiteLion];
        }
        if(v == VariantChu) {
-          pngPieceBitmaps[i][(int)WhiteNightrider] = pngPieceBitmaps2[i][(int)WhiteKing+1];
-          pngPieceBitmaps[i][(int)WhiteUnicorn] = pngPieceBitmaps2[i][(int)WhiteCat];
-          pngPieceBitmaps[i][(int)WhiteSilver]  = pngPieceBitmaps2[i][(int)WhiteSword];
-          pngPieceBitmaps[i][(int)WhiteFalcon]  = pngPieceBitmaps2[i][(int)WhiteDagger];
+          pngPieceBitmaps[i][(int)WhiteNightrider] = pngPieceBitmaps2[i][(int)WhiteClaw];
+          pngPieceBitmaps[i][(int)WhiteClaw]    = pngPieceBitmaps2[i][(int)WhiteNightrider];
+          pngPieceBitmaps[i][(int)WhiteUnicorn] = pngPieceBitmaps2[i][(int)WhiteHorned];
+          pngPieceBitmaps[i][(int)WhiteSilver]  = pngPieceBitmaps2[i][(int)WhiteStag];
+          pngPieceBitmaps[i][(int)WhiteFalcon]  = pngPieceBitmaps2[i][(int)WhiteEagle];
+          pngPieceBitmaps[i][(int)WhiteHorned]  = pngPieceBitmaps2[i][(int)WhiteUnicorn];
+          pngPieceBitmaps[i][(int)WhiteStag]    = pngPieceBitmaps2[i][(int)WhiteSilver];
+          pngPieceBitmaps[i][(int)WhiteEagle]   = pngPieceBitmaps2[i][(int)WhiteFalcon];
        }
     }
 }
@@ -282,13 +286,14 @@ CreatePNGBoard (char *s, int kind)
 
 char *pngPieceNames[] = // must be in same order as internal piece encoding
 { "Pawn", "Knight", "Bishop", "Rook", "Queen", "Advisor", "Elephant", "Archbishop", "Marshall", "Gold", "Commoner",
-  "Canon", "Nightrider", "CrownedBishop", "CrownedRook", "Princess", "Chancellor", "Hawk", "Lance", "Cobra", "Unicorn", "Lion",
-  "GoldPawn", "HSword", "PromoHorse", "PromoDragon", "Leopard", "PromoSword", "Prince", "Phoenix", "Kylin", "PromoRook", "PromoHSword",
-  "Dolphin", "Chancellor", "Unicorn", "Hawk", "Sword", "Princess", "HCrown", "Knight", "Elephant", "PromoBishop", "King",
+  "Canon", "Nightrider", "CrownedBishop", "CrownedRook", "Crown", "Chancellor", "Hawk", "Lance", "Cobra", "Unicorn", "Lion",
+  "GoldPawn", "Claw", "PromoHorse", "PromoDragon", "GoldLance", "PromoSword", "Prince", "Phoenix", "Kylin", "PromoRook", "PromoHSword",
+  "Dolphin", "Sword", "Leopard", "HSword", "GoldSilver", "Princess", "HCrown", "Knight", "Elephant", "PromoBishop", "King",
   "Claw", "GoldKnight", "GoldLance", "GoldSilver", NULL
 };
 
-char *backupPiece[] = { "King", "Queen", "Lion" }; // pieces that map on other when not kanji
+char *backupPiece[] = { "Princess", NULL, NULL, NULL, NULL, NULL, NULL,
+                       NULL, NULL, NULL, NULL, NULL, NULL, "King", "Queen", "Lion" }; // pieces that map on other when not kanji
 
 RsvgHandle *
 LoadSVG (char *dir, int color, int piece, int retry)
@@ -299,9 +304,11 @@ LoadSVG (char *dir, int color, int piece, int retry)
   GError *svgerror=NULL;
   cairo_surface_t *img;
   cairo_t *cr;
+  char *name = (retry ? backupPiece[piece - WhiteGrasshopper] : pngPieceNames[piece]);
 
-    snprintf(buf, MSG_SIZ, "%s/%s%s.svg", dir, color ? "Black" : "White",
-             retry ? backupPiece[piece - WhiteMonarch] : pngPieceNames[piece]);
+    if(!name) return NULL;
+
+    snprintf(buf, MSG_SIZ, "%s/%s%s.svg", dir, color ? "Black" : "White", name);
 
     if(svg || *dir && (svg = rsvg_handle_new_from_file(buf, &svgerror))) {
 
@@ -319,7 +326,7 @@ LoadSVG (char *dir, int color, int piece, int retry)
 
       return svg;
     }
-    if(!retry && piece >= WhiteMonarch && piece <= WhiteNothing) // pieces that are only different in kanji sets
+    if(!retry && piece >= WhiteGrasshopper && piece <= WhiteNothing) // pieces that are only different in kanji sets
         return LoadSVG(dir, color, piece, 1);
     if(svgerror)
        g_error_free(svgerror);
index a6c688c..8976164 100644 (file)
@@ -359,6 +359,8 @@ GameListBuild (FILE *f)
         case GameIsDrawn:
         case GameUnfinished:
            if(!currentListGame) break;
+           if(currentListGame->gameInfo.result == GameUnfinished)
+               currentListGame->gameInfo.result = cm; // correct result tag with actual result
            if (currentListGame->gameInfo.resultDetails != NULL) {
                free(currentListGame->gameInfo.resultDetails);
            }
index ef35f2a..dbcc9e5 100644 (file)
@@ -1930,7 +1930,7 @@ void MoveTypeInProc(eventkey)
 
     buf[0]=eventkey->keyval;
     buf[1]='\0';
-    if (eventkey->keyval > 32 && eventkey->keyval < 256)
+    if (eventkey->keyval > 32 && eventkey->keyval < 256 || *buf == 27)
        ConsoleAutoPopUp (buf);
 }
 
@@ -2319,11 +2319,14 @@ void FileNamePopUpWrapper(label, def, filter, proc, pathFlag, openMode, name, fp
   char *cp;
   char curDir[MSG_SIZ];
 
+  StartDir(filter, NULL); // change to start directory for this file type
+
   if(def && *def && def[strlen(def)-1] == '/') {
     getcwd(curDir, MSG_SIZ);
     chdir(def);
   }
 
+
   /* make a copy of the filter string, so that strtok can work with it*/
   cp = strdup(filter);
 
@@ -2396,8 +2399,10 @@ void FileNamePopUpWrapper(label, def, filter, proc, pathFlag, openMode, name, fp
            ASSIGN(*name, filename);
            ScheduleDelayedEvent(DelayedLoad, 50);
         }
+      StartDir(filter, filename);
       g_free (filename);
-    };
+    }
+  else StartDir(filter, "");
 
   gtk_widget_destroy (dialog);
   ModeHighlight();
index 67675ff..48da90b 100644 (file)
@@ -502,6 +502,8 @@ TypeInProc (GtkWidget *widget, GdkEventKey *event, gpointer gdata)
     shiftState = event->state & GDK_SHIFT_MASK;
     controlState = event->state & GDK_CONTROL_MASK;
     switch(event->keyval) {
+      case 'e':       return (controlState && IcsHist( 5, opt, dlg));
+      case 'h':       return (controlState && IcsHist( 8, opt, dlg));
       case 'n':       return (controlState && IcsHist(14, opt, dlg));
       case 'o':       return (controlState && IcsHist(15, opt, dlg));
       case GDK_Tab:   IcsHist(10, opt, dlg); break;
@@ -1016,7 +1018,9 @@ void BrowseGTK(GtkWidget *widget, gpointer gdata)
     gtkfilter     = gtk_file_filter_new();
     gtkfilter_all = gtk_file_filter_new();
 
-    char fileext[MSG_SIZ];
+    char fileext[MSG_SIZ], *filter = currentOption[opt_i].textValue;
+
+    StartDir(filter, NULL); // change to start directory for this file type
 
     /* select file or folder depending on option_type */
     if (currentOption[opt_i].type == PathName)
@@ -1060,9 +1064,10 @@ void BrowseGTK(GtkWidget *widget, gpointer gdata)
         filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
         entry = currentOption[opt_i].handle;
         gtk_entry_set_text (GTK_ENTRY (entry), filename);
+       StartDir(filter, filename); // back to original, and remember this one
         g_free (filename);
-
       }
+    else StartDir(filter, ""); // change back to original directory
     gtk_widget_destroy (dialog);
     dialog = NULL;
 }
@@ -1430,7 +1435,7 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width);
                g_signal_connect(label, "button-press-event", G_CALLBACK(MemoEvent), (gpointer) &option[i]);
                gtk_widget_set_sensitive(label, TRUE);
            }
-            Pack(hbox, table, label, left, left+3, top, 0);
+            Pack(hbox, table, label, left, left+r, top, 0);
            break;
           case SaveButton:
           case Button:
@@ -1563,12 +1568,16 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width);
            top--;
            msg = _(option[i].name); // write name on the menu button
 #ifndef OSXAPP
-           if(tinyLayout) { strcpy(def, msg); def[tinyLayout] = NULLCHAR; msg = def; } // clip menu text to keep menu bar small
+           if(tinyLayout) { // clip menu text to keep menu bar small
+               int clip = tinyLayout + 1;
+               strcpy(def, msg + (msg[clip-1] == '_'));
+               def[clip] = NULLCHAR; msg = def;
+           }
 #endif
 //         XtSetArg(args[j], XtNmenuName, XtNewString(option[i].name));  j++;
 //         XtSetArg(args[j], XtNlabel, msg);  j++;
            option[i].handle = (void*)
-               (menuButton = gtk_menu_item_new_with_label(msg));
+               (menuButton = gtk_menu_item_new_with_mnemonic(msg));
            gtk_widget_show(menuButton);
            option[i].textValue = (char*) (menu = CreateMenuPopup(option + i, i + 256*dlgNr, -1));
            gtk_menu_item_set_submenu(GTK_MENU_ITEM (menuButton), menu);
diff --git a/menus.c b/menus.c
index 653d978..9ddfbad 100644 (file)
--- a/menus.c
+++ b/menus.c
@@ -105,6 +105,7 @@ extern char *getenv();
 char  *gameCopyFilename, *gamePasteFilename;
 Boolean saveSettingsOnExit;
 char *settingsFileName;
+char gamesDir[MSG_SIZ], positionsDir[MSG_SIZ], textureDir[MSG_SIZ], bookDir[MSG_SIZ], piecesDir[MSG_SIZ];
 
 static int
 LoadGamePopUp (FILE *f, int gameNumber, char *title)
diff --git a/moves.c b/moves.c
index b276ded..e560d34 100644 (file)
--- a/moves.c
+++ b/moves.c
@@ -114,19 +114,32 @@ SameColor (ChessSquare piece1, ChessSquare piece2)
 #define SameColor(piece1, piece2) (piece1 < EmptySquare && piece2 < EmptySquare && (piece1 < BlackPawn) == (piece2 < BlackPawn) || piece1 == DarkSquare || piece2 == DarkSquare)
 #endif
 
-char pieceToChar[] = {
+unsigned char pieceToChar[EmptySquare+1] = {
                         'P', 'N', 'B', 'R', 'Q', 'F', 'E', 'A', 'C', 'W', 'M',
                         'O', 'H', 'I', 'J', 'G', 'D', 'V', 'L', 'S', 'U', 'K',
                         'p', 'n', 'b', 'r', 'q', 'f', 'e', 'a', 'c', 'w', 'm',
                         'o', 'h', 'i', 'j', 'g', 'd', 'v', 'l', 's', 'u', 'k',
                         'x' };
-char pieceNickName[EmptySquare];
+unsigned char pieceNickName[EmptySquare];
 
 char
 PieceToChar (ChessSquare p)
 {
+    int c;
     if((int)p < 0 || (int)p >= (int)EmptySquare) return('x'); /* [HGM] for safety */
-    return pieceToChar[(int) p];
+    c = pieceToChar[(int) p];
+    if(c & 128) c = c & 63 | 64;
+    return c;
+}
+
+char
+PieceSuffix (ChessSquare p)
+{
+    int c;
+    if((int)p < 0 || (int)p >= (int)EmptySquare) return 0; /* [HGM] for safety */
+    c = pieceToChar[(int) p];
+    if(c < 128) return 0;
+    return SUFFIXES[c - 128 >> 6];
 }
 
 int
@@ -265,8 +278,9 @@ void
 MovesFromString (Board board, int flags, int f, int r, int tx, int ty, int angle, char *desc, MoveCallback cb, VOIDSTAR cl)
 {
     char buf[80], *p = desc, *atom = NULL;
-    int mine, his, dir, bit, occup, i, promoRank = -1;
+    int mine, his, dir, bit, occup, i, ep, promoRank = -1;
     ChessMove promo= NormalMove; ChessSquare pc = board[r][f];
+    if(pc == DarkSquare) return; // this is not a piece, but a 'hole' in the board
     if(flags & F_WHITE_ON_MOVE) his = 2, mine = 1; else his = 1, mine = 2;
     if(pc == WhitePawn || pc == WhiteLance) promo = WhitePromotion, promoRank = BOARD_HEIGHT-1; else
     if(pc == BlackPawn || pc == BlackLance) promo = BlackPromotion, promoRank = 0;
@@ -384,7 +398,7 @@ MovesFromString (Board board, int flags, int f, int r, int tx, int ty, int angle
          for(dir=0, bit=1; dir<8; dir++, bit += bit) { // loop over directions
            int i = expo, j = skip, hop = mode, vx, vy, loop = 0;
            if(!(bit & dirSet)) continue;             // does not move in this direction
-           if(dy != 1) j = 0;                        // 
+           if(dy != 1 || mode & 1024) j = 0;         // 
            vx = dx*rot[dir][0] + dy*rot[dir][1];     // rotate step vector
            vy = dx*rot[dir][2] + dy*rot[dir][3];
            if(tx < 0) x = f, y = r;                  // start square
@@ -394,6 +408,7 @@ MovesFromString (Board board, int flags, int f, int r, int tx, int ty, int angle
                if(y < 0 || y >= BOARD_HEIGHT) break; // vertically off-board: always done
                if(x <  BOARD_LEFT) { if(mode & 128) x += BOARD_RGHT - BOARD_LEFT, loop++; else break; }
                if(x >= BOARD_RGHT) { if(mode & 128) x -= BOARD_RGHT - BOARD_LEFT, loop++; else break; }
+               if(board[y][x] == DarkSquare) break;  // black squares are supposed to be off board
                if(j) { j--; continue; }              // skip irrespective of occupation
                if(!jump    && board[y - vy + vy/2][x - vx + vx/2] != EmptySquare) break; // blocked
                if(jump > 1 && board[y - vy + vy/2][x - vx + vx/2] == EmptySquare) break; // no hop
@@ -424,16 +439,29 @@ MovesFromString (Board board, int flags, int f, int r, int tx, int ty, int angle
                  continue;
                }
                if(hop & 32+64) { if(occup != 4) { if(hop & 64 && i != 1) i = 2; hop &= 31; } continue; } // hopper
-               if(mode & 8 && y == board[EP_RANK] && occup == 4 && board[EP_FILE] == x) { // to e.p. square
+               ep = board[EP_RANK];
+               if(mode & 8 && occup == 4 && board[EP_FILE] == x && (y == (ep & 127) || y - vy == ep - 128)) { // to e.p. square (or 2nd e.p. square)
                    cb(board, flags, mine == 1 ? WhiteCapturesEnPassant : BlackCapturesEnPassant, r, f, y, x, cl);
                }
                if(mode & 1024) {            // castling
                    i = 2;                   // kludge to elongate move indefinitely
                    if(occup == 4) continue; // skip empty squares
-                   if(x == BOARD_LEFT   && board[y][x] == initialPosition[y][x]) // reached initial corner piece
+                   if((x == BOARD_LEFT + skip || x > BOARD_LEFT + skip && vx < 0 && board[y][x-1-skip] == DarkSquare)
+                                                                   && board[y][x] == initialPosition[y][x]) { // reached initial corner piece
+                     if(pc != WhiteKing && pc != BlackKing) { // non-royal castling (to be entered as two-leg move via 'Rook')
+                       if(killX < 0) cb(board, flags, FirstLeg,   r, f, y, x, cl); if(killX < f)
+                       legNr <<= 1,  cb(board, flags, NormalMove, r, f, y, f - expo, cl), legNr >>= 1;
+                     } else
                        cb(board, flags, mine == 1 ? WhiteQueenSideCastle : BlackQueenSideCastle, r, f, y, f - expo, cl);
-                   if(x == BOARD_RGHT-1 && board[y][x] == initialPosition[y][x])
+                   }
+                   if((x == BOARD_RGHT-1-skip || x < BOARD_RGHT-1-skip && vx > 0 && board[y][x+1+skip] == DarkSquare)
+                                                                   && board[y][x] == initialPosition[y][x]) {
+                     if(pc != WhiteKing && pc != BlackKing) {
+                       if(killX < 0) cb(board, flags, FirstLeg,   r, f, y, x, cl); if(killX > f)
+                       legNr <<= 1,  cb(board, flags, NormalMove, r, f, y, f + expo, cl), legNr >>= 1;
+                     } else
                        cb(board, flags, mine == 1 ? WhiteKingSideCastle : BlackKingSideCastle, r, f, y, f + expo, cl);
+                   }
                    break;
                }
                if(mode & 16 && (board[y][x] == WhiteKing || board[y][x] == BlackKing)) break; // tame piece, cannot capture royal
@@ -1801,13 +1829,17 @@ LegalityTest (Board board, int flags, int rf, int ff, int rt, int ft, int promoC
         if(cl.kind != NormalMove || promoChar == NULLCHAR || promoChar == '=') return cl.kind;
         if(promoChar != '+')
             return CharToPiece(promoChar) == EmptySquare ? ImpossibleMove : IllegalMove;
-        if(PieceToChar(CHUPROMOTED board[rf][ff]) != '+') return ImpossibleMove;
+        if(PieceToChar(CHUPROMOTED board[rf][ff]) != '+') {
+           if(PieceToChar(CHUPROMOTED (board[rf][ff] < BlackPawn ? WhitePawn : BlackPawn)) != '.')
+           return ImpossibleMove;
+       }
         return flags & F_WHITE_ON_MOVE ? WhitePromotion : BlackPromotion;
     } else
     if(gameInfo.variant == VariantShogi) {
         /* [HGM] Shogi promotions. '=' means defer */
         if(rf != DROP_RANK && cl.kind == NormalMove) {
             ChessSquare piece = board[rf][ff];
+            int zone = BOARD_HEIGHT/3 + (BOARD_HEIGHT == 8);
 
             if(promoChar == PieceToChar(BlackQueen)) promoChar = NULLCHAR; /* [HGM] Kludge */
             if(promoChar == 'd' && (piece == WhiteRook   || piece == BlackRook)   ||
@@ -1819,7 +1851,7 @@ if(appData.debugMode)fprintf(debugFP,"SHOGI promoChar = %c\n", promoChar ? promo
                 return CharToPiece(promoChar) == EmptySquare ? ImpossibleMove : IllegalMove;
             else if(flags & F_WHITE_ON_MOVE) {
                 if( (int) piece < (int) WhiteWazir &&
-                     (rf >= BOARD_HEIGHT - BOARD_HEIGHT/3 || rt >= BOARD_HEIGHT - BOARD_HEIGHT/3) ) {
+                     (rf >= BOARD_HEIGHT - zone || rt >= BOARD_HEIGHT - zone) ) {
                     if( (piece == WhitePawn || piece == WhiteQueen) && rt > BOARD_HEIGHT-2 ||
                          piece == WhiteKnight && rt > BOARD_HEIGHT-3) /* promotion mandatory */
                        cl.kind = promoChar == '=' ? IllegalMove : WhitePromotion;
@@ -1827,7 +1859,7 @@ if(appData.debugMode)fprintf(debugFP,"SHOGI promoChar = %c\n", promoChar ? promo
                        cl.kind = promoChar == '+' ? WhitePromotion : WhiteNonPromotion;
                 } else cl.kind = promoChar == '+' ? IllegalMove : NormalMove;
             } else {
-                if( (int) piece < (int) BlackWazir && (rf < BOARD_HEIGHT/3 || rt < BOARD_HEIGHT/3) ) {
+                if( (int) piece < (int) BlackWazir && (rf < zone || rt < zone) ) {
                     if( (piece == BlackPawn || piece == BlackQueen) && rt < 1 ||
                          piece == BlackKnight && rt < 2 ) /* promotion obligatory */
                        cl.kind = promoChar == '=' ? IllegalMove : BlackPromotion;
@@ -1957,6 +1989,7 @@ DisambiguateCallback (Board board, int flags, ChessMove kind, int rf, int ff, in
 {
     register DisambiguateClosure *cl = (DisambiguateClosure *) closure;
     int wildCard = FALSE; ChessSquare piece = board[rf][ff];
+    extern int kifu; // in parser.c
 
     // [HGM] wild: for wild-card pieces rt and rf are dummies
     if(piece == WhiteFalcon || piece == BlackFalcon ||
@@ -1974,6 +2007,18 @@ DisambiguateCallback (Board board, int flags, ChessMove kind, int rf, int ff, in
 
        if(cl->count && rf == cl->rf && ff == cl->ff) return; // duplicate move
 
+       if(cl->count == 1 && kifu & 0x7E && cl->rfIn == -1 && cl->ffIn == -1) { // traditional Shogi disambiguation required
+           int this = 1, other = 1;
+           if(kifu & 2) this &= (flags & 1 ? rt > rf : rt < rf), other &= (flags & 1 ? cl->rt > cl->rf : cl->rt < cl->rf);
+           if(kifu & 4) this &= (flags & 1 ? rt < rf : rt > rf), other &= (flags & 1 ? cl->rt < cl->rf : cl->rt > cl->rf);
+           if(kifu & 8) this &= (rf == rt), other &= (cl->rt == cl->rf);
+           if(kifu & 0x10) this &= (flags & 1 ? ft <= ff : ft >= ff), other &= (flags & 1 ? cl->ft <= cl->ff : cl->ft >= cl->ff);
+           if(kifu & 0x20) this &= (flags & 1 ? ft >= ff : ft <= ff), other &= (flags & 1 ? cl->ft >= cl->ff : cl->ft <= cl->ff);
+           if(kifu & 0x40) this &= (ft == ff), other &= (cl->ft == cl->ff); // should never be used
+           if(!other) cl->count--; // the old move did not satisfy the requested relative position, erase it
+           if(!this) return;       // the current move does not satisfy the requested relative position, ignore it
+       }
+
        cl->count++;
        if(cl->count == 1 || board[rt][ft] != EmptySquare) {
          // [HGM] oneclick: if multiple moves, be sure we remember capture
@@ -2015,7 +2060,7 @@ Disambiguate (Board board, int flags, DisambiguateClosure *closure)
         GenLegal(board, flags|F_IGNORE_CHECK, DisambiguateCallback, (VOIDSTAR) closure, closure->pieceIn);
        if (closure->count == 0) {
            /* No, it's not even that */
-         if(!appData.testLegality && closure->pieceIn != EmptySquare) {
+         if(!appData.testLegality && !pieceDefs && closure->pieceIn != EmptySquare) {
            int f, r; // if there is only a single piece of the requested type on the board, use that
            closure->rt = closure->rtIn, closure->ft = closure->ftIn;
            for(r=0; r<BOARD_HEIGHT; r++) for(f=BOARD_LEFT; f<BOARD_RGHT; f++)
@@ -2064,6 +2109,7 @@ Disambiguate (Board board, int flags, DisambiguateClosure *closure)
         /* [HGM] Shogi promotions. On input, '=' means defer, '+' promote. Afterwards, c is set to '+' for promotions, NULL other */
         if(closure->rfIn != DROP_RANK && closure->kind == NormalMove) {
             ChessSquare piece = closure->piece;
+            int zone = BOARD_HEIGHT/3 + (BOARD_HEIGHT == 8);
             if (c == 'd' && (piece == WhiteRook   || piece == BlackRook)   ||
                 c == 'h' && (piece == WhiteBishop || piece == BlackBishop) ||
                 c == 'g' && (piece <= WhiteFerz || piece <= BlackFerz && piece >= BlackPawn) )
@@ -2071,7 +2117,7 @@ Disambiguate (Board board, int flags, DisambiguateClosure *closure)
             if(c != NULLCHAR && c != '+' && c != '=') closure->kind = IllegalMove; // otherwise specifying a piece is illegal
             else if(flags & F_WHITE_ON_MOVE) {
                 if( (int) piece < (int) WhiteWazir &&
-                     (closure->rf >= BOARD_HEIGHT-(BOARD_HEIGHT/3) || closure->rt >= BOARD_HEIGHT-(BOARD_HEIGHT/3)) ) {
+                     (closure->rf >= BOARD_HEIGHT-zone || closure->rt >= BOARD_HEIGHT-zone) ) {
                     if( (piece == WhitePawn || piece == WhiteQueen) && closure->rt > BOARD_HEIGHT-2 ||
                          piece == WhiteKnight && closure->rt > BOARD_HEIGHT-3) /* promotion mandatory */
                        closure->kind = c == '=' ? IllegalMove : WhitePromotion;
@@ -2079,7 +2125,7 @@ Disambiguate (Board board, int flags, DisambiguateClosure *closure)
                        closure->kind = c == '+' ? WhitePromotion : WhiteNonPromotion;
                 } else closure->kind = c == '+' ? IllegalMove : NormalMove;
             } else {
-                if( (int) piece < (int) BlackWazir && (closure->rf < BOARD_HEIGHT/3 || closure->rt < BOARD_HEIGHT/3) ) {
+                if( (int) piece < (int) BlackWazir && (closure->rf < zone || closure->rt < zone) ) {
                     if( (piece == BlackPawn || piece == BlackQueen) && closure->rt < 1 ||
                          piece == BlackKnight && closure->rt < 2 ) /* promotion obligatory */
                        closure->kind = c == '=' ? IllegalMove : BlackPromotion;
@@ -2311,6 +2357,7 @@ CoordsToAlgebraic (Board board, int flags, int rf, int ff, int rt, int ft, int p
         }
         if(c=='+') *outp++ = c;
         *outp++ = ToUpper(PieceToChar(piece));
+        if(*outp = PieceSuffix(piece)) outp++;
 
        if (cl.file || (cl.either && !cl.rank)) {
             *outp++ = ff + AAA;
diff --git a/moves.h b/moves.h
index 6be5299..c162ffa 100644 (file)
--- a/moves.h
+++ b/moves.h
  *------------------------------------------------------------------------
  ** See the file ChangeLog for a revision history.  */
 
+#define SUFFIXES "'!"
+
 extern ChessSquare PromoPiece P((ChessMove moveType));
 extern ChessMove PromoCharToMoveType P((int whiteOnMove, int promoChar));
 extern char PieceToChar P((ChessSquare p));
+extern char PieceSuffix P((ChessSquare p));
 extern ChessSquare CharToPiece P((int c));
 extern int PieceToNumber P((ChessSquare p));
 
 extern void CopyBoard P((Board to, Board from));
 extern int CompareBoards P((Board board1, Board board2));
-extern char pieceToChar[(int)EmptySquare+1];
-extern char pieceNickName[(int)EmptySquare];
+extern unsigned char pieceToChar[(int)EmptySquare+1];
+extern unsigned char pieceNickName[(int)EmptySquare];
 extern char *pieceDesc[(int)EmptySquare];
 extern Board initialPosition;
 extern Boolean pieceDefs;
index d202ad6..53df236 100644 (file)
@@ -223,6 +223,7 @@ GameListReplace (int page)
 void
 GameListUpdate ()
 {
+    if(!DialogExists(GameListDlg)) return;
     GameListPrepare(False, False);
     GameListReplace(0);
 }
diff --git a/osxapp/OSX-theme/gtk-2.0/assets/handle.png b/osxapp/OSX-theme/gtk-2.0/assets/handle.png
deleted file mode 100755 (executable)
index 51978ae..0000000
Binary files a/osxapp/OSX-theme/gtk-2.0/assets/handle.png and /dev/null differ
diff --git a/osxapp/OSX-theme/gtk-2.0/assets/l-checkbox-checked-18.png b/osxapp/OSX-theme/gtk-2.0/assets/l-checkbox-checked-18.png
deleted file mode 100755 (executable)
index 269e90b..0000000
Binary files a/osxapp/OSX-theme/gtk-2.0/assets/l-checkbox-checked-18.png and /dev/null differ
diff --git a/osxapp/OSX-theme/gtk-2.0/assets/l-checkbox-checked-insensitive-18.png b/osxapp/OSX-theme/gtk-2.0/assets/l-checkbox-checked-insensitive-18.png
deleted file mode 100644 (file)
index 3a46e46..0000000
Binary files a/osxapp/OSX-theme/gtk-2.0/assets/l-checkbox-checked-insensitive-18.png and /dev/null differ
diff --git a/osxapp/OSX-theme/gtk-2.0/assets/l-checkbox-unchecked-18.png b/osxapp/OSX-theme/gtk-2.0/assets/l-checkbox-unchecked-18.png
deleted file mode 100755 (executable)
index 72c1d48..0000000
Binary files a/osxapp/OSX-theme/gtk-2.0/assets/l-checkbox-unchecked-18.png and /dev/null differ
diff --git a/osxapp/OSX-theme/gtk-2.0/assets/l-checkbox-unchecked-insensitive-18.png b/osxapp/OSX-theme/gtk-2.0/assets/l-checkbox-unchecked-insensitive-18.png
deleted file mode 100644 (file)
index 4d4f6ab..0000000
Binary files a/osxapp/OSX-theme/gtk-2.0/assets/l-checkbox-unchecked-insensitive-18.png and /dev/null differ
diff --git a/osxapp/OSX-theme/gtk-2.0/assets/l-radio-selected-18.png b/osxapp/OSX-theme/gtk-2.0/assets/l-radio-selected-18.png
deleted file mode 100755 (executable)
index fd0a398..0000000
Binary files a/osxapp/OSX-theme/gtk-2.0/assets/l-radio-selected-18.png and /dev/null differ
diff --git a/osxapp/OSX-theme/gtk-2.0/assets/l-radio-selected-insensitive-18.png b/osxapp/OSX-theme/gtk-2.0/assets/l-radio-selected-insensitive-18.png
deleted file mode 100644 (file)
index bae1909..0000000
Binary files a/osxapp/OSX-theme/gtk-2.0/assets/l-radio-selected-insensitive-18.png and /dev/null differ
diff --git a/osxapp/OSX-theme/gtk-2.0/assets/l-radio-unselected-18.png b/osxapp/OSX-theme/gtk-2.0/assets/l-radio-unselected-18.png
deleted file mode 100755 (executable)
index c7d8751..0000000
Binary files a/osxapp/OSX-theme/gtk-2.0/assets/l-radio-unselected-18.png and /dev/null differ
diff --git a/osxapp/OSX-theme/gtk-2.0/assets/l-radio-unselected-insensitive-18.png b/osxapp/OSX-theme/gtk-2.0/assets/l-radio-unselected-insensitive-18.png
deleted file mode 100644 (file)
index 9ba70fc..0000000
Binary files a/osxapp/OSX-theme/gtk-2.0/assets/l-radio-unselected-insensitive-18.png and /dev/null differ
diff --git a/osxapp/OSX-theme/gtk-2.0/assets/notebook-gap-bottom.png b/osxapp/OSX-theme/gtk-2.0/assets/notebook-gap-bottom.png
deleted file mode 100755 (executable)
index 70fffda..0000000
Binary files a/osxapp/OSX-theme/gtk-2.0/assets/notebook-gap-bottom.png and /dev/null differ
diff --git a/osxapp/OSX-theme/gtk-2.0/assets/notebook-gap-left.png b/osxapp/OSX-theme/gtk-2.0/assets/notebook-gap-left.png
deleted file mode 100755 (executable)
index 747c57b..0000000
Binary files a/osxapp/OSX-theme/gtk-2.0/assets/notebook-gap-left.png and /dev/null differ
diff --git a/osxapp/OSX-theme/gtk-2.0/assets/notebook-gap-right.png b/osxapp/OSX-theme/gtk-2.0/assets/notebook-gap-right.png
deleted file mode 100755 (executable)
index 04fd5dc..0000000
Binary files a/osxapp/OSX-theme/gtk-2.0/assets/notebook-gap-right.png and /dev/null differ
diff --git a/osxapp/OSX-theme/gtk-2.0/assets/notebook-gap-top.png b/osxapp/OSX-theme/gtk-2.0/assets/notebook-gap-top.png
deleted file mode 100755 (executable)
index 138f1cd..0000000
Binary files a/osxapp/OSX-theme/gtk-2.0/assets/notebook-gap-top.png and /dev/null differ
diff --git a/osxapp/OSX-theme/gtk-2.0/assets/notebook.png b/osxapp/OSX-theme/gtk-2.0/assets/notebook.png
deleted file mode 100755 (executable)
index e8f03f6..0000000
Binary files a/osxapp/OSX-theme/gtk-2.0/assets/notebook.png and /dev/null differ
diff --git a/osxapp/OSX-theme/gtk-2.0/assets/null.png b/osxapp/OSX-theme/gtk-2.0/assets/null.png
deleted file mode 100755 (executable)
index 013d98b..0000000
Binary files a/osxapp/OSX-theme/gtk-2.0/assets/null.png and /dev/null differ
diff --git a/osxapp/OSX-theme/gtk-2.0/assets/scroll-background.png b/osxapp/OSX-theme/gtk-2.0/assets/scroll-background.png
deleted file mode 100755 (executable)
index dbe3655..0000000
Binary files a/osxapp/OSX-theme/gtk-2.0/assets/scroll-background.png and /dev/null differ
diff --git a/osxapp/OSX-theme/gtk-2.0/assets/slider-horizontal.png b/osxapp/OSX-theme/gtk-2.0/assets/slider-horizontal.png
deleted file mode 100755 (executable)
index 975822c..0000000
Binary files a/osxapp/OSX-theme/gtk-2.0/assets/slider-horizontal.png and /dev/null differ
diff --git a/osxapp/OSX-theme/gtk-2.0/assets/tab-bottom-active.png b/osxapp/OSX-theme/gtk-2.0/assets/tab-bottom-active.png
deleted file mode 100755 (executable)
index e2c8024..0000000
Binary files a/osxapp/OSX-theme/gtk-2.0/assets/tab-bottom-active.png and /dev/null differ
diff --git a/osxapp/OSX-theme/gtk-2.0/assets/tab-bottom.png b/osxapp/OSX-theme/gtk-2.0/assets/tab-bottom.png
deleted file mode 100755 (executable)
index 4d0d72f..0000000
Binary files a/osxapp/OSX-theme/gtk-2.0/assets/tab-bottom.png and /dev/null differ
diff --git a/osxapp/OSX-theme/gtk-2.0/assets/tab-left-active.png b/osxapp/OSX-theme/gtk-2.0/assets/tab-left-active.png
deleted file mode 100755 (executable)
index 593dc35..0000000
Binary files a/osxapp/OSX-theme/gtk-2.0/assets/tab-left-active.png and /dev/null differ
diff --git a/osxapp/OSX-theme/gtk-2.0/assets/tab-left.png b/osxapp/OSX-theme/gtk-2.0/assets/tab-left.png
deleted file mode 100755 (executable)
index 4841bba..0000000
Binary files a/osxapp/OSX-theme/gtk-2.0/assets/tab-left.png and /dev/null differ
diff --git a/osxapp/OSX-theme/gtk-2.0/assets/tab-right-active.png b/osxapp/OSX-theme/gtk-2.0/assets/tab-right-active.png
deleted file mode 100755 (executable)
index 8394854..0000000
Binary files a/osxapp/OSX-theme/gtk-2.0/assets/tab-right-active.png and /dev/null differ
diff --git a/osxapp/OSX-theme/gtk-2.0/assets/tab-right.png b/osxapp/OSX-theme/gtk-2.0/assets/tab-right.png
deleted file mode 100755 (executable)
index c82bee8..0000000
Binary files a/osxapp/OSX-theme/gtk-2.0/assets/tab-right.png and /dev/null differ
diff --git a/osxapp/OSX-theme/gtk-2.0/assets/tab-top-active.png b/osxapp/OSX-theme/gtk-2.0/assets/tab-top-active.png
deleted file mode 100755 (executable)
index b3f6f9b..0000000
Binary files a/osxapp/OSX-theme/gtk-2.0/assets/tab-top-active.png and /dev/null differ
diff --git a/osxapp/OSX-theme/gtk-2.0/assets/tab-top.png b/osxapp/OSX-theme/gtk-2.0/assets/tab-top.png
deleted file mode 100755 (executable)
index e01f001..0000000
Binary files a/osxapp/OSX-theme/gtk-2.0/assets/tab-top.png and /dev/null differ
diff --git a/osxapp/OSX-theme/gtk-2.0/assets/toolbar.png b/osxapp/OSX-theme/gtk-2.0/assets/toolbar.png
deleted file mode 100755 (executable)
index 364f896..0000000
Binary files a/osxapp/OSX-theme/gtk-2.0/assets/toolbar.png and /dev/null differ
diff --git a/osxapp/OSX-theme/gtk-2.0/gtkrc b/osxapp/OSX-theme/gtk-2.0/gtkrc
deleted file mode 100755 (executable)
index fceba6e..0000000
+++ /dev/null
@@ -1,798 +0,0 @@
-
-gtk-color-scheme = "base_color:#ffffff\nfg_color:#202020\ntooltip_fg_color:#ffffff\nselected_bg_color:#3b6eeb\nselected_fg_color:#ffffff\ntext_color:#202020\nbg_color:#ededed\ntooltip_bg_color:#000000\nlink_color:#0033ff"
-
-gtk_color_scheme       = "menu_gradient:#4455F6"
-
-gtk-auto-mnemonics     = 1
-
-gtk-button-images      = 0
-
-style "default" {
-       xthickness                                                                      = 1
-       ythickness                                                                      = 1
-
-       #######################
-       # Style Properties
-       #######################
-       GtkButton::child-displacement-x                         = 0
-       GtkButton::child-displacement-y                         = 0
-       GtkButton::default-border                                       = {0, 0, 0, 0}
-       GtkButton::image-spacing                                        = 4
-       GtkToolButton::icon-spacing                                     = 4
-
-       GtkCheckButton::indicator-size                          = 18
-       GtkRadioButton::indicator-size                          = 18
-
-       GtkEntry::honors-transparent-bg-hint            = 1
-       GtkEntry::invisible-char                                        = 0x2022
-       GtkEntry::progress-border                                       = {2, 2, 2, 2}
-    GtkEntry::state-hint                                       = 0
-
-       GtkProgressBar::min-vertical-bar-width          = 13
-       GtkProgressBar::min-horizontal-bar-height       = 13
-
-       GtkExpander::expander-size                                      = 14
-
-       GtkMenuBar::internal-padding                            = 0
-       GtkMenuBar::window-dragging                                     = 1
-       # GtkMenuBar::shadow-type                                       = GTK_SHADOW_NONE # En Unity se habilita esta linea
-
-       GtkMenu::horizontal-padding                                     = 0
-       GtkMenu::vertical-padding                                       = 0
-       GtkSeparatorMenuItem::horizontal-padding        = 7
-
-       GtkNotebook::tab-overlap                                        = 2             # Default = 2
-       GtkNotebook::tab-curvature                                      = 1             # Default = 1
-
-       GtkPaned::handle-size                                           = 6
-
-       GtkRange::trough-border                                         = 0
-       GtkRange::trough-side-details                                   = 0
-       GtkRange::slider-width                                          = 15
-       GtkRange::stepper-size                                          = 1
-
-       GtkScale::slider-length                                         = 14
-       GtkScale::slider-width                                          = 14
-       GtkScale::trough-side-details                           = 0
-
-       GtkScrollbar::has-backward-stepper                      = 0  
-       GtkScrollbar::has-forward-stepper                       = 1   # El maldito rollo de gtk2 y las scrollbars
-       GtkScrollbar::min-slider-length                         = 30
-       GtkScrollbar::slider-width                                      = 9
-       GtkScrollbar::trough-border                                     = 3
-       GtkScrollbar::activate-slider                           = 0
-       GtkScrollbar::trough-side-details                       = 0
-       GtkScrollbar::stepper-size                      = 1
-
-       GtkScrolledWindow::scrollbar-spacing            = 0
-       GtkScrolledWindow::scrollbars-within-bevel      = 1
-
-       GtkToolbar::internal-padding                            = 0
-       GtkToolbar::window-dragging                                     = 1
-
-       GtkTreeView::expander-size                                      = 7
-       GtkTreeView::odd_row_color                                      = "#F4F6FA"
-       # en eclipse afecta backcolor de "Quick Type Hierarchy (CTRL+T)"
-       # GtkTreeView::even_row_color                   = "#FFF"
-
-       GtkWidget::link-color                                           = @link_color
-    GtkWidget::focus-padding                                   = 0
-       WnckTasklist::fade-overlay-rect                         = 0
-
-    GtkWindow::resize-grip-height                      = 0 # Ocultar resize-grip
-    GtkWindow::resize-grip-width                       = 0
-
-       ####################
-       # Color Definitions
-       ####################
-       bg[NORMAL]          = @bg_color
-       bg[PRELIGHT]            = shade (1.02, @bg_color)
-       bg[SELECTED]            = @selected_bg_color
-       bg[INSENSITIVE]         = @bg_color
-       bg[ACTIVE]          = shade (0.9, @bg_color)
-
-       fg[NORMAL]          = @text_color
-       fg[PRELIGHT]            = @fg_color
-       fg[SELECTED]            = @selected_fg_color
-       fg[INSENSITIVE]         = darker (@bg_color)
-       fg[ACTIVE]          = @fg_color
-
-       text[NORMAL]            = @text_color
-       text[PRELIGHT]          = @text_color
-       text[SELECTED]          = @selected_fg_color
-       text[INSENSITIVE]       = darker (@bg_color)
-       text[ACTIVE]            = @selected_fg_color
-
-       base[NORMAL]            = @base_color
-       base[PRELIGHT]          = shade (0.95, @bg_color)
-       base[SELECTED]          = @selected_bg_color
-       base[INSENSITIVE]       = @bg_color
-       base[ACTIVE]            = shade (0.9, @selected_bg_color)
-
-       engine "murrine" {
-               animation                       = FALSE
-               arrowstyle                      = 1                     # Estilo flechas menu (triangulos)
-               colorize_scrollbar      = TRUE
-               contrast                        = 1.0
-               default_button_color    = shade (1.05, "#66a3e3")
-               expanderstyle           = 0                     # Treview expander (triangulo)
-               cellstyle                       = 0     
-               focusstyle                      = 0
-               glazestyle                      = 0 # 0 = flat highlight, 1 = curved highlight, 2 = concave style, 3 = top curved highlight, 4 = beryl highlight
-               glowstyle                       = 4 # 0 = top, 1 = bottom, 2 = top and bottom, 3 = horizontal, 4 = centered glow
-               gradient_shades         = {1.00, 0.91, 0.92, 0.81}              
-               highlight_shade         = 1.0
-               lightborder_shade       = 1.0
-               lightborderstyle        = 1 # 0 = top side, 1 = all sides
-               listviewstyle           = 0 # 0 = nothing, 1 = dotted, 2 = line
-               menubaritemstyle        = 0 # 0 = menuitem look, 1 = button look
-               menubarstyle            = 1 # 0 = flat, 1 = glassy, 2 = gradient, 3 = striped
-               menuitemstyle           = 1 # 0 = flat, 1 = glassy, 2 = striped
-               menustyle                   = 3 # 0 = no vertical menu stripe, 1 = display vertical menu stripe, 2 = faint? 3 = borderless
-               progressbarstyle        = 1
-               reliefstyle                     = 3 # 0 = flat, 1 = inset, 2 = shadow, 3 = shadow with gradient, 4 = stronger shadow with gradient
-               rgba                            = FALSE # alpha transparency
-               roundness                       = 3 # 0 = square
-               scrollbarstyle          = 0 # 0 = nothing
-               separatorstyle          = 0
-               shadow_shades           = {2.0, 1.0}
-               sliderstyle                 = 0 # 0 = nothing added
-               stepperstyle            = 1 # 0 = standard, 1 = integrated stepper handles, 2 = unknown
-               toolbarstyle            = 1 # 0 = flat, 1 = glassy, 2 = gradient
-               trough_shades           = {0.85, 1.0}
-       }
-}
-
-style "wide" {
-       xthickness      = 2
-       ythickness      = 2
-}
-
-style "wider" {
-       xthickness      = 3
-       ythickness      = 3
-}
-
-style "button" {
-    xthickness = 3
-    ythickness = 3
-    
-       bg[ACTIVE]                      = shade (1.15, "#5c8fe9")       # Pulsado #80B8EA
-    bg[NORMAL]                      = shade (0.93, "#FFF")
-    bg[PRELIGHT]                    = shade (0.95, "#FFF")
-       bg[SELECTED]                                = shade (1.25, "#5c8fe9")   # Default
-       bg[INSENSITIVE]                             = shade (0.88, "#FFF")
-
-       engine "murrine" {
-               border_shades           = {1.0, 0.90}
-               contrast                = 0.90
-               gradient_shades         = {1.25,1.02,1.01,1.05}         
-               lightborderstyle                = 1
-               lightborder_shade               = 1.1
-               textstyle               = 1
-       }
-}
-
-style "checkradio_label" {     
-       fg[ACTIVE]              = @text_color           # Forzar color texto en radiobutton-eclipse
-}
-
-style "checkbutton" {
-       engine "pixmap" {
-               image {
-                       function = CHECK
-                       recolorable = TRUE
-                       state = NORMAL
-                       shadow = OUT
-                       overlay_file = "assets/l-checkbox-unchecked-18.png"
-                       overlay_stretch = FALSE
-               }
-
-               image {
-                       function = CHECK
-                       recolorable = TRUE
-                       state = PRELIGHT
-                       shadow = OUT
-                       overlay_file = "assets/l-checkbox-unchecked-18.png"
-                       overlay_stretch = FALSE
-               }
-
-               image {
-                       function = CHECK
-                       recolorable = TRUE
-                       state = ACTIVE
-                       shadow = OUT
-                       overlay_file = "assets/l-checkbox-unchecked-18.png"
-                       overlay_stretch = FALSE
-               }
-
-               image {
-                       function = CHECK
-                       recolorable = TRUE
-                       state = INSENSITIVE
-                       shadow = OUT
-                       overlay_file = "assets/l-checkbox-unchecked-insensitive-18.png"
-                       overlay_stretch = FALSE
-               }
-
-               image {
-                       function = CHECK
-                       recolorable = TRUE
-                       state = NORMAL
-                       shadow = IN
-                       overlay_file = "assets/l-checkbox-checked-18.png"
-                       overlay_stretch = FALSE
-               }
-
-               image {
-                       function = CHECK
-                       recolorable = TRUE
-                       state = PRELIGHT
-                       shadow = IN
-                       overlay_file = "assets/l-checkbox-checked-18.png"
-                       overlay_stretch = FALSE
-               }
-
-               image {
-                       function = CHECK
-                       recolorable = TRUE
-                       state = ACTIVE
-                       shadow = IN
-                       overlay_file = "assets/l-checkbox-checked-18.png"
-                       overlay_stretch = FALSE
-               }
-
-
-               image {
-                       function = CHECK
-                       recolorable = TRUE
-                       state = INSENSITIVE
-                       shadow = IN
-                       overlay_file = "assets/l-checkbox-checked-insensitive-18.png"
-                       overlay_stretch = FALSE
-               }
-
-               image {
-                       function = FLAT_BOX
-                       recolorable = TRUE
-                       stretch = TRUE
-                       file = "assets/null.png"
-                       border = {2, 2, 2, 2}
-               }
-       }
-}
-
-style "entry" { # text
-       xthickness      = 3
-       ythickness      = 3
-
-       bg[SELECTED]    = mix (0.5, @selected_bg_color, @base_color)
-       fg[SELECTED]    = @text_color
-
-       engine "murrine" {
-               contrast        = 1.0           
-               roundness       = 3             
-               border_shades           = {1.45, 1.35}
-               focusstyle                              = 3
-        
-       }
-}
-
-style "expander" {
-       bg[NORMAL]              = "#FFF"
-       fg[NORMAL]              = shade (2.0, @text_color)
-       fg[PRELIGHT]            = shade (2.0, @text_color)
-
-       engine "murrine" {
-               contrast        = 1.2
-               gradient_shades = {1.0, 1.0, 1.0, 1.0}
-       }
-}
-
-style "frame_title" {
-       fg[NORMAL]      = lighter (@fg_color)
-}
-
-style "handle" {
-       engine "pixmap" {
-               image {
-                       function        = HANDLE
-                       overlay_file    = "assets/handle.png"
-                       overlay_border  = {0, 0, 0, 0}
-                       overlay_stretch = FALSE
-                       orientation     = HORIZONTAL
-                       file            = "assets/null.png"
-                       border          = {0, 0, 0, 0}
-                       stretch         = TRUE
-               }
-
-               image {
-                       function        = HANDLE
-                       overlay_file    = "assets/handle.png"
-                       overlay_border  = {0, 0, 0, 0}
-                       overlay_stretch = FALSE
-                       orientation     = VERTICAL
-                       file            = "assets/null.png"
-                       border          = {0, 0, 0, 0}
-                       stretch         = TRUE
-               }
-       }
-}
-class "GtkPaned"       style "handle"
-
-style "menubar" {
-    # Modificado
-       xthickness      = 3
-       ythickness      = 3
-
-    fg[NORMAL]          = shade (1.99, @fg_color)
-       bg[NORMAL]                      = shade (0.90, @bg_color)
-
-       engine "murrine" {
-               gradient_shades         = {1.00,0.96,0.96,0.89}
-        border_shades                  = {1.1, 0.9}
-               contrast                = 1.10
-               lightborderstyle                = 1
-       }
-}
-
-style "menu" {
-       xthickness      = 0
-       ythickness      = 0
-
-       bg[NORMAL]      = shade (1.05, "#ededed")
-
-       GtkMenuItem::arrow-scaling      = 0.5
-       
-       engine "murrine" {
-               gradient_shades         = {1.0, 1.0, 1.0, 1.0}
-               border_shades           = {1.1, 0.9}
-               roundness                       = 0 # 0 = squared
-        contrast            = 0.8
-       }
-}
-
-style "menu_item_white" {
-       xthickness      = 2
-       ythickness      = 3
-
-       fg[PRELIGHT]    = @selected_fg_color
-    bg[PRELIGHT]       = @menu_gradient
-    bg[SELECTED]       = @menu_gradient
-
-       engine "murrine" {
-        gradient_shades                = {1.20, 1.10, 1.10, 1.00}
-        roundness           = 1
-               border_shades           = {1.60, 1.0}
-        roundness           = 1
-        contrast            = 0.9
-       }
-}
-
-style "menu_item_black" {
-       xthickness      = 2
-       ythickness      = 3
-
-       fg[PRELIGHT]    = @selected_fg_color
-    bg[PRELIGHT]      = shade (0.94, "#3C3CF0")
-    bg[SELECTED]      = shade (0.94, "#3C3CF0")
-
-       engine "murrine" {
-        gradient_shades                = {1.30, 1.15, 1.15, 1.00}
-        roundness           = 1
-        #contrast            = 0.0
-       }
-}
-
-style "notebook" { 
-    xthickness = 2  
-       ythickness      = 2
-
-       bg[NORMAL]                              = shade (0.96, @bg_color)       # selected tab entire
-       bg[ACTIVE]                              = shade (1.12, @bg_color)       # unselected tab
-
-       engine "murrine" {
-               gradient_shades         = {1.20,0.98,0.92,0.65}
-               contrast                        = 0.75
-               roundness                       = 3 
-       }
-
-}
-
-style "progressbar" {
-       xthickness      = 0
-       ythickness      = 0
-
-       fg[PRELIGHT]    = @selected_fg_color
-       #bg[SELECTED]           = "#7088CA"
-       bg[SELECTED]            =shade (0.90, "#80B8EA")
-
-       engine "murrine" {
-               gradient_shades         = {1.30, 1.15, 1.15, 1.0}
-               roundness                       = 4
-       }
-}
-
-style "radiobutton" {
-       engine "pixmap" {
-               image {
-                       function = OPTION
-                       recolorable = TRUE
-                       state = NORMAL
-                       shadow = OUT
-                       overlay_file = "assets/l-radio-unselected-18.png"
-                       overlay_stretch = FALSE
-               }
-
-               image {
-                       function = OPTION
-                       recolorable = TRUE
-                       state = PRELIGHT
-                       shadow = OUT
-                       overlay_file = "assets/l-radio-unselected-18.png"
-                       overlay_stretch = FALSE
-               }
-
-               image {
-                       function = OPTION
-                       recolorable = TRUE
-                       state = ACTIVE
-                       shadow = OUT
-                       overlay_file = "assets/l-radio-unselected-18.png"
-                       overlay_stretch = FALSE
-               }
-
-               image {
-                       function = OPTION
-                       recolorable = TRUE
-                       state = INSENSITIVE
-                       shadow = OUT
-                       overlay_file = "assets/l-radio-unselected-insensitive-18.png"
-                       overlay_stretch = FALSE
-               }
-
-               image {
-                       function = OPTION
-                       recolorable = TRUE
-                       state = NORMAL
-                       shadow = IN
-                       overlay_file = "assets/l-radio-selected-18.png"
-                       overlay_stretch = FALSE
-               }
-
-               image {
-                       function = OPTION
-                       recolorable = TRUE
-                       state = PRELIGHT
-                       shadow = IN
-                       overlay_file = "assets/l-radio-selected-18.png"
-                       overlay_stretch = FALSE
-               }
-
-               image {
-                       function = OPTION
-                       recolorable = TRUE
-                       state = ACTIVE
-                       shadow = IN
-                       overlay_file = "assets/l-radio-selected-18.png"
-                       overlay_stretch = FALSE
-               }
-
-
-               image {
-                       function = OPTION
-                       recolorable = TRUE
-                       state = INSENSITIVE
-                       shadow = IN
-                       overlay_file = "assets/l-radio-selected-insensitive-18.png"
-                       overlay_stretch = FALSE
-               }
-
-               image {
-                       function = FLAT_BOX
-                       recolorable = TRUE
-                       stretch = TRUE
-                       file = "assets/null.png"
-                       border = {2, 2, 2, 2}
-               }
-       }
-}
-
-style "scale" { # slider
-    # Modificado
-       xthickness      = 2
-       ythickness      = 2
-
-       bg[NORMAL]              = shade (0.90, "#8EBDDB")
-       bg[SELECTED]            = shade (0.90, "#8EBDDB")
-       bg[PRELIGHT]            = shade (0.90, "#8EBDDB")
-        bg[INSENSITIVE]         = shade (0.90, @bg_color)
-   
-       bg[ACTIVE]      = shade (0.95, @bg_color)
-
-       engine "murrine" {              
-        #gradient_shades               = {0.65,1.00,1.00,1.35}
-               gradient_shades         = {0.95,1.05,1.10,1.30}
-               glowstyle                       = 2 # 0 = top, 1 = bottom, 2 = top and bottom, 3 = horizontal, 4 = centered glow
-               glow_shade          = 1.99
-               roundness                   = 18
-               border_shades                   = {0.7, 1.2}
-               contrast                            = 0.6
-               lightborderstyle                = 1             
-               trough_shades                   = {0.9, 1.1}
-       }
-}
-
-style "scrollbar" {
-       bg[SELECTED]                = shade (0.74, @base_color)
-       bg[ACTIVE]                  = shade (0.96, @base_color)
-
-    # color flechas (stepper)  
-    fg[NORMAL]          = shade (1.00, @base_color)
-    fg[PRELIGHT]       = shade (1.00, @base_color)
-    fg[ACTIVE]         = shade (1.00, @base_color)
-    fg[SELECTED]        = shade (1.00, @base_color)
-    fg[INSENSITIVE]     = shade (1.00, @base_color)
-       
-       engine "murrine" {
-        roundness               = 8
-        gradient_shades                        = {1.0,1.0,1.0,1.0}
-        highlight_shade                        = 1.0
-        glow_shade              = 1.0
-        #reliefstyle             = 0
-        prelight_shade          = .75
-        gradient_colors         = FALSE
-        lightborder_shade       = 1.0
-        lightborderstyle        = 0
-        trough_shades           = {1.06, 1.11}
-        border_shades           = {1.24, 1.24}
-        contrast                = 0.00
-       }
-}
-
-style "overlay_scrollbar"
-{
-       bg[SELECTED]                            = shade (1.0, @selected_bg_color)
-       bg[INSENSITIVE]                         = shade (0.85, @bg_color)
-       bg[ACTIVE]                                      = shade (0.6, @bg_color)
-}
-
-style "spinbutton" = "button" { # input/stepper 
-       #bg[NORMAL]             = "#FFF"
-       engine "murrine" {
-               contrast                        = 0.90
-               lightborderstyle        = 0
-               border_shades       = {1.1, 0.9}
-        lightborder_shade      = 1.30
-       }
-}
-
-style "toolbar" {
-       
-       engine "murrine" {
-               contrast                = 0.80
-               lightborder_shade               = 1.00       
-               gradient_shades         = {0.98,1.00,1.00,1.02}        
-               # gradient_shades       = {1.00,0.98,0.98,0.96}  # En Unity
-       }
-}
-
-style "toolbar_button" {
-    xthickness = 3
-    ythickness = 3
-
-    bg[PRELIGHT]                    = shade (1.05, "#BBCCEE")
-    bg[ACTIVE]                      = shade (1.00, "#BBCCEE")  # Pulsado
-       bg[SELECTED]                                = shade (0.95, "#BBCCEE")   # Default enter
-       bg[INSENSITIVE]                             = shade (0.95, "#FFF")
-
-       engine "murrine" {
-               border_shades           = {1.00, 1.00}
-               contrast                = 0.8
-               gradient_shades         = {1.00,0.96,0.96,0.92}
-               lightborderstyle                = 1
-               textstyle               = 1
-       }
-
-}
-
-style "tooltips" {
-       xthickness      = 8
-       ythickness      = 4
-
-       bg[NORMAL]      = @tooltip_bg_color
-       fg[NORMAL]      = @tooltip_fg_color
-
-       GtkWidget::new-tooltip-style    = 0
-
-       engine "murrine" {
-               border_colors   = { "#343434", "#343434" }
-       }
-}
-
-style "treeview" {
-
-       engine "murrine" {
-               gradient_shades         = {1.0, 1.0, 1.0, 1.0}
-        separatorstyle = 0
-       }
-}
-
-style "treeview_header" = "button" {
-       ythickness      = 1
-    GtkWidget  ::focus-padding         = 0
-
-    bg[ACTIVE]                      = shade (1.00, "#80B8EA")  # Pulsado
-    bg[NORMAL]                      = shade (0.96, "#FFF")
-    bg[PRELIGHT]                    = shade (1.05, "#80B8EA")
-       bg[SELECTED]                                = shade (0.95, "#80B8EA")   # Default enter
-       bg[INSENSITIVE]                             = shade (1.00, "#FFF")
-
-       engine "murrine" {
-               border_shades           = {1.2, 1.05}
-               contrast                = 1.22
-               gradient_shades         = {1.25,1.02,0.99,1.15}
-
-               lightborderstyle                = 1
-               textstyle               = 1
-       }
-}
-
-style "checkradio" = "button" {
-    xthickness = 3
-    ythickness = 3
-       GtkRadioButton::indicator-size                          = 16
-       GtkCheckButton::indicator-size                          = 16
-
-       base[NORMAL]                                    = shade (0.95, @base_color)                     # radiocheck normal
-       bg[SELECTED]                                = shade (1.25, "#5c8fe9")                   # radiocheck color checked
-
-       text[NORMAL]                    = shade (0.50, @selected_bg_color)      # indicador normal    
-       text[PRELIGHT]                  = shade (0.35, @selected_bg_color)      # indicador hover
-       text[ACTIVE]                                    = shade (0.15, @selected_bg_color)      # indicador click
-
-    bg[ACTIVE]                      = shade (0.80, @bg_color)  # button option "#80B8EA"
-
-       engine "murrine" {
-               reliefstyle = 3
-       }
-}
-
-###############################################################################
-# The following part of the gtkrc applies the different styles to the widgets.
-###############################################################################
-
-# The default style is applied to every widget
-class "GtkWidget"                              style "default"
-class "GtkSeparator"                   style "wide"
-class "GtkFrame"                               style "wide"
-class "GtkCalendar"                            style "wide"
-class "GtkEntry"                               style "entry"
-
-
-class "GtkSpinButton"                  style "spinbutton"
-class "GtkScale"                               style "scale"
-class "GtkVScale"                              style "scale"
-class "GtkHScale"                              style "scale"
-
-class "GtkScrollbar"                   style "scrollbar"
-#widget "*ToggleSwitch*"               style "toolbar_button"
-widget_class "*<GtkToolbar>" style "toolbar"
-widget_class "*<GtkHandleBox>" style "toolbar"
-
-# Overlay scrollbar
-widget_class "*<OsScrollbar>"  style "overlay_scrollbar"
-widget_class "*<OsThumb>"              style "overlay_scrollbar"
-# General matching follows. The order is choosen so that the right styles override
-# each other. EG. progressbar needs to be more important than the menu match.
-widget_class "*<GtkButton>"                        style "button"
-widget_class "*<GtkNotebook>"                  style "notebook"
-
-widget_class "*<GtkSpinButton>.*.<GtkEntry>" style "entry"
-widget_class "*<GtkMenuBar>*"                  style "menubar"
-widget_class "*<GtkMenu>*"                         style "menu"
-widget_class "*<GtkMenuItem>*"                 style "menu_item_white"
-#widget_class "*<GtkMenuBar>.<GtkMenuItem>*"   style "menu_item_white"
-#widget_class "*<GtkMenuBar>.<GtkMenuItem>*"   style "menu_item_black"
-
-widget_class "*<GtkToolbar>.*.<GtkButton>*" style:highest  "toolbar_button"
-
-
-widget_class "*.<GtkFrame>.<GtkLabel>" style "frame_title"
-widget_class "*.<GtkTreeView>*"                        style "treeview"
-
-class "*GtkExpander*"                                          style "expander"
-
-widget_class "*<GtkProgress>"                  style "progressbar"
-
-# Treeview headers (and similar stock GTK+ widgets)
-widget_class "*.<GtkTreeView>.<GtkButton>"     style "treeview_header"
-widget_class "*.<GtkCTree>.<GtkButton>"                style "treeview_header"
-widget_class "*.<GtkList>.<GtkButton>"         style "treeview_header"
-widget_class "*.<GtkCList>.<GtkButton>"                style "treeview_header"
-
-# The window of the tooltip is called "gtk-tooltip"
-widget "gtk-tooltip*"                          style "tooltips"
-
-widget_class "*<GtkCheckButton>*"                              style             "checkbutton"
-widget_class "*<GtkDialog>*<GtkCheckButton>*"  style:highest "checkbutton"
-widget_class "*<GtkFrame>*<GtkCheckButton>*"   style:highest "checkbutton"
-widget_class "*<GtkNotebook>*<GtkCheckButton>*" style:highest "checkbutton"
-widget_class "*<GtkCheckButton>*<GtkLabel>"            style:highest "checkradio_label"
-
-widget_class "*<GtkRadioButton>*"                              style             "checkradio"
-widget_class "*<GtkDialog>*<GtkRadioButton>*"  style:highest "radiobutton"
-widget_class "*<GtkFrame>*<GtkRadioButton>*"   style:highest "radiobutton"
-widget_class "*<GtkNotebook>*<GtkRadioButton>*" style:highest "radiobutton"
-widget_class "*<GtkRadioButton>*<GtkLabel>"            style:highest "checkradio_label"
-
-widget "MozillaGtkWidget*GtkCheck*"                            style:highest "checkbutton"
-widget "MozillaGtkWidget*GtkRadio*"                            style:highest "radiobutton"
-
-##########################################################################
-# Following are special cases and workarounds for issues in applications.
-##########################################################################
-# For Google Chrome/Chromium integration.
-style "chrome-gtk-frame" {
-    ChromeGtkFrame::frame-gradient-size                        = 120
-    ChromeGtkFrame::frame-color                                        = shade (0.46, @bg_color)
-    ChromeGtkFrame::inactive-frame-color                       = shade (0.46, @bg_color)
-    ChromeGtkFrame::frame-gradient-color                   = shade (0.96, @bg_color)
-    ChromeGtkFrame::inactive-frame-gradient-color      = shade (0.96, @bg_color)
-    ChromeGtkFrame::scrollbar-trough-color                     = shade (1.00, @bg_color)
-    ChromeGtkFrame::scrollbar-slider-prelight-color = shade (0.85, @bg_color)
-    ChromeGtkFrame::scrollbar-slider-normal-color      = shade (0.78, @bg_color)
-}
-class "ChromeGtkFrame" style "chrome-gtk-frame"
-
-# For places where the text color is used instead of the fg color.
-style "text_is_fg_color_workaround" {
-       text[NORMAL]            = @fg_color
-       text[PRELIGHT]          = @fg_color
-       text[SELECTED]          = @selected_fg_color
-       text[ACTIVE]            = @fg_color
-       text[INSENSITIVE]       = darker (@bg_color)
-}
-widget_class "*.<GtkComboBox>.<GtkCellView>"   style "text_is_fg_color_workaround"
-
-# For menus where the text color is used instead of the fg color.
-style "menuitem_text_is_fg_color_workaround" {
-       text[NORMAL]            = @fg_color
-       text[PRELIGHT]          = @selected_fg_color
-       text[SELECTED]          = @selected_fg_color
-       text[ACTIVE]            = @fg_color
-       text[INSENSITIVE]       = darker (@bg_color)
-}
-widget "*.gtk-combobox-popup-menu.*"   style "menuitem_text_is_fg_color_workaround"
-
-# For places where the fg color is used instead of the text color.
-style "fg_is_text_color_workaround" {
-       fg[NORMAL]              = @text_color
-       fg[PRELIGHT]    = @text_color
-       fg[SELECTED]    = @selected_fg_color
-       fg[ACTIVE]              = @selected_fg_color
-       fg[INSENSITIVE] = darker (@bg_color)
-}
-widget_class "*<GtkListItem>*"         style "fg_is_text_color_workaround"
-widget_class "*<GtkCList>"                 style "fg_is_text_color_workaround"
-widget_class "*<EelEditableLabel>"     style "fg_is_text_color_workaround"
-
-# For gvim scrollbars.
-style "vim-scrollbar" = "scrollbar" {
-       GtkScrollbar    ::slider_width          = 16
-       GtkScrollbar    ::stepper_size          = 16
-
-       engine "pixmap" {
-               image {
-                       function        = BOX
-                       orientation     = VERTICAL
-                       file            = "assets/scroll-background.png"
-               }
-       }
-}
-widget "vim-main-window.*Scrollbar*"   style "vim-scrollbar"
-
-# For Eclipse (swt) toolbars.
-widget "*swt*toolbar*"                 style "default"
-
-
index c5b79fa..13caa9f 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -51,6 +51,236 @@ static char fromString = 0, lastChar = '\n';
 #define ALPHABETIC 2
 #define BADNUMBER (-2000000000)
 
+#define XCO    0
+#define YCO   53
+#define PIECE 94
+#define MISC 155
+#define JIS  200
+
+unsigned char kanjiTab[] = {
+  '1', 0357, 0274, 0221, // kanji notation for arabic digits
+  '2', 0357, 0274, 0222,
+  '3', 0357, 0274, 0223,
+  '4', 0357, 0274, 0224,
+  '5', 0357, 0274, 0225,
+  '6', 0357, 0274, 0226,
+  '7', 0357, 0274, 0227,
+  '8', 0357, 0274, 0230,
+  '9', 0357, 0274, 0231,
+  'x', 0345, 0220, 0214,
+  's', 0345, 0205, 0210, // sente
+  'g', 0345, 0276, 0214, // gote
+  '-', 0346, 0212, 0225, // resign
+   0,
+  'a', 0344, 0270, 0200, // in reality these are numbers in Japanese a=1, b=2 etc.
+  'b', 0344, 0272, 0214,
+  'c', 0344, 0270, 0211,
+  'd', 0345, 0233, 0233,
+  'e', 0344, 0272, 0224,
+  'f', 0345, 0205, 0255,
+  'g', 0344, 0270, 0203,
+  'h', 0345, 0205, 0253,
+  'i', 0344, 0271, 0235,
+  ' ', 0343, 0200, 0200,
+   0,
+  'K', 0347, 0216, 0211, // piece names
+  'K', 0347, 0216, 0213,
+  'G', 0351, 0207, 0221,
+  'S', 0351, 0212, 0200,
+  'R', 0351, 0243, 0233,
+  'B', 0350, 0247, 0222,
+  'N', 0346, 0241, 0202,
+  'L', 0351, 0246, 0231,
+  'P', 0346, 0255, 0251,
+  'r', 0351, 0276, 0215,
+  'b', 0351, 0246, 0254,
+  'p', 0343, 0201, 0250,
+  'r', 0347, 0253, 0234,
+  '+', 0346, 0210, 0220,
+  'G', 0, 0, 0,
+   0,
+  '+', 0346, 0210, 0220, // helper
+  '@', 0346, 0211, 0223,
+  'p', 0346, 0211, 0213, // player
+  ':', 0357, 0274, 0232,
+  '-', 0344, 0272, 0206,
+  'f', 0344, 0270, 0212,
+  's', 0345, 0257, 0204,
+  'b', 0345, 0274, 0225,
+  'r', 0345, 0267, 0246,
+  'l', 0345, 0217, 0263,
+  'v', 0347, 0233, 0264,
+   0,
+   // shift-JIS
+  '1', 0202, 0120, 0,
+  '2', 0202, 0121, 0,
+  '3', 0202, 0122, 0,
+  '4', 0202, 0123, 0,
+  '5', 0202, 0124, 0,
+  '6', 0202, 0125, 0,
+  '7', 0202, 0126, 0,
+  '8', 0202, 0127, 0,
+  '9', 0202, 0130, 0,
+  'x', 0223, 0257, 0,
+  's', 0220, 0346, 0,
+  'g', 0214, 0343, 0,
+  '-', 0223, 0212, 0,
+   0,
+  'a', 0210, 0352, 0, 
+  'b', 0223, 0361, 0, 
+  'c', 0216, 0117, 0, 
+  'd', 0216, 0154, 0, 
+  'e', 0214, 0334, 0, 
+  'f', 0230, 0132, 0, 
+  'g', 0216, 0265, 0, 
+  'h', 0224, 0252, 0, 
+  'i', 0213, 0343, 0, 
+  ' ', 0201, 0100, 0, 
+   0,
+  'K', 0213, 0312, 0, 
+  'K', 0213, 0312, 0, 
+  'G', 0213, 0340, 0, 
+  'S', 0213, 0342, 0, 
+  'R', 0224, 0362, 0, 
+  'B', 0212, 0160, 0,
+  'N', 0214, 0152, 0, 
+  'L', 0215, 0201, 0, 
+  'P', 0225, 0340, 0, 
+  'r', 0227, 0264, 0, 
+  'b', 0224, 0156, 0, 
+  'p', 0202, 0306, 0, 
+  'r', 0227, 0263, 0, 
+  '+', 0220, 0254, 0, 
+  'G', 0, 0, 0, 
+   0,
+  '+', 0220, 0254, 0, 
+  '@', 0221, 0305, 0, 
+//  'p', 0214, 0343, 0,
+  'p', 0216, 0350, 0,
+  ':', 0201, 0106, 0,
+  '-', 0227, 0271, 0,
+  'f', 0217, 0343, 0,
+  's', 0212, 0361, 0,
+  'b', 0210, 0370, 0,
+  'r', 0215, 0266, 0,
+  'l', 0211, 0105, 0,
+  'v', 0222, 0274, 0,
+   0,
+     
+};
+
+int NextUnit P((char **p));
+
+int kifu = 0;
+
+char
+GetKanji (char **p, int start)
+{
+    unsigned char *q = *(unsigned char **) p;
+    int i;
+
+    if((*q & 0x80) == 0) return 0; // plain ASCII, refuse to parse
+    if((**p & 0xC0) == 0x80) { // this is an illegal starting code in utf-8, so assume shift-JIS
+       for(i=start+JIS; kanjiTab[i]; i+=4) {
+           if(q[0] == kanjiTab[i+1] && q[1] == kanjiTab[i+2]) {
+               (*p) += 2; kifu = 0x80;
+               return kanjiTab[i];
+           }
+       }
+       (*p) += (kifu ? 2 : 1); // assume this is an unrecognized kanji when reading kif files
+       return 0;
+    }
+
+    for(i=start; kanjiTab[i]; i+=4) {
+       if(q[0] == kanjiTab[i+1] && q[1] == kanjiTab[i+2] && q[2] == kanjiTab[i+3]) {
+           (*p) += 3; kifu = 0x80;
+           return kanjiTab[i];
+       }
+    }
+
+    if((q[0] & 0xE0) == 0xC0 && (q[1] & 0xC0) == 0x80) (*p) += 2; else // for now skip unrecognized utf-8 characters
+    if((q[0] & 0xF0) == 0xE0 && (q[1] & 0xC0) == 0x80 && (q[2] & 0xC0) == 0x80) (*p) += 3; else
+    if((q[0] & 0xF8) == 0xF0 && (q[1] & 0xC0) == 0x80 && (q[2] & 0xC0) == 0x80 && (q[3] & 0xC0) == 0x80) (*p) += 4;
+    else if(**p & 0x80) return -1; // not valid utf-8
+
+    return 0; // unrecognized but valid kanji (skipped), or plain ASCII
+}
+
+int
+KifuMove (char **p)
+{
+    static char buf[MSG_SIZ];
+    char *ptr = buf+3, *q, k;
+    int wom = quickFlag ? quickFlag&1 : WhiteOnMove(yyboardindex);
+    k = GetKanji(p, XCO);
+    if(k < 0) { (*p)++; return Nothing; } // must try shift-JIS here
+    if(k >= '1' && k <= '9') {
+       buf[0] = k; buf[1] = GetKanji(p, YCO); // to-square coords
+    } else if(k == 'x') {
+       if(GetKanji(p, YCO) != ' ') (*p) -= 3; // skip spacer kanji after recapture 
+    } else if((k == 's' || k == 'g') && GetKanji(p, MISC) == 'p' && GetKanji(p, MISC) == ':') { // player name
+       snprintf(yytext, MSG_SIZ, "[%s \"", k == 's' ? "White" : "Black"); // construct PGN tag
+       for(q=yytext+8; **p && **p != '\n' && **p != '\r' && q < yytext + MSG_SIZ; ) *q++ = *(*p)++;
+       strcpy(q, "\"]\n"); parseStart = yytext; lastChar = '\n';
+       return PGNTag;
+    } else if(k == '-' && GetKanji(p, MISC) == '-') { // resign
+       int res;
+       parseStart = yytext;
+       if(wom)
+            res = BlackWins, strcpy(yytext, "{sente resigns} 0-1"); 
+       else res = WhiteWins, strcpy(yytext, "{gote resigns} 1-0");
+       return res;
+    } else {
+       while(**p && **p != '\n') (*p)++; // unrecognized Japanese kanji: skip to end of line
+       return Nothing;
+    }
+    buf[3] = GetKanji(p, PIECE); // piece ID
+    if(buf[3] == '+') buf[2] = '+', buf[3] = GetKanji(p, PIECE); // +N, +L, +S
+    k = GetKanji(p, MISC);
+    if(k == '@') { // drop move
+       buf[4] = '@', buf[5] = buf[0], buf[6] = buf[1]; buf[7] = NULLCHAR;
+       if(appData.debugMode) fprintf(debugFP, "kifu drop %s\n", ptr);
+       return NextUnit(&ptr);
+    }
+
+    kifu = 0x80;
+    do { // read disambiguation (and promotion) kanji
+       switch(k) {
+         case '+': kifu |= 1; break;
+         case 'f': kifu |= 2; break;
+         case 'b': kifu |= 4; break;
+         case 's': kifu |= 8; break;
+         case 'l': kifu |= 0x10; break;
+         case 'r': kifu |= 0x20; break;
+         case 'v': kifu |= 0x40; break;
+       }
+    } while(k = GetKanji(p, MISC));
+
+    if(**p == '(' && (*p)[3] == ')') { // kif disambiguation
+       buf[4] = (*p)[1]; buf[5] = (*p)[2] + 'a' - '1'; buf[6] = buf[0]; buf[7] = buf[1]; buf[8] = (kifu & 1)*'+'; buf[9] = NULLCHAR;
+       (*p) += 4; ptr++; // strip off piece name if we know full from-square
+       if(appData.debugMode) fprintf(debugFP, "kifu move %s\n", ptr);
+       return NextUnit(&ptr);
+    } else { // kif2
+       char *q = buf+4;
+       if(islower(buf[3])) // kludge: kanji for promoted types translate as lower case
+           buf[3] += 'A' - 'a', buf[2] = '+', ptr--;        // so prefix with '+'
+       if(kifu * ~1) { // disambiguation was given, and thus is probably needed
+           if(buf[3] != 'B' && buf[3] != 'R') {                // stepper, so distance must be <= 1 (N or L never need vertical disambiguation!)
+               if(kifu & 0x10) *q++ = buf[0] - (wom ? -1 : 1); // translate left/right/straight to PSN file disambiguators
+               if(kifu & 0x20) *q++ = buf[0] + (wom ? -1 : 1);
+               if(kifu & 0x40) *q++ = buf[0], kifu |= 2;       // kludge: 'straight' only needs disambiguation if forward!
+               if(kifu & 2) *q++ = buf[1] + (wom ? -1 : 1);    // translate forward/backward/sideway to PSN rank disambiguators
+               if(kifu & 4) *q++ = buf[1] - (wom ? -1 : 1);
+               if(kifu & 8) *q++ = buf[1];
+           } // for B, R, +B and +R it gets ugly, as we cannot deduce the distance, and the Disambiguate callback has to directly look at 'kifu'
+       }
+       *q++ = buf[0]; *q++ = buf[1]; *q++ = (kifu & 1)*'+'; *q = NULLCHAR;
+       if(appData.debugMode) fprintf(debugFP, "kif2 move %s\n", ptr);
+       return NextUnit(&ptr);
+    }
+}
+
 int
 ReadLine ()
 {   // Read one line from the input file, and append to the buffer
@@ -181,14 +411,17 @@ NextUnit (char **p)
        }
        parseStart = oldp = *p; // remember where we begin
 
-
        // ********* attempt to recognize a SAN move in the leading non-blank text *****
        piece = separator = promoted = slash = n = 0;
        for(i=0; i<4; i++) coord[i] = -1, type[i] = NOTHING;
+       if(**p & 0x80) return KifuMove(p); // non-ascii. Could be some kanj notation for Shogi or Xiangqi
        if(**p == '+') (*p)++, promoted++;
        if(**p >= 'a' && **p <= 'z' && (*p)[1]== '@') piece =*(*p)++ + 'A' - 'a'; else
        if(**p >= 'A' && **p <= 'Z') {
+            static char s[] = SUFFIXES;
+            char *q;
             piece = *(*p)++; // Note we could test for 2-byte non-ascii names here
+            if(q = strchr(s, **p)) (*p)++, piece += 64*(q - s + 1);
             if(**p == '/') slash = *(*p)++;
        }
         while(n < 4) {
@@ -259,7 +492,7 @@ NextUnit (char **p)
            else if(toY >= BOARD_HEIGHT || toY < 0)   return ImpossibleMove; // vert off-board to-square
            if(toX < BOARD_LEFT || toX >= BOARD_RGHT) return ImpossibleMove;
            if(piece) {
-               cl.pieceIn = CharToPiece(wom ? piece : ToLower(piece));
+               cl.pieceIn = CharToPiece(wom ? piece : piece + 'a' - 'A');
                if(cl.pieceIn == EmptySquare) return ImpossibleMove; // non-existent piece
                if(promoted) cl.pieceIn = (ChessSquare) (CHUPROMOTED cl.pieceIn);
            } else cl.pieceIn = EmptySquare;
@@ -267,6 +500,7 @@ NextUnit (char **p)
                fromY = DROP_RANK; fromX = cl.pieceIn;
                currentMoveString[0] = piece;
                currentMoveString[1] = '@';
+               currentMoveString[4] = NULLCHAR;
                return LegalityTest(boards[yyboardindex], PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, fromY, fromX, toY, toX, NULLCHAR);
            }
            if(type[1] == NOTHING && type[0] != NOTHING) { // there is a disambiguator
@@ -349,7 +583,7 @@ badMove:// we failed to find algebraic move
 
        // ********* PGN tags ******************************************
        if(**p == '[') {
-           oldp = ++(*p);
+           oldp = ++(*p); kifu = 0;
            if(Match("--", p)) { // "[--" could be start of position diagram
                if(!Scan(']', p) && (*p)[-3] == '-' && (*p)[-2] == '-') return PositionDiagram;
                *p = oldp;
@@ -418,7 +652,7 @@ badMove:// we failed to find algebraic move
                return (int) LegalityTest(boards[yyboardindex],
                              PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: e.p.!
                              rf, ff, rt, ft, promo);
-           }
+           } else if(Match("01", p)) return Nothing; // prevent this from being mistaken for move number 1
        }
 
 
@@ -443,6 +677,12 @@ badMove:// we failed to find algebraic move
            commentEnd = *p; if(i) return Comment; // return comment that runs to EOF immediately
        }
         if(commentEnd) SkipWhite(p);
+       if(kifu && **p == '*') { // .kif comment
+           char *q = yytext;
+           while(**p && **p != '\n') { if(q < yytext + 10*MSG_SIZ-3) *q++ = **p; (*p)++; }
+           parseStart = yytext; *yytext = '{'; strcpy(q, "}\n"); // wrap in braces
+           return Comment;
+       }
        if(Match("*", p)) result = GameUnfinished;
        else if(**p == '0') {
            if( Match("0-1", p) || Match("0/1", p) || Match("0:1", p) ||
@@ -528,6 +768,7 @@ badMove:// we failed to find algebraic move
            *p = oldp; // we might need to re-match the skipped stuff
        }
 
+       if(Match("---", p)) { while(**p == '-') (*p)++; return Nothing; } // prevent separators parsing as null move
        if(Match("@@@@", p) || Match("--", p) || Match("Z0", p) || Match("pass", p) || Match("null", p)) {
            strncpy(currentMoveString, "@@@@", 5);
            return yyboardindex & F_WHITE_ON_MOVE ? WhiteDrop : BlackDrop;
@@ -589,6 +830,7 @@ yylex ()
 {   // this replaces the flex-generated parser
     int result = NextUnit(&parsePtr);
     char *p = parseStart, *q = yytext;
+    if(p == yytext) return result;   // kludge to allow kanji expansion
     while(p < parsePtr) *q++ = *p++; // copy the matched text to yytext[]
     *q = NULLCHAR;
     lastChar = q[-1];
index 80d877b..c2e114e 100755 (executable)
@@ -1,3 +1,3 @@
 # whitespace separated list of translated languages goes below
 # note: zh translations are untested; xboard fails to create a fontset for them
-da de es it nl pl ru sr tr uk vi zh_CN zh_HK zh_TW
+da de es fr it nl pl ru sr tr uk vi zh_CN zh_HK zh_TW
index 0ad0efd..b483787 100644 (file)
--- a/po/da.po
+++ b/po/da.po
@@ -21,48 +21,48 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNU xboard 4.6.0.20120304\n"
 "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n"
-"POT-Creation-Date: 2014-10-17 21:25-0700\n"
+"POT-Creation-Date: 2014-10-24 08:20-0700\n"
 "PO-Revision-Date: 2012-03-06 12:27+0100\n"
 "Last-Translator: Byrial Ole Jensen <byrial@vip.cybercity.dk>\n"
 "Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
+"Language: da\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Language: da\n"
 "X-Generator: Lokalize 1.2\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: args.h:839
+#: args.h:840
 #, c-format
 msgid "%s in settings file\n"
 msgstr "%s i indstillingsfil\n"
 
-#: args.h:873
+#: args.h:874
 #, c-format
 msgid "Bad integer value %s"
 msgstr "Forkert heltalsværdi %s"
 
-#: args.h:979 args.h:1240
+#: args.h:980 args.h:1241
 #, c-format
 msgid "Unrecognized argument %s"
 msgstr "Ikke genkendt argument %s"
 
-#: args.h:1010
+#: args.h:1011
 #, c-format
 msgid "No value provided for argument %s"
 msgstr "Ingen værdi givet for argumentet %s"
 
-#: args.h:1070
+#: args.h:1071
 #, c-format
 msgid "Incomplete \\ escape in value for %s"
 msgstr "Ukomplet \\-undvigesekvens i værdi for %s"
 
-#: args.h:1181
+#: args.h:1182
 #, c-format
 msgid "Failed to open indirection file %s"
 msgstr "Åbning af inkluderet fil \"%s\" mislykkedes"
 
-#: args.h:1198
+#: args.h:1199
 #, c-format
 msgid "Unrecognized boolean argument value %s"
 msgstr "Ikke genkendt boolesk argumentværdi %s"
@@ -2203,7 +2203,7 @@ msgstr "Meddelelse"
 msgid "Note"
 msgstr "Notits"
 
-#: dialogs.c:2370 dialogs.c:2655 dialogs.c:2658
+#: dialogs.c:2370 dialogs.c:2656 dialogs.c:2659
 msgid "White"
 msgstr "Hvid"
 
@@ -2231,7 +2231,7 @@ msgstr "Tomt felt"
 msgid "Clear board"
 msgstr "Ryd bræt"
 
-#: dialogs.c:2374 dialogs.c:2667 dialogs.c:2670
+#: dialogs.c:2374 dialogs.c:2668 dialogs.c:2671
 msgid "Black"
 msgstr "Sort"
 
@@ -2283,54 +2283,54 @@ msgstr ""
 msgid ">>"
 msgstr ""
 
-#: dialogs.c:2773
+#: dialogs.c:2774
 #, fuzzy
 msgid "Directories:"
 msgstr "Lydkatalog:"
 
-#: dialogs.c:2774
+#: dialogs.c:2775
 #, fuzzy
 msgid "Files:"
 msgstr "Fil"
 
-#: dialogs.c:2775
+#: dialogs.c:2776
 msgid "by name"
 msgstr ""
 
-#: dialogs.c:2776
+#: dialogs.c:2777
 msgid "by type"
 msgstr ""
 
-#: dialogs.c:2779
+#: dialogs.c:2780
 #, fuzzy
 msgid "Filename:"
 msgstr "Filter:"
 
-#: dialogs.c:2780
+#: dialogs.c:2781
 #, fuzzy
 msgid "New directory"
 msgstr "Skakprogramkatalog:"
 
-#: dialogs.c:2781
+#: dialogs.c:2782
 #, fuzzy
 msgid "File type:"
 msgstr "Filter:"
 
-#: dialogs.c:2856
+#: dialogs.c:2857
 #, fuzzy
 msgid "Contents of"
 msgstr "Kommentarer"
 
-#: dialogs.c:2882
+#: dialogs.c:2883
 #, fuzzy
 msgid "  next page"
 msgstr "næste side"
 
-#: dialogs.c:2899
+#: dialogs.c:2900
 msgid "FIRST TYPE DIRECTORY NAME HERE"
 msgstr ""
 
-#: dialogs.c:2900
+#: dialogs.c:2901
 msgid "TRY ANOTHER NAME"
 msgstr ""
 
@@ -2363,52 +2363,52 @@ msgstr "SPS"
 msgid "Reading game file (%d)"
 msgstr "Læser partifil (%d)"
 
-#: gtk/xboard.c:972 xaw/xboard.c:1072
+#: gtk/xboard.c:975 xaw/xboard.c:1072
 #, c-format
 msgid "%s: can't cd to CHESSDIR: "
 msgstr "%s: kan ikke cd til CHESSDIR: "
 
-#: gtk/xboard.c:981 xaw/xboard.c:1081
+#: gtk/xboard.c:984 xaw/xboard.c:1081
 #, c-format
 msgid "Failed to open file '%s'\n"
 msgstr "Åbning af filen \"%s\" mislykkedes\n"
 
-#: gtk/xboard.c:996 xaw/xboard.c:1090
+#: gtk/xboard.c:999 xaw/xboard.c:1090
 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size"
 msgstr ""
 "Genoversæt med større BOARD_RANKS eller BOARD_FILES for at understøtte denne "
 "størrelse"
 
-#: gtk/xboard.c:1015 xaw/xboard.c:1122
+#: gtk/xboard.c:1018 xaw/xboard.c:1122
 #, c-format
 msgid "%s: bad boardSize syntax %s\n"
 msgstr "%s: forkert boardSize-syntaks %s\n"
 
-#: gtk/xboard.c:1058 xaw/xboard.c:1161
+#: gtk/xboard.c:1061 xaw/xboard.c:1161
 #, c-format
 msgid "%s: unrecognized boardSize name %s\n"
 msgstr "%s: ikke genkendt boardSize-navn %s\n"
 
-#: gtk/xboard.c:1097 xaw/xboard.c:1198
+#: gtk/xboard.c:1100 xaw/xboard.c:1198
 #, c-format
 msgid "%s: too few colors available; trying monochrome mode\n"
 msgstr "%s: for få farver tilgængelige; prøver monokrom tilstand\n"
 
-#: gtk/xboard.c:1411 xaw/xboard.c:1490
+#: gtk/xboard.c:1414 xaw/xboard.c:1490
 #, c-format
 msgid "Unable to create font set for %s.\n"
 msgstr "Kan ikke lave skrifttypegruppe for %s.\n"
 
-#: gtk/xboard.c:1436 xaw/xboard.c:1513
+#: gtk/xboard.c:1439 xaw/xboard.c:1513
 #, c-format
 msgid "%s: no fonts match pattern %s\n"
 msgstr "%s: Ingen skrifttyper matcher mønstret %s\n"
 
-#: gtk/xboard.c:1888 xaw/xboard.c:2003
+#: gtk/xboard.c:1900 xaw/xboard.c:2003
 msgid "Can't open temp file"
 msgstr "Kan ikke åbne midlertidig fil"
 
-#: gtk/xboard.c:2371
+#: gtk/xboard.c:2383
 msgid "Failed to open file"
 msgstr "Åbning af fil mislykkedes"
 
index 2964070..e2593b0 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -2,55 +2,57 @@
 # Copyright (C) 2012 Free Software Foundation, Inc.
 # This file is distributed under the same license as the XBoard package.
 # Arun Persaud <arun@nubati.net>, 2009,2012,2013
+# Roland Illig <roland.illig@gmx.de>, 2015
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: xboard 4.7.2\n"
+"Project-Id-Version: xboard 4.8.0\n"
 "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n"
-"POT-Creation-Date: 2014-10-17 21:25-0700\n"
-"PO-Revision-Date: 2013-11-24 18:22-0800\n"
-"Last-Translator: Arun Persaud <arun@nubati.net>\n"
+"POT-Creation-Date: 2014-10-24 08:20-0700\n"
+"PO-Revision-Date: 2015-04-28 19:26+0100\n"
+"Last-Translator: Roland Illig <roland.illig@gmx.de>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
+"Language: de\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Language: de\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 1.7.5\n"
 
-#: args.h:839
+#: args.h:840
 #, c-format
 msgid "%s in settings file\n"
-msgstr ""
+msgstr "%s in der Konfigurationsdatei\n"
 
-#: args.h:873
+#: args.h:874
 #, c-format
 msgid "Bad integer value %s"
-msgstr "Falscher Integer-wert %s"
+msgstr "Falscher ganzzahliger Wert %s"
 
-#: args.h:979 args.h:1240
+#: args.h:980 args.h:1241
 #, c-format
 msgid "Unrecognized argument %s"
 msgstr "Nicht erkanntes Argument %s"
 
-#: args.h:1010
+#: args.h:1011
 #, c-format
 msgid "No value provided for argument %s"
 msgstr "Fehlender Wert für Argument %s"
 
-#: args.h:1070
+#: args.h:1071
 #, c-format
 msgid "Incomplete \\ escape in value for %s"
-msgstr "Unvollständiges \\ escape im Wert von »%s«"
+msgstr "Unvollständiges \\-Escape im Wert von »%s«"
 
-#: args.h:1181
+#: args.h:1182
 #, c-format
 msgid "Failed to open indirection file %s"
 msgstr "Fehler beim Öffnen der Datei »%s«"
 
-#: args.h:1198
+#: args.h:1199
 #, c-format
 msgid "Unrecognized boolean argument value %s"
-msgstr "Nicht anerkannter logischer Wert für Argument %s"
+msgstr "Unbekannter logischer Wert für Argument %s"
 
 #. TRANSLATORS: "first" is the first of possible two chess engines. It is inserted into strings
 #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing
@@ -95,7 +97,7 @@ msgstr "Unbekannte Variante mit Namen %s"
 
 #: backend.c:1452
 msgid "Starting chess program"
-msgstr "Starte Schachprogramm"
+msgstr "Schachprogramm wird gestartet"
 
 #: backend.c:1475
 msgid "Bad game file"
@@ -110,15 +112,14 @@ msgid "Pick new game"
 msgstr "Wähle neues Spiel"
 
 #: backend.c:1565
-#, fuzzy
 msgid ""
 "You restarted an already completed tourney.\n"
 "One more cycle will now be added to it.\n"
 "Games commence in 10 sec."
 msgstr ""
-"Ein schon beendetes Turnier wurde neu gestartet\n"
-"Eine neue Runde wird hinzugefügt\n"
-"Die Spiele werden in 10 Sekunden starten"
+"Sie haben ein Turnier neu gestartet, das schon beendet war.\n"
+"Eine neue Runde wird hinzugefügt.\n"
+"Die Spiele werden in 10 Sekunden starten."
 
 #: backend.c:1572
 #, c-format
@@ -137,8 +138,7 @@ msgstr "Konnte Kommunikationsport %s nicht öffnen"
 #: backend.c:1636
 #, c-format
 msgid "Could not connect to host %s, port %s"
-msgstr ""
-"Verbindung zu Hostrechner %s, Portnummer %s konnte nicht hergestellt werden"
+msgstr "Verbindung zu Hostrechner %s, Portnummer %s konnte nicht hergestellt werden"
 
 #: backend.c:1692
 #, c-format
@@ -147,7 +147,7 @@ msgstr "Unbekannter initalMode %s"
 
 #: backend.c:1718
 msgid "AnalyzeFile mode requires a game file"
-msgstr "»Analysiere Datei«-Modus benötigt eine Partiedatei"
+msgstr "»Datei analysieren«-Modus benötigt eine Partiedatei"
 
 #: backend.c:1745
 msgid "Analysis mode requires a chess engine"
@@ -195,7 +195,7 @@ msgstr "Fehler beim Lesen der Tastatur"
 
 #: backend.c:1981
 msgid "Got end of file from keyboard"
-msgstr "Habe Ende-der-Datei von der Tastatur erhalten"
+msgstr "Ende-der-Datei von der Tastatur erhalten"
 
 #: backend.c:2289
 #, c-format
@@ -293,7 +293,7 @@ msgstr "Schwarz ist am Zug"
 
 #: backend.c:6761
 msgid "Displayed position is not current"
-msgstr "Angezeigte Position ist nicht die Aktuelle"
+msgstr "Angezeigte Position ist nicht die aktuelle"
 
 #: backend.c:7007
 msgid "Illegal move"
@@ -313,7 +313,7 @@ msgstr "Bewege Bauern rückwärts zum Unterverwandeln"
 
 #: backend.c:7588
 msgid "only marked squares are legal"
-msgstr ""
+msgstr "Nur markierte Felder sind erlaubt"
 
 #: backend.c:7876
 msgid "Swiss tourney finished"
@@ -321,11 +321,11 @@ msgstr "Turnier im Schweizer System beendet"
 
 #: backend.c:8392
 msgid "could not load EGBB library"
-msgstr ""
+msgstr "EGBB-Bibliothek konnte nicht geladen werden"
 
 #: backend.c:8395
 msgid "wrong EGBB version"
-msgstr ""
+msgstr "Falsche EGBB-Version"
 
 #: backend.c:8508
 msgid "Invalid pairing from pairing engine"
@@ -342,7 +342,7 @@ msgstr "Schlechte FEN vom Schachprogramm erhalten"
 
 #: backend.c:9030
 msgid "Engine did not send setup for non-standard variant"
-msgstr ""
+msgstr "Engine hat die Startaufstellung für die Spielvariante nicht gesendet"
 
 #: backend.c:9103 backend.c:14302 backend.c:14370
 #, c-format
@@ -378,13 +378,12 @@ msgid "Machine accepts your draw offer"
 msgstr "Das Schachprogramm akzeptiert dein Remisangebot"
 
 #: backend.c:9404
-#, fuzzy
 msgid ""
 "Machine offers a draw.\n"
 "Select Action / Draw to accept."
 msgstr ""
-"Das Schachprogramm bietet Remis an\n"
-"Wähle Aktion/Remis, um anzunehmen"
+"Das Schachprogramm bietet Remis an.\n"
+"Wähle Aktion/Remis, um anzunehmen."
 
 #. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone
 #: backend.c:9489
@@ -413,7 +412,7 @@ msgstr "Variante %s wird von %s nicht unterstützt"
 #: backend.c:10461
 #, c-format
 msgid ", but %s is"
-msgstr ""
+msgstr ", aber %s ist"
 
 #: backend.c:10616
 #, c-format
@@ -479,7 +478,7 @@ msgstr "Fehler in Turnierdatei"
 
 #: backend.c:11052
 msgid "Waiting for other game(s)"
-msgstr "Warte auf weiter Spiele"
+msgstr "Warte auf weitere Spiele"
 
 #: backend.c:11065
 msgid "No pairing engine specified"
@@ -493,12 +492,12 @@ msgstr "Partie %s gegen %s: Endergebnis %d-%d-%d"
 #: backend.c:12019 backend.c:12050
 #, c-format
 msgid "Illegal move: %d.%s%s"
-msgstr "Illegaler Zug: %d.%s%s"
+msgstr "Unerlaubter Zug: %d.%s%s"
 
 #: backend.c:12039
 #, c-format
 msgid "Ambiguous move: %d.%s%s"
-msgstr "Nicht eindeutiger Zug: %d.%s%s"
+msgstr "Mehrdeutiger Zug: %d.%s%s"
 
 #: backend.c:12093 backend.c:13137 backend.c:13330 backend.c:13700
 #, c-format
@@ -575,7 +574,7 @@ msgstr "Fehlerhafte Suche"
 
 #: backend.c:13707
 msgid "Saving position"
-msgstr "Speichere Stellung "
+msgstr "Stellung wird gespeichert"
 
 #: backend.c:13833
 msgid ""
@@ -611,8 +610,7 @@ msgid ""
 "Use Reload CMail Message and make your move again."
 msgstr ""
 "Die CMail-Nachricht wurde noch nicht geladen.\n"
-"Benutzen sie »CMail Nachricht erneut laden« und führen Sie ihren Zug erneut "
-"aus."
+"Benutzen sie »CMail Nachricht erneut laden« und führen Sie ihren Zug erneut aus."
 
 #: backend.c:13916
 msgid "No unfinished games"
@@ -702,16 +700,15 @@ msgstr "Schwarz ist nicht am Zug"
 #: backend.c:14609
 #, c-format
 msgid "Starting %s chess program"
-msgstr "Starte %s Schachprogramm"
+msgstr "Schachprogramm %s wird gestartet"
 
 #: backend.c:14637 backend.c:15799
-#, fuzzy
 msgid ""
 "Wait until your turn,\n"
 "or select 'Move Now'."
 msgstr ""
-"Warte bis Sie am Zug sind\n"
-"oder wähle »Ziehe jetzt«"
+"Warten Sie, bis Sie am Zug sind,\n"
+"oder wählen Sie »Jetzt ziehen«."
 
 #: backend.c:14774
 msgid "Training mode off"
@@ -759,7 +756,7 @@ msgstr "Ihr Gegner hat die Zeit noch nicht überschritten"
 
 #: backend.c:15433
 msgid "You must make your move before offering a draw"
-msgstr "Sie müssem erst ziehen bevor Sie Remis anbieten können"
+msgstr "Sie müssen erst ziehen, bevor Sie Remis anbieten können"
 
 #: backend.c:15781
 msgid "You are not examining a game"
@@ -767,16 +764,15 @@ msgstr "Sie untersuchen keine Partie"
 
 #: backend.c:15785
 msgid "You can't revert while pausing"
-msgstr "Sie können nicht zurücknehmen solange die Partie pausiert"
+msgstr "Sie können nicht zurücknehmen, solange die Partie pausiert"
 
 #: backend.c:15839 backend.c:15846
 msgid "It is your turn"
 msgstr "Sie sind am Zug"
 
 #: backend.c:15897 backend.c:15904 backend.c:15990 backend.c:15997
-#, fuzzy
 msgid "Wait until your turn."
-msgstr "Warten Sie bis Sie am Zug sind"
+msgstr "Warten Sie, bis Sie am Zug sind."
 
 #: backend.c:15909
 msgid "No hint available"
@@ -817,7 +813,7 @@ msgstr "Schachprogramm %s hat zu viele Optionen\n"
 
 #: backend.c:17074
 msgid "Displayed move is not current"
-msgstr "Angezeigter Zug ist nicht aktuell"
+msgstr "Der angezeigte Zug ist nicht der aktuelle"
 
 #: backend.c:17083
 msgid "Could not parse move"
@@ -825,15 +821,15 @@ msgstr "Konnte Zug nicht parsen"
 
 #: backend.c:17208 backend.c:17230
 msgid "Both flags fell"
-msgstr "Beide Zeitkontrollen überschritten"
+msgstr "Beide Plättchen sind gefallen"
 
 #: backend.c:17210
 msgid "White's flag fell"
-msgstr "Weiß überschritt die Zeitkontrolle"
+msgstr "Das weiße Plättchen ist gefallen"
 
 #: backend.c:17232
 msgid "Black's flag fell"
-msgstr "Schwarz überschritt die Zeitkontrolle"
+msgstr "Das schwarze Plättchen ist gefallen"
 
 #: backend.c:17363
 msgid "Clock adjustment not allowed in auto-flag mode"
@@ -841,11 +837,11 @@ msgstr "Veränderungen an der Uhr sind im »Auto-flag«-Modus nicht erlaubt"
 
 #: backend.c:18275
 msgid "Bad FEN position in clipboard"
-msgstr "Schlechte FEN-Stellung in der Zwischenablage"
+msgstr "Fehlerhafte FEN-Stellung in der Zwischenablage"
 
 #: book.c:579 book.c:836
 msgid "Polyglot book not valid"
-msgstr "Polyglot-buch nicht zulässig"
+msgstr "Polyglotbuch nicht zulässig"
 
 #: book.c:703
 msgid "Book Fault"
@@ -853,11 +849,11 @@ msgstr "Buchfehler"
 
 #: book.c:839
 msgid "Hash keys are different"
-msgstr "Hash-schlüssel verschieden"
+msgstr "Hashschlüssel sind verschieden"
 
 #: book.c:1015
 msgid "Could not create book"
-msgstr "Konnte Buch nicht erzeugen"
+msgstr "Buch konnte nicht erzeugt werden"
 
 #: dialogs.c:283
 msgid "Tournament file:          "
@@ -865,7 +861,7 @@ msgstr "Turnierdatei:          "
 
 #: dialogs.c:284
 msgid "For concurrent playing of tourney with multiple XBoards:"
-msgstr ""
+msgstr "Zum gleichzeitigen Durchführen eines Turniers mit mehreren XBoards:"
 
 #: dialogs.c:285
 msgid "Sync after round"
@@ -881,7 +877,7 @@ msgstr "Tunierteilnehmer:"
 
 #: dialogs.c:288
 msgid "Select Engine:"
-msgstr "Wähle Schachprogramm:"
+msgstr "Schachprogramm auswählen:"
 
 #: dialogs.c:296
 msgid "Tourney type (0 = round-robin, 1 = gauntlet):"
@@ -893,7 +889,7 @@ msgstr "Anzahl der Turnierrunden:"
 
 #: dialogs.c:298
 msgid "Default Number of Games in Match (or Pairing):"
-msgstr ""
+msgstr "Standardanzahl der Spiele pro Match (oder Paarung):"
 
 #: dialogs.c:299
 msgid "Pause between Match Games (msec):"
@@ -905,11 +901,11 @@ msgstr "Speichere Turnierspiele:"
 
 #: dialogs.c:301
 msgid "Game File with Opening Lines:"
-msgstr ""
+msgstr "Spieldatei mit Eröffnungen:"
 
 #: dialogs.c:302
 msgid "Game Number (-1 or -2 = Auto-Increment):"
-msgstr ""
+msgstr "Spielnummer (-1 oder -2 bedeutet automatische Zählung):"
 
 #: dialogs.c:303
 msgid "File with Start Positions:"
@@ -917,24 +913,23 @@ msgstr "Datei mit Startstellung:"
 
 #: dialogs.c:304
 msgid "Position Number (-1 or -2 = Auto-Increment):"
-msgstr ""
+msgstr "Positionsnummer (-1 oder -2 bedeutet automatische Zählung):"
 
 #: dialogs.c:305
 msgid "Rewind Index after this many Games (0 = never):"
-msgstr ""
+msgstr "Index nach so vielen Spielen zurücksetzen (0 = niemals):"
 
 #: dialogs.c:306
 msgid "Disable own engine books by default"
-msgstr ""
+msgstr "Eigene Eröffnungsbücher standardmäßig deaktivieren"
 
 #: dialogs.c:307 dialogs.c:1671
 msgid "Time Control"
 msgstr "Zeitkontrolle"
 
 #: dialogs.c:308
-#, fuzzy
 msgid "Common Engine"
-msgstr "Allgemein Schachprogramme…"
+msgstr "Allgemeines Schachprogramm"
 
 #: dialogs.c:309 dialogs.c:441
 msgid "General Options"
@@ -942,25 +937,23 @@ msgstr "Allgemeine Einstellungen"
 
 #: dialogs.c:310
 msgid "Continue Later"
-msgstr ""
+msgstr "Später fortsetzen"
 
 #: dialogs.c:311
 msgid "Replace Engine"
-msgstr "Ersetze Schachprogramm"
+msgstr "Schachprogramm ersetzen"
 
 #: dialogs.c:312
 msgid "Upgrade Engine"
-msgstr "Ersetze Schachprogramm"
+msgstr "Schachprogramm aktualisieren"
 
 #: dialogs.c:313
 msgid "Clone Tourney"
-msgstr "Klone Turnier"
+msgstr "Turnier klonen"
 
 #: dialogs.c:351
 msgid "First you must specify an existing tourney file to clone"
-msgstr ""
-"Bitte geben Sie zuerst eine existierende Turnierdatei, die geklont werden "
-"kann"
+msgstr "Bitte geben Sie zuerst eine existierende Turnierdatei an, die geklont werden soll"
 
 #: dialogs.c:367 dialogs.c:1512
 msgid "# no engines are installed"
@@ -968,20 +961,19 @@ msgstr "# keine Schachprogramme installiert"
 
 #: dialogs.c:375
 msgid "Internal error: PARTICIPANTS set wrong"
-msgstr ""
+msgstr "Interner Fehler: PARTICIPANTS falsch"
 
 #: dialogs.c:383
-#, fuzzy
 msgid "Tournament Options"
-msgstr "Klangeinstellungen"
+msgstr "Turniereinstellungen"
 
 #: dialogs.c:402
 msgid "Absolute Analysis Scores"
-msgstr ""
+msgstr "Absolute Analysepunkte"
 
 #: dialogs.c:403
 msgid "Almost Always Queen (Detour Under-Promote)"
-msgstr ""
+msgstr "Fast immer Dame (Unterverwandlung vermeiden)"
 
 #: dialogs.c:404 menus.c:736
 msgid "Animate Dragging"
@@ -1006,7 +998,7 @@ msgstr "Blindschach"
 #. TRANSLATORS: the drop menu is used to drop a piece, e.g. during bughouse or editing a position
 #: dialogs.c:410
 msgid "Drop Menu"
-msgstr ""
+msgstr "Loslassmenü"
 
 #: dialogs.c:411
 msgid "Enable Variation Trees"
@@ -1014,11 +1006,11 @@ msgstr "Erlaube Varianten"
 
 #: dialogs.c:412
 msgid "Headers in Engine Output Window"
-msgstr ""
+msgstr "Kopfzeilen im Schachprogramm-Ausgabefenster"
 
 #: dialogs.c:413
 msgid "Hide Thinking from Human"
-msgstr ""
+msgstr "Nachdenken vor dem Menschen verstecken"
 
 #: dialogs.c:414 menus.c:745
 msgid "Highlight Last Move"
@@ -1034,11 +1026,11 @@ msgstr "Ein-Klick Züge"
 
 #: dialogs.c:417
 msgid "Periodic Updates (in Analysis Mode)"
-msgstr ""
+msgstr "Regelmäßige Aktualisierung (im Analysemodus)"
 
 #: dialogs.c:419
 msgid "Play Move(s) of Clicked PV (Analysis)"
-msgstr ""
+msgstr "Züge der angeklickten Variante spielen (Analyse)"
 
 #: dialogs.c:420 dialogs.c:620 menus.c:750
 msgid "Ponder Next Move"
@@ -1066,79 +1058,75 @@ msgstr "Zeige Zielfeld"
 
 #: dialogs.c:426
 msgid "Sticky Windows"
-msgstr ""
+msgstr "Haftende Fenster"
 
 #: dialogs.c:427 menus.c:755
 msgid "Test Legality"
-msgstr ""
+msgstr "Auf erlaubte Züge prüfen"
 
 #: dialogs.c:428
 msgid "Top-Level Dialogs"
-msgstr ""
+msgstr "Haupt-Dialoge"
 
 #: dialogs.c:429
 msgid "Flash Moves (0 = no flashing):"
-msgstr ""
+msgstr "Züge blinken lassen (0 = nicht blinken):"
 
 #: dialogs.c:430
 msgid "Flash Rate (high = fast):"
-msgstr ""
+msgstr "Blinkgeschwindigkeit (hoch = schnell):"
 
 #: dialogs.c:431
 msgid "Animation Speed (high = slow):"
-msgstr ""
+msgstr "Animationsgeschwindigkeit (hoch = langsam):"
 
 #: dialogs.c:432
 msgid "Zoom factor in Evaluation Graph:"
 msgstr "Vergrößerungsfaktor in Auswertungsgraph:"
 
 #: dialogs.c:452
-#, fuzzy
 msgid "Normal"
 msgstr "Normal"
 
 #: dialogs.c:453
 msgid "Makruk"
-msgstr ""
+msgstr "Makruk"
 
 #: dialogs.c:454
 msgid "FRC"
-msgstr ""
+msgstr "Schach960"
 
 #: dialogs.c:455
 msgid "Shatranj"
-msgstr ""
+msgstr "Schatrandsch"
 
 #: dialogs.c:456
-#, fuzzy
 msgid "Wild castle"
-msgstr "keine Rochade"
+msgstr "Wilde Rochade"
 
 #: dialogs.c:457
-#, fuzzy
 msgid "Knightmate"
-msgstr "Springer"
+msgstr "Springermatt"
 
 #: dialogs.c:458
-#, fuzzy
 msgid "No castle"
-msgstr "keine Rochade"
+msgstr "Keine Rochade"
 
 #: dialogs.c:459
 msgid "Cylinder *"
-msgstr ""
+msgstr "Zylinder *"
 
 #: dialogs.c:460
 msgid "3-checks"
-msgstr ""
+msgstr "3-fach-Schach"
 
 #: dialogs.c:461
 msgid "berolina *"
-msgstr ""
+msgstr "Berolina *"
 
 #: dialogs.c:462
 msgid "atomic"
-msgstr ""
+msgstr "Atomschach"
 
 #: dialogs.c:463
 msgid "two kings"
@@ -1150,7 +1138,7 @@ msgstr " "
 
 #: dialogs.c:465
 msgid "Spartan"
-msgstr ""
+msgstr "Sparta-Schach"
 
 #: dialogs.c:466
 msgid "Board size ( -1 = default for selected variant):"
@@ -1166,103 +1154,103 @@ msgstr "Anzahl der Linien:"
 
 #: dialogs.c:469
 msgid "Holdings Size:"
-msgstr ""
+msgstr "Vorrats-Größe:"
 
 #: dialogs.c:471
 msgid ""
 "Variants marked with * can only be played\n"
 "with legality testing off."
 msgstr ""
+"Varianten, die mit * markiert sind, können nur gespielt\n"
+"werden, wenn die Prüfung auf erlaubte Züge ausgeschaltet ist."
 
 #: dialogs.c:473
 msgid "ASEAN"
-msgstr ""
+msgstr "ASEAN-Schach"
 
 #: dialogs.c:474
 msgid "Great Shatranj (10x8)"
-msgstr ""
+msgstr "Groß-Schatrandsch (10×8)"
 
 #: dialogs.c:475
 msgid "Seirawan"
-msgstr ""
+msgstr "Seiwaran"
 
 #: dialogs.c:476
 msgid "Falcon (10x8)"
-msgstr ""
+msgstr "Falken-Schach"
 
 #: dialogs.c:477
 msgid "Superchess"
-msgstr ""
+msgstr "Superschach"
 
 #: dialogs.c:478
 msgid "Capablanca (10x8)"
-msgstr ""
+msgstr "Capablanca (10×8)"
 
 #: dialogs.c:479
 msgid "Crazyhouse"
-msgstr ""
+msgstr "Crazyhouse"
 
 #: dialogs.c:480
 msgid "Gothic (10x8)"
-msgstr ""
+msgstr "Gothic (10×8)"
 
 #: dialogs.c:481
-#, fuzzy
 msgid "Bughouse"
-msgstr "Tandemschach"
+msgstr "Bughouse"
 
 #: dialogs.c:482
 msgid "Janus (10x8)"
-msgstr ""
+msgstr "Janusschach (10×8)"
 
 #: dialogs.c:483
-#, fuzzy
 msgid "Suicide"
 msgstr "Räuberschach"
 
 #: dialogs.c:484
 msgid "CRC (10x8)"
-msgstr ""
+msgstr "CRC (10×8)"
 
 #: dialogs.c:485
 msgid "give-away"
-msgstr ""
+msgstr "Verzichten"
 
 #: dialogs.c:486
 msgid "grand (10x10)"
-msgstr ""
+msgstr "groß (10×10)"
 
 #: dialogs.c:487
 msgid "losers"
-msgstr ""
+msgstr "Losers"
 
 #: dialogs.c:488
 msgid "shogi (9x9)"
-msgstr ""
+msgstr "Shogi (9×9)"
 
 #: dialogs.c:489
 msgid "fairy"
-msgstr ""
+msgstr "Feenschach"
 
 #: dialogs.c:490
 msgid "xiangqi (9x10)"
-msgstr ""
+msgstr "Xiangqi (9×10)"
 
 #: dialogs.c:491
 msgid "mighty lion"
-msgstr ""
+msgstr "Mächtiger Löwe"
 
 #: dialogs.c:492
 msgid "courier (12x8)"
-msgstr ""
+msgstr "Kurier (12×8)"
 
 #: dialogs.c:493
 msgid "elven chess (10x10)"
-msgstr ""
+msgstr "Elfenschach (10×10)"
 
 #: dialogs.c:494
 msgid "chu shogi (12x12)"
-msgstr ""
+msgstr "Chu-Shogi (12×12)"
 
 #: dialogs.c:538
 #, c-format
@@ -1272,7 +1260,7 @@ msgstr "Warnung: zweites Schachprogramm (%s) unterstützt dies nicht!"
 #: dialogs.c:566
 #, c-format
 msgid "Only bughouse is not available in viewer mode."
-msgstr ""
+msgstr "Nur Bughouse ist nicht im Partieansicht-Modus verfügbar."
 
 #: dialogs.c:567
 #, c-format
@@ -1280,6 +1268,8 @@ msgid ""
 "All variants not supported by the first engine\n"
 "(currently %s) are disabled."
 msgstr ""
+"Alle Varianten, die das erste Schachprogramm nicht kann\n"
+"(derzeit %s) sind deaktiviert."
 
 #: dialogs.c:589
 msgid "New Variant"
@@ -1291,7 +1281,7 @@ msgstr "Maximal Anzahl der CPUs pro Schachprogram:"
 
 #: dialogs.c:622
 msgid "Polygot Directory:"
-msgstr "Polyglot-verzeichnis:"
+msgstr "Polyglotverzeichnis:"
 
 #: dialogs.c:623
 msgid "Hash-Table Size (MB):"
@@ -1299,15 +1289,15 @@ msgstr "Größe der Hashtabelle (MB):"
 
 #: dialogs.c:624
 msgid "EGTB Path:"
-msgstr ""
+msgstr "EGTB-Pfad:"
 
 #: dialogs.c:625
 msgid "EGTB Cache Size (MB):"
-msgstr ""
+msgstr "EGTB-Cachegröße (MB):"
 
 #: dialogs.c:626
 msgid "Use GUI Book"
-msgstr ""
+msgstr "GUI-Buch benutzen"
 
 #: dialogs.c:627
 msgid "Opening-Book Filename:"
@@ -1315,39 +1305,39 @@ msgstr "Dateiname des Eröffnungsbuches:"
 
 #: dialogs.c:628
 msgid "Book Depth (moves):"
-msgstr ""
+msgstr "Buchtiefe (Züge):"
 
 #: dialogs.c:629
 msgid "Book Variety (0) vs. Strength (100):"
-msgstr ""
+msgstr "Buchvielfalt (0) gegenüber Spielstärke (100):"
 
 #: dialogs.c:630
 msgid "Engine #1 Has Own Book"
-msgstr ""
+msgstr "Engine #1 hat eigenes Buch"
 
 #: dialogs.c:631
 msgid "Engine #2 Has Own Book          "
-msgstr ""
+msgstr "Engine #2 hat eigenes Buch"
 
 #: dialogs.c:642
 msgid "Common Engine Settings"
-msgstr ""
+msgstr "Allgemeine Schachprogramm-Einstellungen"
 
 #: dialogs.c:648
 msgid "Detect all Mates"
-msgstr ""
+msgstr "Alle Mattbilder erkennen"
 
 #: dialogs.c:649
 msgid "Verify Engine Result Claims"
-msgstr ""
+msgstr "Partieergebnisse des Schachprogramms kontrollieren"
 
 #: dialogs.c:650
 msgid "Draw if Insufficient Mating Material"
-msgstr ""
+msgstr "Remis bei zuwenig Material zum Mattsetzen"
 
 #: dialogs.c:651
 msgid "Adjudicate Trivial Draws (3-Move Delay)"
-msgstr ""
+msgstr "Triviale Remis entscheiden (nach 3 Zügen)"
 
 #: dialogs.c:652
 msgid "N-Move Rule:"
@@ -1355,11 +1345,11 @@ msgstr "N-Züge Regel:"
 
 #: dialogs.c:653
 msgid "N-fold Repeats:"
-msgstr ""
+msgstr "N-fache Stellungswiederholung:"
 
 #: dialogs.c:654
 msgid "Draw after N Moves Total:"
-msgstr "Remis nach N Zügen (total):"
+msgstr "Remis nach N Zügen (insgesamt):"
 
 #: dialogs.c:655
 msgid "Win / Loss Threshold:"
@@ -1374,9 +1364,8 @@ msgid "Negate Score of Engine #2"
 msgstr "Negiere Bewertung des 2. Schachprogramms"
 
 #: dialogs.c:664
-#, fuzzy
 msgid "Adjudicate non-ICS Games"
-msgstr "Gewinn Weiß zuerkennen"
+msgstr "Nicht-ICS-Spiele entscheiden"
 
 #: dialogs.c:677
 msgid "Auto-Kibitz"
@@ -1396,7 +1385,7 @@ msgstr "Automatisch das Brett in den Vordergrung bringen"
 
 #: dialogs.c:681
 msgid "Auto-Create Logon Script"
-msgstr "Automatisch Login-skript erzeugen"
+msgstr "Automatisch Login-Skript erzeugen"
 
 #: dialogs.c:682
 msgid "Background Observe while Playing"
@@ -1412,7 +1401,7 @@ msgstr "Zugliste abholen"
 
 #: dialogs.c:685
 msgid "Quiet Play"
-msgstr ""
+msgstr "Ruhiges Spiel"
 
 #: dialogs.c:686
 msgid "Seek Graph"
@@ -1420,24 +1409,23 @@ msgstr "Suchgraph"
 
 #: dialogs.c:687
 msgid "Auto-Refresh Seek Graph"
-msgstr ""
+msgstr "Suchgraph automatisch aktualisieren"
 
 #: dialogs.c:688
 msgid "Auto-InputBox PopUp"
-msgstr ""
+msgstr "Automatisches Eingabefenster einblenden"
 
 #: dialogs.c:689
-#, fuzzy
 msgid "Quit after game"
-msgstr "Warte auf weiter Spiele"
+msgstr "Nach der Partie beenden"
 
 #: dialogs.c:690
 msgid "Premove"
-msgstr ""
+msgstr "Vorzeitiges Ziehen"
 
 #: dialogs.c:691
 msgid "Premove for White"
-msgstr ""
+msgstr "Vorzeitiges Ziehen für Weiß"
 
 #: dialogs.c:692
 msgid "First White Move:"
@@ -1445,7 +1433,7 @@ msgstr "Erster Zug von Weiß:"
 
 #: dialogs.c:693
 msgid "Premove for Black"
-msgstr ""
+msgstr "Vorzeitiges Ziehen für Schwarz"
 
 #: dialogs.c:694
 msgid "First Black Move:"
@@ -1461,7 +1449,7 @@ msgstr "Alarmzeit (msek):"
 
 #: dialogs.c:699
 msgid "Colorize Messages"
-msgstr "Nachrichten kolorieren"
+msgstr "Nachrichten einfärben"
 
 #: dialogs.c:700
 msgid "Shout Text Colors:"
@@ -1493,16 +1481,15 @@ msgstr "Textfarbe Herausforderung:"
 
 #: dialogs.c:707
 msgid "Request Text Colors:"
-msgstr ""
+msgstr "Textfarbe für Anfragen:"
 
 #: dialogs.c:708
 msgid "Seek Text Colors:"
 msgstr "Textfarbe Spielgesuch:"
 
 #: dialogs.c:709
-#, fuzzy
 msgid "Other Text Colors:"
-msgstr "Textfarbe andere Kanäle:"
+msgstr "Andere Textfarben:"
 
 #: dialogs.c:716
 msgid "ICS Options"
@@ -1510,11 +1497,11 @@ msgstr "ICS Optionen"
 
 #: dialogs.c:721
 msgid "Exact position match"
-msgstr ""
+msgstr "Exakte Stellungsübereinstimmung"
 
 #: dialogs.c:721
 msgid "Shown position is subset"
-msgstr ""
+msgstr "Die angezeigte Stellung ist eine Teilstellung"
 
 #: dialogs.c:721
 msgid "Same material with exactly same Pawn chain"
@@ -1526,25 +1513,27 @@ msgstr "Gleiches Material"
 
 #: dialogs.c:722
 msgid "Material range (top board half optional)"
-msgstr ""
+msgstr "Materialstärke (obere Bretthälfte ist optional)"
 
 #: dialogs.c:722
 msgid "Material difference (optional stuff balanced)"
-msgstr ""
+msgstr "Materialunterschied (optionale Figuren ausgeglichen)"
 
 #: dialogs.c:737
 msgid "Auto-Display Tags"
-msgstr ""
+msgstr "Markierungen automatisch anzeigen"
 
 #: dialogs.c:738
 msgid "Auto-Display Comment"
-msgstr ""
+msgstr "Kommentar automatisch anzeigen"
 
 #: dialogs.c:739
 msgid ""
 "Auto-Play speed of loaded games\n"
 "(0 = instant, -1 = off):"
 msgstr ""
+"Abspielgeschwindigkeit von geladenen Spielen\n"
+"(0 = sofort, -1 = aus):"
 
 #: dialogs.c:740
 msgid "Seconds per Move:"
@@ -1555,12 +1544,16 @@ msgid ""
 "\n"
 "options to use in game-viewer mode:"
 msgstr ""
+"\n"
+"Einstellungen für den Spielbetrachten-Modus:"
 
 #: dialogs.c:743
 msgid ""
 "\n"
 "Thresholds for position filtering in game list:"
 msgstr ""
+"\n"
+"Schwellwert für Stellungsfilter in Partieliste:"
 
 #: dialogs.c:744
 msgid "Elo of strongest player at least:"
@@ -1572,23 +1565,23 @@ msgstr "Mind. Elo des schwächsten Spielers:"
 
 #: dialogs.c:746
 msgid "No games before year:"
-msgstr "Keine Partie vor Jahr:"
+msgstr "Nur Partien ab Jahr:"
 
 #: dialogs.c:747
 msgid "Minimum nr consecutive positions:"
-msgstr ""
+msgstr "Mindestanzahl von aufeinanderfolgenden Stellungen:"
 
 #: dialogs.c:749
 msgid "Search mode:"
-msgstr "Such-modus:"
+msgstr "Suchmodus:"
 
 #: dialogs.c:750
 msgid "Also match reversed colors"
-msgstr ""
+msgstr "Auch mit vertauschten Farben suchen"
 
 #: dialogs.c:751
 msgid "Also match left-right flipped position"
-msgstr ""
+msgstr "Auch gespiegelte Positionen suchen"
 
 #: dialogs.c:760
 msgid "Load Game Options"
@@ -1612,23 +1605,23 @@ msgstr "Speichere Endstellung in Datei:"
 
 #: dialogs.c:776
 msgid "PGN Event Header:"
-msgstr ""
+msgstr "PGN-Veranstaltungs-Kopfzeile:"
 
 #: dialogs.c:777
 msgid "Old Save Style (as opposed to PGN)"
-msgstr ""
+msgstr "Alter Speichermodus (im Gegensatz zu PGN)"
 
 #: dialogs.c:778
 msgid "Include Number Tag in tourney PGN"
-msgstr ""
+msgstr "Nummernkennzeichen in Turnier-PGN einschließen"
 
 #: dialogs.c:779
 msgid "Save Score/Depth Info in PGN"
-msgstr ""
+msgstr "Stellungsbewertung/Rechentiefe in PGN speichern"
 
 #: dialogs.c:780
 msgid "Save Out-of-Book Info in PGN           "
-msgstr ""
+msgstr "Eröffnungsbuch-Daten in PGN speichern"
 
 #: dialogs.c:787
 msgid "Save Game Options"
@@ -1640,11 +1633,11 @@ msgstr "Kein Ton"
 
 #: dialogs.c:797
 msgid "Default Beep"
-msgstr ""
+msgstr "Standard-Piepton"
 
 #: dialogs.c:798
 msgid "Above WAV File"
-msgstr ""
+msgstr "Obige WAV-Datei"
 
 #: dialogs.c:799
 msgid "Car Horn"
@@ -1652,15 +1645,15 @@ msgstr "Hupe"
 
 #: dialogs.c:800
 msgid "Cymbal"
-msgstr ""
+msgstr "Becken"
 
 #: dialogs.c:801
 msgid "Ding"
-msgstr ""
+msgstr "Ding"
 
 #: dialogs.c:802
 msgid "Gong"
-msgstr ""
+msgstr "Gong"
 
 #: dialogs.c:803
 msgid "Laser"
@@ -1668,27 +1661,27 @@ msgstr "Laser"
 
 #: dialogs.c:804
 msgid "Penalty"
-msgstr ""
+msgstr "Strafe"
 
 #: dialogs.c:805
 msgid "Phone"
-msgstr ""
+msgstr "Telefon"
 
 #: dialogs.c:806
 msgid "Pop"
-msgstr ""
+msgstr "Pop"
 
 #: dialogs.c:807
 msgid "Roar"
-msgstr ""
+msgstr "Fauchen"
 
 #: dialogs.c:808
 msgid "Slap"
-msgstr ""
+msgstr "Schlagbass"
 
 #: dialogs.c:809
 msgid "Wood Thunk"
-msgstr ""
+msgstr "Holzblock"
 
 #: dialogs.c:811
 msgid "User File"
@@ -1696,11 +1689,11 @@ msgstr "Benutzerdatei"
 
 #: dialogs.c:834
 msgid "User WAV File:"
-msgstr ""
+msgstr "Eigene WAV-Datei:"
 
 #: dialogs.c:835
 msgid "Sound Program:"
-msgstr ""
+msgstr "Abspielprogramm:"
 
 #: dialogs.c:836
 msgid "Try-Out Sound:"
@@ -1768,11 +1761,11 @@ msgstr "Kibitz:"
 
 #: dialogs.c:853
 msgid "Request:"
-msgstr ""
+msgstr "Anfrage:"
 
 #: dialogs.c:854
 msgid "Lion roar:"
-msgstr ""
+msgstr "Löwenfauchen:"
 
 #: dialogs.c:855
 msgid "Seek:"
@@ -1784,11 +1777,11 @@ msgstr "Klangeinstellungen"
 
 #: dialogs.c:887
 msgid "Selectable themes:"
-msgstr ""
+msgstr "Wählbare Designs:"
 
 #: dialogs.c:889
 msgid "New name for current theme:"
-msgstr ""
+msgstr "Neuer Name für aktuelles Design:"
 
 #: dialogs.c:892
 msgid "White Piece Color:"
@@ -1836,23 +1829,23 @@ msgstr "Farbe zum Hervorheben:"
 
 #: dialogs.c:926
 msgid "Premove Highlight Color:"
-msgstr ""
+msgstr "Farbe zum Hervorheben vorzeitiger Züge:"
 
 #: dialogs.c:932
 msgid "Flip Pieces Shogi Style        (Colored buttons restore default)"
-msgstr ""
+msgstr "Figuren im Shogi-Stil umdrehen (Farbige Schaltflächen setzen die Einstellung zurück)"
 
 #: dialogs.c:934
 msgid "Mono Mode"
-msgstr ""
+msgstr "Mono-Modus"
 
 #: dialogs.c:935
 msgid "Logo Size (0=off, requires restart):"
-msgstr ""
+msgstr "Logo-Größe (0=aus, benötigt Neustart):"
 
 #: dialogs.c:936
 msgid "Line Gap (-1 = default for board size):"
-msgstr ""
+msgstr "Linienabstand (-1 = Vorgabewert für Brettgröße):"
 
 #: dialogs.c:937
 msgid "Use Board Textures"
@@ -1875,9 +1868,8 @@ msgid "Directory with Pieces Images:"
 msgstr "Verzeichnis mit Bildern für Figuren:"
 
 #: dialogs.c:1012
-#, fuzzy
 msgid "# no themes are defined"
-msgstr "# keine Schachprogramme installiert"
+msgstr "# keine Designs installiert"
 
 #: dialogs.c:1024
 msgid "Board Options"
@@ -1889,16 +1881,15 @@ msgstr "ICS-Textmenü"
 
 #: dialogs.c:1124
 msgid "clear"
-msgstr ""
+msgstr "Leeren"
 
 #: dialogs.c:1125 dialogs.c:1224
 msgid "save changes"
-msgstr "speichere Änderungen"
+msgstr "Änderungen speichern"
 
 #: dialogs.c:1223
-#, fuzzy
 msgid "add next move"
-msgstr "Nächstes Spiel laden"
+msgstr "Nächsten Zug hinzufügen"
 
 #: dialogs.c:1247
 msgid "Edit book"
@@ -1926,11 +1917,11 @@ msgstr "Schachprogrammeinstellungen"
 
 #: dialogs.c:1470
 msgid "Select engine from list:"
-msgstr "Wähle Schachprogram aus der Liste:"
+msgstr "Schachprogram aus der Liste auswählen:"
 
 #: dialogs.c:1473
 msgid "or specify one below:"
-msgstr ""
+msgstr "Oder geben Sie unten eins an:"
 
 #: dialogs.c:1474
 msgid "Nickname (optional):"
@@ -1938,11 +1929,11 @@ msgstr "Spitzname (optional):"
 
 #: dialogs.c:1475
 msgid "Use nickname in PGN player tags of engine-engine games"
-msgstr ""
+msgstr "Spitzname in PGN-Spieler-Kennzeichen bei Spielen zwischen Schachprogrammen benutzen"
 
 #: dialogs.c:1476
 msgid "Engine Directory:"
-msgstr ""
+msgstr "Schachprogramm-Verzeichnis:"
 
 #: dialogs.c:1477
 msgid "Engine Command:"
@@ -1954,15 +1945,15 @@ msgstr "(Verzeichnis wird vom Schachprogrampfad genommen, falls leer)"
 
 #: dialogs.c:1479
 msgid "UCI"
-msgstr ""
+msgstr "UCI"
 
 #: dialogs.c:1480
 msgid "WB protocol v1 (do not wait for engine features)"
-msgstr ""
+msgstr "WB-Protokoll Version 1 (nicht auf Features des Schachprogramms warten)"
 
 #: dialogs.c:1481
 msgid "Must not use GUI book"
-msgstr ""
+msgstr "Kein GUI-Buch benutzen"
 
 #: dialogs.c:1482
 msgid "Add this engine to the list"
@@ -1970,7 +1961,7 @@ msgstr "Füge diese Schachprogramm zur Liste hinzu"
 
 #: dialogs.c:1483
 msgid "Force current variant with this engine"
-msgstr ""
+msgstr "Aktuelle Variante mit diesem Schachprogramm erzwingen"
 
 #: dialogs.c:1533
 msgid "Load first engine"
@@ -1986,7 +1977,7 @@ msgstr "Shuffle"
 
 #: dialogs.c:1563
 msgid "Fischer castling"
-msgstr ""
+msgstr "Fischer-Rochade"
 
 #: dialogs.c:1564
 msgid "Start-position number:"
@@ -1998,7 +1989,7 @@ msgstr "zufällig"
 
 #: dialogs.c:1566
 msgid "pick fixed"
-msgstr ""
+msgstr "Feste Aufstellung auswählen"
 
 #: dialogs.c:1583
 msgid "New Shuffle Game"
@@ -2014,23 +2005,23 @@ msgstr "Zuwachs"
 
 #: dialogs.c:1604
 msgid "fixed max"
-msgstr ""
+msgstr "Feste Maximalbedenkzeit"
 
 #: dialogs.c:1605
 msgid "Moves per session:"
-msgstr ""
+msgstr "Züge pro Sitzung:"
 
 #: dialogs.c:1606
 msgid "Initial time (min):"
-msgstr ""
+msgstr "Grundbedenkzeit (min):"
 
 #: dialogs.c:1607
 msgid "Increment or max (sec/move):"
-msgstr ""
+msgstr "Zeitbonus oder Maximalbedenkzeit (sek/Zug):"
 
 #: dialogs.c:1608
 msgid "Time-Odds factors:"
-msgstr ""
+msgstr "Ungleiche Zeitverteilung:"
 
 #: dialogs.c:1609
 msgid "Engine #1"
@@ -2091,7 +2082,7 @@ msgstr "Erzbischof"
 
 #: dialogs.c:1788 dialogs.c:2372 dialogs.c:2376
 msgid "Chancellor"
-msgstr "Kanlzer"
+msgstr "Kanzler"
 
 #: dialogs.c:1790 dialogs.c:2371 dialogs.c:2375 dialogs.c:2393
 msgid "Queen"
@@ -2099,42 +2090,40 @@ msgstr "Königin"
 
 #: dialogs.c:1792
 msgid "Lion"
-msgstr ""
+msgstr "Löwe"
 
 #: dialogs.c:1796
 msgid "Defer"
-msgstr "vertagen"
+msgstr "Vertagen"
 
 #: dialogs.c:1797 dialogs.c:2372 dialogs.c:2376
 msgid "Promote"
-msgstr "umwandlung"
+msgstr "Umwandeln"
 
 #: dialogs.c:1854
 msgid "Chats:"
-msgstr ""
+msgstr "Chats:"
 
 #: dialogs.c:1855 dialogs.c:1856 dialogs.c:1857 dialogs.c:1858 dialogs.c:1859
 #: dialogs.c:1957 dialogs.c:2017 dialogs.c:2049
-#, fuzzy
 msgid "New Chat"
-msgstr "Neue Variante"
+msgstr "Neuer Chat"
 
 #: dialogs.c:1862
 msgid "Chat partner:"
-msgstr ""
+msgstr "Chatpartner:"
 
 #: dialogs.c:1863
 msgid "End Chat"
-msgstr ""
+msgstr "Chat beenden"
 
 #: dialogs.c:1864
 msgid "Hide"
-msgstr ""
+msgstr "Verstecken"
 
 #: dialogs.c:2074
-#, fuzzy
 msgid "ICS Interaction"
-msgstr "ICS Optionen"
+msgstr "ICS-Interaktion"
 
 #: dialogs.c:2141
 msgid "factory"
@@ -2154,7 +2143,7 @@ msgstr "Keine Markierung selektiert"
 
 #: dialogs.c:2193
 msgid "Game-list options"
-msgstr "Spieleliste-optionen"
+msgstr "Spieleliste-Optionen"
 
 #: dialogs.c:2269 dialogs.c:2283
 msgid "Error"
@@ -2166,7 +2155,7 @@ msgstr "Schwerwiegender Fehler"
 
 #: dialogs.c:2306
 msgid "Exiting"
-msgstr "Beende"
+msgstr "Programm wird beendet"
 
 #: dialogs.c:2317
 msgid "Information"
@@ -2176,7 +2165,7 @@ msgstr "Information"
 msgid "Note"
 msgstr "Notiz"
 
-#: dialogs.c:2370 dialogs.c:2655 dialogs.c:2658
+#: dialogs.c:2370 dialogs.c:2656 dialogs.c:2659
 msgid "White"
 msgstr "Weiß"
 
@@ -2194,7 +2183,7 @@ msgstr "Kanone"
 
 #: dialogs.c:2372 dialogs.c:2376
 msgid "Demote"
-msgstr "degradieren"
+msgstr "Degradieren"
 
 #: dialogs.c:2373 dialogs.c:2377
 msgid "Empty square"
@@ -2204,7 +2193,7 @@ msgstr "Leeres Feld"
 msgid "Clear board"
 msgstr "Brett leeren"
 
-#: dialogs.c:2374 dialogs.c:2667 dialogs.c:2670
+#: dialogs.c:2374 dialogs.c:2668 dialogs.c:2671
 msgid "Black"
 msgstr "Schwarz"
 
@@ -2242,61 +2231,61 @@ msgstr "Hilfe"
 
 #: dialogs.c:2491
 msgid "<<"
-msgstr ""
+msgstr "<<"
 
 #: dialogs.c:2492
 msgid "<"
-msgstr ""
+msgstr "<"
 
 #: dialogs.c:2494
 msgid ">"
-msgstr ""
+msgstr ">"
 
 #: dialogs.c:2495
 msgid ">>"
-msgstr ""
+msgstr ">>"
 
-#: dialogs.c:2773
+#: dialogs.c:2774
 msgid "Directories:"
 msgstr "Verzeichnisse:"
 
-#: dialogs.c:2774
+#: dialogs.c:2775
 msgid "Files:"
 msgstr "Dateien:"
 
-#: dialogs.c:2775
+#: dialogs.c:2776
 msgid "by name"
 msgstr "nach Namen"
 
-#: dialogs.c:2776
+#: dialogs.c:2777
 msgid "by type"
 msgstr "nach Typ"
 
-#: dialogs.c:2779
+#: dialogs.c:2780
 msgid "Filename:"
 msgstr "Dateinname:"
 
-#: dialogs.c:2780
+#: dialogs.c:2781
 msgid "New directory"
 msgstr "Neues Verzeichnis"
 
-#: dialogs.c:2781
+#: dialogs.c:2782
 msgid "File type:"
-msgstr "Dateientyp:"
+msgstr "Dateityp:"
 
-#: dialogs.c:2856
+#: dialogs.c:2857
 msgid "Contents of"
 msgstr "Inhalt von"
 
-#: dialogs.c:2882
+#: dialogs.c:2883
 msgid "  next page"
-msgstr "nächste Seite"
+msgstr "  nächste Seite"
 
-#: dialogs.c:2899
+#: dialogs.c:2900
 msgid "FIRST TYPE DIRECTORY NAME HERE"
-msgstr ""
+msgstr "Geben Sie zuerst hier den Verzeichnisnamen an"
 
-#: dialogs.c:2900
+#: dialogs.c:2901
 msgid "TRY ANOTHER NAME"
 msgstr "VERSUCHE EINEN ANDEREN NAMEN"
 
@@ -2305,6 +2294,8 @@ msgid ""
 "No default pieces installed!\n"
 "Select your own using '-pieceImageDirectory'."
 msgstr ""
+"Kein Standard-Figurensatz installiert!\n"
+"Wählen Sie mit der Option »-pieceImageDirectory« Ihren eigenen."
 
 #: engineoutput.c:111 menus.c:650
 #, c-format
@@ -2315,8 +2306,8 @@ msgstr "Schachprogrammausgabe"
 #, c-format
 msgid "%s (%d reversible ply)"
 msgid_plural "%s (%d reversible plies)"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%s (%d rücknehmbarer Halbzug)"
+msgstr[1] "%s (%d rücknehmbare Halbzüge)"
 
 #: engineoutput.c:552 engineoutput.c:555 nengineoutput.c:82 nengineoutput.c:90
 msgid "NPS"
@@ -2327,52 +2318,50 @@ msgstr "NPS"
 msgid "Reading game file (%d)"
 msgstr "Lese Partiedatei (%d)"
 
-#: gtk/xboard.c:972 xaw/xboard.c:1072
+#: gtk/xboard.c:975 xaw/xboard.c:1072
 #, c-format
 msgid "%s: can't cd to CHESSDIR: "
 msgstr "%s: cd zu CHESSDIR funktioniert nicht: "
 
-#: gtk/xboard.c:981 xaw/xboard.c:1081
+#: gtk/xboard.c:984 xaw/xboard.c:1081
 #, c-format
 msgid "Failed to open file '%s'\n"
 msgstr "Fehler beim Öffnen der Datei '%s'\n"
 
-#: gtk/xboard.c:996 xaw/xboard.c:1090
+#: gtk/xboard.c:999 xaw/xboard.c:1090
 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size"
-msgstr ""
-"Kompiliere erneut mit größeren BOARD_RANKS oder BOARD_FILES, um diese Größe "
-"zu unterstützen"
+msgstr "Kompiliere erneut mit größeren BOARD_RANKS oder BOARD_FILES, um diese Größe zu unterstützen"
 
-#: gtk/xboard.c:1015 xaw/xboard.c:1122
+#: gtk/xboard.c:1018 xaw/xboard.c:1122
 #, c-format
 msgid "%s: bad boardSize syntax %s\n"
 msgstr "%s: falsche boardSize Syntax %s\n"
 
-#: gtk/xboard.c:1058 xaw/xboard.c:1161
+#: gtk/xboard.c:1061 xaw/xboard.c:1161
 #, c-format
 msgid "%s: unrecognized boardSize name %s\n"
 msgstr "%s: unbekannter Name fuer boardSize %s\n"
 
-#: gtk/xboard.c:1097 xaw/xboard.c:1198
+#: gtk/xboard.c:1100 xaw/xboard.c:1198
 #, c-format
 msgid "%s: too few colors available; trying monochrome mode\n"
 msgstr "%s: nicht genügend Farben vorhanden; versuche monochrom Modus\n"
 
-#: gtk/xboard.c:1411 xaw/xboard.c:1490
+#: gtk/xboard.c:1414 xaw/xboard.c:1490
 #, c-format
 msgid "Unable to create font set for %s.\n"
 msgstr "Nicht in der Lage Schriftsatz für %s zu generieren.\n"
 
-#: gtk/xboard.c:1436 xaw/xboard.c:1513
+#: gtk/xboard.c:1439 xaw/xboard.c:1513
 #, c-format
 msgid "%s: no fonts match pattern %s\n"
 msgstr "%s: keine Schriften stimmen mit Muster %s überein\n"
 
-#: gtk/xboard.c:1888 xaw/xboard.c:2003
+#: gtk/xboard.c:1900 xaw/xboard.c:2003
 msgid "Can't open temp file"
 msgstr "Kann temporäre Datei nicht öffnen"
 
-#: gtk/xboard.c:2371
+#: gtk/xboard.c:2383
 msgid "Failed to open file"
 msgstr "Fehler beim Öffnen der Datei"
 
@@ -2405,17 +2394,30 @@ msgid ""
 "Enhancements Copyright 1992-2014 Free Software Foundation\n"
 "Enhancements Copyright 2005 Alessandro Scotti\n"
 "\n"
-"%s is free software and carries NO WARRANTY;see the file COPYING for more "
-"information.\n"
+"%s is free software and carries NO WARRANTY;see the file COPYING for more information.\n"
 "The GTK build of this version is experimental and unstable\n"
 "\n"
 "Visit XBoard on the web at: http://www.gnu.org/software/xboard/\n"
-"Check out the newest features at: http://www.gnu.org/software/xboard/"
-"whats_new.html\n"
+"Check out the newest features at: http://www.gnu.org/software/xboard/whats_new.html\n"
 "\n"
 "Report bugs via email at: <bug-xboard@gnu.org>\n"
 "\n"
 msgstr ""
+"%s%s\n"
+"\n"
+"Copyright 1991 Digital Equipment Corporation\n"
+"Verbesserungen Copyright 1992-2014 Free Software Foundation\n"
+"Verbesserungen Copyright 2005 Alessandro Scotti\n"
+"\n"
+"%s ist freie Software und gewährt keinerlei Garantie; weitere Details\n"
+"finden Sie in der Datei COPYING.\n"
+"Die GTK-Ausgabe dieser Version ist experimentell und instabil\n"
+"\n"
+"Besuchen Sie XBoard im Web unter: http://www.gnu.org/software/xboard/\n"
+"Die neuesten Features finden Sie unter: http://www.gnu.org/software/xboard/whats_new.html\n"
+"\n"
+"Fehler melden Sie bitte (auf Englisch) per E-Mail an: <bug-xboard@gnu.org>\n"
+"\n"
 
 #: menus.c:379 menus.c:772
 msgid "About XBoard"
@@ -2426,12 +2428,10 @@ msgid "New Game"
 msgstr "Neue Partie"
 
 #: menus.c:602
-#, fuzzy
 msgid "New Shuffle Game..."
-msgstr "Neue Shuffle Partie… "
+msgstr "Neue zufällige Partie…"
 
 #: menus.c:603
-#, fuzzy
 msgid "New Variant..."
 msgstr "Neue Variante…"
 
@@ -2460,9 +2460,8 @@ msgid "Save Position"
 msgstr "Speichere Stellung"
 
 #: menus.c:612
-#, fuzzy
 msgid "Save Selected Games"
-msgstr "Partie speichern…"
+msgstr "Ausgewählte Partien speichern"
 
 #: menus.c:613
 msgid "Save Games as Book"
@@ -2478,7 +2477,7 @@ msgstr "CMail Nachricht erneut laden"
 
 #: menus.c:618
 msgid "Quit "
-msgstr ""
+msgstr "Beenden"
 
 #: menus.c:623
 msgid "Copy Game"
@@ -2522,7 +2521,7 @@ msgstr "Editiere Buch"
 
 #: menus.c:636
 msgid "Revert"
-msgstr ""
+msgstr "Neuladen"
 
 #: menus.c:637
 msgid "Annotate"
@@ -2574,7 +2573,7 @@ msgstr "ICS Eingabefeld"
 
 #: menus.c:659
 msgid "ICS/Chat Console"
-msgstr ""
+msgstr "ICS/Chat-Konsole"
 
 #: menus.c:661
 msgid "Board..."
@@ -2630,7 +2629,7 @@ msgstr "Ablehnen"
 
 #: menus.c:685
 msgid "Rematch"
-msgstr ""
+msgstr "Revanche"
 
 #: menus.c:687
 msgid "Call Flag"
@@ -2674,32 +2673,27 @@ msgstr "Schwarz den Gewinn zuerkennnen"
 
 #: menus.c:699
 msgid "Adjudicate Draw"
-msgstr "Als Remis abschätzen"
+msgstr "Auf Remis entscheiden"
 
 #: menus.c:704
-#, fuzzy
 msgid "Edit Engine List..."
-msgstr "Schachprogram #1 Einstellungen…"
+msgstr "Schachprogramm-Liste bearbeiten…"
 
 #: menus.c:706
-#, fuzzy
 msgid "Load New 1st Engine..."
 msgstr "Neues erstes Schachprogramm laden…"
 
 #: menus.c:707
-#, fuzzy
 msgid "Load New 2nd Engine..."
 msgstr "Neues zweites Schachprogramm laden…"
 
 #: menus.c:709
-#, fuzzy
 msgid "Engine #1 Settings..."
-msgstr "Schachprogram #1 Einstellungen…"
+msgstr "Einstellungen für Schachprogramm #1…"
 
 #: menus.c:710
-#, fuzzy
 msgid "Engine #2 Settings..."
-msgstr "Schachprogram #2 Einstellungen…"
+msgstr "Einstellungen für Schachprogramm #2…"
 
 #: menus.c:712
 msgid "Hint"
@@ -2718,50 +2712,42 @@ msgid "Retract Move"
 msgstr "Zug zurücknehmen"
 
 #: menus.c:722
-#, fuzzy
 msgid "General..."
 msgstr "Allgemein…"
 
 #: menus.c:724
-#, fuzzy
 msgid "Time Control..."
-msgstr "Zeitkontrolle…"
+msgstr "Zeitnahme…"
 
 #: menus.c:725
-#, fuzzy
 msgid "Common Engine..."
-msgstr "Allgemein Schachprogramme…"
+msgstr "Allgemeine Schachprogramm-Einstellungen"
 
 #: menus.c:726
-#, fuzzy
 msgid "Adjudications..."
-msgstr "Zuerkennung…"
+msgstr "Entscheidungen…"
 
 #: menus.c:727
 msgid "ICS..."
-msgstr ""
+msgstr "ICS…"
 
 #: menus.c:728
 msgid "Tournament..."
-msgstr ""
+msgstr "Turnier…"
 
 #: menus.c:729
-#, fuzzy
 msgid "Load Game..."
 msgstr "Partie laden…"
 
 #: menus.c:730
-#, fuzzy
 msgid "Save Game..."
 msgstr "Partie speichern…"
 
 #: menus.c:731
-#, fuzzy
 msgid "Game List..."
 msgstr "Partieliste…"
 
 #: menus.c:732
-#, fuzzy
 msgid "Sounds..."
 msgstr "Klang…"
 
@@ -2799,7 +2785,7 @@ msgstr "Zeige Koordinaten"
 
 #: menus.c:754
 msgid "Hide Thinking"
-msgstr ""
+msgstr "Denken verstecken"
 
 #: menus.c:758
 msgid "Save Settings Now"
@@ -2851,23 +2837,25 @@ msgid ""
 "Mismatch of STRIDE in nengineoutput.c\n"
 "Change and recompile!"
 msgstr ""
+"Interner Fehler:\n"
+"Mismatch of STRIDE in nengineoutput.c\n"
+"Change and recompile!"
 
 #: nevalgraph.c:68
 msgid "Evaluation graph"
 msgstr "Auswertungsgraph"
 
 #: nevalgraph.c:68
-#, fuzzy
 msgid "Blunder graph"
-msgstr "Auswertungsgraph"
+msgstr "Patzer-Graph"
 
 #: nevalgraph.c:106
 msgid "Blunder"
-msgstr ""
+msgstr "Patzer"
 
 #: nevalgraph.c:106
 msgid "Eval"
-msgstr ""
+msgstr "Stellungsbewertung"
 
 #: ngamelist.c:87
 msgid "find position"
@@ -2875,7 +2863,7 @@ msgstr "Suche Stellung"
 
 #: ngamelist.c:88
 msgid "narrow"
-msgstr ""
+msgstr "Eng"
 
 #: ngamelist.c:89
 msgid "thresholds"
@@ -2883,19 +2871,19 @@ msgstr "Schwellenwert"
 
 #: ngamelist.c:90
 msgid "tags"
-msgstr ""
+msgstr "Kennzeichen"
 
 #: ngamelist.c:91
 msgid "next"
-msgstr "nächste"
+msgstr "Nächste"
 
 #: ngamelist.c:92
 msgid "close"
-msgstr "schließen"
+msgstr "Schließen"
 
 #: ngamelist.c:116
 msgid "No game selected"
-msgstr "Keine Partie selektiert"
+msgstr "Keine Partie ausgewählt"
 
 #: ngamelist.c:122
 msgid "Can't go forward any further"
@@ -2908,15 +2896,15 @@ msgstr "Durchsuche Spiele (%d)"
 
 #: ngamelist.c:211
 msgid "previous page"
-msgstr "Vorheriges Spiel"
+msgstr "Vorherige Seite"
 
 #: ngamelist.c:214
 msgid "next page"
-msgstr "nächste Seite"
+msgstr "Nächste Seite"
 
 #: ngamelist.c:217
 msgid "no games matched your request"
-msgstr "Keine Spiele stimmten mit ihrer Anfrage überein"
+msgstr "Keine zu Ihrer Anfrage passenden Spiele gefunden"
 
 #: ngamelist.c:219
 #, c-format
@@ -2937,7 +2925,7 @@ msgid "%s: unrecognized color %s\n"
 msgstr "%s: nicht erkannte Farbe %s\n"
 
 #: usystem.c:230
-#, fuzzy, c-format
+#, c-format
 msgid "%s: can't parse foreground color in '%s'\n"
 msgstr "%s: Kann Vordergrundfarbe in »%s« nicht parsen\n"
 
@@ -2983,376 +2971,3 @@ msgstr "Umschalt"
 #: xaw/xoptions.c:1314
 msgid "OK"
 msgstr "OK"
-
-#~ msgid "Match Options"
-#~ msgstr "Partieeinstellungen"
-
-#~ msgid "ICS ..."
-#~ msgstr "ICS…"
-
-#~ msgid "Match ..."
-#~ msgstr "Partie…"
-
-#~ msgid "%s: Can't access XPM directory %s\n"
-#~ msgstr "%s: XPM-Ordner nicht erreichbar %s\n"
-
-#~ msgid "Available `%s' sizes:\n"
-#~ msgstr "Mögliche »%s« Größen:\n"
-
-#~ msgid "Error: No `%s' files!\n"
-#~ msgstr "Fehler: Keine »%s« Datein!\n"
-
-#~ msgid ""
-#~ "Warning: No DIR structure found on this system --\n"
-#~ "         Unable to autosize for XPM/XIM pieces.\n"
-#~ "   Please report this error to %s.\n"
-#~ "   Include system type & operating system in message.\n"
-#~ msgstr ""
-#~ "Warnung: Keine DIR-Struktur auf dem Rechner gefunden --\n"
-#~ "         wählen einer automatischen Größe für XPM/XIM Figuren "
-#~ "fehlgeschlagen.\n"
-#~ "  Bitte schicken Sie einen Bug-report and %s.\n"
-#~ "  Geben Sie dabei den Rechnertyp und das Betriebsystem an.\n"
-
-#~ msgid "Error %d loading icon image\n"
-#~ msgstr "Fehler %d beim Laden von Icon\n"
-
-#~ msgid "cancel"
-#~ msgstr "abbrechen"
-
-#~ msgid "recognized '%s' (%d) as variant %s\n"
-#~ msgstr "erkenne '%s' (%d) als Variante %s\n"
-
-#~ msgid "Ratings from header: W %d, B %d\n"
-#~ msgstr "Spielstärke vom Dateikopf: W %d, S %d\n"
-
-#~ msgid "Parsing board: %s\n"
-#~ msgstr "Parse Schachbrett: %s\n"
-
-#~ msgid "Found unexpected active ICS engine analyze \n"
-#~ msgstr "Habe unerwartete aktive ICS Analyse vom Schachprogramm gefunden\n"
-
-#~ msgid "ICS engine analyze starting... \n"
-#~ msgstr "Schachprogramm started ICS Analyse…\n"
-
-#~ msgid ""
-#~ "resolved %s at pixel size %d\n"
-#~ "  to %s\n"
-#~ msgstr ""
-#~ "Für %s mit Pixelgröße %d\n"
-#~ " verwende %s\n"
-
-#~ msgid "New Game        Ctrl+N"
-#~ msgstr "Neue Partie Strg+N"
-
-#~ msgid "New Variant ...   Alt+Shift+V"
-#~ msgstr "Neue Variante… Alt+Umschalt+V"
-
-#~ msgid "Load Game       Ctrl+O"
-#~ msgstr "Partie Laden   Strg+O"
-
-#~ msgid "Load Position    Ctrl+Shift+O"
-#~ msgstr "Stellung laden   Strg+Umschalt+O"
-
-#~ msgid "Next Position     Shift+PgDn"
-#~ msgstr "Nächste Stellung   Umschalt+Pgdn"
-
-#~ msgid "Prev Position     Shift+PgUp"
-#~ msgstr "Vorherige Stellung   Umschalt+PgUp"
-
-#~ msgid "Save Game       Ctrl+S"
-#~ msgstr "Partie speichern     Strg+S"
-
-#~ msgid "Save Position    Ctrl+Shift+S"
-#~ msgstr "Stellung speichern Strg+Shift+S"
-
-#~ msgid "Quit                 Ctr+Q"
-#~ msgstr "Beenden   Strg+Q"
-
-#~ msgid "Copy Game    Ctrl+C"
-#~ msgstr "Partie kopieren  Strg+C"
-
-#~ msgid "Paste Game    Ctrl+V"
-#~ msgstr "Partie einfügen   Strg+V"
-
-#~ msgid "Paste Position Ctrl+Shift+V"
-#~ msgstr "Stellung einfügen   Strg+Umschalt+V"
-
-#~ msgid "Edit Game      Ctrl+E"
-#~ msgstr "Partie bearbeiten   Strg+E"
-
-#~ msgid "Edit Position   Ctrl+Shift+E"
-#~ msgstr "Stellung bearbeiten   Strg+Umschalt+E"
-
-#~ msgid "Revert              Home"
-#~ msgstr "Zurücksetzen       Home"
-
-#~ msgid "Backward         Alt+Left"
-#~ msgstr "Zurück            Alt+links"
-
-#~ msgid "Forward           Alt+Right"
-#~ msgstr "Vorwärts     Alt+rechts"
-
-#~ msgid "Back to Start     Alt+Home"
-#~ msgstr "Zurück zum Anfang   Alt+Home"
-
-#~ msgid "Flip View             F2"
-#~ msgstr "Brett drehen          F2"
-
-#~ msgid "Engine Output      Alt+Shift+O"
-#~ msgstr "Schachprogramm-Ausgabe    Alt+Umschalt+O"
-
-#~ msgid "Move History       Alt+Shift+H"
-#~ msgstr "Zugliste  Alt+Umschalt+H"
-
-#~ msgid "Evaluation Graph  Alt+Shift+E"
-#~ msgstr "Auswertungsgraph       Alt+Umschalt+E"
-
-#~ msgid "Game List            Alt+Shift+G"
-#~ msgstr "Partieliste         Alt+Umschalt+G"
-
-#~ msgid "Machine Black  Ctrl+B"
-#~ msgstr "Schachprogramm schwarz  Strg+B"
-
-#~ msgid "Edit Game         Ctrl+E"
-#~ msgstr "Partie editieren   Strg+E"
-
-#~ msgid "Edit Position      Ctrl+Shift+E"
-#~ msgstr "Stellung editieren   Strg+Umschalt+E"
-
-#~ msgid "Pause               Pause"
-#~ msgstr "Pause       Pause"
-
-#~ msgid "Accept             F3"
-#~ msgstr "Annehmen            F3"
-
-#~ msgid "Decline            F4"
-#~ msgstr "Ablehnen         F4"
-
-#~ msgid "Rematch           F12"
-#~ msgstr "Revanche       F12"
-
-#~ msgid "Draw                F6"
-#~ msgstr "Remis          F6"
-
-#~ msgid "Adjourn            F7"
-#~ msgstr "Aussetzen      F7"
-
-#~ msgid "Abort                F8"
-#~ msgstr "Abbrechen          F8"
-
-#~ msgid "Resign              F9"
-#~ msgstr "Aufgeben      F9"
-
-#~ msgid "Move Now     Ctrl+M"
-#~ msgstr "Jetzt ziehen     Strg+M"
-
-#~ msgid "Time Control ...       Alt+Shift+T"
-#~ msgstr "Zeitkontrolle…      Alt+Umschalt+T"
-
-#~ msgid "Always Queen        Ctrl+Shift+Q"
-#~ msgstr "Immer Königin        Strg+Umschalt+Q"
-
-#~ msgid "Animate Moving      Ctrl+Shift+A"
-#~ msgstr "Züge animieren   Strg+Umschalt+A"
-
-#~ msgid "Auto Flag               Ctrl+Shift+F"
-#~ msgstr "Automatische Zeitreklamation  Strg+Umschalt+F"
-
-#~ msgid "Ponder Next Move  Ctrl+Shift+P"
-#~ msgstr "Nächsten Zug abwägen  Strg+Umschalt+P"
-
-#~ msgid "Hide Thinking        Ctrl+Shift+H"
-#~ msgstr "Blende Zugsuche aus        Strg+Umschalt+H"
-
-#~ msgid "Test Legality          Ctrl+Shift+L"
-#~ msgstr "Gültigkeit testen      Strg+Umschalt+L"
-
-#~ msgid "Browse"
-#~ msgstr "Durchsuchen"
-
-#~ msgid "Filter on extensions:"
-#~ msgstr "filtere nach Dateinendung:"
-
-#~ msgid "Pathname:"
-#~ msgstr "Pfadname:"
-
-#~ msgid "XsraSelFile: can't get current directory"
-#~ msgstr "XsraSelFile: kann aktuelles Verzeichnis nicht laden"
-
-#~ msgid "%s: titleWidget geometry error %d %d %d %d %d\n"
-#~ msgstr "%s: titleWidget Geometriefehler %d %d %d %d %d\n"
-
-#~ msgid "Error expanding path name \"%s\"\n"
-#~ msgstr "Fehler beim Expandieren des Pfadnamens \"%s\"\n"
-
-#~ msgid ""
-#~ "XBoard square size (hint): %d\n"
-#~ "%s fulldir:%s:\n"
-#~ msgstr ""
-#~ "XBoard Feldgröße (Hinweis): %d\n"
-#~ "%s voller Pfad: %s\n"
-
-#~ msgid "Closest %s size: %d\n"
-#~ msgstr "Nächste %s Größe: %d\n"
-
-#~ msgid "%s: messageWidget geometry error %d %d %d %d %d\n"
-#~ msgstr "%s: messageWidget Geometriefehler %d %d %d %d %d\n"
-
-#~ msgid "%s: error loading XIM!\n"
-#~ msgstr "%s: Fehler beim Laden von XIM!\n"
-
-#~ msgid "XIM pieces cannot be used in monochrome mode"
-#~ msgstr "XIM Figuren können nicht im Monochrom-modus benutzt werden"
-
-#~ msgid ""
-#~ "\n"
-#~ "Loading XIMs...\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Lade XIMs…\n"
-
-#~ msgid "(File:%s:) "
-#~ msgstr "(Datei:%s) "
-
-#~ msgid "light square "
-#~ msgstr "weißes Feld "
-
-#~ msgid "dark square "
-#~ msgstr "schwarzes Feld "
-
-#~ msgid "Done.\n"
-#~ msgstr "Fertig.\n"
-
-#~ msgid "XPM pieces cannot be used in monochrome mode"
-#~ msgstr "XPM Figuren können nicht im Monochrom-modus benutzt werden"
-
-#~ msgid "No builtin XPM pieces of size %d\n"
-#~ msgstr "Keine XPM-Figuren der Größe %d vorhanden\n"
-
-#~ msgid "Error %d loading XPM image \"%s\"\n"
-#~ msgstr "Fehler %d beim Laden von XPM-Bild »%s«\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Loading XPMs...\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Lade XPMs…\n"
-
-#~ msgid "(Replace by File:%s:) "
-#~ msgstr "(Ersetze mit Datei:%s:) "
-
-#~ msgid "Error %d loading XPM file \"%s\"\n"
-#~ msgstr "Fehler %d beim Laden der XPM-Datei »%s«\n"
-
-#~ msgid "Can't open bitmap file %s"
-#~ msgstr "Bitmap file %s kann nicht geöffnet werden"
-
-#~ msgid "Invalid bitmap in file %s"
-#~ msgstr "Ungültiges Bitmap in Datei %s"
-
-#~ msgid "Ran out of memory reading bitmap file %s"
-#~ msgstr "Nicht genug Speicher, um Bitmapdatei %s zu laden"
-
-#~ msgid "Unknown XReadBitmapFile error %d on file %s"
-#~ msgstr "Unbekannter XReadBitmapFile-Fehler %d bei Datei %s"
-
-#~ msgid "%s: %s...using built-in\n"
-#~ msgstr "%s: %s… benutze integrierte\n"
-
-#~ msgid "%s: Bitmap %s is %dx%d, not %dx%d...using built-in\n"
-#~ msgstr "%s: Bitmap %s ist %dx%d und nicht %dx%d... benutze integrierte\n"
-
-#~ msgid "----"
-#~ msgstr "----"
-
-#~ msgid "Drop"
-#~ msgstr "Absetzen"
-
-#~ msgid "could not open: "
-#~ msgstr "Konnte nicht öffnen: "
-
-#~ msgid "Can't open file"
-#~ msgstr "Datei kann nicht geöffnet werden"
-
-#~ msgid "Promotion"
-#~ msgstr "Umwandlung"
-
-#~ msgid "Promote to what?"
-#~ msgstr "In Was soll umgewandelt werden?"
-
-#~ msgid "ok"
-#~ msgstr "Ok"
-
-#~ msgid "AskQuestionProc needed 4 parameters, got %d\n"
-#~ msgstr "AskQuestionProc braucht 4 Parameter, habe %d erhlaten\n"
-
-#~ msgid "enter"
-#~ msgstr "Eingabe"
-
-#~ msgid "This feature is experimental"
-#~ msgstr "Dieses Feature is experimentell"
-
-#~ msgid "Filter:"
-#~ msgstr "Filter:"
-
-#~ msgid "filtertext"
-#~ msgstr "Filtertext"
-
-#~ msgid "apply"
-#~ msgstr "anwenden"
-
-#~ msgid "load"
-#~ msgstr "lade"
-
-#~ msgid "prev"
-#~ msgstr "vorh."
-
-#~ msgid "AnimateMove: piece %d hops from %d,%d to %d,%d \n"
-#~ msgstr "Animiere Züge: Figur %d hüpft von %d,%d zu %d,%d\n"
-
-#~ msgid "AnimateMove: piece %d slides from %d,%d to %d,%d \n"
-#~ msgstr "Animiere Züge: Figur %d gleitet von %d,%d zu %d,%d\n"
-
-#~ msgid "White "
-#~ msgstr "Weiss"
-
-#~ msgid "Black "
-#~ msgstr "Schwarz"
-
-#~ msgid "Close"
-#~ msgstr "Schließen"
-
-#~ msgid "off"
-#~ msgstr "aus"
-
-#~ msgid "minutes for each"
-#~ msgstr "Minuten pro"
-
-#~ msgid "             "
-#~ msgstr "             "
-
-#~ msgid "moves     "
-#~ msgstr "Züge    "
-
-#~ msgid "You can only start a match from the initial position."
-#~ msgstr "Sie können eine Partie nur von der Startaufstellunge starten."
-
-#~ msgid "Reload Same Game"
-#~ msgstr "Spiel erneut laden"
-
-#~ msgid "Reload Same Position"
-#~ msgstr "Stellung erneut laden"
-
-#~ msgid "Exit"
-#~ msgstr "Beenden"
-
-#~ msgid "Step"
-#~ msgstr "Züge"
-
-#~ msgid "P"
-#~ msgstr "P"
-
-#~ msgid "Analysis"
-#~ msgstr "Analyse"
index 4068a17..8600dbd 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -8,47 +8,47 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNU xboard 4.8.0-pre1\n"
 "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n"
-"POT-Creation-Date: 2014-10-17 21:25-0700\n"
+"POT-Creation-Date: 2014-10-24 08:20-0700\n"
 "PO-Revision-Date: 2014-10-01 23:14+0200\n"
 "Last-Translator: Antonio Ceballos <aceballos@gmail.com>\n"
 "Language-Team: Spanish <es@tp.org.es>\n"
+"Language: es\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Language: es\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: args.h:839
+#: args.h:840
 #, c-format
 msgid "%s in settings file\n"
 msgstr "%s en el fichero de configuración\n"
 
-#: args.h:873
+#: args.h:874
 #, c-format
 msgid "Bad integer value %s"
 msgstr "Valor entero malo %s"
 
-#: args.h:979 args.h:1240
+#: args.h:980 args.h:1241
 #, c-format
 msgid "Unrecognized argument %s"
 msgstr "Argumento no reconocido %s"
 
-#: args.h:1010
+#: args.h:1011
 #, c-format
 msgid "No value provided for argument %s"
 msgstr "No se ha dado valor al argumento %s"
 
-#: args.h:1070
+#: args.h:1071
 #, c-format
 msgid "Incomplete \\ escape in value for %s"
 msgstr "Carácter de escape \\ incompleto en el valor de %s"
 
-#: args.h:1181
+#: args.h:1182
 #, c-format
 msgid "Failed to open indirection file %s"
 msgstr "Fallo al abrir fichero de indirección %s"
 
-#: args.h:1198
+#: args.h:1199
 #, c-format
 msgid "Unrecognized boolean argument value %s"
 msgstr "Valor del argumento lógico %s no reconocido"
@@ -2184,7 +2184,7 @@ msgstr "Información"
 msgid "Note"
 msgstr "Nota"
 
-#: dialogs.c:2370 dialogs.c:2655 dialogs.c:2658
+#: dialogs.c:2370 dialogs.c:2656 dialogs.c:2659
 msgid "White"
 msgstr "Blancas"
 
@@ -2212,7 +2212,7 @@ msgstr "Vaciar el escaque"
 msgid "Clear board"
 msgstr "Limpiar el tablero"
 
-#: dialogs.c:2374 dialogs.c:2667 dialogs.c:2670
+#: dialogs.c:2374 dialogs.c:2668 dialogs.c:2671
 msgid "Black"
 msgstr "Negras"
 
@@ -2264,47 +2264,47 @@ msgstr ">"
 msgid ">>"
 msgstr ">>"
 
-#: dialogs.c:2773
+#: dialogs.c:2774
 msgid "Directories:"
 msgstr "Carpetas:"
 
-#: dialogs.c:2774
+#: dialogs.c:2775
 msgid "Files:"
 msgstr "Archivos:"
 
-#: dialogs.c:2775
+#: dialogs.c:2776
 msgid "by name"
 msgstr "por nombre"
 
-#: dialogs.c:2776
+#: dialogs.c:2777
 msgid "by type"
 msgstr "por tipo"
 
-#: dialogs.c:2779
+#: dialogs.c:2780
 msgid "Filename:"
 msgstr "Nombre del fichero:"
 
-#: dialogs.c:2780
+#: dialogs.c:2781
 msgid "New directory"
 msgstr "Nueva carpeta"
 
-#: dialogs.c:2781
+#: dialogs.c:2782
 msgid "File type:"
 msgstr "Tipo de fichero:"
 
-#: dialogs.c:2856
+#: dialogs.c:2857
 msgid "Contents of"
 msgstr "Contenido de"
 
-#: dialogs.c:2882
+#: dialogs.c:2883
 msgid "  next page"
 msgstr "  siguiente página"
 
-#: dialogs.c:2899
+#: dialogs.c:2900
 msgid "FIRST TYPE DIRECTORY NAME HERE"
 msgstr "NOMBRE DEL DIRECTORIO PRIMERO AQUÍ"
 
-#: dialogs.c:2900
+#: dialogs.c:2901
 msgid "TRY ANOTHER NAME"
 msgstr "INTENTAR OTRO NOMBRE"
 
@@ -2337,52 +2337,52 @@ msgstr "NPS"
 msgid "Reading game file (%d)"
 msgstr "Leyendo fichero de partidas (%d)"
 
-#: gtk/xboard.c:972 xaw/xboard.c:1072
+#: gtk/xboard.c:975 xaw/xboard.c:1072
 #, c-format
 msgid "%s: can't cd to CHESSDIR: "
 msgstr "%s: no se puede ir a la carpeta CHESSDIR: "
 
-#: gtk/xboard.c:981 xaw/xboard.c:1081
+#: gtk/xboard.c:984 xaw/xboard.c:1081
 #, c-format
 msgid "Failed to open file '%s'\n"
 msgstr "Fallo al abrir el fichero '%s'\n"
 
 #  TRANSLATORS: BOARDS_RANKS, BOARD_FILES translatable?
-#: gtk/xboard.c:996 xaw/xboard.c:1090
+#: gtk/xboard.c:999 xaw/xboard.c:1090
 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size"
 msgstr ""
 "Recompilar con BOARD_RANKS o BOARD_FILES mayor para admitir este tamaño"
 
-#: gtk/xboard.c:1015 xaw/xboard.c:1122
+#: gtk/xboard.c:1018 xaw/xboard.c:1122
 #, c-format
 msgid "%s: bad boardSize syntax %s\n"
 msgstr "%s: sintaxis de boardSize incorrecta %s\n"
 
-#: gtk/xboard.c:1058 xaw/xboard.c:1161
+#: gtk/xboard.c:1061 xaw/xboard.c:1161
 #, c-format
 msgid "%s: unrecognized boardSize name %s\n"
 msgstr "%s: nombre de boardSize no reconocido %s\n"
 
-#: gtk/xboard.c:1097 xaw/xboard.c:1198
+#: gtk/xboard.c:1100 xaw/xboard.c:1198
 #, c-format
 msgid "%s: too few colors available; trying monochrome mode\n"
 msgstr "%s: insuficientes colores disponibles: probando modo monocromo\n"
 
-#: gtk/xboard.c:1411 xaw/xboard.c:1490
+#: gtk/xboard.c:1414 xaw/xboard.c:1490
 #, c-format
 msgid "Unable to create font set for %s.\n"
 msgstr "No se ha podido crear conjunto de fuentes para %s.\n"
 
-#: gtk/xboard.c:1436 xaw/xboard.c:1513
+#: gtk/xboard.c:1439 xaw/xboard.c:1513
 #, c-format
 msgid "%s: no fonts match pattern %s\n"
 msgstr "%s: ninguna fuente concuerda con el patrón %s\n"
 
-#: gtk/xboard.c:1888 xaw/xboard.c:2003
+#: gtk/xboard.c:1900 xaw/xboard.c:2003
 msgid "Can't open temp file"
 msgstr "No se puede abrir el fichero temporal"
 
-#: gtk/xboard.c:2371
+#: gtk/xboard.c:2383
 msgid "Failed to open file"
 msgstr "Fallo al abrir fichero"
 
diff --git a/po/fr.po b/po/fr.po
new file mode 100644 (file)
index 0000000..b5af98b
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,2972 @@
+# French translation for xboard.
+# Copyright (C) 2014 Free Software Foundation, Inc.
+# This file is distributed under the same license as the xboard package.
+#
+# Florian Ganee <flo.ganee@gmail.com>, 2014.
+# Stéphane Aulery <lkppo@free.fr>, 2015.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xboard 4.8.0-pre1\n"
+"Report-Msgid-Bugs-To: bug-xboard@gnu.org\n"
+"POT-Creation-Date: 2014-09-29 21:06-0700\n"
+"PO-Revision-Date: 2015-04-26 15:27+0200\n"
+"Last-Translator: Stéphane Aulery <lkppo@free.fr>\n"
+"Language-Team: French <traduc@traduc.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Lokalize 1.5\n"
+
+#: args.h:839
+#, c-format
+msgid "%s in settings file\n"
+msgstr "%s dans le fichier de configuration\n"
+
+#: args.h:873
+#, c-format
+msgid "Bad integer value %s"
+msgstr "Valeur de l'entier %s incorrecte"
+
+#: args.h:979 args.h:1240
+#, c-format
+msgid "Unrecognized argument %s"
+msgstr "Argument %s non reconnu"
+
+#: args.h:1010
+#, c-format
+msgid "No value provided for argument %s"
+msgstr "Aucune valeur donnée pour l'argument %s"
+
+#: args.h:1070
+#, c-format
+msgid "Incomplete \\ escape in value for %s"
+msgstr "Incomplet \\ fuite en valeur pour %s"
+
+#: args.h:1181
+#, c-format
+msgid "Failed to open indirection file %s"
+msgstr "Impossible d'ouvrir le fichier des indirections %s"
+
+#: args.h:1198
+#, c-format
+msgid "Unrecognized boolean argument value %s"
+msgstr "Valeur de l'argument booléen %s non reconnue "
+
+#. TRANSLATORS: "first" is the first of possible two chess engines. It is inserted into strings
+#. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing
+#: backend.c:808
+msgid "first"
+msgstr "Premier"
+
+#. TRANSLATORS: "second" is the second of possible two chess engines. It is inserted into strings
+#. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing
+#: backend.c:811
+msgid "second"
+msgstr "Deuxième"
+
+#: backend.c:894
+#, c-format
+msgid "protocol version %d not supported"
+msgstr "Version %d du protocole non supportée"
+
+#: backend.c:1000
+msgid "You did not specify the engine executable"
+msgstr "Vous n'avez pas précisé l'exécutable du moteur / moteur exécutable ?"
+
+#: backend.c:1058
+#, c-format
+msgid "bad timeControl option %s"
+msgstr "Option %s du timeControl incorrecte "
+
+#: backend.c:1073
+#, c-format
+msgid "bad searchTime option %s"
+msgstr "Option %s de searchTime incorrecte "
+
+#: backend.c:1179
+#, c-format
+msgid "Variant %s supported only in ICS mode"
+msgstr "La variante %s n'est supporté qu'en mode ICS"
+
+#: backend.c:1197
+#, c-format
+msgid "Unknown variant name %s"
+msgstr "Nom divers %s inconnu"
+
+#: backend.c:1448
+msgid "Starting chess program"
+msgstr "Démarrage du jeu d'échecs"
+
+#: backend.c:1471
+msgid "Bad game file"
+msgstr "Fichier de jeu incorrect"
+
+#: backend.c:1478
+msgid "Bad position file"
+msgstr "Chemin de fichier incorrect"
+
+#: backend.c:1492
+msgid "Pick new game"
+msgstr "Choisissez nouveau jeu"
+
+#: backend.c:1561
+msgid ""
+"You restarted an already completed tourney.\n"
+"One more cycle will now be added to it.\n"
+"Games commence in 10 sec."
+msgstr ""
+"Vous avez redémarré un tournoi déjà terminé.\n"
+"Une nouvelle manche va y être ajoutée.\n"
+"Les jeux débutent dans 10 secondes."
+
+#: backend.c:1568
+#, c-format
+msgid "All games in tourney '%s' are already played or playing"
+msgstr "Tous les jeux du tournoi '%s' sont déjà terminés ou sont en cours"
+
+#: backend.c:1575
+msgid "Can't have a match with no chess programs"
+msgstr "Impossible d'obtenir un match sans programme d'échecs"
+
+#: backend.c:1629
+#, c-format
+msgid "Could not open comm port %s"
+msgstr "Impossible d'ouvrir le port de communication %s"
+
+#: backend.c:1632
+#, c-format
+msgid "Could not connect to host %s, port %s"
+msgstr "Impossible de se connecter à l'hôte %s, au port %s"
+
+#: backend.c:1688
+#, c-format
+msgid "Unknown initialMode %s"
+msgstr "initialMode %s inconnu"
+
+#: backend.c:1714
+msgid "AnalyzeFile mode requires a game file"
+msgstr "Le mode AnalyzeFile nécessite un fichier de jeu"
+
+#: backend.c:1741
+msgid "Analysis mode requires a chess engine"
+msgstr "Le mode Analyse nécessite un moteur d'échecs"
+
+#: backend.c:1745
+msgid "Analysis mode does not work with ICS mode"
+msgstr "Le mode Analyse n'est pas compatible avec le mode ICS"
+
+#: backend.c:1756
+msgid "MachineWhite mode requires a chess engine"
+msgstr "Le mode MachineWhite nécessite un moteur d'échecs"
+
+#: backend.c:1761
+msgid "MachineWhite mode does not work with ICS mode"
+msgstr "Le mode MachineWhite n'est pas compatible avec le mode ICS"
+
+#: backend.c:1768
+msgid "MachineBlack mode requires a chess engine"
+msgstr "Le mode MachineBlack nécessite un moteur d'échecs"
+
+#: backend.c:1773
+msgid "MachineBlack mode does not work with ICS mode"
+msgstr "Le mode MachineBlack n'est pas compatible avec le mode ICS"
+
+#: backend.c:1780
+msgid "TwoMachines mode requires a chess engine"
+msgstr "Le mode Versus requiert un moteur d'échecs"
+
+#: backend.c:1785
+msgid "TwoMachines mode does not work with ICS mode"
+msgstr "Le mode multi-joueurs n'est pas compatible avec le mode ICS"
+
+#: backend.c:1796
+msgid "Training mode requires a game file"
+msgstr "Le mode d'entraînement nécessite un fichier de jeu"
+
+#: backend.c:1959 backend.c:2014 backend.c:2037 backend.c:2439
+msgid "Error writing to ICS"
+msgstr "Erreur dans l'écriture vers ICS"
+
+#: backend.c:1974
+msgid "Error reading from keyboard"
+msgstr "Erreur dans la lecture du clavier"
+
+#: backend.c:1977
+msgid "Got end of file from keyboard"
+msgstr "Fin de fichier obtenue du clavier"
+
+#: backend.c:2285
+#, c-format
+msgid "Unknown wild type %d"
+msgstr "Type étranger %d inconnu"
+
+#: backend.c:2356 usystem.c:332
+msgid "Error writing to display"
+msgstr "Erreur lors d'écriture sur l'écran"
+
+#. TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers
+#: backend.c:3124
+#, c-format
+msgid "your opponent kibitzes: %s"
+msgstr "Votre adversaire vous conseille : %s"
+
+#: backend.c:3663
+msgid "Error gathering move list: two headers"
+msgstr "Erreur lors du rassemblement de la liste des mouvements : deux en-têtes"
+
+#: backend.c:3710
+msgid "Error gathering move list: nested"
+msgstr "Erreur lors du rassemblement de la liste des mouvements : enchevêtrement "
+
+#: backend.c:3814 backend.c:4232 backend.c:4436 backend.c:4995 backend.c:4999
+#: backend.c:7122 backend.c:12692 backend.c:14428 backend.c:14505
+#: backend.c:14551 backend.c:14557 backend.c:14562 backend.c:14567
+msgid "vs."
+msgstr "contre"
+
+#: backend.c:3942
+msgid "Illegal move (rejected by ICS)"
+msgstr "Mouvement non autorisé (rejeté par l'ICS)"
+
+#: backend.c:4280
+msgid "Connection closed by ICS"
+msgstr "Connexion terminée par l'ICS"
+
+#: backend.c:4282
+msgid "Error reading from ICS"
+msgstr "Erreur lors de la lecture de l'ICS"
+
+#: backend.c:4359
+#, c-format
+msgid ""
+"Failed to parse board string:\n"
+"\"%s\""
+msgstr ""
+"Échec lors de l'analyse la chaîne du plateau :\n"
+"\"%s\""
+
+#: backend.c:4368 backend.c:10290
+msgid "Game too long; increase MAX_MOVES and recompile"
+msgstr "Jeu trop long; augmentez MAX_MOVES et recompilez"
+
+#: backend.c:4487
+msgid "Error gathering move list: extra board"
+msgstr "Erreur lors du rassemblement de la liste des mouvements : plateau superflu"
+
+#: backend.c:4919 backend.c:4941
+#, c-format
+msgid "Couldn't parse move \"%s\" from ICS"
+msgstr "Impossible d'analyser le mouvement \"%s\" de l'ICS"
+
+#: backend.c:5189
+#, c-format
+msgid "say Internal error; bad moveType %d (%d,%d-%d,%d)"
+msgstr "Une erreur interne est survenue; moveType %d (%d,%d-%d,%d) incorrect"
+
+#: backend.c:5260
+msgid "You cannot do this while you are playing or observing"
+msgstr "Vous ne pouvez pas exécuter cette action en tant que joueur ou observateur"
+
+#: backend.c:6205
+msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!"
+msgstr "Recompilez pour supporter ce BOARD_RANKS ou BOARD_FILES !"
+
+#: backend.c:6695
+msgid "You are playing Black"
+msgstr "Vous jouez les Noirs"
+
+#: backend.c:6704 backend.c:6731
+msgid "You are playing White"
+msgstr "Vous jouez les Blancs"
+
+#: backend.c:6713 backend.c:6739 backend.c:6860 backend.c:6885 backend.c:6901
+#: backend.c:15237
+msgid "It is White's turn"
+msgstr "Au tour des Blancs de jouer"
+
+#: backend.c:6717 backend.c:6743 backend.c:6868 backend.c:6891 backend.c:6922
+#: backend.c:15229
+msgid "It is Black's turn"
+msgstr "Au tour des Noirs de jouer"
+
+#: backend.c:6756
+msgid "Displayed position is not current"
+msgstr "La position affichée n'est pas la position courante"
+
+#: backend.c:7002
+msgid "Illegal move"
+msgstr "Mouvement interdit"
+
+#: backend.c:7079
+msgid "End of game"
+msgstr "Fin de partie"
+
+#: backend.c:7082
+msgid "Incorrect move"
+msgstr "Mouvement incorrect"
+
+#: backend.c:7473 backend.c:7620
+msgid "Pull pawn backwards to under-promote"
+msgstr "Amenez le pion en arrière pour le sous-promouvoir"
+
+#: backend.c:7583
+msgid "only marked squares are legal"
+msgstr "Seuls les cases marquées sont autorisées"
+
+#: backend.c:7871
+msgid "Swiss tourney finished"
+msgstr "Le tournoi à système suisse est terminé"
+
+#: backend.c:8387
+msgid "could not load EGBB library"
+msgstr "Impossible de charger la bibliothèque EGBB"
+
+#: backend.c:8390
+msgid "wrong EGBB version"
+msgstr "Version d'EGBB incorrecte"
+
+#: backend.c:8503
+msgid "Invalid pairing from pairing engine"
+msgstr "Jumelage invalide de la part du moteur de jumelage"
+
+#: backend.c:8654
+#, c-format
+msgid "Illegal move \"%s\" from %s machine"
+msgstr "Mouvement \"%s\" interdit de la machine %s"
+
+#: backend.c:8919
+msgid "Bad FEN received from engine"
+msgstr "FEN reçue du moteur incorrecte "
+
+#: backend.c:9020
+msgid "Engine did not send setup for non-standard variant"
+msgstr "Le moteur n'a pas fourni de d'installation pour une variante non-standard "
+
+#: backend.c:9093 backend.c:14290 backend.c:14358
+#, c-format
+msgid "%s does not support analysis"
+msgstr "%s ne supporte pas l'analyse"
+
+#: backend.c:9159
+#, c-format
+msgid "Illegal move \"%s\" (rejected by %s chess program)"
+msgstr "Mouvement \"%s\" interdit (rejeté par le programme d'échecs %s)"
+
+#: backend.c:9190
+#, c-format
+msgid "Failed to start %s chess program %s on %s: %s\n"
+msgstr "Échec dans le démarrage du programme d'échec %s %s sur %s: %s\n"
+
+#: backend.c:9211
+#, c-format
+msgid "Hint: %s"
+msgstr "Indice : %s"
+
+#: backend.c:9216
+#, c-format
+msgid ""
+"Illegal hint move \"%s\"\n"
+"from %s chess program"
+msgstr ""
+"Mouvement d'indice \"%s\" interdit\n"
+"dans le programme d'échecs %s"
+
+#: backend.c:9391
+msgid "Machine accepts your draw offer"
+msgstr "La machine accepte votre proposition de match nul"
+
+#: backend.c:9394
+msgid ""
+"Machine offers a draw.\n"
+"Select Action / Draw to accept."
+msgstr ""
+"La machine propose un match nul.\n"
+"Sélectionnez Action / Égalité pour accepter."
+
+#. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone
+#: backend.c:9479
+msgid "failed writing PV"
+msgstr "Écriture de PV échouée"
+
+#: backend.c:9778
+#, c-format
+msgid "Ambiguous move in ICS output: \"%s\""
+msgstr "Mouvement ambigu dans la sortie ICS : \"%s\""
+
+#: backend.c:9788
+#, c-format
+msgid "Illegal move in ICS output: \"%s\""
+msgstr "Mouvement interdit dans la sortie ICS : \"%s\""
+
+#: backend.c:9799
+msgid "Gap in move list"
+msgstr "Il y a un trou dans la liste des mouvements "
+
+#: backend.c:10444
+#, c-format
+msgid "Variant %s not supported by %s"
+msgstr "La variante %s n'est pas supportée par %s"
+
+#: backend.c:10451
+#, c-format
+msgid ", but %s is"
+msgstr ", mais %s est"
+
+#: backend.c:10606
+#, c-format
+msgid "Startup failure on '%s'"
+msgstr "Échec de démarrage sur '%s'"
+
+#: backend.c:10637
+msgid "Waiting for first chess program"
+msgstr "En attente du premier programme d'échecs"
+
+#: backend.c:10642 backend.c:14576
+msgid "Waiting for second chess program"
+msgstr "En attente du second programme d'échecs"
+
+#: backend.c:10691
+msgid "Could not write on tourney file"
+msgstr "Impossible d'écrire dans le fichier du tournoi"
+
+#: backend.c:10765
+msgid ""
+"You cannot replace an engine while it is engaged!\n"
+"Terminate its game first."
+msgstr ""
+"Vous ne pouvez pas remplacer un moteur pendant qu'il est engagé !\n"
+"Veuillez d'abord clôturer le jeu associé. "
+
+#: backend.c:10779
+msgid "No engine with the name you gave is installed"
+msgstr "Aucun moteur portant le nom fourni n'est installé"
+
+#: backend.c:10781
+msgid ""
+"First change an engine by editing the participants list\n"
+"of the Tournament Options dialog"
+msgstr ""
+"Tout d'abord, changez le moteur d'échecs en éditant la liste des participants\n"
+"de la boîte de dialogue Options du Tournoi"
+
+#: backend.c:10782
+msgid "You can only change one engine at the time"
+msgstr "Vous ne pouvez changer qu'un seul moteur à la fois "
+
+#: backend.c:10797 backend.c:10946
+#, c-format
+msgid "No engine %s is installed"
+msgstr "Aucun moteur %s n'est installé"
+
+#: backend.c:10817
+msgid ""
+"You must supply a tournament file,\n"
+"for storing the tourney progress"
+msgstr ""
+"Vous devez fournir un fichier de tournoi,\n"
+"afin de conserver la progression du tournoi"
+
+#: backend.c:10827
+msgid "Not enough participants"
+msgstr "Pas assez de participants"
+
+#: backend.c:11030
+msgid "Bad tournament file"
+msgstr "Mauvais fichier de tournoi"
+
+#: backend.c:11042
+msgid "Waiting for other game(s)"
+msgstr "En attente d'autres parties"
+
+#: backend.c:11055
+msgid "No pairing engine specified"
+msgstr "Aucun moteur de jumelage n'est spécifié"
+
+#: backend.c:11531
+#, c-format
+msgid "Match %s vs. %s: final score %d-%d-%d"
+msgstr "Match %s contre %s : score final %d-%d-%d"
+
+#: backend.c:12009 backend.c:12040
+#, c-format
+msgid "Illegal move: %d.%s%s"
+msgstr "Mouvement interdit : %d.%s%s"
+
+#: backend.c:12029
+#, c-format
+msgid "Ambiguous move: %d.%s%s"
+msgstr "Mouvement ambigu : %d.%s%s"
+
+#: backend.c:12083 backend.c:13125 backend.c:13318 backend.c:13688
+#, c-format
+msgid "Can't open \"%s\""
+msgstr "Impossible d'ouvrir \"%s\""
+
+#: backend.c:12095 menus.c:116
+msgid "Cannot build game list"
+msgstr "Impossible de construire la liste de jeu"
+
+#: backend.c:12180
+msgid "No more games in this message"
+msgstr "Plus de jeux dans ce message"
+
+#: backend.c:12220
+msgid "No game has been loaded yet"
+msgstr "Aucun jeu n'a encore été chargé "
+
+#: backend.c:12224 backend.c:13106 ngamelist.c:129
+msgid "Can't back up any further"
+msgstr "Impossible de reculer davantage"
+
+#: backend.c:12668
+msgid "Game number out of range"
+msgstr "Numéro de la partie hors de la plage"
+
+#: backend.c:12679
+msgid "Can't seek on game file"
+msgstr "Impossible d'appeler le fichier de jeu"
+
+#: backend.c:12737
+msgid "Game not found in file"
+msgstr "Partie non trouvée dans le fichier"
+
+#: backend.c:12866 backend.c:13202
+msgid "Bad FEN position in file"
+msgstr "Position de FEN incorrecte dans le fichier"
+
+#: backend.c:13018
+msgid "No moves in game"
+msgstr "Aucun mouvement dans le jeu"
+
+#: backend.c:13102
+msgid "No position has been loaded yet"
+msgstr "Aucune position n'a encore été chargée"
+
+#: backend.c:13163 backend.c:13174
+msgid "Can't seek on position file"
+msgstr "Impossible d'appeler le fichier de position"
+
+#: backend.c:13181 backend.c:13193
+msgid "Position not found in file"
+msgstr "Position non trouvée dans le fichier"
+
+#: backend.c:13233
+msgid "Black to play"
+msgstr "Aux noirs de jouer"
+
+#: backend.c:13236
+msgid "White to play"
+msgstr "Aux blancs de jouer"
+
+#: backend.c:13323 backend.c:13693
+msgid "Waiting for access to save file"
+msgstr "En attente de l'accès au fichier de sauvegarde"
+
+#: backend.c:13325
+msgid "Saving game"
+msgstr "Sauvegarde du jeu en cours"
+
+#: backend.c:13326
+msgid "Bad Seek"
+msgstr "Mauvaise recherche"
+
+#: backend.c:13695
+msgid "Saving position"
+msgstr "Sauvegarde de la position en cours"
+
+#: backend.c:13821
+msgid ""
+"You have edited the game history.\n"
+"Use Reload Same Game and make your move again."
+msgstr ""
+"Vous avez modifié l'historique de la partie.\n"
+"Utilisez Recharger la Même Partie et faites votre mouvement encore une fois. "
+
+#: backend.c:13826
+msgid ""
+"You have entered too many moves.\n"
+"Back up to the correct position and try again."
+msgstr ""
+"Vous avez entré trop de mouvements.\n"
+"Veuillez retourner à une position correcte and veuillez réessayer. "
+
+#: backend.c:13831
+msgid ""
+"Displayed position is not current.\n"
+"Step forward to the correct position and try again."
+msgstr ""
+"La position affichée n'est pas la position courante.\n"
+"Avancez d'un pas vers la position correcte et veuillez réessayer. "
+
+#: backend.c:13878
+msgid "You have not made a move yet"
+msgstr "Vous n'avez pas encore fait de mouvement"
+
+#: backend.c:13899
+msgid ""
+"The cmail message is not loaded.\n"
+"Use Reload CMail Message and make your move again."
+msgstr ""
+"Le message cmail n'est pas chargé.\n"
+"Utilisez Recharger le Message CMail et veuillez refaire votre mouvement."
+
+#: backend.c:13904
+msgid "No unfinished games"
+msgstr "Aucune partie non terminée"
+
+#: backend.c:13910
+#, c-format
+msgid ""
+"You have already mailed a move.\n"
+"Wait until a move arrives from your opponent.\n"
+"To resend the same move, type\n"
+"\"cmail -remail -game %s\"\n"
+"on the command line."
+msgstr ""
+"Vous avez déjà envoyé un mouvement par mail.\n"
+"Veuillez attendre que votre adversaire vous envoie un mouvement.\n"
+"Pour renvoyer le même mouvement, tapez\n"
+"\"cmail -remail -game %s\"\n"
+"dans la ligne de commande."
+
+#: backend.c:13925
+msgid "Failed to invoke cmail"
+msgstr "Échec lors de l'invocation de cmail"
+
+#: backend.c:13987
+#, c-format
+msgid "Waiting for reply from opponent\n"
+msgstr "En attente de la réponse de votre adversaire\n"
+
+#: backend.c:14009
+#, c-format
+msgid "Still need to make move for game\n"
+msgstr "Il est encore nécessaire de faire un mouvement pour la partie restante\n"
+
+#: backend.c:14013
+#, c-format
+msgid "Still need to make moves for both games\n"
+msgstr "Il est encore nécessaire de faire des mouvements pour les deux parties restantes\n"
+
+#: backend.c:14017
+#, c-format
+msgid "Still need to make moves for all %d games\n"
+msgstr "Il est encore nécessaire de faire des mouvements pour les %d parties restantes\n"
+
+#: backend.c:14024
+#, c-format
+msgid "Still need to make a move for game %s\n"
+msgstr "Il est encore nécessaire de faire un mouvement pour la partie %s\n"
+
+#: backend.c:14030
+#, c-format
+msgid "No unfinished games\n"
+msgstr "Aucun jeu non terminé\n"
+
+#: backend.c:14032
+#, c-format
+msgid "Ready to send mail\n"
+msgstr "Prêt à envoyer le mai\n"
+
+#: backend.c:14037
+#, c-format
+msgid "Still need to make moves for games %s\n"
+msgstr "Il est encore nécessaire de faire des mouvements pour les parties %s\n"
+
+#: backend.c:14240
+msgid "Edit comment"
+msgstr "Édit un commentaire"
+
+#: backend.c:14242
+#, c-format
+msgid "Edit comment on %d.%s%s"
+msgstr "Édit un commentaire sur %d.%s%s"
+
+#: backend.c:14297
+#, c-format
+msgid "You are not observing a game"
+msgstr "Vous n'observez aucune partie "
+
+#: backend.c:14408
+msgid "It is not White's turn"
+msgstr "C'est maintenant au tour des Blancs"
+
+#: backend.c:14489
+msgid "It is not Black's turn"
+msgstr "C'est maintenant au tour des Noirs"
+
+#: backend.c:14597
+#, c-format
+msgid "Starting %s chess program"
+msgstr "Démarrage du programme d'échecs %s"
+
+#: backend.c:14625 backend.c:15783
+msgid ""
+"Wait until your turn,\n"
+"or select 'Move Now'."
+msgstr ""
+"Veuillez attendre votre tour,\n"
+"ou sélectionnez 'Bouger maintenant'."
+
+#: backend.c:14762
+msgid "Training mode off"
+msgstr "Mode d'entraînement éteint "
+
+#: backend.c:14770
+msgid "Training mode on"
+msgstr "Mode d'entraînement démarré"
+
+#: backend.c:14773
+msgid "Already at end of game"
+msgstr "Déjà à la fin de la partie"
+
+#: backend.c:14853
+msgid "Warning: You are still playing a game"
+msgstr "Attention : Vous êtes encore en train de jouer une partie "
+
+#: backend.c:14856
+msgid "Warning: You are still observing a game"
+msgstr "Attention : Vous êtes encore en train d'observer une partie "
+
+#: backend.c:14859
+msgid "Warning: You are still examining a game"
+msgstr "Attention : Vous êtes encore en train d'examiner une partie "
+
+#: backend.c:14926
+msgid "Click clock to clear board"
+msgstr "Cliquez sur le chronomètre pour nettoyer le plateau"
+
+#: backend.c:14936
+msgid "Close ICS engine analyze..."
+msgstr "Fermer l'analyse du moteur ICS..."
+
+#: backend.c:15254
+msgid "That square is occupied"
+msgstr "La case est occupée"
+
+#: backend.c:15278 backend.c:15304
+msgid "There is no pending offer on this move"
+msgstr "Il n'y a aucune offre en suspens pour ce mouvement "
+
+#: backend.c:15340 backend.c:15351
+msgid "Your opponent is not out of time"
+msgstr "Votre adversaire n'est pas en retard"
+
+#: backend.c:15419
+msgid "You must make your move before offering a draw"
+msgstr "Vous devez faire votre mouvement avec de proposer un match nul"
+
+#: backend.c:15765
+msgid "You are not examining a game"
+msgstr "Vous n'êtes pas en train d'étudier le jeu"
+
+#: backend.c:15769
+msgid "You can't revert while pausing"
+msgstr "Vous ne pouvez pas revenir en arrière lorsque vous êtes en pause"
+
+#: backend.c:15823 backend.c:15830
+msgid "It is your turn"
+msgstr "C'est à vous de jouer"
+
+#: backend.c:15881 backend.c:15888 backend.c:15974 backend.c:15981
+msgid "Wait until your turn."
+msgstr "Veuillez patienter jusqu'à votre tour"
+
+#: backend.c:15893
+msgid "No hint available"
+msgstr "Aucun indice n'est disponible"
+
+#: backend.c:15908 backend.c:15939 ngamelist.c:357
+msgid "Game list not loaded or empty"
+msgstr "Liste de jeux non chargée ou vide"
+
+#: backend.c:15946
+msgid "Book file exists! Try again for overwrite."
+msgstr "Fichier de bibliothèque existant ! Essayez encore pour écraser."
+
+#: backend.c:16427
+#, c-format
+msgid "Error writing to %s chess program"
+msgstr "Erreur lors de l'écriture dans le programme d'échecs %s"
+
+#: backend.c:16430 backend.c:16461
+#, c-format
+msgid "%s program exits in draw position (%s)"
+msgstr "Le programme %s quitte sur un match nul (%s)"
+
+#: backend.c:16456
+#, c-format
+msgid "Error: %s chess program (%s) exited unexpectedly"
+msgstr "Erreur : le programme d'échec %s (%s) a quitté de façon inattendue"
+
+#: backend.c:16474
+#, c-format
+msgid "Error reading from %s chess program (%s)"
+msgstr "Erreur de lecture dans le programme d'échecs %s (%s)"
+
+#: backend.c:16902
+#, c-format
+msgid "%s engine has too many options\n"
+msgstr "Le moteur %s possède trop d'options\n"
+
+#: backend.c:17058
+msgid "Displayed move is not current"
+msgstr "Le mouvement affiché n'est pas celui qui est courant "
+
+#: backend.c:17067
+msgid "Could not parse move"
+msgstr "Impossible d'analyser le mouvement "
+
+#: backend.c:17192 backend.c:17214
+msgid "Both flags fell"
+msgstr "Les deux drapeaux ont chuté"
+
+#: backend.c:17194
+msgid "White's flag fell"
+msgstr "Le drapeau des Blancs a chuté"
+
+#: backend.c:17216
+msgid "Black's flag fell"
+msgstr "Le drapeau des Noirs a chuté"
+
+#: backend.c:17347
+msgid "Clock adjustment not allowed in auto-flag mode"
+msgstr "Le réajustement d'horloge n'est pas autorisé dans le mode drapeau automatique"
+
+#: backend.c:18246
+msgid "Bad FEN position in clipboard"
+msgstr "Mauvaise position FEN dans le presse-papier"
+
+#: book.c:579 book.c:836
+msgid "Polyglot book not valid"
+msgstr "Bibliothèque d'ouverture invalide"
+
+#: book.c:703
+msgid "Book Fault"
+msgstr "Défaut de bibliothèque"
+
+#: book.c:839
+msgid "Hash keys are different"
+msgstr "Les clés de hashage sont différentes"
+
+#: book.c:1015
+msgid "Could not create book"
+msgstr "Impossible de créer la bibliothèque"
+
+#: dialogs.c:283
+msgid "Tournament file:          "
+msgstr "Fichier de tournoi :"
+
+#: dialogs.c:284
+msgid "For concurrent playing of tourney with multiple XBoards:"
+msgstr "Pour les parties de tournoi simultanées avec plusieurs XBoards :"
+
+#: dialogs.c:285
+msgid "Sync after round"
+msgstr "Synchronisation après le tour"
+
+#: dialogs.c:286
+msgid "Sync after cycle"
+msgstr "Synchronisation après le cycle"
+
+#: dialogs.c:287
+msgid "Tourney participants:"
+msgstr "Participants du tournoi : "
+
+#: dialogs.c:288
+msgid "Select Engine:"
+msgstr "Sélectionnez le moteur :"
+
+#: dialogs.c:296
+msgid "Tourney type (0 = round-robin, 1 = gauntlet):"
+msgstr "Type du tournoi (0 = toutes rondes, 1 = gantelet) : "
+
+#: dialogs.c:297
+msgid "Number of tourney cycles (or Swiss rounds):"
+msgstr "Nombre de cycles du tournoi (ou rondes suisses) : "
+
+#: dialogs.c:298
+msgid "Default Number of Games in Match (or Pairing):"
+msgstr "Nombre de jeux par défaut dans le match (ou appariement ) :"
+
+#: dialogs.c:299
+msgid "Pause between Match Games (msec):"
+msgstr "Pause entre les jeux de match (msec) :"
+
+#: dialogs.c:300
+msgid "Save Tourney Games on:"
+msgstr "Sauvegarder les jeux de tournoi sur :"
+
+#: dialogs.c:301
+msgid "Game File with Opening Lines:"
+msgstr "Fichier de jeu avec ouverture de lignes :"
+
+#: dialogs.c:302
+msgid "Game Number (-1 or -2 = Auto-Increment):"
+msgstr "Nombre de jeux (-1 ou -2 = incrémentation automatique) : "
+
+#: dialogs.c:303
+msgid "File with Start Positions:"
+msgstr "Fichier avec les positions de départ : "
+
+#: dialogs.c:304
+msgid "Position Number (-1 or -2 = Auto-Increment):"
+msgstr "Nombre de positions (-1 ou -2 = incrémentation automatique) :"
+
+#: dialogs.c:305
+msgid "Rewind Index after this many Games (0 = never):"
+msgstr "Rebobinage d'index après ce nombre de jeux (0 = jamais) :"
+
+#: dialogs.c:306
+msgid "Disable own engine books by default"
+msgstr "Désactiver ses propres bibliothèques de moteurs par défaut"
+
+#: dialogs.c:307 dialogs.c:1655
+msgid "Time Control"
+msgstr "Contrôle temporel"
+
+#: dialogs.c:308
+msgid "Common Engine"
+msgstr "Moteur commun"
+
+#: dialogs.c:309 dialogs.c:441
+msgid "General Options"
+msgstr "Options générales"
+
+#: dialogs.c:310
+msgid "Continue Later"
+msgstr "Poursuivre ultérieurement "
+
+#: dialogs.c:311
+msgid "Replace Engine"
+msgstr "Remplacer le moteur"
+
+#: dialogs.c:312
+msgid "Upgrade Engine"
+msgstr "Mettre à niveau le moteur"
+
+#: dialogs.c:313
+msgid "Clone Tourney"
+msgstr "Fermer le tournoi"
+
+#: dialogs.c:351
+msgid "First you must specify an existing tourney file to clone"
+msgstr "Tout d'abord, vous devez spécifier un fichier de tournoi existant à cloner "
+
+#: dialogs.c:367 dialogs.c:1496
+msgid "# no engines are installed"
+msgstr "# aucun moteur n'est installé"
+
+#: dialogs.c:375
+msgid "Internal error: PARTICIPANTS set wrong"
+msgstr "Erreur interne : réglage PARTICIPANTS erroné"
+
+#: dialogs.c:383
+msgid "Tournament Options"
+msgstr "Options du tournoi"
+
+#: dialogs.c:402
+msgid "Absolute Analysis Scores"
+msgstr "Analyse absolue des scores "
+
+#: dialogs.c:403
+msgid "Almost Always Queen (Detour Under-Promote)"
+msgstr "Presque toujours une Reine (voire une sous-promotion)"
+
+#: dialogs.c:404 menus.c:736
+msgid "Animate Dragging"
+msgstr "Traînée animée"
+
+#: dialogs.c:405 menus.c:737
+msgid "Animate Moving"
+msgstr "Mouvement animé"
+
+#: dialogs.c:406 menus.c:738
+msgid "Auto Flag"
+msgstr "Drapeau automatique"
+
+#: dialogs.c:407 menus.c:739
+msgid "Auto Flip View"
+msgstr "Retournement de vue automatique"
+
+#: dialogs.c:408 menus.c:740
+msgid "Blindfold"
+msgstr "Aveugle"
+
+#. TRANSLATORS: the drop menu is used to drop a piece, e.g. during bughouse or editing a position
+#: dialogs.c:410
+msgid "Drop Menu"
+msgstr "Menu déroulant"
+
+#: dialogs.c:411
+msgid "Enable Variation Trees"
+msgstr "Autoriser les arbres de variation"
+
+#: dialogs.c:412
+msgid "Headers in Engine Output Window"
+msgstr "En-têtes dans la fenêtre de sortie du moteur"
+
+#: dialogs.c:413
+msgid "Hide Thinking from Human"
+msgstr "Cacher la pensée de l'Humain"
+
+#: dialogs.c:414 menus.c:745
+msgid "Highlight Last Move"
+msgstr "Surligner le dernier mouvement "
+
+#: dialogs.c:415
+msgid "Highlight with Arrow"
+msgstr "Surligner avec une flèche"
+
+#: dialogs.c:416 menus.c:748
+msgid "One-Click Moving"
+msgstr "Déplacement en un clic"
+
+#: dialogs.c:417
+msgid "Periodic Updates (in Analysis Mode)"
+msgstr "Mises à jour périodiques (en mode d'analyse)"
+
+#: dialogs.c:419
+msgid "Play Move(s) of Clicked PV (Analysis)"
+msgstr "Mouvement(s) de jeu du PV sélectionné (Analyse)"
+
+#: dialogs.c:420 dialogs.c:604 menus.c:750
+msgid "Ponder Next Move"
+msgstr "Réfléchir au mouvement suivant"
+
+#: dialogs.c:421
+msgid "Popup Exit Messages"
+msgstr "Faire apparaître les messages de sortie"
+
+#: dialogs.c:422 menus.c:752
+msgid "Popup Move Errors"
+msgstr "Faire apparaître les erreurs de mouvement"
+
+#: dialogs.c:423
+msgid "Scores in Move List"
+msgstr "Scores dans la liste des mouvements"
+
+#: dialogs.c:424
+msgid "Show Coordinates"
+msgstr "Montrer les coordonnées"
+
+#: dialogs.c:425
+msgid "Show Target Squares"
+msgstr "Montrer les cases cibles"
+
+#: dialogs.c:426
+msgid "Sticky Windows"
+msgstr "Fenêtres collantes"
+
+#: dialogs.c:427 menus.c:755
+msgid "Test Legality"
+msgstr "Tester la légalité"
+
+#: dialogs.c:428
+msgid "Top-Level Dialogs"
+msgstr "Dialogues de haut-niveau"
+
+#: dialogs.c:429
+msgid "Flash Moves (0 = no flashing):"
+msgstr "Mouvements clignotants (0 = pas de clignotement) :"
+
+#: dialogs.c:430
+msgid "Flash Rate (high = fast):"
+msgstr "Taux de clignotement (haut = rapide) :"
+
+#: dialogs.c:431
+msgid "Animation Speed (high = slow):"
+msgstr "Vitesse des animations (haut = lent) :"
+
+#: dialogs.c:432
+msgid "Zoom factor in Evaluation Graph:"
+msgstr "Facteur de zoom dans le graphique d'évaluation :"
+
+#: dialogs.c:452
+msgid "Normal"
+msgstr "Normal"
+
+#: dialogs.c:453
+msgid "Makruk"
+msgstr "Makruk"
+
+#: dialogs.c:454
+msgid "FRC"
+msgstr "FRC"
+
+#: dialogs.c:455
+msgid "Shatranj"
+msgstr "Chatrang"
+
+#: dialogs.c:456
+msgid "Wild castle"
+msgstr "Roque furieux"
+
+#: dialogs.c:457
+msgid "Knightmate"
+msgstr "Compagnon du roi"
+
+#: dialogs.c:458
+msgid "No castle"
+msgstr "Sans roque"
+
+#: dialogs.c:459
+msgid "Cylinder *"
+msgstr "Cylindre *"
+
+#: dialogs.c:460
+msgid "3-checks"
+msgstr "Tri-échecs"
+
+#: dialogs.c:461
+msgid "berolina *"
+msgstr "Berolina *"
+
+#: dialogs.c:462
+msgid "atomic"
+msgstr "Atomique"
+
+#: dialogs.c:463
+msgid "two kings"
+msgstr "Deux rois"
+
+#: dialogs.c:464
+msgid " "
+msgstr " "
+
+#: dialogs.c:465
+msgid "Spartan"
+msgstr "Spartan"
+
+#: dialogs.c:466
+msgid "Board size ( -1 = default for selected variant):"
+msgstr "Taille de l'échiquier (-1 = par défaut pour la variante sélectionnée) :"
+
+#: dialogs.c:467
+msgid "Number of Board Ranks:"
+msgstr "Nombre de rangées :"
+
+#: dialogs.c:468
+msgid "Number of Board Files:"
+msgstr "Nombre de colonnes : "
+
+#: dialogs.c:469
+msgid "Holdings Size:"
+msgstr "Taille de la zone de stockage :"
+
+#: dialogs.c:471
+msgid ""
+"Variants marked with * can only be played\n"
+"with legality testing off."
+msgstr ""
+"Les variantes marquées d'une * ne peuvent être jouées\n"
+" qu'avec la vérification de la légalité désactivée."
+
+#: dialogs.c:473
+msgid "ASEAN"
+msgstr "ASEAN"
+
+#: dialogs.c:474
+msgid "Great Shatranj (10x8)"
+msgstr "Grand Chatrang"
+
+#: dialogs.c:475
+msgid "Seirawan"
+msgstr "Seirawan"
+
+#: dialogs.c:476
+msgid "Falcon (10x8)"
+msgstr "Faucon (10x8)"
+
+#: dialogs.c:477
+msgid "Superchess"
+msgstr "Super échec"
+
+#: dialogs.c:478
+msgid "Capablanca (10x8)"
+msgstr "Capablanca (10x8)"
+
+#: dialogs.c:479
+msgid "Crazyhouse"
+msgstr "Maison de fous"
+
+#: dialogs.c:480
+msgid "Gothic (10x8)"
+msgstr "Gothique (10x8)"
+
+#: dialogs.c:481
+msgid "Bughouse"
+msgstr "Blitz à quatre"
+
+#: dialogs.c:482
+msgid "Janus (10x8)"
+msgstr "Janus (10x8)"
+
+#: dialogs.c:483
+msgid "Suicide"
+msgstr "Qui perd gagne"
+
+#: dialogs.c:484
+msgid "CRC (10x8)"
+msgstr "Échecs aléatoires Capablanca (10x8)"
+
+#: dialogs.c:485
+msgid "give-away"
+msgstr "Qui perd gagne"
+
+#: dialogs.c:486
+msgid "grand (10x10)"
+msgstr "Grand (10x10)"
+
+#: dialogs.c:487
+msgid "losers"
+msgstr "Qui perd gagne"
+
+#: dialogs.c:488
+msgid "shogi (9x9)"
+msgstr "Shogi (9x9)"
+
+#: dialogs.c:489
+msgid "fairy"
+msgstr "Féerique"
+
+#: dialogs.c:490
+msgid "xiangqi (9x10)"
+msgstr "Xianggi (9x10)"
+
+#: dialogs.c:491
+msgid "mighty lion"
+msgstr "Mat du lion "
+
+#: dialogs.c:492
+msgid "courier (12x8)"
+msgstr "Coursier (12x8)"
+
+#: dialogs.c:493
+msgid "elven chess (10x10)"
+msgstr "Échecs elfiques (10x10)"
+
+#: dialogs.c:494
+msgid "chu shogi (12x12)"
+msgstr "Chu Shogi (12x12)"
+
+#: dialogs.c:526
+#, c-format
+msgid "Warning: second engine (%s) does not support this!"
+msgstr "Attention : le second moteur (%s) ne supporte pas cela !"
+
+#: dialogs.c:555
+#, c-format
+msgid "Only bughouse is not available in viewer mode."
+msgstr "Seul le Blitz à quatre n'est pas disponible en mode spectateur."
+
+#: dialogs.c:556
+#, c-format
+msgid ""
+"All variants not supported by the first engine\n"
+"(currently %s) are disabled."
+msgstr ""
+"Toutes les variantes non supportées par le premier moteur\n"
+"(actuellement %s) sont désactivées."
+
+#: dialogs.c:573
+msgid "New Variant"
+msgstr "Nouvelle variante"
+
+#: dialogs.c:605
+msgid "Maximum Number of CPUs per Engine:"
+msgstr "Nombre maximum de CPUs par moteur :"
+
+#: dialogs.c:606
+msgid "Polygot Directory:"
+msgstr "Répertoire multilingue : "
+
+#: dialogs.c:607
+msgid "Hash-Table Size (MB):"
+msgstr "Taille du tableau de hashage (Mo) : "
+
+#: dialogs.c:608
+msgid "EGTB Path:"
+msgstr "Chemin EGTB : "
+
+#: dialogs.c:609
+msgid "EGTB Cache Size (MB):"
+msgstr "Taille du cache EGTB (Mo) :"
+
+#: dialogs.c:610
+msgid "Use GUI Book"
+msgstr "Utiliser le livre graphique"
+
+#: dialogs.c:611
+msgid "Opening-Book Filename:"
+msgstr "Nom de fichier de bibliothèque d'ouverture : "
+
+#: dialogs.c:612
+msgid "Book Depth (moves):"
+msgstr "Profondeur de la bibliothèque (mouvements) :"
+
+#: dialogs.c:613
+msgid "Book Variety (0) vs. Strength (100):"
+msgstr "Diversité de la bibliothèque (0) face à la force (100) :"
+
+#: dialogs.c:614
+msgid "Engine #1 Has Own Book"
+msgstr "Le moteur #1 possède sa propre bibliothèque"
+
+#: dialogs.c:615
+msgid "Engine #2 Has Own Book          "
+msgstr "Le moteur #1 possède sa propre bibliothèque"
+
+#: dialogs.c:626
+msgid "Common Engine Settings"
+msgstr "Paramètres communs aux moteurs"
+
+#: dialogs.c:632
+msgid "Detect all Mates"
+msgstr "Détecter tous les partenaires"
+
+#: dialogs.c:633
+msgid "Verify Engine Result Claims"
+msgstr "Vérifier les déclarations du résultat du moteur"
+
+#: dialogs.c:634
+msgid "Draw if Insufficient Mating Material"
+msgstr "Faire match nul si les moyens de mat sont insuffisants"
+
+#: dialogs.c:635
+msgid "Adjudicate Trivial Draws (3-Move Delay)"
+msgstr "Arbitrer les matchs nuls évidents (retard de 3 mouvements)"
+
+#: dialogs.c:636
+msgid "N-Move Rule:"
+msgstr "Règle des N coups :"
+
+#: dialogs.c:637
+msgid "N-fold Repeats:"
+msgstr "N répétitions de position :"
+
+#: dialogs.c:638
+msgid "Draw after N Moves Total:"
+msgstr "Match nul après un total de N coups :"
+
+#: dialogs.c:639
+msgid "Win / Loss Threshold:"
+msgstr "Seuil de victoire / défaite :"
+
+#: dialogs.c:640
+msgid "Negate Score of Engine #1"
+msgstr "Annuler le score du moteur #1"
+
+#: dialogs.c:641
+msgid "Negate Score of Engine #2"
+msgstr "Annuler le score du moteur #2"
+
+#: dialogs.c:648
+msgid "Adjudicate non-ICS Games"
+msgstr "Arbitrer les jeux non-ICS"
+
+#: dialogs.c:661
+msgid "Auto-Kibitz"
+msgstr "Kibitz automatique"
+
+#: dialogs.c:662
+msgid "Auto-Comment"
+msgstr "Commentaire automatique"
+
+#: dialogs.c:663
+msgid "Auto-Observe"
+msgstr "Observation automatique"
+
+#: dialogs.c:664
+msgid "Auto-Raise Board"
+msgstr "Échiquier au premier plan automatique"
+
+#: dialogs.c:665
+msgid "Auto-Create Logon Script"
+msgstr "Création automatique du script de connexion"
+
+#: dialogs.c:666
+msgid "Background Observe while Playing"
+msgstr "Observation en second plan lors du jeu"
+
+#: dialogs.c:667
+msgid "Dual Board for Background-Observed Game"
+msgstr "Échiquier parallèle pour les jeux observés en second plan"
+
+#: dialogs.c:668
+msgid "Get Move List"
+msgstr "Obtenir la liste des coups"
+
+#: dialogs.c:669
+msgid "Quiet Play"
+msgstr "Jeu tranquille"
+
+#: dialogs.c:670
+msgid "Seek Graph"
+msgstr "Graphique de recherche"
+
+#: dialogs.c:671
+msgid "Auto-Refresh Seek Graph"
+msgstr "Rafraîchissement automatique du graphique de recherche"
+
+#: dialogs.c:672
+msgid "Auto-InputBox PopUp"
+msgstr "Pop-up de saisi automatique"
+
+#: dialogs.c:673
+msgid "Quit after game"
+msgstr "Quitter à la fin du jeu"
+
+#: dialogs.c:674
+msgid "Premove"
+msgstr "Pré-coup"
+
+#: dialogs.c:675
+msgid "Premove for White"
+msgstr "Pré-coup pour les Blancs"
+
+#: dialogs.c:676
+msgid "First White Move:"
+msgstr "Premier coup des Blancs :"
+
+#: dialogs.c:677
+msgid "Premove for Black"
+msgstr "Pré-coup pour les Noirs"
+
+#: dialogs.c:678
+msgid "First Black Move:"
+msgstr "Premier coup des Noirs :"
+
+#: dialogs.c:680
+msgid "Alarm"
+msgstr "Alarme"
+
+#: dialogs.c:681
+msgid "Alarm Time (msec):"
+msgstr "Temps de l'alarme (msec) :"
+
+#: dialogs.c:683
+msgid "Colorize Messages"
+msgstr "Messages colorés"
+
+#: dialogs.c:684
+msgid "Shout Text Colors:"
+msgstr "Couleurs du texte Crier:"
+
+#: dialogs.c:685
+msgid "S-Shout Text Colors:"
+msgstr "Couleurs du texte S-Crier:"
+
+#: dialogs.c:686
+msgid "Channel #1 Text Colors:"
+msgstr "Couleurs du texte du Canal #1 :"
+
+#: dialogs.c:687
+msgid "Other Channel Text Colors:"
+msgstr "Couleurs du texte Autre Canal :"
+
+#: dialogs.c:688
+msgid "Kibitz Text Colors:"
+msgstr "Couleurs du texte Kibitz :"
+
+#: dialogs.c:689
+msgid "Tell Text Colors:"
+msgstr "Couleurs du texte Dire:"
+
+#: dialogs.c:690
+msgid "Challenge Text Colors:"
+msgstr "Couleurs du texte Défi :"
+
+#: dialogs.c:691
+msgid "Request Text Colors:"
+msgstr "Couleurs du texte Requête : "
+
+#: dialogs.c:692
+msgid "Seek Text Colors:"
+msgstr "Couleurs du texte Recherche :"
+
+#: dialogs.c:693
+msgid "Other Text Colors:"
+msgstr "Couleurs du texte Autre :"
+
+#: dialogs.c:700
+msgid "ICS Options"
+msgstr "Options de l'ICS"
+
+#: dialogs.c:705
+msgid "Exact position match"
+msgstr "Correspondance de la position exacte"
+
+#: dialogs.c:705
+msgid "Shown position is subset"
+msgstr "La position montrée est un sous-ensemble"
+
+#: dialogs.c:705
+msgid "Same material with exactly same Pawn chain"
+msgstr "Même matériel avec exactement la même structure de pions"
+
+#: dialogs.c:706
+msgid "Same material"
+msgstr "Même matériel"
+
+#: dialogs.c:706
+msgid "Material range (top board half optional)"
+msgstr "Rangée du matériel (moitié supérieure de l'échiquier optionnelle)"
+
+#: dialogs.c:706
+msgid "Material difference (optional stuff balanced)"
+msgstr "Différence matérielle (équipement optionnel équilibré)"
+
+#: dialogs.c:721
+msgid "Auto-Display Tags"
+msgstr "Affichage automatique des étiquettes"
+
+#: dialogs.c:722
+msgid "Auto-Display Comment"
+msgstr "Affichage automatique des commentaires "
+
+#: dialogs.c:723
+msgid ""
+"Auto-Play speed of loaded games\n"
+"(0 = instant, -1 = off):"
+msgstr ""
+"Vitesse de jeu automatique des jeux chargés\n"
+"(0 = instantané, -1 = désactivé) :"
+
+#: dialogs.c:724
+msgid "Seconds per Move:"
+msgstr "Secondes par coup :"
+
+#: dialogs.c:725
+msgid ""
+"\n"
+"options to use in game-viewer mode:"
+msgstr ""
+"\n"
+"Options à utiliser en mode spectateur de jeu: "
+
+#: dialogs.c:727
+msgid ""
+"\n"
+"Thresholds for position filtering in game list:"
+msgstr ""
+"\n"
+"Seuils pour le filtrage des positions dans la liste de jeux :"
+
+#: dialogs.c:728
+msgid "Elo of strongest player at least:"
+msgstr "Elo du meilleur joueur en dernier :"
+
+#: dialogs.c:729
+msgid "Elo of weakest player at least:"
+msgstr "Elo du joueur le plus faible en dernier :"
+
+#: dialogs.c:730
+msgid "No games before year:"
+msgstr "Aucun jeu précédant l'année : "
+
+#: dialogs.c:731
+msgid "Minimum nr consecutive positions:"
+msgstr "Nombre minimum de positions consécutives :"
+
+#: dialogs.c:733
+msgid "Search mode:"
+msgstr "Mode de recherche :"
+
+#: dialogs.c:734
+msgid "Also match reversed colors"
+msgstr "Associer aussi les couleurs inversées"
+
+#: dialogs.c:735
+msgid "Also match left-right flipped position"
+msgstr "Associer aussi la position inversée verticalement"
+
+#: dialogs.c:744
+msgid "Load Game Options"
+msgstr "Charger les options de jeu"
+
+#: dialogs.c:756
+msgid "Auto-Save Games"
+msgstr "Sauvegarder automatiquement les parties "
+
+#: dialogs.c:757
+msgid "Own Games Only"
+msgstr "Uniquement mes parties "
+
+#: dialogs.c:758
+msgid "Save Games on File:"
+msgstr "Sauvegarder les parties dans le fichier :"
+
+#: dialogs.c:759
+msgid "Save Final Positions on File:"
+msgstr "Sauvegarder les positions finales dans le fichier :"
+
+#: dialogs.c:760
+msgid "PGN Event Header:"
+msgstr "En-têtes des résultats PGN :"
+
+#: dialogs.c:761
+msgid "Old Save Style (as opposed to PGN)"
+msgstr "Ancien type de sauvegarde (contrairement au PGN)"
+
+#: dialogs.c:762
+msgid "Include Number Tag in tourney PGN"
+msgstr "Inclure l'identifiant numérique dans le tournoi PGN"
+
+#: dialogs.c:763
+msgid "Save Score/Depth Info in PGN"
+msgstr "Sauvegarder la donnée Score / Profondeur dans le PGN"
+
+#: dialogs.c:764
+msgid "Save Out-of-Book Info in PGN           "
+msgstr "Sauvegarder la donnée Sortie de la Bibliothèque dans le PGN"
+
+#: dialogs.c:771
+msgid "Save Game Options"
+msgstr "Sauvegarder les options de jeu"
+
+#: dialogs.c:780
+msgid "No Sound"
+msgstr "Muet"
+
+#: dialogs.c:781
+msgid "Default Beep"
+msgstr "Bip par défaut"
+
+#: dialogs.c:782
+msgid "Above WAV File"
+msgstr "Fichier WAV ci-dessus"
+
+#: dialogs.c:783
+msgid "Car Horn"
+msgstr "Klaxon de voiture"
+
+#: dialogs.c:784
+msgid "Cymbal"
+msgstr "Cymbale"
+
+#: dialogs.c:785
+msgid "Ding"
+msgstr "Ding"
+
+#: dialogs.c:786
+msgid "Gong"
+msgstr "Gong"
+
+#: dialogs.c:787
+msgid "Laser"
+msgstr "Laser"
+
+#: dialogs.c:788
+msgid "Penalty"
+msgstr "Penalty"
+
+#: dialogs.c:789
+msgid "Phone"
+msgstr "Téléphone"
+
+#: dialogs.c:790
+msgid "Pop"
+msgstr "Pop"
+
+#: dialogs.c:791
+msgid "Roar"
+msgstr "Rugissement"
+
+#: dialogs.c:792
+msgid "Slap"
+msgstr "Claquement "
+
+#: dialogs.c:793
+msgid "Wood Thunk"
+msgstr "Wood Thunk"
+
+#: dialogs.c:795
+msgid "User File"
+msgstr "Fichier utilisateur"
+
+#: dialogs.c:818
+msgid "User WAV File:"
+msgstr "Fichier WAV de l'utilisateur :"
+
+#: dialogs.c:819
+msgid "Sound Program:"
+msgstr "Lecteur de son :"
+
+#: dialogs.c:820
+msgid "Try-Out Sound:"
+msgstr "Son d'essai : "
+
+#: dialogs.c:821
+msgid "Play"
+msgstr "Jouer "
+
+#: dialogs.c:822
+msgid "Move:"
+msgstr "Coup :"
+
+#: dialogs.c:823
+msgid "Win:"
+msgstr "Gagner :"
+
+#: dialogs.c:824
+msgid "Lose:"
+msgstr "Perdre :"
+
+#: dialogs.c:825
+msgid "Draw:"
+msgstr "Match nul :"
+
+#: dialogs.c:826
+msgid "Unfinished:"
+msgstr "Non terminé :"
+
+#: dialogs.c:827
+msgid "Alarm:"
+msgstr "Alarme :"
+
+#: dialogs.c:828
+msgid "Challenge:"
+msgstr "Défi :"
+
+#: dialogs.c:830
+msgid "Sounds Directory:"
+msgstr "Répertoire de sons :"
+
+#: dialogs.c:831
+msgid "Shout:"
+msgstr "Cri :"
+
+#: dialogs.c:832
+msgid "S-Shout:"
+msgstr "S-Cri : "
+
+#: dialogs.c:833
+msgid "Channel:"
+msgstr "Canal :"
+
+#: dialogs.c:834
+msgid "Channel 1:"
+msgstr "Canal 1 :"
+
+#: dialogs.c:835
+msgid "Tell:"
+msgstr "Dire :"
+
+#: dialogs.c:836
+msgid "Kibitz:"
+msgstr "Kibitz :"
+
+#: dialogs.c:837
+msgid "Request:"
+msgstr "Requêtes :"
+
+#: dialogs.c:838
+msgid "Lion roar:"
+msgstr "Rugissement de lion :"
+
+#: dialogs.c:839
+msgid "Seek:"
+msgstr "Recherche :"
+
+#: dialogs.c:855
+msgid "Sound Options"
+msgstr "Options sonores"
+
+#: dialogs.c:871
+msgid "Selectable themes:"
+msgstr "Thèmes sélectionnables :"
+
+#: dialogs.c:873
+msgid "New name for current theme:"
+msgstr "Nouveau nom pour le thème courant :"
+
+#: dialogs.c:876
+msgid "White Piece Color:"
+msgstr "Couleur du pion blanc :"
+
+#. TRANSLATORS: R = single letter for the color red
+#: dialogs.c:879 dialogs.c:888 dialogs.c:894 dialogs.c:900 dialogs.c:906
+#: dialogs.c:912
+msgid "R"
+msgstr "R"
+
+#. TRANSLATORS: G = single letter for the color green
+#: dialogs.c:881 dialogs.c:889 dialogs.c:895 dialogs.c:901 dialogs.c:907
+#: dialogs.c:913
+msgid "G"
+msgstr "G"
+
+#. TRANSLATORS: B = single letter for the color blue
+#: dialogs.c:883 dialogs.c:890 dialogs.c:896 dialogs.c:902 dialogs.c:908
+#: dialogs.c:914
+msgid "B"
+msgstr "B"
+
+#. TRANSLATORS: D = single letter to make a color darker
+#: dialogs.c:885 dialogs.c:891 dialogs.c:897 dialogs.c:903 dialogs.c:909
+#: dialogs.c:915
+msgid "D"
+msgstr "D"
+
+#: dialogs.c:886
+msgid "Black Piece Color:"
+msgstr "Couleur du pion noir : "
+
+#: dialogs.c:892
+msgid "Light Square Color:"
+msgstr "Couleur de la case claire :"
+
+#: dialogs.c:898
+msgid "Dark Square Color:"
+msgstr "Couleur de la case foncée :"
+
+#: dialogs.c:904
+msgid "Highlight Color:"
+msgstr "Couleur de surbrillance :"
+
+#: dialogs.c:910
+msgid "Premove Highlight Color:"
+msgstr "Couleur de surbrillance de pré-coup :"
+
+#: dialogs.c:916
+msgid "Flip Pieces Shogi Style        (Colored buttons restore default)"
+msgstr "Retourner les pièces style Shogi  (Les boutons colorés restaurent la valeur par défaut)"
+
+#: dialogs.c:918
+msgid "Mono Mode"
+msgstr "Mode solo"
+
+#: dialogs.c:919
+msgid "Logo Size (0=off, requires restart):"
+msgstr "Taille du logo (0 = pas de logo, redémarrage requis) :"
+
+#: dialogs.c:920
+msgid "Line Gap (-1 = default for board size):"
+msgstr "Ligne d'ouverture (-1 = taille de plateau par défaut) :"
+
+#: dialogs.c:921
+msgid "Use Board Textures"
+msgstr "Utiliser les textures de l'échiquier"
+
+#: dialogs.c:922
+msgid "Light-Squares Texture File:"
+msgstr "Fichier de texture des cases blanches :"
+
+#: dialogs.c:923
+msgid "Dark-Squares Texture File:"
+msgstr "Fichier de texture des cases noires :"
+
+#: dialogs.c:924
+msgid "Use external piece bitmaps with their own colors"
+msgstr "Utiliser des bitmaps de pièce externes avec leurs propres couleurs"
+
+#: dialogs.c:925
+msgid "Directory with Pieces Images:"
+msgstr "Répertoire contenant les images des pièces :"
+
+#: dialogs.c:996
+msgid "# no themes are defined"
+msgstr "# Aucun thème n'est défini"
+
+#: dialogs.c:1008
+msgid "Board Options"
+msgstr "Options de l'échiquier"
+
+#: dialogs.c:1079 menus.c:654
+msgid "ICS text menu"
+msgstr "Menu texte de l'ICS"
+
+#: dialogs.c:1108
+msgid "clear"
+msgstr "Nettoyer"
+
+#: dialogs.c:1109 dialogs.c:1208
+msgid "save changes"
+msgstr "Sauvegarder les changements"
+
+#: dialogs.c:1207
+msgid "add next move"
+msgstr "Ajouter le prochain mouvement"
+
+#: dialogs.c:1231
+msgid "Edit book"
+msgstr "Éditer la bibliothèque"
+
+#: dialogs.c:1231 menus.c:656
+msgid "Tags"
+msgstr "Étiquettes"
+
+#: dialogs.c:1369
+msgid "ICS input box"
+msgstr "Boîte de saisie ICS"
+
+#: dialogs.c:1401
+msgid "Type a move"
+msgstr "Entrez un mouvement "
+
+#: dialogs.c:1427
+msgid "Engine has no options"
+msgstr "Le moteur n'a aucune option"
+
+#: dialogs.c:1429
+msgid "Engine Settings"
+msgstr "Réglages du moteur"
+
+#: dialogs.c:1454
+msgid "Select engine from list:"
+msgstr "Sélectionnez un moteur dans la liste :"
+
+#: dialogs.c:1457
+msgid "or specify one below:"
+msgstr "ou indiquez en un ci-dessous :"
+
+#: dialogs.c:1458
+msgid "Nickname (optional):"
+msgstr "Pseudonyme (optionnel) :"
+
+#: dialogs.c:1459
+msgid "Use nickname in PGN player tags of engine-engine games"
+msgstr "Utiliser le pseudonyme dans les étiquettes du joueur en PGN des jeux moteur-moteur"
+
+#: dialogs.c:1460
+msgid "Engine Directory:"
+msgstr "Répertoire du moteur :"
+
+#: dialogs.c:1461
+msgid "Engine Command:"
+msgstr "Commande du moteur : "
+
+#: dialogs.c:1462
+msgid "(Directory will be derived from engine path when empty)"
+msgstr "(Le répertoire sera dérivé du chemin du moteur s'il est vide)"
+
+#: dialogs.c:1463
+msgid "UCI"
+msgstr "UCI"
+
+#: dialogs.c:1464
+msgid "WB protocol v1 (do not wait for engine features)"
+msgstr "Protocole WB v1 (ne vous attendez pas à des fonctionnalités du moteur)"
+
+#: dialogs.c:1465
+msgid "Must not use GUI book"
+msgstr "Vous ne devez pas utiliser la bibliothèque graphique"
+
+#: dialogs.c:1466
+msgid "Add this engine to the list"
+msgstr "Ajouter ce moteur à la liste "
+
+#: dialogs.c:1467
+msgid "Force current variant with this engine"
+msgstr "Forcer la variante courante avec ce moteur"
+
+#: dialogs.c:1517
+msgid "Load first engine"
+msgstr "Charger le premier moteur"
+
+#: dialogs.c:1523
+msgid "Load second engine"
+msgstr "Charger le second moteur"
+
+#: dialogs.c:1546
+msgid "shuffle"
+msgstr "Brassage"
+
+#: dialogs.c:1547
+msgid "Fischer castling"
+msgstr "Roque de Fischer"
+
+#: dialogs.c:1548
+msgid "Start-position number:"
+msgstr "Numéro de la position de départ : "
+
+#: dialogs.c:1549
+msgid "randomize"
+msgstr "Randomiser"
+
+#: dialogs.c:1550
+msgid "pick fixed"
+msgstr "Choix truqué"
+
+#: dialogs.c:1567
+msgid "New Shuffle Game"
+msgstr "Nouveau Jeu Aléatoire"
+
+#: dialogs.c:1586
+msgid "classical"
+msgstr "Classique"
+
+#: dialogs.c:1587
+msgid "incremental"
+msgstr "Incrémental"
+
+#: dialogs.c:1588
+msgid "fixed max"
+msgstr "Maximum fixé"
+
+#: dialogs.c:1589
+msgid "Moves per session:"
+msgstr "Mouvements par session :"
+
+#: dialogs.c:1590
+msgid "Initial time (min):"
+msgstr "Temps initial (min) :"
+
+#: dialogs.c:1591
+msgid "Increment or max (sec/move):"
+msgstr "Incrémentation ou maximum (sec/mouvement) :"
+
+#: dialogs.c:1592
+msgid "Time-Odds factors:"
+msgstr "Facteurs temps d'handicap : "
+
+#: dialogs.c:1593
+msgid "Engine #1"
+msgstr "Moteur #1"
+
+#: dialogs.c:1594
+msgid "Engine #2 / Human"
+msgstr "Moteur #2 / Humain"
+
+#: dialogs.c:1634 dialogs.c:1637 dialogs.c:1642 dialogs.c:1643
+#: gtk/xoptions.c:184
+msgid "Unused"
+msgstr "Non utilisé"
+
+#: dialogs.c:1684
+msgid "Error writing to chess program"
+msgstr "Erreur lors de l'écriture dans le programme d'échecs"
+
+#: dialogs.c:1752 xaw/xoptions.c:1318
+msgid "Cancel"
+msgstr "Annuler"
+
+#: dialogs.c:1757 dialogs.c:2354 dialogs.c:2358
+msgid "King"
+msgstr "Roi "
+
+#: dialogs.c:1760
+msgid "Captain"
+msgstr "Capitaine "
+
+#: dialogs.c:1761
+msgid "Lieutenant"
+msgstr "Lieutenant"
+
+#: dialogs.c:1762
+msgid "General"
+msgstr "Général"
+
+#: dialogs.c:1763
+msgid "Warlord"
+msgstr "Seigneur de guerre"
+
+#: dialogs.c:1765 dialogs.c:2353 dialogs.c:2357 dialogs.c:2376
+msgid "Knight"
+msgstr "Cavalier"
+
+#: dialogs.c:1766 dialogs.c:2353 dialogs.c:2357 dialogs.c:2376
+msgid "Bishop"
+msgstr "Fou"
+
+#: dialogs.c:1767 dialogs.c:2353 dialogs.c:2357 dialogs.c:2376
+msgid "Rook"
+msgstr "Tour"
+
+#: dialogs.c:1771 dialogs.c:2355 dialogs.c:2359
+msgid "Archbishop"
+msgstr "Archevêque "
+
+#: dialogs.c:1772 dialogs.c:2355 dialogs.c:2359
+msgid "Chancellor"
+msgstr "Chancelier "
+
+#: dialogs.c:1774 dialogs.c:2354 dialogs.c:2358 dialogs.c:2376
+msgid "Queen"
+msgstr "Reine"
+
+#: dialogs.c:1776
+msgid "Lion"
+msgstr "Lion"
+
+#: dialogs.c:1780
+msgid "Defer"
+msgstr "Ajourner"
+
+#: dialogs.c:1781 dialogs.c:2355 dialogs.c:2359
+msgid "Promote"
+msgstr "Promouvoir "
+
+#: dialogs.c:1838
+msgid "Chats:"
+msgstr "Tchats :  "
+
+#: dialogs.c:1839 dialogs.c:1840 dialogs.c:1841 dialogs.c:1842 dialogs.c:1843
+#: dialogs.c:1941 dialogs.c:2001 dialogs.c:2033
+msgid "New Chat"
+msgstr "Nouveau tchat"
+
+#: dialogs.c:1846
+msgid "Chat partner:"
+msgstr "Partenaire de tchat :"
+
+#: dialogs.c:1847
+msgid "End Chat"
+msgstr "Terminer le tchat"
+
+#: dialogs.c:1848
+msgid "Hide"
+msgstr "Cacher"
+
+#: dialogs.c:2058
+msgid "ICS Interaction"
+msgstr "Interaction ICS"
+
+#: dialogs.c:2125
+msgid "factory"
+msgstr "Fabrique"
+
+#: dialogs.c:2126
+msgid "up"
+msgstr "Haut"
+
+#: dialogs.c:2127
+msgid "down"
+msgstr "Bas"
+
+#: dialogs.c:2145
+msgid "No tag selected"
+msgstr "Aucune étiquette n'est sélectionnée"
+
+#: dialogs.c:2176
+msgid "Game-list options"
+msgstr "Options de la liste de jeu"
+
+#: dialogs.c:2252 dialogs.c:2266
+msgid "Error"
+msgstr "Erreur"
+
+#: dialogs.c:2289
+msgid "Fatal Error"
+msgstr "Erreur fatale"
+
+#: dialogs.c:2289
+msgid "Exiting"
+msgstr "En cours de fermeture"
+
+#: dialogs.c:2300
+msgid "Information"
+msgstr "Information"
+
+#: dialogs.c:2307
+msgid "Note"
+msgstr "Note"
+
+#: dialogs.c:2353 dialogs.c:2637 dialogs.c:2640
+msgid "White"
+msgstr "Blancs"
+
+#: dialogs.c:2353 dialogs.c:2357 dialogs.c:2376
+msgid "Pawn"
+msgstr "Pion"
+
+#: dialogs.c:2354 dialogs.c:2358
+msgid "Elephant"
+msgstr "Éléphant"
+
+#: dialogs.c:2354 dialogs.c:2358
+msgid "Cannon"
+msgstr "Canon "
+
+#: dialogs.c:2355 dialogs.c:2359
+msgid "Demote"
+msgstr "Rétrograder"
+
+#: dialogs.c:2356 dialogs.c:2360
+msgid "Empty square"
+msgstr "Case vide"
+
+#: dialogs.c:2356 dialogs.c:2360
+msgid "Clear board"
+msgstr "Vider l'échiquier"
+
+#: dialogs.c:2357 dialogs.c:2649 dialogs.c:2652
+msgid "Black"
+msgstr "Noirs"
+
+#: dialogs.c:2456 menus.c:809
+msgid "File"
+msgstr "Fichier"
+
+#: dialogs.c:2457 menus.c:810
+msgid "Edit"
+msgstr "Éditer"
+
+#: dialogs.c:2458 menus.c:811
+msgid "View"
+msgstr "Vue"
+
+#: dialogs.c:2459 menus.c:812
+msgid "Mode"
+msgstr "Mode"
+
+#: dialogs.c:2460 menus.c:813
+msgid "Action"
+msgstr "Action "
+
+#: dialogs.c:2461 menus.c:814
+msgid "Engine"
+msgstr "Moteur"
+
+#: dialogs.c:2462 menus.c:815
+msgid "Options"
+msgstr "Options "
+
+#: dialogs.c:2463 menus.c:816
+msgid "Help"
+msgstr "Aide"
+
+#: dialogs.c:2473
+msgid "<<"
+msgstr "<<"
+
+#: dialogs.c:2474
+msgid "<"
+msgstr "<"
+
+#: dialogs.c:2476
+msgid ">"
+msgstr ">"
+
+#: dialogs.c:2477
+msgid ">>"
+msgstr ">>"
+
+#: dialogs.c:2755
+msgid "Directories:"
+msgstr "Répertoires : "
+
+#: dialogs.c:2756
+msgid "Files:"
+msgstr "Fichiers :"
+
+#: dialogs.c:2757
+msgid "by name"
+msgstr "Par nom"
+
+#: dialogs.c:2758
+msgid "by type"
+msgstr "Par type"
+
+#: dialogs.c:2761
+msgid "Filename:"
+msgstr "Nom du fichier : "
+
+#: dialogs.c:2762
+msgid "New directory"
+msgstr "Nouveau répertoire"
+
+#: dialogs.c:2763
+msgid "File type:"
+msgstr "Type du fichier : "
+
+#: dialogs.c:2838
+msgid "Contents of"
+msgstr "Sommaire de "
+
+#: dialogs.c:2864
+msgid "  next page"
+msgstr "Page suivante"
+
+#: dialogs.c:2881
+msgid "FIRST TYPE DIRECTORY NAME HERE"
+msgstr "TOUT D'ABORD ENTREZ LE NOM DE REPERTOIRE ICI "
+
+#: dialogs.c:2882
+msgid "TRY ANOTHER NAME"
+msgstr "ESSAYEZ UN AUTRE NOM"
+
+#: draw.c:354
+msgid ""
+"No default pieces installed!\n"
+"Select your own using '-pieceImageDirectory'."
+msgstr ""
+"Aucune pièce par défaut n'est installée !\n"
+"Sélectionnez la vôtre en utilisant '-pieceImageDirectory'."
+
+#: engineoutput.c:111 menus.c:650
+#, c-format
+msgid "Engine Output"
+msgstr "Sortie du moteur "
+
+#: engineoutput.c:121
+#, c-format
+msgid "%s (%d reversible ply)"
+msgid_plural "%s (%d reversible plies)"
+msgstr[0] "%s (%d tour réversible)"
+msgstr[1] "%s (%d tours réversibles)"
+
+#: engineoutput.c:552 engineoutput.c:555 nengineoutput.c:82 nengineoutput.c:90
+msgid "NPS"
+msgstr "NPS"
+
+#: gamelist.c:375
+#, c-format
+msgid "Reading game file (%d)"
+msgstr "Lecture du fichier de jeu (%d)"
+
+#: gtk/xboard.c:959 xaw/xboard.c:1071
+#, c-format
+msgid "%s: can't cd to CHESSDIR: "
+msgstr "%s : impossible d'accéder au dossier CHESSDIR :"
+
+#: gtk/xboard.c:968 xaw/xboard.c:1080
+#, c-format
+msgid "Failed to open file '%s'\n"
+msgstr "Échec dans l'ouverture du fichier '%s'\n"
+
+#: gtk/xboard.c:983 xaw/xboard.c:1089
+msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size"
+msgstr "Recompilez avec BOARD_RANKS ou BOARD_FILES plus grand pour supporter cette taille"
+
+#: gtk/xboard.c:1002 xaw/xboard.c:1121
+#, c-format
+msgid "%s: bad boardSize syntax %s\n"
+msgstr "%s : Mauvaise syntaxe %s pour boardSize\n"
+
+#: gtk/xboard.c:1045 xaw/xboard.c:1160
+#, c-format
+msgid "%s: unrecognized boardSize name %s\n"
+msgstr "%s : Nom %s de la boardSize non reconnu\n"
+
+#: gtk/xboard.c:1084 xaw/xboard.c:1197
+#, c-format
+msgid "%s: too few colors available; trying monochrome mode\n"
+msgstr "%s: Trop peu de couleurs sont disponibles; tentative du mode monochrome\n"
+
+#: gtk/xboard.c:1395 xaw/xboard.c:1487
+#, c-format
+msgid "Unable to create font set for %s.\n"
+msgstr "Incapable de créer l'ensemble des polices pour %s.\n"
+
+#: gtk/xboard.c:1420 xaw/xboard.c:1510
+#, c-format
+msgid "%s: no fonts match pattern %s\n"
+msgstr "%s : aucune police ne correspond au motif %s\n"
+
+#: gtk/xboard.c:1872 xaw/xboard.c:2000
+msgid "Can't open temp file"
+msgstr "Impossible d'ouvrir le fichier temporaire"
+
+#: gtk/xboard.c:2346
+msgid "Failed to open file"
+msgstr "Échec lors de l'ouverture du fichier"
+
+#: menus.c:134
+msgid "Load game file name?"
+msgstr "Charger le nom du fichier de jeu ?"
+
+#: menus.c:179
+msgid "Load position file name?"
+msgstr "Charger la position du fichier de jeu ?"
+
+#: menus.c:185 menus.c:590
+msgid "Save game file name?"
+msgstr "Sauvegarder le nom du fichier de jeu ?"
+
+#: menus.c:194
+msgid "Save position file name?"
+msgstr "Sauvegarder la position du fichier de jeu ?"
+
+#: menus.c:362
+msgid " (with Zippy code)"
+msgstr "(avec le code)"
+
+#: menus.c:367
+#, c-format
+msgid ""
+"%s%s\n"
+"\n"
+"Copyright 1991 Digital Equipment Corporation\n"
+"Enhancements Copyright 1992-2014 Free Software Foundation\n"
+"Enhancements Copyright 2005 Alessandro Scotti\n"
+"\n"
+"%s is free software and carries NO WARRANTY;see the file COPYING for more information.\n"
+"The GTK build of this version is experimental and unstable\n"
+"\n"
+"Visit XBoard on the web at: http://www.gnu.org/software/xboard/\n"
+"Check out the newest features at: http://www.gnu.org/software/xboard/whats_new.html\n"
+"\n"
+"Report bugs via email at: <bug-xboard@gnu.org>\n"
+"\n"
+msgstr ""
+"%s%s\n"
+"\n"
+"Copyright 1991 Digital Equipment Corporation\n"
+"Copyright d'améliorations 1992-2014 Free Software Foundation\n"
+"Copyright d'améliorations 2005 Alessandro Scotti\n"
+"\n"
+"%s est un logiciel gratuit et ne transporte AUCUNE GARANTIE; veuillez vous référer au fichier COPYING pour plus d'informations.\n"
+"La version GTK de cette version est expérimentale et instable\n"
+"\n"
+"Visitez XBoard à l'adresse : http://www.gnu.org/software/xboard/\n"
+"Regardez les dernières fonctionnalités à l'adresse : http://www.gnu.org/software/xboard/whats_new.html\n"
+"\n"
+"Reportez les bogues par mail à l'adresse : <bug-xboard@gnu.org>\n"
+"\n"
+
+#: menus.c:379 menus.c:772
+msgid "About XBoard"
+msgstr "À propos de XBoard"
+
+#: menus.c:601
+msgid "New Game"
+msgstr "Nouveau jeu"
+
+#: menus.c:602
+msgid "New Shuffle Game..."
+msgstr "Nouveau jeu aléatoire..."
+
+#: menus.c:603
+msgid "New Variant..."
+msgstr "Nouvelle variante..."
+
+#: menus.c:605
+msgid "Load Game"
+msgstr "Charger une partie"
+
+#: menus.c:606
+msgid "Load Position"
+msgstr "Charger une position"
+
+#: menus.c:607
+msgid "Next Position"
+msgstr "Position suivante"
+
+#: menus.c:608
+msgid "Prev Position"
+msgstr "Position précédente"
+
+#: menus.c:610
+msgid "Save Game"
+msgstr "Sauvegarder la partie"
+
+#: menus.c:611
+msgid "Save Position"
+msgstr "Sauvegarder la position"
+
+#: menus.c:612
+msgid "Save Selected Games"
+msgstr "Sauvegarder les parties sélectionnées"
+
+#: menus.c:613
+msgid "Save Games as Book"
+msgstr "Sauvegarder les parties comme bibliothèques"
+
+#: menus.c:615
+msgid "Mail Move"
+msgstr "Envoyer par mail le mouvement"
+
+#: menus.c:616
+msgid "Reload CMail Message"
+msgstr "Recharger le message CMail"
+
+#: menus.c:618
+msgid "Quit "
+msgstr "Quitter"
+
+#: menus.c:623
+msgid "Copy Game"
+msgstr "Copier la partie"
+
+#: menus.c:624
+msgid "Copy Position"
+msgstr "Copier la position"
+
+#: menus.c:625
+msgid "Copy Game List"
+msgstr "Copier la liste des parties"
+
+#: menus.c:627
+msgid "Paste Game"
+msgstr "Coller le jeu"
+
+#: menus.c:628
+msgid "Paste Position"
+msgstr "Coller la position"
+
+#: menus.c:630 menus.c:672
+msgid "Edit Game"
+msgstr "Éditer la partie"
+
+#: menus.c:631 menus.c:673
+msgid "Edit Position"
+msgstr "Éditer la position "
+
+#: menus.c:632
+msgid "Edit Tags"
+msgstr "Éditer les étiquettes"
+
+#: menus.c:633
+msgid "Edit Comment"
+msgstr "Éditer le commentaire"
+
+#: menus.c:634
+msgid "Edit Book"
+msgstr "Éditer la bibliothèque"
+
+#: menus.c:636
+msgid "Revert"
+msgstr "Revenir"
+
+#: menus.c:637
+msgid "Annotate"
+msgstr "Annoter"
+
+#: menus.c:638
+msgid "Truncate Game"
+msgstr "Tronquer le jeu"
+
+#: menus.c:640
+msgid "Backward"
+msgstr "En arrière"
+
+#: menus.c:641
+msgid "Forward"
+msgstr "En avant"
+
+#: menus.c:642
+msgid "Back to Start"
+msgstr "Retour au début"
+
+#: menus.c:643
+msgid "Forward to End"
+msgstr "Avancer vers la fin"
+
+#: menus.c:648
+msgid "Flip View"
+msgstr "Renverser la vue"
+
+#: menus.c:651
+msgid "Move History"
+msgstr "Historique des mouvements "
+
+#: menus.c:652
+msgid "Evaluation Graph"
+msgstr "Graphique des évaluations"
+
+#: menus.c:653
+msgid "Game List"
+msgstr "Liste des parties"
+
+#: menus.c:657
+msgid "Comments"
+msgstr "Commentaires"
+
+#: menus.c:658
+msgid "ICS Input Box"
+msgstr "Boe de dialogue ICS"
+
+#: menus.c:659
+msgid "ICS/Chat Console"
+msgstr "ICS / Console de tchat"
+
+#: menus.c:661
+msgid "Board..."
+msgstr "Échiquier..."
+
+#: menus.c:662
+msgid "Game List Tags..."
+msgstr "Étiquettes de la liste des parties..."
+
+#: menus.c:667
+msgid "Machine White"
+msgstr "Blancs Machine"
+
+#: menus.c:668
+msgid "Machine Black"
+msgstr "Noirs Machine"
+
+#: menus.c:669
+msgid "Two Machines"
+msgstr "Deux machines"
+
+#: menus.c:670
+msgid "Analysis Mode"
+msgstr "Mode d'analyse"
+
+#: menus.c:671
+msgid "Analyze Game"
+msgstr "Analyser le jeu"
+
+#: menus.c:674
+msgid "Training"
+msgstr "Entraînement"
+
+#: menus.c:675
+msgid "ICS Client"
+msgstr "Client ICS"
+
+#: menus.c:677
+msgid "Machine Match"
+msgstr "Match de machines"
+
+#: menus.c:678
+msgid "Pause"
+msgstr "Pause"
+
+#: menus.c:683
+msgid "Accept"
+msgstr "Accepter"
+
+#: menus.c:684
+msgid "Decline"
+msgstr "Décliner"
+
+#: menus.c:685
+msgid "Rematch"
+msgstr "Nouvelle partie"
+
+#: menus.c:687
+msgid "Call Flag"
+msgstr "Demander un drapeau"
+
+#: menus.c:688
+msgid "Draw"
+msgstr "Match nul"
+
+#: menus.c:689
+msgid "Adjourn"
+msgstr "Ajourner"
+
+#: menus.c:690
+msgid "Abort"
+msgstr "Annuler"
+
+#: menus.c:691
+msgid "Resign"
+msgstr "Abandonner"
+
+#: menus.c:693
+msgid "Stop Observing"
+msgstr "Arrêter d'observer"
+
+#: menus.c:694
+msgid "Stop Examining"
+msgstr "Arrêter d'examiner"
+
+#: menus.c:695
+msgid "Upload to Examine"
+msgstr "Télécharger pour examiner"
+
+#: menus.c:697
+msgid "Adjudicate to White"
+msgstr "Arbitrer pour les Blancs"
+
+#: menus.c:698
+msgid "Adjudicate to Black"
+msgstr "Arbitrer pour les Noirs"
+
+#: menus.c:699
+msgid "Adjudicate Draw"
+msgstr "Arbitrer match nul"
+
+#: menus.c:704
+msgid "Edit Engine List..."
+msgstr "Éditer la liste des moteurs..."
+
+#: menus.c:706
+msgid "Load New 1st Engine..."
+msgstr "Charger un nouveau premier moteur... "
+
+#: menus.c:707
+msgid "Load New 2nd Engine..."
+msgstr "Charger un nouveau second moteur..."
+
+#: menus.c:709
+msgid "Engine #1 Settings..."
+msgstr "Réglages du moteur # 1..."
+
+#: menus.c:710
+msgid "Engine #2 Settings..."
+msgstr "Réglages du moteur # 2..."
+
+#: menus.c:712
+msgid "Hint"
+msgstr "Indice"
+
+#: menus.c:713
+msgid "Book"
+msgstr "Bibliothèque"
+
+#: menus.c:715
+msgid "Move Now"
+msgstr "Bouger maintenant"
+
+#: menus.c:716
+msgid "Retract Move"
+msgstr "Rétracter le mouvement "
+
+#: menus.c:722
+msgid "General..."
+msgstr "Général..."
+
+#: menus.c:724
+msgid "Time Control..."
+msgstr "Contrôle du temps"
+
+#: menus.c:725
+msgid "Common Engine..."
+msgstr "Moteur commun..."
+
+#: menus.c:726
+msgid "Adjudications..."
+msgstr "Décisions..."
+
+#: menus.c:727
+msgid "ICS..."
+msgstr "ICS..."
+
+#: menus.c:728
+msgid "Tournament..."
+msgstr "Tournoi..."
+
+#: menus.c:729
+msgid "Load Game..."
+msgstr "Charger le jeu..."
+
+#: menus.c:730
+msgid "Save Game..."
+msgstr "Sauvegarder le jeu..."
+
+#: menus.c:731
+msgid "Game List..."
+msgstr "Liste des jeux..."
+
+#: menus.c:732
+msgid "Sounds..."
+msgstr "Sons..."
+
+#: menus.c:735
+msgid "Always Queen"
+msgstr "Toujours Reine"
+
+#: menus.c:741
+msgid "Flash Moves"
+msgstr "Mouvements rapides"
+
+#: menus.c:743
+msgid "Highlight Dragging"
+msgstr "Surligner la traînée"
+
+#: menus.c:746
+msgid "Highlight With Arrow"
+msgstr "Surligner avec une flèche"
+
+#: menus.c:747
+msgid "Move Sound"
+msgstr "Son du mouvement "
+
+#: menus.c:749
+msgid "Periodic Updates"
+msgstr "Mises à jour périodiques"
+
+#: menus.c:751
+msgid "Popup Exit Message"
+msgstr "Afficher un message de sortie"
+
+#: menus.c:753
+msgid "Show Coords"
+msgstr "Montrer les coordonnées"
+
+#: menus.c:754
+msgid "Hide Thinking"
+msgstr "Cacher l'opinion"
+
+#: menus.c:758
+msgid "Save Settings Now"
+msgstr "Sauvegarder les réglages maintenant"
+
+#: menus.c:759
+msgid "Save Settings on Exit"
+msgstr "Sauvegarder les réglages à la sortie"
+
+#: menus.c:764
+msgid "Info XBoard"
+msgstr "Informations XBoard"
+
+#: menus.c:765
+msgid "Man XBoard"
+msgstr "Manuel XBoard"
+
+#: menus.c:767
+msgid "XBoard Home Page"
+msgstr "Page d'Accueil XBoard"
+
+#: menus.c:768
+msgid "On-line User Guide"
+msgstr "Guide Utilisateur en ligne"
+
+#: menus.c:769
+msgid "Development News"
+msgstr "Nouvelles de développement "
+
+#: menus.c:770
+msgid "e-Mail Bug Report"
+msgstr "Reporter un bogue par mail "
+
+#: nengineoutput.c:78 nengineoutput.c:86
+msgid "engine name"
+msgstr "Nom du moteur"
+
+#. TRANSLATORS: noun, as in "the move Nf3"
+#: nengineoutput.c:81 nengineoutput.c:89
+msgid "move"
+msgstr "Mouvement "
+
+#: nengineoutput.c:155
+msgid "Engine output"
+msgstr "Sortie du moteur"
+
+#: nengineoutput.c:159
+msgid ""
+"Mismatch of STRIDE in nengineoutput.c\n"
+"Change and recompile!"
+msgstr ""
+"Mauvaise association de STRIDE dans nengineoutput.c\n"
+"Modifiez et recompilez !"
+
+#: nevalgraph.c:68
+msgid "Evaluation graph"
+msgstr "Graphique des évaluations"
+
+#: nevalgraph.c:68
+msgid "Blunder graph"
+msgstr "Graphique des gaffes"
+
+#: nevalgraph.c:106
+msgid "Blunder"
+msgstr "Gaffe"
+
+#: nevalgraph.c:106
+msgid "Eval"
+msgstr "Évaluer"
+
+#: ngamelist.c:87
+msgid "find position"
+msgstr "Trouver la position"
+
+#: ngamelist.c:88
+msgid "narrow"
+msgstr "Restreindre"
+
+#: ngamelist.c:89
+msgid "thresholds"
+msgstr "Seuils"
+
+#: ngamelist.c:90
+msgid "tags"
+msgstr "Étiquettes"
+
+#: ngamelist.c:91
+msgid "next"
+msgstr "Suivant"
+
+#: ngamelist.c:92
+msgid "close"
+msgstr "Fermer"
+
+#: ngamelist.c:116
+msgid "No game selected"
+msgstr "Aucun jeu n'est sélectionné"
+
+#: ngamelist.c:122
+msgid "Can't go forward any further"
+msgstr "Ne peut pas avancer plus loin "
+
+#: ngamelist.c:192
+#, c-format
+msgid "Scanning through games (%d)"
+msgstr "Balayage parmi les parties (%d)"
+
+#: ngamelist.c:211
+msgid "previous page"
+msgstr "Page précédente"
+
+#: ngamelist.c:214
+msgid "next page"
+msgstr "Page suivante"
+
+#: ngamelist.c:217
+msgid "no games matched your request"
+msgstr "Aucun jeu n'a correspondu à votre requête"
+
+#: ngamelist.c:219
+#, c-format
+msgid "%s - %d/%d games (%d-%d-%d)"
+msgstr "jeux %s - %d/%d (%d-%d-%d)"
+
+#: ngamelist.c:276
+msgid "There is no game list"
+msgstr "Il n'y a aucun jeu dans la liste"
+
+#: nhistory.c:109
+msgid "Move list"
+msgstr "Liste des mouvements"
+
+#: usystem.c:222
+#, c-format
+msgid "%s: unrecognized color %s\n"
+msgstr "%s : couleur %s non reconnue\n"
+
+#: usystem.c:230
+#, c-format
+msgid "%s: can't parse foreground color in '%s'\n"
+msgstr "%s : impossible d'analyser la couleur de premier plan dans '%s'\n"
+
+#: usystem.c:259
+#, c-format
+msgid "%s: can't parse color names; disabling colorization\n"
+msgstr "%s : impossible d'analyser les noms de couleurs; désactivation de la colorisation\n"
+
+#: usystem.c:377
+#, c-format
+msgid "ERROR: Unknown user %s (in path %s)\n"
+msgstr "ERREUR : Utilisateur %s inconnu (dans le chemin %s)\n"
+
+#: usystem.c:560
+msgid "Socket support is not configured in"
+msgstr "Le support socket n'est pas configuré"
+
+#: usystem.c:649
+msgid "internal rcmd not implemented for Unix"
+msgstr "rcmd interne non implémenté pour Unix"
+
+#: xaw/xboard.c:1203
+#, c-format
+msgid "white pixel = 0x%lx, black pixel = 0x%lx\n"
+msgstr "Pixel blanc = 0x%lx, pixel noir = 0x%lx\n"
+
+#: xaw/xoptions.c:362 xaw/xoptions.c:1066
+msgid "browse"
+msgstr "Naviguer"
+
+#: xaw/xoptions.c:428 xaw/xoptions.c:429
+msgid "Ctrl"
+msgstr "Ctrl"
+
+#: xaw/xoptions.c:434 xaw/xoptions.c:435
+msgid "Alt"
+msgstr "Alt"
+
+#: xaw/xoptions.c:440 xaw/xoptions.c:441
+msgid "Shift"
+msgstr "Shift"
+
+#: xaw/xoptions.c:1314
+msgid "OK"
+msgstr "OK"
index 75b8a7b..c27b5cc 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNU xboard master-20110411\n"
 "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n"
-"POT-Creation-Date: 2014-10-17 21:25-0700\n"
+"POT-Creation-Date: 2014-10-24 08:20-0700\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,37 +18,37 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: args.h:839
+#: args.h:840
 #, c-format
 msgid "%s in settings file\n"
 msgstr ""
 
-#: args.h:873
+#: args.h:874
 #, c-format
 msgid "Bad integer value %s"
 msgstr ""
 
-#: args.h:979 args.h:1240
+#: args.h:980 args.h:1241
 #, c-format
 msgid "Unrecognized argument %s"
 msgstr ""
 
-#: args.h:1010
+#: args.h:1011
 #, c-format
 msgid "No value provided for argument %s"
 msgstr ""
 
-#: args.h:1070
+#: args.h:1071
 #, c-format
 msgid "Incomplete \\ escape in value for %s"
 msgstr ""
 
-#: args.h:1181
+#: args.h:1182
 #, c-format
 msgid "Failed to open indirection file %s"
 msgstr ""
 
-#: args.h:1198
+#: args.h:1199
 #, c-format
 msgid "Unrecognized boolean argument value %s"
 msgstr ""
@@ -2169,7 +2169,7 @@ msgstr "Informazione"
 msgid "Note"
 msgstr "Nota"
 
-#: dialogs.c:2370 dialogs.c:2655 dialogs.c:2658
+#: dialogs.c:2370 dialogs.c:2656 dialogs.c:2659
 msgid "White"
 msgstr "Bianco"
 
@@ -2197,7 +2197,7 @@ msgstr "Casa vuota"
 msgid "Clear board"
 msgstr "Svuota scacchiera"
 
-#: dialogs.c:2374 dialogs.c:2667 dialogs.c:2670
+#: dialogs.c:2374 dialogs.c:2668 dialogs.c:2671
 msgid "Black"
 msgstr "Nero"
 
@@ -2249,51 +2249,51 @@ msgstr ""
 msgid ">>"
 msgstr ""
 
-#: dialogs.c:2773
+#: dialogs.c:2774
 msgid "Directories:"
 msgstr ""
 
-#: dialogs.c:2774
+#: dialogs.c:2775
 #, fuzzy
 msgid "Files:"
 msgstr "File"
 
-#: dialogs.c:2775
+#: dialogs.c:2776
 msgid "by name"
 msgstr ""
 
-#: dialogs.c:2776
+#: dialogs.c:2777
 msgid "by type"
 msgstr ""
 
-#: dialogs.c:2779
+#: dialogs.c:2780
 #, fuzzy
 msgid "Filename:"
 msgstr "Filtro"
 
-#: dialogs.c:2780
+#: dialogs.c:2781
 msgid "New directory"
 msgstr ""
 
-#: dialogs.c:2781
+#: dialogs.c:2782
 #, fuzzy
 msgid "File type:"
 msgstr "Filtro"
 
-#: dialogs.c:2856
+#: dialogs.c:2857
 #, fuzzy
 msgid "Contents of"
 msgstr "Commenti"
 
-#: dialogs.c:2882
+#: dialogs.c:2883
 msgid "  next page"
 msgstr ""
 
-#: dialogs.c:2899
+#: dialogs.c:2900
 msgid "FIRST TYPE DIRECTORY NAME HERE"
 msgstr ""
 
-#: dialogs.c:2900
+#: dialogs.c:2901
 msgid "TRY ANOTHER NAME"
 msgstr ""
 
@@ -2324,50 +2324,50 @@ msgstr ""
 msgid "Reading game file (%d)"
 msgstr "File partita non riconosciuto"
 
-#: gtk/xboard.c:972 xaw/xboard.c:1072
+#: gtk/xboard.c:975 xaw/xboard.c:1072
 #, c-format
 msgid "%s: can't cd to CHESSDIR: "
 msgstr ""
 
-#: gtk/xboard.c:981 xaw/xboard.c:1081
+#: gtk/xboard.c:984 xaw/xboard.c:1081
 #, c-format
 msgid "Failed to open file '%s'\n"
 msgstr ""
 
-#: gtk/xboard.c:996 xaw/xboard.c:1090
+#: gtk/xboard.c:999 xaw/xboard.c:1090
 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size"
 msgstr ""
 
-#: gtk/xboard.c:1015 xaw/xboard.c:1122
+#: gtk/xboard.c:1018 xaw/xboard.c:1122
 #, c-format
 msgid "%s: bad boardSize syntax %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1058 xaw/xboard.c:1161
+#: gtk/xboard.c:1061 xaw/xboard.c:1161
 #, c-format
 msgid "%s: unrecognized boardSize name %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1097 xaw/xboard.c:1198
+#: gtk/xboard.c:1100 xaw/xboard.c:1198
 #, c-format
 msgid "%s: too few colors available; trying monochrome mode\n"
 msgstr ""
 
-#: gtk/xboard.c:1411 xaw/xboard.c:1490
+#: gtk/xboard.c:1414 xaw/xboard.c:1490
 #, c-format
 msgid "Unable to create font set for %s.\n"
 msgstr ""
 
-#: gtk/xboard.c:1436 xaw/xboard.c:1513
+#: gtk/xboard.c:1439 xaw/xboard.c:1513
 #, c-format
 msgid "%s: no fonts match pattern %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1888 xaw/xboard.c:2003
+#: gtk/xboard.c:1900 xaw/xboard.c:2003
 msgid "Can't open temp file"
 msgstr ""
 
-#: gtk/xboard.c:2371
+#: gtk/xboard.c:2383
 #, fuzzy
 msgid "Failed to open file"
 msgstr "Impossibile aprire l'applicazione cmail"
index 9ba581e..c69a7af 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -1,16 +1,16 @@
 # Dutch translations for GNU XBoard.
-# Copyright (C) 2014 Free Software Foundation, Inc.
+# Copyright (C) 2015 Free Software Foundation, Inc.
 # This file is distributed under the same license as the xboard package.
 #
 # "She makes her living brewing coffee for strangers..."
 #
-# Benno Schulenberg <benno@vertaalt.nl>, 2013, 2014.
+# Benno Schulenberg <benno@vertaalt.nl>, 2013, 2014, 2015.
 msgid ""
 msgstr ""
-"Project-Id-Version: GNU xboard 4.8.0-pre1\n"
+"Project-Id-Version: GNU xboard 4.8.0\n"
 "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n"
-"POT-Creation-Date: 2014-10-17 21:25-0700\n"
-"PO-Revision-Date: 2014-10-02 10:54+0200\n"
+"POT-Creation-Date: 2014-10-24 08:20-0700\n"
+"PO-Revision-Date: 2015-04-27 20:38+0200\n"
 "Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n"
 "Language-Team: Dutch <vertaling@vrijschrift.org>\n"
 "Language: nl\n"
@@ -20,37 +20,37 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Lokalize 1.0\n"
 
-#: args.h:839
+#: args.h:840
 #, c-format
 msgid "%s in settings file\n"
 msgstr "%s in instellingenbestand\n"
 
-#: args.h:873
+#: args.h:874
 #, c-format
 msgid "Bad integer value %s"
 msgstr "Ongeldig geheel getal: %s"
 
-#: args.h:979 args.h:1240
+#: args.h:980 args.h:1241
 #, c-format
 msgid "Unrecognized argument %s"
 msgstr "Niet-herkend argument: %s"
 
-#: args.h:1010
+#: args.h:1011
 #, c-format
 msgid "No value provided for argument %s"
 msgstr "Geen waarde gegeven voor argument %s"
 
-#: args.h:1070
+#: args.h:1071
 #, c-format
 msgid "Incomplete \\ escape in value for %s"
 msgstr "Onvolledige \\-stuurcode in waarde voor %s"
 
-#: args.h:1181
+#: args.h:1182
 #, c-format
 msgid "Failed to open indirection file %s"
 msgstr "Kan indirectiebestand %s niet openen"
 
-#: args.h:1198
+#: args.h:1199
 #, c-format
 msgid "Unrecognized boolean argument value %s"
 msgstr "Niet-herkende booleaanse waarde: %s"
@@ -1010,7 +1010,7 @@ msgstr "Variatiebomen inschakelen"
 
 #: dialogs.c:412
 msgid "Headers in Engine Output Window"
-msgstr ""
+msgstr "Kopregels in uitvoervenster van automaat"
 
 #: dialogs.c:413
 msgid "Hide Thinking from Human"
@@ -1034,7 +1034,7 @@ msgstr "Periodieke updates (in analysemodus)"
 
 #: dialogs.c:419
 msgid "Play Move(s) of Clicked PV (Analysis)"
-msgstr ""
+msgstr "Zet(ten) spelen van aangeklikte PV (Analyse)"
 
 #: dialogs.c:420 dialogs.c:620 menus.c:750
 msgid "Ponder Next Move"
@@ -1062,7 +1062,7 @@ msgstr "Doelvelden tonen"
 
 #: dialogs.c:426
 msgid "Sticky Windows"
-msgstr ""
+msgstr "Kleverige vensters"
 
 #: dialogs.c:427 menus.c:755
 msgid "Test Legality"
@@ -1171,7 +1171,7 @@ msgstr ""
 
 #: dialogs.c:473
 msgid "ASEAN"
-msgstr ""
+msgstr "ASEAN"
 
 #: dialogs.c:474
 msgid "Great Shatranj (10x8)"
@@ -1227,7 +1227,7 @@ msgstr "Grand (10x10)"
 
 #: dialogs.c:487
 msgid "losers"
-msgstr "verliezers"
+msgstr "Losers"
 
 #: dialogs.c:488
 msgid "shogi (9x9)"
@@ -1422,7 +1422,7 @@ msgstr "Zoekgrafiek vanzelf verversen"
 
 #: dialogs.c:688
 msgid "Auto-InputBox PopUp"
-msgstr ""
+msgstr "Invoervak vanzelf tonen"
 
 #: dialogs.c:689
 msgid "Quit after game"
@@ -1450,11 +1450,11 @@ msgstr "Eerste zet van zwart:"
 
 #: dialogs.c:696
 msgid "Alarm"
-msgstr ""
+msgstr "Wekker"
 
 #: dialogs.c:697
 msgid "Alarm Time (msec):"
-msgstr ""
+msgstr "Wektijd (msec):"
 
 #: dialogs.c:699
 msgid "Colorize Messages"
@@ -1474,7 +1474,7 @@ msgstr "Kanaal-1-tekstkleuren:"
 
 #: dialogs.c:703
 msgid "Other Channel Text Colors:"
-msgstr "Anderekanaal-tekstkleuren:"
+msgstr "Anderekanalen-tekstkleuren:"
 
 #: dialogs.c:704
 msgid "Kibitz Text Colors:"
@@ -1482,11 +1482,11 @@ msgstr "Kibitz-tekstkleuren:"
 
 #: dialogs.c:705
 msgid "Tell Text Colors:"
-msgstr ""
+msgstr "Tell-tekstkleuren:"
 
 #: dialogs.c:706
 msgid "Challenge Text Colors:"
-msgstr ""
+msgstr "Uitdagings-tekstkleuren:"
 
 #: dialogs.c:707
 msgid "Request Text Colors:"
@@ -1497,9 +1497,8 @@ msgid "Seek Text Colors:"
 msgstr "Tekstkleuren voor zoeken:"
 
 #: dialogs.c:709
-#, fuzzy
 msgid "Other Text Colors:"
-msgstr "Anderekanaal-tekstkleuren:"
+msgstr "Kleuren voor andere tekst:"
 
 #: dialogs.c:716
 msgid "ICS Options"
@@ -1554,12 +1553,16 @@ msgid ""
 "\n"
 "options to use in game-viewer mode:"
 msgstr ""
+"\n"
+"Te gebruiken opties in viewer-modus:"
 
 #: dialogs.c:743
 msgid ""
 "\n"
 "Thresholds for position filtering in game list:"
 msgstr ""
+"\n"
+"Drempelwaarden voor positiefiltering in partijenlijst:"
 
 #: dialogs.c:744
 msgid "Elo of strongest player at least:"
@@ -1611,11 +1614,11 @@ msgstr "Eindposities opslaan in:"
 
 #: dialogs.c:776
 msgid "PGN Event Header:"
-msgstr ""
+msgstr "PGN-gebeurtenis-kopregel:"
 
 #: dialogs.c:777
 msgid "Old Save Style (as opposed to PGN)"
-msgstr ""
+msgstr "Oude opslagstijl (in plaats van PGN)"
 
 #: dialogs.c:778
 msgid "Include Number Tag in tourney PGN"
@@ -1623,11 +1626,11 @@ msgstr "Nummerlabel in toernooi-PGN opnemen"
 
 #: dialogs.c:779
 msgid "Save Score/Depth Info in PGN"
-msgstr ""
+msgstr "Score-/diepte-informatie opslaan in PGN"
 
 #: dialogs.c:780
 msgid "Save Out-of-Book Info in PGN           "
-msgstr ""
+msgstr "Uit-het-boek-informatie opslaan in PGN "
 
 #: dialogs.c:787
 msgid "Save Game Options"
@@ -1731,11 +1734,11 @@ msgstr "Onafgemaakt:"
 
 #: dialogs.c:843
 msgid "Alarm:"
-msgstr ""
+msgstr "Wekker:"
 
 #: dialogs.c:844
 msgid "Challenge:"
-msgstr ""
+msgstr "Uitdaging:"
 
 #: dialogs.c:846
 msgid "Sounds Directory:"
@@ -1743,11 +1746,11 @@ msgstr "Geluidenmap:"
 
 #: dialogs.c:847
 msgid "Shout:"
-msgstr ""
+msgstr "Shout:"
 
 #: dialogs.c:848
 msgid "S-Shout:"
-msgstr ""
+msgstr "S-Shout:"
 
 #: dialogs.c:849
 msgid "Channel:"
@@ -1759,7 +1762,7 @@ msgstr "Kanaal 1:"
 
 #: dialogs.c:851
 msgid "Tell:"
-msgstr "Mededeling"
+msgstr "Tell:"
 
 #: dialogs.c:852
 msgid "Kibitz:"
@@ -1787,7 +1790,7 @@ msgstr "Selecteerbare thema's:"
 
 #: dialogs.c:889
 msgid "New name for current theme:"
-msgstr "Nieuwe naam voor huidige thema:"
+msgstr "Nieuwe naam voor huidig thema:"
 
 #: dialogs.c:892
 msgid "White Piece Color:"
@@ -1835,23 +1838,23 @@ msgstr "Markeringskleur:"
 
 #: dialogs.c:926
 msgid "Premove Highlight Color:"
-msgstr ""
+msgstr "Voorzet-markeringskleur:"
 
 #: dialogs.c:932
 msgid "Flip Pieces Shogi Style        (Colored buttons restore default)"
-msgstr ""
+msgstr "Stukken op Shogi-manier omdraaien  (gekleurde knoppen herstellen standaard)"
 
 #: dialogs.c:934
 msgid "Mono Mode"
-msgstr ""
+msgstr "Mono-modus"
 
 #: dialogs.c:935
 msgid "Logo Size (0=off, requires restart):"
-msgstr ""
+msgstr "Logogrootte (0=uit, vereist een herstart):"
 
 #: dialogs.c:936
 msgid "Line Gap (-1 = default for board size):"
-msgstr ""
+msgstr "Regeltussenruimte (-1 = standaard voor bordgrootte):"
 
 #: dialogs.c:937
 msgid "Use Board Textures"
@@ -1867,7 +1870,7 @@ msgstr "Textuurbestand voor donkere velden:"
 
 #: dialogs.c:940
 msgid "Use external piece bitmaps with their own colors"
-msgstr ""
+msgstr "Externe bitmaps met eigen kleuren voor stukken gebruiken"
 
 #: dialogs.c:941
 msgid "Directory with Pieces Images:"
@@ -1935,7 +1938,7 @@ msgstr "Bijnaam (optioneel):"
 
 #: dialogs.c:1475
 msgid "Use nickname in PGN player tags of engine-engine games"
-msgstr ""
+msgstr "Bijnaam gebruiken in PGN-spelerlabels van automaat-automaat-partijen"
 
 #: dialogs.c:1476
 msgid "Engine Directory:"
@@ -1955,11 +1958,11 @@ msgstr "UCI"
 
 #: dialogs.c:1480
 msgid "WB protocol v1 (do not wait for engine features)"
-msgstr ""
+msgstr "WB-protocol v1 (niet op automaateigenschappen wachten)"
 
 #: dialogs.c:1481
 msgid "Must not use GUI book"
-msgstr ""
+msgstr "Hoort geen GUI-boek te gebruiken"
 
 #: dialogs.c:1482
 msgid "Add this engine to the list"
@@ -2173,7 +2176,7 @@ msgstr "Informatie"
 msgid "Note"
 msgstr "Notitie"
 
-#: dialogs.c:2370 dialogs.c:2655 dialogs.c:2658
+#: dialogs.c:2370 dialogs.c:2656 dialogs.c:2659
 msgid "White"
 msgstr "Wit"
 
@@ -2201,7 +2204,7 @@ msgstr "Leeg veld"
 msgid "Clear board"
 msgstr "Bord leegmaken"
 
-#: dialogs.c:2374 dialogs.c:2667 dialogs.c:2670
+#: dialogs.c:2374 dialogs.c:2668 dialogs.c:2671
 msgid "Black"
 msgstr "Zwart"
 
@@ -2254,47 +2257,47 @@ msgstr ">"
 msgid ">>"
 msgstr ">>"
 
-#: dialogs.c:2773
+#: dialogs.c:2774
 msgid "Directories:"
 msgstr "Mappen:"
 
-#: dialogs.c:2774
+#: dialogs.c:2775
 msgid "Files:"
 msgstr "Bestanden:"
 
-#: dialogs.c:2775
+#: dialogs.c:2776
 msgid "by name"
 msgstr "op naam"
 
-#: dialogs.c:2776
+#: dialogs.c:2777
 msgid "by type"
 msgstr "op type"
 
-#: dialogs.c:2779
+#: dialogs.c:2780
 msgid "Filename:"
 msgstr "Bestandsnaam:"
 
-#: dialogs.c:2780
+#: dialogs.c:2781
 msgid "New directory"
 msgstr "Nieuwe map"
 
-#: dialogs.c:2781
+#: dialogs.c:2782
 msgid "File type:"
 msgstr "Bestandstype:"
 
-#: dialogs.c:2856
+#: dialogs.c:2857
 msgid "Contents of"
 msgstr "Inhoud van"
 
-#: dialogs.c:2882
+#: dialogs.c:2883
 msgid "  next page"
 msgstr "  volgende pagina"
 
-#: dialogs.c:2899
+#: dialogs.c:2900
 msgid "FIRST TYPE DIRECTORY NAME HERE"
 msgstr "Typ hier eerst een mapnaam"
 
-#: dialogs.c:2900
+#: dialogs.c:2901
 msgid "TRY ANOTHER NAME"
 msgstr "Kies een andere naam"
 
@@ -2327,50 +2330,50 @@ msgstr "NPS"
 msgid "Reading game file (%d)"
 msgstr "Lezen van partijbestand (%d)"
 
-#: gtk/xboard.c:972 xaw/xboard.c:1072
+#: gtk/xboard.c:975 xaw/xboard.c:1072
 #, c-format
 msgid "%s: can't cd to CHESSDIR: "
 msgstr "%s: Kan huidige map niet wijzigen naar CHESSDIR: "
 
-#: gtk/xboard.c:981 xaw/xboard.c:1081
+#: gtk/xboard.c:984 xaw/xboard.c:1081
 #, c-format
 msgid "Failed to open file '%s'\n"
 msgstr "Kan bestand '%s' niet openen\n"
 
-#: gtk/xboard.c:996 xaw/xboard.c:1090
+#: gtk/xboard.c:999 xaw/xboard.c:1090
 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size"
-msgstr ""
+msgstr "*** Hercompileer met grotere BOARD_RANKS of BOARD_FILES om deze grootte te ondersteunen"
 
-#: gtk/xboard.c:1015 xaw/xboard.c:1122
+#: gtk/xboard.c:1018 xaw/xboard.c:1122
 #, c-format
 msgid "%s: bad boardSize syntax %s\n"
 msgstr "%s: onjuiste syntax %s voor 'boardSize'\n"
 
-#: gtk/xboard.c:1058 xaw/xboard.c:1161
+#: gtk/xboard.c:1061 xaw/xboard.c:1161
 #, c-format
 msgid "%s: unrecognized boardSize name %s\n"
 msgstr "%s: onbekende naam %s voor 'boardSize'\n"
 
-#: gtk/xboard.c:1097 xaw/xboard.c:1198
+#: gtk/xboard.c:1100 xaw/xboard.c:1198
 #, c-format
 msgid "%s: too few colors available; trying monochrome mode\n"
 msgstr "%s: te weinig kleuren beschikbaar; monochroommodus wordt geprobeerd\n"
 
-#: gtk/xboard.c:1411 xaw/xboard.c:1490
+#: gtk/xboard.c:1414 xaw/xboard.c:1490
 #, c-format
 msgid "Unable to create font set for %s.\n"
 msgstr "Kan geen lettertypenset aanmaken voor %s.\n"
 
-#: gtk/xboard.c:1436 xaw/xboard.c:1513
+#: gtk/xboard.c:1439 xaw/xboard.c:1513
 #, c-format
 msgid "%s: no fonts match pattern %s\n"
 msgstr "%s: er zijn geen lettertypen die overeenkomen met patroon %s\n"
 
-#: gtk/xboard.c:1888 xaw/xboard.c:2003
+#: gtk/xboard.c:1900 xaw/xboard.c:2003
 msgid "Can't open temp file"
 msgstr "Kan tijdelijk bestand niet openen"
 
-#: gtk/xboard.c:2371
+#: gtk/xboard.c:2383
 msgid "Failed to open file"
 msgstr "Kan bestand niet openen"
 
@@ -2403,13 +2406,11 @@ msgid ""
 "Enhancements Copyright 1992-2014 Free Software Foundation\n"
 "Enhancements Copyright 2005 Alessandro Scotti\n"
 "\n"
-"%s is free software and carries NO WARRANTY;see the file COPYING for more "
-"information.\n"
+"%s is free software and carries NO WARRANTY;see the file COPYING for more information.\n"
 "The GTK build of this version is experimental and unstable\n"
 "\n"
 "Visit XBoard on the web at: http://www.gnu.org/software/xboard/\n"
-"Check out the newest features at: http://www.gnu.org/software/xboard/"
-"whats_new.html\n"
+"Check out the newest features at: http://www.gnu.org/software/xboard/whats_new.html\n"
 "\n"
 "Report bugs via email at: <bug-xboard@gnu.org>\n"
 "\n"
@@ -2586,7 +2587,7 @@ msgstr "ICS-invoervak"
 
 #: menus.c:659
 msgid "ICS/Chat Console"
-msgstr ""
+msgstr "ICS/chat-console"
 
 #: menus.c:661
 msgid "Board..."
@@ -2642,7 +2643,7 @@ msgstr "Weigeren"
 
 #: menus.c:685
 msgid "Rematch"
-msgstr ""
+msgstr "Revanche"
 
 #: menus.c:687
 msgid "Call Flag"
@@ -2733,9 +2734,8 @@ msgid "Time Control..."
 msgstr "Tijdsbeperking..."
 
 #: menus.c:725
-#, fuzzy
 msgid "Common Engine..."
-msgstr "Automaten..."
+msgstr "Gemeenschappelijke automaat..."
 
 #: menus.c:726
 msgid "Adjudications..."
@@ -2868,7 +2868,7 @@ msgstr "Blunder"
 
 #: nevalgraph.c:106
 msgid "Eval"
-msgstr ""
+msgstr "Eval"
 
 #: ngamelist.c:87
 msgid "find position"
index 6dc1ebf..6920b92 100644 (file)
--- a/po/pl.po
+++ b/po/pl.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNU xboard 4.7.2\n"
 "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n"
-"POT-Creation-Date: 2014-10-17 21:25-0700\n"
+"POT-Creation-Date: 2014-10-24 08:20-0700\n"
 "PO-Revision-Date: 2014-03-03 14:20+0100\n"
 "Last-Translator: Paweł Żołnowski <pawel@zolnowski.name>\n"
 "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
@@ -19,37 +19,37 @@ msgstr ""
 "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
 "|| n%100>=20) ? 1 : 2);\n"
 
-#: args.h:839
+#: args.h:840
 #, c-format
 msgid "%s in settings file\n"
 msgstr "%s w pliku konfiguracyjnym\n"
 
-#: args.h:873
+#: args.h:874
 #, c-format
 msgid "Bad integer value %s"
 msgstr "Błędna wartość całkowita %s"
 
-#: args.h:979 args.h:1240
+#: args.h:980 args.h:1241
 #, c-format
 msgid "Unrecognized argument %s"
 msgstr "Nieznany parametr %s"
 
-#: args.h:1010
+#: args.h:1011
 #, c-format
 msgid "No value provided for argument %s"
 msgstr "Brak wartości parametru %s"
 
-#: args.h:1070
+#: args.h:1071
 #, c-format
 msgid "Incomplete \\ escape in value for %s"
 msgstr "Niepełna sekwencja specjalna \\ w wartości dla %s"
 
-#: args.h:1181
+#: args.h:1182
 #, c-format
 msgid "Failed to open indirection file %s"
 msgstr "Nie udało się otworzyć pliku pośredniego %s"
 
-#: args.h:1198
+#: args.h:1199
 #, c-format
 msgid "Unrecognized boolean argument value %s"
 msgstr "Nieznana wartość parametru logicznego %s"
@@ -2200,7 +2200,7 @@ msgstr "Informacje"
 msgid "Note"
 msgstr "Uwaga"
 
-#: dialogs.c:2370 dialogs.c:2655 dialogs.c:2658
+#: dialogs.c:2370 dialogs.c:2656 dialogs.c:2659
 msgid "White"
 msgstr "Białe"
 
@@ -2228,7 +2228,7 @@ msgstr "Puste pole"
 msgid "Clear board"
 msgstr "Wyczyść szachownicę"
 
-#: dialogs.c:2374 dialogs.c:2667 dialogs.c:2670
+#: dialogs.c:2374 dialogs.c:2668 dialogs.c:2671
 msgid "Black"
 msgstr "Czarne"
 
@@ -2280,47 +2280,47 @@ msgstr ">"
 msgid ">>"
 msgstr ">>"
 
-#: dialogs.c:2773
+#: dialogs.c:2774
 msgid "Directories:"
 msgstr "Katalogi:"
 
-#: dialogs.c:2774
+#: dialogs.c:2775
 msgid "Files:"
 msgstr "Pliki:"
 
-#: dialogs.c:2775
+#: dialogs.c:2776
 msgid "by name"
 msgstr "wg nazwy"
 
-#: dialogs.c:2776
+#: dialogs.c:2777
 msgid "by type"
 msgstr "wg typu"
 
-#: dialogs.c:2779
+#: dialogs.c:2780
 msgid "Filename:"
 msgstr "Nazwa pliku:"
 
-#: dialogs.c:2780
+#: dialogs.c:2781
 msgid "New directory"
 msgstr "Nowy katalog"
 
-#: dialogs.c:2781
+#: dialogs.c:2782
 msgid "File type:"
 msgstr "Typ pliku:"
 
-#: dialogs.c:2856
+#: dialogs.c:2857
 msgid "Contents of"
 msgstr "Zawartość"
 
-#: dialogs.c:2882
+#: dialogs.c:2883
 msgid "  next page"
 msgstr "  następna strona"
 
-#: dialogs.c:2899
+#: dialogs.c:2900
 msgid "FIRST TYPE DIRECTORY NAME HERE"
 msgstr "NAJPIERW NALEŻY TU WPISAĆ NAZWĘ KATALOGU"
 
-#: dialogs.c:2900
+#: dialogs.c:2901
 msgid "TRY ANOTHER NAME"
 msgstr "PROSZĘ SPRÓBOWAĆ INNĄ NAZWĘ"
 
@@ -2355,53 +2355,53 @@ msgstr "NPS"
 msgid "Reading game file (%d)"
 msgstr "Czytanie pliku gry (%d)"
 
-#: gtk/xboard.c:972 xaw/xboard.c:1072
+#: gtk/xboard.c:975 xaw/xboard.c:1072
 #, c-format
 msgid "%s: can't cd to CHESSDIR: "
 msgstr "%s: nie można wejść do CHESSDIR: "
 
-#: gtk/xboard.c:981 xaw/xboard.c:1081
+#: gtk/xboard.c:984 xaw/xboard.c:1081
 #, c-format
 msgid "Failed to open file '%s'\n"
 msgstr "Nie udało się otworzyć pliku \"%s\"\n"
 
-#: gtk/xboard.c:996 xaw/xboard.c:1090
+#: gtk/xboard.c:999 xaw/xboard.c:1090
 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size"
 msgstr ""
 "Należy skompilować ponownie z większą wartością dla BOARD_RANKS lub "
 "BOARD_FILES, aby obsługiwać ten rozmiar"
 
-#: gtk/xboard.c:1015 xaw/xboard.c:1122
+#: gtk/xboard.c:1018 xaw/xboard.c:1122
 #, c-format
 msgid "%s: bad boardSize syntax %s\n"
 msgstr "%s: błędna składnia boardSize %s\n"
 
-#: gtk/xboard.c:1058 xaw/xboard.c:1161
+#: gtk/xboard.c:1061 xaw/xboard.c:1161
 #, c-format
 msgid "%s: unrecognized boardSize name %s\n"
 msgstr "%s: nieznana nazwa boardSize %s\n"
 
-#: gtk/xboard.c:1097 xaw/xboard.c:1198
+#: gtk/xboard.c:1100 xaw/xboard.c:1198
 #, c-format
 msgid "%s: too few colors available; trying monochrome mode\n"
 msgstr ""
 "%s: za mało dostępnych kolorów; próba użycia trybu monochromatycznego\n"
 
-#: gtk/xboard.c:1411 xaw/xboard.c:1490
+#: gtk/xboard.c:1414 xaw/xboard.c:1490
 #, c-format
 msgid "Unable to create font set for %s.\n"
 msgstr "Nie można utworzyć zestawu czcionek dla %s.\n"
 
-#: gtk/xboard.c:1436 xaw/xboard.c:1513
+#: gtk/xboard.c:1439 xaw/xboard.c:1513
 #, c-format
 msgid "%s: no fonts match pattern %s\n"
 msgstr "%s: żadna czcionka nie pasuje do wzoru %s\n"
 
-#: gtk/xboard.c:1888 xaw/xboard.c:2003
+#: gtk/xboard.c:1900 xaw/xboard.c:2003
 msgid "Can't open temp file"
 msgstr "Nie można otworzyć pliku temp"
 
-#: gtk/xboard.c:2371
+#: gtk/xboard.c:2383
 msgid "Failed to open file"
 msgstr "Nie udało się otworzyć pliku"
 
index 5a6191a..8926e24 100644 (file)
--- a/po/ru.po
+++ b/po/ru.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNU xboard master-20110507\n"
 "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n"
-"POT-Creation-Date: 2014-10-17 21:25-0700\n"
+"POT-Creation-Date: 2014-10-24 08:20-0700\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,37 +18,37 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: args.h:839
+#: args.h:840
 #, c-format
 msgid "%s in settings file\n"
 msgstr ""
 
-#: args.h:873
+#: args.h:874
 #, c-format
 msgid "Bad integer value %s"
 msgstr ""
 
-#: args.h:979 args.h:1240
+#: args.h:980 args.h:1241
 #, c-format
 msgid "Unrecognized argument %s"
 msgstr ""
 
-#: args.h:1010
+#: args.h:1011
 #, c-format
 msgid "No value provided for argument %s"
 msgstr ""
 
-#: args.h:1070
+#: args.h:1071
 #, c-format
 msgid "Incomplete \\ escape in value for %s"
 msgstr ""
 
-#: args.h:1181
+#: args.h:1182
 #, c-format
 msgid "Failed to open indirection file %s"
 msgstr ""
 
-#: args.h:1198
+#: args.h:1199
 #, c-format
 msgid "Unrecognized boolean argument value %s"
 msgstr ""
@@ -2155,7 +2155,7 @@ msgstr "Информация"
 msgid "Note"
 msgstr "Примечание"
 
-#: dialogs.c:2370 dialogs.c:2655 dialogs.c:2658
+#: dialogs.c:2370 dialogs.c:2656 dialogs.c:2659
 msgid "White"
 msgstr "Белые"
 
@@ -2183,7 +2183,7 @@ msgstr "Пустое поле"
 msgid "Clear board"
 msgstr "Очистить доску"
 
-#: dialogs.c:2374 dialogs.c:2667 dialogs.c:2670
+#: dialogs.c:2374 dialogs.c:2668 dialogs.c:2671
 msgid "Black"
 msgstr "Черные"
 
@@ -2235,51 +2235,51 @@ msgstr ""
 msgid ">>"
 msgstr ""
 
-#: dialogs.c:2773
+#: dialogs.c:2774
 msgid "Directories:"
 msgstr ""
 
-#: dialogs.c:2774
+#: dialogs.c:2775
 #, fuzzy
 msgid "Files:"
 msgstr "Файл"
 
-#: dialogs.c:2775
+#: dialogs.c:2776
 msgid "by name"
 msgstr ""
 
-#: dialogs.c:2776
+#: dialogs.c:2777
 msgid "by type"
 msgstr ""
 
-#: dialogs.c:2779
+#: dialogs.c:2780
 #, fuzzy
 msgid "Filename:"
 msgstr "Фильтр"
 
-#: dialogs.c:2780
+#: dialogs.c:2781
 msgid "New directory"
 msgstr ""
 
-#: dialogs.c:2781
+#: dialogs.c:2782
 #, fuzzy
 msgid "File type:"
 msgstr "Фильтр"
 
-#: dialogs.c:2856
+#: dialogs.c:2857
 #, fuzzy
 msgid "Contents of"
 msgstr "Комментарии"
 
-#: dialogs.c:2882
+#: dialogs.c:2883
 msgid "  next page"
 msgstr ""
 
-#: dialogs.c:2899
+#: dialogs.c:2900
 msgid "FIRST TYPE DIRECTORY NAME HERE"
 msgstr ""
 
-#: dialogs.c:2900
+#: dialogs.c:2901
 msgid "TRY ANOTHER NAME"
 msgstr ""
 
@@ -2310,50 +2310,50 @@ msgstr "NPS (Узл./сек.)"
 msgid "Reading game file (%d)"
 msgstr "Неправильный формат файла"
 
-#: gtk/xboard.c:972 xaw/xboard.c:1072
+#: gtk/xboard.c:975 xaw/xboard.c:1072
 #, c-format
 msgid "%s: can't cd to CHESSDIR: "
 msgstr ""
 
-#: gtk/xboard.c:981 xaw/xboard.c:1081
+#: gtk/xboard.c:984 xaw/xboard.c:1081
 #, c-format
 msgid "Failed to open file '%s'\n"
 msgstr ""
 
-#: gtk/xboard.c:996 xaw/xboard.c:1090
+#: gtk/xboard.c:999 xaw/xboard.c:1090
 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size"
 msgstr ""
 
-#: gtk/xboard.c:1015 xaw/xboard.c:1122
+#: gtk/xboard.c:1018 xaw/xboard.c:1122
 #, c-format
 msgid "%s: bad boardSize syntax %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1058 xaw/xboard.c:1161
+#: gtk/xboard.c:1061 xaw/xboard.c:1161
 #, c-format
 msgid "%s: unrecognized boardSize name %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1097 xaw/xboard.c:1198
+#: gtk/xboard.c:1100 xaw/xboard.c:1198
 #, c-format
 msgid "%s: too few colors available; trying monochrome mode\n"
 msgstr ""
 
-#: gtk/xboard.c:1411 xaw/xboard.c:1490
+#: gtk/xboard.c:1414 xaw/xboard.c:1490
 #, c-format
 msgid "Unable to create font set for %s.\n"
 msgstr ""
 
-#: gtk/xboard.c:1436 xaw/xboard.c:1513
+#: gtk/xboard.c:1439 xaw/xboard.c:1513
 #, c-format
 msgid "%s: no fonts match pattern %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1888 xaw/xboard.c:2003
+#: gtk/xboard.c:1900 xaw/xboard.c:2003
 msgid "Can't open temp file"
 msgstr ""
 
-#: gtk/xboard.c:2371
+#: gtk/xboard.c:2383
 #, fuzzy
 msgid "Failed to open file"
 msgstr "Ошибка запуска cmail"
index 2106403..8b2635f 100644 (file)
--- a/po/tr.po
+++ b/po/tr.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: XBoard 4.2.7\n"
 "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n"
-"POT-Creation-Date: 2014-10-17 21:25-0700\n"
+"POT-Creation-Date: 2014-10-24 08:20-0700\n"
 "PO-Revision-Date: 2003-12-26 16:38+0200\n"
 "Last-Translator: A. Alper Atýcý <alper_atici@yahoo.com>\n"
 "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
@@ -18,37 +18,37 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: args.h:839
+#: args.h:840
 #, c-format
 msgid "%s in settings file\n"
 msgstr ""
 
-#: args.h:873
+#: args.h:874
 #, c-format
 msgid "Bad integer value %s"
 msgstr ""
 
-#: args.h:979 args.h:1240
+#: args.h:980 args.h:1241
 #, c-format
 msgid "Unrecognized argument %s"
 msgstr ""
 
-#: args.h:1010
+#: args.h:1011
 #, c-format
 msgid "No value provided for argument %s"
 msgstr ""
 
-#: args.h:1070
+#: args.h:1071
 #, c-format
 msgid "Incomplete \\ escape in value for %s"
 msgstr ""
 
-#: args.h:1181
+#: args.h:1182
 #, fuzzy, c-format
 msgid "Failed to open indirection file %s"
 msgstr "Dosya açýlamadý"
 
-#: args.h:1198
+#: args.h:1199
 #, c-format
 msgid "Unrecognized boolean argument value %s"
 msgstr ""
@@ -2159,7 +2159,7 @@ msgstr "Bilgi"
 msgid "Note"
 msgstr "Not"
 
-#: dialogs.c:2370 dialogs.c:2655 dialogs.c:2658
+#: dialogs.c:2370 dialogs.c:2656 dialogs.c:2659
 msgid "White"
 msgstr "Beyaz"
 
@@ -2187,7 +2187,7 @@ msgstr "Kareyi Bo
 msgid "Clear board"
 msgstr "Tahtayý Temizle"
 
-#: dialogs.c:2374 dialogs.c:2667 dialogs.c:2670
+#: dialogs.c:2374 dialogs.c:2668 dialogs.c:2671
 msgid "Black"
 msgstr "Siyah"
 
@@ -2240,51 +2240,51 @@ msgstr ""
 msgid ">>"
 msgstr ""
 
-#: dialogs.c:2773
+#: dialogs.c:2774
 msgid "Directories:"
 msgstr ""
 
-#: dialogs.c:2774
+#: dialogs.c:2775
 #, fuzzy
 msgid "Files:"
 msgstr "Dosya"
 
-#: dialogs.c:2775
+#: dialogs.c:2776
 msgid "by name"
 msgstr ""
 
-#: dialogs.c:2776
+#: dialogs.c:2777
 msgid "by type"
 msgstr ""
 
-#: dialogs.c:2779
+#: dialogs.c:2780
 #, fuzzy
 msgid "Filename:"
 msgstr "Dosya adý giriþi"
 
-#: dialogs.c:2780
+#: dialogs.c:2781
 msgid "New directory"
 msgstr ""
 
-#: dialogs.c:2781
+#: dialogs.c:2782
 #, fuzzy
 msgid "File type:"
 msgstr "Analiz edilecek dosya"
 
-#: dialogs.c:2856
+#: dialogs.c:2857
 msgid "Contents of"
 msgstr ""
 
-#: dialogs.c:2882
+#: dialogs.c:2883
 #, fuzzy
 msgid "  next page"
 msgstr "sonraki"
 
-#: dialogs.c:2899
+#: dialogs.c:2900
 msgid "FIRST TYPE DIRECTORY NAME HERE"
 msgstr ""
 
-#: dialogs.c:2900
+#: dialogs.c:2901
 msgid "TRY ANOTHER NAME"
 msgstr ""
 
@@ -2314,50 +2314,50 @@ msgstr ""
 msgid "Reading game file (%d)"
 msgstr ""
 
-#: gtk/xboard.c:972 xaw/xboard.c:1072
+#: gtk/xboard.c:975 xaw/xboard.c:1072
 #, c-format
 msgid "%s: can't cd to CHESSDIR: "
 msgstr ""
 
-#: gtk/xboard.c:981 xaw/xboard.c:1081
+#: gtk/xboard.c:984 xaw/xboard.c:1081
 #, fuzzy, c-format
 msgid "Failed to open file '%s'\n"
 msgstr "Dosya açýlamadý"
 
-#: gtk/xboard.c:996 xaw/xboard.c:1090
+#: gtk/xboard.c:999 xaw/xboard.c:1090
 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size"
 msgstr ""
 
-#: gtk/xboard.c:1015 xaw/xboard.c:1122
+#: gtk/xboard.c:1018 xaw/xboard.c:1122
 #, c-format
 msgid "%s: bad boardSize syntax %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1058 xaw/xboard.c:1161
+#: gtk/xboard.c:1061 xaw/xboard.c:1161
 #, c-format
 msgid "%s: unrecognized boardSize name %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1097 xaw/xboard.c:1198
+#: gtk/xboard.c:1100 xaw/xboard.c:1198
 #, c-format
 msgid "%s: too few colors available; trying monochrome mode\n"
 msgstr ""
 
-#: gtk/xboard.c:1411 xaw/xboard.c:1490
+#: gtk/xboard.c:1414 xaw/xboard.c:1490
 #, c-format
 msgid "Unable to create font set for %s.\n"
 msgstr ""
 
-#: gtk/xboard.c:1436 xaw/xboard.c:1513
+#: gtk/xboard.c:1439 xaw/xboard.c:1513
 #, c-format
 msgid "%s: no fonts match pattern %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1888 xaw/xboard.c:2003
+#: gtk/xboard.c:1900 xaw/xboard.c:2003
 msgid "Can't open temp file"
 msgstr ""
 
-#: gtk/xboard.c:2371
+#: gtk/xboard.c:2383
 msgid "Failed to open file"
 msgstr "Dosya açýlamadý"
 
index 4844459..8a9d43a 100644 (file)
--- a/po/uk.po
+++ b/po/uk.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNU xboard-4.8.0-pre1\n"
 "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n"
-"POT-Creation-Date: 2014-10-17 21:25-0700\n"
+"POT-Creation-Date: 2014-10-24 08:20-0700\n"
 "PO-Revision-Date: 2014-09-30 22:13+0300\n"
 "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
 "Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
@@ -19,37 +19,37 @@ msgstr ""
 "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n"
 "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
 
-#: args.h:839
+#: args.h:840
 #, c-format
 msgid "%s in settings file\n"
 msgstr "%s у файлі параметрів\n"
 
-#: args.h:873
+#: args.h:874
 #, c-format
 msgid "Bad integer value %s"
 msgstr "Помилкове ціле значення %s"
 
-#: args.h:979 args.h:1240
+#: args.h:980 args.h:1241
 #, c-format
 msgid "Unrecognized argument %s"
 msgstr "Невідомий аргумент %s"
 
-#: args.h:1010
+#: args.h:1011
 #, c-format
 msgid "No value provided for argument %s"
 msgstr "Не вказано значення для аргументу %s"
 
-#: args.h:1070
+#: args.h:1071
 #, c-format
 msgid "Incomplete \\ escape in value for %s"
 msgstr "Неповне екранування \\ у значенні для %s"
 
-#: args.h:1181
+#: args.h:1182
 #, c-format
 msgid "Failed to open indirection file %s"
 msgstr "Не вдалося відкрити файл переспрямування %s"
 
-#: args.h:1198
+#: args.h:1199
 #, c-format
 msgid "Unrecognized boolean argument value %s"
 msgstr "Невідоме значення булевого аргументу %s"
@@ -2173,7 +2173,7 @@ msgstr "Інформація"
 msgid "Note"
 msgstr "Нотатка"
 
-#: dialogs.c:2370 dialogs.c:2655 dialogs.c:2658
+#: dialogs.c:2370 dialogs.c:2656 dialogs.c:2659
 msgid "White"
 msgstr "Білі"
 
@@ -2201,7 +2201,7 @@ msgstr "Порожня клітинка"
 msgid "Clear board"
 msgstr "Спорожнити дошку"
 
-#: dialogs.c:2374 dialogs.c:2667 dialogs.c:2670
+#: dialogs.c:2374 dialogs.c:2668 dialogs.c:2671
 msgid "Black"
 msgstr "Чорні"
 
@@ -2253,47 +2253,47 @@ msgstr ">"
 msgid ">>"
 msgstr ">>"
 
-#: dialogs.c:2773
+#: dialogs.c:2774
 msgid "Directories:"
 msgstr "Каталоги:"
 
-#: dialogs.c:2774
+#: dialogs.c:2775
 msgid "Files:"
 msgstr "Файли:"
 
-#: dialogs.c:2775
+#: dialogs.c:2776
 msgid "by name"
 msgstr "за назвою"
 
-#: dialogs.c:2776
+#: dialogs.c:2777
 msgid "by type"
 msgstr "за типом"
 
-#: dialogs.c:2779
+#: dialogs.c:2780
 msgid "Filename:"
 msgstr "Назва файла:"
 
-#: dialogs.c:2780
+#: dialogs.c:2781
 msgid "New directory"
 msgstr "Новий каталог"
 
-#: dialogs.c:2781
+#: dialogs.c:2782
 msgid "File type:"
 msgstr "Тип файлів:"
 
-#: dialogs.c:2856
+#: dialogs.c:2857
 msgid "Contents of"
 msgstr "Вміст"
 
-#: dialogs.c:2882
+#: dialogs.c:2883
 msgid "  next page"
 msgstr "  наступна сторінка"
 
-#: dialogs.c:2899
+#: dialogs.c:2900
 msgid "FIRST TYPE DIRECTORY NAME HERE"
 msgstr "СПОЧАТКУ ВКАЖІТЬ ТУТ НАЗВУ КАТАЛОГУ"
 
-#: dialogs.c:2900
+#: dialogs.c:2901
 msgid "TRY ANOTHER NAME"
 msgstr "СПРОБУЙТЕ ІНШУ НАЗВУ"
 
@@ -2328,52 +2328,52 @@ msgstr "NPS"
 msgid "Reading game file (%d)"
 msgstr "Читання файла гри (%d)"
 
-#: gtk/xboard.c:972 xaw/xboard.c:1072
+#: gtk/xboard.c:975 xaw/xboard.c:1072
 #, c-format
 msgid "%s: can't cd to CHESSDIR: "
 msgstr "%s: не вдалося перейти до каталогу CHESSDIR: "
 
-#: gtk/xboard.c:981 xaw/xboard.c:1081
+#: gtk/xboard.c:984 xaw/xboard.c:1081
 #, c-format
 msgid "Failed to open file '%s'\n"
 msgstr "Не вдалося відкрити файл «%s»\n"
 
-#: gtk/xboard.c:996 xaw/xboard.c:1090
+#: gtk/xboard.c:999 xaw/xboard.c:1090
 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size"
 msgstr ""
 "Для того, щоб скористатися підтримкою цього розміру, слід зібрати програму з "
 "більшими значеннями BOARD_RANKS або BOARD_FILES"
 
-#: gtk/xboard.c:1015 xaw/xboard.c:1122
+#: gtk/xboard.c:1018 xaw/xboard.c:1122
 #, c-format
 msgid "%s: bad boardSize syntax %s\n"
 msgstr "%s: помилковий синтаксис boardSize %s\n"
 
-#: gtk/xboard.c:1058 xaw/xboard.c:1161
+#: gtk/xboard.c:1061 xaw/xboard.c:1161
 #, c-format
 msgid "%s: unrecognized boardSize name %s\n"
 msgstr "%s: невідома назва boardSize %s\n"
 
-#: gtk/xboard.c:1097 xaw/xboard.c:1198
+#: gtk/xboard.c:1100 xaw/xboard.c:1198
 #, c-format
 msgid "%s: too few colors available; trying monochrome mode\n"
 msgstr "%s: занадто мало кольорів; спробуємо монохромний режим\n"
 
-#: gtk/xboard.c:1411 xaw/xboard.c:1490
+#: gtk/xboard.c:1414 xaw/xboard.c:1490
 #, c-format
 msgid "Unable to create font set for %s.\n"
 msgstr "Не вдалося створити набір шрифтів для %s.\n"
 
-#: gtk/xboard.c:1436 xaw/xboard.c:1513
+#: gtk/xboard.c:1439 xaw/xboard.c:1513
 #, c-format
 msgid "%s: no fonts match pattern %s\n"
 msgstr "%s: взірцеві %s не відповідає жоден шрифт\n"
 
-#: gtk/xboard.c:1888 xaw/xboard.c:2003
+#: gtk/xboard.c:1900 xaw/xboard.c:2003
 msgid "Can't open temp file"
 msgstr "Не вдалося відкрити тимчасовий файл даних"
 
-#: gtk/xboard.c:2371
+#: gtk/xboard.c:2383
 msgid "Failed to open file"
 msgstr "Не вдалося відкрити файл"
 
index 602da81..dbac5fb 100644 (file)
--- a/po/vi.po
+++ b/po/vi.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNU xboard master-20110507\n"
 "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n"
-"POT-Creation-Date: 2014-10-17 21:25-0700\n"
+"POT-Creation-Date: 2014-10-24 08:20-0700\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,37 +18,37 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: args.h:839
+#: args.h:840
 #, c-format
 msgid "%s in settings file\n"
 msgstr ""
 
-#: args.h:873
+#: args.h:874
 #, c-format
 msgid "Bad integer value %s"
 msgstr ""
 
-#: args.h:979 args.h:1240
+#: args.h:980 args.h:1241
 #, c-format
 msgid "Unrecognized argument %s"
 msgstr ""
 
-#: args.h:1010
+#: args.h:1011
 #, c-format
 msgid "No value provided for argument %s"
 msgstr ""
 
-#: args.h:1070
+#: args.h:1071
 #, c-format
 msgid "Incomplete \\ escape in value for %s"
 msgstr ""
 
-#: args.h:1181
+#: args.h:1182
 #, c-format
 msgid "Failed to open indirection file %s"
 msgstr ""
 
-#: args.h:1198
+#: args.h:1199
 #, c-format
 msgid "Unrecognized boolean argument value %s"
 msgstr ""
@@ -2134,7 +2134,7 @@ msgstr ""
 msgid "Note"
 msgstr ""
 
-#: dialogs.c:2370 dialogs.c:2655 dialogs.c:2658
+#: dialogs.c:2370 dialogs.c:2656 dialogs.c:2659
 msgid "White"
 msgstr "Trắng"
 
@@ -2162,7 +2162,7 @@ msgstr "Ô Trống"
 msgid "Clear board"
 msgstr "Xóa Bàn Cờ"
 
-#: dialogs.c:2374 dialogs.c:2667 dialogs.c:2670
+#: dialogs.c:2374 dialogs.c:2668 dialogs.c:2671
 msgid "Black"
 msgstr "Đen"
 
@@ -2214,51 +2214,51 @@ msgstr ""
 msgid ">>"
 msgstr ""
 
-#: dialogs.c:2773
+#: dialogs.c:2774
 msgid "Directories:"
 msgstr ""
 
-#: dialogs.c:2774
+#: dialogs.c:2775
 #, fuzzy
 msgid "Files:"
 msgstr "Lọc"
 
-#: dialogs.c:2775
+#: dialogs.c:2776
 msgid "by name"
 msgstr ""
 
-#: dialogs.c:2776
+#: dialogs.c:2777
 msgid "by type"
 msgstr ""
 
-#: dialogs.c:2779
+#: dialogs.c:2780
 #, fuzzy
 msgid "Filename:"
 msgstr "Lọc"
 
-#: dialogs.c:2780
+#: dialogs.c:2781
 msgid "New directory"
 msgstr ""
 
-#: dialogs.c:2781
+#: dialogs.c:2782
 #, fuzzy
 msgid "File type:"
 msgstr "Lọc"
 
-#: dialogs.c:2856
+#: dialogs.c:2857
 #, fuzzy
 msgid "Contents of"
 msgstr "Bình Chú"
 
-#: dialogs.c:2882
+#: dialogs.c:2883
 msgid "  next page"
 msgstr ""
 
-#: dialogs.c:2899
+#: dialogs.c:2900
 msgid "FIRST TYPE DIRECTORY NAME HERE"
 msgstr ""
 
-#: dialogs.c:2900
+#: dialogs.c:2901
 msgid "TRY ANOTHER NAME"
 msgstr ""
 
@@ -2289,50 +2289,50 @@ msgstr ""
 msgid "Reading game file (%d)"
 msgstr ""
 
-#: gtk/xboard.c:972 xaw/xboard.c:1072
+#: gtk/xboard.c:975 xaw/xboard.c:1072
 #, c-format
 msgid "%s: can't cd to CHESSDIR: "
 msgstr ""
 
-#: gtk/xboard.c:981 xaw/xboard.c:1081
+#: gtk/xboard.c:984 xaw/xboard.c:1081
 #, c-format
 msgid "Failed to open file '%s'\n"
 msgstr ""
 
-#: gtk/xboard.c:996 xaw/xboard.c:1090
+#: gtk/xboard.c:999 xaw/xboard.c:1090
 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size"
 msgstr ""
 
-#: gtk/xboard.c:1015 xaw/xboard.c:1122
+#: gtk/xboard.c:1018 xaw/xboard.c:1122
 #, c-format
 msgid "%s: bad boardSize syntax %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1058 xaw/xboard.c:1161
+#: gtk/xboard.c:1061 xaw/xboard.c:1161
 #, c-format
 msgid "%s: unrecognized boardSize name %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1097 xaw/xboard.c:1198
+#: gtk/xboard.c:1100 xaw/xboard.c:1198
 #, c-format
 msgid "%s: too few colors available; trying monochrome mode\n"
 msgstr ""
 
-#: gtk/xboard.c:1411 xaw/xboard.c:1490
+#: gtk/xboard.c:1414 xaw/xboard.c:1490
 #, c-format
 msgid "Unable to create font set for %s.\n"
 msgstr ""
 
-#: gtk/xboard.c:1436 xaw/xboard.c:1513
+#: gtk/xboard.c:1439 xaw/xboard.c:1513
 #, c-format
 msgid "%s: no fonts match pattern %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1888 xaw/xboard.c:2003
+#: gtk/xboard.c:1900 xaw/xboard.c:2003
 msgid "Can't open temp file"
 msgstr ""
 
-#: gtk/xboard.c:2371
+#: gtk/xboard.c:2383
 msgid "Failed to open file"
 msgstr ""
 
index 12be8b8..d97ab3f 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNU xboard 4.8.0\n"
 "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n"
-"POT-Creation-Date: 2014-10-17 21:25-0700\n"
+"POT-Creation-Date: 2014-10-24 08:20-0700\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,37 +18,37 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
 
-#: args.h:839
+#: args.h:840
 #, c-format
 msgid "%s in settings file\n"
 msgstr ""
 
-#: args.h:873
+#: args.h:874
 #, c-format
 msgid "Bad integer value %s"
 msgstr ""
 
-#: args.h:979 args.h:1240
+#: args.h:980 args.h:1241
 #, c-format
 msgid "Unrecognized argument %s"
 msgstr ""
 
-#: args.h:1010
+#: args.h:1011
 #, c-format
 msgid "No value provided for argument %s"
 msgstr ""
 
-#: args.h:1070
+#: args.h:1071
 #, c-format
 msgid "Incomplete \\ escape in value for %s"
 msgstr ""
 
-#: args.h:1181
+#: args.h:1182
 #, c-format
 msgid "Failed to open indirection file %s"
 msgstr ""
 
-#: args.h:1198
+#: args.h:1199
 #, c-format
 msgid "Unrecognized boolean argument value %s"
 msgstr ""
@@ -2124,7 +2124,7 @@ msgstr ""
 msgid "Note"
 msgstr ""
 
-#: dialogs.c:2370 dialogs.c:2655 dialogs.c:2658
+#: dialogs.c:2370 dialogs.c:2656 dialogs.c:2659
 msgid "White"
 msgstr ""
 
@@ -2152,7 +2152,7 @@ msgstr ""
 msgid "Clear board"
 msgstr ""
 
-#: dialogs.c:2374 dialogs.c:2667 dialogs.c:2670
+#: dialogs.c:2374 dialogs.c:2668 dialogs.c:2671
 msgid "Black"
 msgstr ""
 
@@ -2204,47 +2204,47 @@ msgstr ""
 msgid ">>"
 msgstr ""
 
-#: dialogs.c:2773
+#: dialogs.c:2774
 msgid "Directories:"
 msgstr ""
 
-#: dialogs.c:2774
+#: dialogs.c:2775
 msgid "Files:"
 msgstr ""
 
-#: dialogs.c:2775
+#: dialogs.c:2776
 msgid "by name"
 msgstr ""
 
-#: dialogs.c:2776
+#: dialogs.c:2777
 msgid "by type"
 msgstr ""
 
-#: dialogs.c:2779
+#: dialogs.c:2780
 msgid "Filename:"
 msgstr ""
 
-#: dialogs.c:2780
+#: dialogs.c:2781
 msgid "New directory"
 msgstr ""
 
-#: dialogs.c:2781
+#: dialogs.c:2782
 msgid "File type:"
 msgstr ""
 
-#: dialogs.c:2856
+#: dialogs.c:2857
 msgid "Contents of"
 msgstr ""
 
-#: dialogs.c:2882
+#: dialogs.c:2883
 msgid "  next page"
 msgstr ""
 
-#: dialogs.c:2899
+#: dialogs.c:2900
 msgid "FIRST TYPE DIRECTORY NAME HERE"
 msgstr ""
 
-#: dialogs.c:2900
+#: dialogs.c:2901
 msgid "TRY ANOTHER NAME"
 msgstr ""
 
@@ -2275,50 +2275,50 @@ msgstr ""
 msgid "Reading game file (%d)"
 msgstr ""
 
-#: gtk/xboard.c:972 xaw/xboard.c:1072
+#: gtk/xboard.c:975 xaw/xboard.c:1072
 #, c-format
 msgid "%s: can't cd to CHESSDIR: "
 msgstr ""
 
-#: gtk/xboard.c:981 xaw/xboard.c:1081
+#: gtk/xboard.c:984 xaw/xboard.c:1081
 #, c-format
 msgid "Failed to open file '%s'\n"
 msgstr ""
 
-#: gtk/xboard.c:996 xaw/xboard.c:1090
+#: gtk/xboard.c:999 xaw/xboard.c:1090
 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size"
 msgstr ""
 
-#: gtk/xboard.c:1015 xaw/xboard.c:1122
+#: gtk/xboard.c:1018 xaw/xboard.c:1122
 #, c-format
 msgid "%s: bad boardSize syntax %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1058 xaw/xboard.c:1161
+#: gtk/xboard.c:1061 xaw/xboard.c:1161
 #, c-format
 msgid "%s: unrecognized boardSize name %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1097 xaw/xboard.c:1198
+#: gtk/xboard.c:1100 xaw/xboard.c:1198
 #, c-format
 msgid "%s: too few colors available; trying monochrome mode\n"
 msgstr ""
 
-#: gtk/xboard.c:1411 xaw/xboard.c:1490
+#: gtk/xboard.c:1414 xaw/xboard.c:1490
 #, c-format
 msgid "Unable to create font set for %s.\n"
 msgstr ""
 
-#: gtk/xboard.c:1436 xaw/xboard.c:1513
+#: gtk/xboard.c:1439 xaw/xboard.c:1513
 #, c-format
 msgid "%s: no fonts match pattern %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1888 xaw/xboard.c:2003
+#: gtk/xboard.c:1900 xaw/xboard.c:2003
 msgid "Can't open temp file"
 msgstr ""
 
-#: gtk/xboard.c:2371
+#: gtk/xboard.c:2383
 msgid "Failed to open file"
 msgstr ""
 
index d07de6c..da80db7 100644 (file)
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNU xboard master-20110507\n"
 "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n"
-"POT-Creation-Date: 2014-10-17 21:25-0700\n"
+"POT-Creation-Date: 2014-10-24 08:20-0700\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,37 +18,37 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: args.h:839
+#: args.h:840
 #, c-format
 msgid "%s in settings file\n"
 msgstr ""
 
-#: args.h:873
+#: args.h:874
 #, c-format
 msgid "Bad integer value %s"
 msgstr ""
 
-#: args.h:979 args.h:1240
+#: args.h:980 args.h:1241
 #, c-format
 msgid "Unrecognized argument %s"
 msgstr ""
 
-#: args.h:1010
+#: args.h:1011
 #, c-format
 msgid "No value provided for argument %s"
 msgstr ""
 
-#: args.h:1070
+#: args.h:1071
 #, c-format
 msgid "Incomplete \\ escape in value for %s"
 msgstr ""
 
-#: args.h:1181
+#: args.h:1182
 #, c-format
 msgid "Failed to open indirection file %s"
 msgstr ""
 
-#: args.h:1198
+#: args.h:1199
 #, c-format
 msgid "Unrecognized boolean argument value %s"
 msgstr ""
@@ -2149,7 +2149,7 @@ msgstr ""
 msgid "Note"
 msgstr "注释"
 
-#: dialogs.c:2370 dialogs.c:2655 dialogs.c:2658
+#: dialogs.c:2370 dialogs.c:2656 dialogs.c:2659
 msgid "White"
 msgstr "白方"
 
@@ -2177,7 +2177,7 @@ msgstr "清空格子"
 msgid "Clear board"
 msgstr "清空棋盘"
 
-#: dialogs.c:2374 dialogs.c:2667 dialogs.c:2670
+#: dialogs.c:2374 dialogs.c:2668 dialogs.c:2671
 msgid "Black"
 msgstr "黑方"
 
@@ -2229,51 +2229,51 @@ msgstr ""
 msgid ">>"
 msgstr ""
 
-#: dialogs.c:2773
+#: dialogs.c:2774
 msgid "Directories:"
 msgstr ""
 
-#: dialogs.c:2774
+#: dialogs.c:2775
 #, fuzzy
 msgid "Files:"
 msgstr "文件(F)"
 
-#: dialogs.c:2775
+#: dialogs.c:2776
 msgid "by name"
 msgstr ""
 
-#: dialogs.c:2776
+#: dialogs.c:2777
 msgid "by type"
 msgstr ""
 
-#: dialogs.c:2779
+#: dialogs.c:2780
 #, fuzzy
 msgid "Filename:"
 msgstr "过滤器"
 
-#: dialogs.c:2780
+#: dialogs.c:2781
 msgid "New directory"
 msgstr ""
 
-#: dialogs.c:2781
+#: dialogs.c:2782
 #, fuzzy
 msgid "File type:"
 msgstr "过滤器"
 
-#: dialogs.c:2856
+#: dialogs.c:2857
 #, fuzzy
 msgid "Contents of"
 msgstr "编辑注释(C) *.*"
 
-#: dialogs.c:2882
+#: dialogs.c:2883
 msgid "  next page"
 msgstr ""
 
-#: dialogs.c:2899
+#: dialogs.c:2900
 msgid "FIRST TYPE DIRECTORY NAME HERE"
 msgstr ""
 
-#: dialogs.c:2900
+#: dialogs.c:2901
 msgid "TRY ANOTHER NAME"
 msgstr ""
 
@@ -2304,50 +2304,50 @@ msgstr "NPS"
 msgid "Reading game file (%d)"
 msgstr "棋局文件错误"
 
-#: gtk/xboard.c:972 xaw/xboard.c:1072
+#: gtk/xboard.c:975 xaw/xboard.c:1072
 #, c-format
 msgid "%s: can't cd to CHESSDIR: "
 msgstr ""
 
-#: gtk/xboard.c:981 xaw/xboard.c:1081
+#: gtk/xboard.c:984 xaw/xboard.c:1081
 #, c-format
 msgid "Failed to open file '%s'\n"
 msgstr ""
 
-#: gtk/xboard.c:996 xaw/xboard.c:1090
+#: gtk/xboard.c:999 xaw/xboard.c:1090
 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size"
 msgstr ""
 
-#: gtk/xboard.c:1015 xaw/xboard.c:1122
+#: gtk/xboard.c:1018 xaw/xboard.c:1122
 #, c-format
 msgid "%s: bad boardSize syntax %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1058 xaw/xboard.c:1161
+#: gtk/xboard.c:1061 xaw/xboard.c:1161
 #, c-format
 msgid "%s: unrecognized boardSize name %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1097 xaw/xboard.c:1198
+#: gtk/xboard.c:1100 xaw/xboard.c:1198
 #, c-format
 msgid "%s: too few colors available; trying monochrome mode\n"
 msgstr ""
 
-#: gtk/xboard.c:1411 xaw/xboard.c:1490
+#: gtk/xboard.c:1414 xaw/xboard.c:1490
 #, c-format
 msgid "Unable to create font set for %s.\n"
 msgstr ""
 
-#: gtk/xboard.c:1436 xaw/xboard.c:1513
+#: gtk/xboard.c:1439 xaw/xboard.c:1513
 #, c-format
 msgid "%s: no fonts match pattern %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1888 xaw/xboard.c:2003
+#: gtk/xboard.c:1900 xaw/xboard.c:2003
 msgid "Can't open temp file"
 msgstr ""
 
-#: gtk/xboard.c:2371
+#: gtk/xboard.c:2383
 #, fuzzy
 msgid "Failed to open file"
 msgstr "Failed to invoke cmail"
index 8012622..8c8d4d7 100644 (file)
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNU xboard master-20110411\n"
 "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n"
-"POT-Creation-Date: 2014-10-17 21:25-0700\n"
+"POT-Creation-Date: 2014-10-24 08:20-0700\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,37 +18,37 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: args.h:839
+#: args.h:840
 #, c-format
 msgid "%s in settings file\n"
 msgstr ""
 
-#: args.h:873
+#: args.h:874
 #, c-format
 msgid "Bad integer value %s"
 msgstr ""
 
-#: args.h:979 args.h:1240
+#: args.h:980 args.h:1241
 #, c-format
 msgid "Unrecognized argument %s"
 msgstr ""
 
-#: args.h:1010
+#: args.h:1011
 #, c-format
 msgid "No value provided for argument %s"
 msgstr ""
 
-#: args.h:1070
+#: args.h:1071
 #, c-format
 msgid "Incomplete \\ escape in value for %s"
 msgstr ""
 
-#: args.h:1181
+#: args.h:1182
 #, c-format
 msgid "Failed to open indirection file %s"
 msgstr ""
 
-#: args.h:1198
+#: args.h:1199
 #, c-format
 msgid "Unrecognized boolean argument value %s"
 msgstr ""
@@ -2155,7 +2155,7 @@ msgstr "資訊"
 msgid "Note"
 msgstr "註解"
 
-#: dialogs.c:2370 dialogs.c:2655 dialogs.c:2658
+#: dialogs.c:2370 dialogs.c:2656 dialogs.c:2659
 msgid "White"
 msgstr "紅方"
 
@@ -2183,7 +2183,7 @@ msgstr "清空格子"
 msgid "Clear board"
 msgstr "清空棋盤"
 
-#: dialogs.c:2374 dialogs.c:2667 dialogs.c:2670
+#: dialogs.c:2374 dialogs.c:2668 dialogs.c:2671
 msgid "Black"
 msgstr "黑方"
 
@@ -2235,51 +2235,51 @@ msgstr ""
 msgid ">>"
 msgstr ""
 
-#: dialogs.c:2773
+#: dialogs.c:2774
 msgid "Directories:"
 msgstr ""
 
-#: dialogs.c:2774
+#: dialogs.c:2775
 #, fuzzy
 msgid "Files:"
 msgstr "檔案(F)"
 
-#: dialogs.c:2775
+#: dialogs.c:2776
 msgid "by name"
 msgstr ""
 
-#: dialogs.c:2776
+#: dialogs.c:2777
 msgid "by type"
 msgstr ""
 
-#: dialogs.c:2779
+#: dialogs.c:2780
 #, fuzzy
 msgid "Filename:"
 msgstr "過濾器"
 
-#: dialogs.c:2780
+#: dialogs.c:2781
 msgid "New directory"
 msgstr ""
 
-#: dialogs.c:2781
+#: dialogs.c:2782
 #, fuzzy
 msgid "File type:"
 msgstr "過濾器"
 
-#: dialogs.c:2856
+#: dialogs.c:2857
 #, fuzzy
 msgid "Contents of"
 msgstr "編輯註解(C) *.*"
 
-#: dialogs.c:2882
+#: dialogs.c:2883
 msgid "  next page"
 msgstr ""
 
-#: dialogs.c:2899
+#: dialogs.c:2900
 msgid "FIRST TYPE DIRECTORY NAME HERE"
 msgstr ""
 
-#: dialogs.c:2900
+#: dialogs.c:2901
 msgid "TRY ANOTHER NAME"
 msgstr ""
 
@@ -2310,50 +2310,50 @@ msgstr "NPS"
 msgid "Reading game file (%d)"
 msgstr "棋局檔案錯誤"
 
-#: gtk/xboard.c:972 xaw/xboard.c:1072
+#: gtk/xboard.c:975 xaw/xboard.c:1072
 #, c-format
 msgid "%s: can't cd to CHESSDIR: "
 msgstr ""
 
-#: gtk/xboard.c:981 xaw/xboard.c:1081
+#: gtk/xboard.c:984 xaw/xboard.c:1081
 #, c-format
 msgid "Failed to open file '%s'\n"
 msgstr ""
 
-#: gtk/xboard.c:996 xaw/xboard.c:1090
+#: gtk/xboard.c:999 xaw/xboard.c:1090
 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size"
 msgstr ""
 
-#: gtk/xboard.c:1015 xaw/xboard.c:1122
+#: gtk/xboard.c:1018 xaw/xboard.c:1122
 #, c-format
 msgid "%s: bad boardSize syntax %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1058 xaw/xboard.c:1161
+#: gtk/xboard.c:1061 xaw/xboard.c:1161
 #, c-format
 msgid "%s: unrecognized boardSize name %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1097 xaw/xboard.c:1198
+#: gtk/xboard.c:1100 xaw/xboard.c:1198
 #, c-format
 msgid "%s: too few colors available; trying monochrome mode\n"
 msgstr ""
 
-#: gtk/xboard.c:1411 xaw/xboard.c:1490
+#: gtk/xboard.c:1414 xaw/xboard.c:1490
 #, c-format
 msgid "Unable to create font set for %s.\n"
 msgstr ""
 
-#: gtk/xboard.c:1436 xaw/xboard.c:1513
+#: gtk/xboard.c:1439 xaw/xboard.c:1513
 #, c-format
 msgid "%s: no fonts match pattern %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1888 xaw/xboard.c:2003
+#: gtk/xboard.c:1900 xaw/xboard.c:2003
 msgid "Can't open temp file"
 msgstr ""
 
-#: gtk/xboard.c:2371
+#: gtk/xboard.c:2383
 #, fuzzy
 msgid "Failed to open file"
 msgstr "呼叫cmail失敗"
index c237ea3..33fba3d 100644 (file)
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNU xboard master-20110507\n"
 "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n"
-"POT-Creation-Date: 2014-10-17 21:25-0700\n"
+"POT-Creation-Date: 2014-10-24 08:20-0700\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,37 +18,37 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: args.h:839
+#: args.h:840
 #, c-format
 msgid "%s in settings file\n"
 msgstr ""
 
-#: args.h:873
+#: args.h:874
 #, c-format
 msgid "Bad integer value %s"
 msgstr ""
 
-#: args.h:979 args.h:1240
+#: args.h:980 args.h:1241
 #, c-format
 msgid "Unrecognized argument %s"
 msgstr ""
 
-#: args.h:1010
+#: args.h:1011
 #, c-format
 msgid "No value provided for argument %s"
 msgstr ""
 
-#: args.h:1070
+#: args.h:1071
 #, c-format
 msgid "Incomplete \\ escape in value for %s"
 msgstr ""
 
-#: args.h:1181
+#: args.h:1182
 #, c-format
 msgid "Failed to open indirection file %s"
 msgstr ""
 
-#: args.h:1198
+#: args.h:1199
 #, c-format
 msgid "Unrecognized boolean argument value %s"
 msgstr ""
@@ -2147,7 +2147,7 @@ msgstr "資訊"
 msgid "Note"
 msgstr "註解"
 
-#: dialogs.c:2370 dialogs.c:2655 dialogs.c:2658
+#: dialogs.c:2370 dialogs.c:2656 dialogs.c:2659
 msgid "White"
 msgstr "紅方"
 
@@ -2175,7 +2175,7 @@ msgstr "清空格子"
 msgid "Clear board"
 msgstr "清空棋盤"
 
-#: dialogs.c:2374 dialogs.c:2667 dialogs.c:2670
+#: dialogs.c:2374 dialogs.c:2668 dialogs.c:2671
 msgid "Black"
 msgstr "黑方"
 
@@ -2227,51 +2227,51 @@ msgstr ""
 msgid ">>"
 msgstr ""
 
-#: dialogs.c:2773
+#: dialogs.c:2774
 msgid "Directories:"
 msgstr ""
 
-#: dialogs.c:2774
+#: dialogs.c:2775
 #, fuzzy
 msgid "Files:"
 msgstr "檔案(F)"
 
-#: dialogs.c:2775
+#: dialogs.c:2776
 msgid "by name"
 msgstr ""
 
-#: dialogs.c:2776
+#: dialogs.c:2777
 msgid "by type"
 msgstr ""
 
-#: dialogs.c:2779
+#: dialogs.c:2780
 #, fuzzy
 msgid "Filename:"
 msgstr "過濾器"
 
-#: dialogs.c:2780
+#: dialogs.c:2781
 msgid "New directory"
 msgstr ""
 
-#: dialogs.c:2781
+#: dialogs.c:2782
 #, fuzzy
 msgid "File type:"
 msgstr "過濾器"
 
-#: dialogs.c:2856
+#: dialogs.c:2857
 #, fuzzy
 msgid "Contents of"
 msgstr "編輯註解(C) *.*"
 
-#: dialogs.c:2882
+#: dialogs.c:2883
 msgid "  next page"
 msgstr ""
 
-#: dialogs.c:2899
+#: dialogs.c:2900
 msgid "FIRST TYPE DIRECTORY NAME HERE"
 msgstr ""
 
-#: dialogs.c:2900
+#: dialogs.c:2901
 msgid "TRY ANOTHER NAME"
 msgstr ""
 
@@ -2302,50 +2302,50 @@ msgstr "NPS"
 msgid "Reading game file (%d)"
 msgstr "棋局檔案錯誤"
 
-#: gtk/xboard.c:972 xaw/xboard.c:1072
+#: gtk/xboard.c:975 xaw/xboard.c:1072
 #, c-format
 msgid "%s: can't cd to CHESSDIR: "
 msgstr ""
 
-#: gtk/xboard.c:981 xaw/xboard.c:1081
+#: gtk/xboard.c:984 xaw/xboard.c:1081
 #, c-format
 msgid "Failed to open file '%s'\n"
 msgstr ""
 
-#: gtk/xboard.c:996 xaw/xboard.c:1090
+#: gtk/xboard.c:999 xaw/xboard.c:1090
 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size"
 msgstr ""
 
-#: gtk/xboard.c:1015 xaw/xboard.c:1122
+#: gtk/xboard.c:1018 xaw/xboard.c:1122
 #, c-format
 msgid "%s: bad boardSize syntax %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1058 xaw/xboard.c:1161
+#: gtk/xboard.c:1061 xaw/xboard.c:1161
 #, c-format
 msgid "%s: unrecognized boardSize name %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1097 xaw/xboard.c:1198
+#: gtk/xboard.c:1100 xaw/xboard.c:1198
 #, c-format
 msgid "%s: too few colors available; trying monochrome mode\n"
 msgstr ""
 
-#: gtk/xboard.c:1411 xaw/xboard.c:1490
+#: gtk/xboard.c:1414 xaw/xboard.c:1490
 #, c-format
 msgid "Unable to create font set for %s.\n"
 msgstr ""
 
-#: gtk/xboard.c:1436 xaw/xboard.c:1513
+#: gtk/xboard.c:1439 xaw/xboard.c:1513
 #, c-format
 msgid "%s: no fonts match pattern %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1888 xaw/xboard.c:2003
+#: gtk/xboard.c:1900 xaw/xboard.c:2003
 msgid "Can't open temp file"
 msgstr ""
 
-#: gtk/xboard.c:2371
+#: gtk/xboard.c:2383
 #, fuzzy
 msgid "Failed to open file"
 msgstr "呼叫cmail失敗"