Merge branch 'v4.7.x' into master
authorArun Persaud <arun@nubati.net>
Wed, 10 Sep 2014 03:15:45 +0000 (20:15 -0700)
committerArun Persaud <arun@nubati.net>
Wed, 10 Sep 2014 03:18:18 +0000 (20:18 -0700)
Conflicts:
configure.ac
po/da.po
po/de.po
po/es.po
po/it.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
winboard/config.h

132 files changed:
Makefile.am
args.h
backend.c
backend.h
board.c
book.c
common.h
conf/chu [new file with mode: 0644]
conf/ics [new file with mode: 0644]
conf/judkins [new file with mode: 0644]
conf/judkins.fen [new file with mode: 0644]
conf/mini [new file with mode: 0644]
conf/mini.fen [new file with mode: 0644]
conf/sho [new file with mode: 0644]
conf/sho.fen [new file with mode: 0644]
conf/shogi [new file with mode: 0644]
conf/xiangqi [new file with mode: 0644]
conf/xq [new file with mode: 0644]
configure.ac
dialogs.c
dialogs.h
draw.c
engine-intf.html
engineoutput.c
engineoutput.h
frontend.h
gamelist.c
gtk/xboard.c
gtk/xboard.h
gtk/xoptions.c
menus.c
menus.h
moves.c
moves.h
nengineoutput.c
ngamelist.c
nhistory.c
parser.c
pixmaps/ANALYZING_14.xpm [deleted file]
pixmaps/BLACK_14.xpm [deleted file]
pixmaps/CLEAR_14.xpm [deleted file]
pixmaps/PONDER_14.xpm [deleted file]
pixmaps/THINKING_14.xpm [deleted file]
pixmaps/UNKNOWN_14.xpm [deleted file]
pixmaps/WHITE_14.xpm [deleted file]
pixmaps/board32.png [new file with mode: 0644]
pixmaps/board32.xpm [deleted file]
pixmaps/board48.png [new file with mode: 0644]
pixmaps/board48.xpm [deleted file]
pixmaps/cross32.png [new file with mode: 0644]
pixmaps/cross32.xpm [deleted file]
pixmaps/cross48.png [new file with mode: 0644]
pixmaps/cross48.xpm [deleted file]
pixmaps/ini32.png [new file with mode: 0644]
pixmaps/ini32.xpm [deleted file]
pixmaps/ini48.png [new file with mode: 0644]
pixmaps/ini48.xpm [deleted file]
png/xqboard.png
po/LINGUAS
po/da.po
po/de.po
po/es.po
po/it.po
po/nl.po [new file with mode: 0644]
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
sounds/roar.wav [new file with mode: 0644]
svg/BlackClaw.svg [new file with mode: 0644]
svg/BlackDolphin.svg [new file with mode: 0644]
svg/BlackHCrown.svg [new file with mode: 0644]
svg/BlackHSword.svg [new file with mode: 0644]
svg/BlackLeopard.svg [new file with mode: 0644]
svg/BlackLion.svg [new file with mode: 0644]
svg/BlackPromoBishop.svg [new file with mode: 0644]
svg/BlackPromoDragon.svg [new file with mode: 0644]
svg/BlackPromoHSword.svg [new file with mode: 0644]
svg/BlackPromoHorse.svg [new file with mode: 0644]
svg/BlackPromoRook.svg [new file with mode: 0644]
svg/BlackPromoSword.svg [new file with mode: 0644]
svg/BlackSword.svg [new file with mode: 0644]
svg/WhiteClaw.svg [new file with mode: 0644]
svg/WhiteDolphin.svg [new file with mode: 0644]
svg/WhiteHCrown.svg [new file with mode: 0644]
svg/WhiteHSword.svg [new file with mode: 0644]
svg/WhiteLeopard.svg [new file with mode: 0644]
svg/WhiteLion.svg [new file with mode: 0644]
svg/WhitePromoBishop.svg [new file with mode: 0644]
svg/WhitePromoDragon.svg [new file with mode: 0644]
svg/WhitePromoHSword.svg [new file with mode: 0644]
svg/WhitePromoHorse.svg [new file with mode: 0644]
svg/WhitePromoRook.svg [new file with mode: 0644]
svg/WhitePromoSword.svg [new file with mode: 0644]
svg/WhiteSword.svg [new file with mode: 0644]
usounds.c
usystem.c
usystem.h
winboard/bitmaps/ln33o.bmp [new file with mode: 0644]
winboard/bitmaps/ln33s.bmp [new file with mode: 0644]
winboard/bitmaps/ln33w.bmp [new file with mode: 0644]
winboard/bitmaps/ln49o.bmp [new file with mode: 0644]
winboard/bitmaps/ln49s.bmp [new file with mode: 0644]
winboard/bitmaps/ln49w.bmp [new file with mode: 0644]
winboard/bitmaps/ln72o.bmp [new file with mode: 0644]
winboard/bitmaps/ln72s.bmp [new file with mode: 0644]
winboard/bitmaps/ln72w.bmp [new file with mode: 0644]
winboard/config.h
winboard/defaults.h
winboard/resource.h
winboard/wclipbrd.c
winboard/wedittags.c
winboard/wengineoutput.c
winboard/wgamelist.c
winboard/winboard.c
winboard/winboard.rc
winboard/woptions.c
winboard/wsettings.c
winboard/wsnap.c
xaw/xboard.c
xaw/xboard.h
xaw/xengineoutput.c
xaw/xoptions.c
xboard.conf.in
xboard.texi
xboard2.h
zic2xpm.c [deleted file]
zic2xpm.man [deleted file]

index 61aa1d7..847084a 100644 (file)
@@ -57,7 +57,7 @@ xboard_SOURCES = backend.c backend.h backendz.h \
 ###
 
 SUBDIRS = po
-xboard_LDADD = -lm @FRONTEND_LIBS@ @X_LIBS@ @LIBINTL@ @CAIRO_LIBS@
+xboard_LDADD = -ldl -lm @FRONTEND_LIBS@ @X_LIBS@ @LIBINTL@ @CAIRO_LIBS@
 
 EXTRA_DIST = pixmaps themes png sounds winboard \
        xboard.texi gpl.texinfo texi2man texinfo.tex xboard.man xboard.desktop xboard-config.desktop \
@@ -69,7 +69,8 @@ DISTCLEANFILES = stamp-h
 
 GITVERSION=$(shell sh -c 'git describe --dirty --always 2>/dev/null')
 AM_CPPFLAGS=-DINFODIR='"$(infodir)"' @X_CFLAGS@ @CAIRO_CFLAGS@ @FRONTEND_CFLAGS@  -DSYSCONFDIR='"$(sysconfdir)"' \
-           -DLOCALEDIR='"$(localedir)"' -DSVGDIR='"$(svgdir)"' -D__GIT_VERSION='"$(GITVERSION)"' $(headers)
+           -DLOCALEDIR='"$(localedir)"' -DSVGDIR='"$(svgdir)"' -D__GIT_VERSION='"$(GITVERSION)"' \
+            -DCONFIGURE_OPTIONS='"@CONFIGURE_OPTIONS@"' -DDATADIR='"$(datadir)/games/xboard"' $(headers)
 
 ACLOCAL_AMFLAGS = -I m4
 
@@ -84,24 +85,26 @@ sysconf_DATA = xboard.conf
 
 ### icon files
 
-icondir = $(datadir)/icons/hicolor/48x48/apps
+icondir = @ICONSDIR@
 dist_icon_DATA = xboard.png
-svgicondir = $(datadir)/icons/hicolor/scalable/apps
+svgicondir = @SVGICONSDIR@
 dist_svgicon_DATA = xboard.svg
 
 
 ### desktop files for KDE and gnome
 
-Applicationsdir = $(datadir)/applications
+Applicationsdir = @DESKTOPDIR@
 Applications_DATA = xboard.desktop xboard-fen-viewer.desktop  xboard-pgn-viewer.desktop  xboard-tourney.desktop  xboard-config.desktop
 
 ### mime file
-mimedir = $(datadir)/mime/packages
+mimedir = @MIMEDIR@
 mime_DATA = xboard.xml
 
+gamedatadir = @GAMEDATADIR@
+
 ### directory and files for svgs
 
-svgdir = $(datadir)/games/xboard/themes/default
+svgdir = $(gamedatadir)/themes/default
 dist_svg_DATA = svg/icon_white.svg         svg/icon_black.svg      \
            svg/BlackAdvisor.svg       svg/WhiteAdvisor.svg    \
            svg/BlackArchbishop.svg    svg/WhiteArchbishop.svg  \
@@ -129,12 +132,25 @@ dist_svg_DATA = svg/icon_white.svg         svg/icon_black.svg      \
            svg/BlackQueen.svg      svg/WhiteQueen.svg        \
            svg/BlackRook.svg       svg/WhiteRook.svg         \
            svg/BlackUnicorn.svg            svg/WhiteUnicorn.svg      \
+           svg/BlackSword.svg      svg/WhiteSword.svg        \
+           svg/BlackHSword.svg     svg/WhiteHSword.svg       \
+           svg/BlackLeopard.svg            svg/WhiteLeopard.svg      \
+           svg/BlackLion.svg       svg/WhiteLion.svg         \
+           svg/BlackPromoBishop.svg svg/WhitePromoBishop.svg  \
+           svg/BlackPromoRook.svg   svg/WhitePromoRook.svg    \
+           svg/BlackPromoHorse.svg  svg/WhitePromoHorse.svg   \
+           svg/BlackPromoDragon.svg svg/WhitePromoDragon.svg  \
+           svg/BlackPromoSword.svg  svg/WhitePromoSword.svg   \
+           svg/BlackPromoHSword.svg svg/WhitePromoHSword.svg  \
+           svg/BlackHCrown.svg     svg/WhiteHCrown.svg       \
+           svg/BlackDolphin.svg            svg/WhiteDolphin.svg      \
+           svg/BlackClaw.svg       svg/WhiteClaw.svg         \
            svg/eo_Analyzing.svg     svg/eo_Black.svg          \
            svg/eo_Clear.svg         svg/eo_Ponder.svg         \
            svg/eo_Thinking.svg      svg/eo_Unknown.svg        \
            svg/eo_White.svg
 
-shogidir = $(datadir)/games/xboard/themes/shogi
+shogidir = $(gamedatadir)/themes/shogi
 dist_shogi_DATA = \
            themes/shogi/WhiteGold.svg        themes/shogi/WhiteCrownedBishop.svg\
            themes/shogi/WhiteBishop.svg      themes/shogi/WhiteKing.svg\
@@ -151,7 +167,7 @@ dist_shogi_DATA = \
            themes/shogi/BlackRook.svg        themes/shogi/BlackCrownedRook.svg\
            themes/shogi/BlackAdvisor.svg     themes/shogi/BlackGoldSilver.svg
 
-xiangqidir = $(datadir)/games/xboard/themes/xiangqi
+xiangqidir = $(gamedatadir)/themes/xiangqi
 dist_xiangqi_DATA = themes/xiangqi/BlackAdvisor.svg  themes/xiangqi/WhiteAdvisor.svg \
            themes/xiangqi/BlackCanon.svg    themes/xiangqi/WhiteCanon.svg    \
            themes/xiangqi/BlackElephant.svg themes/xiangqi/WhiteElephant.svg \
@@ -160,22 +176,27 @@ dist_xiangqi_DATA = themes/xiangqi/BlackAdvisor.svg  themes/xiangqi/WhiteAdvisor
            themes/xiangqi/BlackPawn.svg            themes/xiangqi/WhitePawn.svg     \
            themes/xiangqi/BlackRook.svg            themes/xiangqi/WhiteRook.svg
 
+### 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
+
 ### directory and files for pixmaps
 
-pixmapsdir = $(datadir)/games/xboard/pixmaps/textures
-dist_pixmaps_DATA = pixmaps/cross32.xpm pixmaps/cross48.xpm pixmaps/board32.xpm pixmaps/board48.xpm pixmaps/ini32.xpm pixmaps/ini48.xpm
+pixmapsdir = $(gamedatadir)/pixmaps/textures
+dist_pixmaps_DATA = pixmaps/cross32.png pixmaps/cross48.png pixmaps/board32.png pixmaps/board48.png pixmaps/ini32.png pixmaps/ini48.png
 
 ### directory and files for pngs
 
-pngdir = $(datadir)/games/xboard/themes/textures
+pngdir = $(gamedatadir)/themes/textures
 dist_png_DATA = png/hatch.png png/wood_d.png png/wood_l.png png/xqboard.png
 
 ### directory and files for sound files
 
-soundsdir = $(datadir)/games/xboard/sounds
+soundsdir = $(gamedatadir)/sounds
 dist_sounds_DATA = \
   sounds/cymbal.wav     sounds/pop2.wav   sounds/slap.wav     sounds/ding1.wav      sounds/laser.wav \
-  sounds/woodthunk.wav  sounds/gong.wav   sounds/penalty.wav  sounds/honkhonk.wav   sounds/phone.wav
+  sounds/woodthunk.wav  sounds/gong.wav   sounds/penalty.wav  sounds/honkhonk.wav   sounds/phone.wav  sounds/roar.wav
 
 
 ### set correct dir in xboard.conf
@@ -210,12 +231,12 @@ if ENABLE_UPDATE_MIMEDB
                $(XDG_DESKTOP_MENU) install --mode system --novendor xboard-fen-viewer.desktop;\
                $(XDG_DESKTOP_MENU) install --mode system --novendor xboard-tourney.desktop;\
                $(XDG_DESKTOP_MENU) install --mode system --novendor xboard-config.desktop;\
-               $(XDG_ICON_RESOURCE) install --context mimetypes --size 32 pixmaps/board32.xpm application-x-chess-pgn;\
-               $(XDG_ICON_RESOURCE) install --context mimetypes --size 32 pixmaps/cross32.xpm application-x-xboard-trn;\
-               $(XDG_ICON_RESOURCE) install --context mimetypes --size 32 pixmaps/ini32.xpm application-x-xboard-opt;\
-               $(XDG_ICON_RESOURCE) install --context mimetypes --size 48 pixmaps/board48.xpm application-x-chess-pgn;\
-               $(XDG_ICON_RESOURCE) install --context mimetypes --size 48 pixmaps/cross48.xpm application-x-xboard-trn;\
-               $(XDG_ICON_RESOURCE) install --context mimetypes --size 48 pixmaps/ini48.xpm application-x-xboard-opt;\
+               $(XDG_ICON_RESOURCE) install --context mimetypes --size 32 pixmaps/board32.png application-x-chess-pgn;\
+               $(XDG_ICON_RESOURCE) install --context mimetypes --size 32 pixmaps/cross32.png application-x-xboard-trn;\
+               $(XDG_ICON_RESOURCE) install --context mimetypes --size 32 pixmaps/ini32.png application-x-xboard-opt;\
+               $(XDG_ICON_RESOURCE) install --context mimetypes --size 48 pixmaps/board48.png application-x-chess-pgn;\
+               $(XDG_ICON_RESOURCE) install --context mimetypes --size 48 pixmaps/cross48.png application-x-xboard-trn;\
+               $(XDG_ICON_RESOURCE) install --context mimetypes --size 48 pixmaps/ini48.png application-x-xboard-opt;\
        fi
 endif
 
@@ -227,11 +248,11 @@ if ENABLE_UPDATE_MIMEDB
                $(XDG_DESKTOP_MENU) uninstall --mode system --novendor xboard-fen-viewer.desktop;\
                $(XDG_DESKTOP_MENU) uninstall --mode system --novendor xboard-tourney.desktop;\
                $(XDG_DESKTOP_MENU) uninstall --mode system --novendor xboard-config.desktop;\
-               $(XDG_ICON_RESOURCE) uninstall --context mimetypes --size 32 board32.xpm application-x-chess-pgn;\
-               $(XDG_ICON_RESOURCE) uninstall --context mimetypes --size 32 cross32.xpm application-x-xboard-trn;\
-               $(XDG_ICON_RESOURCE) uninstall --context mimetypes --size 32 ini32.xpm application-x-xboard-opt;\
-               $(XDG_ICON_RESOURCE) uninstall --context mimetypes --size 48 board48.xpm application-x-chess-pgn;\
-               $(XDG_ICON_RESOURCE) uninstall --context mimetypes --size 48 cross48.xpm application-x-xboard-trn;\
-               $(XDG_ICON_RESOURCE) uninstall --context mimetypes --size 48 ini48.xpm application-x-xboard-opt;\
+               $(XDG_ICON_RESOURCE) uninstall --context mimetypes --size 32 board32.png application-x-chess-pgn;\
+               $(XDG_ICON_RESOURCE) uninstall --context mimetypes --size 32 cross32.png application-x-xboard-trn;\
+               $(XDG_ICON_RESOURCE) uninstall --context mimetypes --size 32 ini32.png application-x-xboard-opt;\
+               $(XDG_ICON_RESOURCE) uninstall --context mimetypes --size 48 board48.png application-x-chess-pgn;\
+               $(XDG_ICON_RESOURCE) uninstall --context mimetypes --size 48 cross48.png application-x-xboard-trn;\
+               $(XDG_ICON_RESOURCE) uninstall --context mimetypes --size 48 ini48.png application-x-xboard-opt;\
        fi
 endif
diff --git a/args.h b/args.h
index 660e271..91de0bf 100644 (file)
--- a/args.h
+++ b/args.h
@@ -60,7 +60,7 @@
 typedef enum {
   ArgString, ArgInt, ArgFloat, ArgBoolean, ArgTrue, ArgFalse, ArgNone,
   ArgColor, ArgAttribs, ArgFilename, ArgBoardSize, ArgFont, ArgCommSettings,
-  ArgSettingsFilename, ArgBackupSettingsFile, ArgTwo,
+  ArgSettingsFilename, ArgBackupSettingsFile, ArgTwo, ArgInstall, ArgMaster,
   ArgX, ArgY, ArgZ // [HGM] placement: for window-placement options stored relative to main window
 } ArgType;
 
@@ -102,7 +102,10 @@ typedef struct {
 IcsTextMenuEntry icsTextMenuEntry[ICS_TEXT_MENU_SIZE];
 
 int junk;
+unsigned int saveDate;
+unsigned int dateStamp;
 Boolean singleList;
+Boolean autoClose;
 char *homeDir;
 char *firstEngineLine;
 char *secondEngineLine;
@@ -149,6 +152,9 @@ ArgDescriptor argDescriptors[] = {
   { "loadGameFile", ArgFilename, (void *) &appData.loadGameFile, FALSE, INVALID },
   { "", ArgNone, NULL, FALSE, INVALID },
   /* keyword arguments */
+  { "saveDate", ArgInt, (void *) &saveDate, TRUE, 0 },
+  { "date", ArgInt, (void *) &dateStamp, FALSE, 0 },
+  { "autoClose", ArgTrue, (void *) &autoClose, FALSE, FALSE },
   JAWS_ARGS
   { "whitePieceColor", ArgColor, (void *) 0, TRUE, (ArgIniType) WHITE_PIECE_COLOR },
   { "wpc", ArgColor, (void *) 0, FALSE, INVALID },
@@ -468,6 +474,7 @@ ArgDescriptor argDescriptors[] = {
   { "soundSeek", ArgFilename, (void *) &appData.soundSeek, TRUE, (ArgIniType) "" },
   { "soundMove", ArgFilename, (void *) &appData.soundMove, TRUE, (ArgIniType) "" },
   { "soundBell", ArgFilename, (void *) &appData.soundBell, TRUE, (ArgIniType) SOUND_BELL },
+  { "soundRoar", ArgFilename, (void *) &appData.soundRoar, TRUE, (ArgIniType) "" },
   { "soundIcsWin", ArgFilename, (void *) &appData.soundIcsWin, TRUE, (ArgIniType) "" },
   { "soundIcsLoss", ArgFilename, (void *) &appData.soundIcsLoss, TRUE, (ArgIniType) "" },
   { "soundIcsDraw", ArgFilename, (void *) &appData.soundIcsDraw, TRUE, (ArgIniType) "" },
@@ -505,7 +512,9 @@ ArgDescriptor argDescriptors[] = {
     TRUE, (ArgIniType) FCP_NAMES },
   { "secondChessProgramNames", ArgString, (void *) &secondChessProgramNames,
     !XBOARD, (ArgIniType) SCP_NAMES },
-  { "themeNames", ArgString, (void *) &appData.themeNames, !XBOARD, (ArgIniType) "native -upf false -ub false -ubt false -pid \"\"\n" },
+  { "themeNames", ArgString, (void *) &appData.themeNames, TRUE, (ArgIniType) "native -upf false -ub false -ubt false -pid \"\"\n" },
+  { "addMasterOption", ArgMaster, NULL, FALSE, INVALID },
+  { "installEngine", ArgInstall, (void *) &firstChessProgramNames, FALSE, (ArgIniType) "" },
   { "initialMode", ArgString, (void *) &appData.initialMode, FALSE, (ArgIniType) "" },
   { "mode", ArgString, (void *) &appData.initialMode, FALSE, INVALID },
   { "variant", ArgString, (void *) &appData.variant, FALSE, (ArgIniType) "normal" },
@@ -549,6 +558,7 @@ ArgDescriptor argDescriptors[] = {
   { "pgnEventHeader", ArgString, (void *) &appData.pgnEventHeader, TRUE, (ArgIniType) "Computer Chess Game" },
   { "defaultFrcPosition", ArgInt, (void *) &appData.defaultFrcPosition, TRUE, (ArgIniType) -1 },
   { "shuffleOpenings", ArgTrue, (void *) &shuffleOpenings, FALSE, INVALID },
+  { "fischerCastling", ArgTrue, (void *) &appData.fischerCastling, FALSE, INVALID },
   { "gameListTags", ArgString, (void *) &appData.gameListTags, TRUE, (ArgIniType) GLT_DEFAULT_TAGS },
   { "saveOutOfBookInfo", ArgBoolean, (void *) &appData.saveOutOfBookInfo, TRUE, (ArgIniType) TRUE },
   { "showEvalInMoveHistory", ArgBoolean, (void *) &appData.showEvalInMoveHistory, TRUE, (ArgIniType) TRUE },
@@ -597,6 +607,8 @@ ArgDescriptor argDescriptors[] = {
   { "useBorder", ArgBoolean, (void *) &appData.useBorder, TRUE, (ArgIniType) FALSE },
   { "ub", ArgBoolean, (void *) &appData.useBorder, FALSE, INVALID },
   { "border", ArgFilename, (void *) &appData.border, TRUE, (ArgIniType) "" },
+  { "finger", ArgFilename, (void *) &appData.finger, FALSE, (ArgIniType) "" },
+  { "inscriptions", ArgString, (void *) &appData.inscriptions, XBOARD, (ArgIniType) "" },
 
   // [HGM] tournament options
   { "tourneyFile", ArgFilename, (void *) &appData.tourneyFile, FALSE, (ArgIniType) "" },
@@ -669,6 +681,8 @@ ArgDescriptor argDescriptors[] = {
   { "scoreWhite", ArgBoolean, (void *) &appData.scoreWhite, TRUE, FALSE },
   { "evalZoom", ArgInt, (void *) &appData.zoom, TRUE, (ArgIniType) 1 },
   { "evalThreshold", ArgInt, (void *) &appData.evalThreshold, TRUE, (ArgIniType) 25 },
+  { "firstPseudo", ArgTrue, (void *) &appData.pseudo[0], FALSE, FALSE },
+  { "secondPseudo", ArgTrue, (void *) &appData.pseudo[1], FALSE, FALSE },
   { "fSAN", ArgTrue, (void *) &appData.pvSAN[0], FALSE, FALSE },
   { "sSAN", ArgTrue, (void *) &appData.pvSAN[1], FALSE, FALSE },
   { "pairingEngine", ArgFilename, (void *) &appData.pairingEngine, TRUE, "" },
@@ -687,6 +701,9 @@ ArgDescriptor argDescriptors[] = {
   { "topLevel", ArgBoolean, (void *) &appData.topLevel, XBOARD, (ArgIniType) TOPLEVEL },
   { "dialogColor", ArgString, (void *) &appData.dialogColor, XBOARD, (ArgIniType) "" },
   { "buttonColor", ArgString, (void *) &appData.buttonColor, XBOARD, (ArgIniType) "" },
+  { "firstDrawDepth", ArgInt, (void *) &appData.drawDepth[0], FALSE, (ArgIniType) 0 },
+  { "secondDrawDepth", ArgInt, (void *) &appData.drawDepth[1], FALSE, (ArgIniType) 0 },
+  { "memoHeaders", ArgBoolean, (void *) &appData.headers, TRUE, (ArgIniType) FALSE },
 
 #if ZIPPY
   { "zippyTalk", ArgBoolean, (void *) &appData.zippyTalk, FALSE, (ArgIniType) ZIPPY_TALK },
@@ -757,6 +774,7 @@ ArgDescriptor argDescriptors[] = {
   { "winHeight", ArgInt, (void *) &wpMain.height, TRUE, INVALID }, //       for attaching auxiliary windows to them
   { "x", ArgInt, (void *) &wpMain.x, TRUE, (ArgIniType) CW_USEDEFAULT },
   { "y", ArgInt, (void *) &wpMain.y, TRUE, (ArgIniType) CW_USEDEFAULT },
+  { "icsUp", ArgBoolean, (void *) &wpConsole.visible, XBOARD, (ArgIniType) FALSE },
   { "icsX", ArgX,   (void *) &wpConsole.x, TRUE, (ArgIniType) CW_USEDEFAULT },
   { "icsY", ArgY,   (void *) &wpConsole.y, TRUE, (ArgIniType) CW_USEDEFAULT },
   { "icsW", ArgInt, (void *) &wpConsole.width, TRUE, (ArgIniType) CW_USEDEFAULT },
@@ -822,6 +840,30 @@ ExitArgError(char *msg, char *badArg, Boolean quit)
   exit(2);
 }
 
+void
+AppendToSettingsFile (char *line)
+{
+  char buf[MSG_SIZ];
+  FILE *f;
+  int c;
+  if(f = fopen(SETTINGS_FILE, "r")) {
+    do {
+      int i = 0;
+      while((buf[i] = c = fgetc(f)) != '\n' && c != EOF) if(i < MSG_SIZ-1) i++;
+      buf[i] = NULLCHAR;
+      if(!strcmp(line, buf)) return; // line occurs
+    } while(c != EOF);
+    // line did not occur; add it
+    fclose(f);
+    if(f = fopen(SETTINGS_FILE, "a")) {
+      TimeMark now;
+      GetTimeMark(&now);
+      fprintf(f, "-date %10lu\n%s\n", now.sec, line);
+      fclose(f);
+    }
+  }
+}
+
 int
 ValidateInt(char *s)
 {
@@ -873,6 +915,19 @@ ParseSettingsFile(char *name, char **addr)
     }
   if (ok) {
     f = fopen(fullname, "r");
+#ifdef DATADIR
+    if(f == NULL && *fullname != '/' && !addr) {         // when a relative name did not work
+       char buf[MSG_SIZ];
+       snprintf(buf, MSG_SIZ, "~/.xboard/themes/conf/%s", name);
+       MySearchPath(installDir, buf, fullname); // first look in user's own files
+       f = fopen(fullname, "r");
+       if(f == NULL) {
+           snprintf(buf, MSG_SIZ, "%s/themes/conf", DATADIR);
+           MySearchPath(buf, name, fullname); // also look in standard place
+           f = fopen(fullname, "r");
+       }
+    }
+#endif
     if (f != NULL) {
       if (addr != NULL) {
            ASSIGN(*addr, fullname);
@@ -1065,13 +1120,13 @@ ParseArgs(GetFunc get, void *cl)
     if(posflag) { // positional argument: the argName was implied, and per default set as -lgf
       int len = strlen(argValue) - 4; // start of filename extension
       if(len < 0) len = 0;
-      if(!strcasecmp(argValue + len, ".trn")) {
+      if(!StrCaseCmp(argValue + len, ".trn")) {
         ad = &argDescriptors[2]; // correct implied type to -tf
         appData.tourney = TRUE; // let it parse -tourneyOptions later
-      } else if(!strcasecmp(argValue + len, ".fen") || !strcasecmp(argValue + len, ".epd")) {
+      } else if(!StrCaseCmp(argValue + len, ".fen") || !StrCaseCmp(argValue + len, ".epd")) {
         ad = &argDescriptors[1]; // correct implied type to -lpf
         appData.viewer = TRUE;
-      } else if(!strcasecmp(argValue + len, ".ini") || !strcasecmp(argValue + len, ".xop")) {
+      } else if(!StrCaseCmp(argValue + len, ".ini") || !StrCaseCmp(argValue + len, ".xop")) {
         ad = &argDescriptors[0]; // correct implied type to -opt
       } else if(GetEngineLine(argValue, 11)) {
         ad = &argDescriptors[3]; // correct implied type to -is
@@ -1166,6 +1221,20 @@ ParseArgs(GetFunc get, void *cl)
       ParseCommPortSettings(argValue);
       break;
 
+    case ArgMaster:
+      AppendToSettingsFile(argValue);
+      break;
+
+    case ArgInstall:
+      q = *(char **) ad->argLoc;
+      if((saveDate == 0 || saveDate - dateStamp < 0) && !strstr(q, argValue) ) {
+        int l = strlen(q) + strlen(argValue);
+        *(char **) ad->argLoc = malloc(l+2);
+        snprintf(*(char **) ad->argLoc, l+2, "%s%s\n", q, argValue);
+        free(q);
+      }
+      break;
+
     case ArgNone:
       ExitArgError(_("Unrecognized argument %s"), argValue, TRUE);
       break;
@@ -1334,6 +1403,8 @@ InitAppData(char *lpCmdLine)
      appData.NrRanks > BOARD_RANKS   )
       DisplayFatalError("Recompile with BOARD_RANKS or BOARD_FILES, to support this size", 0, 2);
 
+  if(!*appData.secondChessProgram) { ASSIGN(appData.secondChessProgram, appData.firstChessProgram); } // [HGM] scp defaults to fcp
+
   /* [HGM] After parsing the options from the .ini file, and overruling them
    * with options from the command line, we now make an even higher priority
    * overrule by WB options attached to the engine command line. This so that
@@ -1401,6 +1472,11 @@ InitAppData(char *lpCmdLine)
     appData.savePositionFile = strdup(buf);
   }
 
+  if(autoClose) { // was called for updating settingsfile only
+    if(saveSettingsOnExit) SaveSettings(settingsFileName);
+    exit(0);
+  }
+
   /* Finish initialization for fonts and sounds */
   CreateFonts();
 
@@ -1431,8 +1507,11 @@ SaveSettings(char* name)
   ArgDescriptor *ad;
   char dir[MSG_SIZ], buf[MSG_SIZ];
   int mps = appData.movesPerSession;
+  TimeMark now;
+
+  if (!MainWindowUp() && !autoClose) return;
 
-  if (!MainWindowUp()) return;
+  GetTimeMark(&now); saveDate = now.sec;
 
   GetCurrentDirectory(MSG_SIZ, dir);
   if(MySearchPath(installDir, name, buf)) {
@@ -1532,10 +1611,17 @@ SaveSettings(char* name)
       break;
     case ArgFilename:
       if(*(char**)ad->argLoc == NULL) break; // just in case
-      if (strchr(*(char **)ad->argLoc, '\"')) {
-       fprintf(f, OPTCHAR "%s" SEPCHAR "'%s'\n", ad->argName, *(char **)ad->argLoc);
-      } else {
-       fprintf(f, OPTCHAR "%s" SEPCHAR "\"%s\"\n", ad->argName, *(char **)ad->argLoc);
+      { char buf[MSG_SIZ];
+        snprintf(buf, MSG_SIZ, "%s", *(char**)ad->argLoc);
+#ifdef __APPLE__
+        if(strstr(buf, DATADIR) == buf)
+          snprintf(buf, MSG_SIZ, "~~%s", *(char**)ad->argLoc + strlen(DATADIR));
+#endif
+        if (strchr(buf, '\"')) {
+          fprintf(f, OPTCHAR "%s" SEPCHAR "'%s'\n", ad->argName, buf);
+        } else {
+          fprintf(f, OPTCHAR "%s" SEPCHAR "\"%s\"\n", ad->argName, buf);
+        }
       }
       break;
     case ArgBoardSize:
@@ -1550,6 +1636,8 @@ SaveSettings(char* name)
     case ArgNone:
     case ArgBackupSettingsFile:
     case ArgSettingsFilename: ;
+    case ArgMaster: ;
+    case ArgInstall: ;
     }
   }
   fclose(f);
index 2744609..0ef05b0 100644 (file)
--- a/backend.c
+++ b/backend.c
 #ifdef WIN32
 #include <windows.h>
 
-int flock(int f, int code);
-#define LOCK_EX 2
-#define SLASH '\\'
+    int flock(int f, int code);
+#   define LOCK_EX 2
+#   define SLASH '\\'
+
+#   ifdef ARC_64BIT
+#       define EGBB_NAME "egbbdll64.dll"
+#   else
+#       define EGBB_NAME "egbbdll.dll"
+#   endif
 
 #else
 
-#include <sys/file.h>
-#define SLASH '/'
+#   include <sys/file.h>
+#   define SLASH '/'
+
+#   include <dlfcn.h>
+#   ifdef ARC_64BIT
+#       define EGBB_NAME "egbbso64.so"
+#   else
+#       define EGBB_NAME "egbbso.so"
+#   endif
+    // kludge to allow Windows code in back-end by converting it to corresponding Linux code 
+#   define CDECL
+#   define HMODULE void *
+#   define LoadLibrary(x) dlopen(x, RTLD_LAZY)
+#   define GetProcAddress dlsym
 
 #endif
 
@@ -130,6 +148,7 @@ extern int gettimeofday(struct timeval *, struct timezone *);
 #endif
 #include "backendz.h"
 #include "evalgraph.h"
+#include "engineoutput.h"
 #include "gettext.h"
 
 #ifdef ENABLE_NLS
@@ -225,14 +244,13 @@ void DisplayTwoMachinesTitle P(());
 static void ExcludeClick P((int index));
 void ToggleSecond P((void));
 void PauseEngine P((ChessProgramState *cps));
-static int NonStandardBoardSize P((void));
+static int NonStandardBoardSize P((VariantClass v, int w, int h, int s));
 
 #ifdef WIN32
        extern void ConsoleCreate();
 #endif
 
 ChessProgramState *WhitePlayer();
-void InsertIntoMemo P((int which, char *text)); // [HGM] kibitz: in engineo.c
 int VerifyDisplayMode P(());
 
 char *GetInfoFromComment( int, char * ); // [HGM] PV time: returns stripped comment
@@ -269,11 +287,14 @@ char chatPartner[MAX_CHAT][MSG_SIZ]; /* [HGM] chat: list of chatting partners */
 extern int chatCount;
 int chattingPartner;
 char marker[BOARD_RANKS][BOARD_FILES]; /* [HGM] marks for target squares */
+char legal[BOARD_RANKS][BOARD_FILES];  /* [HGM] legal target squares */
 char lastMsg[MSG_SIZ];
+char lastTalker[MSG_SIZ];
 ChessSquare pieceSweep = EmptySquare;
 ChessSquare promoSweep = EmptySquare, defaultPromoChoice;
 int promoDefaultAltered;
 int keepInfo = 0; /* [HGM] to protect PGN tags in auto-step game analysis */
+static int initPing = -1;
 
 /* States for ics_getting_history */
 #define H_FALSE 0
@@ -388,12 +409,19 @@ PosFlags (index)
   case VariantShatranj:
   case VariantCourier:
   case VariantMakruk:
+  case VariantASEAN:
   case VariantGrand:
     flags &= ~F_ALL_CASTLE_OK;
     break;
+  case VariantChu:
+  case VariantChuChess:
+  case VariantLion:
+    flags |= F_NULL_MOVE;
+    break;
   default:
     break;
   }
+  if(appData.fischerCastling) flags |= F_FRC_TYPE_CASTLING, flags &= ~F_ALL_CASTLE_OK; // [HGM] fischer
   return flags;
 }
 
@@ -557,6 +585,20 @@ ChessSquare makrukArray[2][BOARD_FILES] = { /* [HGM] (movGen knows about Shatran
         BlackKing, BlackMan, BlackKnight, BlackRook }
 };
 
+ChessSquare aseanArray[2][BOARD_FILES] = { /* [HGM] (movGen knows about Shatranj Q and P) */
+    { WhiteRook, WhiteKnight, WhiteMan, WhiteFerz,
+        WhiteKing, WhiteMan, WhiteKnight, WhiteRook },
+    { BlackRook, BlackKnight, BlackMan, BlackFerz,
+        BlackKing, BlackMan, BlackKnight, BlackRook }
+};
+
+ChessSquare  lionArray[2][BOARD_FILES] = {
+    { WhiteRook, WhiteLion, WhiteBishop, WhiteQueen,
+       WhiteKing, WhiteBishop, WhiteKnight, WhiteRook },
+    { BlackRook, BlackLion, BlackBishop, BlackQueen,
+       BlackKing, BlackBishop, BlackKnight, BlackRook }
+};
+
 
 #if (BOARD_FILES>=10)
 ChessSquare ShogiArray[2][BOARD_FILES] = {
@@ -601,6 +643,13 @@ ChessSquare GrandArray[2][BOARD_FILES] = {
         BlackMarshall, BlackAngel, BlackBishop, BlackKnight, EmptySquare }
 };
 
+ChessSquare ChuChessArray[2][BOARD_FILES] = {
+    { WhiteMan, WhiteKnight, WhiteBishop, WhiteCardinal, WhiteLion,
+        WhiteQueen, WhiteDragon, WhiteBishop, WhiteKnight, WhiteMan },
+    { BlackMan, BlackKnight, BlackBishop, BlackDragon, BlackQueen,
+        BlackLion, BlackCardinal, BlackBishop, BlackKnight, BlackMan }
+};
+
 #ifdef GOTHIC
 ChessSquare GothicArray[2][BOARD_FILES] = {
     { WhiteRook, WhiteKnight, WhiteBishop, WhiteQueen, WhiteMarshall,
@@ -637,8 +686,23 @@ ChessSquare CourierArray[2][BOARD_FILES] = {
     { BlackRook, BlackKnight, BlackAlfil, BlackBishop, BlackMan, BlackKing,
         BlackFerz, BlackWazir, BlackBishop, BlackAlfil, BlackKnight, BlackRook }
 };
+ChessSquare ChuArray[6][BOARD_FILES] = {
+    { WhiteLance, WhiteUnicorn, WhiteMan, WhiteFerz, WhiteWazir, WhiteKing,
+      WhiteAlfil, WhiteWazir, WhiteFerz, WhiteMan, WhiteUnicorn, WhiteLance },
+    { BlackLance, BlackUnicorn, BlackMan, BlackFerz, BlackWazir, BlackAlfil,
+      BlackKing, BlackWazir, BlackFerz, BlackMan, BlackUnicorn, BlackLance },
+    { WhiteCannon, EmptySquare, WhiteBishop, EmptySquare, WhiteNightrider, WhiteMarshall,
+      WhiteAngel, WhiteNightrider, EmptySquare, WhiteBishop, EmptySquare, WhiteCannon },
+    { BlackCannon, EmptySquare, BlackBishop, EmptySquare, BlackNightrider, BlackAngel,
+      BlackMarshall, BlackNightrider, EmptySquare, BlackBishop, EmptySquare, BlackCannon },
+    { WhiteFalcon, WhiteSilver, WhiteRook, WhiteCardinal, WhiteDragon, WhiteLion,
+      WhiteQueen, WhiteDragon, WhiteCardinal, WhiteRook, WhiteSilver, WhiteFalcon },
+    { BlackFalcon, BlackSilver, BlackRook, BlackCardinal, BlackDragon, BlackQueen,
+      BlackLion, BlackDragon, BlackCardinal, BlackRook, BlackSilver, BlackFalcon }
+};
 #else // !(BOARD_FILES>=12)
 #define CourierArray CapablancaArray
+#define ChuArray CapablancaArray
 #endif // !(BOARD_FILES>=12)
 
 
@@ -720,8 +784,7 @@ UnloadEngine (ChessProgramState *cps)
            ExitAnalyzeMode();
             DoSleep( appData.delayBeforeQuit );
            SendToProgram("quit\n", cps);
-            DoSleep( appData.delayAfterQuit );
-           DestroyChildProcess(cps->pr, cps->useSigterm);
+           DestroyChildProcess(cps->pr, 4 + cps->useSigterm);
        }
        cps->pr = NoProc;
        if(appData.debugMode) fprintf(debugFP, "Unload %s\n", cps->which);
@@ -789,6 +852,7 @@ InitEngine (ChessProgramState *cps, int n)
     cps->analyzing = FALSE;
     cps->initDone = FALSE;
     cps->reload = FALSE;
+    cps->pseudo = appData.pseudo[n];
 
     /* New features added by Tord: */
     cps->useFEN960 = FALSE;
@@ -806,6 +870,7 @@ InitEngine (ChessProgramState *cps, int n)
     /* [HGM] debug */
     cps->debug = FALSE;
 
+    cps->drawDepth = appData.drawDepth[n];
     cps->supportsNPS = UNKNOWN;
     cps->memSize = FALSE;
     cps->maxCores = FALSE;
@@ -817,6 +882,7 @@ InitEngine (ChessProgramState *cps, int n)
     cps->scoreIsAbsolute = appData.scoreIsAbsolute[n]; /* [AS] */
     cps->isUCI = appData.isUCI[n]; /* [AS] */
     cps->hasOwnBookUCI = appData.hasOwnBookUCI[n]; /* [AS] */
+    cps->highlight = 0;
 
     if (appData.protocolVersion[n] > PROTOVER
        || appData.protocolVersion[n] < 1)
@@ -915,7 +981,7 @@ char *insert, *wbOptions; // point in ChessProgramNames were we should insert ne
 void
 Load (ChessProgramState *cps, int i)
 {
-    char *p, *q, buf[MSG_SIZ], command[MSG_SIZ], buf2[MSG_SIZ];
+    char *p, *q, buf[MSG_SIZ], command[MSG_SIZ], buf2[MSG_SIZ], buf3[MSG_SIZ], jar;
     if(engineLine && engineLine[0]) { // an engine was selected from the combo box
        snprintf(buf, MSG_SIZ, "-fcp %s", engineLine);
        SwapEngines(i); // kludge to parse -f* / -first* like it is -s* / -second*
@@ -939,11 +1005,13 @@ Load (ChessProgramState *cps, int i)
        p[-1] = SLASH;
        if(SLASH == '/' && p - engineName > 1) *(p -= 2) = '.'; // for XBoard use ./exeName as command after split!
     } else { ASSIGN(appData.directory[i], "."); }
+    jar = (strstr(p, ".jar") == p + strlen(p) - 4);
     if(params[0]) {
        if(strchr(p, ' ') && !strchr(p, '"')) snprintf(buf2, MSG_SIZ, "\"%s\"", p), p = buf2; // quote if it contains spaces
        snprintf(command, MSG_SIZ, "%s %s", p, params);
        p = command;
     }
+    if(jar) { snprintf(buf3, MSG_SIZ, "java -jar %s", p); p = buf3; }
     ASSIGN(appData.chessProgram[i], p);
     appData.isUCI[i] = isUCI;
     appData.protocolVersion[i] = v1 ? 1 : PROTOVER;
@@ -1138,6 +1206,7 @@ InitBackEnd1 ()
       case VariantCapablanca: /* [HGM] should work */
       case VariantCourier:    /* [HGM] initial forced moves not implemented */
       case VariantShogi:      /* [HGM] could still mate with pawn drop */
+      case VariantChu:        /* [HGM] experimental */
       case VariantKnightmate: /* [HGM] should work */
       case VariantCylinder:   /* [HGM] untested */
       case VariantFalcon:     /* [HGM] untested */
@@ -1158,6 +1227,7 @@ InitBackEnd1 ()
       case Variant3Check:     /* should work except for win condition */
       case VariantShatranj:   /* should work except for all win conditions */
       case VariantMakruk:     /* should work except for draw countdown */
+      case VariantASEAN :     /* should work except for draw countdown */
       case VariantBerolina:   /* might work if TestLegality is off */
       case VariantCapaRandom: /* should work */
       case VariantJanus:      /* should work */
@@ -1166,6 +1236,8 @@ InitBackEnd1 ()
       case VariantSChess:     /* S-Chess, should work */
       case VariantGrand:      /* should work */
       case VariantSpartan:    /* should work */
+      case VariantLion:       /* should work */
+      case VariantChuChess:   /* should work */
        break;
       }
     }
@@ -1485,7 +1557,7 @@ MatchEvent (int mode)
                        NextTourneyGame(-1, &dummy);
                        ReserveGame(-1, 0);
                        if(nextGame <= appData.matchGames) {
-                           DisplayNote(_("You restarted an already completed tourney\nOne more cycle will now be added to it\nGames commence in 10 sec"));
+                           DisplayNote(_("You restarted an already completed tourney.\nOne more cycle will now be added to it.\nGames commence in 10 sec."));
                            matchMode = mode;
                            ScheduleDelayedEvent(NextMatchGame, 10000);
                            return;
@@ -1518,6 +1590,23 @@ InitBackEnd3 P((void))
     char buf[MSG_SIZ];
     int err, len;
 
+    if(!appData.icsActive && !appData.noChessProgram && !appData.matchMode &&                         // mode involves only first engine
+       !strcmp(appData.variant, "normal") &&                                                          // no explicit variant request
+        appData.NrRanks == -1 && appData.NrFiles == -1 && appData.holdingsSize == -1 &&               // no size overrides requested
+       !SupportedVariant(first.variants, VariantNormal, 8, 8, 0, first.protocolVersion, "") &&        // but 'normal' won't work with engine
+       !SupportedVariant(first.variants, VariantFischeRandom, 8, 8, 0, first.protocolVersion, "") ) { // nor will Chess960
+       char c, *q = first.variants, *p = strchr(q, ',');
+       if(p) *p = NULLCHAR;
+       if(StringToVariant(q) != VariantUnknown) { // the engine can play a recognized variant, however
+           int w, h, s;
+           if(sscanf(q, "%dx%d+%d_%c", &w, &h, &s, &c) == 4) // get size overrides the engine needs with it (if any)
+               appData.NrFiles = w, appData.NrRanks = h, appData.holdingsSize = s, q = strchr(q, '_') + 1;
+           ASSIGN(appData.variant, q); // fake user requested the first variant played by the engine
+           Reset(TRUE, FALSE);         // and re-initialize
+       }
+       if(p) *p = ',';
+    }
+
     InitChessProgram(&first, startedFromSetupPosition);
 
     if(!appData.noChessProgram) {  /* [HGM] tidy: redo program version to use name from myname feature */
@@ -1995,10 +2084,12 @@ StripHighlight (char *s)
     return retbuf;
 }
 
+char engineVariant[MSG_SIZ];
 char *variantNames[] = VARIANT_NAMES;
 char *
 VariantName (VariantClass v)
 {
+    if(v == VariantUnknown || *engineVariant) return engineVariant;
     return variantNames[v];
 }
 
@@ -2028,7 +2119,8 @@ StringToVariant (char *e)
        found = TRUE;
     } else
     for (i=0; i<sizeof(variantNames)/sizeof(char*); i++) {
-      if (StrCaseStr(e, variantNames[i])) {
+      if (p = StrCaseStr(e, variantNames[i])) {
+       if(p && i >= VariantShogi && isalpha(p[strlen(variantNames[i])])) continue;
        v = (VariantClass) i;
        found = TRUE;
        break;
@@ -2744,7 +2836,7 @@ read_from_ics (InputSourceRef isr, VOIDSTAR closure, char *data, int count, int
     int backup;    /* [DM] For zippy color lines */
     char *p;
     char talker[MSG_SIZ]; // [HGM] chat
-    int channel;
+    int channel, collective=0;
 
     connectionAlive = TRUE; // [HGM] alive: I think, therefore I am...
 
@@ -2986,8 +3078,18 @@ read_from_ics (InputSourceRef isr, VOIDSTAR closure, char *data, int count, int
                        char mess[MSG_SIZ];
                        snprintf(mess, MSG_SIZ, "%s%s", talker, parse);
                        OutputChatMessage(chattingPartner, mess);
+                       if(collective == 1) { // broadcasted talk also goes to private chatbox of talker
+                           int p;
+                           talker[strlen(talker+1)-1] = NULLCHAR; // strip closing delimiter
+                           for(p=0; p<MAX_CHAT; p++) if(!StrCaseCmp(talker+1, chatPartner[p])) {
+                               snprintf(mess, MSG_SIZ, "%s: %s", chatPartner[chattingPartner], parse);
+                               OutputChatMessage(p, mess);
+                               break;
+                           }
+                       }
                        chattingPartner = -1;
-                       next_out = i+1; // [HGM] suppress printing in ICS window
+                       if(collective != 3) next_out = i+1; // [HGM] suppress printing in ICS window
+                       collective = 0;
                    } else
                    if(!suppressKibitz) // [HGM] kibitz
                        AppendComment(forwardMostMove, StripHighlight(parse), TRUE);
@@ -3014,8 +3116,10 @@ read_from_ics (InputSourceRef isr, VOIDSTAR closure, char *data, int count, int
                        } else {
                            char tmp[MSG_SIZ];
                            if(gameMode == IcsObserving) // restore original ICS messages
+                             /* TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers */
                              snprintf(tmp, MSG_SIZ, "%s kibitzes: %s", star_match[0], parse);
                            else
+                           /* TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers */
                            snprintf(tmp, MSG_SIZ, _("your opponent kibitzes: %s"), parse);
                            SendToPlayer(tmp, strlen(tmp));
                        }
@@ -3201,18 +3305,20 @@ read_from_ics (InputSourceRef isr, VOIDSTAR closure, char *data, int count, int
                                           looking_at(buf, &i, "*(*)(*)(*)(*):") && sscanf(star_match[4], "%d", &channel) == 1 )) {
                int p;
                sscanf(star_match[0], "%[^(]", talker+1); // strip (C) or (U) off ICS handle
-               chattingPartner = -1;
+               chattingPartner = -1; collective = 0;
 
                if(channel >= 0) // channel broadcast; look if there is a chatbox for this channel
                for(p=0; p<MAX_CHAT; p++) {
+                   collective = 1;
                    if(chatPartner[p][0] >= '0' && chatPartner[p][0] <= '9' && channel == atoi(chatPartner[p])) {
                    talker[0] = '['; strcat(talker, "] ");
-                   Colorize(channel == 1 ? ColorChannel1 : ColorChannel, FALSE);
+                   Colorize((channel == 1 ? ColorChannel1 : ColorChannel), FALSE);
                    chattingPartner = p; break;
                    }
                } else
                if(buf[i-3] == 'e') // kibitz; look if there is a KIBITZ chatbox
                for(p=0; p<MAX_CHAT; p++) {
+                   collective = 1;
                    if(!strcmp("kibitzes", chatPartner[p])) {
                        talker[0] = '['; strcat(talker, "] ");
                        chattingPartner = p; break;
@@ -3220,6 +3326,7 @@ read_from_ics (InputSourceRef isr, VOIDSTAR closure, char *data, int count, int
                } else
                if(buf[i-3] == 'r') // whisper; look if there is a WHISPER chatbox
                for(p=0; p<MAX_CHAT; p++) {
+                   collective = 1;
                    if(!strcmp("whispers", chatPartner[p])) {
                        talker[0] = '['; strcat(talker, "] ");
                        chattingPartner = p; break;
@@ -3228,6 +3335,7 @@ read_from_ics (InputSourceRef isr, VOIDSTAR closure, char *data, int count, int
                if(buf[i-3] == 't' || buf[oldi+2] == '>') {// shout, c-shout or it; look if there is a 'shouts' chatbox
                  if(buf[i-8] == '-' && buf[i-3] == 't')
                  for(p=0; p<MAX_CHAT; p++) { // c-shout; check if dedicatesd c-shout box exists
+                   collective = 1;
                    if(!strcmp("c-shouts", chatPartner[p])) {
                        talker[0] = '('; strcat(talker, ") "); Colorize(ColorSShout, FALSE);
                        chattingPartner = p; break;
@@ -3235,6 +3343,7 @@ read_from_ics (InputSourceRef isr, VOIDSTAR closure, char *data, int count, int
                  }
                  if(chattingPartner < 0)
                  for(p=0; p<MAX_CHAT; p++) {
+                   collective = 1;
                    if(!strcmp("shouts", chatPartner[p])) {
                        if(buf[oldi+2] == '>') { talker[0] = '<'; strcat(talker, "> "); Colorize(ColorShout, FALSE); }
                        else if(buf[i-8] == '-') { talker[0] = '('; strcat(talker, ") "); Colorize(ColorSShout, FALSE); }
@@ -3245,18 +3354,23 @@ read_from_ics (InputSourceRef isr, VOIDSTAR closure, char *data, int count, int
                }
                if(chattingPartner<0) // if not, look if there is a chatbox for this indivdual
                for(p=0; p<MAX_CHAT; p++) if(!StrCaseCmp(talker+1, chatPartner[p])) {
-                   talker[0] = 0; Colorize(ColorTell, FALSE);
+                   talker[0] = 0;
+                   Colorize(ColorTell, FALSE);
+                   if(collective) safeStrCpy(talker, "broadcasts: ", MSG_SIZ);
+                   collective |= 2;
                    chattingPartner = p; break;
                }
-               if(chattingPartner<0) i = oldi; else {
+               if(chattingPartner<0) i = oldi, safeStrCpy(lastTalker, talker+1, MSG_SIZ); else {
                    Colorize(curColor, TRUE); // undo the bogus colorations we just made to trigger the souds
-                   if(oldi > 0 && buf[oldi-1] == '\n') oldi--;
-                   if (oldi > next_out) SendToPlayer(&buf[next_out], oldi - next_out);
                    started = STARTED_COMMENT;
                    parse_pos = 0; parse[0] = NULLCHAR;
                    savingComment = 3 + chattingPartner; // counts as TRUE
-                   suppressKibitz = TRUE;
-                   continue;
+                   if(collective == 3) i = oldi; else {
+                       suppressKibitz = TRUE;
+                       if(oldi > 0 && buf[oldi-1] == '\n') oldi--;
+                       if (oldi > next_out) SendToPlayer(&buf[next_out], oldi - next_out);
+                       continue;
+                   }
                }
            } // [HGM] chat: end of patch
 
@@ -3340,7 +3454,7 @@ read_from_ics (InputSourceRef isr, VOIDSTAR closure, char *data, int count, int
                      parse[parse_pos] = NULLCHAR;
                      started = STARTED_COMMENT;
                      savingComment = TRUE;
-                   } else {
+                   } else if(collective != 3) {
                      started = STARTED_CHATTER;
                      savingComment = FALSE;
                    }
@@ -4745,7 +4859,7 @@ ParseBoard12 (char *string)
              default:
                break;
              case MT_CHECK:
-                if(gameInfo.variant != VariantShogi)
+                if(!IS_SHOGI(gameInfo.variant))
                     strcat(parseList[moveNum - 1], "+");
                break;
              case MT_CHECKMATE:
@@ -4975,6 +5089,11 @@ SendMoveToProgram (int moveNum, ChessProgramState *cps)
     char buf[MSG_SIZ];
 
     if(moveList[moveNum][1] == '@' && moveList[moveNum][0] == '@') {
+       if(gameInfo.variant == VariantLion || gameInfo.variant == VariantChuChess || gameInfo.variant == VariantChu) {
+           sprintf(buf, "%s@@@@\n", cps->useUsermove ? "usermove " : "");
+           SendToProgram(buf, cps);
+           return;
+       }
        // null move in variant where engine does not understand it (for analysis purposes)
        SendBoard(cps, moveNum + 1); // send position after move in stead.
        return;
@@ -5002,8 +5121,7 @@ SendMoveToProgram (int moveNum, ChessProgramState *cps)
       /* Added by Tord: Send castle moves in "O-O" in FRC games if required by
        * the engine. It would be nice to have a better way to identify castle
        * moves here. */
-      if((gameInfo.variant == VariantFischeRandom || gameInfo.variant == VariantCapaRandom)
-                                                                        && cps->useOOCastle) {
+      if(appData.fischerCastling && cps->useOOCastle) {
         int fromX = moveList[moveNum][0] - AAA;
         int fromY = moveList[moveNum][1] - ONE;
         int toX = moveList[moveNum][2] - AAA;
@@ -5017,6 +5135,13 @@ 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');
+         SendToProgram(buf, cps);
+      } else
       if(BOARD_HEIGHT > 10) { // [HGM] big: convert ranks to double-digit where needed
        if(moveList[moveNum][1] == '@' && (BOARD_HEIGHT < 16 || moveList[moveNum][0] <= 'Z')) { // drop move
          if(moveList[moveNum][0]== '@') snprintf(buf, MSG_SIZ, "@@@@\n"); else
@@ -5090,7 +5215,8 @@ SendMoveToICS (ChessMove moveType, int fromX, int fromY, int toX, int toY, char
         break;
       case WhitePromotion:
       case BlackPromotion:
-        if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier || gameInfo.variant == VariantMakruk)
+        if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier ||
+           gameInfo.variant == VariantMakruk || gameInfo.variant == VariantASEAN)
          snprintf(user_move, MSG_SIZ, "%c%c%c%c=%c\n",
                 AAA + fromX, ONE + fromY, AAA + toX, ONE + toY,
                PieceToChar(WhiteFerz));
@@ -5154,7 +5280,7 @@ UploadGameEvent ()
        SendToICS(ics_prefix);
        SendToICS(buf);
        if(startedFromSetupPosition || backwardMostMove != 0) {
-         fen = PositionToFEN(backwardMostMove, NULL);
+         fen = PositionToFEN(backwardMostMove, NULL, 1);
          if(ics_type == ICS_ICC) { // on ICC we can simply send a complete FEN to set everything
            snprintf(buf, MSG_SIZ,"loadfen %s\n", fen);
            SendToICS(buf);
@@ -5196,6 +5322,8 @@ 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
+
 void
 CoordsToComputerAlgebraic (int rf, int ff, int rt, int ft, char promoChar, char move[7])
 {
@@ -5207,6 +5335,7 @@ 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);
        } else {
            sprintf(move, "%c%c%c%c%c\n",
                     AAA + ff, ONE + rf, AAA + ft, ONE + rt, promoChar);
@@ -5227,27 +5356,43 @@ ProcessICSInitScript (FILE *f)
 }
 
 
-static int lastX, lastY, selectFlag, dragging;
+static int lastX, lastY, lastLeftX, lastLeftY, selectFlag;
+int dragging;
+static ClickType lastClickType;
+
+int
+Partner (ChessSquare *p)
+{ // change piece into promotion partner if one shogi-promotes to the other
+  int stride = gameInfo.variant == VariantChu ? 22 : 11;
+  ChessSquare partner;
+  partner = (*p/stride & 1 ? *p - stride : *p + stride);
+  if(PieceToChar(*p) != '+' && PieceToChar(partner) != '+') return 0;
+  *p = partner;
+  return 1;
+}
 
 void
 Sweep (int step)
 {
     ChessSquare king = WhiteKing, pawn = WhitePawn, last = promoSweep;
+    static int toggleFlag;
     if(gameInfo.variant == VariantKnightmate) king = WhiteUnicorn;
     if(gameInfo.variant == VariantSuicide || gameInfo.variant == VariantGiveaway) king = EmptySquare;
     if(promoSweep >= BlackPawn) king = WHITE_TO_BLACK king, pawn = WHITE_TO_BLACK pawn;
     if(gameInfo.variant == VariantSpartan && pawn == BlackPawn) pawn = BlackLance, king = EmptySquare;
-    if(fromY != BOARD_HEIGHT-2 && fromY != 1) pawn = EmptySquare;
+    if(fromY != BOARD_HEIGHT-2 && fromY != 1 && gameInfo.variant != VariantChuChess) pawn = EmptySquare;
+    if(!step) toggleFlag = Partner(&last); // piece has shogi-promotion
     do {
-       promoSweep -= 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;
        if(!step) step = -1;
     } while(PieceToChar(promoSweep) == '.' || PieceToChar(promoSweep) == '~' || promoSweep == pawn ||
-           appData.testLegality && (promoSweep == king ||
-           gameInfo.variant == VariantShogi && promoSweep != PROMOTED last && last != PROMOTED promoSweep && last != promoSweep));
+           !toggleFlag && PieceToChar(promoSweep) == '+' || // skip promoted versions of other
+           appData.testLegality && (promoSweep == king || gameInfo.variant != VariantChuChess &&
+            (promoSweep == WhiteLion || promoSweep == BlackLion)));
     if(toX >= 0) {
        int victim = boards[currentMove][toY][toX];
        boards[currentMove][toY][toX] = promoSweep;
@@ -5351,6 +5496,7 @@ ParseOneMove (char *move, int moveNum, ChessMove *moveType, int *fromX, int *fro
       case WhiteNonPromotion:
       case BlackNonPromotion:
       case NormalMove:
+      case FirstLeg:
       case WhiteCapturesEnPassant:
       case BlackCapturesEnPassant:
       case WhiteKingSideCastle:
@@ -5384,7 +5530,8 @@ ParseOneMove (char *move, int moveNum, ChessMove *moveType, int *fromX, int *fro
        if (appData.testLegality) {
          return (*moveType != IllegalMove);
        } else {
-         return !(*fromX == *toX && *fromY == *toY) && boards[moveNum][*fromY][*fromX] != EmptySquare &&
+         return !(*fromX == *toX && *fromY == *toY && killX < 0) && boards[moveNum][*fromY][*fromX] != EmptySquare &&
+                        // [HGM] lion: if this is a double move we are less critical
                        WhiteOnMove(moveNum) == (boards[moveNum][*fromY][*fromX] < BlackPawn);
        }
 
@@ -5527,10 +5674,13 @@ LoadMultiPV (int x, int y, char *buf, int index, int *start, int *end, int pane)
        } else if(strstr(buf+lineStart, "exclude:") == buf+lineStart) { // exclude moves clicked
                ExcludeClick(origIndex - lineStart);
                return FALSE;
+       } else if(!strncmp(buf+lineStart, "dep\t", 4)) {                // column headers clicked
+               Collapse(origIndex - lineStart);
+               return FALSE;
        }
        ParsePV(buf+startPV, FALSE, gameMode != AnalyzeMode);
        *start = startPV; *end = index-1;
-       extendGame = (gameMode == AnalyzeMode && appData.autoExtend);
+       extendGame = (gameMode == AnalyzeMode && appData.autoExtend && origIndex - startPV < 5);
        return TRUE;
 }
 
@@ -5842,13 +5992,13 @@ void
 InitPosition (int redraw)
 {
     ChessSquare (* pieces)[BOARD_FILES];
-    int i, j, pawnRow, overrule,
+    int i, j, pawnRow=1, pieceRows=1, overrule,
     oldx = gameInfo.boardWidth,
     oldy = gameInfo.boardHeight,
     oldh = gameInfo.holdingsWidth;
     static int oldv;
 
-    if(appData.icsActive) shuffleOpenings = FALSE; // [HGM] shuffle: in ICS mode, only shuffle on ICS request
+    if(appData.icsActive) shuffleOpenings = appData.fischerCastling = FALSE; // [HGM] shuffle: in ICS mode, only shuffle on ICS request
 
     /* [AS] Initialize pv info list [HGM] and game status */
     {
@@ -5889,6 +6039,7 @@ InitPosition (int redraw)
     switch (gameInfo.variant) {
     case VariantFischeRandom:
       shuffleOpenings = TRUE;
+      appData.fischerCastling = TRUE;
     default:
       break;
     case VariantShatranj:
@@ -5899,9 +6050,13 @@ InitPosition (int redraw)
     case VariantMakruk:
       pieces = makrukArray;
       nrCastlingRights = 0;
-      startedFromSetupPosition = TRUE;
       SetCharTable(pieceToChar, "PN.R.M....SKpn.r.m....sk");
       break;
+    case VariantASEAN:
+      pieces = aseanArray;
+      nrCastlingRights = 0;
+      SetCharTable(pieceToChar, "PN.R.Q....BKpn.r.q....bk");
+      break;
     case VariantTwoKings:
       pieces = twoKingsArray;
       break;
@@ -5915,6 +6070,7 @@ InitPosition (int redraw)
       break;
     case VariantCapaRandom:
       shuffleOpenings = TRUE;
+      appData.fischerCastling = TRUE;
     case VariantCapablanca:
       pieces = CapablancaArray;
       gameInfo.boardWidth = 10;
@@ -5962,6 +6118,14 @@ InitPosition (int redraw)
       nrCastlingRights = 0;
       SetCharTable(pieceToChar, "PNBRLS...G.++++++Kpnbrls...g.++++++k");
       break;
+    case VariantChu:
+      pieces = ChuArray; pieceRows = 3;
+      gameInfo.boardWidth  = 12;
+      gameInfo.boardHeight = 12;
+      nrCastlingRights = 0;
+      SetCharTable(pieceToChar, "P.BRQSEXOGCATHD.VMLIFN+.++.++++++++++.+++++K"
+                                "p.brqsexogcathd.vmlifn+.++.++++++++++.+++++k");
+      break;
     case VariantCourier:
       pieces = CourierArray;
       gameInfo.boardWidth  = 12;
@@ -5976,6 +6140,16 @@ InitPosition (int redraw)
       pieces = SpartanArray;
       SetCharTable(pieceToChar, "PNBRQ................K......lwg.....c...h..k");
       break;
+    case VariantLion:
+      pieces = lionArray;
+      SetCharTable(pieceToChar, "PNBRQ................LKpnbrq................lk");
+      break;
+    case VariantChuChess:
+      pieces = ChuChessArray;
+      gameInfo.boardWidth = 10;
+      gameInfo.boardHeight = 10;
+      SetCharTable(pieceToChar, "PNBRQ.....M.+++......LKpnbrq.....m.+++......lk");
+      break;
     case VariantFairy:
       pieces = fairyArray;
       SetCharTable(pieceToChar, "PNBRQFEACWMOHIJGDVLSUKpnbrqfeacwmohijgdvlsuk");
@@ -6030,7 +6204,9 @@ InitPosition (int redraw)
 
     pawnRow = gameInfo.boardHeight - 7; /* seems to work in all common variants */
     if(pawnRow < 1) pawnRow = 1;
-    if(gameInfo.variant == VariantMakruk || gameInfo.variant == VariantGrand) pawnRow = 2;
+    if(gameInfo.variant == VariantMakruk || gameInfo.variant == VariantASEAN ||
+       gameInfo.variant == VariantGrand || gameInfo.variant == VariantChuChess) pawnRow = 2;
+    if(gameInfo.variant == VariantChu) pawnRow = 3;
 
     /* User pieceToChar list overrules defaults */
     if(appData.pieceToCharTable != NULL)
@@ -6044,7 +6220,7 @@ InitPosition (int redraw)
             initialPosition[i][j] = s;
 
         if(j < BOARD_LEFT || j >= BOARD_RGHT || overrule) continue;
-        initialPosition[gameInfo.variant == VariantGrand][j] = pieces[0][j-gameInfo.holdingsWidth];
+        initialPosition[gameInfo.variant == VariantGrand || gameInfo.variant == VariantChuChess][j] = pieces[0][j-gameInfo.holdingsWidth];
         initialPosition[pawnRow][j] = WhitePawn;
         initialPosition[BOARD_HEIGHT-pawnRow-1][j] = gameInfo.variant == VariantSpartan ? BlackLance : BlackPawn;
         if(gameInfo.variant == VariantXiangqi) {
@@ -6057,14 +6233,24 @@ InitPosition (int redraw)
                 }
             }
         }
-        if(gameInfo.variant == VariantGrand) {
+        if(gameInfo.variant == VariantChu) {
+             if(j == (BOARD_WIDTH-2)/3 || j == BOARD_WIDTH - (BOARD_WIDTH+1)/3)
+               initialPosition[pawnRow+1][j] = WhiteCobra,
+               initialPosition[BOARD_HEIGHT-pawnRow-2][j] = BlackCobra;
+             for(i=1; i<pieceRows; i++) {
+               initialPosition[i][j] = pieces[2*i][j-gameInfo.holdingsWidth];
+               initialPosition[BOARD_HEIGHT-1-i][j] =  pieces[2*i+1][j-gameInfo.holdingsWidth];
+             }
+        }
+        if(gameInfo.variant == VariantGrand || gameInfo.variant == VariantChuChess) {
             if(j==BOARD_LEFT || j>=BOARD_RGHT-1) {
                initialPosition[0][j] = WhiteRook;
                initialPosition[BOARD_HEIGHT-1][j] = BlackRook;
             }
         }
-        initialPosition[BOARD_HEIGHT-1-(gameInfo.variant == VariantGrand)][j] =  pieces[1][j-gameInfo.holdingsWidth];
+        initialPosition[BOARD_HEIGHT-1-(gameInfo.variant == VariantGrand || gameInfo.variant == VariantChuChess)][j] =  pieces[1][j-gameInfo.holdingsWidth];
     }
+    if(gameInfo.variant == VariantChuChess) initialPosition[0][BOARD_WIDTH/2] = WhiteKing, initialPosition[BOARD_HEIGHT-1][BOARD_WIDTH/2-1] = BlackKing;
     if( (gameInfo.variant == VariantShogi) && !overrule ) {
 
             j=BOARD_LEFT+1;
@@ -6139,7 +6325,7 @@ SendBoard (ChessProgramState *cps, int moveNum)
     char message[MSG_SIZ];
 
     if (cps->useSetboard) {
-      char* fen = PositionToFEN(moveNum, cps->fenOverride);
+      char* fen = PositionToFEN(moveNum, cps->fenOverride, 1);
       snprintf(message, MSG_SIZ,"setboard %s\n", fen);
       SendToProgram(message, cps);
       free(fen);
@@ -6322,7 +6508,8 @@ ChessSquare
 DefaultPromoChoice (int white)
 {
     ChessSquare result;
-    if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier || gameInfo.variant == VariantMakruk)
+    if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier ||
+       gameInfo.variant == VariantMakruk || gameInfo.variant == VariantASEAN)
        result = WhiteFerz; // no choice
     else if(gameInfo.variant == VariantSuicide || gameInfo.variant == VariantGiveaway)
        result= WhiteKing; // in Suicide Q is the last thing we want
@@ -6341,7 +6528,7 @@ HasPromotionChoice (int fromX, int fromY, int toX, int toY, char *promoChoice, i
     /* [HGM] rewritten IsPromotion to only flag promotions that offer a choice */
     /* [HGM] add Shogi promotions */
     int promotionZoneSize=1, highestPromotingPiece = (int)WhitePawn;
-    ChessSquare piece;
+    ChessSquare piece, partner;
     ChessMove moveType;
     Boolean premove;
 
@@ -6353,15 +6540,19 @@ HasPromotionChoice (int fromX, int fromY, int toX, int toY, char *promoChoice, i
        return FALSE;
 
     piece = boards[currentMove][fromY][fromX];
-    if(gameInfo.variant == VariantShogi) {
+    if(gameInfo.variant == VariantChu) {
+        int p = piece >= BlackPawn ? BLACK_TO_WHITE piece : piece;
         promotionZoneSize = BOARD_HEIGHT/3;
-        highestPromotingPiece = (int)WhiteFerz;
-    } else if(gameInfo.variant == VariantMakruk || gameInfo.variant == VariantGrand) {
+        highestPromotingPiece = (p >= WhiteLion || PieceToChar(piece + 22) == '.') ? WhitePawn : WhiteLion;
+    } else if(gameInfo.variant == VariantShogi || gameInfo.variant == VariantChuChess) {
+        promotionZoneSize = BOARD_HEIGHT/3;
+        highestPromotingPiece = (int)WhiteAlfil;
+    } else if(gameInfo.variant == VariantMakruk || gameInfo.variant == VariantGrand || gameInfo.variant == VariantChuChess) {
         promotionZoneSize = 3;
     }
 
-    // Treat Lance as Pawn when it is not representing Amazon
-    if(gameInfo.variant != VariantSuper) {
+    // Treat Lance as Pawn when it is not representing Amazon or Lance
+    if(gameInfo.variant != VariantSuper && gameInfo.variant != VariantChu) {
         if(piece == WhiteLance) piece = WhitePawn; else
         if(piece == BlackLance) piece = BlackPawn;
     }
@@ -6370,10 +6561,13 @@ HasPromotionChoice (int fromX, int fromY, int toX, int toY, char *promoChoice, i
     if((int)piece >= BlackPawn) {
         if(toY >= promotionZoneSize && fromY >= promotionZoneSize)
              return FALSE;
+        if(fromY < promotionZoneSize && gameInfo.variant == VariantChuChess) return FALSE;
         highestPromotingPiece = WHITE_TO_BLACK highestPromotingPiece;
     } else {
         if(  toY < BOARD_HEIGHT - promotionZoneSize &&
            fromY < BOARD_HEIGHT - promotionZoneSize) return FALSE;
+        if(fromY >= BOARD_HEIGHT - promotionZoneSize && gameInfo.variant == VariantChuChess)
+             return FALSE;
     }
 
     if( (int)piece > highestPromotingPiece ) return FALSE; // non-promoting piece
@@ -6407,8 +6601,13 @@ HasPromotionChoice (int fromX, int fromY, int toX, int toY, char *promoChoice, i
     }
 
     // we either have a choice what to promote to, or (in Shogi) whether to promote
-    if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier || gameInfo.variant == VariantMakruk) {
-       *promoChoice = PieceToChar(BlackFerz);  // no choice
+    if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier ||
+       gameInfo.variant == VariantMakruk || gameInfo.variant == VariantASEAN) {
+       ChessSquare p=BlackFerz;  // no choice
+       while(p < EmptySquare) {  //but make sure we use piece that exists
+           *promoChoice = PieceToChar(p++);
+           if(*promoChoice != '.') break;
+       }
        return FALSE;
     }
     // no sense asking what we must promote to if it is going to explode...
@@ -6418,7 +6617,9 @@ HasPromotionChoice (int fromX, int fromY, int toX, int toY, char *promoChoice, i
     }
     // give caller the default choice even if we will not make it
     *promoChoice = ToLower(PieceToChar(defaultPromoChoice));
-    if(gameInfo.variant == VariantShogi) *promoChoice = (defaultPromoChoice == piece ? '=' : '+');
+    partner = piece; // pieces can promote if the pieceToCharTable says so
+    if(IS_SHOGI(gameInfo.variant)) *promoChoice = (defaultPromoChoice == piece && sweepSelect ? '=' : '+'); // obsolete?
+    else if(Partner(&partner))     *promoChoice = (defaultPromoChoice == piece && sweepSelect ? NULLCHAR : '+');
     if(        sweepSelect && gameInfo.variant != VariantGreat
                           && gameInfo.variant != VariantGrand
                           && gameInfo.variant != VariantSuper) return FALSE;
@@ -6429,7 +6630,8 @@ HasPromotionChoice (int fromX, int fromY, int toX, int toY, char *promoChoice, i
              gameMode == IcsPlayingBlack &&  WhiteOnMove(currentMove);
     if(appData.testLegality && !premove) {
        moveType = LegalityTest(boards[currentMove], PosFlags(currentMove),
-                       fromY, fromX, toY, toX, gameInfo.variant == VariantShogi ? '+' : NULLCHAR);
+                       fromY, fromX, toY, toX, IS_SHOGI(gameInfo.variant) || gameInfo.variant == VariantChuChess ? '+' : NULLCHAR);
+        if(moveType == IllegalMove) *promoChoice = NULLCHAR; // could be the fact we promoted was illegal
        if(moveType != WhitePromotion && moveType  != BlackPromotion)
            return FALSE;
     }
@@ -6620,6 +6822,7 @@ int lastLoadGameUseList = FALSE;
 char lastLoadGameTitle[MSG_SIZ], lastLoadPositionTitle[MSG_SIZ];
 ChessMove lastLoadGameStart = EndOfFile;
 int doubleClick;
+Boolean addToBookFlag;
 
 void
 UserMoveEvent(int fromX, int fromY, int toX, int toY, int promoChar)
@@ -6742,6 +6945,13 @@ UserMoveEvent(int fromX, int fromY, int toX, int toY, int promoChar)
            DrawPosition(FALSE, boards[currentMove]);
            return;
        } else if (toX >= 0 && toY >= 0) {
+           if(!appData.pieceMenu && toX == fromX && toY == fromY && boards[0][rf][ff] != EmptySquare) {
+               ChessSquare q, p = boards[0][rf][ff];
+               if(p >= BlackPawn) p = BLACK_TO_WHITE p;
+               if(CHUPROMOTED p < BlackPawn) p = q = CHUPROMOTED boards[0][rf][ff];
+               else p = CHUDEMOTED (q = boards[0][rf][ff]);
+               if(PieceToChar(q) == '+') gatingPiece = p;
+           }
            boards[0][toY][toX] = boards[0][fromY][fromX];
            if(fromX == BOARD_LEFT-2) { // handle 'moves' out of holdings
                if(boards[0][fromY][0] != EmptySquare) {
@@ -6762,7 +6972,7 @@ UserMoveEvent(int fromX, int fromY, int toX, int toY, int promoChar)
         return;
     }
 
-    if(toX < 0 || toY < 0) return;
+    if((toX < 0 || toY < 0) && (fromY != DROP_RANK || fromX != EmptySquare)) return;
     pup = boards[currentMove][toY][toX];
 
     /* [HGM] If move started in holdings, it means a drop. Convert to standard form */
@@ -6782,7 +6992,7 @@ UserMoveEvent(int fromX, int fromY, int toX, int toY, int promoChar)
     moveType = LegalityTest(boards[currentMove], PosFlags(currentMove),
                                          fromY, fromX, toY, toX, promoChar);
 
-    if(fromY == DROP_RANK && fromX == EmptySquare && (gameMode == AnalyzeMode || gameMode == EditGame)) moveType = NormalMove;
+    if(fromY == DROP_RANK && fromX == EmptySquare && (gameMode == AnalyzeMode || gameMode == EditGame || PosFlags(0) & F_NULL_MOVE)) moveType = NormalMove;
 
     /* [HGM] but possibly ignore an IllegalMove result */
     if (appData.testLegality) {
@@ -6799,6 +7009,16 @@ UserMoveEvent(int fromX, int fromY, int toX, int toY, int promoChar)
        return;
     }
 
+    if(addToBookFlag) { // adding moves to book
+       char buf[MSG_SIZ], move[MSG_SIZ];
+        CoordsToAlgebraic(boards[currentMove], PosFlags(currentMove), fromY, fromX, toY, toX, promoChar, move);
+       snprintf(buf, MSG_SIZ, "  0.0%%     1  %s\n", move);
+       AddBookMove(buf);
+       addToBookFlag = FALSE;
+       ClearHighlights();
+       return;
+    }
+
     FinishMove(moveType, fromX, fromY, toX, toY, promoChar);
 }
 
@@ -6998,27 +7218,66 @@ FinishMove (ChessMove moveType, int fromX, int fromY, int toX, int toY, int prom
 }
 
 void
+MarkByFEN(char *fen)
+{
+       int r, f;
+       if(!appData.markers || !appData.highlightDragging) return;
+       for(r=0; r<BOARD_HEIGHT; r++) for(f=BOARD_LEFT; f<BOARD_RGHT; f++) legal[r][f] = 0;
+       r=BOARD_HEIGHT-1; f=BOARD_LEFT;
+       while(*fen) {
+           int s = 0;
+           marker[r][f] = 0;
+           if(*fen == 'M') legal[r][f] = 2; else // request promotion choice
+           if(*fen >= 'A' && *fen <= 'Z') legal[r][f] = 1; else
+           if(*fen >= 'a' && *fen <= 'z') *fen += 'A' - 'a';
+           if(*fen == '/' && f > BOARD_LEFT) f = BOARD_LEFT, r--; else
+           if(*fen == 'T') marker[r][f++] = 0; else
+           if(*fen == 'Y') marker[r][f++] = 1; else
+           if(*fen == 'G') marker[r][f++] = 3; else
+           if(*fen == 'B') marker[r][f++] = 4; else
+           if(*fen == 'C') marker[r][f++] = 5; else
+           if(*fen == 'M') marker[r][f++] = 6; else
+           if(*fen == 'W') marker[r][f++] = 7; else
+           if(*fen == 'D') marker[r][f++] = 8; else
+           if(*fen == 'R') marker[r][f++] = 2; else {
+               while(*fen <= '9' && *fen >= '0') s = 10*s + *fen++ - '0';
+             f += s; fen -= s>0;
+           }
+           while(f >= BOARD_RGHT) f -= BOARD_RGHT - BOARD_LEFT, r--;
+           if(r < 0) break;
+           fen++;
+       }
+       DrawPosition(TRUE, NULL);
+}
+
+static char baseMarker[BOARD_RANKS][BOARD_FILES], baseLegal[BOARD_RANKS][BOARD_FILES];
+
+void
 Mark (Board board, int flags, ChessMove kind, int rf, int ff, int rt, int ft, VOIDSTAR closure)
 {
     typedef char Markers[BOARD_RANKS][BOARD_FILES];
     Markers *m = (Markers *) closure;
-    if(rf == fromY && ff == fromX)
+    if(rf == fromY && ff == fromX && (killX < 0 && !(rt == rf && ft == ff) || abs(ft-killX) < 2 && abs(rt-killY) < 2))
        (*m)[rt][ft] = 1 + (board[rt][ft] != EmptySquare
                         || kind == WhiteCapturesEnPassant
-                        || kind == BlackCapturesEnPassant);
+                        || kind == BlackCapturesEnPassant) + 3*(kind == FirstLeg && killX < 0);
     else if(flags & F_MANDATORY_CAPTURE && board[rt][ft] != EmptySquare) (*m)[rt][ft] = 3;
 }
 
+static int hoverSavedValid;
+
 void
 MarkTargetSquares (int clear)
 {
-  int x, y;
-  if(clear) // no reason to ever suppress clearing
-    for(x=0; x<BOARD_WIDTH; x++) for(y=0; y<BOARD_HEIGHT; y++) marker[y][x] = 0;
-  if(!appData.markers || !appData.highlightDragging || appData.icsActive && gameInfo.variant < VariantShogi ||
-     !appData.testLegality || gameMode == EditPosition) return;
-  if(!clear) {
+  int x, y, sum=0;
+  if(clear) { // no reason to ever suppress clearing
+    for(x=0; x<BOARD_WIDTH; x++) for(y=0; y<BOARD_HEIGHT; y++) sum += marker[y][x], marker[y][x] = 0;
+    hoverSavedValid = 0;
+    if(!sum) return; // nothing was cleared,no redraw needed
+  } else {
     int capt = 0;
+    if(!appData.markers || !appData.highlightDragging || appData.icsActive && gameInfo.variant < VariantShogi ||
+       !appData.testLegality || gameMode == EditPosition) return;
     GenLegal(boards[currentMove], PosFlags(currentMove), Mark, (void*) marker, EmptySquare);
     if(PosFlags(0) & F_MANDATORY_CAPTURE) {
       for(x=0; x<BOARD_WIDTH; x++) for(y=0; y<BOARD_HEIGHT; y++) if(marker[y][x]>1) capt++;
@@ -7048,19 +7307,59 @@ ChessSquare gatingPiece = EmptySquare; // exported to front-end, for dragging
 int
 CanPromote (ChessSquare piece, int y)
 {
+        int zone = (gameInfo.variant == VariantChuChess ? 3 : 1);
        if(gameMode == EditPosition) return FALSE; // no promotions when editing position
        // some variants have fixed promotion piece, no promotion at all, or another selection mechanism
-       if(gameInfo.variant == VariantShogi    || gameInfo.variant == VariantXiangqi ||
+       if(IS_SHOGI(gameInfo.variant)          || gameInfo.variant == VariantXiangqi ||
           gameInfo.variant == VariantSuper    || gameInfo.variant == VariantGreat   ||
           gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier ||
-                                                 gameInfo.variant == VariantMakruk) return FALSE;
-       return (piece == BlackPawn && y == 1 ||
-               piece == WhitePawn && y == BOARD_HEIGHT-2 ||
+         gameInfo.variant == VariantMakruk   || gameInfo.variant == VariantASEAN) return FALSE;
+       return (piece == BlackPawn && y <= zone ||
+               piece == WhitePawn && y >= BOARD_HEIGHT-1-zone ||
                piece == BlackLance && y == 1 ||
                piece == WhiteLance && y == BOARD_HEIGHT-2 );
 }
 
 void
+HoverEvent (int xPix, int yPix, int x, int y)
+{
+       static int oldX = -1, oldY = -1, oldFromX = -1, oldFromY = -1;
+       int r, f;
+       if(!first.highlight) return;
+       if(fromX != oldFromX || fromY != oldFromY)  oldX = oldY = -1; // kludge to fake entry on from-click
+       if(x == oldX && y == oldY) return; // only do something if we enter new square
+       oldFromX = fromX; oldFromY = fromY;
+       if(oldX == -1 && oldY == -1 && x == fromX && y == fromY) { // record markings after from-change
+         for(r=0; r<BOARD_HEIGHT; r++) for(f=BOARD_LEFT; f<BOARD_RGHT; f++)
+           baseMarker[r][f] = marker[r][f], baseLegal[r][f] = legal[r][f];
+         hoverSavedValid = 1;
+       } else if(oldX != x || oldY != y) {
+         // [HGM] lift: entered new to-square; redraw arrow, and inform engine
+         if(hoverSavedValid) // don't restore markers that are supposed to be cleared
+         for(r=0; r<BOARD_HEIGHT; r++) for(f=BOARD_LEFT; f<BOARD_RGHT; f++)
+           marker[r][f] = baseMarker[r][f], legal[r][f] = baseLegal[r][f];
+         if((marker[y][x] == 2 || marker[y][x] == 6) && legal[y][x]) {
+           char buf[MSG_SIZ];
+           snprintf(buf, MSG_SIZ, "hover %c%d\n", x + AAA, y + ONE - '0');
+           SendToProgram(buf, &first);
+         }
+         oldX = x; oldY = y;
+//       SetHighlights(fromX, fromY, x, y);
+       }
+}
+
+void ReportClick(char *action, int x, int y)
+{
+       char buf[MSG_SIZ]; // Inform engine of what user does
+       int r, f;
+       if(action[0] == 'l') // mark any target square of a lifted piece as legal to-square, clear markers
+         for(r=0; r<BOARD_HEIGHT; r++) for(f=BOARD_LEFT; f<BOARD_RGHT; f++) legal[r][f] = 1, marker[r][f] = 0;
+       if(!first.highlight || gameMode == EditPosition) return;
+       snprintf(buf, MSG_SIZ, "%s %c%d%s\n", action, x+AAA, y+ONE-'0', controlKey && action[0]=='p' ? "," : "");
+       SendToProgram(buf, &first);
+}
+
+void
 LeftClick (ClickType clickType, int xPix, int yPix)
 {
     int x, y;
@@ -7075,6 +7374,7 @@ LeftClick (ClickType clickType, int xPix, int yPix)
     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);
@@ -7152,13 +7452,14 @@ LeftClick (ClickType clickType, int xPix, int yPix)
       if(gameMode == AnalyzeMode && (pausing || controlKey) && first.excludeMoves) { // use pause state to exclude moves
        doubleClick = TRUE; gatingPiece = boards[currentMove][y][x];
       }
-      fromX = x; fromY = y; toX = toY = -1;
+      fromX = x; fromY = y; toX = toY = killX = killY = -1;
       if(!appData.oneClick || !OnlyMove(&x, &y, FALSE) ||
         // even if only move, we treat as normal when this would trigger a promotion popup, to allow sweep selection
         appData.sweepSelect && CanPromote(boards[currentMove][fromY][fromX], fromY) && originalY != y) {
            /* First square */
            if (OKToStartUserMove(fromX, fromY)) {
                second = 0;
+               ReportClick("lift", x, y);
                MarkTargetSquares(0);
                if(gameMode == EditPosition && controlKey) gatingPiece = boards[currentMove][fromY][fromX];
                DragPieceBegin(xPix, yPix, FALSE); dragging = 1;
@@ -7190,17 +7491,19 @@ LeftClick (ClickType clickType, int xPix, int yPix)
        /* Check if clicking again on the same color piece */
        fromP = boards[currentMove][fromY][fromX];
        toP = boards[currentMove][y][x];
-       frc = gameInfo.variant == VariantFischeRandom || gameInfo.variant == VariantCapaRandom || gameInfo.variant == VariantSChess;
-       if ((WhitePawn <= fromP && fromP <= WhiteKing &&
+       frc = appData.fischerCastling || gameInfo.variant == VariantSChess;
+       if( (killX < 0 || x != fromX || y != fromY) && // [HGM] lion: do not interpret igui as deselect!
+          ((WhitePawn <= fromP && fromP <= WhiteKing &&
             WhitePawn <= toP && toP <= WhiteKing &&
             !(fromP == WhiteKing && toP == WhiteRook && frc) &&
             !(fromP == WhiteRook && toP == WhiteKing && frc)) ||
            (BlackPawn <= fromP && fromP <= BlackKing &&
             BlackPawn <= toP && toP <= BlackKing &&
             !(fromP == BlackRook && toP == BlackKing && frc) && // allow also RxK as FRC castling
-            !(fromP == BlackKing && toP == BlackRook && frc))) {
+            !(fromP == BlackKing && toP == BlackRook && frc)))) {
            /* Clicked again on same color piece -- changed his mind */
            second = (x == fromX && y == fromY);
+           killX = killY = -1;
            if(second && gameMode == AnalyzeMode && SubtractTimeMarks(&lastClickTime, &prevClickTime) < 200) {
                second = FALSE; // first double-click rather than scond click
                doubleClick = first.excludeMoves; // used by UserMoveEvent to recognize exclude moves
@@ -7221,6 +7524,7 @@ LeftClick (ClickType clickType, int xPix, int yPix)
                else gatingPiece = doubleClick ? fromP : EmptySquare;
                fromX = x;
                fromY = y; dragging = 1;
+               ReportClick("lift", x, y);
                MarkTargetSquares(0);
                DragPieceBegin(xPix, yPix, FALSE);
                if(appData.sweepSelect && CanPromote(piece = boards[currentMove][y][x], y)) {
@@ -7237,7 +7541,7 @@ LeftClick (ClickType clickType, int xPix, int yPix)
        if(x < BOARD_LEFT || x >= BOARD_RGHT) return;
     }
 
-    if (clickType == Release && x == fromX && y == fromY) {
+    if (clickType == Release && x == fromX && y == fromY && killX < 0) {
        DragPieceEnd(xPix, yPix); dragging = 0;
        if(clearFlag) {
            // a deferred attempt to click-click move an empty square on top of a piece
@@ -7270,26 +7574,42 @@ LeftClick (ClickType clickType, int xPix, int yPix)
 
     clearFlag = 0;
 
+    if(gameMode != EditPosition && !appData.testLegality && !legal[y][x] && (x != killX || y != killY) && !sweepSelecting) {
+       if(dragging) DragPieceEnd(xPix, yPix), dragging = 0;
+       DisplayMessage(_("only marked squares are legal"),"");
+       DrawPosition(TRUE, NULL);
+       return; // ignore to-click
+    }
+
     /* we now have a different from- and (possibly off-board) to-square */
     /* Completed move */
     if(!sweepSelecting) {
        toX = x;
        toY = y;
-    } else sweepSelecting = 0; // this must be the up-click corresponding to the down-click that started the sweep
+    }
+
+    piece = boards[currentMove][fromY][fromX];
 
     saveAnimate = appData.animate;
     if (clickType == Press) {
+       if(gameInfo.variant == VariantChuChess && piece != WhitePawn && piece != BlackPawn) defaultPromoChoice = piece;
        if(gameMode == EditPosition && boards[currentMove][fromY][fromX] == EmptySquare) {
            // must be Edit Position mode with empty-square selected
            fromX = x; fromY = y; DragPieceBegin(xPix, yPix, FALSE); dragging = 1; // consider this a new attempt to drag
            if(x >= BOARD_LEFT && x < BOARD_RGHT) clearFlag = 1; // and defer click-click move of empty-square to up-click
            return;
        }
-       if(HasPromotionChoice(fromX, fromY, toX, toY, &promoChoice, FALSE)) {
+       if(dragging == 2) {  // [HGM] lion: just turn buttonless drag into normal drag, and let release to the job
+           return;
+       }
+       if(x == killX && y == killY) {              // second click on this square, which was selected as first-leg target
+           killX = killY = -1;                     // this informs us no second leg is coming, so treat as to-click without intermediate
+       } else
+       if(marker[y][x] == 5) return; // [HGM] lion: to-click on cyan square; defer action to release
+       if(legal[y][x] == 2 || HasPromotionChoice(fromX, fromY, toX, toY, &promoChoice, FALSE)) {
          if(appData.sweepSelect) {
-           ChessSquare piece = boards[currentMove][fromY][fromX];
            promoSweep = defaultPromoChoice;
-           if(PieceToChar(PROMOTED piece) == '+') promoSweep = PROMOTED piece;
+           if(gameInfo.variant != VariantChuChess && PieceToChar(CHUPROMOTED piece) == '+') promoSweep = CHUPROMOTED piece;
            selectFlag = 0; lastX = xPix; lastY = yPix;
            Sweep(0); // Pawn that is going to promote: preview promotion piece
            sweepSelecting = 1;
@@ -7304,6 +7624,13 @@ LeftClick (ClickType clickType, int xPix, int yPix)
        } else {
            ClearHighlights();
        }
+    } else if(sweepSelecting) { // this must be the up-click corresponding to the down-click that started the sweep
+       sweepSelecting = 0; appData.animate = FALSE; // do not animate, a selected piece already on to-square
+       if (appData.animate || appData.highlightLastMove) {
+           SetHighlights(fromX, fromY, toX, toY);
+       } else {
+           ClearHighlights();
+       }
     } else {
 #if 0
 // [HGM] this must be done after the move is made, as with arrow it could lead to a board redraw with piece still on from square
@@ -7314,6 +7641,18 @@ LeftClick (ClickType clickType, int xPix, int yPix)
            ClearHighlights();
        }
 #endif
+       if(gameInfo.variant == VariantChuChess && piece != WhitePawn && piece != BlackPawn) defaultPromoChoice = piece;
+       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 {
+           killX = x; killY = y;     //remeber this square as intermediate
+           ReportClick("put", x, y); // and inform engine
+           ReportClick("lift", x, y);
+           MarkTargetSquares(0);
+           return;
+         }
+       }
        DragPieceEnd(xPix, yPix); dragging = 0;
        /* Don't animate move and drag both */
        appData.animate = FALSE;
@@ -7349,6 +7688,7 @@ LeftClick (ClickType clickType, int xPix, int yPix)
 
     // off-board moves should not be highlighted
     if(x < 0 || y < 0) ClearHighlights();
+    else ReportClick("put", x, y);
 
     if(gatingPiece != EmptySquare && gameInfo.variant == VariantSChess) promoChoice = ToLower(PieceToChar(gatingPiece));
 
@@ -7368,7 +7708,7 @@ LeftClick (ClickType clickType, int xPix, int yPix)
            DisplayMessage("Click in holdings to choose piece", "");
            return;
        }
-       PromotionPopUp();
+       PromotionPopUp(promoChoice);
     } else {
        int oldMove = currentMove;
        UserMoveEvent(fromX, fromY, toX, toY, promoChoice);
@@ -8001,11 +8341,66 @@ Adjudicate (ChessProgramState *cps)
        return 0;
 }
 
+typedef int (CDECL *PPROBE_EGBB) (int player, int *piece, int *square);
+typedef int (CDECL *PLOAD_EGBB) (char *path, int cache_size, int load_options);
+static int egbbCode[] = { 6, 5, 4, 3, 2, 1 };
+
+static int
+BitbaseProbe ()
+{
+    int pieces[10], squares[10], cnt=0, r, f, res;
+    static int loaded;
+    static PPROBE_EGBB probeBB;
+    if(!appData.testLegality) return 10;
+    if(BOARD_HEIGHT != 8 || BOARD_RGHT-BOARD_LEFT != 8) return 12;
+    if(gameInfo.holdingsSize && gameInfo.variant != VariantSuper && gameInfo.variant != VariantSChess) return 12;
+    if(loaded == 2 && forwardMostMove < 2) loaded = 0; // retry on new game
+    for(r=0; r<BOARD_HEIGHT; r++) for(f=BOARD_LEFT; f<BOARD_RGHT; f++) {
+       ChessSquare piece = boards[forwardMostMove][r][f];
+       int black = (piece >= BlackPawn);
+       int type = piece - black*BlackPawn;
+       if(piece == EmptySquare) continue;
+       if(type != WhiteKing && type > WhiteQueen) return 12; // unorthodox piece
+       if(type == WhiteKing) type = WhiteQueen + 1;
+       type = egbbCode[type];
+       squares[cnt] = r*(BOARD_RGHT - BOARD_LEFT) + f - BOARD_LEFT;
+        pieces[cnt] = type + black*6;
+       if(++cnt > 5) return 11;
+    }
+    pieces[cnt] = squares[cnt] = 0;
+    // probe EGBB
+    if(loaded == 2) return 13; // loading failed before
+    if(loaded == 0) {
+       char *p, *path = strstr(appData.egtFormats, "scorpio:"), buf[MSG_SIZ];
+       HMODULE lib;
+       PLOAD_EGBB loadBB;
+       loaded = 2; // prepare for failure
+       if(!path) return 13; // no egbb installed
+       strncpy(buf, path + 8, MSG_SIZ);
+       if(p = strchr(buf, ',')) *p = NULLCHAR; else p = buf + strlen(buf);
+       snprintf(p, MSG_SIZ - strlen(buf), "%c%s", SLASH, EGBB_NAME);
+       lib = LoadLibrary(buf);
+       if(!lib) { DisplayError(_("could not load EGBB library"), 0); return 13; }
+       loadBB = (PLOAD_EGBB) GetProcAddress(lib, "load_egbb_xmen");
+       probeBB = (PPROBE_EGBB) GetProcAddress(lib, "probe_egbb_xmen");
+       if(!loadBB || !probeBB) { DisplayError(_("wrong EGBB version"), 0); return 13; }
+       p[1] = NULLCHAR; loadBB(buf, 64*1028, 2); // 2 = SMART_LOAD
+       loaded = 1; // success!
+    }
+    res = probeBB(forwardMostMove & 1, pieces, squares);
+    return res > 0 ? 1 : res < 0 ? -1 : 0;
+}
+
 char *
 SendMoveToBookUser (int moveNr, ChessProgramState *cps, int initial)
 {   // [HGM] book: this routine intercepts moves to simulate book replies
     char *bookHit = NULL;
 
+    if(cps->drawDepth && BitbaseProbe() == 0) { // [HG} egbb: reduce depth in drawn position
+       char buf[MSG_SIZ];
+       snprintf(buf, MSG_SIZ, "sd %d\n", cps->drawDepth);
+       SendToProgram(buf, cps);
+    }
     //first determine if the incoming move brings opponent into his book
     if(appData.usePolyglotBook && (cps == &first ? !appData.firstHasOwnBookUCI : !appData.secondHasOwnBookUCI))
        bookHit = ProbeBook(moveNr+1, appData.polyglotBook); // returns move
@@ -8088,11 +8483,12 @@ static char stashedInputMove[MSG_SIZ];
 void
 HandleMachineMove (char *message, ChessProgramState *cps)
 {
+    static char firstLeg[20];
     char machineMove[MSG_SIZ], buf1[MSG_SIZ*10], buf2[MSG_SIZ];
     char realname[MSG_SIZ];
     int fromX, fromY, toX, toY;
     ChessMove moveType;
-    char promoChar;
+    char promoChar, roar;
     char *p, *pv=buf1;
     int machineWhite, oldError;
     char *bookHit;
@@ -8230,14 +8626,32 @@ 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;
+       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!)
+           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++;
+           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;
+       }
+
         if (!ParseOneMove(machineMove, forwardMostMove, &moveType,
                               &fromX, &fromY, &toX, &toY, &promoChar)) {
            /* Machine move could not be parsed; ignore it. */
          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) res=%d",
-                    machineMove, fromX+AAA, fromY+ONE, toX+AAA, toY+ONE, moveType);
+            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);
            if (gameMode == TwoMachinesPlay) {
              GameEnds(machineWhite ? BlackWins : WhiteWins,
                        buf1, GE_XBOARD);
@@ -8260,7 +8674,7 @@ FakeBookMove: // [HGM] book: we jump here to simulate machine moves after book h
                 GameEnds(machineWhite ? BlackWins : WhiteWins,
                            buf1, GE_XBOARD);
                return;
-           } else if(gameInfo.variant != VariantFischeRandom && gameInfo.variant != VariantCapaRandom)
+           } else if(!appData.fischerCastling)
            /* [HGM] Kludge to handle engines that send FRC-style castling
               when they shouldn't (like TSCP-Gothic) */
            switch(moveType) {
@@ -8292,8 +8706,19 @@ FakeBookMove: // [HGM] book: we jump here to simulate machine moves after book h
 
        MakeMove(fromX, fromY, toX, toY, promoChar);/*updates forwardMostMove*/
 
+        /* Test suites abort the 'game' after one move */
+        if(*appData.finger) {
+           static FILE *f;
+           char *fen = PositionToFEN(backwardMostMove, NULL, 0); // no counts in EPD
+           if(!f) f = fopen(appData.finger, "w");
+           if(f) fprintf(f, "%s bm %s;\n", fen, parseList[backwardMostMove]), fflush(f);
+           else { DisplayFatalError("Bad output file", errno, 0); return; }
+           free(fen);
+           GameEnds(GameUnfinished, NULL, GE_XBOARD);
+        }
+
         /* [AS] Adjudicate game if needed (note: remember that forwardMostMove now points past the last move) */
-        if( gameMode == TwoMachinesPlay && adjudicateLossThreshold != 0 && forwardMostMove >= adjudicateLossPlies ) {
+        if( gameMode == TwoMachinesPlay && appData.adjudicateLossThreshold != 0 && forwardMostMove >= adjudicateLossPlies ) {
             int count = 0;
 
             while( count < adjudicateLossPlies ) {
@@ -8302,8 +8727,8 @@ FakeBookMove: // [HGM] book: we jump here to simulate machine moves after book h
                 if( count & 1 ) {
                     score = -score; /* Flip score for winning side */
                 }
-
-                if( score > adjudicateLossThreshold ) {
+printf("score=%d count=%d\n",score,count);
+                if( score > appData.adjudicateLossThreshold ) {
                     break;
                 }
 
@@ -8347,7 +8772,6 @@ FakeBookMove: // [HGM] book: we jump here to simulate machine moves after book h
                        (unsigned int)programStats.nodes / (10*abs(programStats.time) + 1.),
                        programStats.movelist);
                SendToICS(buf);
-if(appData.debugMode) fprintf(debugFP, "nodes = %d, %lld\n", (int) programStats.nodes, programStats.nodes);
          }
        }
 #endif
@@ -8379,10 +8803,12 @@ if(appData.debugMode) fprintf(debugFP, "nodes = %d, %lld\n", (int) programStats.
            cps->other->maybeThinking = TRUE;
        }
 
+       roar = (killX >= 0 && IS_LION(boards[forwardMostMove][toY][toX]));
+
        ShowMove(fromX, fromY, toX, toY); /*updates currentMove*/
 
         if (!pausing && appData.ringBellAfterMoves) {
-           RingBell();
+           if(!roar) RingBell();
        }
 
        /*
@@ -8433,14 +8859,29 @@ if(appData.debugMode) fprintf(debugFP, "nodes = %d, %lld\n", (int) programStats.
     }
 
     if (!strncmp(message, "setup ", 6) && 
-       (!appData.testLegality || gameInfo.variant == VariantFairy || NonStandardBoardSize())
+       (!appData.testLegality || gameInfo.variant == VariantFairy || gameInfo.variant == VariantUnknown ||
+          NonStandardBoardSize(gameInfo.variant, gameInfo.boardWidth, gameInfo.boardHeight, gameInfo.holdingsSize))
                                        ) { // [HGM] allow first engine to define opening position
-      int dummy, s=6; char buf[MSG_SIZ];
+      int dummy, w, h, hand, s=6; char buf[MSG_SIZ], varName[MSG_SIZ];
       if(appData.icsActive || forwardMostMove != 0 || cps != &first) return;
-      if(sscanf(message, "setup (%s", buf) == 1) s = 8 + strlen(buf), buf[s-9] = NULLCHAR, SetCharTable(pieceToChar, buf);
+      *buf = NULLCHAR;
+      if(sscanf(message, "setup (%s", buf) == 1) {
+        s = 8 + strlen(buf), buf[s-9] = NULLCHAR, SetCharTable(pieceToChar, buf);
+        ASSIGN(appData.pieceToCharTable, buf);
+      }
       if(startedFromSetupPosition) return;
-      if(sscanf(message+s, "%dx%d+%d", &dummy, &dummy, &dummy) == 3) while(message[s] && message[s++] != ' '); // for compatibility with Alien Edition
-      ParseFEN(boards[0], &dummy, message+s);
+      dummy = sscanf(message+s, "%dx%d+%d_%s", &w, &h, &hand, varName);
+      if(dummy >= 3) {
+        while(message[s] && message[s++] != ' ');
+        if(BOARD_HEIGHT != h || BOARD_WIDTH != w + 4*(hand != 0) || gameInfo.holdingsSize != hand ||
+           dummy == 4 && gameInfo.variant != StringToVariant(varName) ) { // engine wants to change board format or variant
+           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
+        }
+      }
+      ParseFEN(boards[0], &dummy, message+s, FALSE);
       DrawPosition(TRUE, boards[0]);
       startedFromSetupPosition = TRUE;
       return;
@@ -8453,7 +8894,7 @@ if(appData.debugMode) fprintf(debugFP, "nodes = %d, %lld\n", (int) programStats.
 
         GameEnds(GameUnfinished, "Engine aborts game", GE_XBOARD);
 
-        if (!ParseFEN(initial_position, &blackPlaysFirst, message + 9)) {
+        if (!ParseFEN(initial_position, &blackPlaysFirst, message + 9, FALSE)) {
             DisplayError(_("Bad FEN received from engine"), 0);
             return ;
         } else {
@@ -8553,6 +8994,36 @@ if(appData.debugMode) fprintf(debugFP, "nodes = %d, %lld\n", (int) programStats.
        }
     }
     if (sscanf(message, "pong %d", &cps->lastPong) == 1) {
+       if(initPing == cps->lastPong) {
+           if(gameInfo.variant == VariantUnknown) {
+               DisplayError(_("Engine did not send setup for non-standard variant"), 0);
+               *engineVariant = NULLCHAR; appData.variant = VariantNormal; // back to normal as error recovery?
+               GameEnds(GameUnfinished, NULL, GE_XBOARD);
+           }
+           initPing = -1;
+        }
+       return;
+    }
+    if(!strncmp(message, "highlight ", 10)) {
+       if(appData.testLegality && appData.markers) return;
+       MarkByFEN(message+10); // [HGM] alien: allow engine to mark board squares
+       return;
+    }
+    if(!strncmp(message, "click ", 6)) {
+       char f, c=0; int x, y; // [HGM] alien: allow engine to finish user moves (i.e. engine-driven one-click moving)
+       if(appData.testLegality || !appData.oneClick) return;
+       sscanf(message+6, "%c%d%c", &f, &y, &c);
+       x = f - 'a' + BOARD_LEFT, y -= ONE - '0';
+       if(flipView) x = BOARD_WIDTH-1 - x; else y = BOARD_HEIGHT-1 - y;
+       x = x*squareSize + (x+1)*lineGap + squareSize/2;
+       y = y*squareSize + (y+1)*lineGap + squareSize/2;
+       f = first.highlight; first.highlight = 0; // kludge to suppress lift/put in response to own clicks
+       if(lastClickType == Press) // if button still down, fake release on same square, to be ready for next click
+           LeftClick(Release, lastLeftX, lastLeftY);
+       controlKey  = (c == ',');
+       LeftClick(Press, x, y);
+       LeftClick(Release, x, y);
+       first.highlight = f;
        return;
     }
     /*
@@ -8678,6 +9149,10 @@ if(appData.debugMode) fprintf(debugFP, "nodes = %d, %lld\n", (int) programStats.
           Don't use it. */
        cps->sendTime = 0;
     }
+    if (cps->pseudo) { // [HGM] pseudo-engine, granted unusual powers
+       if (sscanf(message, "wtime %ld\n", &whiteTimeRemaining) == 1 || // adjust clock times
+           sscanf(message, "btime %ld\n", &blackTimeRemaining) == 1   ) return;
+    }
 
     /*
      * If chess program startup fails, exit with an error message.
@@ -8895,7 +9370,7 @@ if(appData.debugMode) fprintf(debugFP, "nodes = %d, %lld\n", (int) programStats.
            DisplayInformation(_("Machine accepts your draw offer"));
            GameEnds(GameIsDrawn, "Draw agreed", GE_XBOARD);
          } else {
-            DisplayInformation(_("Machine offers a draw\nSelect Action / Draw to agree"));
+            DisplayInformation(_("Machine offers a draw.\nSelect Action / Draw to accept."));
          }
        }
     }
@@ -8946,6 +9421,9 @@ if(appData.debugMode) fprintf(debugFP, "nodes = %d, %lld\n", (int) programStats.
            if (sscanf(message, "%d%c %d %d " u64Display " %[^\n]\n",
                       &plylev, &plyext, &curscore, &time, &nodes, buf1) >= 5) {
 
+               if(nodes>>32 == u64Const(0xFFFFFFFF))   // [HGM] negative node count read
+                   nodes += u64Const(0x100000000);
+
                if (plyext != ' ' && plyext != '\t') {
                    time *= 100;
                }
@@ -8974,7 +9452,10 @@ if(appData.debugMode) fprintf(debugFP, "nodes = %d, %lld\n", (int) programStats.
                        if(f = fopen(buf, "w")) { // export PV to applicable PV file
                                fprintf(f, "%5.2f/%-2d %s", curscore/100., plylev, pv);
                                fclose(f);
-                       } else DisplayError(_("failed writing PV"), 0);
+                       }
+                       else
+                         /* TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone */
+                         DisplayError(_("failed writing PV"), 0);
                }
 
                tempStats.depth = plylev;
@@ -9237,6 +9718,7 @@ ParseGameHistory (char *game)
          case WhiteNonPromotion:
          case BlackNonPromotion:
          case NormalMove:
+         case FirstLeg:
          case WhiteCapturesEnPassant:
          case BlackCapturesEnPassant:
          case WhiteKingSideCastle:
@@ -9360,7 +9842,7 @@ ParseGameHistory (char *game)
          default:
            break;
          case MT_CHECK:
-            if(gameInfo.variant != VariantShogi)
+            if(!IS_SHOGI(gameInfo.variant))
                 strcat(parseList[boardIndex - 1], "+");
            break;
          case MT_CHECKMATE:
@@ -9377,7 +9859,7 @@ 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;
-  int promoRank = gameInfo.variant == VariantMakruk || gameInfo.variant == VariantGrand ? 3 : 1;
+  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 */
@@ -9394,10 +9876,22 @@ ApplyMove (int fromX, int fromY, int toX, int toY, int promoChar, Board board)
        }
         piece = board[toY][toX] = (ChessSquare) fromX;
   } else {
+//      ChessSquare victim;
       int i;
 
-      if( board[toY][toX] != EmptySquare )
+      if( killX >= 0 && killY >= 0 ) // [HGM] lion: Lion trampled over something
+//           victim = board[killY][killX],
+           board[killY][killX] = EmptySquare,
+           board[EP_STATUS] = EP_CAPTURE;
+
+      if( board[toY][toX] != EmptySquare ) {
            board[EP_STATUS] = EP_CAPTURE;
+           if( (fromX != toX || fromY != toY) && // not igui!
+               (captured == WhiteLion && board[fromY][fromX] != BlackLion ||
+                captured == BlackLion && board[fromY][fromX] != WhiteLion   ) ) { // [HGM] lion: Chu Lion-capture rules
+               board[EP_STATUS] = EP_IRON_LION; // non-Lion x Lion: no counter-strike allowed
+           }
+      }
 
       if( board[fromY][fromX] == WhiteLance || board[fromY][fromX] == BlackLance ) {
            if( gameInfo.variant != VariantSuper && gameInfo.variant != VariantShogi )
@@ -9485,7 +9979,7 @@ ApplyMove (int fromX, int fromY, int toX, int toY, int promoChar, Board board)
         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 != VariantShogi)
+                board[fromY][fromX] == WhiteLance && gameInfo.variant != VariantSuper && gameInfo.variant != VariantChu)
                && toY >= BOARD_HEIGHT-promoRank && promoChar // defaulting to Q is done elsewhere
                ) {
        /* white pawn promotion */
@@ -9546,7 +10040,7 @@ ApplyMove (int fromX, int fromY, int toX, int toY, int promoChar, Board board)
        board[fromY][0] = EmptySquare;
        board[toY][2] = BlackRook;
     } else if ((board[fromY][fromX] == BlackPawn && gameInfo.variant != VariantXiangqi ||
-                board[fromY][fromX] == BlackLance && gameInfo.variant != VariantSuper && gameInfo.variant != VariantShogi)
+                board[fromY][fromX] == BlackLance && gameInfo.variant != VariantSuper && gameInfo.variant != VariantChu)
               && toY < promoRank && promoChar
                ) {
        /* black pawn promotion */
@@ -9579,8 +10073,9 @@ ApplyMove (int fromX, int fromY, int toX, int toY, int promoChar, Board board)
                board[fromY][fromX+1] = EmptySquare;
        }
     } else {
-       board[toY][toX] = board[fromY][fromX];
+       ChessSquare piece = board[fromY][fromX]; // [HGM] lion: allow for igui (where from == to)
        board[fromY][fromX] = EmptySquare;
+       board[toY][toX] = piece;
     }
   }
 
@@ -9658,12 +10153,15 @@ ApplyMove (int fromX, int fromY, int toX, int toY, int promoChar, Board board)
        board[toY][toX] = EmptySquare;
       }
     }
+
     if(gameInfo.variant == VariantSChess && promoChar != NULLCHAR && promoChar != '=' && piece != WhitePawn && piece != BlackPawn) {
         board[fromY][fromX] = CharToPiece(piece < BlackPawn ? ToUpper(promoChar) : ToLower(promoChar)); // S-Chess gating
     } else
     if(promoChar == '+') {
         /* [HGM] Shogi-style promotions, to piece implied by original (Might overwrite ordinary Pawn promotion) */
-        board[toY][toX] = (ChessSquare) (PROMOTED piece);
+        board[toY][toX] = (ChessSquare) (CHUPROMOTED piece);
+        if(gameInfo.variant == VariantChuChess && (piece == WhiteKnight || piece == BlackKnight))
+          board[toY][toX] = piece + WhiteLion - WhiteKnight; // adjust Knight promotions to Lion
     } else if(!appData.testLegality && promoChar != NULLCHAR && promoChar != '=') { // without legality testing, unconditionally believe promoChar
         ChessSquare newPiece = CharToPiece(piece < BlackPawn ? ToUpper(promoChar) : ToLower(promoChar));
        if((newPiece <= WhiteMan || newPiece >= BlackPawn && newPiece <= BlackMan) // unpromoted piece specified
@@ -9682,19 +10180,24 @@ ApplyMove (int fromX, int fromY, int toX, int toY, int promoChar, Board board)
                board[BOARD_HEIGHT-1-k][0] = EmptySquare;
        }
     }
-
 }
 
 /* Updates forwardMostMove */
 void
 MakeMove (int fromX, int fromY, int toX, int toY, int promoChar)
 {
+    int x = toX, y = toY;
+    char *s = parseList[forwardMostMove];
+    ChessSquare p = boards[forwardMostMove][toY][toX];
 //    forwardMostMove++; // [HGM] bare: moved downstream
 
+    if(killX >= 0 && killY >= 0) x = killX, y = killY; // [HGM] lion: make SAN move to intermediate square, if there is one
     (void) CoordsToAlgebraic(boards[forwardMostMove],
                             PosFlags(forwardMostMove),
-                            fromY, fromX, toY, toX, promoChar,
-                            parseList[forwardMostMove]);
+                            fromY, fromX, y, x, promoChar,
+                            s);
+    if(killX >= 0 && killY >= 0)
+        sprintf(s + strlen(s), "%c%c%d", p == EmptySquare || toX == fromX && toY == fromY ? '-' : 'x', toX + AAA, toY + ONE - '0');
 
     if(serverMoves != NULL) { /* [HGM] write moves on file for broadcasting (should be separate routine, really) */
         int timeLeft; static int lastLoadFlag=0; int king, piece;
@@ -9781,7 +10284,7 @@ MakeMove (int fromX, int fromY, int toX, int toY, int promoChar)
       default:
        break;
       case MT_CHECK:
-        if(gameInfo.variant != VariantShogi)
+        if(!IS_SHOGI(gameInfo.variant))
             strcat(parseList[forwardMostMove - 1], "+");
        break;
       case MT_CHECKMATE:
@@ -9789,7 +10292,6 @@ MakeMove (int fromX, int fromY, int toX, int toY, int promoChar)
        strcat(parseList[forwardMostMove - 1], "#");
        break;
     }
-
 }
 
 /* Updates currentMove if not pausing */
@@ -9809,6 +10311,8 @@ ShowMove (int fromX, int fromY, int toX, int toY)
        currentMove = forwardMostMove;
     }
 
+    killX = killY = -1; // [HGM] lion: used up
+
     if (instant) return;
 
     DisplayMove(currentMove - 1);
@@ -9857,37 +10361,75 @@ SendEgtPath (ChessProgramState *cps)
 }
 
 static int
-NonStandardBoardSize ()
-{
-      /* [HGM] Awkward testing. Should really be a table */
-      int overruled = gameInfo.boardWidth != 8 || gameInfo.boardHeight != 8 || gameInfo.holdingsSize != 0;
-      if( gameInfo.variant == VariantXiangqi )
-           overruled = gameInfo.boardWidth != 9 || gameInfo.boardHeight != 10 || gameInfo.holdingsSize != 0;
-      if( gameInfo.variant == VariantShogi )
-           overruled = gameInfo.boardWidth != 9 || gameInfo.boardHeight != 9 || gameInfo.holdingsSize != 7;
-      if( gameInfo.variant == VariantBughouse || gameInfo.variant == VariantCrazyhouse )
-           overruled = gameInfo.boardWidth != 8 || gameInfo.boardHeight != 8 || gameInfo.holdingsSize != 5;
-      if( gameInfo.variant == VariantCapablanca || gameInfo.variant == VariantCapaRandom ||
-          gameInfo.variant == VariantGothic || gameInfo.variant == VariantFalcon || gameInfo.variant == VariantJanus )
-           overruled = gameInfo.boardWidth != 10 || gameInfo.boardHeight != 8 || gameInfo.holdingsSize != 0;
-      if( gameInfo.variant == VariantCourier )
-           overruled = gameInfo.boardWidth != 12 || gameInfo.boardHeight != 8 || gameInfo.holdingsSize != 0;
-      if( gameInfo.variant == VariantSuper )
-           overruled = gameInfo.boardWidth != 8 || gameInfo.boardHeight != 8 || gameInfo.holdingsSize != 8;
-      if( gameInfo.variant == VariantGreat )
-           overruled = gameInfo.boardWidth != 10 || gameInfo.boardHeight != 8 || gameInfo.holdingsSize != 8;
-      if( gameInfo.variant == VariantSChess )
-           overruled = gameInfo.boardWidth != 8 || gameInfo.boardHeight != 8 || gameInfo.holdingsSize != 7;
-      if( gameInfo.variant == VariantGrand )
-           overruled = gameInfo.boardWidth != 10 || gameInfo.boardHeight != 10 || gameInfo.holdingsSize != 7;
-      return overruled;
+NonStandardBoardSize (VariantClass v, int boardWidth, int boardHeight, int holdingsSize)
+{
+      int width = 8, height = 8, holdings = 0;             // most common sizes
+      if( v == VariantUnknown || *engineVariant) return 0; // engine-defined name never needs prefix
+      // correct the deviations default for each variant
+      if( v == VariantXiangqi ) width = 9,  height = 10;
+      if( v == VariantShogi )   width = 9,  height = 9,  holdings = 7;
+      if( v == VariantBughouse || v == VariantCrazyhouse) holdings = 5;
+      if( v == VariantCapablanca || v == VariantCapaRandom ||
+          v == VariantGothic || v == VariantFalcon || v == VariantJanus )
+                                width = 10;
+      if( v == VariantCourier ) width = 12;
+      if( v == VariantSuper )                            holdings = 8;
+      if( v == VariantGreat )   width = 10,              holdings = 8;
+      if( v == VariantSChess )                           holdings = 7;
+      if( v == VariantGrand )   width = 10, height = 10, holdings = 7;
+      if( v == VariantChuChess) width = 10, height = 10;
+      if( v == VariantChu )     width = 12, height = 12;
+      return boardWidth >= 0   && boardWidth   != width  || // -1 is default,
+             boardHeight >= 0  && boardHeight  != height || // and thus by definition OK
+             holdingsSize >= 0 && holdingsSize != holdings;
+}
+
+char variantError[MSG_SIZ];
+
+char *
+SupportedVariant (char *list, VariantClass v, int boardWidth, int boardHeight, int holdingsSize, int proto, char *engine)
+{     // returns error message (recognizable by upper-case) if engine does not support the variant
+      char *p, *variant = VariantName(v);
+      static char b[MSG_SIZ];
+      if(NonStandardBoardSize(v, boardWidth, boardHeight, holdingsSize)) { /* [HGM] make prefix for non-standard board size. */
+          snprintf(b, MSG_SIZ, "%dx%d+%d_%s", boardWidth, boardHeight,
+                                               holdingsSize, variant); // cook up sized variant name
+           /* [HGM] varsize: try first if this deviant size variant is specifically known */
+           if(StrStr(list, b) == NULL) {
+               // specific sized variant not known, check if general sizing allowed
+               if(proto != 1 && StrStr(list, "boardsize") == NULL) {
+                   snprintf(variantError, MSG_SIZ, "Board size %dx%d+%d not supported by %s",
+                            boardWidth, boardHeight, holdingsSize, engine);
+                   return NULL;
+               }
+               /* [HGM] here we really should compare with the maximum supported board size */
+           }
+      } else snprintf(b, MSG_SIZ,"%s", variant);
+      if(proto == 1) return b; // for protocol 1 we cannot check and hope for the best
+      p = StrStr(list, b);
+      while(p && (p != list && p[-1] != ',' || p[strlen(b)] && p[strlen(b)] != ',') ) p = StrStr(p+1, b);
+      if(p == NULL) {
+          // occurs not at all in list, or only as sub-string
+          snprintf(variantError, MSG_SIZ, _("Variant %s not supported by %s"), b, engine);
+          if(p = StrStr(list, b)) { // handle requesting parent variant when only size-overridden is supported
+              int l = strlen(variantError);
+              char *q;
+              while(p != list && p[-1] != ',') p--;
+              q = strchr(p, ',');
+              if(q) *q = NULLCHAR;
+              snprintf(variantError + l, MSG_SIZ - l,  _(", but %s is"), p);
+              if(q) *q= ',';
+          }
+          return NULL;
+      }
+      return b;
 }
 
 void
 InitChessProgram (ChessProgramState *cps, int setup)
 /* setup needed to setup FRC opening position */
 {
-    char buf[MSG_SIZ], b[MSG_SIZ];
+    char buf[MSG_SIZ], *b;
     if (appData.noChessProgram) return;
     hintRequested = FALSE;
     bookRequested = FALSE;
@@ -9905,37 +10447,20 @@ InitChessProgram (ChessProgramState *cps, int setup)
        SendToProgram(buf, cps);
     }
 
+    setboardSpoiledMachineBlack = FALSE;
     SendToProgram(cps->initString, cps);
     if (gameInfo.variant != VariantNormal &&
        gameInfo.variant != VariantLoadable
         /* [HGM] also send variant if board size non-standard */
-        || gameInfo.boardWidth != 8 || gameInfo.boardHeight != 8 || gameInfo.holdingsSize != 0
-                                            ) {
-      char *v = VariantName(gameInfo.variant);
-      if (cps->protocolVersion != 1 && StrStr(cps->variants, v) == NULL) {
-        /* [HGM] in protocol 1 we have to assume all variants valid */
-       snprintf(buf, MSG_SIZ, _("Variant %s not supported by %s"), v, cps->tidy);
-       DisplayFatalError(buf, 0, 1);
+        || gameInfo.boardWidth != 8 || gameInfo.boardHeight != 8 || gameInfo.holdingsSize != 0) {
+
+      b = SupportedVariant(cps->variants, gameInfo.variant, gameInfo.boardWidth,
+                           gameInfo.boardHeight, gameInfo.holdingsSize, cps->protocolVersion, cps->tidy);
+      if (b == NULL) {
+       DisplayFatalError(variantError, 0, 1);
        return;
       }
 
-      if(NonStandardBoardSize()) { /* [HGM] make prefix for non-standard board size. */
-       snprintf(b, MSG_SIZ, "%dx%d+%d_%s", gameInfo.boardWidth, gameInfo.boardHeight,
-                gameInfo.holdingsSize, VariantName(gameInfo.variant)); // cook up sized variant name
-           /* [HGM] varsize: try first if this defiant size variant is specifically known */
-           if(StrStr(cps->variants, b) == NULL) {
-               // specific sized variant not known, check if general sizing allowed
-               if (cps->protocolVersion != 1) { // for protocol 1 we cannot check and hope for the best
-                   if(StrStr(cps->variants, "boardsize") == NULL) {
-                    snprintf(buf, MSG_SIZ, "Board size %dx%d+%d not supported by %s",
-                            gameInfo.boardWidth, gameInfo.boardHeight, gameInfo.holdingsSize, cps->tidy);
-                       DisplayFatalError(buf, 0, 1);
-                       return;
-                   }
-                   /* [HGM] here we really should compare with the maximum supported board size */
-               }
-           }
-      } else snprintf(b, MSG_SIZ,"%s", VariantName(gameInfo.variant));
       snprintf(buf, MSG_SIZ, "variant %s\n", b);
       SendToProgram(buf, cps);
     }
@@ -9975,7 +10500,7 @@ InitChessProgram (ChessProgramState *cps, int setup)
        SendToProgram("easy\n", cps);
     }
     if (cps->usePing) {
-      snprintf(buf, MSG_SIZ, "ping %d\n", ++cps->lastPing);
+      snprintf(buf, MSG_SIZ, "ping %d\n", initPing = ++cps->lastPing);
       SendToProgram(buf, cps);
     }
     cps->initDone = TRUE;
@@ -10334,7 +10859,9 @@ SwapEngines (int n)
     SWAP(fenOverride, p)
     SWAP(NPS, h)
     SWAP(accumulateTC, h)
+    SWAP(drawDepth, h)
     SWAP(host, p)
+    SWAP(pseudo, h)
 }
 
 int
@@ -10615,7 +11142,7 @@ GameEnds (ChessMove result, char *resultDetails, int whosays)
              result, resultDetails ? resultDetails : "(null)", whosays);
     }
 
-    fromX = fromY = -1; // [HGM] abort any move the user is entering.
+    fromX = fromY = killX = killY = -1; // [HGM] abort any move the user is entering. // [HGM] lion
 
     if(pausing) PauseEvent(); // can happen when we abort a paused game (New Game or Quit)
 
@@ -10837,6 +11364,7 @@ GameEnds (ChessMove result, char *resultDetails, int whosays)
                    PlayIcsUnfinishedSound();
                }
            }
+           if(appData.quitNext) { ExitEvent(0); return; }
        } else if (gameMode == EditGame ||
                   gameMode == PlayFromGameFile ||
                   gameMode == AnalyzeMode ||
@@ -10884,8 +11412,7 @@ GameEnds (ChessMove result, char *resultDetails, int whosays)
            ExitAnalyzeMode();
             DoSleep( appData.delayBeforeQuit );
            SendToProgram("quit\n", &first);
-            DoSleep( appData.delayAfterQuit );
-           DestroyChildProcess(first.pr, first.useSigterm);
+           DestroyChildProcess(first.pr, 4 + first.useSigterm);
            first.reload = TRUE;
        }
        first.pr = NoProc;
@@ -10910,8 +11437,7 @@ GameEnds (ChessMove result, char *resultDetails, int whosays)
        if (second.pr != NoProc) {
             DoSleep( appData.delayBeforeQuit );
            SendToProgram("quit\n", &second);
-            DoSleep( appData.delayAfterQuit );
-           DestroyChildProcess(second.pr, second.useSigterm);
+           DestroyChildProcess(second.pr, 4 + second.useSigterm);
            second.reload = TRUE;
        }
        second.pr = NoProc;
@@ -11013,7 +11539,8 @@ FeedMovesToProgram (ChessProgramState *cps, int upto)
     if(currentlyInitializedVariant != gameInfo.variant) {
       char buf[MSG_SIZ];
         // [HGM] variantswitch: make engine aware of new variant
-       if(cps->protocolVersion > 1 && StrStr(cps->variants, VariantName(gameInfo.variant)) == NULL)
+       if(!SupportedVariant(cps->variants, gameInfo.variant, gameInfo.boardWidth,
+                             gameInfo.boardHeight, gameInfo.holdingsSize, cps->protocolVersion, ""))
                return; // [HGM] refrain from feeding moves altogether if variant is unsupported!
        snprintf(buf, MSG_SIZ, "variant %s\n", VariantName(gameInfo.variant));
        SendToProgram(buf, cps);
@@ -11096,6 +11623,7 @@ Reset (int redraw, int init)
     lastHint[0] = NULLCHAR;
     ClearGameInfo(&gameInfo);
     gameInfo.variant = StringToVariant(appData.variant);
+    if(gameInfo.variant == VariantNormal && strcmp(appData.variant, "normal")) gameInfo.variant = VariantUnknown;
     ics_user_moved = ics_clock_paused = FALSE;
     ics_getting_history = H_FALSE;
     ics_gamenum = -1;
@@ -11109,6 +11637,7 @@ Reset (int redraw, int init)
     ClearPremoveHighlights();
     gotPremove = FALSE;
     alarmSounded = FALSE;
+    killX = killY = -1; // [HGM] lion
 
     GameEnds(EndOfFile, NULL, GE_PLAYER);
     if(appData.serverMovesName != NULL) {
@@ -11226,11 +11755,20 @@ AutoPlayOneMove ()
            SetHighlights(-1, -1, toX, toY);
        }
     } else {
+        int viaX = moveList[currentMove][5] - AAA;
+        int viaY = moveList[currentMove][6] - ONE;
         fromX = moveList[currentMove][0] - AAA;
         fromY = moveList[currentMove][1] - ONE;
 
         HistorySet(parseList, backwardMostMove, forwardMostMove, currentMove); /* [AS] */
 
+        if(moveList[currentMove][4] == ';') { // multi-leg
+            ChessSquare piece = boards[currentMove][viaY][viaX];
+           AnimateMove(boards[currentMove], fromX, fromY, viaX, viaY);
+            boards[currentMove][viaY][viaX] = boards[currentMove][fromY][fromX];
+            AnimateMove(boards[currentMove], fromX=viaX, fromY=viaY, toX, toY);
+            boards[currentMove][viaY][viaX] = piece;
+        } else
        AnimateMove(boards[currentMove], fromX, fromY, toX, toY);
 
        if (appData.highlightLastMove) {
@@ -11289,6 +11827,7 @@ LoadGameOneMove (ChessMove readAhead)
       case WhiteNonPromotion:
       case BlackNonPromotion:
       case NormalMove:
+      case FirstLeg:
       case WhiteKingSideCastle:
       case WhiteQueenSideCastle:
       case BlackKingSideCastle:
@@ -11310,6 +11849,7 @@ LoadGameOneMove (ChessMove readAhead)
         toX = currentMoveString[2] - AAA;
         toY = currentMoveString[3] - ONE;
        promoChar = currentMoveString[4];
+       if(promoChar == ';') promoChar = NULLCHAR;
        break;
 
       case WhiteDrop:
@@ -11476,6 +12016,7 @@ LoadGameOneMove (ChessMove readAhead)
 
        thinkOutput[0] = NULLCHAR;
        MakeMove(fromX, fromY, toX, toY, promoChar);
+       killX = killY = -1; // [HGM] lion: used up
        currentMove = forwardMostMove;
        return TRUE;
     }
@@ -11835,12 +12376,26 @@ QuickCompare (Board board, int *minCounts, int *maxCounts)
 int
 QuickScan (Board board, Move *move)
 {   // reconstruct game,and compare all positions in it
-    int cnt=0, stretch=0, total = MakePieceList(board, counts);
+    int cnt=0, stretch=0, found = -1, total = MakePieceList(board, counts);
     do {
        int piece = move->piece;
        int to = move->to, from = pieceList[piece];
+       if(found < 0) { // if already found just scan to game end for final piece count
+         if(QuickCompare(soughtBoard, minSought, maxSought) ||
+          appData.ignoreColors && QuickCompare(reverseBoard, minReverse, maxReverse) ||
+          flipSearch && (QuickCompare(flipBoard, minSought, maxSought) ||
+                               appData.ignoreColors && QuickCompare(rotateBoard, minReverse, maxReverse))
+           ) {
+           static int lastCounts[EmptySquare+1];
+           int i;
+           if(stretch) for(i=0; i<EmptySquare; i++) if(lastCounts[i] != counts[i]) { stretch = 0; break; } // reset if material changes
+           if(stretch++ == 0) for(i=0; i<EmptySquare; i++) lastCounts[i] = counts[i]; // remember actual material
+         } else stretch = 0;
+         if(stretch && (appData.searchMode == 1 || stretch >= appData.stretch)) found = cnt + 1 - stretch;
+         if(found >= 0 && !appData.minPieces) return found;
+       }
        if(piece <= Q_PROMO) { // special moves encoded by otherwise invalid piece numbers 1-4
-         if(!piece) return -1;
+         if(!piece) return (appData.minPieces && (total < appData.minPieces || total > appData.maxPieces) ? -1 : found);
          if(piece == Q_PROMO) { // promotion, encoded as (Q_PROMO, to) + (piece, promoType)
            piece = (++move)->piece;
            from = pieceList[piece];
@@ -11865,23 +12420,12 @@ QuickScan (Board board, Move *move)
          }
        }
        if(appData.searchMode > 2) counts[pieceType[quickBoard[to]]]--; // account capture
-       if((total -= (quickBoard[to] != 0)) < soughtTotal) return -1; // piece count dropped below what we search for
+       if((total -= (quickBoard[to] != 0)) < soughtTotal && found < 0) return -1; // piece count dropped below what we search for
        quickBoard[from] = 0;
       aftercastle:
        quickBoard[to] = piece;
        pieceList[piece] = to;
        cnt++; turn ^= 3;
-       if(QuickCompare(soughtBoard, minSought, maxSought) ||
-          appData.ignoreColors && QuickCompare(reverseBoard, minReverse, maxReverse) ||
-          flipSearch && (QuickCompare(flipBoard, minSought, maxSought) ||
-                               appData.ignoreColors && QuickCompare(rotateBoard, minReverse, maxReverse))
-         ) {
-           static int lastCounts[EmptySquare+1];
-           int i;
-           if(stretch) for(i=0; i<EmptySquare; i++) if(lastCounts[i] != counts[i]) { stretch = 0; break; } // reset if material changes
-           if(stretch++ == 0) for(i=0; i<EmptySquare; i++) lastCounts[i] = counts[i]; // remember actual material
-       } else stretch = 0;
-       if(stretch && (appData.searchMode == 1 || stretch >= appData.stretch)) return cnt + 1 - stretch;
        move++;
     } while(1);
 }
@@ -11947,7 +12491,7 @@ GameContainsPosition (FILE *f, ListGame *lg)
        for(next = WhitePawn; next<EmptySquare; next++) keys[next] = random()>>8 ^ random()<<6 ^random()<<20;
        initDone = TRUE;
     }
-    if(lg->gameInfo.fen) ParseFEN(boards[scratch], &btm, lg->gameInfo.fen);
+    if(lg->gameInfo.fen) ParseFEN(boards[scratch], &btm, lg->gameInfo.fen, FALSE);
     else CopyBoard(boards[scratch], initialPosition); // default start position
     if(lg->moves) {
        turn = btm + 1;
@@ -11991,6 +12535,7 @@ GameContainsPosition (FILE *f, ListGame *lg)
            case WhiteNonPromotion:
            case BlackNonPromotion:
            case NormalMove:
+           case FirstLeg:
            case WhiteKingSideCastle:
            case WhiteQueenSideCastle:
            case BlackKingSideCastle:
@@ -12055,6 +12600,7 @@ LoadGame (FILE *f, int gameNumber, char *title, int useList)
     if (gameMode != BeginningOfGame) {
       Reset(FALSE, TRUE);
     }
+    killX = killY = -1; // [HGM] lion: in case we did not Reset
 
     gameFileFP = f;
     if (lastLoadGameFP != NULL && lastLoadGameFP != f) {
@@ -12208,6 +12754,7 @@ LoadGame (FILE *f, int gameNumber, char *title, int useList)
            break;
 
          case NormalMove:
+         case FirstLeg:
            /* Only a NormalMove can be at the start of a game
             * without a position diagram. */
            if (lastLoadGameStart == EndOfFile ) {
@@ -12269,7 +12816,7 @@ LoadGame (FILE *f, int gameNumber, char *title, int useList)
        if (gameInfo.fen != NULL) {
          Board initial_position;
          startedFromSetupPosition = TRUE;
-         if (!ParseFEN(initial_position, &blackPlaysFirst, gameInfo.fen)) {
+         if (!ParseFEN(initial_position, &blackPlaysFirst, gameInfo.fen, TRUE)) {
            Reset(TRUE, TRUE);
            DisplayError(_("Bad FEN position in file"), 0);
            return FALSE;
@@ -12475,6 +13022,15 @@ LoadGame (FILE *f, int gameNumber, char *title, int useList)
       AnalyzeFileEvent();
     }
 
+    if(gameInfo.result == GameUnfinished && gameInfo.resultDetails && appData.clockMode) {
+       long int w, b; // [HGM] adjourn: restore saved clock times
+       char *p = strstr(gameInfo.resultDetails, "(Clocks:");
+       if(p && sscanf(p+8, "%ld,%ld", &w, &b) == 2) {
+           timeRemaining[0][forwardMostMove] = whiteTimeRemaining = 1000*w + 500;
+           timeRemaining[1][forwardMostMove] = blackTimeRemaining = 1000*b + 500;
+       }
+    }
+
     if(creatingBook) return TRUE;
     if (!matchMode && pos > 0) {
        ToNrEvent(pos); // [HGM] no autoplay if selected on position
@@ -12597,7 +13153,7 @@ LoadPosition (FILE *f, int positionNumber, char *title)
     }
 
     if (fenMode) {
-       if (!ParseFEN(initial_position, &blackPlaysFirst, line)) {
+       if (!ParseFEN(initial_position, &blackPlaysFirst, line, TRUE)) {
            DisplayError(_("Bad FEN position in file"), 0);
            return FALSE;
        }
@@ -12822,9 +13378,9 @@ GetOutOfBookInfo (char * buf)
     }
 }
 
-/* Save game in PGN style and close the file */
-int
-SaveGamePGN (FILE *f)
+/* Save game in PGN style */
+static void
+SaveGamePGN2 (FILE *f)
 {
     int i, offset, linelen, newblock;
 //    char *movetext;
@@ -12839,7 +13395,7 @@ SaveGamePGN (FILE *f)
     if(appData.numberTag && matchMode) fprintf(f, "[Number \"%d\"]\n", nextGame+1); // [HGM] number tag
 
     if (backwardMostMove > 0 || startedFromSetupPosition) {
-        char *fen = PositionToFEN(backwardMostMove, NULL);
+        char *fen = PositionToFEN(backwardMostMove, NULL, 1);
         fprintf(f, "[FEN \"%s\"]\n[SetUp \"1\"]\n", fen);
        fprintf(f, "\n{--------------\n");
        PrintPosition(f, backwardMostMove);
@@ -12976,12 +13532,21 @@ SaveGamePGN (FILE *f)
     /* Print result */
     if (gameInfo.resultDetails != NULL &&
        gameInfo.resultDetails[0] != NULLCHAR) {
-       fprintf(f, "{%s} %s\n\n", gameInfo.resultDetails,
-               PGNResult(gameInfo.result));
+       char buf[MSG_SIZ], *p = gameInfo.resultDetails;
+       if(gameInfo.result == GameUnfinished && appData.clockMode &&
+          (gameMode == MachinePlaysWhite || gameMode == MachinePlaysBlack || gameMode == TwoMachinesPlay)) // [HGM] adjourn: save clock settings
+           snprintf(buf, MSG_SIZ, "%s (Clocks: %ld, %ld)", p, whiteTimeRemaining/1000, blackTimeRemaining/1000), p = buf;
+       fprintf(f, "{%s} %s\n\n", p, PGNResult(gameInfo.result));
     } else {
        fprintf(f, "%s\n\n", PGNResult(gameInfo.result));
     }
+}
 
+/* Save game in PGN style and close the file */
+int
+SaveGamePGN (FILE *f)
+{
+    SaveGamePGN2(f);
     fclose(f);
     lastSavedGame = GameCheckSum(); // [HGM] save: remember ID of last saved game to prevent double saving
     return TRUE;
@@ -13108,7 +13673,7 @@ SavePosition (FILE *f, int dummy, char *dummy2)
        PrintPosition(f, currentMove);
        fprintf(f, "--------------]\n");
     } else {
-       fen = PositionToFEN(currentMove, NULL);
+       fen = PositionToFEN(currentMove, NULL, 1);
        fprintf(f, "%s\n", fen);
        free(fen);
     }
@@ -13460,6 +14025,7 @@ ExitEvent (int status)
       return;
     }
 
+    if (appData.icsActive) printf("\n"); // [HGM] end on new line after closing XBoard
     if (appData.icsActive && appData.colorize) Colorize(ColorNone, FALSE);
 
     if (telnetISR != NULL) {
@@ -13486,14 +14052,12 @@ ExitEvent (int status)
 
         DoSleep( appData.delayBeforeQuit );
        SendToProgram("quit\n", &first);
-        DoSleep( appData.delayAfterQuit );
-       DestroyChildProcess(first.pr, 10 /* [AS] first.useSigterm */ );
+       DestroyChildProcess(first.pr, 4 + first.useSigterm /* [AS] first.useSigterm */ );
     }
     if (second.pr != NoProc) {
         DoSleep( appData.delayBeforeQuit );
        SendToProgram("quit\n", &second);
-        DoSleep( appData.delayAfterQuit );
-       DestroyChildProcess(second.pr, 10 /* [AS] second.useSigterm */ );
+       DestroyChildProcess(second.pr, 4 + second.useSigterm /* [AS] second.useSigterm */ );
     }
     if (first.isr != NULL) {
        RemoveInputSource(first.isr);
@@ -14013,7 +14577,7 @@ TwoMachinesEvent P((void))
       case MachinePlaysWhite:
       case MachinePlaysBlack:
        if (WhiteOnMove(forwardMostMove) == (gameMode == MachinePlaysWhite)) {
-           DisplayError(_("Wait until your turn,\nor select Move Now"), 0);
+           DisplayError(_("Wait until your turn,\nor select 'Move Now'."), 0);
            return;
        }
        /* fall through */
@@ -14048,7 +14612,8 @@ TwoMachinesEvent P((void))
     }
     if(WaitForEngine(&second, TwoMachinesEventIfReady)) return; // (if needed:) started up second engine, so wait for features
 
-    if(second.protocolVersion >= 2 && !strstr(second.variants, VariantName(gameInfo.variant))) {
+    if(!SupportedVariant(second.variants, gameInfo.variant, gameInfo.boardWidth,
+                         gameInfo.boardHeight, gameInfo.holdingsSize, second.protocolVersion, second.tidy)) {
        startingEngine = FALSE;
        DisplayError("second engine does not play this", 0);
        return;
@@ -14450,11 +15015,15 @@ EditPositionMenuEvent (ChessSquare selection, int x, int y)
 {
     char buf[MSG_SIZ];
     ChessSquare piece = boards[0][y][x];
+    static Board erasedBoard, currentBoard, menuBoard, nullBoard;
+    static int lastVariant;
 
     if (gameMode != EditPosition && gameMode != IcsExamining) return;
 
     switch (selection) {
       case ClearBoard:
+       CopyBoard(currentBoard, boards[0]);
+       CopyBoard(menuBoard, initialPosition);
        if (gameMode == IcsExamining && ics_type == ICS_FICS) {
            SendToICS(ics_prefix);
            SendToICS("bsetup clear\n");
@@ -14462,6 +15031,7 @@ EditPositionMenuEvent (ChessSquare selection, int x, int y)
            SendToICS(ics_prefix);
            SendToICS("clearboard\n");
        } else {
+            int nonEmpty = 0;
             for (x = 0; x < BOARD_WIDTH; x++) { ChessSquare p = EmptySquare;
                if(x == BOARD_LEFT-1 || x == BOARD_RGHT) p = (ChessSquare) 0; /* [HGM] holdings */
                 for (y = 0; y < BOARD_HEIGHT; y++) {
@@ -14472,10 +15042,34 @@ EditPositionMenuEvent (ChessSquare selection, int x, int y)
                            SendToICS(buf);
                        }
                    } else {
+                       if(boards[0][y][x] != p) nonEmpty++;
                        boards[0][y][x] = p;
                    }
                }
            }
+           if(gameMode != IcsExamining) { // [HGM] editpos: cycle trough boards
+               int r;
+               for(r = 0; r < BOARD_HEIGHT; r++) {
+                 for(x = BOARD_LEFT; x < BOARD_RGHT; x++) { // create 'menu board' by removing duplicates 
+                   ChessSquare p = menuBoard[r][x];
+                   for(y = x + 1; y < BOARD_RGHT; y++) if(menuBoard[r][y] == p) menuBoard[r][y] = EmptySquare;
+                 }
+               }
+               DisplayMessage("Clicking clock again restores position", "");
+               if(gameInfo.variant != lastVariant) lastVariant = gameInfo.variant, CopyBoard(erasedBoard, boards[0]);
+               if(!nonEmpty) { // asked to clear an empty board
+                   CopyBoard(boards[0], menuBoard);
+               } else
+               if(CompareBoards(currentBoard, menuBoard)) { // asked to clear an empty board
+                   CopyBoard(boards[0], initialPosition);
+               } else
+               if(CompareBoards(currentBoard, initialPosition) && !CompareBoards(currentBoard, erasedBoard)
+                                                                && !CompareBoards(nullBoard, erasedBoard)) {
+                   CopyBoard(boards[0], erasedBoard);
+               } else
+                   CopyBoard(erasedBoard, currentBoard);
+
+           }
        }
        if (gameMode == EditPosition) {
            DrawPosition(FALSE, boards[0]);
@@ -14532,6 +15126,7 @@ EditPositionMenuEvent (ChessSquare selection, int x, int y)
         if(gameInfo.variant == VariantShatranj ||
            gameInfo.variant == VariantXiangqi  ||
            gameInfo.variant == VariantCourier  ||
+           gameInfo.variant == VariantASEAN    ||
            gameInfo.variant == VariantMakruk     )
             selection = (ChessSquare)((int)selection - (int)WhiteQueen + (int)WhiteFerz);
         goto defaultlabel;
@@ -14720,7 +15315,8 @@ ClockClick (int which)
          if (gameMode == EditPosition || gameMode == IcsExamining) {
            if(!appData.pieceMenu && blackPlaysFirst) EditPositionMenuEvent(ClearBoard, 0, 0);
            SetBlackToPlayEvent();
-         } else if ((gameMode == AnalyzeMode || gameMode == EditGame) && !blackFlag && WhiteOnMove(currentMove)) {
+         } else if ((gameMode == AnalyzeMode || gameMode == EditGame ||
+                     gameMode == MachinePlaysBlack && PosFlags(0) & F_NULL_MOVE && !blackFlag && !shiftKey) && WhiteOnMove(currentMove)) {
           UserMoveEvent((int)EmptySquare, DROP_RANK, 0, 0, 0); // [HGM] multi-move: if not out of time, enters null move
          } else if (shiftKey) {
            AdjustClock(which, -1);
@@ -14732,7 +15328,8 @@ ClockClick (int which)
          if (gameMode == EditPosition || gameMode == IcsExamining) {
            if(!appData.pieceMenu && !blackPlaysFirst) EditPositionMenuEvent(ClearBoard, 0, 0);
            SetWhiteToPlayEvent();
-         } else if ((gameMode == AnalyzeMode || gameMode == EditGame) && !whiteFlag && !WhiteOnMove(currentMove)) {
+         } else if ((gameMode == AnalyzeMode || gameMode == EditGame ||
+                     gameMode == MachinePlaysWhite && PosFlags(0) & F_NULL_MOVE && !whiteFlag && !shiftKey) && !WhiteOnMove(currentMove)) {
           UserMoveEvent((int)EmptySquare, DROP_RANK, 0, 0, 0); // [HGM] multi-move
          } else if (shiftKey) {
            AdjustClock(which, -1);
@@ -14896,9 +15493,18 @@ ForwardInner (int target)
                SetHighlights(-1, -1, toX, toY);
            }
        } else {
+            int viaX = moveList[target - 1][5] - AAA;
+            int viaY = moveList[target - 1][6] - ONE;
             fromX = moveList[target - 1][0] - AAA;
             fromY = moveList[target - 1][1] - ONE;
            if (target == currentMove + 1) {
+               if(moveList[target - 1][4] == ';') { // multi-leg
+                   ChessSquare piece = boards[currentMove][viaY][viaX];
+                   AnimateMove(boards[currentMove], fromX, fromY, viaX, viaY);
+                   boards[currentMove][viaY][viaX] = boards[currentMove][fromY][fromX];
+                   AnimateMove(boards[currentMove], viaX, viaY, toX, toY);
+                   boards[currentMove][viaY][viaX] = piece;
+               } else
                AnimateMove(boards[currentMove], fromX, fromY, toX, toY);
            }
            if (appData.highlightLastMove) {
@@ -15127,7 +15733,7 @@ RetractMoveEvent ()
       case MachinePlaysWhite:
       case MachinePlaysBlack:
        if (WhiteOnMove(forwardMostMove) == (gameMode == MachinePlaysWhite)) {
-           DisplayError(_("Wait until your turn,\nor select Move Now"), 0);
+           DisplayError(_("Wait until your turn,\nor select 'Move Now'."), 0);
            return;
        }
        if (forwardMostMove < 2) return;
@@ -15225,14 +15831,14 @@ HintEvent ()
     switch (gameMode) {
       case MachinePlaysWhite:
        if (WhiteOnMove(forwardMostMove)) {
-           DisplayError(_("Wait until your turn"), 0);
+           DisplayError(_("Wait until your turn."), 0);
            return;
        }
        break;
       case BeginningOfGame:
       case MachinePlaysBlack:
        if (!WhiteOnMove(forwardMostMove)) {
-           DisplayError(_("Wait until your turn"), 0);
+           DisplayError(_("Wait until your turn."), 0);
            return;
        }
        break;
@@ -15244,6 +15850,36 @@ HintEvent ()
     hintRequested = TRUE;
 }
 
+int
+SaveSelected (FILE *g, int dummy, char *dummy2)
+{
+    ListGame * lg = (ListGame *) gameList.head;
+    int nItem, cnt=0;
+    FILE *f;
+
+    if( !(f = GameFile()) || ((ListGame *) gameList.tailPred)->number <= 0 ) {
+        DisplayError(_("Game list not loaded or empty"), 0);
+        return 0;
+    }
+
+    creatingBook = TRUE; // suppresses stuff during load game
+
+    /* Get list size */
+    for (nItem = 1; nItem <= ((ListGame *) gameList.tailPred)->number; nItem++){
+       if(lg->position >= 0) { // selected?
+           LoadGame(f, nItem, "", TRUE);
+           SaveGamePGN2(g); // leaves g open
+           cnt++; DoEvents();
+       }
+        lg = (ListGame *) lg->node.succ;
+    }
+
+    fclose(g);
+    creatingBook = FALSE;
+
+    return cnt;
+}
+
 void
 CreateBookEvent ()
 {
@@ -15269,8 +15905,11 @@ CreateBookEvent ()
 
     /* Get list size */
     for (nItem = 1; nItem <= ((ListGame *) gameList.tailPred)->number; nItem++){
-       LoadGame(f, nItem, "", TRUE);
-       AddGameToBook(TRUE);
+       if(lg->position >= 0) {
+           LoadGame(f, nItem, "", TRUE);
+           AddGameToBook(TRUE);
+           DoEvents();
+       }
         lg = (ListGame *) lg->node.succ;
     }
 
@@ -15285,14 +15924,14 @@ BookEvent ()
     switch (gameMode) {
       case MachinePlaysWhite:
        if (WhiteOnMove(forwardMostMove)) {
-           DisplayError(_("Wait until your turn"), 0);
+           DisplayError(_("Wait until your turn."), 0);
            return;
        }
        break;
       case BeginningOfGame:
       case MachinePlaysBlack:
        if (!WhiteOnMove(forwardMostMove)) {
-           DisplayError(_("Wait until your turn"), 0);
+           DisplayError(_("Wait until your turn."), 0);
            return;
        }
        break;
@@ -15956,6 +16595,27 @@ SendTimeRemaining (ChessProgramState *cps, int machineWhite)
     SendToProgram(message, cps);
 }
 
+char *
+EngineDefinedVariant (ChessProgramState *cps, int n)
+{   // return name of n-th unknown variant that engine supports
+    static char buf[MSG_SIZ];
+    char *p, *s = cps->variants;
+    if(!s) return NULL;
+    do { // parse string from variants feature
+      VariantClass v;
+       p = strchr(s, ',');
+       if(p) *p = NULLCHAR;
+      v = StringToVariant(s);
+      if(v == VariantNormal && strcmp(s, "normal") && !strstr(s, "_normal")) v = VariantUnknown; // garbage is recognized as normal
+       if(v == VariantUnknown) { // non-standard variant in list of engine-supported variants
+           if(--n < 0) safeStrCpy(buf, s, MSG_SIZ);
+       }
+       if(p) *p++ = ',';
+       if(n < 0) return buf;
+    } while(s = p);
+    return NULL;
+}
+
 int
 BoolFeature (char **p, char *name, int *loc, ChessProgramState *cps)
 {
@@ -16170,6 +16830,7 @@ ParseFeatures (char *args, ChessProgramState *cps)
     /* End of additions by Tord */
 
     /* [HGM] added features: */
+    if (BoolFeature(&p, "highlight", &cps->highlight, cps)) continue;
     if (BoolFeature(&p, "debug", &cps->debug, cps)) continue;
     if (BoolFeature(&p, "nps", &cps->supportsNPS, cps)) continue;
     if (IntFeature(&p, "level", &cps->maxNrOfSessions, cps)) continue;
@@ -16323,7 +16984,7 @@ TypeInDoneEvent (char *move)
        ChessMove moveType;
 
        // [HGM] FENedit
-       if(gameMode == EditPosition && ParseFEN(board, &n, move) ) {
+       if(gameMode == EditPosition && ParseFEN(board, &n, move, TRUE) ) {
                EditPositionPasteFEN(move);
                return;
        }
@@ -17025,7 +17686,7 @@ PGNDate ()
 
 
 char *
-PositionToFEN (int move, char *overrideCastling)
+PositionToFEN (int move, char *overrideCastling, int moveCounts)
 {
     int i, j, fromX, fromY, toX, toY;
     int whiteToPlay;
@@ -17055,12 +17716,12 @@ PositionToFEN (int move, char *overrideCastling)
                 if(PieceToChar(piece) == '+') {
                     /* [HGM] write promoted pieces as '+<unpromoted>' (Shogi) */
                     *p++ = '+';
-                    piece = (ChessSquare)(DEMOTED piece);
+                    piece = (ChessSquare)(CHUDEMOTED piece);
                 }
-                *p++ = PieceToChar(piece);
+                *p++ = (piece == DarkSquare ? '*' : PieceToChar(piece));
                 if(p[-1] == '~') {
                     /* [HGM] flag promoted pieces as '<promoted>~' (Crazyhouse) */
-                    p[-1] = PieceToChar((ChessSquare)(DEMOTED piece));
+                    p[-1] = PieceToChar((ChessSquare)(CHUDEMOTED piece));
                     *p++ = '~';
                 }
            }
@@ -17106,7 +17767,7 @@ PositionToFEN (int move, char *overrideCastling)
   } else {
   if(nrCastlingRights) {
      q = p;
-     if(gameInfo.variant == VariantFischeRandom || gameInfo.variant == VariantCapaRandom) {
+     if(appData.fischerCastling) {
        /* [HGM] write directly from rights */
            if(boards[move][CASTLING][2] != NoRights &&
               boards[move][CASTLING][0] != NoRights   )
@@ -17155,7 +17816,8 @@ PositionToFEN (int move, char *overrideCastling)
   }
 
   if(gameInfo.variant != VariantShogi    && gameInfo.variant != VariantXiangqi &&
-     gameInfo.variant != VariantShatranj && gameInfo.variant != VariantCourier && gameInfo.variant != VariantMakruk ) {
+     gameInfo.variant != VariantShatranj && gameInfo.variant != VariantCourier &&
+     gameInfo.variant != VariantMakruk   && gameInfo.variant != VariantASEAN ) {
     /* En passant target square */
     if (move > backwardMostMove) {
         fromX = moveList[move - 1][0] - AAA;
@@ -17187,9 +17849,10 @@ PositionToFEN (int move, char *overrideCastling)
   }
   }
 
-    /* [HGM] find reversible plies */
+    if(moveCounts)
     {   int i = 0, j=move;
 
+        /* [HGM] find reversible plies */
         if (appData.debugMode) { int k;
             fprintf(debugFP, "write FEN 50-move: %d %d %d\n", initialRulePlies, forwardMostMove, backwardMostMove);
             for(k=backwardMostMove; k<=forwardMostMove; k++)
@@ -17201,62 +17864,72 @@ PositionToFEN (int move, char *overrideCastling)
         if( j == backwardMostMove ) i += initialRulePlies;
         sprintf(p, "%d ", i);
         p += i>=100 ? 4 : i >= 10 ? 3 : 2;
-    }
-    /* Fullmove number */
-    sprintf(p, "%d", (move / 2) + 1);
+
+        /* Fullmove number */
+        sprintf(p, "%d", (move / 2) + 1);
+    } else *--p = NULLCHAR;
 
     return StrSave(buf);
 }
 
 Boolean
-ParseFEN (Board board, int *blackPlaysFirst, char *fen)
+ParseFEN (Board board, int *blackPlaysFirst, char *fen, Boolean autoSize)
 {
-    int i, j;
+    int i, j, k, w=0, subst=0, shuffle=0;
     char *p, c;
     int emptycount, virgin[BOARD_FILES];
     ChessSquare piece;
 
     p = fen;
 
-    /* [HGM] by default clear Crazyhouse holdings, if present */
-    if(gameInfo.holdingsWidth) {
-       for(i=0; i<BOARD_HEIGHT; i++) {
-           board[i][0]             = EmptySquare; /* black holdings */
-           board[i][BOARD_WIDTH-1] = EmptySquare; /* white holdings */
-           board[i][1]             = (ChessSquare) 0; /* black counts */
-           board[i][BOARD_WIDTH-2] = (ChessSquare) 0; /* white counts */
-       }
-    }
-
     /* Piece placement data */
     for (i = BOARD_HEIGHT - 1; i >= 0; i--) {
        j = 0;
        for (;;) {
-            if (*p == '/' || *p == ' ' || (*p == '[' && i == 0) ) {
-                if (*p == '/') p++;
+            if (*p == '/' || *p == ' ' || *p == '[' ) {
+               if(j > w) w = j;
                 emptycount = gameInfo.boardWidth - j;
                 while (emptycount--)
                         board[i][(j++)+gameInfo.holdingsWidth] = EmptySquare;
+                if (*p == '/') p++;
+               else if(autoSize) { // we stumbled unexpectedly into end of board
+                    for(k=i; k<BOARD_HEIGHT; k++) { // too few ranks; shift towards bottom
+                       for(j=0; j<BOARD_WIDTH; j++) board[k-i][j] = board[k][j];
+                    }
+                   appData.NrRanks = gameInfo.boardHeight - i; i=0;
+                }
                break;
-#if(BOARD_FILES >= 10)
+#if(BOARD_FILES >= 10)*0
             } else if(*p=='x' || *p=='X') { /* [HGM] X means 10 */
                 p++; emptycount=10;
                 if (j + emptycount > gameInfo.boardWidth) return FALSE;
                 while (emptycount--)
                         board[i][(j++)+gameInfo.holdingsWidth] = EmptySquare;
 #endif
+            } else if (*p == '*') {
+               board[i][(j++)+gameInfo.holdingsWidth] = DarkSquare; p++;
             } else if (isdigit(*p)) {
                emptycount = *p++ - '0';
                 while(isdigit(*p)) emptycount = 10*emptycount + *p++ - '0'; /* [HGM] allow > 9 */
                 if (j + emptycount > gameInfo.boardWidth) return FALSE;
                 while (emptycount--)
                         board[i][(j++)+gameInfo.holdingsWidth] = EmptySquare;
+            } else if (*p == '<') {
+                if(i == BOARD_HEIGHT-1) shuffle = 1;
+                else if (i != 0 || !shuffle) return FALSE;
+                p++;
+            } else if (shuffle && *p == '>') {
+                p++; // for now ignore closing shuffle range, and assume rank-end
+            } else if (*p == '?') {
+                if (j >= gameInfo.boardWidth) return FALSE;
+                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)) {
                 if (j >= gameInfo.boardWidth) return FALSE;
                 if(*p=='+') {
                     piece = CharToPiece(*++p);
                     if(piece == EmptySquare) return FALSE; /* unknown piece */
-                    piece = (ChessSquare) (PROMOTED piece ); p++;
+                    piece = (ChessSquare) (CHUPROMOTED piece ); p++;
                     if(PieceToChar(piece) != '+') return FALSE; /* unpromotable piece */
                 } else piece = CharToPiece(*p++);
 
@@ -17274,10 +17947,24 @@ ParseFEN (Board board, int *blackPlaysFirst, char *fen)
     }
     while (*p == '/' || *p == ' ') p++;
 
+    if(autoSize) appData.NrFiles = w, InitPosition(TRUE);
+
+    /* [HGM] by default clear Crazyhouse holdings, if present */
+    if(gameInfo.holdingsWidth) {
+       for(i=0; i<BOARD_HEIGHT; i++) {
+           board[i][0]             = EmptySquare; /* black holdings */
+           board[i][BOARD_WIDTH-1] = EmptySquare; /* white holdings */
+           board[i][1]             = (ChessSquare) 0; /* black counts */
+           board[i][BOARD_WIDTH-2] = (ChessSquare) 0; /* white counts */
+       }
+    }
+
     /* [HGM] look for Crazyhouse holdings here */
     while(*p==' ') p++;
     if( gameInfo.holdingsWidth && p[-1] == '/' || *p == '[') {
+        int swap=0, wcnt=0, bcnt=0;
         if(*p == '[') p++;
+        if(*p == '<') swap++, p++;
         if(*p == '-' ) p++; /* empty holdings */ else {
             if( !gameInfo.holdingsWidth ) return FALSE; /* no room to put holdings! */
             /* if we would allow FEN reading to set board size, we would   */
@@ -17290,18 +17977,46 @@ ParseFEN (Board board, int *blackPlaysFirst, char *fen)
                     if( i >= gameInfo.holdingsSize ) return FALSE;
                     board[BOARD_HEIGHT-1-i][0] = piece; /* black holdings */
                     board[BOARD_HEIGHT-1-i][1]++;       /* black counts   */
+                    bcnt++;
                 } else {
                     i = (int)piece - (int)WhitePawn;
                    i = PieceToNumber((ChessSquare)i);
                     if( i >= gameInfo.holdingsSize ) return FALSE;
                     board[i][BOARD_WIDTH-1] = piece;    /* white holdings */
                     board[i][BOARD_WIDTH-2]++;          /* black holdings */
+                    wcnt++;
                 }
             }
+            if(subst) { // substitute back-rank question marks by holdings pieces
+                for(j=BOARD_LEFT; j<BOARD_RGHT; j++) {
+                    int k, m, n = bcnt + 1;
+                    if(board[0][j] == ClearBoard) {
+                        if(!wcnt) return FALSE;
+                        n = rand() % wcnt;
+                        for(k=0, m=n; k<gameInfo.holdingsSize; k++) if((m -= board[k][BOARD_WIDTH-2]) < 0) {
+                            board[0][j] = board[k][BOARD_WIDTH-1]; wcnt--;
+                            if(--board[k][BOARD_WIDTH-2] == 0) board[k][BOARD_WIDTH-1] = EmptySquare;
+                            break;
+                        }
+                    }
+                    if(board[BOARD_HEIGHT-1][j] == ClearBoard) {
+                        if(!bcnt) return FALSE;
+                        if(n >= bcnt) n = rand() % bcnt; // use same randomization for black and white if possible
+                        for(k=0, m=n; k<gameInfo.holdingsSize; k++) if((n -= board[BOARD_HEIGHT-1-k][1]) < 0) {
+                            board[BOARD_HEIGHT-1][j] = board[BOARD_HEIGHT-1-k][0]; bcnt--;
+                            if(--board[BOARD_HEIGHT-1-k][1] == 0) board[BOARD_HEIGHT-1-k][0] = EmptySquare;
+                            break;
+                        }
+                    }
+                }
+                subst = 0;
+            }
         }
         if(*p == ']') p++;
     }
 
+    if(subst) return FALSE; // substitution requested, but no holdings
+
     while(*p == ' ') p++;
 
     /* Active color */
@@ -17328,7 +18043,7 @@ ParseFEN (Board board, int *blackPlaysFirst, char *fen)
     board[EP_STATUS] = EP_UNKNOWN;
     for(i=0; i<nrCastlingRights; i++ ) {
         board[CASTLING][i] =
-            gameInfo.variant == VariantFischeRandom || gameInfo.variant == VariantCapaRandom ? NoRights : initialRights[i];
+            appData.fischerCastling ? NoRights : initialRights[i];
     }   /* assume possible unless obviously impossible */
     if(initialRights[0]!=NoRights && board[castlingRank[0]][initialRights[0]] != WhiteRook) board[CASTLING][0] = NoRights;
     if(initialRights[1]!=NoRights && board[castlingRank[1]][initialRights[1]] != WhiteRook) board[CASTLING][1] = NoRights;
@@ -17342,6 +18057,7 @@ ParseFEN (Board board, int *blackPlaysFirst, char *fen)
 
     while(*p==' ') p++;
     if(nrCastlingRights) {
+      int fischer = 0;
       if(gameInfo.variant == VariantSChess) for(i=0; i<BOARD_FILES; i++) virgin[i] = 0;
       if(*p >= 'A' && *p <= 'Z' || *p >= 'a' && *p <= 'z' || *p=='-') {
           /* castling indicator present, so default becomes no castlings */
@@ -17350,7 +18066,7 @@ ParseFEN (Board board, int *blackPlaysFirst, char *fen)
           }
       }
       while(*p=='K' || *p=='Q' || *p=='k' || *p=='q' || *p=='-' ||
-             (gameInfo.variant == VariantFischeRandom || gameInfo.variant == VariantCapaRandom || gameInfo.variant == VariantSChess) &&
+             (appData.fischerCastling || gameInfo.variant == VariantSChess) &&
              ( *p >= 'a' && *p < 'a' + gameInfo.boardWidth) ||
              ( *p >= 'A' && *p < 'A' + gameInfo.boardWidth)   ) {
         int c = *p++, whiteKingFile=NoRights, blackKingFile=NoRights;
@@ -17372,6 +18088,7 @@ ParseFEN (Board board, int *blackPlaysFirst, char *fen)
               board[CASTLING][2] = whiteKingFile;
              if(board[CASTLING][0] != NoRights) virgin[board[CASTLING][0]] |= VIRGIN_W;
              if(board[CASTLING][2] != NoRights) virgin[board[CASTLING][2]] |= VIRGIN_W;
+              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++);
@@ -17379,6 +18096,7 @@ ParseFEN (Board board, int *blackPlaysFirst, char *fen)
               board[CASTLING][2] = whiteKingFile;
              if(board[CASTLING][1] != NoRights) virgin[board[CASTLING][1]] |= VIRGIN_W;
              if(board[CASTLING][2] != NoRights) virgin[board[CASTLING][2]] |= VIRGIN_W;
+              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--);
@@ -17386,6 +18104,7 @@ ParseFEN (Board board, int *blackPlaysFirst, char *fen)
               board[CASTLING][5] = blackKingFile;
              if(board[CASTLING][3] != NoRights) virgin[board[CASTLING][3]] |= VIRGIN_B;
              if(board[CASTLING][5] != NoRights) virgin[board[CASTLING][5]] |= VIRGIN_B;
+              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++);
@@ -17393,6 +18112,7 @@ ParseFEN (Board board, int *blackPlaysFirst, char *fen)
               board[CASTLING][5] = blackKingFile;
              if(board[CASTLING][4] != NoRights) virgin[board[CASTLING][4]] |= VIRGIN_B;
              if(board[CASTLING][5] != NoRights) virgin[board[CASTLING][5]] |= VIRGIN_B;
+              if(blackKingFile != BOARD_WIDTH>>1|| i != BOARD_LEFT) fischer = 1;
           case '-':
               break;
           default: /* FRC castlings */
@@ -17426,7 +18146,9 @@ ParseFEN (Board board, int *blackPlaysFirst, char *fen)
       }
       for(i=0; i<nrCastlingRights; i++)
         if(board[CASTLING][i] != NoRights) initialRights[i] = board[CASTLING][i];
-      if(gameInfo.variant == VariantSChess) for(i=0; i<BOARD_FILES; i++) board[VIRGIN][i] = virgin[i];
+      if(gameInfo.variant == VariantSChess)
+        for(i=0; i<BOARD_FILES; i++) board[VIRGIN][i] = shuffle ? VIRGIN_W | VIRGIN_B : virgin[i]; // when shuffling assume all virgin
+      if(fischer && shuffle) appData.fischerCastling = TRUE;
     if (appData.debugMode) {
         fprintf(debugFP, "FEN castling rights:");
         for(i=0; i<nrCastlingRights; i++)
@@ -17437,9 +18159,12 @@ ParseFEN (Board board, int *blackPlaysFirst, char *fen)
       while(*p==' ') p++;
     }
 
+    if(shuffle) SetUpShuffle(board, appData.defaultFrcPosition);
+
     /* read e.p. field in games that know e.p. capture */
     if(gameInfo.variant != VariantShogi    && gameInfo.variant != VariantXiangqi &&
-       gameInfo.variant != VariantShatranj && gameInfo.variant != VariantCourier && gameInfo.variant != VariantMakruk ) {
+       gameInfo.variant != VariantShatranj && gameInfo.variant != VariantCourier &&
+       gameInfo.variant != VariantMakruk && gameInfo.variant != VariantASEAN ) {
       if(*p=='-') {
         p++; board[EP_STATUS] = EP_NONE;
       } else {
@@ -17466,7 +18191,7 @@ EditPositionPasteFEN (char *fen)
   if (fen != NULL) {
     Board initial_position;
 
-    if (!ParseFEN(initial_position, &blackPlaysFirst, fen)) {
+    if (!ParseFEN(initial_position, &blackPlaysFirst, fen, TRUE)) {
       DisplayError(_("Bad FEN position in clipboard"), 0);
       return ;
     } else {
index 0ca3120..d895155 100644 (file)
--- a/backend.h
+++ b/backend.h
@@ -73,13 +73,17 @@ extern Board boards[];
 extern char marker[BOARD_RANKS][BOARD_FILES];
 extern char lastMsg[MSG_SIZ];
 extern Boolean bookUp;
+extern Boolean addToBookFlag;
 extern int tinyLayout, smallLayout;
 extern Boolean mcMode;
+extern int dragging;
+extern char variantError[];
+extern char lastTalker[];
 
 void MarkMenuItem P((char *menuRef, int state));
 char *CmailMsg P((void));
 /* Tord: Added the useFEN960 parameter in PositionToFEN() below */
-char *PositionToFEN P((int move, char* useFEN960));
+char *PositionToFEN P((int move, char* useFEN960, int moveCounts));
 void AlphaRank P((char *s, int n)); /* [HGM] Shogi move preprocessor */
 void EditPositionPasteFEN P((char *fen));
 void TimeDelay P((long ms));
@@ -102,6 +106,7 @@ int LoadGame P((FILE *f, int n, char *title, int useList));
 int LoadGameFromFile P((char *filename, int n, char *title, int useList));
 int CmailLoadGame P((FILE *f, int n, char *title, int useList));
 int ReloadGame P((int offset));
+int SaveSelected P((FILE *f, int dummy, char *dummy2));
 int SaveGame P((FILE *f, int dummy, char *dummy2));
 int SaveGameToFile P((char *filename, int append));
 int LoadPosition P((FILE *f, int n, char *title));
@@ -201,8 +206,11 @@ int PromoScroll P((int x, int y));
 void EditBookEvent P((void));
 Boolean DisplayBook P((int moveNr));
 void SaveToBook P((char *text));
+void AddBookMove P((char *text));
+void PlayBookMove P((char *text, int index));
+void HoverEvent P((int hiX, int hiY, int x, int y));
 int PackGame P((Board board));
-Boolean ParseFEN P((Board board, int *blackPlaysFirst, char *fen));
+Boolean ParseFEN P((Board board, int *blackPlaysFirst, char *fen, Boolean autoSize));
 void ApplyMove P((int fromX, int fromY, int toX, int toY, int promoChar, Board board));
 void PackMove P((int fromX, int fromY, int toX, int toY, ChessSquare promoPiece));
 void ics_printf P((char *format, ...));
@@ -283,7 +291,7 @@ int Explode P((Board board, int fromX, int fromY, int toX, int toY));
 
 typedef enum { CheckBox, ComboBox, TextBox, Button, Spin, ResetButton, SaveButton, ListBox, Graph, PopUp,
                 FileName, PathName, Slider, Message, Fractional, Label, Icon,
-                BoxBegin, BoxEnd, BarBegin, BarEnd, DropDown, Break, EndMark } Control;
+                BoxBegin, BoxEnd, BarBegin, BarEnd, DropDown, Break, EndMark, Skip } Control;
 
 typedef struct XB_OPT {   // [HGM] options: descriptor of UCI-style option
     int value;          // current setting, starts as default
@@ -336,6 +344,7 @@ typedef struct XB_CPS {
     int analyzing;
     int protocolVersion;
     int initDone;
+    int pseudo;
 
     /* Added by Tord: */
     int useFEN960;   /* 0=use "KQkq" style FENs, 1=use "HAha" style FENs */
@@ -351,6 +360,7 @@ typedef struct XB_CPS {
     int debug;      /* [HGM] ignore engine debug lines starting with '#'    */
     int maxNrOfSessions; /* [HGM] secondary TC: max args in 'level' command */
     int accumulateTC; /* [HGM] secondary TC: how to handle extra sessions   */
+    int drawDepth;    /* [HGM] egbb: search depth to play egbb draws        */
     int nps;          /* [HGM] nps: factor for node count to replace time   */
     int supportsNPS;
     int alphaRank;    /* [HGM] shogi: engine uses shogi-type coordinates    */
@@ -359,6 +369,7 @@ typedef struct XB_CPS {
     char *egtFormats; /* [HGM] EGT: supported tablebase formats             */
     int bookSuspend;  /* [HGM] book: go was deferred because of book hit    */
     int pause;        /* [HGM] pause: 1=supports it, 2=actually paused      */
+    int highlight;    /* [HGM] engine wants to get lift and put commands    */
     int nrOptions;    /* [HGM] options: remembered option="..." features    */
 #define MAX_OPTIONS 200
     Option option[MAX_OPTIONS];
@@ -398,6 +409,8 @@ extern int errorExitStatus;
 extern char *recentEngines;
 extern char *comboLine;
 extern Boolean partnerUp, twoBoards;
+extern char engineVariant[];
+char *EngineDefinedVariant P((ChessProgramState *cps, int n));
 void SettingsPopUp P((ChessProgramState *cps)); // [HGM] really in front-end, but CPS not known in frontend.h
 int WaitForEngine P((ChessProgramState *cps, DelayedEventCallback x));
 void Load P((ChessProgramState *cps, int n));
@@ -406,6 +419,7 @@ void MoveHistorySet P(( char movelist[][2*MOVE_LEN], int first, int last, int cu
 void MakeEngineOutputTitle P((void));
 void LoadTheme P((void));
 void CreateBookEvent P((void));
+char *SupportedVariant P((char *list, VariantClass v, int w, int h, int s, int proto, char *engine));
 
 /* A point in time */
 typedef struct {
@@ -413,6 +427,8 @@ typedef struct {
     int ms;    /* Assuming this is >= 16 bits */
 } TimeMark;
 
+extern TimeMark programStartTime;
+
 void GetTimeMark P((TimeMark *));
 long SubtractTimeMarks P((TimeMark *, TimeMark *));
 
diff --git a/board.c b/board.c
index 5c55b4f..d0f6cfb 100644 (file)
--- a/board.c
+++ b/board.c
@@ -599,23 +599,31 @@ void
 AnimateMove (Board board, int fromX, int fromY, int toX, int toY)
 {
   ChessSquare piece;
-  int hop;
+  int hop, x = toX, y = toY;
   Pnt      start, finish, mid;
   Pnt      frames[kFactor * 2 + 1];
   int        nFrames, startColor, endColor;
 
+  if(killX >= 0 && IS_LION(board[fromY][fromX])) Roar();
+
   /* Are we animating? */
   if (!appData.animate || appData.blindfold)
     return;
 
   if(board[toY][toX] == WhiteRook && board[fromY][fromX] == WhiteKing ||
-     board[toY][toX] == BlackRook && board[fromY][fromX] == BlackKing)
+     board[toY][toX] == BlackRook && board[fromY][fromX] == BlackKing ||
+     board[toY][toX] == WhiteKing && board[fromY][fromX] == WhiteRook || // [HGM] seirawan
+     board[toY][toX] == BlackKing && board[fromY][fromX] == BlackRook)
        return; // [HGM] FRC: no animtion of FRC castlings, as to-square is not true to-square
 
   if (fromY < 0 || fromX < 0 || toX < 0 || toY < 0) return;
   piece = board[fromY][fromX];
   if (piece >= EmptySquare) return;
 
+  if(killX >= 0) toX = killX, toY = killY; // [HGM] lion: first to kill square
+
+again:
+
 #if DONT_HOP
   hop = FALSE;
 #else
@@ -653,6 +661,8 @@ AnimateMove (Board board, int fromX, int fromY, int toX, int toY)
 
   /* Be sure end square is redrawn */
   damage[0][toY][toX] |= True;
+
+  if(toX != x || toY != y) { fromX = toX; fromY = toY; toX = x; toY = y; goto again; } // second leg
 }
 
 void
@@ -817,6 +827,7 @@ DrawSquare (int row, int column, ChessSquare piece, int do_flash)
        snprintf(tString, 3, "%d", piece);
        align = 4; // holdings count in upper-left corner
     }
+    if(piece == DarkSquare) square_color = 2;
     if(square_color == 2 || appData.blindfold) piece = EmptySquare;
 
     if (do_flash && piece != EmptySquare && appData.flashCount > 0) {
diff --git a/book.c b/book.c
index ec3f543..dc81458 100644 (file)
--- a/book.c
+++ b/book.c
@@ -28,6 +28,8 @@
  * ------------------------------------------------------------------------
  */
 
+#include "config.h"
+
 #include <stdio.h>
 #include <string.h>
 #include <time.h>
@@ -792,6 +794,7 @@ DisplayBook (int moveNr)
     p = MovesToText(count, entries);
     EditTagsPopUp(p, NULL);
     free(p);
+    addToBookFlag = FALSE;
     return TRUE;
 }
 
@@ -984,6 +987,15 @@ AddGameToBook (int always)
 }
 
 void
+PlayBookMove(char *text, int index)
+{
+    char *start = text+index, *end = start;
+    while(start > text && start[-1] != ' ' && start[-1] != '\t') start--;
+    while(*end && *++end != ' ' && *end != '\n'); *end = NULLCHAR; // find clicked word
+    if(start != end) TypeInDoneEvent(start); // fake it was typed in move type-in
+}
+
+void
 FlushBook ()
 {
     FILE *f;
index 861eefa..f2cb9e9 100644 (file)
--- a/common.h
+++ b/common.h
@@ -172,7 +172,7 @@ typedef char *String;
    outside world in ASCII. In a similar way, the different rank numbering
    systems (starting at rank 0 or 1) are implemented by redefining '1'.
 */
-#define BOARD_RANKS             11             /* [HGM] for in declarations  */
+#define BOARD_RANKS             17            /* [HGM] for in declarations  */
 #define BOARD_FILES             16             /* [HGM] for in declarations  */
 #define BOARD_HEIGHT (gameInfo.boardHeight)    /* [HGM] made user adjustable */
 #define BOARD_WIDTH  (gameInfo.boardWidth + 2*gameInfo.holdingsWidth)
@@ -182,7 +182,7 @@ typedef char *String;
 #define VIRGIN       (BOARD_RANKS-2)           /* [HGM] pieces not moved     */
 #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>9))    /* [HGM] foremost board rank  */
+#define ONE          ('1'-(BOARD_HEIGHT==10))  /* [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
@@ -288,12 +288,20 @@ typedef enum {
     WhitePawn, WhiteKnight, WhiteBishop, WhiteRook, WhiteQueen,
     WhiteFerz, WhiteAlfil, WhiteAngel, WhiteMarshall, WhiteWazir, WhiteMan,
     WhiteCannon, WhiteNightrider, WhiteCardinal, WhiteDragon, WhiteGrasshopper,
-    WhiteSilver, WhiteFalcon, WhiteLance, WhiteCobra, WhiteUnicorn, WhiteKing,
+    WhiteSilver, WhiteFalcon, WhiteLance, WhiteCobra, WhiteUnicorn, WhiteLion,
+    WhiteTokin, WhiteDagger, WhitePCardinal, WhitePDragon, WhiteCat,
+    WhitePSword, WhiteMonarch, WhiteMother, WhiteNothing, WhitePRook, WhitePDagger,
+    WhiteDolphin, WhiteStag, WhiteHorned, WhiteEagle, WhiteSword,
+    WhiteCrown, WhiteHCrown, WhiteHorse, WhiteDrunk, WhitePBishop, WhiteKing,
     BlackPawn, BlackKnight, BlackBishop, BlackRook, BlackQueen,
     BlackFerz, BlackAlfil, BlackAngel, BlackMarshall, BlackWazir, BlackMan,
     BlackCannon, BlackNightrider, BlackCardinal, BlackDragon, BlackGrasshopper,
-    BlackSilver, BlackFalcon, BlackLance, BlackCobra, BlackUnicorn, BlackKing,
-    EmptySquare,
+    BlackSilver, BlackFalcon, BlackLance, BlackCobra, BlackUnicorn, BlackLion,
+    BlackTokin, BlackDagger, BlackPCardinal, BlackPDragon, BlackCat,
+    BlackPSword, BlackMonarch, BlackMother, BlackNothing, BlackPRook, BlackPDagger,
+    BlackDolphin, BlackStag, BlackHorned, BlackEagle, BlackSword,
+    BlackCrown, BlackHCrown, BlackHorse, BlackDrunk, BlackPBishop, BlackKing,
+    EmptySquare, DarkSquare,
     NoRights, // [HGM] gamestate: for castling rights hidden in board[CASTLING]
     ClearBoard, WhitePlay, BlackPlay, PromotePiece, DemotePiece /*for use on EditPosition menus*/
   } ChessSquare;
@@ -304,6 +312,10 @@ typedef enum {
 #define PROMOTED       (int)WhiteDragon - (int)WhiteRook + (int)
 #define DEMOTED        (int)WhiteRook - (int)WhiteDragon + (int)
 #define SHOGI          (int)EmptySquare + (int)
+#define CHUPROMOTED    ((int)WhitePDragon - (int)WhiteDragon)*(gameInfo.variant == VariantChu) + PROMOTED
+#define CHUDEMOTED     ((int)WhiteDragon - (int)WhitePDragon)*(gameInfo.variant == VariantChu) + DEMOTED
+#define IS_SHOGI(V)    ((V) == VariantShogi || (V) == VariantChu)
+#define IS_LION(V)     ((V) == WhiteLion || (V) == BlackLion)
 
 
 typedef ChessSquare Board[BOARD_RANKS][BOARD_FILES];
@@ -319,7 +331,7 @@ typedef enum {
     WhitePromotion, WhiteNonPromotion,
     BlackPromotion, BlackNonPromotion,
     WhiteCapturesEnPassant, BlackCapturesEnPassant,
-    WhiteDrop, BlackDrop,
+    WhiteDrop, BlackDrop, FirstLeg,
     NormalMove, AmbiguousMove, IllegalMove, ImpossibleMove,
     WhiteWins, BlackWins, GameIsDrawn, GameUnfinished,
     GNUChessGame, XBoardGame, MoveNumberOne, Open, Close, Nothing,
@@ -333,7 +345,7 @@ typedef enum {
 } ColorClass;
 
 typedef enum {
-    SoundMove, SoundBell, SoundAlarm, SoundIcsWin, SoundIcsLoss,
+    SoundMove, SoundBell, SoundRoar, SoundAlarm, SoundIcsWin, SoundIcsLoss,
     SoundIcsDraw, SoundIcsUnfinished, NSoundClasses
 } SoundClass;
 
@@ -363,6 +375,7 @@ typedef enum {
     Variant35,           /* Temporary name for possible future ICC wild 35 */
     Variant36,           /* Temporary name for possible future ICC wild 36 */
     VariantShogi,        /* [HGM] added variants */
+    VariantChu,
     VariantXiangqi,
     VariantCourier,
     VariantGothic,
@@ -378,9 +391,12 @@ typedef enum {
     VariantGreat,
     VariantTwilight,
     VariantMakruk,
+    VariantASEAN,
     VariantSChess,
     VariantGrand,
     VariantSpartan,
+    VariantLion,
+    VariantChuChess,
     VariantUnknown       /* Catchall for other unknown variants */
 } VariantClass;
 
@@ -409,6 +425,7 @@ typedef enum {
   "wild35", \
   "wild36", \
   "shogi", \
+  "chu", \
   "xiangqi", \
   "courier", \
   "gothic", \
@@ -424,9 +441,12 @@ typedef enum {
   "great",\
   "twilight",\
   "makruk",\
+  "asean",\
   "seirawan",\
   "grand",\
   "spartan",\
+  "lion",\
+  "chuchess",\
   "unknown" \
 }
 
@@ -493,6 +513,7 @@ typedef struct {
     char *loadPositionFile;
     int loadPositionIndex;  /* position # within file */
     char *savePositionFile;
+    Boolean fischerCastling;/* [HGM] fischer: allow Fischr castling in any variant */
     Boolean matchMode;
     int matchGames;
     Boolean monoMode;
@@ -508,15 +529,18 @@ typedef struct {
     char *clockFont;
     char *messageFont; /* WinBoard only */
     char *coordFont;
-    char *font; /* xboard only: all other fonts */
-    char *tagsFont; /* WinBoard only */
-    char *commentFont; /* WinBoard only */
-    char *icsFont; /* WinBoard only */
+    char *font; /* xboard only */
+    char *tagsFont;
+    char *commentFont;
+    char *historyFont;
+    char *gameListFont;
+    char *icsFont;
     Boolean ringBellAfterMoves;
     Boolean autoCallFlag;
     Boolean flipView;
     Boolean autoFlipView;
     char *cmailGameName; /* xboard only */
+    Boolean headers;
     Boolean alwaysPromoteToQueen;
     Boolean oldSaveStyle;
     Boolean oneClick;
@@ -562,6 +586,7 @@ typedef struct {
     char *soundSeek;
     char *soundMove;     // [HGM] IMPORTANT: order must be as in SoundClass
     char *soundBell;
+    char *soundRoar;
     char *soundIcsAlarm;
     char *soundIcsWin;
     char *soundIcsLoss;
@@ -609,6 +634,7 @@ typedef struct {
     int darkBackTextureMode;
     char * renderPiecesWithFont; /* Name of font for rendering chess pieces */
     char * fontToPieceTable; /* Map to translate font character to chess pieces */
+    char * inscriptions;         /* text (kanji) to write on top of a piece     */
     int fontBackColorWhite;
     int fontForeColorWhite;
     int fontBackColorBlack;
@@ -638,6 +664,7 @@ typedef struct {
     int adjudicateDrawMoves;
     Boolean autoDisplayComment;
     Boolean autoDisplayTags;
+    Boolean pseudo[ENGINES]; /* [HGM] pseudo-engines */
     Boolean isUCI[ENGINES];
     Boolean hasOwnBookUCI[ENGINES];
     char * adapterCommand;
@@ -691,13 +718,16 @@ typedef struct {
     int zippyShortGame; /* [HGM] aborter   */
 #endif
     Boolean lowTimeWarning; /* [HGM] low time */
+    Boolean quitNext;
     char *lowTimeWarningColor;
 
     char *serverFileName;
     char *serverMovesName;
+    char *finger;
     Boolean suppressLoadMoves;
     int serverPause;
     int timeOdds[ENGINES];
+    int drawDepth[ENGINES];
     int timeOddsMode;
     int accumulateTC[ENGINES];
     int NPS[ENGINES];
@@ -708,6 +738,8 @@ typedef struct {
     int dateThreshold;
     int searchMode;
     int stretch;
+    int minPieces;
+    int maxPieces;
     Boolean ignoreColors;
     Boolean findMirror;
     char *userName;
@@ -831,6 +863,7 @@ extern WindowPlacement wpEvalGraph;
 extern WindowPlacement wpMoveHistory;
 extern WindowPlacement wpGameList;
 extern WindowPlacement wpTags;
+extern WindowPlacement wpTextMenu;
 
 #define MAXENGINES 2000
 
diff --git a/conf/chu b/conf/chu
new file mode 100644 (file)
index 0000000..45195ef
--- /dev/null
+++ b/conf/chu
@@ -0,0 +1,42 @@
+;
+; settings for oriental Chu-Shogi theme
+;
+-variant chu
+;
+; pieces: supplied chu-shogi svg's, and flip them in flipView
+;
+-pid ~~/themes/chu
+-flipBlack true
+-trueColors true
+;
+; board: no checkering (both w. and w.o. texture)
+;
+-liteBackTextureFile  "~~/themes/textures/wood_l.png"
+-darkBackTextureFile  "~~/themes/textures/wood_l.png"
+-lightSquareColor #FF8040
+-darkSquareColor #FF8040
+;
+; detour under-promotion is less convenient when non-pawns promote
+;
+-sweepPromotions false
+;
+; legality testing must be on for double-moves to work, no adjudication
+;
+-testLegality true
+-trivialDraws false
+-materialDraws false
+;
+; make the Lion roar on double captures
+;
+-roarSound roar.wav
+;
+; redefine default engine
+;
+-fcp hachu
+-scp hachu
+;
+; set up own persistence file, used for this theme only
+;
+-settingsFile ~/.xboard-chu-rc
+-saveSettingsFile ~/.xboard-chu-rc
+
diff --git a/conf/ics b/conf/ics
new file mode 100644 (file)
index 0000000..9823c73
--- /dev/null
+++ b/conf/ics
@@ -0,0 +1,10 @@
+;
+; settings for Internet Chess Server client
+;
+-ics
+;
+; set up own persistence file, used for ICS play
+;
+-settingsFile ~/.xboard-ics-rc
+-saveSettingsFile ~/.xboard-ics-rc
+
diff --git a/conf/judkins b/conf/judkins
new file mode 100644 (file)
index 0000000..250369d
--- /dev/null
@@ -0,0 +1,19 @@
+;
+; additional settings for Judkins Shogi
+;
+-variant shogi
+;
+; size overrides
+;
+-boardWidth 6
+-boardHeight 6
+-holdingsSize 6
+;
+; remove L from piece set
+;
+-pieceToCharTable "PNBR.S...G.++++.+Kpnbr.s...g.++++.+k"
+;
+; provide initial position
+;
+-loadPositionFile "~~/themes/conf/judkins.fen"
+
diff --git a/conf/judkins.fen b/conf/judkins.fen
new file mode 100644 (file)
index 0000000..d805858
--- /dev/null
@@ -0,0 +1,2 @@
+rbnsgk/6p/6/6/P5/KGSNBR w 0 1
+
diff --git a/conf/mini b/conf/mini
new file mode 100644 (file)
index 0000000..ee6fce6
--- /dev/null
+++ b/conf/mini
@@ -0,0 +1,24 @@
+;
+; additional settings for mini-Shogi
+;
+-variant shogi
+;
+; size overrides
+;
+-boardWidth 5
+-boardHeight 5
+-holdingsSize 5
+;
+; remove L and N from piece set
+;
+-pieceToCharTable "P.BR.S...G.+.++.+Kp.br.s...g.+.++.+k"
+;
+; redefine default engine
+;
+-fcp gnuminishogi
+-scp gnuminishogi
+;
+; provide initial position
+;
+-loadPositionFile "~~/themes/conf/mini.fen"
+
diff --git a/conf/mini.fen b/conf/mini.fen
new file mode 100644 (file)
index 0000000..7ddea3a
--- /dev/null
@@ -0,0 +1,2 @@
+rbsgk/4p/5/P4/KGSBR w 0 1
+
diff --git a/conf/sho b/conf/sho
new file mode 100644 (file)
index 0000000..7b48f27
--- /dev/null
+++ b/conf/sho
@@ -0,0 +1,28 @@
+;
+; additional settings for Sho Shogi
+;
+-variant shogi
+;
+; size overrides
+;
+-boardWidth 9
+-boardHeight 9
+-holdingsSize 0
+;
+; add Elephant to piece set
+;
+-pieceToCharTable "PNBRLSE..G.+++++++Kpnbrlse..g.+++++++k"
+;
+; provide initial position
+;
+-loadPositionFile "~~/themes/conf/sho.fen"
+;
+; must play with legality testing off, for +E and mate
+;
+-testLegality false
+;
+; redefine default engine
+;
+-fcp hachu
+-scp hachu
+
diff --git a/conf/sho.fen b/conf/sho.fen
new file mode 100644 (file)
index 0000000..689e5a6
--- /dev/null
@@ -0,0 +1,2 @@
+lnsgkgsnl/1r2e2b1/ppppppppp/9/9/9/PPPPPPPPP/1B2E2R1/LNSGKGSNL w 0 1
+
diff --git a/conf/shogi b/conf/shogi
new file mode 100644 (file)
index 0000000..90cde91
--- /dev/null
@@ -0,0 +1,41 @@
+;
+; settings for oriental Shogi theme
+;
+-variant shogi
+;
+; pieces: supplied shogi svg's, and flip them in flipView
+;
+-pid ~~/themes/shogi
+-flipBlack true
+-trueColors true
+;
+; board: no checkering (both w. and w.o. texture)
+;
+-liteBackTextureFile  "~~/themes/textures/wood_l.png"
+-darkBackTextureFile  "~~/themes/textures/wood_l.png"
+-lightSquareColor #FF8040
+-darkSquareColor #FF8040
+;
+; detour under-promotion is less convenient when non-pawns promote
+;
+-sweepPromotions false
+;
+; no adjudication
+;
+-trivialDraws false
+-materialDraws false
+;
+; common non-compliant notations
+;
+-colorNickNames "sg"
+;
+; redefine default engine
+;
+-fcp gnushogi
+-scp gnushogi
+;
+; set up own persistence file, used for this theme only
+;
+-settingsFile ~/.xboard-shogi-rc
+-saveSettingsFile ~/.xboard-shogi-rc
+
diff --git a/conf/xiangqi b/conf/xiangqi
new file mode 100644 (file)
index 0000000..23aeb36
--- /dev/null
@@ -0,0 +1,30 @@
+;
+; settings for oriental Xiangqi theme
+;
+-variant xiangqi
+;
+; pieces: supplied xiangqi svg's
+;
+-pid ~~/themes/xiangqi
+-trueColors true
+;
+; board: supplied board bitmap
+;
+-liteBackTextureFile  "~~/themes/textures/xqboard.png"
+-darkBackTextureFile  "~~/themes/textures/xqboard.png"
+;
+; suppress square boundaries and highlight with arrow instead
+;
+-overrideLineGap 0
+-highlightMovesWithArrow true
+;
+; define common non-compliant notations
+;
+-pieceNickNames ".N...MB..G..n...mb..g."
+-colorNickNames "r."
+;
+; set up own persistence file, used for this theme only
+;
+-settingsFile ~/.xboard-xiangqi-rc
+-saveSettingsFile ~/.xboard-xiangqi-rc
+
diff --git a/conf/xq b/conf/xq
new file mode 100644 (file)
index 0000000..fe659ba
--- /dev/null
+++ b/conf/xq
@@ -0,0 +1,36 @@
+;
+; settings for oriental Xiangqi theme
+;
+-variant xiangqi
+;
+; pieces: supplied xiangqi svg's
+;
+-pid ~~/themes/xiangqi
+-trueColors true
+;
+; board: supplied board bitmap
+;
+-useBoardTexture true
+-liteBackTextureFile  "~~/themes/textures/xqboard.png"
+-darkBackTextureFile  "~~/themes/textures/xqboard.png"
+;
+; suppress square boundaries and highlight with arrow instead
+;
+-overrideLineGap 0
+-highlightMoveWithArrow true
+;
+; define common non-compliant notations
+;
+-pieceNickNames ".N...MB..G..n...mb..g."
+-colorNickNames "r."
+;
+; set default engines
+;
+-fcp maxqi
+-scp maxqi
+;
+; set up own persistence file, used for this theme only
+;
+-settingsFile ~/.xboard-xiangqi-rc
+-saveSettingsFile ~/.xboard-xiangqi-rc
+
index 73cd86b..4cc6890 100644 (file)
@@ -28,7 +28,7 @@ dnl| to regenerate configure.  Then submit your changes to be folded into
 dnl| the standard version of xboard.
 
 dnl| define second argument as VERSION.PATCHLEVEL. e.g. 4.4.0j
-AC_INIT([xboard],[4.7.3],[bug-xboard@gnu.org])
+AC_INIT([xboard],[master-20140119],[bug-xboard@gnu.org])
 
 dnl| need this to be able to compile some files in a subdir (filebrowser)
 AM_INIT_AUTOMAKE([subdir-objects])
@@ -56,7 +56,6 @@ AH_TEMPLATE([USE_PTYS],[template])
 AH_TEMPLATE([X_WCHAR],[template])
 AH_TEMPLATE([ATTENTION],[template])
 AH_TEMPLATE([DEFINED_SYS_ERRLIST],[template])
-AH_TEMPLATE([HAVE_LIBXPM],[template])
 AH_TEMPLATE([USE_XAW3D],[template])
 AH_TEMPLATE([X_LOCALE],[template])
 
@@ -138,24 +137,61 @@ FRONTEND_LIBS=""
 
 AC_ARG_WITH([gtk],
             [AS_HELP_STRING([--with-gtk],[use GTK front-end (experimental)])],
-            [with_GTK=yes],
-            [with_GTK=no])
+            [with_GTK=$withval],
+            [with_GTK="no"])
 
 AC_ARG_WITH([Xaw3d],
             [AS_HELP_STRING([--with-Xaw3d],[use Xaw3d front-end (not fully supported anymore)])],
-            [with_Xaw3d=yes],
-            [with_Xaw3d=no])
+            [with_Xaw3d="$withval"],
+            [with_Xaw3d="no"])
 
 AC_ARG_WITH([Xaw],
             [AS_HELP_STRING([--with-Xaw],[use Xaw front-end (default)])],
-            [with_Xaw=yes],
-            [with_Xaw=no])
+            [with_Xaw="$withval"],
+            [with_Xaw="yes"])
+
+AC_ARG_WITH([iconsdir],
+            [AS_HELP_STRING([--with-iconsdir=DIR],
+            [path where icons get installed (default: $datadir/icons/hicolor/48x48/apps)])],
+            [ICONSDIR="$withval"],
+            [ICONSDIR='$(datadir)/icons/hicolor/48x48/apps'])
+
+AC_ARG_WITH([svgiconsdir],
+            [AS_HELP_STRING([--with-svgiconsdir=DIR],
+            [path where svg icons get installed (default: $datadir/icons/hicolor/scalable/apps)])],
+            [SVGICONSDIR="$withval"],
+            [SVGICONSDIR='$(datadir)/icons/hicolor/scalable/apps'])
+
+AC_ARG_WITH([desktopdir],
+            [AS_HELP_STRING([--with-desktopdir=DIR],
+                            [path where desktop files get installed (default: $datadir/applications)])],
+            [DESKTOPDIR="$withval"],
+            [DESKTOPDIR='$(datadir)/applications'])
+
+AC_ARG_WITH([mimedir],
+            [AS_HELP_STRING([--with-mimedir=DIR],
+                            [path where mime files get installed (default: $datadir/mime/packages)])],
+            [MIMEDIR="$withval"],
+            [MIMEDIR='$(datadir)/mime/packages'])
+
+AC_ARG_WITH([gamedatadir],
+            [AS_HELP_STRING([--with-gamedatadir=DIR],
+                            [path where game data files get installed (default: $datadir/games/xboard)])],
+            [GAMEDATADIR="$withval"],
+            [GAMEDATADIR='$(datadir)/games/xboard'])
+
+AC_SUBST(ICONSDIR)
+AC_SUBST(SVGICONSDIR)
+AC_SUBST(DESKTOPDIR)
+AC_SUBST(MIMEDIR)
+AC_SUBST(GAMEDATADIR)
 
 dnl | check for libraries
 if test x"$with_GTK" = x"yes" ; then
   PKG_CHECK_MODULES([GTK], [ gtk+-2.0 >= 2.16.0 gmodule-2.0 ])
   FRONTEND_CFLAGS=$GTK_CFLAGS
   FRONTEND_LIBS=$GTK_LIBS
+  with_Xaw="no"
 fi
 
 if test x"$with_GTK" = x"no" ; then
@@ -212,12 +248,7 @@ fi
 
 dnl | make results available in Makefile.am
 AM_CONDITIONAL([withGTK],   [test x"$with_GTK" = x"yes"])
-AM_CONDITIONAL([withXaw],   [test x"$with_Xaw3d" = x"yes"])
-AM_CONDITIONAL([withXaw],   [test x"$with_Xaw" = x"yes"])
-
-
-AC_SUBST(FRONTEND_CFLAGS)
-AC_SUBST(FRONTEND_LIBS)
+AM_CONDITIONAL([withXaw],   [test x"$with_Xaw3d" = x"yes" || test x"$with_Xaw" = x"yes"])
 
 dnl | end Front-end check
 
@@ -397,32 +428,28 @@ dnl| USE_PTYS=1
 
 dnl| add some libs for OS X
   *-apple-* )
+    AC_MSG_WARN([Apple support is experimental, please report any problems to bug-xboard@gnu.org])
+    AC_PATH_PROG(SW_VERS, sw_vers)
+    if test "x$SW_VERS" != "x"; then
+      AC_MSG_CHECKING(Mac OS X version)
+      MACOSX_VERSION=`$SW_VERS -productVersion`
+      AC_MSG_RESULT([$MACOSX_VERSION])
+    fi
+    case "$MACOSX_VERSION" in
+      10.0*|10.1|10.1.*|10.2*|10.3*|10.4*|10.5*|10.6*)
+      FRONTEND_LIBS= "$FRONTEND_LIBS -lgtkmacintegration -headerpad_max_install_names mmacosx-version-min=10.6 -isysroot /Developer/SDKs/MacOSX10.6.sdk"
+        ;;
+      *)
+      FRONTEND_LIBS = "$FRONTEND_LIBS -lgtkmacintegration -headerpad_max_install_names"
+        ;;
+    esac
+
   ;;
 esac
 
-AC_ARG_ENABLE( [xpm],
-               [AS_HELP_STRING([--enable-xpm],[libXpm will be used if found (default)])],
-               [enable_xpm="$enableval"],
-               [enable_xpm="yes"])
-
-if test x"$enable_xpm" != "xno"; then
-  save_cflags="$CFLAGS"
-  save_cppflags="$CPPFLAGS"
-  CFLAGS="$CFLAGS $X_CFLAGS"
-  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
-  AC_CHECK_HEADERS(X11/xpm.h)
-  CFLAGS="$save_cflags"
-  CPPFLAGS="$save_cppflags"
-  if test "$ac_cv_header_X11_xpm_h" = "yes"; then
-    save_ldflags="$LDFLAGS"
-    LDFLAGS="$LDFLAGS $X_LIBS"
-    AC_CHECK_LIB(Xpm, XpmReadFileToPixmap,
-                 [X_PRE_LIBS="-lXpm $X_PRE_LIBS"; AC_DEFINE(HAVE_LIBXPM)], [],
-                 [$X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
-    LDFLAGS="$save_ldflags"
-  fi
-fi
 
+AC_SUBST(FRONTEND_CFLAGS)
+AC_SUBST(FRONTEND_LIBS)
 AC_SUBST(PRE_XMULIB)
 AC_SUBST(POST_XMULIB)
 AC_SUBST(CONF_CFLAGS)
@@ -501,6 +528,17 @@ if test x"$enable_mimedb" = "xyes"; then
    AC_SUBST(XDG_ICON_RESOURCE)
 fi
 
+dnl create a string with configure options that can be passed to the
+dnl program, good for bug reports and version printout, see output below
+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; \
+ptys=$enable_ptys; zippy=$enable_zippy; sigint=$enable_sigint"
+
+AC_SUBST(CONFIGURE_OPTIONS)
+
 dnl |  output Makefile
 AC_CONFIG_FILES([Makefile cmail po/Makefile.in])
 AC_CONFIG_COMMANDS([test-stamp-h],[test -z "$CONFIG_HEADERS" || date > stamp-h])
@@ -515,8 +553,12 @@ echo " Configurations summary:"
 echo ""
 echo "        prefix:          $prefix       "
 echo "        datarootdir:     $datarootdir  "
-echo "        datadir:         $datadir   (icons will go in \$datadir/icons/hicolor/...)"
-echo "                                    (bitmaps will go in \$datadir/games/xboard/...)"
+echo "        datadir:         $datadir      "
+echo "        gamedatadir:     $GAMEDATADIR  "
+echo "        desktopdir:      $DESKTOPDIR   "
+echo "        mimedir:         $MIMEDIR      "
+echo "        iconsdir:        $ICONSDIR     "
+echo "        svgiconsdir:     $SVGICONSDIR  "
 echo "        infodir:         $infodir   (info files will go here)"
 echo "        sysconfdir:      $sysconfdir   (xboard.conf will go here)"
 echo ""
@@ -528,7 +570,6 @@ echo "        GTK:             $with_GTK"
 echo "        Xaw3d:           $with_Xaw3d"
 echo "        Xaw:             $with_Xaw"
 echo ""
-echo "        xpm:             $enable_xpm"
 echo "        ptys:            $enable_ptys"
 echo "        zippy:           $enable_zippy"
 echo "        sigint:          $enable_sigint"
index bb98b3f..8da6557 100644 (file)
--- a/dialogs.c
+++ b/dialogs.c
@@ -184,12 +184,14 @@ GenericReadout (Option *opts, int selected)
                    if(x < opts[i].min) x = opts[i].min;
                    if(opts[i].type == Fractional)
                        *(float*) opts[i].target = x; // engines never have float options!
-                   else if(opts[i].value != x) {
-                       opts[i].value = x;
+                   else {
                        if(currentCps) {
+                         if(opts[i].value != x) { // only to engine if changed
                            snprintf(buf, MSG_SIZ,  "option %s=%.0f\n", opts[i].name, x);
                            SendToProgram(buf, currentCps);
+                         }
                        } else *(int*) opts[i].target = x;
+                       opts[i].value = x;
                    }
                    break;
                case CheckBox:
@@ -218,7 +220,7 @@ GenericReadout (Option *opts, int selected)
                    }
                    break;
                case EndMark:
-                   if(opts[i].target) // callback for implementing necessary actions on OK (like redraw)
+                   if(opts[i].target && selected != -2) // callback for implementing necessary actions on OK (like redraw)
                        res = ((OKCallback*) opts[i].target)(i);
                    break;
            default:
@@ -228,6 +230,7 @@ GenericReadout (Option *opts, int selected)
                case SaveButton:
                case Label:
                case Break:
+               case Skip:
              break;
            }
            if(opts[i].type == EndMark) break;
@@ -244,23 +247,43 @@ static void AddToTourney P((int n, int sel));
 static void CloneTourney P((void));
 static void ReplaceParticipant P((void));
 static void UpgradeParticipant P((void));
+static void PseudoOK P((void));
 
 static int
 MatchOK (int n)
 {
     ASSIGN(appData.participants, engineName);
     if(!CreateTourney(tfName) || matchMode) return matchMode || !appData.participants[0];
-    PopDown(TransientDlg); // early popdown to prevent FreezeUI called through MatchEvent from causing XtGrab warning
+    PopDown(MasterDlg); // early popdown to prevent FreezeUI called through MatchEvent from causing XtGrab warning
     MatchEvent(2); // start tourney
     return FALSE;  // no double PopDown!
 }
 
+static void
+DoTimeControl(int n)
+{
+  TimeControlProc();
+}
+
+static void
+DoCommonEngine(int n)
+{
+  UciMenuProc();
+}
+
+static void
+DoGeneral(int n)
+{
+  OptionsProc();
+}
+
+#define PARTICIPANTS 6 /* This MUST be the number of the Option for &engineName!*/
+
 static Option matchOptions[] = {
 { 0,  0,          0, NULL, (void*) &tfName, ".trn", NULL, FileName, N_("Tournament file:          ") },
+{ 0,  0,          0, NULL, NULL, "", NULL, Label, N_("For concurrent playing of tourney with multiple XBoards:") },
 { 0,  0,          0, NULL, (void*) &appData.roundSync, "", NULL, CheckBox, N_("Sync after round") },
-{ 0, SAME_ROW|LL, 0, NULL, NULL, "", NULL, Label, N_("    (for concurrent playing of a single") },
 { 0,  0,          0, NULL, (void*) &appData.cycleSync, "", NULL, CheckBox, N_("Sync after cycle") },
-{ 0, SAME_ROW|LL, 0, NULL, NULL, "", NULL, Label, N_("      tourney with multiple XBoards)") },
 { 0,  LR,       175, NULL, NULL, "", NULL, Label, N_("Tourney participants:") },
 { 0, SAME_ROW|RR, 175, NULL, NULL, "", NULL, Label, N_("Select Engine:") },
 { 150, T_VSCRL | T_FILL | T_WRAP,
@@ -281,6 +304,10 @@ static Option matchOptions[] = {
 { 0, -2, 1000000000, NULL, (void*) &appData.loadPositionIndex, "", NULL, Spin, N_("Position Number (-1 or -2 = Auto-Increment):") },
 { 0,  0, 1000000000, NULL, (void*) &appData.rewindIndex, "", NULL, Spin, N_("Rewind Index after this many Games (0 = never):") },
 { 0,  0,          0, NULL, (void*) &appData.defNoBook, "", NULL, CheckBox, N_("Disable own engine books by default") },
+{ 0,  0,          0, NULL, (void*) &DoTimeControl, NULL, NULL, Button, N_("Time Control") },
+{ 0, SAME_ROW,    0, NULL, (void*) &DoCommonEngine, NULL, NULL, Button, N_("Common Engine") },
+{ 0, SAME_ROW,    0, NULL, (void*) &DoGeneral, NULL, NULL, Button, N_("General Options") },
+{ 0, SAME_ROW,    0, NULL, (void*) &PseudoOK, NULL, NULL, Button, N_("Continue Later") },
 { 0,  0,          0, NULL, (void*) &ReplaceParticipant, NULL, NULL, Button, N_("Replace Engine") },
 { 0, SAME_ROW,    0, NULL, (void*) &UpgradeParticipant, NULL, NULL, Button, N_("Upgrade Engine") },
 { 0, SAME_ROW,    0, NULL, (void*) &CloneTourney, NULL, NULL, Button, N_("Clone Tourney") },
@@ -290,18 +317,26 @@ static Option matchOptions[] = {
 static void
 ReplaceParticipant ()
 {
-    GenericReadout(matchOptions, 7);
+    GenericReadout(matchOptions, PARTICIPANTS);
     Substitute(strdup(engineName), True);
 }
 
 static void
 UpgradeParticipant ()
 {
-    GenericReadout(matchOptions, 7);
+    GenericReadout(matchOptions, PARTICIPANTS);
     Substitute(strdup(engineName), False);
 }
 
 static void
+PseudoOK ()
+{
+    GenericReadout(matchOptions, -2); // read all, but suppress calling of MatchOK
+    ASSIGN(appData.participants, engineName);
+    PopDown(MasterDlg); // early popdown to prevent FreezeUI called through MatchEvent from causing XtGrab warning
+}
+
+static void
 CloneTourney ()
 {
     FILE *f;
@@ -324,24 +359,28 @@ AddToTourney (int n, int sel)
     if(sel < 1) buf[0] = NULLCHAR; // back to top level
     else if(engineList[sel][0] == '#') safeStrCpy(buf, engineList[sel], MSG_SIZ); // group header, open group
     else { // normal line, select engine
-       AddLine(&matchOptions[7], engineMnemonic[sel]);
+       AddLine(&matchOptions[PARTICIPANTS], engineMnemonic[sel]);
        return;
     }
     nr = NamesToList(firstChessProgramNames, engineList, engineMnemonic, buf); // replace list by only the group contents
     ASSIGN(engineMnemonic[0], buf);
-    LoadListBox(&matchOptions[8], _("# no engines are installed"), -1, -1);
-    HighlightWithScroll(&matchOptions[8], 0, nr);
+    LoadListBox(&matchOptions[PARTICIPANTS+1], _("# no engines are installed"), -1, -1);
+    HighlightWithScroll(&matchOptions[PARTICIPANTS+1], 0, nr);
 }
 
 void
 MatchOptionsProc ()
 {
+   if(matchOptions[PARTICIPANTS+1].type != ListBox) {
+       DisplayError(_("Internal error: PARTICIPANTS set wrong"), 0);
+       return;
+   }
    NamesToList(firstChessProgramNames, engineList, engineMnemonic, "");
    matchOptions[9].min = -(appData.pairingEngine[0] != NULLCHAR); // with pairing engine, allow Swiss
    ASSIGN(tfName, appData.tourneyFile[0] ? appData.tourneyFile : MakeName(appData.defName));
    ASSIGN(engineName, appData.participants);
    ASSIGN(engineMnemonic[0], "");
-   GenericPopUp(matchOptions, _("Match Options"), TransientDlg, BoardWindow, MODAL, 0);
+   GenericPopUp(matchOptions, _("Tournament Options"), MasterDlg, BoardWindow, MODAL, 0);
 }
 
 // ------------------------------------------- General Options --------------------------------------------------
@@ -367,8 +406,10 @@ static Option generalOptions[] = {
 { 0,  0, 0, NULL, (void*) &appData.autoCallFlag, "", NULL, CheckBox, N_("Auto Flag") },
 { 0,  0, 0, NULL, (void*) &appData.autoFlipView, "", NULL, CheckBox, N_("Auto Flip View") },
 { 0,  0, 0, NULL, (void*) &appData.blindfold, "", NULL, CheckBox, N_("Blindfold") },
+/* TRANSLATORS: the drop menu is used to drop a piece, e.g. during bughouse or editing a position */
 { 0,  0, 0, NULL, (void*) &appData.dropMenu, "", NULL, CheckBox, N_("Drop Menu") },
 { 0,  0, 0, NULL, (void*) &appData.variations, "", NULL, CheckBox, N_("Enable Variation Trees") },
+{ 0,  0, 0, NULL, (void*) &appData.headers, "", NULL, CheckBox, N_("Headers in Engine Output Window") },
 { 0,  0, 0, NULL, (void*) &appData.hideThinkingFromHuman, "", NULL, CheckBox, N_("Hide Thinking from Human") },
 { 0,  0, 0, NULL, (void*) &appData.highlightLastMove, "", NULL, CheckBox, N_("Highlight Last Move") },
 { 0,  0, 0, NULL, (void*) &appData.highlightMoveWithArrow, "", NULL, CheckBox, N_("Highlight with Arrow") },
@@ -405,47 +446,66 @@ OptionsProc ()
 static void Pick P((int n));
 
 static char warning[MSG_SIZ];
+static int ranksTmp, filesTmp, sizeTmp;
 
 static Option variantDescriptors[] = {
-{ VariantNormal,        0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_("normal")},
-{ VariantMakruk, SAME_ROW, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_("makruk")},
+{ VariantNormal,        0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_("Normal")},
+{ VariantMakruk, SAME_ROW, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_("Makruk")},
 { VariantFischeRandom,  0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_("FRC")},
-{ VariantShatranj,SAME_ROW,135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_("shatranj")},
-{ VariantWildCastle,    0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_("wild castle")},
-{ VariantKnightmate,SAME_ROW,135,NULL,(void*) &Pick, "#FFFFFF", NULL, Button, N_("knightmate")},
-{ VariantNoCastle,      0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_("no castle")},
-{ VariantCylinder,SAME_ROW,135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_("cylinder *")},
+{ VariantShatranj,SAME_ROW,135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_("Shatranj")},
+{ VariantWildCastle,    0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_("Wild castle")},
+{ VariantKnightmate,SAME_ROW,135,NULL,(void*) &Pick, "#FFFFFF", NULL, Button, N_("Knightmate")},
+{ VariantNoCastle,      0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_("No castle")},
+{ VariantCylinder,SAME_ROW,135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_("Cylinder *")},
 { Variant3Check,        0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_("3-checks")},
 { VariantBerolina,SAME_ROW,135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_("berolina *")},
 { VariantAtomic,        0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_("atomic")},
 { VariantTwoKings,SAME_ROW,135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_("two kings")},
+{ -1,                   0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_(" ")}, // dummy, to have good alignment
+{ VariantSpartan,SAME_ROW, 135, NULL, (void*) &Pick, "#FF0000", NULL, Button, N_("Spartan")},
 { 0, 0, 0, NULL, NULL, NULL, NULL, Label, N_("Board size ( -1 = default for selected variant):")},
-{ 0, -1, BOARD_RANKS-1, NULL, (void*) &appData.NrRanks, "", NULL, Spin, N_("Number of Board Ranks:") },
-{ 0, -1, BOARD_FILES, NULL, (void*) &appData.NrFiles, "", NULL, Spin, N_("Number of Board Files:") },
-{ 0, -1, BOARD_RANKS-1, NULL, (void*) &appData.holdingsSize, "", NULL, Spin, N_("Holdings Size:") },
+{ 0, -1, BOARD_RANKS-1, NULL, (void*) &ranksTmp, "", NULL, Spin, N_("Number of Board Ranks:") },
+{ 0, -1, BOARD_FILES,   NULL, (void*) &filesTmp, "", NULL, Spin, N_("Number of Board Files:") },
+{ 0, -1, BOARD_RANKS-1, NULL, (void*) &sizeTmp,  "", NULL, Spin, N_("Holdings Size:") },
 { 0, 0, 275, NULL, NULL, NULL, NULL, Label, warning },
-{ 0, 0, 275, NULL, NULL, NULL, NULL, Label, "Variants marked with * can only be played\nwith legality testing off"},
+{ 0, 0, 275, NULL, NULL, NULL, NULL, Label, N_("Variants marked with * can only be played\nwith legality testing off.")},
 { 0, SAME_ROW, 0, NULL, NULL, NULL, NULL, Break, ""},
-{ VariantFairy,         0, 135, NULL, (void*) &Pick, "#BFBFBF", NULL, Button, N_("fairy")},
+{ VariantASEAN,         0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_("ASEAN")},
 { VariantGreat,  SAME_ROW, 135, NULL, (void*) &Pick, "#BFBFFF", NULL, Button, N_("Great Shatranj (10x8)")},
 { VariantSChess,        0, 135, NULL, (void*) &Pick, "#FFBFBF", NULL, Button, N_("Seirawan")},
-{ VariantFalcon, SAME_ROW, 135, NULL, (void*) &Pick, "#BFBFFF", NULL, Button, N_("falcon (10x8)")},
+{ VariantFalcon, SAME_ROW, 135, NULL, (void*) &Pick, "#BFBFFF", NULL, Button, N_("Falcon (10x8)")},
 { VariantSuper,         0, 135, NULL, (void*) &Pick, "#FFBFBF", NULL, Button, N_("Superchess")},
 { VariantCapablanca,SAME_ROW,135,NULL,(void*) &Pick, "#BFBFFF", NULL, Button, N_("Capablanca (10x8)")},
-{ VariantCrazyhouse,    0, 135, NULL, (void*) &Pick, "#FFBFBF", NULL, Button, N_("crazyhouse")},
+{ VariantCrazyhouse,    0, 135, NULL, (void*) &Pick, "#FFBFBF", NULL, Button, N_("Crazyhouse")},
 { VariantGothic, SAME_ROW, 135, NULL, (void*) &Pick, "#BFBFFF", NULL, Button, N_("Gothic (10x8)")},
-{ VariantBughouse,      0, 135, NULL, (void*) &Pick, "#FFBFBF", NULL, Button, N_("bughouse")},
-{ VariantJanus,  SAME_ROW, 135, NULL, (void*) &Pick, "#BFBFFF", NULL, Button, N_("janus (10x8)")},
-{ VariantSuicide,       0, 135, NULL, (void*) &Pick, "#FFFFBF", NULL, Button, N_("suicide")},
+{ VariantBughouse,      0, 135, NULL, (void*) &Pick, "#FFBFBF", NULL, Button, N_("Bughouse")},
+{ VariantJanus,  SAME_ROW, 135, NULL, (void*) &Pick, "#BFBFFF", NULL, Button, N_("Janus (10x8)")},
+{ VariantSuicide,       0, 135, NULL, (void*) &Pick, "#FFFFBF", NULL, Button, N_("Suicide")},
 { VariantCapaRandom,SAME_ROW,135,NULL,(void*) &Pick, "#BFBFFF", NULL, Button, N_("CRC (10x8)")},
 { VariantGiveaway,      0, 135, NULL, (void*) &Pick, "#FFFFBF", NULL, Button, N_("give-away")},
 { VariantGrand,  SAME_ROW, 135, NULL, (void*) &Pick, "#5070FF", NULL, Button, N_("grand (10x10)")},
 { VariantLosers,        0, 135, NULL, (void*) &Pick, "#FFFFBF", NULL, Button, N_("losers")},
 { VariantShogi,  SAME_ROW, 135, NULL, (void*) &Pick, "#BFFFFF", NULL, Button, N_("shogi (9x9)")},
-{ VariantSpartan,       0, 135, NULL, (void*) &Pick, "#FF0000", NULL, Button, N_("Spartan")},
+{ VariantFairy,         0, 135, NULL, (void*) &Pick, "#BFBFBF", NULL, Button, N_("fairy")},
 { VariantXiangqi, SAME_ROW,135, NULL, (void*) &Pick, "#BFFFFF", NULL, Button, N_("xiangqi (9x10)")},
-{ -1,                   0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_(" ")}, // dummy, to have good alignment
+{ VariantLion,          0, 135, NULL, (void*) &Pick, "#BFBFBF", NULL, Button, N_("mighty lion")},
 { VariantCourier, SAME_ROW,135, NULL, (void*) &Pick, "#BFFFBF", NULL, Button, N_("courier (12x8)")},
+{ VariantChuChess,      0, 135, NULL, (void*) &Pick, "#BFBFBF", NULL, Button, N_("chu chess (10x10)")},
+{ VariantChu,    SAME_ROW, 135, NULL, (void*) &Pick, "#BFFFBF", NULL, Button, N_("chu shogi (12x12)")},
+//{ -1,                   0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_(" ")}, // dummy, to have good alignment
+// optional buttons for engine-defined variants
+{ VariantUnknown,       0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Skip, NULL },
+{ VariantUnknown, SAME_ROW,135, NULL, (void*) &Pick, "#FFFFFF", NULL, Skip, NULL },
+{ VariantUnknown,       0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Skip, NULL },
+{ VariantUnknown, SAME_ROW,135, NULL, (void*) &Pick, "#FFFFFF", NULL, Skip, NULL },
+{ VariantUnknown,       0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Skip, NULL },
+{ VariantUnknown, SAME_ROW,135, NULL, (void*) &Pick, "#FFFFFF", NULL, Skip, NULL },
+{ VariantUnknown,       0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Skip, NULL },
+{ VariantUnknown, SAME_ROW,135, NULL, (void*) &Pick, "#FFFFFF", NULL, Skip, NULL },
+{ VariantUnknown,       0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Skip, NULL },
+{ VariantUnknown, SAME_ROW,135, NULL, (void*) &Pick, "#FFFFFF", NULL, Skip, NULL },
+{ VariantUnknown,       0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Skip, NULL },
+{ VariantUnknown, SAME_ROW,135, NULL, (void*) &Pick, "#FFFFFF", NULL, Skip, NULL },
 { 0, NO_OK, 0, NULL, NULL, "", NULL, EndMark , "" }
 };
 
@@ -453,27 +513,30 @@ static void
 Pick (int n)
 {
        VariantClass v = variantDescriptors[n].value;
+       if(v == VariantUnknown) safeStrCpy(engineVariant, variantDescriptors[n].name, MSG_SIZ); else *engineVariant = NULLCHAR;
+       GenericReadout(variantDescriptors, -1); // read new ranks and file settings
        if(!appData.noChessProgram) {
-           char *name = VariantName(v), buf[MSG_SIZ];
-           if (first.protocolVersion > 1 && StrStr(first.variants, name) == NULL) {
-               /* [HGM] in protocol 2 we check if variant is suported by engine */
-             snprintf(buf, MSG_SIZ,  _("Variant %s not supported by %s"), name, first.tidy);
-               DisplayError(buf, 0);
+           char buf[MSG_SIZ];
+           if (!SupportedVariant(first.variants, v, filesTmp, ranksTmp, sizeTmp, first.protocolVersion, first.tidy)) {
+               DisplayError(variantError, 0);
                return; /* ignore OK if first engine does not support it */
            } else
-           if (second.initDone && second.protocolVersion > 1 && StrStr(second.variants, name) == NULL) {
-             snprintf(buf, MSG_SIZ,  _("Warning: second engine (%s) does not support this!"), second.tidy);
+           if (second.initDone &&
+               !SupportedVariant(second.variants, v, filesTmp, ranksTmp, sizeTmp, second.protocolVersion, second.tidy)) {
+                snprintf(buf, MSG_SIZ,  _("Warning: second engine (%s) does not support this!"), second.tidy);
                DisplayError(buf, 0);   /* use of second engine is optional; only warn user */
            }
        }
 
-       GenericReadout(variantDescriptors, -1); // make sure ranks and file settings are read
-
        gameInfo.variant = v;
        appData.variant = VariantName(v);
 
        shuffleOpenings = FALSE; /* [HGM] shuffle: possible shuffle reset when we switch */
        startedFromPositionFile = FALSE; /* [HGM] loadPos: no longer valid in new variant */
+       appData.fischerCastling = FALSE; /* [HGM] fischer: no longer valid in new variant */
+       appData.NrRanks = ranksTmp;
+       appData.NrFiles = filesTmp;
+       appData.holdingsSize = sizeTmp;
        appData.pieceToCharTable = NULL;
        appData.pieceNickNames = "";
        appData.colorNickNames = "";
@@ -485,9 +548,30 @@ Pick (int n)
 void
 NewVariantProc ()
 {
-   if(appData.noChessProgram) sprintf(warning, _("Only bughouse is not available in viewer mode")); else
-   sprintf(warning, _("All variants not supported by first engine\n(currently %s) are disabled"), first.tidy);
+   static int start;
+   int i, last;
+   char buf[MSG_SIZ];
+   ranksTmp = filesTmp = sizeTmp = -1; // prefer defaults over actual settings
+   if(appData.noChessProgram) sprintf(warning, _("Only bughouse is not available in viewer mode.")); else
+   sprintf(warning, _("All variants not supported by the first engine\n(currently %s) are disabled."), first.tidy);
+   if(!start) while(variantDescriptors[start].type != Skip) start++; // locate first spare
+   last = -1;
+   for(i=0; variantDescriptors[start+i].type != EndMark; i++) { // create buttons for engine-defined variants
+     char *v = EngineDefinedVariant(&first, i);
+     if(v) {
+       last =  i;
+       ASSIGN(variantDescriptors[start+i].name, v);
+       variantDescriptors[start+i].type = Button;
+     } else variantDescriptors[start+i].type = Skip;
+   }
+   if(!(last&1)) { // odd number, add filler
+       ASSIGN(variantDescriptors[start+last+1].name, " ");
+       variantDescriptors[start+last+1].type = Button;
+       variantDescriptors[start+last+1].value = Skip;
+   }
+   safeStrCpy(buf, engineVariant, MSG_SIZ); *engineVariant = NULLCHAR; // yeghh...
    GenericPopUp(variantDescriptors, _("New Variant"), TransientDlg, BoardWindow, MODAL, 0);
+   safeStrCpy(engineVariant, buf, MSG_SIZ); // must temporarily clear to avoid enabling all variant buttons
 }
 
 //------------------------------------------- Common Engine Options -------------------------------------
@@ -578,6 +662,7 @@ Option icsOptions[] = {
 { 0, 0, 0, NULL, (void*) &appData.seekGraph, "",   NULL, CheckBox, N_("Seek Graph") },
 { 0, 0, 0, NULL, (void*) &appData.autoRefresh, "", NULL, CheckBox, N_("Auto-Refresh Seek Graph") },
 { 0, 0, 0, NULL, (void*) &appData.autoBox, "", NULL, CheckBox, N_("Auto-InputBox PopUp") },
+{ 0, 0, 0, NULL, (void*) &appData.quitNext, "", NULL, CheckBox, N_("Quit after game") },
 { 0, 0, 0, NULL, (void*) &appData.premove, "",     NULL, CheckBox, N_("Premove") },
 { 0, 0, 0, NULL, (void*) &appData.premoveWhite, "", NULL, CheckBox, N_("Premove for White") },
 { 0, 0, 0, NULL, (void*) &appData.premoveWhiteText, "", NULL, TextBox, N_("First White Move:") },
@@ -597,6 +682,7 @@ Option icsOptions[] = {
 { 0, 0, 0, NULL, (void*) &appData.colorChallenge, "", NULL, TextBox, N_("Challenge Text Colors:") },
 { 0, 0, 0, NULL, (void*) &appData.colorRequest, "", NULL, TextBox, N_("Request Text Colors:") },
 { 0, 0, 0, NULL, (void*) &appData.colorSeek, "", NULL, TextBox, N_("Seek Text Colors:") },
+{ 0, 0, 0, NULL, (void*) &appData.colorNormal, "", NULL, TextBox, N_("Other Text Colors:") },
 { 0, 0, 0, NULL, (void*) &IcsOptionsOK, "", NULL, EndMark , "" }
 };
 
@@ -611,11 +697,14 @@ IcsOptionsProc ()
 static char *modeNames[] = { N_("Exact position match"), N_("Shown position is subset"), N_("Same material with exactly same Pawn chain"),
                      N_("Same material"), N_("Material range (top board half optional)"), N_("Material difference (optional stuff balanced)"), NULL };
 static char *modeValues[] = { "1", "2", "3", "4", "5", "6" };
-static char *searchMode;
+static char *searchMode, *countRange;
 
 static int
 LoadOptionsOK ()
 {
+    appData.minPieces = appData.maxPieces = 0;
+    sscanf(countRange, "%d-%d", &appData.minPieces, &appData.maxPieces);
+    if(appData.maxPieces < appData.minPieces) appData.maxPieces = appData.minPieces;
     appData.searchMode = atoi(searchMode);
     return 1;
 }
@@ -632,6 +721,7 @@ static Option loadOptions[] = {
 { 0, 0,5000,    NULL, (void*) &appData.eloThreshold2, "", NULL, Spin, N_("Elo of weakest player at least:") },
 { 0, 0,5000,    NULL, (void*) &appData.dateThreshold, "", NULL, Spin, N_("No games before year:") },
 { 0, 1,50,      NULL, (void*) &appData.stretch, "", NULL, Spin, N_("Minimum nr consecutive positions:") },
+{ 0, 0,197,     NULL, (void*) &countRange, "", NULL, TextBox,  "Final nr of pieces" },
 { 0, 0,205,     NULL, (void*) &searchMode, (char*) modeValues, modeNames, ComboBox, N_("Search mode:") },
 { 0, 0, 0,      NULL, (void*) &appData.ignoreColors, "", NULL, CheckBox, N_("Also match reversed colors") },
 { 0, 0, 0,      NULL, (void*) &appData.findMirror, "", NULL, CheckBox, N_("Also match left-right flipped position") },
@@ -641,6 +731,7 @@ static Option loadOptions[] = {
 void
 LoadOptionsPopUp (DialogClass parent)
 {
+   ASSIGN(countRange, "");
    ASSIGN(searchMode, modeValues[appData.searchMode-1]);
    GenericPopUp(loadOptions, _("Load Game Options"), TransientDlg, parent, MODAL, 0);
 }
@@ -689,6 +780,7 @@ static char *soundNames[] = {
        N_("Penalty"),
        N_("Phone"),
        N_("Pop"),
+       N_("Roar"),
        N_("Slap"),
        N_("Wood Thunk"),
        NULL,
@@ -707,6 +799,7 @@ static char *soundFiles[] = { // sound files corresponding to above names
        "penalty.wav",
        "phone.wav",
        "pop2.wav",
+       "roar.wav",
        "slap.wav",
        "woodthunk.wav",
        NULL,
@@ -734,6 +827,7 @@ static Option soundOptions[] = {
 { 0, 0, 0, NULL, (void*) &appData.soundTell, (char*) soundFiles, soundNames, ComboBox, N_("Tell:") },
 { 0, 0, 0, NULL, (void*) &appData.soundKibitz, (char*) soundFiles, soundNames, ComboBox, N_("Kibitz:") },
 { 0, 0, 0, NULL, (void*) &appData.soundRequest, (char*) soundFiles, soundNames, ComboBox, N_("Request:") },
+{ 0, 0, 0, NULL, (void*) &appData.soundRoar, (char*) soundFiles, soundNames, ComboBox, N_("Lion roar:") },
 { 0, 0, 0, NULL, (void*) &appData.soundSeek, (char*) soundFiles, soundNames, ComboBox, N_("Seek:") },
 { 0, SAME_ROW, 0, NULL, NULL, "", NULL, EndMark , "" }
 };
@@ -757,20 +851,20 @@ SoundOptionsProc ()
 
 static void DefColor P((int n));
 static void AdjustColor P((int i));
+static void ThemeSel P((int n, int sel));
+static int BoardOptionsOK P((int n));
 
 static char oldPieceDir[MSG_SIZ];
+extern char *engineLine, *nickName; // defined later on
 
-static int
-BoardOptionsOK (int n)
-{
-    if(appData.overrideLineGap >= 0) lineGap = appData.overrideLineGap; else lineGap = defaultLineGap;
-    InitDrawingParams(strcmp(oldPieceDir, appData.pieceDirectory));
-    InitDrawingSizes(-1, 0);
-    DrawPosition(True, NULL);
-    return 1;
-}
+#define THEMELIST 1
 
 static Option boardOptions[] = {
+{   0,LR|T2T, 0, NULL, NULL, NULL, NULL, Label, N_("Selectable themes:") },
+{ 300,LR|TB,200, NULL, (void*) engineMnemonic, (char*) &ThemeSel, NULL, ListBox, "" },
+{   0,LR|T2T, 0, NULL, NULL, NULL, NULL, Label, N_("New name for current theme:") },
+{ 0, 0, 0, NULL, (void*) &nickName, ".png", NULL, TextBox, "" },
+{ 0,SAME_ROW, 0, NULL, NULL, NULL, NULL, Break, NULL },
 { 0,          0, 70, NULL, (void*) &appData.whitePieceColor, "", NULL, TextBox, N_("White Piece Color:") },
 { 1000, SAME_ROW, 0, NULL, (void*) &DefColor, NULL, (char**) "#FFFFCC", Button, "      " },
 /* TRANSLATORS: R = single letter for the color red */
@@ -814,7 +908,8 @@ static Option boardOptions[] = {
 { 0, 0, 0, NULL, (void*) &appData.upsideDown, "", NULL, CheckBox, N_("Flip Pieces Shogi Style        (Colored buttons restore default)") },
 //{ 0, 0, 0, NULL, (void*) &appData.allWhite, "", NULL, CheckBox, N_("Use Outline Pieces for Black") },
 { 0, 0, 0, NULL, (void*) &appData.monoMode, "", NULL, CheckBox, N_("Mono Mode") },
-{ 0,-1, 5, NULL, (void*) &appData.overrideLineGap, "", NULL, Spin, N_("Line Gap ( -1 = default for board size):") },
+{ 0, 0, 200, NULL, (void*) &appData.logoSize, "", NULL, Spin, N_("Logo Size (0=off, requires restart):") },
+{ 0,-1, 5, NULL, (void*) &appData.overrideLineGap, "", NULL, Spin, N_("Line Gap (-1 = default for board size):") },
 { 0, 0, 0, NULL, (void*) &appData.useBitmaps, "", NULL, CheckBox, N_("Use Board Textures") },
 { 0, 0, 0, NULL, (void*) &appData.liteBackTextureFile, ".png", NULL, FileName, N_("Light-Squares Texture File:") },
 { 0, 0, 0, NULL, (void*) &appData.darkBackTextureFile, ".png", NULL, FileName, N_("Dark-Squares Texture File:") },
@@ -823,6 +918,16 @@ static Option boardOptions[] = {
 { 0, 0, 0, NULL, (void*) &BoardOptionsOK, "", NULL, EndMark , "" }
 };
 
+static int
+BoardOptionsOK (int n)
+{
+    if(n && (n = SelectedListBoxItem(&boardOptions[THEMELIST])) > 0 && *engineList[n] != '#') { // called by pressing OK, and theme selected
+       ASSIGN(engineLine, engineList[n]);
+    }
+    LoadTheme();
+    return 1;
+}
+
 static void
 SetColorText (int n, char *buf)
 {
@@ -866,9 +971,32 @@ AdjustColor (int i)
 }
 
 void
+ThemeSel (int n, int sel)
+{
+    int nr;
+    char buf[MSG_SIZ];
+    if(sel < 1) buf[0] = NULLCHAR; // back to top level
+    else if(engineList[sel][0] == '#') safeStrCpy(buf, engineList[sel], MSG_SIZ); // group header, open group
+    else { // normal line, select engine
+       ASSIGN(engineLine, engineList[sel]);
+       LoadTheme();
+        PopDown(TransientDlg);
+       return;
+    }
+    nr = NamesToList(appData.themeNames, engineList, engineMnemonic, buf); // replace list by only the group contents
+    ASSIGN(engineMnemonic[0], buf);
+    LoadListBox(&boardOptions[THEMELIST], _("# no themes are defined"), -1, -1);
+    HighlightWithScroll(&boardOptions[THEMELIST], 0, nr);
+}
+
+void
 BoardOptionsProc ()
 {
    strncpy(oldPieceDir, appData.pieceDirectory, MSG_SIZ-1); // to see if it changed
+   ASSIGN(engineLine, "");
+   ASSIGN(nickName, "");
+   ASSIGN(engineMnemonic[0], "");
+   NamesToList(appData.themeNames, engineList, engineMnemonic, "");
    GenericPopUp(boardOptions, _("Board Options"), TransientDlg, BoardWindow, MODAL, 0);
 }
 
@@ -876,24 +1004,42 @@ BoardOptionsProc ()
 
 Option textOptions[100];
 static void PutText P((char *text, int pos));
+static void NewChat P((char *name));
+static char clickedWord[MSG_SIZ], click;
 
 void
 SendString (char *p)
 {
-    char buf[MSG_SIZ], *q;
+    char buf[MSG_SIZ], buf2[MSG_SIZ], *q;
+    if(q = strstr(p, "$name")) { // in Xaw this is already intercepted
+       if(!shellUp[TextMenuDlg] || !clickedWord[0]) return;
+       strncpy(buf2, p, MSG_SIZ);
+       snprintf(buf2 + (q-p), MSG_SIZ -(q-p), "%s%s", clickedWord, q+5);
+        p = buf2;
+    }
+    if(!strcmp(p, "$copy")) { // special case for copy selection
+        CopySomething(clickedWord);
+    } else
+    if(!strcmp(p, "$chat")) { // special case for opening chat
+        NewChat(clickedWord);
+    } else
     if(q = strstr(p, "$input")) {
        if(!shellUp[TextMenuDlg]) return;
        strncpy(buf, p, MSG_SIZ);
        strncpy(buf + (q-p), q+6, MSG_SIZ-(q-p));
        PutText(buf, q-p);
-       return;
+    } else {
+       snprintf(buf, MSG_SIZ, "%s\n", p);
+       SendToICS(buf);
+    }
+    if(click) { // popped up by memo click
+       click = clickedWord[0] = 0;
+       PopDown(TextMenuDlg);
     }
-    snprintf(buf, MSG_SIZ, "%s\n", p);
-    SendToICS(buf);
 }
 
 void
-IcsTextProc ()
+IcsTextPopUp ()
 {
    int i=0, j;
    char *p, *q, *r;
@@ -925,6 +1071,13 @@ IcsTextProc ()
    GenericPopUp(textOptions, _("ICS text menu"), TextMenuDlg, BoardWindow, NONMODAL, appData.topLevel);
 }
 
+void
+IcsTextProc ()
+{
+    if(shellUp[TextMenuDlg]) PopDown(TextMenuDlg);
+    else IcsTextPopUp();
+}
+
 //---------------------------------------------------- Edit Comment -----------------------------------
 
 static char *commentText;
@@ -943,7 +1096,7 @@ NewComCallback (int n)
 }
 
 Option commentOptions[] = {
-{ 200, T_VSCRL | T_FILL | T_WRAP | T_TOP, 250, NULL, (void*) &commentText, "", (char **) &CommentClick, TextBox, "" },
+{ 200, T_VSCRL | T_FILL | T_WRAP | T_TOP, 250, NULL, (void*) &commentText, (char*) &appData.commentFont, (char **) &CommentClick, TextBox, "" },
 { 0,     0,     50, NULL, (void*) &ClearComment, NULL, NULL, Button, N_("clear") },
 { 0, SAME_ROW, 100, NULL, (void*) &SaveChanges, NULL, NULL, Button, N_("save changes") },
 { 0, SAME_ROW,  0,  NULL, (void*) &NewComCallback, "", NULL, EndMark , "" }
@@ -1021,27 +1174,46 @@ EditCommentProc ()
 //------------------------------------------------------ Edit Tags ----------------------------------
 
 static void changeTags P((int n));
-static char *tagsText;
+static char *tagsText, **resPtr;
+
+static int TagsClick P((Option *opt, int n, int x, int y, char *val, int index));
 
 static int
 NewTagsCallback (int n)
 {
+    if(bookUp) SaveToBook(tagsText), DisplayBook(currentMove); else
+    if(resPtr) { ASSIGN(*resPtr, tagsText); } else
     ReplaceTags(tagsText, &gameInfo);
     return 1;
 }
 
+static void
+NewMove ()
+{
+    addToBookFlag = !addToBookFlag;
+}
+
 static Option tagsOptions[] = {
 {   0,   0,   0, NULL, NULL, NULL, NULL, Label,  NULL },
-{ 200, T_VSCRL | T_FILL | T_WRAP | T_TOP, 200, NULL, (void*) &tagsText, "", NULL, TextBox, "" },
-{   0,   0, 100, NULL, (void*) &changeTags, NULL, NULL, Button, N_("save changes") },
+{ 200, T_VSCRL | T_FILL | T_WRAP | T_TOP, 200, NULL, (void*) &tagsText, (char*) &appData.tagsFont, (char **) &TagsClick, TextBox, "" },
+{   0,   0, 100, NULL, (void*) &NewMove,    NULL, NULL, Button, N_("add next move") },
+{ 0,SAME_ROW,100,NULL, (void*) &changeTags, NULL, NULL, Button, N_("save changes") },
 { 0,SAME_ROW, 0, NULL, (void*) &NewTagsCallback, "", NULL, EndMark , "" }
 };
 
+static int TagsClick (Option *opt, int n, int x, int y, char *val, int index)
+{
+    if(!bookUp || n != 3) return FALSE; // only button-3 press in Edit Book is of interest
+    PlayBookMove(val, index);
+    return TRUE;
+}
+
 static void
 changeTags (int n)
 {
     GenericReadout(tagsOptions, 1);
-    if(bookUp) SaveToBook(tagsText); else
+    if(bookUp) SaveToBook(tagsText), DisplayBook(currentMove); else
+    if(resPtr) { ASSIGN(*resPtr, tagsText); } else
     ReplaceTags(tagsText, &gameInfo);
 }
 
@@ -1050,6 +1222,8 @@ NewTagsPopup (char *text, char *msg)
 {
     char *title = bookUp ? _("Edit book") : _("Tags");
 
+    tagsOptions[2].type = bookUp ? Button : Skip;
+    tagsOptions[3].min = bookUp ? SAME_ROW : 0;
     if(DialogExists(TagsDlg)) { // if already exists, alter title and content
        SetWidgetText(&tagsOptions[1], text, TagsDlg);
        SetDialogTitle(TagsDlg, title);
@@ -1069,6 +1243,7 @@ TagsPopUp (char *tags, char *msg)
 void
 EditTagsPopUp (char *tags, char **dest)
 {   // wrapper to preserve old name used in back-end
+    resPtr = dest; 
     NewTagsPopup(tags, NULL);
 }
 
@@ -1085,6 +1260,12 @@ EditTagsProc ()
   if (bookUp || !PopDown(TagsDlg)) EditTagsEvent();
 }
 
+void
+AddBookMove (char *text)
+{
+    AppendText(&tagsOptions[1], text);
+}
+
 //---------------------------------------------- ICS Input Box ----------------------------------
 
 char *icsText;
@@ -1134,6 +1315,8 @@ NextInHistory ()
 }
 // end of borrowed code
 
+#define INPUT 0
+
 Option boxOptions[] = {
 {  30, T_TOP, 400, NULL, (void*) &icsText, "", NULL, TextBox, "" },
 {  0,  NO_OK,   0, NULL, NULL, "", NULL, EndMark , "" }
@@ -1144,10 +1327,10 @@ ICSInputSendText ()
 {
     char *val;
 
-    GetWidgetText(&boxOptions[0], &val);
+    GetWidgetText(&boxOptions[INPUT], &val);
     SaveInHistory(val);
     SendMultiLineToICS(val);
-    SetWidgetText(&boxOptions[0], "", InputBoxDlg);
+    SetWidgetText(&boxOptions[INPUT], "", InputBoxDlg);
 }
 
 void
@@ -1161,29 +1344,14 @@ IcsKey (int n)
        ICSInputSendText();
        return;
       case 1:
-       GetWidgetText(&boxOptions[0], &val);
+       GetWidgetText(&boxOptions[INPUT], &val);
        val = PrevInHistory(val);
        break;
       case -1:
        val = NextInHistory();
     }
-    SetWidgetText(&boxOptions[0], val = val ? val : "", InputBoxDlg);
-    SetInsertPos(&boxOptions[0], strlen(val));
-}
-
-static void
-PutText (char *text, int pos)
-{
-    char buf[MSG_SIZ], *p;
-
-    if(strstr(text, "$add ") == text) {
-       GetWidgetText(&boxOptions[0], &p);
-       snprintf(buf, MSG_SIZ, "%s%s", p, text+5); text = buf;
-       pos += strlen(p) - 5;
-    }
-    SetWidgetText(&boxOptions[0], text, TextMenuDlg);
-    SetInsertPos(&boxOptions[0], pos);
-    HardSetFocus(&boxOptions[0]);
+    SetWidgetText(&boxOptions[INPUT], val = val ? val : "", InputBoxDlg);
+    SetInsertPos(&boxOptions[INPUT], strlen(val));
 }
 
 void
@@ -1191,8 +1359,8 @@ ICSInputBoxPopUp ()
 {
     MarkMenu("View.ICSInputBox", InputBoxDlg);
     if(GenericPopUp(boxOptions, _("ICS input box"), InputBoxDlg, BoardWindow, NONMODAL, 0))
-       AddHandler(&boxOptions[0], InputBoxDlg, 3);
-    CursorAtEnd(&boxOptions[0]);
+       AddHandler(&boxOptions[INPUT], InputBoxDlg, 3);
+    CursorAtEnd(&boxOptions[INPUT]);
 }
 
 void
@@ -1229,15 +1397,15 @@ PopUpMoveDialog (char firstchar)
 
 void
 BoxAutoPopUp (char *buf)
-{
+{       // only used in Xaw. GTK calls ConsoleAutoPopUp in stead (when we type to board)
        if(!appData.autoBox) return;
        if(appData.icsActive) { // text typed to board in ICS mode: divert to ICS input box
            if(DialogExists(InputBoxDlg)) { // box already exists: append to current contents
                char *p, newText[MSG_SIZ];
-               GetWidgetText(&boxOptions[0], &p);
+               GetWidgetText(&boxOptions[INPUT], &p);
                snprintf(newText, MSG_SIZ, "%s%c", p, *buf);
-               SetWidgetText(&boxOptions[0], newText, InputBoxDlg);
-               if(shellUp[InputBoxDlg]) HardSetFocus (&boxOptions[0]); //why???
+               SetWidgetText(&boxOptions[INPUT], newText, InputBoxDlg);
+               if(shellUp[InputBoxDlg]) HardSetFocus (&boxOptions[INPUT], InputBoxDlg); //why???
            } else icsText = buf; // box did not exist: make sure it pops up with char in it
            ICSInputBoxPopUp();
        } else PopUpMoveDialog(*buf);
@@ -1368,6 +1536,7 @@ ShuffleOK (int n)
 
 static Option shuffleOptions[] = {
   {   0,  0,    0, NULL, (void*) &shuffleOpenings, NULL, NULL, CheckBox, N_("shuffle") },
+  {   0,  0,    0, NULL, (void*) &appData.fischerCastling, NULL, NULL, CheckBox, N_("Fischer castling") },
   { 0,-1,2000000000, NULL, (void*) &appData.defaultFrcPosition, "", NULL, Spin, N_("Start-position number:") },
   {   0,  0,    0, NULL, (void*) &SetRandom, NULL, NULL, Button, N_("randomize") },
   {   0,  SAME_ROW,    0, NULL, (void*) &SetRandom, NULL, NULL, Button, N_("pick fixed") },
@@ -1552,6 +1721,7 @@ PromoPick (int n)
        ClearHighlights();
        return;
     }
+    if(promoChar == '=' && !IS_SHOGI(gameInfo.variant)) promoChar = NULLCHAR;
     UserMoveEvent(fromX, fromY, toX, toY, promoChar);
 
     if (!appData.highlightLastMove || gotPremove) ClearHighlights();
@@ -1568,11 +1738,11 @@ SetPromo (char *name, int nr, char promoChar)
 }
 
 void
-PromotionPopUp ()
+PromotionPopUp (char choice)
 { // choice depends on variant: prepare dialog acordingly
   count = 8;
-  SetPromo(_("Cancel"), --count, 0); // Beware: GenericPopUp cannot handle user buttons named "cancel" (lowe case)!
-  if(gameInfo.variant != VariantShogi) {
+  SetPromo(_("Cancel"), --count, -1); // Beware: GenericPopUp cannot handle user buttons named "cancel" (lowe case)!
+  if(choice != '+') {
     if (!appData.testLegality || gameInfo.variant == VariantSuicide ||
         gameInfo.variant == VariantSpartan && !WhiteOnMove(currentMove) ||
         gameInfo.variant == VariantGiveaway) {
@@ -1594,6 +1764,8 @@ PromotionPopUp ()
         SetPromo(_("Chancellor"), --count, 'c');
       }
       SetPromo(_("Queen"), --count, 'q');
+      if(gameInfo.variant == VariantChuChess)
+        SetPromo(_("Lion"), --count, 'l');
     }
   } else // [HGM] shogi
   {
@@ -1606,23 +1778,130 @@ PromotionPopUp ()
 
 //---------------------------- Chat Windows ----------------------------------------------
 
-static char *line, *memo, *partner, *texts[MAX_CHAT], dirty[MAX_CHAT];
+static char *line, *memo, *chatMemo, *partner, *texts[MAX_CHAT], dirty[MAX_CHAT], *inputs[MAX_CHAT], *icsLine, *tmpLine;
 static int activePartner;
+int hidden = 1;
 
 void ChatSwitch P((int n));
 int  ChatOK P((int n));
 
+#define CHAT_ICS     6
+#define CHAT_PARTNER 8
+#define CHAT_OUT    11
+#define CHAT_PANE   12
+#define CHAT_IN     13
+
+void PaneSwitch P((void));
+void ClearChat P((void));
+
+WindowPlacement wpTextMenu;
+
+int
+ContextMenu (Option *opt, int button, int x, int y, char *text, int index)
+{ // callback for ICS-output clicks; handles button 3, passes on other events
+  int h;
+  if(button == -3) return TRUE; // supress default GTK context menu on up-click
+  if(button != 3) return FALSE;
+  if(index == -1) { // pre-existing selection in memo
+    strncpy(clickedWord, text, MSG_SIZ);
+  } else { // figure out what word was clicked
+    char *start, *end;
+    start = end = text + index;
+    while(isalnum(*end)) end++;
+    while(start > text && isalnum(start[-1])) start--;
+    clickedWord[0] = NULLCHAR;
+    if(end-start >= 80) end = start + 80; // intended for small words and numbers
+    strncpy(clickedWord, start, end-start); clickedWord[end-start] = NULLCHAR;
+  }
+  click = !shellUp[TextMenuDlg]; // request auto-popdown of textmenu when we popped it up
+  h = wpTextMenu.height; // remembered height of text menu
+  if(h <= 0) h = 65;     // when not available, position w.r.t. top
+  GetPlacement(ChatDlg, &wpTextMenu);
+  if(opt->target == (void*) &chatMemo) wpTextMenu.y += (wpTextMenu.height - 30)/2; // click in chat
+  wpTextMenu.x += x - 50; wpTextMenu.y += y - h + 50; // request positioning
+  if(wpTextMenu.x < 0) wpTextMenu.x = 0;
+  if(wpTextMenu.y < 0) wpTextMenu.y = 0;
+  wpTextMenu.width = wpTextMenu.height = -1;
+  IcsTextPopUp();
+  return TRUE;
+}
+
 Option chatOptions[] = {
+{  0,  0,   0, NULL, NULL, "", NULL, Label , N_("Chats:") },
+{ 1, SAME_ROW|TT, 75, NULL, (void*) &ChatSwitch, NULL, NULL, Button, N_("New Chat") },
+{ 2, SAME_ROW|TT, 75, NULL, (void*) &ChatSwitch, NULL, NULL, Button, N_("New Chat") },
+{ 3, SAME_ROW|TT, 75, NULL, (void*) &ChatSwitch, NULL, NULL, Button, N_("New Chat") },
+{ 4, SAME_ROW|TT, 75, NULL, (void*) &ChatSwitch, NULL, NULL, Button, N_("New Chat") },
+{ 5, SAME_ROW|TT, 75, NULL, (void*) &ChatSwitch, NULL, NULL, Button, N_("New Chat") },
+{ 250, T_VSCRL | T_FILL | T_WRAP | T_TOP,    510, NULL, (void*) &memo, NULL, (void*) &ContextMenu, TextBox, "" },
+{  0,  0,   0, NULL, NULL, "", NULL, Break , "" },
 { 0,   T_TOP,    100, NULL, (void*) &partner, NULL, NULL, TextBox, N_("Chat partner:") },
-{ 1, SAME_ROW|TT, 75, NULL, (void*) &ChatSwitch, NULL, NULL, Button, "" },
-{ 2, SAME_ROW|TT, 75, NULL, (void*) &ChatSwitch, NULL, NULL, Button, "" },
-{ 3, SAME_ROW|TT, 75, NULL, (void*) &ChatSwitch, NULL, NULL, Button, "" },
-{ 4, SAME_ROW|TT, 75, NULL, (void*) &ChatSwitch, NULL, NULL, Button, "" },
-{ 100, T_VSCRL | T_FILL | T_WRAP | T_TOP,    510, NULL, (void*) &memo, NULL, NULL, TextBox, "" },
+{  0, SAME_ROW, 0, NULL, (void*) &ClearChat,  NULL, NULL, Button, N_("End Chat") },
+{  0, SAME_ROW, 0, NULL, (void*) &PaneSwitch, NULL, NULL, Button, N_("Hide") },
+{ 250, T_VSCRL | T_FILL | T_WRAP | T_TOP,    510, NULL, (void*) &chatMemo, NULL, (void*) &ContextMenu, TextBox, "" },
+{  0,  0,   0, NULL, NULL, "", NULL, Break , "" },
 {  0,    0,  510, NULL, (void*) &line, NULL, NULL, TextBox, "" },
 { 0, NO_OK|SAME_ROW, 0, NULL, (void*) &ChatOK, NULL, NULL, EndMark , "" }
 };
 
+static void
+PutText (char *text, int pos)
+{
+    char buf[MSG_SIZ], *p;
+    DialogClass dlg = ChatDlg;
+    Option *opt = &chatOptions[CHAT_IN];
+
+    if(strstr(text, "$add ") == text) {
+       GetWidgetText(&boxOptions[INPUT], &p);
+       snprintf(buf, MSG_SIZ, "%s%s", p, text+5); text = buf;
+       pos += strlen(p) - 5;
+    }
+    if(shellUp[InputBoxDlg]) opt = &boxOptions[INPUT], dlg = InputBoxDlg; // for the benefit of Xaw give priority to ICS Input Box
+    SetWidgetText(opt, text, dlg);
+    SetInsertPos(opt, pos);
+    HardSetFocus(opt, dlg);
+    CursorAtEnd(opt);
+}
+
+int
+IcsHist (int n, Option *opt, DialogClass dlg)
+{   // [HGM] input: let up-arrow recall previous line from history
+    char *val = NULL; // to suppress spurious warning
+    int chat, start;
+
+    if(opt != &chatOptions[CHAT_IN] && !(opt == &chatOptions[CHAT_PARTNER] && n == 33)) return 0;
+    switch(n) {
+      case 33: // <Esc>
+       if(hidden) BoardToTop();
+       else PaneSwitch();
+       break;
+      case 15:
+       NewChat(lastTalker);
+       break;
+      case 14:
+       for(chat=0; chat < MAX_CHAT; chat++) if(!chatPartner[chat][0]) break;
+       if(chat < MAX_CHAT) ChatSwitch(chat + 1);
+       break;
+      case 10: // <Tab>
+       chat = start = (activePartner - hidden + MAX_CHAT) % MAX_CHAT;
+        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
+        ChatSwitch(chat + 1);
+       break;
+      case 1:
+       GetWidgetText(opt, &val);
+       val = PrevInHistory(val);
+       break;
+      case -1:
+       val = NextInHistory();
+    }
+    SetWidgetText(opt, val = val ? val : "", dlg);
+    SetInsertPos(opt, strlen(val));
+    return 1;
+}
+
 void
 OutputChatMessage (int partner, char *mess)
 {
@@ -1633,11 +1912,11 @@ OutputChatMessage (int partner, char *mess)
     texts[partner] = (char*) malloc(len);
     snprintf(texts[partner], len, "%s%s", p ? p : "", mess);
     FREE(p);
-    if(partner == activePartner) {
-       AppendText(&chatOptions[5], mess);
-       SetInsertPos(&chatOptions[5], len-2);
+    if(partner == activePartner && !hidden) {
+       AppendText(&chatOptions[CHAT_OUT], mess);
+       SetInsertPos(&chatOptions[CHAT_OUT], len-2);
     } else {
-       SetColor("#FFC000", &chatOptions[partner + (partner < activePartner)]);
+       SetColor("#FFC000", &chatOptions[partner + 1]);
        dirty[partner] = 1;
     }
 }
@@ -1647,17 +1926,19 @@ 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(!partner || strcmp(partner, chatPartner[activePartner])) {
+    if(!hidden && (!partner || strcmp(partner, chatPartner[activePartner]))) {
        safeStrCpy(chatPartner[activePartner], partner, MSG_SIZ);
-       SetWidgetText(&chatOptions[5], "", -1); // clear text if we alter partner
-       SetWidgetText(&chatOptions[6], "", ChatDlg); // clear text if we alter partner
-       HardSetFocus(&chatOptions[6]);
+       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"));
+       HardSetFocus(&chatOptions[CHAT_IN], 0);
     }
-    if(line[0]) { // something was typed
-       SetWidgetText(&chatOptions[6], "", ChatDlg);
+    if(line[0] || hidden) { // something was typed (for ICS commands we also allow empty line!)
+       SetWidgetText(&chatOptions[CHAT_IN], "", ChatDlg);
        // from here on it could be back-end
        if(line[strlen(line)-1] == '\n') line[strlen(line)-1] = NULLCHAR;
        SaveInHistory(line);
+       if(hidden || !*chatPartner[activePartner]) snprintf(buf, MSG_SIZ, "%s\n", line); else // command for ICS
        if(!strcmp("whispers", chatPartner[activePartner]))
              snprintf(buf, MSG_SIZ, "whisper %s\n", line); // WHISPER box uses "whisper" to send
        else if(!strcmp("shouts", chatPartner[activePartner]))
@@ -1676,31 +1957,125 @@ ChatOK (int n)
 }
 
 void
+DelayedSetText ()
+{
+    SetWidgetText(&chatOptions[CHAT_IN], tmpLine, -1); // leave focus on chat-partner field!
+    SetInsertPos(&chatOptions[CHAT_IN], strlen(tmpLine));
+}
+
+void
+DelayedScroll ()
+{   // If we do this immediately it does it before shrinking the memo, so the lower half remains hidden (Ughh!)
+    SetInsertPos(&chatOptions[CHAT_ICS], 999999);
+    SetWidgetText(&chatOptions[CHAT_IN], tmpLine, ChatDlg);
+    SetInsertPos(&chatOptions[CHAT_IN], strlen(tmpLine));
+}
+
+void
 ChatSwitch (int n)
 {
     int i, j;
-    if(n <= activePartner) n--;
-    activePartner = n;
+    char *v;
+    if(chatOptions[CHAT_ICS].type == Skip) hidden = 0; // In Xaw there is no ICS pane we can hide behind
+    Show(&chatOptions[CHAT_PANE], 0); // show
+    if(hidden) ScheduleDelayedEvent(DelayedScroll, 50); // Awful!
+    else ScheduleDelayedEvent(DelayedSetText, 50);
+    GetWidgetText(&chatOptions[CHAT_IN], &v);
+    if(hidden) { ASSIGN(icsLine, v); } else { ASSIGN(inputs[activePartner], v); }
+    hidden = 0;
+    activePartner = --n;
     if(!texts[n]) texts[n] = strdup("");
     dirty[n] = 0;
-    SetWidgetText(&chatOptions[5], texts[n], ChatDlg);
-    SetInsertPos(&chatOptions[5], strlen(texts[n]));
-    SetWidgetText(&chatOptions[0], chatPartner[n], ChatDlg);
+    SetWidgetText(&chatOptions[CHAT_OUT], texts[n], ChatDlg);
+    SetInsertPos(&chatOptions[CHAT_OUT], strlen(texts[n]));
+    SetWidgetText(&chatOptions[CHAT_PARTNER], chatPartner[n], ChatDlg);
     for(i=j=0; i<MAX_CHAT; i++) {
-       if(i == activePartner) continue;
-       SetWidgetLabel(&chatOptions[++j], chatPartner[i]);
+       SetWidgetLabel(&chatOptions[++j], *chatPartner[i] ? chatPartner[i] : _("New Chat"));
        SetColor(dirty[i] ? "#FFC000" : "#FFFFFF", &chatOptions[j]);
     }
-    SetWidgetText(&chatOptions[6], "", ChatDlg);
-    HardSetFocus(&chatOptions[6]);
+    if(!inputs[n]) { ASSIGN(inputs[n], ""); }
+//    SetWidgetText(&chatOptions[CHAT_IN], inputs[n], ChatDlg); // does not work (in this widget only)
+//    SetInsertPos(&chatOptions[CHAT_IN], strlen(inputs[n]));
+    tmpLine = inputs[n]; // for the delayed event
+    HardSetFocus(&chatOptions[strcmp(chatPartner[n], "") ? CHAT_IN : CHAT_PARTNER], 0);
 }
 
 void
-ChatProc ()
+PaneSwitch ()
+{
+    char *v;
+    Show(&chatOptions[CHAT_PANE], hidden = 1); // hide
+    GetWidgetText(&chatOptions[CHAT_IN], &v);
+    ASSIGN(inputs[activePartner], v);
+    if(!icsLine) { ASSIGN(icsLine, ""); }
+    tmpLine = icsLine; ScheduleDelayedEvent(DelayedSetText, 50);
+//    SetWidgetText(&chatOptions[CHAT_IN], icsLine, ChatDlg); // does not work (in this widget only)
+//    SetInsertPos(&chatOptions[CHAT_IN], strlen(icsLine));
+}
+
+void
+ClearChat ()
+{   // clear the chat to make it free for other use
+    chatPartner[activePartner][0] = NULLCHAR;
+    ASSIGN(texts[activePartner], "");
+    ASSIGN(inputs[activePartner], "");
+    SetWidgetText(&chatOptions[CHAT_PARTNER], "", ChatDlg);
+    SetWidgetText(&chatOptions[CHAT_OUT], "", ChatDlg);
+    SetWidgetText(&chatOptions[CHAT_IN], "", ChatDlg);
+    SetWidgetLabel(&chatOptions[activePartner+1], _("New Chat"));
+    HardSetFocus(&chatOptions[CHAT_PARTNER], 0);
+}
+
+static void
+NewChat (char *name)
+{   // open a chat on program request. If no empty one available, use last
+    int i;
+    for(i=0; i<MAX_CHAT-1; i++) if(!chatPartner[i][0]) break;
+    safeStrCpy(chatPartner[i], name, MSG_SIZ);
+    ChatSwitch(i+1);
+}
+
+void
+ConsoleWrite(char *message, int count)
+{
+    if(shellUp[ChatDlg] && chatOptions[CHAT_ICS].type != Skip) { // in Xaw this is a no-op
+       AppendColorized(&chatOptions[CHAT_ICS], message, count);
+       SetInsertPos(&chatOptions[CHAT_ICS], 999999);
+    }
+}
+
+void
+ChatPopUp ()
 {
-    if(GenericPopUp(chatOptions, _("Chat box"), ChatDlg, BoardWindow, NONMODAL, appData.topLevel))
-       AddHandler(&chatOptions[0], ChatDlg, 2), AddHandler(&chatOptions[6], ChatDlg, 2); // treats return as OK
+    if(GenericPopUp(chatOptions, _("ICS Interaction"), ChatDlg, BoardWindow, NONMODAL, appData.topLevel))
+       AddHandler(&chatOptions[CHAT_PARTNER], ChatDlg, 2), AddHandler(&chatOptions[CHAT_IN], ChatDlg, 2); // treats return as OK
+    Show(&chatOptions[CHAT_PANE], hidden = 1); // hide
+//    HardSetFocus(&chatOptions[CHAT_IN], 0);
     MarkMenu("View.OpenChatWindow", ChatDlg);
+    CursorAtEnd(&chatOptions[CHAT_IN]);
+}
+
+void
+ChatProc ()
+{
+    if(shellUp[ChatDlg]) PopDown(ChatDlg);
+    else ChatPopUp();
+}
+
+void
+ConsoleAutoPopUp (char *buf)
+{
+       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
+               char *p, newText[MSG_SIZ];
+               GetWidgetText(&chatOptions[CHAT_IN], &p);
+               snprintf(newText, MSG_SIZ, "%s%c", p, *buf);
+               SetWidgetText(&chatOptions[CHAT_IN], newText, ChatDlg);
+               if(shellUp[ChatDlg]) HardSetFocus (&chatOptions[CHAT_IN], ChatDlg); //why???
+           } else { ASSIGN(line, buf); } // box did not exist: make sure it pops up with char in it
+           ChatPopUp();
+       } else PopUpMoveDialog(*buf);
 }
 
 //--------------------------------- Game-List options dialog ------------------------------------------
@@ -1738,7 +2113,7 @@ static void GLT_Button P((int n));
 static int GLT_OK P((int n));
 
 static Option listOptions[] = {
-{300, LR|TB, 200, NULL, (void*) strings, "", NULL, ListBox, "" }, // For GTK we need to specify a height, as default would just show 3 lines
+{300, LR|TB, 200, NULL, (void*) strings, NULL, NULL, ListBox, "" }, // For GTK we need to specify a height, as default would just show 3 lines
 { 0,    0,     0, NULL, (void*) &GLT_Button, NULL, NULL, Button, N_("factory") },
 { 0, SAME_ROW, 0, NULL, (void*) &GLT_Button, NULL, NULL, Button, N_("up") },
 { 0, SAME_ROW, 0, NULL, (void*) &GLT_Button, NULL, NULL, Button, N_("down") },
@@ -2080,18 +2455,18 @@ Option mainOptions[] = { // description of main window in terms of generic dialo
   { 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, Label, "1" }, // optional title in window
-{ 50,    LL|TT,            100, NULL, (void*) &LogoW, NULL, NULL, -1, "" }, // white logo
+{ 50,    LL|TT,            100, NULL, (void*) &LogoW, NULL, NULL, Skip, "" }, // white logo
 { 12,   L2L|T2T,           200, NULL, (void*) &CCB, NULL, NULL, Label, "White" }, // white clock
 { 13,   R2R|T2T|SAME_ROW,  200, NULL, (void*) &CCB, NULL, NULL, Label, "Black" }, // black clock
-{ 50,    RR|TT|SAME_ROW,   100, NULL, (void*) &LogoB, NULL, NULL, -1, "" }, // black logo
-{ 0, LR|T2T|BORDER,        401, NULL, NULL, "", NULL, -1, "2" }, // backup for title in window (if no room for other)
-{ 0, LR|T2T|BORDER,        270, NULL, NULL, "", NULL, Label, "message" }, // message field
+{ 50,    RR|TT|SAME_ROW,   100, NULL, (void*) &LogoB, NULL, NULL, Skip, "" }, // black logo
+{ 0, LR|T2T|BORDER,        401, NULL, NULL, "", NULL, Skip, "2" }, // backup for title in window (if no room for other)
+{ 0, LR|T2T|BORDER,        270, NULL, NULL, (char*)&appData.font, NULL, Label, "message" }, // message field
 { 0, RR|TT|SAME_ROW,       125, NULL, NULL, "", NULL, BoxBegin, "" }, // (optional) button bar
-  { 0,    0,     0, NULL, (void*) &ToStartEvent, NULL, NULL, Button, N_("<<") },
-  { 0, SAME_ROW, 0, NULL, (void*) &BackwardEvent, NULL, NULL, Button, N_("<") },
-  { 0, SAME_ROW, 0, NULL, (void*) &PauseEvent, NULL, NULL, Button, N_(PAUSE_BUTTON) },
-  { 0, SAME_ROW, 0, NULL, (void*) &ForwardEvent, NULL, NULL, Button, N_(">") },
-  { 0, SAME_ROW, 0, NULL, (void*) &ToEndEvent, NULL, NULL, Button, N_(">>") },
+  { 0,    0,     0, NULL, (void*) &ToStartEvent, (char*)&appData.font, NULL, Button, N_("<<") },
+  { 0, SAME_ROW, 0, NULL, (void*) &BackwardEvent, (char*)&appData.font, NULL, Button, N_("<") },
+  { 0, SAME_ROW, 0, NULL, (void*) &PauseEvent, (char*)&appData.font, NULL, Button, N_(PAUSE_BUTTON) },
+  { 0, SAME_ROW, 0, NULL, (void*) &ForwardEvent, (char*)&appData.font, NULL, Button, N_(">") },
+  { 0, SAME_ROW, 0, NULL, (void*) &ToEndEvent, (char*)&appData.font, NULL, Button, N_(">>") },
 { 0, 0, 0, NULL, NULL, "", NULL, BoxEnd, "" },
 { 401, LR|TB, 401, NULL, (char*) &Exp, NULL, NULL, Graph, "shadow board" }, // board
   { 2, COMBO_CALLBACK, 0, NULL, (void*) &PMSelect, NULL, pieceMenuStrings[0], PopUp, "menuW" },
@@ -2121,7 +2496,7 @@ SizeKludge (int n)
     int w = width - 44 - mainOptions[n].min;
     mainOptions[W_TITLE].max = w; // width left behind menu bar
     if(w < 0.4*width) // if no reasonable amount of space for title, force small layout
-       mainOptions[W_SMALL].type = mainOptions[W_TITLE].type, mainOptions[W_TITLE].type = -1;
+       mainOptions[W_SMALL].type = mainOptions[W_TITLE].type, mainOptions[W_TITLE].type = Skip;
 }
 
 void
@@ -2136,15 +2511,22 @@ static Option *
 Exp (int n, int x, int y)
 {
     static int but1, but3, oldW, oldH;
-    int menuNr = -3, sizing;
+    int menuNr = -3, sizing, f, r;
+    TimeMark now;
 
     if(n == 0) { // motion
        if(SeekGraphClick(Press, x, y, 1)) return NULL;
-       if(but1 && !PromoScroll(x, y)) DragPieceMove(x, y);
+       if((but1 || dragging == 2) && !PromoScroll(x, y)) DragPieceMove(x, y);
        if(but3) MovePV(x, y, lineGap + BOARD_HEIGHT * (squareSize + lineGap));
+       if(appData.highlightDragging) {
+           f = EventToSquare(x, BOARD_WIDTH);  if ( flipView && f >= 0) f = BOARD_WIDTH - 1 - f;
+           r = EventToSquare(y, BOARD_HEIGHT); if (!flipView && r >= 0) r = BOARD_HEIGHT - 1 - r;
+           HoverEvent(x, y, f, r);
+       }
        return NULL;
     }
     if(n != 10 && PopDown(PromoDlg)) fromX = fromY = -1; // user starts fiddling with board when promotion dialog is up
+    else GetTimeMark(&now);
     shiftKey = ShiftKeys();
     controlKey = (shiftKey & 0xC) != 0;
     shiftKey = (shiftKey & 3) != 0;
@@ -2155,11 +2537,13 @@ Exp (int n, int x, int y)
        case  3: menuNr = RightClick(Press,   x, y, &pmFromX, &pmFromY), but3 = 1; break;
        case -2: shiftKey = !shiftKey;
        case -3: menuNr = RightClick(Release, x, y, &pmFromX, &pmFromY), but3 = 0; break;
+       case  4: BackwardEvent(); break;
+       case  5: ForwardEvent(); break;
        case 10:
            sizing = (oldW != x || oldH != y);
            oldW = x; oldH = y;
            InitDrawingHandle(mainOptions + W_BOARD);
-           if(sizing) return NULL; // don't redraw while sizing
+           if(sizing && SubtractTimeMarks(&now, &programStartTime) > 10000) return NULL; // don't redraw while sizing (except at startup)
            DrawPosition(True, NULL);
        default:
            return NULL;
@@ -2188,7 +2572,7 @@ BoardPopUp (int squareSize, int lineGap, void *clockFontThingy)
     mainOptions[W_BLACK].max = mainOptions[W_WHITE].max = size/2-3; // clock width
     mainOptions[W_MESSG].max = appData.showButtonBar ? size-135 : size-2; // message
     mainOptions[W_MENU].max = size-40; // menu bar
-    mainOptions[W_TITLE].type = appData.titleInWindow ? Label : -1 ;
+    mainOptions[W_TITLE].type = appData.titleInWindow ? Label : Skip ;
     if(logo && logo <= size/4) { // Activate logos
        mainOptions[W_WHITE-1].type = mainOptions[W_BLACK+1].type = Graph;
        mainOptions[W_WHITE-1].max  = mainOptions[W_BLACK+1].max  = logo;
@@ -2197,7 +2581,7 @@ BoardPopUp (int squareSize, int lineGap, void *clockFontThingy)
        mainOptions[W_WHITE].max  = mainOptions[W_BLACK].max  -= logo + 4;
        mainOptions[W_WHITE].name = mainOptions[W_BLACK].name = "Double\nHeight";
     }
-    if(!appData.showButtonBar) for(i=W_BUTTON; i<W_BOARD; i++) mainOptions[i].type = -1;
+    if(!appData.showButtonBar) for(i=W_BUTTON; i<W_BOARD; i++) mainOptions[i].type = Skip;
     for(i=0; i<8; i++) mainOptions[i+1].choice = (char**) menuBar[i].mi;
     AppendEnginesToMenu(appData.recentEngineList);
     GenericPopUp(mainOptions, "XBoard", BoardWindow, BoardWindow, NONMODAL, 1); // allways top-level
@@ -2339,7 +2723,6 @@ static char *Extensions[] = {
 ".trn",
 ".bin",
 ".wav",
-".xpm",
 ".ini",
 ".log",
 "",
@@ -2584,10 +2967,9 @@ FileNamePopUp (char *label, char *def, char *filter, FileProc proc, char *openMo
 void
 ActivateTheme (int col)
 {
+    if(appData.overrideLineGap >= 0) lineGap = appData.overrideLineGap; else lineGap = defaultLineGap;
+    InitDrawingParams(strcmp(oldPieceDir, appData.pieceDirectory));
+    InitDrawingSizes(-1, 0);
+    DrawPosition(True, NULL);
 }
 
-char *
-Col2Text (int n)
-{
-    return NULL;
-}
index ab51fef..1e4861c 100644 (file)
--- a/dialogs.h
+++ b/dialogs.h
@@ -32,8 +32,8 @@
 // int     max        X/E   (w)   (w)    (w)   (w)   (w)  (w)  (w)   (w)
 // void*   handle     X/E   X/E   X/E    X/E   X/E    X    X    X     X    X
 // void*   target      X     X     X     X/C    C          X    X     C    C
-// char*   textValue               E     X/E    *
-// char ** choice                        X/E    *                          X
+// char*   textValue              X/E    X/E    *
+// char ** choice                  C     X/E    *                          X
 // enum    type       X/E   X/E   X/E    X/E    X     X    X    X     X    X     X    X
 // char[]  name       X/E   X/E   X/E    X/E    X          X    X     X    X
 // File and Path options are like String (but get a browse button added in the dialog), and Slider
@@ -107,6 +107,7 @@ AskDlg,         // this and beyond do grab mouse events (and are destroyed)
 FatalDlg,
 BoardWindow,
 BrowserDlg,
+MasterDlg,
 NrOfDialogs     // dummy for total
 } DialogClass;
 
@@ -125,23 +126,27 @@ extern int dialogError;
 extern ButtonCallback *comboCallback;
 extern void *userLogo;
 
-extern WindowPlacement wpComment, wpTags, wpMoveHistory, wpMain, wpDualBoard;
+extern WindowPlacement wpComment, wpTags, wpMoveHistory, wpMain, wpDualBoard, wpConsole;
 extern char *marked[];
 extern Boolean shellUp[];
 extern Option textOptions[], typeOptions[], dualOptions[], mainOptions[];
 
 
+void GetPlacement P((DialogClass dlg, WindowPlacement *wp));
 int DialogExists P((DialogClass n));
 int GenericPopUp P((Option *option, char *title, DialogClass dlgNr, DialogClass parent, int modal, int topLevel));
 int GenericReadout P((Option *currentOption, int selected));
 int PopDown P((DialogClass n));
 void MarkMenu P((char *item, int dlgNr));
 int AppendText P((Option *opt, char *s));
+void AppendColorized P((Option *opt, char *s, int count));
+void Show P((Option *opt, int hide));
+int  IcsHist P((int dir, Option *opt, DialogClass dlg));
 void HighlightText P((Option *opt, int from, int to, Boolean highlight));
 void SetColor P((char *colorName, Option *box));
 //void ColorChanged P((Widget w, XtPointer data, XEvent *event, Boolean *b));
 void SetInsertPos P((Option *opt, int pos));
-void HardSetFocus P((Option *opt));
+void HardSetFocus P((Option *opt, DialogClass dlg));
 void CursorAtEnd P((Option *opt));
 void GetWidgetText  P((Option *opt, char **buf));
 void SetWidgetText  P((Option *opt, char *buf, int n));
@@ -184,6 +189,7 @@ void SlaveResize P((Option *opt));
 
 int  SetCurrentComboSelection P((Option *opt));
 void BoxAutoPopUp P((char *buf));
+void ConsoleAutoPopUp P((char *buf));
 void IcsKey P((int n));
 void ICSInputBoxPopUp P((void));
 void LoadOptionsPopUp P((DialogClass parent));
diff --git a/draw.c b/draw.c
index a306aba..fb66db2 100644 (file)
--- a/draw.c
+++ b/draw.c
@@ -140,11 +140,12 @@ SelectPieces(VariantClass v)
        for(p=0; p<=(int)WhiteKing; p++)
           pngPieceBitmaps[i][p] = pngPieceBitmaps2[i][p]; // defaults
        if(v == VariantShogi) {
-          pngPieceBitmaps[i][(int)WhiteCannon] = pngPieceBitmaps2[i][(int)WhiteKing+1];
+          pngPieceBitmaps[i][(int)WhiteCannon] = pngPieceBitmaps2[i][(int)WhiteTokin];
           pngPieceBitmaps[i][(int)WhiteNightrider] = pngPieceBitmaps2[i][(int)WhiteKing+2];
-          pngPieceBitmaps[i][(int)WhiteSilver] = pngPieceBitmaps2[i][(int)WhiteKing+3];
-          pngPieceBitmaps[i][(int)WhiteGrasshopper] = pngPieceBitmaps2[i][(int)WhiteKing+4];
+          pngPieceBitmaps[i][(int)WhiteGrasshopper] = pngPieceBitmaps2[i][(int)WhiteKing+3];
+          pngPieceBitmaps[i][(int)WhiteSilver] = pngPieceBitmaps2[i][(int)WhiteKing+4];
           pngPieceBitmaps[i][(int)WhiteQueen] = pngPieceBitmaps2[i][(int)WhiteLance];
+          pngPieceBitmaps[i][(int)WhiteFalcon] = pngPieceBitmaps2[i][(int)WhiteMonarch]; // for Sho Shogi
        }
 #ifdef GOTHIC
        if(v == VariantGothic) {
@@ -155,6 +156,15 @@ SelectPieces(VariantClass v)
           pngPieceBitmaps[i][(int)WhiteAngel]    = pngPieceBitmaps2[i][(int)WhiteFalcon];
           pngPieceBitmaps[i][(int)WhiteMarshall] = pngPieceBitmaps2[i][(int)WhiteAlfil];
        }
+       if(v == VariantChuChess) {
+          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];
+       }
     }
 }
 
@@ -165,10 +175,20 @@ InitDrawingSizes (BoardSize boardSize, int flags)
     int boardWidth, boardHeight;
     static int oldWidth, oldHeight;
     static VariantClass oldVariant;
-    static int oldTwoBoards = 0;
+    static int oldTwoBoards = 0, oldNrOfFiles = 0;
 
     if(!mainOptions[W_BOARD].handle) return;
 
+    if(boardSize == -2 && gameInfo.variant != oldVariant
+                       && oldNrOfFiles && oldNrOfFiles != BOARD_WIDTH) { // called because variant switch changed board format
+       squareSize = ((squareSize + lineGap) * oldNrOfFiles + 0.5*BOARD_WIDTH) / BOARD_WIDTH; // keep total width fixed
+       if(appData.overrideLineGap < 0) lineGap = squareSize < 37 ? 1 : squareSize < 59 ? 2 : squareSize < 116 ? 3 : 4;
+        squareSize -= lineGap;
+       CreatePNGPieces();
+        CreateGrid();
+    }
+    oldNrOfFiles = BOARD_WIDTH;
+
     if(oldTwoBoards && !twoBoards) PopDown(DummyDlg);
     oldTwoBoards = twoBoards;
 
@@ -228,12 +248,16 @@ 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", "King",
-  "GoldKnight", "GoldLance", "GoldPawn", "GoldSilver", NULL
+  "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",
+  "Claw", "GoldKnight", "GoldLance", "GoldSilver", NULL
 };
 
+char *backupPiece[] = { "King", "Queen", "Lion" }; // pieces that map on other when not kanji
+
 RsvgHandle *
-LoadSVG (char *dir, int color, int piece)
+LoadSVG (char *dir, int color, int piece, int retry)
 {
     char buf[MSG_SIZ];
   RsvgHandle *svg=svgPieces[color][piece];
@@ -242,7 +266,8 @@ LoadSVG (char *dir, int color, int piece)
   cairo_surface_t *img;
   cairo_t *cr;
 
-    snprintf(buf, MSG_SIZ, "%s/%s%s.svg", dir, color ? "Black" : "White", pngPieceNames[piece]);
+    snprintf(buf, MSG_SIZ, "%s/%s%s.svg", dir, color ? "Black" : "White",
+             retry ? backupPiece[piece - WhiteMonarch] : pngPieceNames[piece]);
 
     if(svg || *dir && (svg = rsvg_handle_new_from_file(buf, &svgerror))) {
 
@@ -260,6 +285,8 @@ LoadSVG (char *dir, int color, int piece)
 
       return svg;
     }
+    if(!retry && piece >= WhiteMonarch && piece <= WhiteNothing) // pieces that are only different in kanji sets
+        return LoadSVG(dir, color, piece, 1);
     if(svgerror)
        g_error_free(svgerror);
     return NULL;
@@ -275,22 +302,22 @@ ScaleOnePiece (int color, int piece)
 
   g_type_init ();
 
-  svgPieces[color][piece] = LoadSVG("", color, piece); // this fills pngPieceImages if we had cached svg with bitmap of wanted size
+  svgPieces[color][piece] = LoadSVG("", color, piece, 0); // this fills pngPieceImages if we had cached svg with bitmap of wanted size
 
   if(!pngPieceImages[color][piece]) { // we don't have cached bitmap (implying we did not have cached svg)
     if(*appData.pieceDirectory) { // user specified piece directory
       snprintf(buf, MSG_SIZ, "%s/%s%s.png", appData.pieceDirectory, color ? "Black" : "White", pngPieceNames[piece]);
       img = cairo_image_surface_create_from_png (buf); // try if there are png pieces there
       if(cairo_surface_status(img) != CAIRO_STATUS_SUCCESS) { // there were not
-       svgPieces[color][piece] = LoadSVG(appData.pieceDirectory, color, piece); // so try if he has svg there
+       svgPieces[color][piece] = LoadSVG(appData.pieceDirectory, color, piece, 0); // so try if he has svg there
       } else pngPieceImages[color][piece] = img;
     }
   }
 
   if(!pngPieceImages[color][piece]) { // we still did not manage to acquire a piece bitmap
     static int warned = 0;
-    if(!(svgPieces[color][piece] = LoadSVG(SVGDIR, color, piece)) && !warned) { // try to fall back on installed svg
-      char *msg = _("No default pieces installed\nSelect your own -pieceImageDirectory");
+    if(!(svgPieces[color][piece] = LoadSVG(SVGDIR, color, piece, 0)) && !warned) { // try to fall back on installed svg 
+      char *msg = _("No default pieces installed!\nSelect your own using '-pieceImageDirectory'.");
       printf("%s\n", msg); // give up
       DisplayError(msg, 0);
       warned = 1; // prevent error message being repeated for each piece type
@@ -641,6 +668,8 @@ pngDrawPiece (cairo_surface_t *dest, ChessSquare piece, int square_color, int x,
     cairo_destroy (cr);
 }
 
+static char *markerColor[8] = { "#FFFF00", "#FF0000", "#00FF00", "#0000FF", "#00FFFF", "#FF00FF", "#FFFFFF", "#000000" };
+
 void
 DoDrawDot (cairo_surface_t *cs, int marker, int x, int y, int r)
 {
@@ -653,7 +682,7 @@ DoDrawDot (cairo_surface_t *cs, int marker, int x, int y, int r)
            cairo_stroke_preserve(cr);
            SetPen(cr, 2, marker == 2 ? "#FFFFFF" : "#000000", 0);
        } else {
-           SetPen(cr, 2, marker == 2 ? "#FF0000" : "#FFFF00", 0);
+           SetPen(cr, 2, markerColor[marker-1], 0);
        }
        cairo_fill(cr);
 
@@ -679,7 +708,7 @@ DrawText (char *string, int x, int y, int align)
                    CAIRO_FONT_SLANT_NORMAL,
                    CAIRO_FONT_WEIGHT_BOLD);
 
-       cairo_set_font_size (cr, squareSize/4);
+       cairo_set_font_size (cr, align < 0 ? 2*squareSize/3 : squareSize/4);
        // calculate where it goes
        cairo_text_extents (cr, string, &te);
 
@@ -693,9 +722,12 @@ DrawText (char *string, int x, int y, int align)
            yy += -te.y_bearing + 3;
        } else if (align == 4) {
            xx += te.x_bearing + 1, yy += -te.y_bearing + 3;
+       } else if (align < 0) {
+           xx += squareSize/2 - te.width/2, yy += 9*squareSize/16 - te.y_bearing/2;
        }
 
        cairo_move_to (cr, xx-1, yy);
+       if(align == -2) cairo_set_source_rgb (cr, 1.0, 0.0, 0.0); else
        if(align < 3) cairo_set_source_rgb (cr, 0.0, 0.0, 0.0);
        else          cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
        cairo_show_text (cr, string);
@@ -703,6 +735,31 @@ DrawText (char *string, int x, int y, int align)
 }
 
 void
+InscribeKanji (ChessSquare piece, int x, int y)
+{
+    char *p, *q, buf[10];
+    int n;
+    if(piece == EmptySquare) return;
+    if(piece >= BlackPawn) piece = BLACK_TO_WHITE piece;
+    p = appData.inscriptions;
+    n = piece;
+    while(piece > WhitePawn) {
+      if(*p++ == NULLCHAR) {
+        if(n != WhiteKing) return;
+        p = q;
+        break;
+      }
+      q = p - 1;
+      while((*p & 0xC0) == 0x80) p++; // skip UTF-8 continuation bytes
+      piece--;
+    }
+    strncpy(buf, p, 10);
+    for(q=buf; (*++q & 0xC0) == 0x80;);
+    *q = NULLCHAR;
+    DrawText(buf, x, y, n > WhiteLion ? -2 : -1);
+}
+
+void
 DrawOneSquare (int x, int y, ChessSquare piece, int square_color, int marker, char *tString, char *bString, int align)
 {   // basic front-end board-draw function: takes care of everything that can be in square:
     // piece, background, coordinate/count, marker dot
@@ -711,6 +768,7 @@ DrawOneSquare (int x, int y, ChessSquare piece, int square_color, int marker, ch
        BlankSquare(csBoardWindow, x, y, square_color, piece, 1);
     } else {
        pngDrawPiece(csBoardWindow, piece, square_color, x, y);
+        if(appData.inscriptions[0]) InscribeKanji(piece, x, y);
     }
 
     if(align) { // square carries inscription (coord or piece count)
index 3e966be..3b7cb6c 100644 (file)
@@ -540,6 +540,7 @@ defined variant names are:
 <tr><td>unknown</td><td>Unknown variant (not supported)</td></tr>\r
 </table>\r
 \r
+As of XBoard 4.8, engines can define arbitrary variant names; see the "feature" and "setup" commands in <a href="#9">section 9</a>.\r
 </dd>\r
 \r
 <dt>quit</dt>\r
@@ -837,7 +838,7 @@ only applies to normal Chess;
 Obviously in variants that cannot be described by a FEN for normal Chess,\r
 e.g. because the board is not 8x8, other pieces then PNBRQK participate, \r
 there are holdings that need to be specified, etc., \r
-xboard will use a FEN format that is standard or suitable for that varant.\r
+xboard will use a FEN format that is standard or suitable for that variant.\r
 In particular, in FRC or CRC, WinBoard will use Shredder-FEN or X-FEN standard,\r
 i.e. it can use the rook-file indicator letter to represent a castling right \r
 (like HAha) whenever it wants, but if it uses KQkq, this will always refer \r
@@ -1342,10 +1343,16 @@ correct value for your engine (just "normal" in most cases) rather
 than leaving the default in place, so that the user will get an\r
 appropriate error message if he tries to play a variant that your\r
 engine does not support.</span>\r
+<span class="version47">As of XBoard 4.8 a variant name not known to the GUI will be\r
+considered an engine-defined variant.\r
+The user will be given the opportunity to select such variants,\r
+but when this happens, the engine should define its meaning\r
+in detail with the aid of a "setup" command defined below,\r
+in order to avoid an error.</span>\r
 <br />\r
 <span class="version43">If your engine can play variants on a deviating board size,\r
 like capablanca on an 8x8 board, or capablanca crazyhouse,\r
-it can list them amongst the variants with a prefix spcifying board size plus\r
+it can list them amongst the variants with a prefix specifying board size plus\r
 holdings size, like 8x8+0_capablanca or 10x8+7_capablanca.\r
 If it is capable of playing any variant with an arbitrary board size,\r
 it should list "boardsize" as one of the variants.\r
@@ -1510,6 +1517,46 @@ in this case, you must set done=1 before xboard will enter normal operation.
 </dl>\r
 </dd>\r
 \r
+<dt>setup FEN</dt>\r
+<dt>setup (PIECETOCHAR) FEN</dt>\r
+<dt>setup (PIECETOCHAR) WxH+S_PARENTVARIANT FEN</dt>\r
+<dd>The engine can optionally send a setup command to the GUI in reply\r
+to the variant command.\r
+In the simplest form this sends the FEN of the initial position.\r
+This can be used to implement engines for non-standard variants\r
+that only differ from standard variants through the initial position.\r
+(E.g. many of the 'wild' boards you can play on an ICS.)\r
+Whether the GUI should obey or ignore this command depends on the situation.\r
+Normally it would ignore it in variants where it knows the standard initial position\r
+and legality testing is on, or when the user specified an initial position.\r
+In other cases it will use the FEN sent by the first engine\r
+for setting up the initial position, as if it was an externally supplied position.\r
+Such a position will always be sent to a second engine that might be involved,\r
+and any setup commands received from the latter will always be ignored.\r
+(This to allow for shuffle games, where the two engines might pick different setups.)\r
+When no initial position is known, such as for 'catch-all' variants like fairy,\r
+or whenever the board width is overruled to a non-standard value,\r
+the FEN will be used as default initial position even when legality testing is on.\r
+</dd>\r
+<dd>Optionally the meaning of the piece ID letters in the FEN can be defined\r
+between parentheses; this will be interpreted as if it was the value of a\r
+-pieceToCharTable command-line option, mapping letters to GUI piece types.\r
+Also optionally behind that, the setup command can specify board width W,\r
+board height H and holdings size S, as well as a 'parent variant'.\r
+This is typically done in response to a variant command with a non-standard name,\r
+about which the GUI is not supposed to know anything at all.\r
+The engine can then specify board size, participating pieces, initial setup,\r
+and other rule details (inherited from the parent variant),\r
+saving the user the trouble to configure the GUI for this non-standard variant.\r
+Example:\r
+<pre>\r
+  setup (PN.RQKpn.rqk) 6x6+0_fairy rnqknr/pppppp/6/6/PPPPPP/RNQKNR w - - 0 1\r
+</pre>\r
+could be used by an engine for Los-Alamos Chess in response to 'variant losalamos',\r
+and would automatically switch the GUI to this variant as soon as the user\r
+selected it from the GUI menu.\r
+The PIECETOCHAR element would ensure a Bishop would not be accepted as promotion choice. \r
+</dd>\r
 \r
 <dt>Illegal move: MOVE</dt>\r
 <dt>Illegal move (REASON): MOVE</dt>\r
@@ -1752,11 +1799,42 @@ output should be in the following format:
 <tr><td>score</td><td>Integer giving current evaluation in centipawns.</td></tr>\r
 <tr><td>time</td><td>Current search time in centiseconds (ex:1028 = 10.28 seconds).</td></tr>\r
 <tr><td>nodes</td><td>Nodes searched.</td></tr>\r
+<tr><td>*selective depth</td><td>Maximium length of any branch in the current search.</td></tr>\r
+<tr><td>*speed</td><td>Nodes per second in last measured time interval.</td></tr>\r
+<tr><td>*</td><td>Reserved for future extensions.</td></tr>\r
+<tr><td>*tbhits</td><td>Number of tablebase probes made in the current search.</td></tr>\r
 <tr><td>pv</td><td>Freeform text giving current "best" line.\r
 You can continue the pv onto another line if you start each\r
 continuation line with at least four space characters.</td></tr>\r
 </table>\r
 \r
+<p class="version47">\r
+The items marked with * are optional.\r
+If any of these items is present, the <b>pv</b> field must be preceeded directly by a tab character;\r
+if no tab character preceeds the first non-integer token,\r
+the <b>pv</b> field will start at the first non-blank character after <b>nodes</b>.\r
+Otherwise it will start after the last tab that is not behind any non-integer token.\r
+Of all integers between <b>nodes</b> and <b>pv</b> the last one is intepreted as <b>tbhits</b>.\r
+Of any remaining ones the first is interpreted as <b>selective depth</b>,\r
+and a second as <b>speed</b>.\r
+More infos could be added to this in the future.\r
+Note that older interfaces might consider the optional infos to be part of the <b>pv</b> field,\r
+and display them exactly as sent.\r
+It is therefore encouraged that engines use tabs or spaces to format this optional info\r
+so that it will display nicely in (not too wide) columns.\r
+</p>\r
+\r
+<p class="version47">\r
+A question mark as the last character in the <b>pv</b> field should be used to indicate\r
+the reported score is from a fail low, and thus represents an upper bound only.\r
+Similarly, an exclamation point should be used to indicate a fail high / lower bound.\r
+</p>\r
+\r
+<p class="version47">\r
+Mate scores should be indicated as 100000 + N for "mate in N moves",\r
+and -100000 - N for "mated in N moves".\r
+</p>\r
+\r
 <p>\r
 Example:\r
 </p>\r
index 47d3fc1..11229b9 100644 (file)
@@ -30,6 +30,7 @@
 #include "config.h"
 
 #include <stdio.h>
+#include <ctype.h>
 
 #if STDC_HEADERS
 # include <stdlib.h>
@@ -90,6 +91,8 @@ static int  lastForwardMostMove[2] = { -1, -1 };
 static int  engineState[2] = { -1, -1 };
 static char lastLine[2][MSG_SIZ];
 static char header[2][MSG_SIZ];
+static char columnHeader[MSG_SIZ] = "dep\tscore\tnodes\ttime\t(not shown:  tbhits\tknps\tseldep)\n";
+static int  columnMask = 0xF0;
 
 #define MAX_VAR 400
 static int scores[MAX_VAR], textEnd[MAX_VAR], keys[MAX_VAR], curDepth[2], nrVariations[2];
@@ -222,6 +225,7 @@ SetProgramStats (FrontEndProgramStats * stats) // now directly called by back-en
     }
 
     if( clearMemo ) {
+        if(!appData.headers) columnHeader[0] = NULLCHAR;
         DoClearMemo(which); nrVariations[which] = 0;
         header[which][0] = NULLCHAR;
         if(gameMode == AnalyzeMode) {
@@ -230,12 +234,15 @@ SetProgramStats (FrontEndProgramStats * stats) // now directly called by back-en
             snprintf(header[which], MSG_SIZ, "\t%s viewpoint\t\tfewer / Multi-PV setting = %d / more\n",
                                        appData.whitePOV || appData.scoreWhite ? "white" : "mover", cps->option[multi].value);
          }
-          if(!which) snprintf(header[which]+strlen(header[which]), MSG_SIZ-strlen(header[which]), "%s", exclusionHeader);
+          if(!which) snprintf(header[which]+strlen(header[which]), MSG_SIZ-strlen(header[which]), "%s%s", exclusionHeader, columnHeader);
           InsertIntoMemo( which, header[which], 0);
-        } else
-        if(appData.ponderNextMove && lastLine[which][0]) {
+        } else {
+          snprintf(header[which], MSG_SIZ, "%s", columnHeader);
+          if(appData.ponderNextMove && lastLine[which][0]) {
             InsertIntoMemo( which, lastLine[which], 0 );
             InsertIntoMemo( which, "\n", 0 );
+          }
+          InsertIntoMemo( which, header[which], 0);
         }
     }
 
@@ -424,9 +431,26 @@ InsertionPoint (int len, EngineOutputData *ed)
                keys[n] = ed->moveKey;
        }
        nrVariations[n] += 2;
-      return offs + (gameMode == AnalyzeMode)*strlen(header[ed->which]);
+      return offs + strlen(header[ed->which]);
 }
 
+#define MATE_SCORE 100000
+static char spaces[] = "            "; // [HGM] align: spaces for padding
+
+static void
+Format(char *buf, int val)
+{ // [HGM] tbhits: print a positive integer with trailing whitespace to give it fixed width
+        if( val < 1000000 ) {
+            int h = val, i=0;
+            while(h > 0) h /= 10, i++;
+            snprintf( buf, 24, "%d%s\t", val, spaces + 2*i);
+        }
+        else {
+            char unit = 'M';
+            if(val >= 1e9) val /= 1e3, unit = 'G';
+            snprintf( buf, 24, "%.*f%c%s\t", 1 + (val < 1e7), val/1e6, unit, spaces + 10 + 2*(val >= 1e8));
+        }
+}
 
 // pure back end, now SetWindowText is called via wrapper DoSetWindowText
 static void
@@ -437,6 +461,7 @@ UpdateControls (EngineOutputData *ed)
     char s_label[MAX_NAME_LENGTH + 32];
     int h;
     char * name = ed->name;
+    char *q, *pvStart = ed->pv;
 
     /* Label */
     if( name == 0 || *name == '\0' ) {
@@ -446,9 +471,17 @@ UpdateControls (EngineOutputData *ed)
     strncpy( s_label, name, MAX_NAME_LENGTH );
     s_label[ MAX_NAME_LENGTH-1 ] = '\0';
 
+    if(pvStart) { // [HGM] tbhits: plit up old PV into extra infos and real PV
+        while(strchr(pvStart, '\t')) { // locate last tab before non-int (real PV starts after that)
+            for(q=pvStart; isdigit(*q) || *q == ' '; q++);
+            if(*q != '\t') break;
+            pvStart = q + 1;
+        }
+    }
+
 #ifdef SHOW_PONDERING
     if( IsEnginePondering( ed->which ) ) {
-        char buf[8];
+        char buf[12];
 
         buf[0] = '\0';
 
@@ -456,16 +489,17 @@ UpdateControls (EngineOutputData *ed)
             strncpy( buf, ed->hint, sizeof(buf) );
             buf[sizeof(buf)-1] = '\0';
         }
-        else if( ed->pv != 0 && *ed->pv != '\0' ) {
-            char * sep = strchr( ed->pv, ' ' );
+        else if( pvStart != 0 && *pvStart != '\0' ) {
+            char * sep;
             int buflen = sizeof(buf);
 
+            sep = strchr( pvStart, ' ' );
             if( sep != NULL ) {
-                buflen = sep - ed->pv + 1;
+                buflen = sep - pvStart + 1;
                 if( buflen > sizeof(buf) ) buflen = sizeof(buf);
             }
 
-            strncpy( buf, ed->pv, buflen );
+            strncpy( buf, pvStart, buflen );
             buf[ buflen-1 ] = '\0';
         }
 
@@ -517,45 +551,83 @@ UpdateControls (EngineOutputData *ed)
     DoSetWindowText( ed->which, nLabelNPS, s_label );
 
     /* Memo */
-    if( ed->pv != 0 && *ed->pv != '\0' ) {
+    if( pvStart != 0 && *pvStart != '\0' ) {
         char s_nodes[24];
         char s_score[16];
         char s_time[24];
-        char buf[256];
-        int buflen;
+        char s_hits[24];
+        char s_seld[24];
+        char s_knps[24];
+        char buf[256], fail;
+        int buflen, hits, i, params[5], extra;
         int time_secs = ed->time / 100;
         int time_cent = ed->time % 100;
 
         /* Nodes */
         if( ed->nodes < 1000000 ) {
-            snprintf( s_nodes, sizeof(s_nodes)/sizeof(s_nodes[0]), u64Display, ed->nodes );
+            int h = ed->nodes, i=0;
+            while(h > 0) h /= 10, i++; // [HGM] align: count digits; pad with 2 spaces for every missing digit
+            snprintf( s_nodes, sizeof(s_nodes)/sizeof(s_nodes[0]), u64Display "%s\t", ed->nodes, spaces + 2*i);
         }
         else {
-            snprintf( s_nodes, sizeof(s_nodes)/sizeof(s_nodes[0]), "%.1fM", u64ToDouble(ed->nodes) / 1000000.0 );
+            double x = u64ToDouble(ed->nodes);
+            char unit = 'M';
+            if(x >= 1e9) x /= 1e3, unit = 'G';
+            snprintf( s_nodes, sizeof(s_nodes)/sizeof(s_nodes[0]), "%.*f%c%s\t", 1 + (x < 1e7), x / 1e6,
+                      unit, spaces + 10 + 2*(ed->nodes >= 1e8));
         }
 
+        /* TB Hits etc. */
+        for(i=hits=0; i<5; i++) params[i] = 0;
+//fprintf(stderr, "%s\n%s\n", ed->pv, pvStart);
+        if(pvStart != ed->pv) { // check if numbers before PV
+            strncpy(buf, ed->pv, 256); buf[pvStart - ed->pv] = NULLCHAR;
+            extra = sscanf(buf, "%d %d %d %d %d", params, params+1, params+2, params+3, params+4);
+//fprintf(stderr, "extra=%d len=%d\n", extra, pvStart - ed->pv);
+            if(extra) hits = params[extra-1], params[extra-1] = 0; // last one is tbhits
+        }
+        Format(s_seld, params[0]); Format(s_knps, params[1]); Format(s_hits, hits); 
+
+        fail = ed->pv[strlen(ed->pv)-1];
+       if(fail != '?' && fail != '!') fail = ' ';
+
         /* Score */
         h = ((gameMode == AnalyzeMode && appData.whitePOV || appData.scoreWhite) && !WhiteOnMove(currentMove) ? -1 : 1) * ed->score;
+        if( h == 0 ) {
+         snprintf( s_score, sizeof(s_score)/sizeof(s_score[0]), "  0.00%c\t", fail );
+        } else
+       if( h >= MATE_SCORE) snprintf(s_score, 16, "  %s#%d%c\t", ( h > MATE_SCORE+9 ? "" : "  "),  h - MATE_SCORE, fail ); else
+       if(-h >= MATE_SCORE) snprintf(s_score, 16, " %s#-%d%c\t", (-h > MATE_SCORE+9 ? "" : "  "), -h - MATE_SCORE, fail ); else
         if( h > 0 ) {
-         snprintf( s_score, sizeof(s_score)/sizeof(s_score[0]), "+%.2f", h / 100.0 );
+         snprintf( s_score, sizeof(s_score)/sizeof(s_score[0]), "+%.2f%c\t", h / 100.0, fail );
         }
         else {
-         snprintf( s_score, sizeof(s_score)/sizeof(s_score[0]), "%.2f", h / 100.0 );
+         snprintf( s_score, sizeof(s_score)/sizeof(s_score[0]), " %.2f%c\t", h / 100.0, fail );
         }
 
         /* Time */
-        snprintf( s_time, sizeof(s_time)/sizeof(s_time[0]), "%d:%02d.%02d", time_secs / 60, time_secs % 60, time_cent );
+        if(time_secs >= 3600)
+            snprintf( s_time, sizeof(s_time)/sizeof(s_time[0]), "%d:%02d:%02d\t", time_secs / 3600, (time_secs / 60) % 60, time_secs % 60 );
+        else
+        snprintf( s_time, sizeof(s_time)/sizeof(s_time[0]), "%d:%02d.%02d\t", time_secs / 60, time_secs % 60, time_cent );
+
+        if(columnMask & 2) s_score[0] = NULLCHAR; // [HGM] hide: erase columns the user has hidden
+        if(columnMask & 4) s_nodes[0] = NULLCHAR;
+        if(columnMask & 8) s_time[0]  = NULLCHAR;
+        if(columnMask & 16) s_hits[0]  = NULLCHAR;
+        if(columnMask & 32) s_knps[0]  = NULLCHAR;
+        if(columnMask & 64) s_seld[0]  = NULLCHAR;
 
         /* Put all together... */
        if(ed->nodes == 0 && ed->score == 0 && ed->time == 0)
          snprintf( buf, sizeof(buf)/sizeof(buf[0]), "%3d\t", ed->depth );
        else
-         snprintf( buf, sizeof(buf)/sizeof(buf[0]), "%3d\t%s\t%s\t%s\t", ed->depth, s_score, s_nodes, s_time );
+         snprintf( buf, sizeof(buf)/sizeof(buf[0]), "%3d\t%s%s%s%s%s%s", ed->depth, s_score, s_nodes, s_time, s_hits, s_knps, s_seld );
 
         /* Add PV */
         buflen = strlen(buf);
 
-        strncpy( buf + buflen, ed->pv, sizeof(buf) - buflen );
+        strncpy( buf + buflen, pvStart, sizeof(buf) - buflen );
 
         buf[ sizeof(buf) - 3 ] = '\0';
 
@@ -570,6 +642,35 @@ UpdateControls (EngineOutputData *ed)
     SetEngineColorIcon( ed->which );
 }
 
+static char *titles[] = { "score\t", "nodes\t", "time\t", "tbhits\t", "knps\t", "seldep\t" };
+
+void
+Collapse(int n)
+{   // handle click on column headers, to hide / show them
+    int i, j, nr=0, m=~columnMask, Ncol=7;
+    for(i=0; columnHeader[i] && i<n; i++) nr += (columnHeader[i] == '\t');
+    if(!nr) return; // depth always shown, so clicks on it ignored
+    for(i=j=0; i<Ncol; i++) if(m & 1<<i) j++; // count hidden columns
+    if(nr < j) { // shown column clicked: hide it
+       for(i=j=0; i<Ncol; i++) if(m & 1<<i && j++ == nr) break;
+       columnMask |= 1<<i;
+    } else { // hidden column clicked: show it
+       m = ~m; nr -= j;
+       for(i=j=0; i<Ncol; i++) if(m & 1<<i && j++ == nr) break;
+       columnMask &= ~(1<<i);
+    }
+    // create new header line
+    strcpy(columnHeader, "dep\t");
+    m = ~columnMask;
+    for(i=j=1; i<Ncol; i++) if(m & 1<<i) strcat(columnHeader, titles[i-1]), j++;
+    if(j != Ncol) { // list hidden columns, so user ca click them
+       m = ~m; strcat(columnHeader, "(not shown:  ");
+       for(i=1; i<Ncol; i++) if(m & 1<<i) strcat(columnHeader, titles[i-1]);
+       strcat(columnHeader, ")");
+    }
+    strcat(columnHeader, "\n");
+}
+
 // [HGM] kibitz: write kibitz line; split window for it if necessary
 void
 OutputKibitz (int window, char *text)
index 23127aa..a46c159 100644 (file)
@@ -69,5 +69,6 @@ void DoClearMemo(int which);
 void ResizeWindowControls( int mode );
 int  EngineOutputDialogExists();
 void SetEngineOutputTitle( char *title );
+void Collapse P((int colNr));
 void InitEngineOutput P((Option *opt, Option *memo2)); // XB only
 void DrawWidgetIcon P((Option *opt, int nIcon)); // XB only
index 10bb064..a81fd4b 100644 (file)
@@ -93,13 +93,14 @@ void DrawSeekDot P((int x, int y, int color));
 void PopUpMoveDialog P((char first));
 
 void RingBell P((void));
+int  Roar P((void));
 void PlayIcsWinSound P((void));
 void PlayIcsLossSound P((void));
 void PlayIcsDrawSound P((void));
 void PlayIcsUnfinishedSound P((void));
 void PlayAlarmSound P((void));
 void PlayTellSound P((void));
-void PlaySoundFile P((char *name));
+int  PlaySoundFile P((char *name));
 void PlaySoundByColor P((void));
 void EchoOn P((void));
 void EchoOff P((void));
@@ -107,6 +108,7 @@ void Raw P((void));
 void Colorize P((ColorClass cc, int continuation));
 char *InterpretFileName P((char *name, char *dir));
 void DoSleep P((int n));
+void DoEvents P((void));
 
 char *UserName P((void));
 char *HostName P((void));
@@ -128,7 +130,7 @@ DelayedEventCallback GetDelayedEvent P((void));
 void CancelDelayedEvent P((void));
 // [HGM] mouse: next six used by mouse handler, which was moved to backend
 extern int fromX, fromY, toX, toY;
-void PromotionPopUp P((void));
+void PromotionPopUp P((char choice));
 void DragPieceBegin P((int x, int y, Boolean instantly));
 void DragPieceEnd P((int x, int y));
 void DragPieceMove P((int x, int y));
index 19bad0b..2055e96 100644 (file)
@@ -305,7 +305,7 @@ GameListBuild (FILE *f)
            } while (cm == PGNTag || cm == Comment);
            if(1) {
                int btm=0;
-               if(currentListGame->gameInfo.fen) ParseFEN(boards[scratch], &btm, currentListGame->gameInfo.fen);
+               if(currentListGame->gameInfo.fen) ParseFEN(boards[scratch], &btm, currentListGame->gameInfo.fen, FALSE);
                else CopyBoard(boards[scratch], initialPosition);
                plyNr = (btm != 0);
                currentListGame->moves = PackGame(boards[scratch]);
@@ -373,7 +373,7 @@ GameListBuild (FILE *f)
        }
        if(gameNumber % 1000 == 0) {
            snprintf(buf, MSG_SIZ, _("Reading game file (%d)"), gameNumber);
-           DisplayTitle(buf);
+           DisplayTitle(buf); DoEvents();
        }
     }
     while (cm != (ChessMove) 0);
index 2a46f09..a7cbd45 100644 (file)
@@ -174,14 +174,15 @@ extern char *getenv();
 #  define SLASH '-'
    // redefine some defaults
 #  undef ICS_LOGON
-#  undef SYSCONFDIR
+#  undef DATADIR
+#  undef SETTINGS_FILE
 #  define ICS_LOGON "Library/Preferences/XboardICS.conf"
-#  define SYSCONFDIR "../etc"
 #  define DATADIR dataDir
-   char *dataDir; // for expanding ~~
+#  define SETTINGS_FILE masterSettings
+   char dataDir[MSG_SIZ]; // for expanding ~~
+   char masterSettings[MSG_SIZ];
 #else
 #  define SLASH '/'
-#  define DATADIR "~~"
 #endif
 
 #ifdef __EMX__
@@ -203,8 +204,8 @@ int main P((int argc, char **argv));
 RETSIGTYPE CmailSigHandler P((int sig));
 RETSIGTYPE IntSigHandler P((int sig));
 RETSIGTYPE TermSizeSigHandler P((int sig));
-#if ENABLE_NLS
 char *InsertPxlSize P((char *pattern, int targetPxlSize));
+#if ENABLE_NLS
 XFontSet CreateFontSet P((char *base_fnt_lst));
 #else
 char *FindFont P((char *pattern, int targetPxlSize));
@@ -383,7 +384,8 @@ ParseFont (char *name, int number)
   if(sscanf(name, "size%d:", &size)) {
     // [HGM] font: font is meant for specific boardSize (likely from settings file);
     //       defer processing it until we know if it matches our board size
-    if(size >= 0 && size<MAX_SIZE) { // for now, fixed limit
+    if(!strstr(name, "-*-") &&       // ignore X-fonts
+       size >= 0 && size<MAX_SIZE) { // for now, fixed limit
        fontTable[number][size] = strdup(strchr(name, ':')+1);
        fontValid[number][size] = True;
     }
@@ -399,6 +401,21 @@ ParseFont (char *name, int number)
     case 2: // COORD_FONT
        appData.coordFont = strdup(name);
       break;
+    case CONSOLE_FONT:
+       appData.icsFont = strdup(name);
+      break;
+    case EDITTAGS_FONT:
+       appData.tagsFont = strdup(name);
+      break;
+    case COMMENT_FONT:
+       appData.commentFont = strdup(name);
+      break;
+    case MOVEHISTORY_FONT:
+       appData.historyFont = strdup(name);
+      break;
+    case GAMELIST_FONT:
+       appData.gameListFont = strdup(name);
+      break;
     default:
       return;
   }
@@ -408,9 +425,14 @@ ParseFont (char *name, int number)
 void
 SetFontDefaults ()
 { // only 2 fonts currently
-  appData.clockFont = CLOCK_FONT_NAME;
-  appData.coordFont = COORD_FONT_NAME;
-  appData.font  =   DEFAULT_FONT_NAME;
+  appData.clockFont = strdup(CLOCK_FONT_NAME);
+  appData.coordFont = strdup(COORD_FONT_NAME);
+  appData.font  =   strdup(DEFAULT_FONT_NAME);
+  appData.icsFont = strdup(CONSOLE_FONT_NAME);
+  appData.tagsFont = strdup(TAGS_FONT_NAME);
+  appData.commentFont = strdup(COMMENT_FONT_NAME);
+  appData.historyFont = strdup(HISTORY_FONT_NAME);
+  appData.gameListFont = strdup(GAMELIST_FONT_NAME);
 }
 
 void
@@ -424,6 +446,12 @@ ParseColor (int n, char *name)
   if(colorVariable[n]) *(char**)colorVariable[n] = strdup(name);
 }
 
+char *
+Col2Text (int n)
+{
+    return *(char**)colorVariable[n];
+}
+
 void
 ParseTextAttribs (ColorClass cc, char *s)
 {
@@ -462,6 +490,21 @@ SaveFontArg (FILE *f, ArgDescriptor *ad)
     case 2: // COORD_FONT
        name = appData.coordFont;
       break;
+    case CONSOLE_FONT:
+       name = appData.icsFont;
+      break;
+    case EDITTAGS_FONT:
+       name = appData.tagsFont;
+      break;
+    case COMMENT_FONT:
+       name = appData.commentFont;
+      break;
+    case MOVEHISTORY_FONT:
+       name = appData.historyFont;
+      break;
+    case GAMELIST_FONT:
+       name = appData.gameListFont;
+      break;
     default:
       return;
   }
@@ -522,6 +565,12 @@ GetActualPlacement (GtkWidget *shell, WindowPlacement *wp)
 }
 
 void
+GetPlacement (DialogClass dlg, WindowPlacement *wp)
+{ // wrapper to shield back-end from widget type
+  if(shellUp[dlg]) GetActualPlacement(shells[dlg], wp);
+}
+
+void
 GetWindowCoords ()
 { // wrapper to shield use of window handles from back-end (make addressible by number?)
   // In XBoard this will have to wait until awareness of window parameters is implemented
@@ -532,6 +581,7 @@ GetWindowCoords ()
   if(shellUp[GameListDlg]) GetActualPlacement(shells[GameListDlg], &wpGameList);
   if(shellUp[CommentDlg]) GetActualPlacement(shells[CommentDlg], &wpComment);
   if(shellUp[TagsDlg]) GetActualPlacement(shells[TagsDlg], &wpTags);
+  GetPlacement(ChatDlg, &wpConsole); if(appData.icsActive) wpConsole.visible = shellUp[ChatDlg];
 }
 
 void
@@ -585,7 +635,7 @@ void
 ResizeBoardWindow (int w, int h, int inhibit)
 {
     GtkAllocation a;
-    if(clockKludge) return; // ignore as long as clock does not have final height
+//    if(clockKludge) return; // ignore as long as clock does not have final height
     gtk_widget_get_allocation(optList[W_WHITE].handle, &a);
     w += marginW + 1; // [HGM] not sure why the +1 is (sometimes) needed...
     h += marginH + a.height + 1;
@@ -601,6 +651,33 @@ MakeColors ()
 void
 InitializeFonts (int clockFontPxlSize, int coordFontPxlSize, int fontPxlSize)
 {   // determine what fonts to use, and create them
+
+    if(!fontIsSet[CLOCK_FONT] && fontValid[CLOCK_FONT][squareSize])
+       appData.clockFont = fontTable[CLOCK_FONT][squareSize];
+    if(!fontIsSet[MESSAGE_FONT] && fontValid[MESSAGE_FONT][squareSize])
+       appData.font = fontTable[MESSAGE_FONT][squareSize];
+    if(!fontIsSet[COORD_FONT] && fontValid[COORD_FONT][squareSize])
+       appData.coordFont = fontTable[COORD_FONT][squareSize];
+    if(!fontIsSet[CONSOLE_FONT] && fontValid[CONSOLE_FONT][squareSize])
+       appData.icsFont = fontTable[CONSOLE_FONT][squareSize];
+    if(!fontIsSet[EDITTAGS_FONT] && fontValid[EDITTAGS_FONT][squareSize])
+       appData.tagsFont = fontTable[EDITTAGS_FONT][squareSize];
+    if(!fontIsSet[COMMENT_FONT] && fontValid[COMMENT_FONT][squareSize])
+       appData.commentFont = fontTable[COMMENT_FONT][squareSize];
+    if(!fontIsSet[MOVEHISTORY_FONT] && fontValid[MOVEHISTORY_FONT][squareSize])
+       appData.historyFont = fontTable[MOVEHISTORY_FONT][squareSize];
+    if(!fontIsSet[GAMELIST_FONT] && fontValid[GAMELIST_FONT][squareSize])
+       appData.gameListFont = fontTable[GAMELIST_FONT][squareSize];
+
+    appData.font = InsertPxlSize(appData.font, coordFontPxlSize);
+    appData.clockFont = InsertPxlSize(appData.clockFont, clockFontPxlSize);
+    appData.coordFont = InsertPxlSize(appData.coordFont, coordFontPxlSize);
+    appData.icsFont = InsertPxlSize(appData.icsFont, coordFontPxlSize);
+    appData.tagsFont = InsertPxlSize(appData.tagsFont, coordFontPxlSize);
+    appData.commentFont = InsertPxlSize(appData.commentFont, coordFontPxlSize);
+    appData.historyFont = InsertPxlSize(appData.historyFont, coordFontPxlSize);
+    appData.gameListFont = InsertPxlSize(appData.gameListFont, coordFontPxlSize);
+
 #ifdef TODO_GTK
     XrmValue vTo;
     XrmDatabase xdb;
@@ -679,6 +756,7 @@ PrintArg (ArgType t)
     case ArgTwo:
     case ArgNone:
     case ArgCommSettings:
+    default:
       break;
   }
   return p;
@@ -744,13 +822,15 @@ StartNewXBoard(GtkosxApplication *app, gchar *path, gpointer user_data)
   }
   return TRUE;
 }
+
+GtkosxApplication *theApp;
 #endif
 
 int
 main (int argc, char **argv)
 {
     int i, clockFontPxlSize, coordFontPxlSize, fontPxlSize;
-    int boardWidth, boardHeight, w, h;
+    int boardWidth, w, h; //, boardHeight;
     char *p;
     int forceMono = False;
 
@@ -761,7 +841,7 @@ main (int argc, char **argv)
     debugFP = stderr;
 
     if(argc > 1 && (!strcmp(argv[1], "-v" ) || !strcmp(argv[1], "--version" ))) {
-       printf("%s version %s\n", PACKAGE_NAME, PACKAGE_VERSION);
+        printf("%s version %s\n\n  configure options: %s\n", PACKAGE_NAME, PACKAGE_VERSION, CONFIGURE_OPTIONS);
        exit(0);
     }
 
@@ -774,14 +854,16 @@ main (int argc, char **argv)
     gtk_init (&argc, &argv);
 #ifdef __APPLE__
     {   // prepare to catch OX OpenFile signal, which will tell us the clicked file
-       GtkosxApplication *theApp = g_object_new(GTKOSX_TYPE_APPLICATION, NULL);
-       dataDir = gtkosx_application_get_bundle_path();
+       char *path = gtkosx_application_get_bundle_path();
+       theApp = g_object_new(GTKOSX_TYPE_APPLICATION, NULL);
+       strncpy(dataDir, path, MSG_SIZ);
+       snprintf(masterSettings, MSG_SIZ, "%s/Contents/Resources/etc/xboard.conf", path);
+       suppress = (argc == 1 || argc > 1 && argv[1][00] != '-'); // OSX sends signal even if name was already argv[1]!
        g_signal_connect(theApp, "NSApplicationOpenFile", G_CALLBACK(StartNewXBoard), NULL);
        // we must call application ready before we can get the signal,
        // and supply a (dummy) menu bar before that, to avoid problems with dual apples in it
        gtkosx_application_set_menu_bar(theApp, GTK_MENU_SHELL(gtk_menu_bar_new()));
        gtkosx_application_ready(theApp);
-       suppress = (argc == 1 || argc > 1 && argv[1][00] != '-'); // OSX sends signal even if name was already argv[1]!
        if(argc == 1) {                  // called without args: OSX open-file signal might follow
            static char *fakeArgv[3] = {NULL, clickedFile, NULL};
            usleep(10000);               // wait 10 msec (and hope this is long enough).
@@ -796,6 +878,23 @@ main (int argc, char **argv)
     }
 #endif
 
+    if(argc > 1 && !strcmp(argv[1], "--show-config")) { // [HGM] install: called to print config info
+       typedef struct {char *name, *value; } Config;
+       static Config configList[] = {
+         { "Datadir", DATADIR },
+         { "Sysconfdir", SYSCONFDIR },
+         { NULL }
+       };
+       int i;
+
+       for(i=0; configList[i].name; i++) {
+           if(argc > 2 && strcmp(argv[2], configList[i].name)) continue;
+           if(argc > 2) printf("%s", configList[i].value);
+           else printf("%-12s: %s\n", configList[i].name, configList[i].value);
+       }
+       exit(0);
+    }
+
     /* set up keyboard accelerators group */
     GtkAccelerators = gtk_accel_group_new();
 
@@ -827,6 +926,8 @@ main (int argc, char **argv)
 
     { // [HGM] initstring: kludge to fix bad bug. expand '\n' characters in init string and computer string.
        static char buf[MSG_SIZ];
+       snprintf(buf, MSG_SIZ, appData.sysOpen, DATADIR);
+       ASSIGN(appData.sysOpen, buf); // expand %s in -openCommand to DATADIR (usefull for OS X configuring)
        EscapeExpand(buf, appData.firstInitString);
        appData.firstInitString = strdup(buf);
        EscapeExpand(buf, appData.secondInitString);
@@ -888,6 +989,8 @@ main (int argc, char **argv)
                    programName, appData.boardSize);
            exit(2);
        }
+       if(BOARD_WIDTH > 8)
+           squareSize = (squareSize*8 + BOARD_WIDTH/2)/BOARD_WIDTH; // scale height
        if (i < 7) {
            /* Find some defaults; use the nearest known size */
            SizeDefaults *szd, *nearest;
@@ -911,11 +1014,11 @@ main (int argc, char **argv)
     } else {
         SizeDefaults *szd = sizeDefaults;
         if (*appData.boardSize == NULLCHAR) {
-            GdkScreen *screen = gtk_window_get_screen(GTK_WINDOW(mainwindow));
+            GdkScreen *screen = gtk_window_get_screen(GTK_WINDOW(mainwindow)); // TODO: this does not work, as no mainwindow yet
             guint screenwidth = gdk_screen_get_width(screen);
             guint screenheight = gdk_screen_get_height(screen);
-           while (screenwidth < szd->minScreenSize ||
-                  screenheight < szd->minScreenSize) {
+           while (screenwidth  < (szd->minScreenSize*BOARD_WIDTH  + 4)/8 ||
+                  screenheight < (szd->minScreenSize*BOARD_HEIGHT + 4)/8) {
              szd++;
            }
            if (szd->name == NULL) szd--;
@@ -944,14 +1047,12 @@ main (int argc, char **argv)
 
     /* [HR] height treated separately (hacked) */
     boardWidth = lineGap + BOARD_WIDTH * (squareSize + lineGap);
-    boardHeight = lineGap + BOARD_HEIGHT * (squareSize + lineGap);
+//    boardHeight = lineGap + BOARD_HEIGHT * (squareSize + lineGap);
 
     /*
      * Determine what fonts to use.
      */
-#ifdef TODO_GTK
-    InitializeFonts(clockFontPxlSize, coordFontPxlSize, fontPxlSize);
-#endif
+    InitializeFonts((2*clockFontPxlSize+1)/3, coordFontPxlSize, fontPxlSize);
 
     /*
      * Detect if there are not enough colors available and adapt.
@@ -1026,8 +1127,7 @@ main (int argc, char **argv)
      */
     WhiteIcon  = gdk_pixbuf_new_from_file(SVGDIR "/icon_white.svg", NULL);
     BlackIcon  = gdk_pixbuf_new_from_file(SVGDIR "/icon_black.svg", NULL);
-    mainwindowIcon = WhiteIcon;
-    gtk_window_set_icon(GTK_WINDOW(shellWidget), mainwindowIcon);
+    SetClockIcon(0); // sets white icon
 
 
     /*
@@ -1098,6 +1198,14 @@ main (int argc, char **argv)
       EngineOutputPopUp();
     }
 
+    if( wpConsole.visible && appData.icsActive ) {
+      ChatProc();
+      BoardToTop();
+    }
+
+    gameInfo.boardWidth = 0; // [HGM] pieces: kludge to ensure InitPosition() calls InitDrawingSizes()
+    InitPosition(TRUE);
+
     InitBackEnd2();
 
     if (errorExitStatus == -1) {
@@ -1118,8 +1226,6 @@ main (int argc, char **argv)
        }
     }
 
-    gameInfo.boardWidth = 0; // [HGM] pieces: kludge to ensure InitPosition() calls InitDrawingSizes()
-    InitPosition(TRUE);
     UpdateLogos(TRUE);
 //    XtSetKeyboardFocus(shellWidget, formWidget);
 #ifdef TODO_GTK
@@ -1136,6 +1242,12 @@ gtk_main_iteration();
     return 0;
 }
 
+void
+DoEvents ()
+{
+    while(gtk_events_pending()) gtk_main_iteration();
+}
+
 RETSIGTYPE
 TermSizeSigHandler (int sig)
 {
@@ -1173,7 +1285,16 @@ CmailSigHandlerCallBack (InputSourceRef isr, VOIDSTAR closure, char *message, in
 
 #define Abs(n) ((n)<0 ? -(n) : (n))
 
+char *
+InsertPxlSize (char *pattern, int targetPxlSize)
+{
+    char buf[MSG_SIZ];
+    snprintf(buf, MSG_SIZ, pattern, targetPxlSize); // pattern is something like "Sans Bold %d"
+    return strdup(buf);
+}
+
 #ifdef ENABLE_NLS
+#ifdef TODO_GTK
 char *
 InsertPxlSize (char *pattern, int targetPxlSize)
 {
@@ -1224,6 +1345,7 @@ InsertPxlSize (char *pattern, int targetPxlSize)
 
     return base_fnt_lst;
 }
+#endif
 
 #ifdef TODO_GTK
 XFontSet
@@ -1271,13 +1393,13 @@ CreateFontSet (char *base_fnt_lst)
  * The return value should be freed with XtFree when no
  * longer needed.
  */
+#ifdef TODO_GTK
 char *
 FindFont (char *pattern, int targetPxlSize)
 {
     char **fonts, *p, *best, *scalable, *scalableTail;
     int i, j, nfonts, minerr, err, pxlSize;
 
-#ifdef TODO_GTK
     fonts = XListFonts(xDisplay, pattern, 999999, &nfonts);
     if (nfonts < 1) {
        fprintf(stderr, _("%s: no fonts match pattern %s\n"),
@@ -1326,17 +1448,17 @@ FindFont (char *pattern, int targetPxlSize)
                pattern, targetPxlSize, p);
     }
     XFreeFontNames(fonts);
-#endif
     return p;
 }
 #endif
+#endif
 
 void
 EnableNamedMenuItem (char *menuRef, int state)
 {
     MenuItem *item = MenuNameToItem(menuRef);
 
-    if(item) gtk_widget_set_sensitive(item->handle, state);
+    if(item && item->handle) gtk_widget_set_sensitive(item->handle, state);
 }
 
 void
@@ -1490,15 +1612,13 @@ ReSize (WindowPlacement *wp)
        int sqx, sqy, w, h, hc, lg = lineGap;
        gtk_widget_get_allocation(optList[W_WHITE].handle, &a);
        hc = a.height; // clock height can depend on single / double line clock text!
-        if(clockKludge == a.height) return; // wait for clock to get final size at startup
-       if(clockKludge) { // clock height OK now; calculate desired initial board height
-           clockKludge = 0;
-           wp->height = BOARD_HEIGHT * (squareSize + lineGap) + lineGap + marginH + hc;
-       }
+        if(clockKludge && hc != clockKludge) wp->height += hc - clockKludge, clockKludge = 0;
+       wpMain.height = BOARD_HEIGHT * (squareSize + lineGap) + lineGap + marginH + hc;
        if(wp->width == wpMain.width && wp->height == wpMain.height) return; // not sized
        sqx = (wp->width  - lg - marginW) / BOARD_WIDTH - lg;
        sqy = (wp->height - lg - marginH - hc) / BOARD_HEIGHT - lg;
        if(sqy < sqx) sqx = sqy;
+        if(sqx < 20) return;
        if(appData.overrideLineGap < 0) { // do second iteration with adjusted lineGap
            lg = lineGap = sqx < 37 ? 1 : sqx < 59 ? 2 : sqx < 116 ? 3 : 4;
            sqx = (wp->width  - lg - marginW) / BOARD_WIDTH - lg;
@@ -1506,7 +1626,6 @@ ReSize (WindowPlacement *wp)
            if(sqy < sqx) sqx = sqy;
        }
        if(sqx != squareSize) {
-//printf("new sq size %d (%dx%d)\n", sqx, wp->width, wp->height);
            squareSize = sqx; // adopt new square size
            CreatePNGPieces(); // make newly scaled pieces
            InitDrawingSizes(0, 0); // creates grid etc.
@@ -1537,6 +1656,7 @@ DragProc ()
            if(shellUp[HistoryDlg]) CoDrag(shells[HistoryDlg], &wpMoveHistory);
            if(shellUp[EvalGraphDlg]) CoDrag(shells[EvalGraphDlg], &wpEvalGraph);
            if(shellUp[GameListDlg]) CoDrag(shells[GameListDlg], &wpGameList);
+           if(shellUp[ChatDlg]) CoDrag(shells[ChatDlg], &wpConsole);
         }
        wpMain = wpNew;
        DrawPosition(True, NULL);
@@ -1752,7 +1872,7 @@ void MoveTypeInProc(eventkey)
     buf[0]=eventkey->keyval;
     buf[1]='\0';
     if (eventkey->keyval > 32 && eventkey->keyval < 256)
-       BoxAutoPopUp (buf);
+       ConsoleAutoPopUp (buf);
 }
 
 #ifdef TODO_GTK
@@ -1876,11 +1996,15 @@ DisplayTimerLabel (Option *opt, char *color, long timer, int highlight)
     gtk_widget_modify_bg(gtk_widget_get_parent(opt->handle), GTK_STATE_NORMAL, &col);
 
     if (appData.clockMode) {
-        markup = g_markup_printf_escaped("<span size=\"xx-large\" weight=\"heavy\" background=\"%s\" foreground=\"%s\">%s:%s%s</span>",
+        markup = g_markup_printf_escaped("<span font=\"%s\" background=\"%s\" foreground=\"%s\">%s:%s%s</span>", appData.clockFont,
                                         bgcolor, fgcolor, color, appData.logoSize && !partnerUp ? "\n" : " ", TimeString(timer));
+//        markup = g_markup_printf_escaped("<span size=\"xx-large\" weight=\"heavy\" background=\"%s\" foreground=\"%s\">%s:%s%s</span>",
+//                                      bgcolor, fgcolor, color, appData.logoSize && !partnerUp ? "\n" : " ", TimeString(timer));
     } else {
-        markup = g_markup_printf_escaped("<span size=\"xx-large\" weight=\"heavy\" background=\"%s\" foreground=\"%s\">%s  </span>",
+        markup = g_markup_printf_escaped("<span font=\"%s\" background=\"%s\" foreground=\"%s\">%s  </span>", appData.clockFont,
                                         bgcolor, fgcolor, color);
+//        markup = g_markup_printf_escaped("<span size=\"xx-large\" weight=\"heavy\" background=\"%s\" foreground=\"%s\">%s  </span>",
+//                                      bgcolor, fgcolor, color);
     }
     gtk_label_set_markup(GTK_LABEL(w), markup);
     g_free(markup);
@@ -1934,6 +2058,11 @@ DoInputCallback(io, cond, data)
        count = read(is->fd, is->unused,
                     INPUT_SOURCE_BUF_SIZE - (is->unused - is->buf));
        if (count <= 0) {
+           if(count == 0 && is->kind == CPReal && shells[ChatDlg]) { // [HGM] absence of terminal is no error if ICS Console present
+               RemoveInputSource(is); // cease reading stdin
+               stdoutClosed = TRUE;   // suppress future output
+               return True;
+           } 
            (is->func)(is, is->closure, is->buf, count, count ? errno : 0);
            return True;
        }
index 7a7d36f..b839418 100644 (file)
 
 #define ICS_LOGON    ".icsrc"
 #define MANPAGE      "xboard.6"
-#if ENABLE_NLS
-#define CLOCK_FONT_NAME \
-  "-*-helvetica-bold-r-normal--*-*-*-*-*-*-*-*," \
-  "-misc-fixed-bold-r-normal--*-*-*-*-*-*-*-*," \
-  "-*-*-*-*-*-*-*-*-*-*-*-*-*-*"
-#define COORD_FONT_NAME \
-  "-*-helvetica-bold-r-normal--*-*-*-*-*-*-*-*," \
-  "-misc-fixed-bold-r-normal--*-*-*-*-*-*-*-*," \
-  "-*-*-*-*-*-*-*-*-*-*-*-*-*-*"
-#define DEFAULT_FONT_NAME \
-  "-*-helvetica-medium-r-normal--*-*-*-*-*-*-*-*," \
-  "-misc-fixed-medium-r-normal--*-*-*-*-*-*-*-*," \
-  "-*-*-*-*-*-*-*-*-*-*-*-*-*-*"
-#else
-#define CLOCK_FONT_NAME         "-*-helvetica-bold-r-normal--*-*-*-*-*-*-*-*"
-#define COORD_FONT_NAME         "-*-helvetica-bold-r-normal--*-*-*-*-*-*-*-*"
-#define DEFAULT_FONT_NAME       "-*-helvetica-medium-r-normal--*-*-*-*-*-*-*-*"
-#endif
+#define CLOCK_FONT_NAME         "Sans Bold %d"
+#define COORD_FONT_NAME         "Sans Bold %d"
+#define DEFAULT_FONT_NAME       "Sans Normal %d"
+#define CONSOLE_FONT_NAME       "Monospace Normal %d"
+#define HISTORY_FONT_NAME       "Sans Normal %d"
+#define COMMENT_FONT_NAME       "Sans Normal %d"
+#define TAGS_FONT_NAME          "Sans Normal %d"
+#define GAMELIST_FONT_NAME      "Sans Normal %d"
 #define COLOR_SHOUT             "green"
 #define COLOR_SSHOUT            "green,black,1"
 #define COLOR_CHANNEL1          "cyan"
@@ -107,11 +97,11 @@ typedef struct {
   { "Moderate", 58, 3, 34, 12, 14, 1, 0, 768 }, \
   { "Average",  54, 2, 30, 11, 12, 1, 0, 600 }, \
   { "Middling", 49, 2, 24, 10, 12, 1, 0, 600 }, \
-  { "Mediocre", 45, 2, 20, 10, 12, 1, 0, 600 }, \
-  { "Small",    40, 2, 20, 10, 12, 1, 0, 480 }, \
-  { "Slim",     37, 2, 20, 10, 12, 1, 0, 480 }, \
-  { "Petite",   33, 1, 15, 9,  11, 1, 0, 480 }, \
-  { "Dinky",    29, 1, 15, 9,  11, 1, 0, 480 }, \
+  { "Mediocre", 45, 2, 20, 10, 12, 1, 4, 600 }, \
+  { "Small",    40, 2, 20, 10, 12, 1, 3, 480 }, \
+  { "Slim",     37, 2, 20, 10, 12, 1, 3, 480 }, \
+  { "Petite",   33, 1, 15, 9,  11, 1, 2, 480 }, \
+  { "Dinky",    29, 1, 15, 9,  11, 1, 1, 480 }, \
   { "Teeny",    25, 1, 12, 8,  11, 1, 1, 480 }, \
   { "Tiny",     21, 1, 12, 8,  11, 1, 1, 0 }, \
   {   NULL,      0, 0,  0, 0,   0, 0, 0, 0 } }
@@ -119,7 +109,7 @@ typedef struct {
 #define BORDER_X_OFFSET 3
 #define BORDER_Y_OFFSET 27
 #define FIRST_CHESS_PROGRAM    "fairymax"
-#define SECOND_CHESS_PROGRAM   "fairymax"
+#define SECOND_CHESS_PROGRAM   ""
 #define FIRST_DIRECTORY         "."
 #define SECOND_DIRECTORY        "."
 #define SOUND_BELL              ""
index 8fb5dca..e144e3d 100644 (file)
@@ -143,7 +143,7 @@ MarkMenuItem (char *menuRef, int state)
 {
     MenuItem *item = MenuNameToItem(menuRef);
 
-    if(item) {
+    if(item && item->handle) {
         ((GtkCheckMenuItem *) (item->handle))->active = state;
     }
 }
@@ -259,6 +259,16 @@ SetDialogTitle (DialogClass dlg, char *title)
     gtk_window_set_title(GTK_WINDOW(shells[dlg]), title);
 }
 
+int
+SetWidgetFont (GtkWidget *w, char *s)
+{
+    PangoFontDescription *pfd;
+    if (!s || !*s || *s == '#') return 0; // no spec, empty spec or spec of color: fail
+    pfd = pango_font_description_from_string(*(char**)s);
+    gtk_widget_modify_font(w, pfd);
+    return 1;
+}
+
 void
 SetListBoxItem (GtkListStore *store, int n, char *msg)
 {
@@ -320,13 +330,10 @@ void
 ScrollToCursor (Option *opt, int caretPos)
 {
     static GtkTextIter iter;
-    static GtkTextMark *mark;
-    if(!mark) mark = gtk_text_mark_new(NULL, 0);
+    GtkTextMark *mark = gtk_text_buffer_get_mark((GtkTextBuffer *) opt->handle, "scrollmark");
     gtk_text_buffer_get_iter_at_offset((GtkTextBuffer *) opt->handle, &iter, caretPos);
-    gtk_text_buffer_add_mark((GtkTextBuffer *) opt->handle, mark, &iter);
+    gtk_text_buffer_move_mark((GtkTextBuffer *) opt->handle, mark, &iter);
     gtk_text_view_scroll_to_mark((GtkTextView *) opt->textValue, mark, 0.0, 0, 0.5, 0.5);
-//    gtk_text_view_scroll_to_iter((GtkTextView *) opt->textValue, &iter, 0.0, 0, 0.5, 0.5);
-    gtk_text_buffer_delete_mark((GtkTextBuffer *) opt->handle, mark);
 }
 
 int
@@ -353,6 +360,7 @@ FocusOnWidget (Option *opt, DialogClass dlg)
 #ifdef TODO_GTK
     XtSetKeyboardFocus(shells[dlg], opt->handle);
 #endif
+    if(dlg) gtk_window_present(GTK_WINDOW(shells[dlg]));
     gtk_widget_grab_focus(opt->handle);
 }
 
@@ -432,6 +440,7 @@ CreateMenuPopup (Option *opt, int n, int def)
        if(!strcmp(msg, "Quit ")) continue;             // Quit item will appear automatically in App menu
        if(!strcmp(msg, "About XBoard")) msg = "About"; // 'XBoard' will be appended automatically when moved to App menu 1st item
 #endif
+        if(!strcmp(msg, "ICS Input Box")) { mb[i].handle = NULL; continue; } // suppress ICS Input Box in GTK
        if(strcmp(msg, "----")) { //
          if(!(opt->min & NO_GETTEXT)) msg = _(msg);
          if(mb[i].handle) {
@@ -449,7 +458,7 @@ CreateMenuPopup (Option *opt, int n, int def)
            if(accelerator_mods & GDK_CONTROL_MASK) {  // in OSX use Meta where Linux uses Ctrl
                accelerator_mods &= ~GDK_CONTROL_MASK; // clear Ctrl flag
                accelerator_mods |= GDK_META_MASK;     // set Meta flag
-           } 
+           }
 #endif
            gtk_widget_add_accelerator (GTK_WIDGET(entry), "activate",GtkAccelerators,
                                        accelerator_key, accelerator_mods, GTK_ACCEL_VISIBLE);
@@ -504,11 +513,16 @@ TypeInProc (GtkWidget *widget, GdkEventKey *event, gpointer gdata)
     shiftState = event->state & GDK_SHIFT_MASK;
     controlState = event->state & GDK_CONTROL_MASK;
     switch(event->keyval) {
+      case 'n':       return (controlState && IcsHist(14, opt, dlg));
+      case 'o':       return (controlState && IcsHist(15, opt, dlg));
+      case GDK_Tab:   IcsHist(10, opt, dlg); break;
+      case GDK_Up:     IcsHist(1, opt, dlg); break;
+      case GDK_Down:  IcsHist(-1, opt, dlg); break;
       case GDK_Return:
        if(GenericReadout(dialogOptions[dlg], -1)) PopDown(dlg);
        break;
       case GDK_Escape:
-       PopDown(dlg);
+       if(!IcsHist(33, opt, dlg)) PopDown(dlg);
        break;
       default:
        return FALSE;
@@ -532,6 +546,61 @@ HighlightText (Option *opt, int from, int to, Boolean highlight)
     gtk_text_buffer_apply_tag_by_name(opt->handle, highlight ? "highlight" : "normal", &start, &end);
 }
 
+static char **names;
+static int curFG, curBG, curAttr;
+static GdkColor backgroundColor;
+
+void
+SetTextColor(char **cnames, int fg, int bg, int attr)
+{
+    if(fg < 0) fg = 0; if(bg < 0) bg = 7;
+    names = cnames; curFG = fg; curBG = bg, curAttr = attr;
+    if(attr == -2) { // background color of ICS console.
+       gdk_color_parse(cnames[bg&7], &backgroundColor);
+       curAttr = 0;
+    }
+}
+
+void
+AppendColorized (Option *opt, char *s, int count)
+{
+    static GtkTextIter end;
+    static GtkTextTag *fgTags[8], *bgTags[8], *font, *bold, *normal, *attr = NULL;
+
+    if(!font) {
+       font = gtk_text_buffer_create_tag(opt->handle, NULL, "font", appData.icsFont, NULL);
+       gtk_widget_modify_base(GTK_WIDGET(opt->textValue), GTK_STATE_NORMAL, &backgroundColor);
+    }
+
+    gtk_text_buffer_get_end_iter(GTK_TEXT_BUFFER(opt->handle), &end);
+
+    if(names) {
+      if(curAttr == 1) {
+       if(!bold) bold = gtk_text_buffer_create_tag(opt->handle, NULL, "weight", PANGO_WEIGHT_BOLD, NULL);
+        attr = bold;
+      } else {
+       if(!normal) normal = gtk_text_buffer_create_tag(opt->handle, NULL, "weight", PANGO_WEIGHT_NORMAL, NULL);
+        attr = normal;
+      }
+      if(!fgTags[curFG]) {
+       fgTags[curFG] = gtk_text_buffer_create_tag(opt->handle, NULL, "foreground", names[curFG], NULL);
+      }
+      if(!bgTags[curBG]) {
+       bgTags[curBG] = gtk_text_buffer_create_tag(opt->handle, NULL, "background", names[curBG], NULL);
+      }
+      gtk_text_buffer_insert_with_tags(opt->handle, &end, s, count, fgTags[curFG], bgTags[curBG], font, attr, NULL);
+    } else
+      gtk_text_buffer_insert_with_tags(opt->handle, &end, s, count, font, NULL);
+
+}
+
+void
+Show (Option *opt, int hide)
+{
+    if(hide) gtk_widget_hide(opt->handle);
+    else     gtk_widget_show(opt->handle);
+}
+
 int
 ShiftKeys ()
 {   // bassic primitive for determining if modifier keys are pressed
@@ -602,15 +671,23 @@ MemoEvent(GtkWidget *widget, GdkEvent *event, gpointer gdata)
                ((ButtonCallback*) memo->target)(button == 1 ? memo->value : -memo->value);
                return TRUE;
            }
+           if(memo->value == 250 // kludge to recognize ICS Console and Chat panes
+            && gtk_text_buffer_get_selection_bounds(memo->handle, NULL, NULL) ) {
+printf("*** selected\n");
+               gtk_text_buffer_get_selection_bounds(memo->handle, &start, &end); // only return selected text
+               index = -1; // kludge to indicate omething was selected
+           } else {
 // GTK_TODO: is this really the most efficient way to get the character at the mouse cursor???
-           gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(widget), GTK_TEXT_WINDOW_WIDGET, w, h, &x, &y);
-           gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(widget), &start, x, y);
-           gtk_text_buffer_place_cursor(memo->handle, &start);
-           /* get cursor position into index */
-           g_object_get(memo->handle, "cursor-position", &index, NULL);
+               gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(widget), GTK_TEXT_WINDOW_WIDGET, w, h, &x, &y);
+               gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(widget), &start, x, y);
+               gtk_text_buffer_place_cursor(memo->handle, &start);
+               /* get cursor position into index */
+               g_object_get(memo->handle, "cursor-position", &index, NULL);
+               /* take complete contents */
+               gtk_text_buffer_get_start_iter (memo->handle, &start);
+               gtk_text_buffer_get_end_iter (memo->handle, &end);
+           }
            /* get text from textbuffer */
-           gtk_text_buffer_get_start_iter (memo->handle, &start);
-           gtk_text_buffer_get_end_iter (memo->handle, &end);
            val = gtk_text_buffer_get_text (memo->handle, &start, &end, FALSE);
            break;
        default:
@@ -636,6 +713,7 @@ AddHandler (Option *opt, DialogClass dlg, int nr)
        g_signal_connect(opt->handle, "key-press-event", G_CALLBACK (TypeInProc), (gpointer) (dlg<<16 | (opt - dialogOptions[dlg])));
        break;
       case 5: // game list
+        SetWidgetFont(opt->handle, (char*) &appData.gameListFont);
        g_signal_connect(opt->handle, "button-press-event", G_CALLBACK (GameListEvent), (gpointer) 0 );
       case 4: // game-list filter
        g_signal_connect(opt->handle, "key-press-event", G_CALLBACK (GameListEvent), (gpointer) (intptr_t) nr );
@@ -652,7 +730,7 @@ AddHandler (Option *opt, DialogClass dlg, int nr)
 GtkWidget *shells[NrOfDialogs];
 DialogClass parents[NrOfDialogs];
 WindowPlacement *wp[NrOfDialogs] = { // Beware! Order must correspond to DialogClass enum
-    NULL, &wpComment, &wpTags, NULL, NULL, NULL, &wpDualBoard, &wpMoveHistory, &wpGameList, &wpEngineOutput, &wpEvalGraph,
+    NULL, &wpComment, &wpTags, &wpTextMenu, NULL, &wpConsole, &wpDualBoard, &wpMoveHistory, &wpGameList, &wpEngineOutput, &wpEvalGraph,
     NULL, NULL, NULL, NULL, &wpMain
 };
 
@@ -739,7 +817,8 @@ gboolean GenericPopDown(w, resptype, gdata)
 // I guess BrowserDlg will be abandoned, as GTK has a better browser of its own
     if(shellUp[BrowserDlg] && dlg != BrowserDlg || dialogError) return True; // prevent closing dialog when it has an open file-browse daughter
 #else
-    if(browserUp || dialogError && dlg != FatalDlg) return True; // prevent closing dialog when it has an open file-browse or error-popup daughter
+    if(browserUp || dialogError && dlg != FatalDlg || dlg == MasterDlg && shellUp[TransientDlg])
+       return True; // prevent closing dialog when it has an open file-browse, transient or error-popup daughter
 #endif
     shells[dlg] = w; // make sure we pop down the right one in case of multiple instances
 
@@ -802,6 +881,7 @@ GraphEventProc(GtkWidget *widget, GdkEvent *event, gpointer gdata)
     GdkEventExpose *eevent = (GdkEventExpose *) event;
     GdkEventButton *bevent = (GdkEventButton *) event;
     GdkEventMotion *mevent = (GdkEventMotion *) event;
+    GdkEventScroll *sevent = (GdkEventScroll *) event;
     GtkAllocation a;
     cairo_t *cr;
 
@@ -858,6 +938,10 @@ GraphEventProc(GtkWidget *widget, GdkEvent *event, gpointer gdata)
            cairo_destroy(cr);
        default:
            return;
+       case GDK_SCROLL:
+           if(sevent->direction == GDK_SCROLL_UP) button = 4;
+           if(sevent->direction == GDK_SCROLL_DOWN) button = 5;
+           break;
        case GDK_MOTION_NOTIFY:
            f = 0;
            w = mevent->x; h = mevent->y;
@@ -1129,6 +1213,7 @@ GenericPopUp (Option *option, char *title, DialogClass dlgNr, DialogClass parent
 
     int i, j, arraysize, left, top, height=999, width=1, boxStart=0, breakType = 0, r;
     char def[MSG_SIZ], *msg, engineDlg = (currentCps != NULL && dlgNr != BrowserDlg);
+    gboolean expandable = FALSE;
 
     if(dlgNr < PromoDlg && shellUp[dlgNr]) return 0; // already up
 
@@ -1138,6 +1223,7 @@ GenericPopUp (Option *option, char *title, DialogClass dlgNr, DialogClass parent
        if(wp[dlgNr]) gtk_window_move(GTK_WINDOW(shells[dlgNr]), wp[dlgNr]->x, wp[dlgNr]->y);
         return 0;
     }
+    if(dlgNr == TransientDlg && parent == BoardWindow && shellUp[MasterDlg]) parent = MasterDlg; // MasterDlg can always take role of main window
 
     dialogOptions[dlgNr] = option; // make available to callback
     // post currentOption globally, so Spin and Combo callbacks can already use it
@@ -1196,22 +1282,22 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width);
     top = -1;
 
     for (i=0;option[i].type != EndMark;i++) {
-       if(option[i].type == -1) continue;
+       if(option[i].type == Skip) continue;
         top++;
 //printf("option =%2d, top =%2d\n", i, top);
-        if (top >= height) {
-            gtk_table_resize(GTK_TABLE(table), height, r);
+        if (top >= height || breakType) {
+            gtk_table_resize(GTK_TABLE(table), top - (breakType != 0), r);
            if(!pane) { // multi-column: put tables in intermediate hbox
-               if(breakType || engineDlg)
+               if(breakType & SAME_ROW || engineDlg)
                    pane =  gtk_hbox_new (FALSE, 0);
                else
                    pane =  gtk_vbox_new (FALSE, 0);
                gtk_box_set_spacing(GTK_BOX(pane), 5 + 5*breakType);
                gtk_box_pack_start (GTK_BOX (/*GTK_DIALOG (dialog)->vbox*/box), pane, TRUE, TRUE, 0);
            }
-           gtk_box_pack_start (GTK_BOX (pane), table, TRUE, TRUE, 0);
+           gtk_box_pack_start (GTK_BOX (pane), table, expandable, TRUE, 0);
            table = gtk_table_new(arraysize - i, r=TableWidth(option + i), FALSE);
-            top = 0;
+            top = breakType = 0; expandable = FALSE;
         }
         if(!SameRow(&option[i])) {
            if(SameRow(&option[i+1])) {
@@ -1247,6 +1333,8 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width);
            if(option[i].type == FileName || option[i].type == PathName) w -= 55;
 
             if (option[i].type==TextBox && option[i].value > 80){
+                GtkTextIter iter;
+                expandable = TRUE;
                 textview = gtk_text_view_new();
                 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(textview), option[i].min & T_WRAP ? GTK_WRAP_WORD : GTK_WRAP_NONE);
 #ifdef TODO_GTK
@@ -1272,12 +1360,15 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width);
                     /* no label so let textview occupy all columns */
                     Pack(hbox, table, sw, left, left+r, top, GTK_EXPAND);
                 }
+                SetWidgetFont(textview, option[i].textValue);
                 if ( *(char**)option[i].target != NULL )
                     gtk_text_buffer_set_text (textbuffer, *(char**)option[i].target, -1);
                 else
                     gtk_text_buffer_set_text (textbuffer, "", -1);
                 option[i].handle = (void*)textbuffer;
                 option[i].textValue = (char*)textview;
+                gtk_text_buffer_get_iter_at_offset(textbuffer, &iter, -1);
+                gtk_text_buffer_create_mark(textbuffer, "scrollmark", &iter, FALSE); // permanent mark
                if(option[i].choice) { // textviews can request a handler for mouse events in the choice field
                    g_signal_connect(textview, "button-press-event", G_CALLBACK (MemoEvent), (gpointer) &option[i] );
                    g_signal_connect(textview, "button-release-event", G_CALLBACK (MemoEvent), (gpointer) &option[i] );
@@ -1336,6 +1427,7 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width);
             option[i].handle = (void *) (label = gtk_label_new(option[i].name));
             /* Left Justify */
             gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+            SetWidgetFont(label, option[i].textValue);
            if(option[i].min & BORDER) {
                GtkWidget *frame = gtk_frame_new(NULL);
                 gtk_container_add(GTK_CONTAINER(frame), label);
@@ -1363,6 +1455,7 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width);
            }
 
             /* set button color on new variant dialog */
+            if(!SetWidgetFont(gtk_bin_get_child(GTK_BIN(button)), option[i].textValue))
             if(option[i].textValue) {
                 gdk_color_parse( option[i].textValue, &color );
                 gtk_widget_modify_bg ( GTK_WIDGET(button), GTK_STATE_NORMAL, &color );
@@ -1438,6 +1531,7 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width);
 
                 /* never has label, so let listbox occupy all columns */
                 Pack(hbox, table, sw, left, left+r, top, GTK_EXPAND);
+                expandable = TRUE;
             }
            break;
          case Graph:
@@ -1452,6 +1546,7 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width);
             g_signal_connect (graph, "button-press-event", G_CALLBACK (GraphEventProc), (gpointer) &option[i]);
             g_signal_connect (graph, "button-release-event", G_CALLBACK (GraphEventProc), (gpointer) &option[i]);
             g_signal_connect (graph, "motion-notify-event", G_CALLBACK (GraphEventProc), (gpointer) &option[i]);
+            g_signal_connect (graph, "scroll-event", G_CALLBACK (GraphEventProc), (gpointer) &option[i]);
            if(option[i].min & FIX_H) { // logo
                GtkWidget *frame = gtk_aspect_frame_new(NULL, 0.5, 0.5, option[i].max/(float)option[i].value, FALSE);
                gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_NONE);
@@ -1459,6 +1554,7 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width);
                graph = frame;
            }
             Pack(hbox, table, graph, left, left+r, top, GTK_EXPAND);
+            expandable = TRUE;
 
 #ifdef TODO_GTK
            if(option[i].min & SAME_ROW) last = forelast, forelast = lastrow;
@@ -1473,6 +1569,9 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width);
          case DropDown:
            top--;
            msg = _(option[i].name); // write name on the menu button
+#ifndef __APPLE__
+           if(tinyLayout) { strcpy(def, msg); def[tinyLayout] = NULLCHAR; msg = def; } // clip menu text to keep menu bar small
+#endif
 //         XtSetArg(args[j], XtNmenuName, XtNewString(option[i].name));  j++;
 //         XtSetArg(args[j], XtNlabel, msg);  j++;
            option[i].handle = (void*)
@@ -1511,7 +1610,7 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width);
                gtkosx_application_set_menu_bar(theApp, GTK_MENU_SHELL(menuBar));
                gtkosx_application_insert_app_menu_item(theApp, GTK_MENU_ITEM(helpMenu[8].handle), 0); // hack
                gtkosx_application_sync_menubar(theApp);
-           } 
+           }
 #endif
            break;
          case BoxEnd:
@@ -1521,8 +1620,8 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width);
            if(option[i].target) ((ButtonCallback*)option[i].target)(boxStart); // callback that can make sizing decisions
            break;
          case Break:
-            breakType = option[i].min & SAME_ROW;
-           top = height; // force next option to start in a new table
+            breakType = option[i].min & SAME_ROW | BORDER; // kludge to flag we must break
+           option[i].handle = table;
             break;
 
          case PopUp:
@@ -1534,10 +1633,10 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width);
        }
     }
 
+    gtk_table_resize(GTK_TABLE(table), top+1, r);
     if(pane)
-       gtk_box_pack_start (GTK_BOX (pane), table, TRUE, TRUE, 0);
+       gtk_box_pack_start (GTK_BOX (pane), table, expandable, TRUE, 0);
     else
-        gtk_table_resize(GTK_TABLE(table), top+1, r),
        gtk_box_pack_start (GTK_BOX (/*GTK_DIALOG (dialog)->vbox*/box), table, TRUE, TRUE, 0);
 
     option[i].handle = (void *) table; // remember last table in EndMark handle (for hiding Engine-Output pane).
@@ -1597,8 +1696,8 @@ SendTextCB (Widget w, XtPointer client_data, Atom *selection,
 void
 SendText (int n)
 {
-#ifdef TODO_GTK
     char *p = (char*) textOptions[n].choice;
+#ifdef TODO_GTK
     if(strstr(p, "$name")) {
        XtGetSelectionValue(menuBarWidget,
          XA_PRIMARY, XA_STRING,
@@ -1606,8 +1705,9 @@ SendText (int n)
          (XtPointer) (intptr_t) n, /* client_data passed to PastePositionCB */
          CurrentTime
        );
-    } else SendString(p);
+    } else
 #endif
+    SendString(p);
 }
 
 void
@@ -1618,7 +1718,7 @@ SetInsertPos (Option *opt, int pos)
 }
 
 void
-HardSetFocus (Option *opt)
+HardSetFocus (Option *opt, DialogClass dlg)
 {
-    FocusOnWidget(opt, 0); // second arg not used in GDK
+    FocusOnWidget(opt, dlg);
 }
diff --git a/menus.c b/menus.c
index c396c2c..b79c90a 100644 (file)
--- a/menus.c
+++ b/menus.c
@@ -215,7 +215,7 @@ CopyPositionProc ()
     static char *selected_fen_position=NULL;
     if(gameMode == EditPosition) EditPositionDone(TRUE);
     if (selected_fen_position) free(selected_fen_position);
-    selected_fen_position = (char *)PositionToFEN(currentMove, NULL);
+    selected_fen_position = (char *)PositionToFEN(currentMove, NULL, 1);
     if (!selected_fen_position) return;
     CopySomething(selected_fen_position);
 }
@@ -313,8 +313,12 @@ void
 InfoProc ()
 {
     char buf[MSG_SIZ];
+#ifdef __APPLE__
+    snprintf(buf, MSG_SIZ, "%s ./info.command", appData.sysOpen);
+#else
     snprintf(buf, sizeof(buf), "xterm -e info --directory %s --directory . -f %s &",
            INFODIR, INFOFILE);
+#endif
     system(buf);
 }
 
@@ -389,6 +393,12 @@ DebugProc ()
 }
 
 void
+EditEngineProc ()
+{
+    EditTagsPopUp(firstChessProgramNames, &firstChessProgramNames);
+}
+
+void
 NothingProc ()
 {
     return;
@@ -574,14 +584,23 @@ CreateBookDelayed ()
   ScheduleDelayedEvent(CreateBookEvent, 50);
 }
 
+void
+SaveSelectedProc ()
+{
+  FileNamePopUp(_("Save game file name?"),
+                 "",
+                 ".pgn",
+                 SaveSelected, "a");
+}
+
 /*
  *  Menu definition tables
  */
 
 MenuItem fileMenu[] = {
   {N_("New Game"),             "<Ctrl>n",          "NewGame",              ResetGameEvent},
-  {N_("New Shuffle Game ..."),  NULL,              "NewShuffleGame",       ShuffleMenuProc},
-  {N_("New Variant ..."),      "<Alt><Shift>v",    "NewVariant",           NewVariantProc},// [HGM] variant: not functional yet
+  {N_("New Shuffle Game..."),   NULL,              "NewShuffleGame",       ShuffleMenuProc},
+  {N_("New Variant..."),       "<Alt><Shift>v",    "NewVariant",           NewVariantProc},// [HGM] variant: not functional yet
   {"----",                      NULL,               NULL,                  NothingProc},
   {N_("Load Game"),            "<Ctrl>o",          "LoadGame",             LoadGameProc,           CHECK},
   {N_("Load Position"),        "<Ctrl><Shift>o",   "LoadPosition",         LoadPositionProc},
@@ -590,6 +609,7 @@ MenuItem fileMenu[] = {
   {"----",                      NULL,               NULL,                  NothingProc},
   {N_("Save Game"),            "<Ctrl>s",          "SaveGame",             SaveGameProc},
   {N_("Save Position"),        "<Ctrl><Shift>s",   "SavePosition",         SavePositionProc},
+  {N_("Save Selected Games"),   NULL,              "SaveSelected",         SaveSelectedProc},
   {N_("Save Games as Book"),    NULL,              "CreateBook",           CreateBookDelayed},
   {"----",                      NULL,               NULL,                  NothingProc},
   {N_("Mail Move"),             NULL,              "MailMove",             MailMoveEvent},
@@ -636,7 +656,7 @@ MenuItem viewMenu[] = {
   {N_("Tags"),               NULL,           "Tags",            EditTagsProc,           CHECK},
   {N_("Comments"),           NULL,           "Comments",        EditCommentProc,        CHECK},
   {N_("ICS Input Box"),      NULL,           "ICSInputBox",     IcsInputBoxProc,        CHECK},
-  {N_("Open Chat Window"),   NULL,           "OpenChatWindow",  ChatProc,               CHECK},
+  {N_("ICS/Chat Console"),   NULL,           "OpenChatWindow",  ChatProc,               CHECK},
   {"----",                   NULL,            NULL,             NothingProc},
   {N_("Board..."),           NULL,           "Board",           BoardOptionsProc},
   {N_("Game List Tags..."),  NULL,           "GameListTags",    GameListOptionsProc},
@@ -681,11 +701,13 @@ MenuItem actionMenu[] = {
 };
 
 MenuItem engineMenu[100] = {
-  {N_("Load New 1st Engine ..."),  NULL,     "LoadNew1stEngine", LoadEngine1Proc},
-  {N_("Load New 2nd Engine ..."),  NULL,     "LoadNew2ndEngine", LoadEngine2Proc},
+  {N_("Edit Engine List..."),      NULL,     "EditEngList",      EditEngineProc},
+  {"----",                         NULL,      NULL,              NothingProc},
+  {N_("Load New 1st Engine..."),   NULL,     "LoadNew1stEngine", LoadEngine1Proc},
+  {N_("Load New 2nd Engine..."),   NULL,     "LoadNew2ndEngine", LoadEngine2Proc},
   {"----",                         NULL,      NULL,              NothingProc},
-  {N_("Engine #1 Settings ..."),   NULL,     "Engine#1Settings", FirstSettingsProc},
-  {N_("Engine #2 Settings ..."),   NULL,     "Engine#2Settings", SecondSettingsProc},
+  {N_("Engine #1 Settings..."),    NULL,     "Engine#1Settings", FirstSettingsProc},
+  {N_("Engine #2 Settings..."),    NULL,     "Engine#2Settings", SecondSettingsProc},
   {"----",                         NULL,      NULL,              NothingProc},
   {N_("Hint"),                     NULL,     "Hint",             HintEvent},
   {N_("Book"),                     NULL,     "Book",             BookEvent},
@@ -697,17 +719,17 @@ MenuItem engineMenu[100] = {
 
 MenuItem optionsMenu[] = {
 #ifdef OPTIONSDIALOG
-  {N_("General ..."),             NULL,             "General",             OptionsProc},
+  {N_("General..."),              NULL,             "General",             OptionsProc},
 #endif
-  {N_("Time Control ..."),       "<Alt><Shift>t",   "TimeControl",         TimeControlProc},
-  {N_("Common Engine ..."),      "<Alt><Shift>u",   "CommonEngine",        UciMenuProc},
-  {N_("Adjudications ..."),      "<Alt><Shift>j",   "Adjudications",       EngineMenuProc},
-  {N_("ICS ..."),                 NULL,             "ICS",                 IcsOptionsProc},
-  {N_("Match ..."),               NULL,             "Match",               MatchOptionsProc},
-  {N_("Load Game ..."),           NULL,             "LoadGame",            LoadOptionsProc},
-  {N_("Save Game ..."),           NULL,             "SaveGame",            SaveOptionsProc},
-  {N_("Game List ..."),           NULL,             "GameList",            GameListOptionsProc},
-  {N_("Sounds ..."),              NULL,             "Sounds",              SoundOptionsProc},
+  {N_("Time Control..."),        "<Alt><Shift>t",   "TimeControl",         TimeControlProc},
+  {N_("Common Engine..."),       "<Alt><Shift>u",   "CommonEngine",        UciMenuProc},
+  {N_("Adjudications..."),       "<Alt><Shift>j",   "Adjudications",       EngineMenuProc},
+  {N_("ICS..."),                  NULL,             "ICS",                 IcsOptionsProc},
+  {N_("Tournament..."),           NULL,             "Match",               MatchOptionsProc},
+  {N_("Load Game..."),            NULL,             "LoadGame",            LoadOptionsProc},
+  {N_("Save Game..."),            NULL,             "SaveGame",            SaveOptionsProc},
+  {N_("Game List..."),            NULL,             "GameList",            GameListOptionsProc},
+  {N_("Sounds..."),               NULL,             "Sounds",              SoundOptionsProc},
   {"----",                        NULL,              NULL,                 NothingProc},
 #ifndef OPTIONSDIALOG
   {N_("Always Queen"),           "<Ctrl><Shift>q",  "AlwaysQueen",         AlwaysQueenProc},
@@ -792,7 +814,8 @@ Menu menuBar[] = {
     {N_("Engine"),  "Engine", engineMenu},
     {N_("Options"), "Options", optionsMenu},
     {N_("Help"),    "Help", helpMenu},
-    {NULL, NULL, NULL}
+    {NULL, NULL, NULL},
+    {   "",         "None", noMenu}
 };
 
 MenuItem *
@@ -1210,4 +1233,5 @@ InitMenuMarkers()
     if (saveSettingsOnExit) {
        MarkMenuItem("Options.SaveSettingsonExit", True);
     }
+    EnableNamedMenuItem("File.SaveSelected", False);
 }
diff --git a/menus.h b/menus.h
index be62d47..072728d 100644 (file)
--- a/menus.h
+++ b/menus.h
@@ -164,6 +164,9 @@ void InitMenuMarkers P((void));
 void ShowGameListProc P((void)); // in ngamelist.c
 void HistoryShowProc P((void));  // in nhistory.c
 
+// only here because it is the only header shared by xoptions.c and usystem.c
+void SetTextColor P((char **cnames, int fg, int bg, int attr));
+void ConsoleWrite P((char *message, int count));
 
 // must be moved to xengineoutput.h
 
diff --git a/moves.c b/moves.c
index 4852ee2..3b497d9 100644 (file)
--- a/moves.c
+++ b/moves.c
@@ -98,7 +98,7 @@ SameColor (ChessSquare piece1, ChessSquare piece2)
             (int) piece2 <  (int) EmptySquare);
 }
 #else
-#define SameColor(piece1, piece2) (piece1 < EmptySquare && piece2 < EmptySquare && (piece1 < BlackPawn) == (piece2 < BlackPawn))
+#define SameColor(piece1, piece2) (piece1 < EmptySquare && piece2 < EmptySquare && (piece1 < BlackPawn) == (piece2 < BlackPawn) || piece1 == DarkSquare || piece2 == DarkSquare)
 #endif
 
 char pieceToChar[] = {
@@ -165,6 +165,207 @@ CompareBoards (Board board1, Board board2)
     return TRUE;
 }
 
+// [HGM] move generation now based on hierarchy of subroutines for rays and combinations of rays
+
+void
+SlideForward (Board board, int flags, int rf, int ff, MoveCallback callback, VOIDSTAR closure)
+{
+  int i, rt, ft = ff;
+  for (i = 1;; i++) {
+      rt = rf + i;
+      if (rt >= BOARD_HEIGHT) break;
+      if (SameColor(board[rf][ff], board[rt][ft])) break;
+      callback(board, flags, NormalMove, rf, ff, rt, ft, closure);
+      if (board[rt][ft] != EmptySquare) break;
+  }
+}
+
+void
+SlideBackward (Board board, int flags, int rf, int ff, MoveCallback callback, VOIDSTAR closure)
+{
+  int i, rt, ft = ff;
+  for (i = 1;; i++) {
+      rt = rf - i;
+      if (rt < 0) break;
+      if (SameColor(board[rf][ff], board[rt][ft])) break;
+      callback(board, flags, NormalMove, rf, ff, rt, ft, closure);
+      if (board[rt][ft] != EmptySquare) break;
+  }
+}
+
+void
+SlideVertical (Board board, int flags, int rf, int ff, MoveCallback callback, VOIDSTAR closure)
+{
+  SlideForward(board, flags, rf, ff, callback, closure);
+  SlideBackward(board, flags, rf, ff, callback, closure);
+}
+
+void
+SlideSideways (Board board, int flags, int rf, int ff, MoveCallback callback, VOIDSTAR closure)
+{
+  int i, s, rt = rf, ft;
+  for(s = -1; s <= 1; s+= 2) {
+    for (i = 1;; i++) {
+      ft = ff + i*s;
+      if (ft < BOARD_LEFT || ft >= BOARD_RGHT) break;
+      if (SameColor(board[rf][ff], board[rt][ft])) break;
+      callback(board, flags, NormalMove, rf, ff, rt, ft, closure);
+      if (board[rt][ft] != EmptySquare) break;
+    }
+  }
+}
+
+void
+SlideDiagForward (Board board, int flags, int rf, int ff, MoveCallback callback, VOIDSTAR closure)
+{
+  int i, s, rt, ft;
+  for(s = -1; s <= 1; s+= 2) {
+    for (i = 1;; i++) {
+      rt = rf + i;
+      ft = ff + i * s;
+      if (rt >= BOARD_HEIGHT || ft < BOARD_LEFT || ft >= BOARD_RGHT) break;
+      if (SameColor(board[rf][ff], board[rt][ft])) break;
+      callback(board, flags, NormalMove, rf, ff, rt, ft, closure);
+      if (board[rt][ft] != EmptySquare) break;
+    }
+  }
+}
+
+void
+SlideDiagBackward (Board board, int flags, int rf, int ff, MoveCallback callback, VOIDSTAR closure)
+{
+  int i, s, rt, ft;
+  for(s = -1; s <= 1; s+= 2) {
+    for (i = 1;; i++) {
+      rt = rf - i;
+      ft = ff + i * s;
+      if (rt < 0 || ft < BOARD_LEFT || ft >= BOARD_RGHT) break;
+      if (SameColor(board[rf][ff], board[rt][ft])) break;
+      callback(board, flags, NormalMove, rf, ff, rt, ft, closure);
+      if (board[rt][ft] != EmptySquare) break;
+    }
+  }
+}
+
+void
+Rook (Board board, int flags, int rf, int ff, MoveCallback callback, VOIDSTAR closure)
+{
+  SlideVertical(board, flags, rf, ff, callback, closure);
+  SlideSideways(board, flags, rf, ff, callback, closure);
+}
+
+void
+Bishop (Board board, int flags, int rf, int ff, MoveCallback callback, VOIDSTAR closure)
+{
+  SlideDiagForward(board, flags, rf, ff, callback, closure);
+  SlideDiagBackward(board, flags, rf, ff, callback, closure);
+}
+
+void
+Sting (Board board, int flags, int rf, int ff, int dy, int dx, MoveCallback callback, VOIDSTAR closure)
+{ // Lion-like move of Horned Falcon and Souring Eagle
+  int ft = ff + dx, rt = rf + dy;
+  if (rt < 0 || rt >= BOARD_HEIGHT || ft < BOARD_LEFT || ft >= BOARD_RGHT) return;
+  if (!SameColor(board[rf][ff], board[rt][ft]))
+    callback(board, flags, board[rt][ft] != EmptySquare ? FirstLeg : NormalMove, rf, ff, rt, ft, closure);
+  ft += dx; rt += dy;
+  if (rt < 0 || rt >= BOARD_HEIGHT || ft < BOARD_LEFT || ft >= BOARD_RGHT) return;
+  if (!SameColor(board[rf][ff], board[rt][ft]))
+    callback(board, flags, NormalMove, rf, ff, rt, ft, closure);
+}
+
+void
+StepForward (Board board, int flags, int rf, int ff, MoveCallback callback, VOIDSTAR closure)
+{
+  int ft = ff, rt = rf + 1;
+  if (rt >= BOARD_HEIGHT) return;
+  if (SameColor(board[rf][ff], board[rt][ft])) return;
+  callback(board, flags, NormalMove, rf, ff, rt, ft, closure);
+}
+
+void
+StepBackward (Board board, int flags, int rf, int ff, MoveCallback callback, VOIDSTAR closure)
+{
+  int ft = ff, rt = rf - 1;
+  if (rt < 0) return;
+  if (SameColor(board[rf][ff], board[rt][ft])) return;
+  callback(board, flags, NormalMove, rf, ff, rt, ft, closure);
+}
+
+void
+StepSideways (Board board, int flags, int rf, int ff, MoveCallback callback, VOIDSTAR closure)
+{
+  int ft, rt = rf;
+  ft = ff + 1;
+  if (!(rt >= BOARD_HEIGHT || ft >= BOARD_RGHT) && !SameColor(board[rf][ff], board[rt][ft]))
+      callback(board, flags, NormalMove, rf, ff, rt, ft, closure);
+  ft = ff - 1;
+  if (!(rt >= BOARD_HEIGHT || ft < BOARD_LEFT) && !SameColor(board[rf][ff], board[rt][ft]))
+      callback(board, flags, NormalMove, rf, ff, rt, ft, closure);
+}
+
+void
+StepDiagForward (Board board, int flags, int rf, int ff, MoveCallback callback, VOIDSTAR closure)
+{
+  int ft, rt = rf + 1;
+  if (rt >= BOARD_HEIGHT) return;
+  ft = ff + 1;
+  if (!(rt >= BOARD_HEIGHT || ft >= BOARD_RGHT) && !SameColor(board[rf][ff], board[rt][ft]))
+      callback(board, flags, NormalMove, rf, ff, rt, ft, closure);
+  ft = ff - 1;
+  if (!(rt >= BOARD_HEIGHT || ft < BOARD_LEFT) && !SameColor(board[rf][ff], board[rt][ft]))
+      callback(board, flags, NormalMove, rf, ff, rt, ft, closure);
+}
+
+void
+StepDiagBackward (Board board, int flags, int rf, int ff, MoveCallback callback, VOIDSTAR closure)
+{
+  int ft, rt = rf - 1;
+  if(rt < 0) return;
+  ft = ff + 1;
+  if (!(rt < 0 || ft >= BOARD_RGHT) && !SameColor(board[rf][ff], board[rt][ft]))
+      callback(board, flags, NormalMove, rf, ff, rt, ft, closure);
+  ft = ff - 1;
+  if (!(rt < 0 || ft < BOARD_LEFT) && !SameColor(board[rf][ff], board[rt][ft]))
+      callback(board, flags, NormalMove, rf, ff, rt, ft, closure);
+}
+
+void
+StepVertical (Board board, int flags, int rf, int ff, MoveCallback callback, VOIDSTAR closure)
+{
+  StepForward(board, flags, rf, ff, callback, closure);
+  StepBackward(board, flags, rf, ff, callback, closure);
+}
+
+void
+Ferz (Board board, int flags, int rf, int ff, MoveCallback callback, VOIDSTAR closure)
+{
+  StepDiagForward(board, flags, rf, ff, callback, closure);
+  StepDiagBackward(board, flags, rf, ff, callback, closure);
+}
+
+void
+Wazir (Board board, int flags, int rf, int ff, MoveCallback callback, VOIDSTAR closure)
+{
+  StepVertical(board, flags, rf, ff, callback, closure);
+  StepSideways(board, flags, rf, ff, callback, closure);
+}
+
+void
+Knight (Board board, int flags, int rf, int ff, MoveCallback callback, VOIDSTAR closure)
+{
+    int i, j, s, rt, ft;
+    for (i = -1; i <= 1; i += 2)
+       for (j = -1; j <= 1; j += 2)
+           for (s = 1; s <= 2; s++) {
+               rt = rf + i*s;
+               ft = ff + j*(3-s);
+               if (!(rt < 0 || rt >= BOARD_HEIGHT || ft < BOARD_LEFT || ft >= BOARD_RGHT)
+                   && ( gameInfo.variant != VariantXiangqi || board[rf+i*(s-1)][ff+j*(2-s)] == EmptySquare)
+                   && !SameColor(board[rf][ff], board[rt][ft]))
+                   callback(board, flags, NormalMove, rf, ff, rt, ft, closure);
+           }
+}
 
 /* Call callback once for each pseudo-legal move in the given
    position, except castling moves. A move is pseudo-legal if it is
@@ -181,21 +382,19 @@ GenPseudoLegal (Board board, int flags, MoveCallback callback, VOIDSTAR closure,
     int rf, ff;
     int i, j, d, s, fs, rs, rt, ft, m;
     int epfile = (signed char)board[EP_STATUS]; // [HGM] gamestate: extract ep status from board
-    int promoRank = gameInfo.variant == VariantMakruk || gameInfo.variant == VariantGrand ? 3 : 1;
+    int promoRank = gameInfo.variant == VariantMakruk || gameInfo.variant == VariantGrand || gameInfo.variant == VariantChuChess ? 3 : 1;
 
     for (rf = 0; rf < BOARD_HEIGHT; rf++)
       for (ff = BOARD_LEFT; ff < BOARD_RGHT; ff++) {
           ChessSquare piece;
-          int rookRange;
 
          if(board[rf][ff] == EmptySquare) continue;
          if ((flags & F_WHITE_ON_MOVE) != (board[rf][ff] < BlackPawn)) continue; // [HGM] speed: wrong color
-         rookRange = 1000;
           m = 0; piece = board[rf][ff];
           if(PieceToChar(piece) == '~')
                  piece = (ChessSquare) ( DEMOTED piece );
           if(filter != EmptySquare && piece != filter) continue;
-          if(gameInfo.variant == VariantShogi)
+          if(IS_SHOGI(gameInfo.variant))
                  piece = (ChessSquare) ( SHOGI piece );
 
           switch ((int)piece) {
@@ -309,7 +508,6 @@ GenPseudoLegal (Board board, int flags, MoveCallback callback, VOIDSTAR closure,
             case BlackUnicorn:
            case WhiteKnight:
            case BlackKnight:
-            mounted:
              for (i = -1; i <= 1; i += 2)
                for (j = -1; j <= 1; j += 2)
                  for (s = 1; s <= 2; s++) {
@@ -366,47 +564,77 @@ GenPseudoLegal (Board board, int flags, MoveCallback callback, VOIDSTAR closure,
 
             /* Gold General (and all its promoted versions) . First do the */
             /* diagonal forward steps, then proceed as normal Wazir        */
-            case SHOGI WhiteWazir:
             case SHOGI (PROMOTED WhitePawn):
+               if(gameInfo.variant == VariantShogi) goto WhiteGold;
+            case SHOGI (PROMOTED BlackPawn):
+               if(gameInfo.variant == VariantShogi) goto BlackGold;
+               SlideVertical(board, flags, rf, ff, callback, closure);
+               break;
+
             case SHOGI (PROMOTED WhiteKnight):
-            case SHOGI (PROMOTED WhiteQueen):
-            case SHOGI (PROMOTED WhiteFerz):
-             for (s = -1; s <= 1; s += 2) {
-                  if (rf < BOARD_HEIGHT-1 && ff + s >= BOARD_LEFT && ff + s < BOARD_RGHT &&
-                      !SameColor(board[rf][ff], board[rf + 1][ff + s])) {
-                      callback(board, flags, NormalMove,
-                              rf, ff, rf + 1, ff + s, closure);
-                 }
-              }
-              goto finishGold;
+               if(gameInfo.variant == VariantShogi) goto WhiteGold;
+            case SHOGI BlackDrunk:
+            case SHOGI BlackAlfil:
+               Ferz(board, flags, rf, ff, callback, closure);
+               StepSideways(board, flags, rf, ff, callback, closure);
+               StepBackward(board, flags, rf, ff, callback, closure);
+               break;
 
-            case SHOGI BlackWazir:
-            case SHOGI (PROMOTED BlackPawn):
             case SHOGI (PROMOTED BlackKnight):
+               if(gameInfo.variant == VariantShogi) goto BlackGold;
+            case SHOGI WhiteDrunk:
+            case SHOGI WhiteAlfil:
+               Ferz(board, flags, rf, ff, callback, closure);
+               StepSideways(board, flags, rf, ff, callback, closure);
+               StepForward(board, flags, rf, ff, callback, closure);
+               break;
+
+
+            case SHOGI WhiteStag:
+            case SHOGI BlackStag:
+               if(gameInfo.variant == VariantShogi) goto BlackGold;
+               SlideVertical(board, flags, rf, ff, callback, closure);
+               Ferz(board, flags, rf, ff, callback, closure);
+               StepSideways(board, flags, rf, ff, callback, closure);
+               break;
+
+            case SHOGI (PROMOTED WhiteQueen):
+            case SHOGI WhiteTokin:
+            case SHOGI WhiteWazir:
+           WhiteGold:
+               StepDiagForward(board, flags, rf, ff, callback, closure);
+               Wazir(board, flags, rf, ff, callback, closure);
+               break;
+
             case SHOGI (PROMOTED BlackQueen):
-            case SHOGI (PROMOTED BlackFerz):
-             for (s = -1; s <= 1; s += 2) {
-                  if (rf > 0 && ff + s >= BOARD_LEFT && ff + s < BOARD_RGHT &&
-                      !SameColor(board[rf][ff], board[rf - 1][ff + s])) {
-                      callback(board, flags, NormalMove,
-                              rf, ff, rf - 1, ff + s, closure);
-                 }
-             }
+            case SHOGI BlackTokin:
+            case SHOGI BlackWazir:
+            BlackGold:
+               StepDiagBackward(board, flags, rf, ff, callback, closure);
+               Wazir(board, flags, rf, ff, callback, closure);
+               break;
 
             case WhiteWazir:
             case BlackWazir:
-            finishGold:
-              for (d = 0; d <= 1; d++)
-                for (s = -1; s <= 1; s += 2) {
-                      rt = rf + s * d;
-                      ft = ff + s * (1 - d);
-                      if (!(rt < 0 || rt >= BOARD_HEIGHT || ft < BOARD_LEFT || ft >= BOARD_RGHT)
-                          && !SameColor(board[rf][ff], board[rt][ft]) &&
-                          (gameInfo.variant != VariantXiangqi || InPalace(rt, ft) ) )
-                               callback(board, flags, NormalMove,
-                                        rf, ff, rt, ft, closure);
-                      }
-             break;
+               Wazir(board, flags, rf, ff, callback, closure);
+               break;
+
+            case SHOGI WhiteMarshall:
+            case SHOGI BlackMarshall:
+               Ferz(board, flags, rf, ff, callback, closure);
+               for (d = 0; d <= 1; d++)
+                   for (s = -2; s <= 2; s += 4) {
+                       rt = rf + s * d;
+                       ft = ff + s * (1 - d);
+                       if (rt < 0 || rt >= BOARD_HEIGHT || ft < BOARD_LEFT || ft >= BOARD_RGHT) continue;
+                       if (!SameColor(board[rf][ff], board[rt][ft]) )
+                           callback(board, flags, NormalMove, rf, ff, rt, ft, closure);
+                   }
+               break;
+
+            case SHOGI WhiteAngel:
+            case SHOGI BlackAngel:
+               Wazir(board, flags, rf, ff, callback, closure);
 
             case WhiteAlfil:
             case BlackAlfil:
@@ -422,8 +650,8 @@ GenPseudoLegal (Board board, int flags, MoveCallback callback, VOIDSTAR closure,
                           && !SameColor(board[rf][ff], board[rt][ft]))
                                callback(board, flags, NormalMove,
                                         rf, ff, rt, ft, closure);
-                      if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier
-                                                             || gameInfo.variant == VariantXiangqi) continue; // classical Alfil
+                      if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier ||
+                         gameInfo.variant == VariantChu      || gameInfo.variant == VariantXiangqi) continue; // classical Alfil
                       rt = rf + rs; // in unknown variant we assume Modern Elephant, which can also do one step
                       ft = ff + fs;
                       if (!(rt < 0 || rt >= BOARD_HEIGHT || ft < BOARD_LEFT || ft >= BOARD_RGHT)
@@ -442,6 +670,7 @@ GenPseudoLegal (Board board, int flags, MoveCallback callback, VOIDSTAR closure,
             /* Make Dragon-Horse also do Dababba moves outside Shogi, for better disambiguation in variant Fairy */
            case WhiteCardinal:
            case BlackCardinal:
+              if(gameInfo.variant == VariantChuChess) goto DragonHorse;
               for (d = 0; d <= 1; d++) // Dababba moves that Rook cannot do
                 for (s = -2; s <= 2; s += 4) {
                      rt = rf + s * d;
@@ -454,36 +683,31 @@ GenPseudoLegal (Board board, int flags, MoveCallback callback, VOIDSTAR closure,
             /* Shogi Dragon Horse has to continue with Wazir after Bishop */
             case SHOGI WhiteCardinal:
             case SHOGI BlackCardinal:
-              m++;
+            case SHOGI WhitePCardinal:
+            case SHOGI BlackPCardinal:
+            DragonHorse:
+               Bishop(board, flags, rf, ff, callback, closure);
+               Wazir(board, flags, rf, ff, callback, closure);
+               break;
 
             /* Capablanca Archbishop continues as Knight                  */
             case WhiteAngel:
             case BlackAngel:
-              m++;
+               Knight(board, flags, rf, ff, callback, closure);
 
             /* Shogi Bishops are ordinary Bishops */
             case SHOGI WhiteBishop:
             case SHOGI BlackBishop:
+            case SHOGI WhitePBishop:
+            case SHOGI BlackPBishop:
            case WhiteBishop:
            case BlackBishop:
-             for (rs = -1; rs <= 1; rs += 2)
-                for (fs = -1; fs <= 1; fs += 2)
-                 for (i = 1;; i++) {
-                     rt = rf + (i * rs);
-                     ft = ff + (i * fs);
-                      if (rt < 0 || rt >= BOARD_HEIGHT || ft < BOARD_LEFT || ft >= BOARD_RGHT) break;
-                     if (SameColor(board[rf][ff], board[rt][ft])) break;
-                     callback(board, flags, NormalMove,
-                              rf, ff, rt, ft, closure);
-                     if (board[rt][ft] != EmptySquare) break;
-                 }
-                if(m==1) goto mounted;
-                if(m==2) goto finishGold;
-                /* Bishop falls through */
-             break;
+               Bishop(board, flags, rf, ff, callback, closure);
+               break;
 
             /* Shogi Lance is unlike anything, and asymmetric at that */
             case SHOGI WhiteQueen:
+              if(gameInfo.variant == VariantChu) goto doQueen;
               for(i = 1;; i++) {
                       rt = rf + i;
                       ft = ff;
@@ -496,6 +720,7 @@ GenPseudoLegal (Board board, int flags, MoveCallback callback, VOIDSTAR closure,
               break;
 
             case SHOGI BlackQueen:
+              if(gameInfo.variant == VariantChu) goto doQueen;
               for(i = 1;; i++) {
                       rt = rf - i;
                       ft = ff;
@@ -510,126 +735,102 @@ GenPseudoLegal (Board board, int flags, MoveCallback callback, VOIDSTAR closure,
             /* Make Dragon-King Dababba & Rook-like outside Shogi, for better disambiguation in variant Fairy */
            case WhiteDragon:
            case BlackDragon:
+              if(gameInfo.variant == VariantChuChess) goto DragonKing;
               for (d = 0; d <= 1; d++) // Dababba moves that Rook cannot do
                 for (s = -2; s <= 2; s += 4) {
                      rt = rf + s * d;
                      ft = ff + s * (1 - d);
-                      if (rt < 0 || rt >= BOARD_HEIGHT || ft < BOARD_LEFT || ft >= BOARD_RGHT || board[rf+rt>>1][ff+ft>>1] == EmptySquare) continue;
+                      if (rt < 0 || rt >= BOARD_HEIGHT || ft < BOARD_LEFT || ft >= BOARD_RGHT) continue;
+                      if (board[rf+rt>>1][ff+ft>>1] == EmptySquare && gameInfo.variant != VariantSpartan) continue;
                      if (SameColor(board[rf][ff], board[rt][ft])) continue;
                      callback(board, flags, NormalMove, rf, ff, rt, ft, closure);
                  }
-              if(gameInfo.variant == VariantSpartan) rookRange = 2; // in Spartan Chess restrict range to modern Dababba
-              goto doRook;
+              if(gameInfo.variant == VariantSpartan) // in Spartan Chess restrict range to modern Dababba
+               Wazir(board, flags, rf, ff, callback, closure);
+             else
+               Rook(board, flags, rf, ff, callback, closure);
+              break;
 
             /* Shogi Dragon King has to continue as Ferz after Rook moves */
             case SHOGI WhiteDragon:
             case SHOGI BlackDragon:
+            case SHOGI WhitePDragon:
+            case SHOGI BlackPDragon:
+            DragonKing:
+               Rook(board, flags, rf, ff, callback, closure);
+               Ferz(board, flags, rf, ff, callback, closure);
+               break;
               m++;
 
             /* Capablanca Chancellor sets flag to continue as Knight      */
             case WhiteMarshall:
             case BlackMarshall:
-              m++;
-              m += (gameInfo.variant == VariantSpartan); // in Spartan Chess Chancellor is used for Dragon King.
+               Rook(board, flags, rf, ff, callback, closure);
+               if(gameInfo.variant == VariantSpartan) // in Spartan Chess Chancellor is used for Dragon King.
+                   Ferz(board, flags, rf, ff, callback, closure);
+               else
+                   Knight(board, flags, rf, ff, callback, closure);
+               break;
 
             /* Shogi Rooks are ordinary Rooks */
             case SHOGI WhiteRook:
             case SHOGI BlackRook:
+            case SHOGI WhitePRook:
+            case SHOGI BlackPRook:
            case WhiteRook:
            case BlackRook:
-          doRook:
-              for (d = 0; d <= 1; d++)
-                for (s = -1; s <= 1; s += 2)
-                 for (i = 1;; i++) {
-                     rt = rf + (i * s) * d;
-                     ft = ff + (i * s) * (1 - d);
-                      if (rt < 0 || rt >= BOARD_HEIGHT || ft < BOARD_LEFT || ft >= BOARD_RGHT) break;
-                     if (SameColor(board[rf][ff], board[rt][ft])) break;
-                     callback(board, flags, NormalMove,
-                              rf, ff, rt, ft, closure);
-                     if (board[rt][ft] != EmptySquare || i == rookRange) break;
-                 }
-                if(m==1) goto mounted;
-                if(m==2) goto finishSilver;
-             break;
+               Rook(board, flags, rf, ff, callback, closure);
+               break;
 
            case WhiteQueen:
            case BlackQueen:
-             for (rs = -1; rs <= 1; rs++)
-               for (fs = -1; fs <= 1; fs++) {
-                   if (rs == 0 && fs == 0) continue;
-                   for (i = 1;; i++) {
-                       rt = rf + (i * rs);
-                       ft = ff + (i * fs);
-                        if (rt < 0 || rt >= BOARD_HEIGHT || ft < BOARD_LEFT || ft >= BOARD_RGHT) break;
-                       if (SameColor(board[rf][ff], board[rt][ft])) break;
-                       callback(board, flags, NormalMove,
-                                rf, ff, rt, ft, closure);
-                       if (board[rt][ft] != EmptySquare) break;
-                   }
-               }
-             break;
+            case SHOGI WhiteMother:
+            case SHOGI BlackMother:
+           doQueen:
+               Rook(board, flags, rf, ff, callback, closure);
+               Bishop(board, flags, rf, ff, callback, closure);
+               break;
+
+           case SHOGI WhitePawn:
+               StepForward(board, flags, rf, ff, callback, closure);
+               break;
+
+            case SHOGI BlackPawn:
+               StepBackward(board, flags, rf, ff, callback, closure);
+               break;
 
-            /* Shogi Pawn and Silver General: first the Pawn move,    */
-            /* then the General continues like a Ferz                 */
             case WhiteMan:
-                if(gameInfo.variant != VariantMakruk) goto commoner;
-            case SHOGI WhitePawn:
+                if(gameInfo.variant != VariantMakruk && gameInfo.variant != VariantASEAN) goto commoner;
             case SHOGI WhiteFerz:
-                  if (rf < BOARD_HEIGHT-1 &&
-                           !SameColor(board[rf][ff], board[rf + 1][ff]) )
-                           callback(board, flags, NormalMove,
-                                    rf, ff, rf + 1, ff, closure);
-              if(piece != SHOGI WhitePawn) goto finishSilver;
-              break;
+               Ferz(board, flags, rf, ff, callback, closure);
+               StepForward(board, flags, rf, ff, callback, closure);
+               break;
 
             case BlackMan:
-                if(gameInfo.variant != VariantMakruk) goto commoner;
-            case SHOGI BlackPawn:
+                if(gameInfo.variant != VariantMakruk && gameInfo.variant != VariantASEAN) goto commoner;
             case SHOGI BlackFerz:
-                  if (rf > 0 &&
-                           !SameColor(board[rf][ff], board[rf - 1][ff]) )
-                           callback(board, flags, NormalMove,
-                                    rf, ff, rf - 1, ff, closure);
-              if(piece == SHOGI BlackPawn) break;
+               StepBackward(board, flags, rf, ff, callback, closure);
 
             case WhiteFerz:
             case BlackFerz:
-            finishSilver:
                 /* [HGM] support Shatranj pieces */
-                for (rs = -1; rs <= 1; rs += 2)
-                  for (fs = -1; fs <= 1; fs += 2) {
-                      rt = rf + rs;
-                      ft = ff + fs;
-                      if (rt < 0 || rt >= BOARD_HEIGHT || ft < BOARD_LEFT || ft >= BOARD_RGHT) continue;
-                      if (!SameColor(board[rf][ff], board[rt][ft]) &&
-                          (gameInfo.variant != VariantXiangqi || InPalace(rt, ft) ) )
-                               callback(board, flags, NormalMove,
-                                        rf, ff, rt, ft, closure);
-                 }
-                break;
+               Ferz(board, flags, rf, ff, callback, closure);
+               break;
 
            case WhiteSilver:
            case BlackSilver:
-               m++; // [HGM] superchess: use for Centaur
+               Knight(board, flags, rf, ff, callback, closure); // [HGM] superchess: use for Centaur
+
             commoner:
+            case SHOGI WhiteMonarch:
+            case SHOGI BlackMonarch:
             case SHOGI WhiteKing:
             case SHOGI BlackKing:
            case WhiteKing:
            case BlackKing:
-//            walking:
-             for (i = -1; i <= 1; i++)
-               for (j = -1; j <= 1; j++) {
-                   if (i == 0 && j == 0) continue;
-                   rt = rf + i;
-                   ft = ff + j;
-                    if (rt < 0 || rt >= BOARD_HEIGHT || ft < BOARD_LEFT || ft >= BOARD_RGHT) continue;
-                   if (SameColor(board[rf][ff], board[rt][ft])) continue;
-                   callback(board, flags, NormalMove,
-                            rf, ff, rt, ft, closure);
-               }
-               if(m==1) goto mounted;
-             break;
+               Ferz(board, flags, rf, ff, callback, closure);
+               Wazir(board, flags, rf, ff, callback, closure);
+               break;
 
            case WhiteNightrider:
            case BlackNightrider:
@@ -649,20 +850,10 @@ GenPseudoLegal (Board board, int flags, MoveCallback callback, VOIDSTAR closure,
              break;
 
            Amazon:
-             /* First do Bishop,then continue like Chancellor */
-             for (rs = -1; rs <= 1; rs += 2)
-                for (fs = -1; fs <= 1; fs += 2)
-                 for (i = 1;; i++) {
-                     rt = rf + (i * rs);
-                     ft = ff + (i * fs);
-                      if (rt < 0 || rt >= BOARD_HEIGHT || ft < BOARD_LEFT || ft >= BOARD_RGHT) break;
-                     if (SameColor(board[rf][ff], board[rt][ft])) break;
-                     callback(board, flags, NormalMove,
-                              rf, ff, rt, ft, closure);
-                     if (board[rt][ft] != EmptySquare) break;
-                 }
-             m++;
-             goto doRook;
+               Bishop(board, flags, rf, ff, callback, closure);
+               Rook(board, flags, rf, ff, callback, closure);
+               Knight(board, flags, rf, ff, callback, closure);
+               break;
 
            // Use Lance as Berolina / Spartan Pawn.
            case WhiteLance:
@@ -697,6 +888,127 @@ GenPseudoLegal (Board board, int flags, MoveCallback callback, VOIDSTAR closure,
              }
             break;
 
+            case SHOGI WhiteNothing:
+            case SHOGI BlackNothing:
+            case SHOGI WhiteLion:
+            case SHOGI BlackLion:
+            case WhiteLion:
+            case BlackLion:
+              for(rt = rf - 2; rt <= rf + 2; rt++) for(ft = ff - 2; ft <= ff + 2; ft++) {
+                if (rt < 0 || rt >= BOARD_HEIGHT || ft < BOARD_LEFT || ft >= BOARD_RGHT) continue;
+                if (!(ff == ft && rf == rt) && SameColor(board[rf][ff], board[rt][ft])) continue;
+                callback(board, flags, (rt-rf)*(rt-rf) + (ff-ft)*(ff-ft) < 3 && board[rt][ft] != EmptySquare ? FirstLeg : NormalMove,
+                         rf, ff, rt, ft, closure);
+              }
+              break;
+
+            case SHOGI WhiteFalcon:
+            case SHOGI BlackFalcon:
+            case SHOGI WhitePDagger:
+            case SHOGI BlackPDagger:
+               SlideSideways(board, flags, rf, ff, callback, closure);
+               StepVertical(board, flags, rf, ff, callback, closure);
+               break;
+
+            case SHOGI WhiteCobra:
+            case SHOGI BlackCobra:
+               StepVertical(board, flags, rf, ff, callback, closure);
+               break;
+
+            case SHOGI (PROMOTED WhiteFerz):
+               if(gameInfo.variant == VariantShogi) goto WhiteGold;
+            case SHOGI (PROMOTED BlackFerz):
+               if(gameInfo.variant == VariantShogi) goto BlackGold;
+            case SHOGI WhitePSword:
+            case SHOGI BlackPSword:
+               SlideVertical(board, flags, rf, ff, callback, closure);
+               StepSideways(board, flags, rf, ff, callback, closure);
+               break;
+
+            case SHOGI WhiteUnicorn:
+            case SHOGI BlackUnicorn:
+               Ferz(board, flags, rf, ff, callback, closure);
+               StepVertical(board, flags, rf, ff, callback, closure);
+               break;
+
+            case SHOGI WhiteMan:
+               StepDiagForward(board, flags, rf, ff, callback, closure);
+               StepVertical(board, flags, rf, ff, callback, closure);
+               break;
+
+            case SHOGI BlackMan:
+               StepDiagBackward(board, flags, rf, ff, callback, closure);
+               StepVertical(board, flags, rf, ff, callback, closure);
+               break;
+
+            case SHOGI WhiteHCrown:
+            case SHOGI BlackHCrown:
+               Bishop(board, flags, rf, ff, callback, closure);
+               SlideSideways(board, flags, rf, ff, callback, closure);
+               break;
+
+            case SHOGI WhiteCrown:
+            case SHOGI BlackCrown:
+               Bishop(board, flags, rf, ff, callback, closure);
+               SlideVertical(board, flags, rf, ff, callback, closure);
+               break;
+
+            case SHOGI WhiteHorned:
+               Sting(board, flags, rf, ff, 1, 0, callback, closure);
+               callback(board, flags, NormalMove, rf, ff, rf, ff, closure);
+               if(killX >= 0) break;
+               Bishop(board, flags, rf, ff, callback, closure);
+               SlideSideways(board, flags, rf, ff, callback, closure);
+               SlideBackward(board, flags, rf, ff, callback, closure);
+               break;
+
+            case SHOGI BlackHorned:
+               Sting(board, flags, rf, ff, -1, 0, callback, closure);
+               callback(board, flags, NormalMove, rf, ff, rf, ff, closure);
+               if(killX >= 0) break;
+               Bishop(board, flags, rf, ff, callback, closure);
+               SlideSideways(board, flags, rf, ff, callback, closure);
+               SlideForward(board, flags, rf, ff, callback, closure);
+               break;
+
+            case SHOGI WhiteEagle:
+               Sting(board, flags, rf, ff, 1,  1, callback, closure);
+               Sting(board, flags, rf, ff, 1, -1, callback, closure);
+               callback(board, flags, NormalMove, rf, ff, rf, ff, closure);
+               if(killX >= 0) break;
+               Rook(board, flags, rf, ff, callback, closure);
+               SlideDiagBackward(board, flags, rf, ff, callback, closure);
+               break;
+
+            case SHOGI BlackEagle:
+               Sting(board, flags, rf, ff, -1,  1, callback, closure);
+               Sting(board, flags, rf, ff, -1, -1, callback, closure);
+               callback(board, flags, NormalMove, rf, ff, rf, ff, closure);
+               if(killX >= 0) break;
+               Rook(board, flags, rf, ff, callback, closure);
+               SlideDiagForward(board, flags, rf, ff, callback, closure);
+               break;
+
+            case SHOGI WhiteDolphin:
+            case SHOGI BlackHorse:
+               SlideDiagBackward(board, flags, rf, ff, callback, closure);
+               SlideVertical(board, flags, rf, ff, callback, closure);
+               break;
+
+            case SHOGI BlackDolphin:
+            case SHOGI WhiteHorse:
+               SlideDiagForward(board, flags, rf, ff, callback, closure);
+               SlideVertical(board, flags, rf, ff, callback, closure);
+               break;
+
+            case SHOGI WhiteLance:
+               SlideForward(board, flags, rf, ff, callback, closure);
+               break;
+
+            case SHOGI BlackLance:
+               SlideBackward(board, flags, rf, ff, callback, closure);
+               break;
+
            case WhiteFalcon: // [HGM] wild: for wildcards, self-capture symbolizes move to anywhere
            case BlackFalcon:
            case WhiteCobra:
@@ -728,6 +1040,8 @@ GenLegalCallback (Board board, int flags, ChessMove kind, int rf, int ff, int rt
 
     if(rFilter >= 0 && rFilter != rt || fFilter >= 0 && fFilter != ft) return; // [HGM] speed: ignore moves with wrong to-square
 
+    if (board[EP_STATUS] == EP_IRON_LION && (board[rt][ft] == WhiteLion || board[rt][ft] == BlackLion)) return; //[HGM] lion
+
     if (!(flags & F_IGNORE_CHECK) ) {
       int check, promo = (gameInfo.variant == VariantSpartan && kind == BlackPromotion);
       if(promo) {
@@ -902,8 +1216,10 @@ GenLegal (Board board, int  flags, MoveCallback callback, VOIDSTAR closure, Ches
                 if(k != ft && board[0][k] != EmptySquare) ft = NoRights;
             for(k=left; k<right && ft != NoRights; k++) /* then if not checked */
                 if(!ignoreCheck && CheckTest(board, flags, 0, ff, 0, k, FALSE)) ft = NoRights;
-            if(ft != NoRights && board[0][ft] == WhiteRook)
-                callback(board, flags, WhiteHSideCastleFR, 0, swap ? ft : ff, 0, swap ? ff : ft, closure);
+            if(ft != NoRights && board[0][ft] == WhiteRook) {
+                if(flags & F_FRC_TYPE_CASTLING) callback(board, flags, WhiteHSideCastleFR, 0, ff, 0, ft, closure);
+                if(swap)                        callback(board, flags, WhiteHSideCastleFR, 0, ft, 0, ff, closure);
+            }
 
             ft = castlingRights[1]; /* Rook file if we have A-side rights */
             left  = BOARD_LEFT+2;
@@ -915,8 +1231,10 @@ GenLegal (Board board, int  flags, MoveCallback callback, VOIDSTAR closure, Ches
             if(ff > BOARD_LEFT+2)
             for(k=left+1; k<=right && ft != NoRights; k++) /* then if not checked */
                 if(!ignoreCheck && CheckTest(board, flags, 0, ff, 0, k, FALSE)) ft = NoRights;
-            if(ft != NoRights && board[0][ft] == WhiteRook)
-                callback(board, flags, WhiteASideCastleFR, 0, swap ? ft : ff, 0, swap ? ff : ft, closure);
+            if(ft != NoRights && board[0][ft] == WhiteRook) {
+                if(flags & F_FRC_TYPE_CASTLING) callback(board, flags, WhiteASideCastleFR, 0, ff, 0, ft, closure);
+                if(swap)                        callback(board, flags, WhiteASideCastleFR, 0, ft, 0, ff, closure);
+            }
         }
     } else {
         ff = castlingRights[5]; /* King file if we have any rights */
@@ -929,8 +1247,10 @@ GenLegal (Board board, int  flags, MoveCallback callback, VOIDSTAR closure, Ches
                 if(k != ft && board[BOARD_HEIGHT-1][k] != EmptySquare) ft = NoRights;
             for(k=left; k<right && ft != NoRights; k++) /* then if not checked */
                 if(!ignoreCheck && CheckTest(board, flags, BOARD_HEIGHT-1, ff, BOARD_HEIGHT-1, k, FALSE)) ft = NoRights;
-            if(ft != NoRights && board[BOARD_HEIGHT-1][ft] == BlackRook)
-                callback(board, flags, BlackHSideCastleFR, BOARD_HEIGHT-1, swap ? ft : ff, BOARD_HEIGHT-1, swap ? ff : ft, closure);
+            if(ft != NoRights && board[BOARD_HEIGHT-1][ft] == BlackRook) {
+                if(flags & F_FRC_TYPE_CASTLING) callback(board, flags, BlackHSideCastleFR, BOARD_HEIGHT-1, ff, BOARD_HEIGHT-1, ft, closure);
+                if(swap)                        callback(board, flags, BlackHSideCastleFR, BOARD_HEIGHT-1, ft, BOARD_HEIGHT-1, ff, closure);
+            }
 
             ft = castlingRights[4]; /* Rook file if we have A-side rights */
             left  = BOARD_LEFT+2;
@@ -942,8 +1262,10 @@ GenLegal (Board board, int  flags, MoveCallback callback, VOIDSTAR closure, Ches
             if(ff > BOARD_LEFT+2)
             for(k=left+1; k<=right && ft != NoRights; k++) /* then if not checked */
                 if(!ignoreCheck && CheckTest(board, flags, BOARD_HEIGHT-1, ff, BOARD_HEIGHT-1, k, FALSE)) ft = NoRights;
-            if(ft != NoRights && board[BOARD_HEIGHT-1][ft] == BlackRook)
-                callback(board, flags, BlackASideCastleFR, BOARD_HEIGHT-1, swap ? ft : ff, BOARD_HEIGHT-1, swap ? ff : ft, closure);
+            if(ft != NoRights && board[BOARD_HEIGHT-1][ft] == BlackRook) {
+                if(flags & F_FRC_TYPE_CASTLING) callback(board, flags, BlackASideCastleFR, BOARD_HEIGHT-1, ff, BOARD_HEIGHT-1, ft, closure);
+                if(swap)                        callback(board, flags, BlackASideCastleFR, BOARD_HEIGHT-1, ft, BOARD_HEIGHT-1, ff, closure);
+            }
         }
     }
 
@@ -974,6 +1296,9 @@ CheckTestCallback (Board board, int flags, ChessMove kind, int rf, int ff, int r
        cl->check++;
        xqCheckers[rf][ff] = xqCheckers[EP_STATUS] & 1; // remember who is checking (if status == 1)
     }
+    if( board[EP_STATUS] == EP_ROYAL_LION && (board[rt][ft] == WhiteLion || board[rt][ft] == BlackLion)
+       && (gameInfo.variant != VariantLion || board[rf][ff] != WhiteKing && board[rf][ff] != BlackKing) )
+       cl->check++; // [HGM] lion: forbidden counterstrike against Lion equated to putting yourself in check
 }
 
 
@@ -989,25 +1314,43 @@ CheckTest (Board board, int flags, int rf, int ff, int rt, int ft, int enPassant
 {
     CheckTestClosure cl;
     ChessSquare king = flags & F_WHITE_ON_MOVE ? WhiteKing : BlackKing;
-    ChessSquare captured = EmptySquare;
+    ChessSquare captured = EmptySquare, ep=0, trampled=0;
     /*  Suppress warnings on uninitialized variables    */
 
     if(gameInfo.variant == VariantXiangqi)
         king = flags & F_WHITE_ON_MOVE ? WhiteWazir : BlackWazir;
     if(gameInfo.variant == VariantKnightmate)
         king = flags & F_WHITE_ON_MOVE ? WhiteUnicorn : BlackUnicorn;
+    if(gameInfo.variant == VariantChu) { // strictly speaking this is not needed, as Chu officially has no check
+       int r, f, k = king, royals=0, prince = flags & F_WHITE_ON_MOVE ? WhiteMonarch : BlackMonarch;
+       for(r=0; r<BOARD_HEIGHT; r++) for(f=BOARD_LEFT; f<BOARD_RGHT; f++) {
+           if(board[r][f] == k || board[r][f] == prince) {
+               if(++royals > 1) return FALSE; // no check if we have two royals (ignores double captureby Lion!)
+               king = board[r][f]; // remember hich one we had
+           }
+       }
+    }
 
     if (rt >= 0) {
        if (enPassant) {
            captured = board[rf][ft];
            board[rf][ft] = EmptySquare;
        } else {
-           captured = board[rt][ft];
+           captured = board[rt][ft];
+           if(killX >= 0) { trampled = board[killY][killX]; board[killY][killX] = EmptySquare; }
        }
        if(rf == DROP_RANK) board[rt][ft] = ff; else { // [HGM] drop
            board[rt][ft] = board[rf][ff];
            board[rf][ff] = EmptySquare;
        }
+       ep = board[EP_STATUS];
+       if( captured == WhiteLion || captured == BlackLion ) { // [HGM] lion: Chu Lion-capture rules
+           ChessSquare victim = killX < 0 ? EmptySquare : trampled;
+           if( (board[rt][ft] == WhiteLion || board[rt][ft] == BlackLion) &&           // capturer is Lion
+               (ff - ft > 1 || ft - ff > 1 || rf - rt > 1 || rt - rf > 1) &&           // captures from a distance
+               (victim == EmptySquare || victim == WhitePawn || victim == BlackPawn) ) // no or worthless 'bridge'
+                    board[EP_STATUS] = EP_ROYAL_LION; // on distant Lion x Lion victim must not be pseudo-legally protected
+       }
     }
 
     /* For compatibility with ICS wild 9, we scan the board in the
@@ -1042,13 +1385,25 @@ CheckTest (Board board, int flags, int rf, int ff, int rt, int ft, int enPassant
            board[rf][ft] = captured;
            board[rt][ft] = EmptySquare;
        } else {
+           if(killX >= 0) board[killY][killX] = trampled;
            board[rt][ft] = captured;
        }
+       board[EP_STATUS] = ep;
     }
 
     return cl.fking < BOARD_RGHT ? cl.check : 1000; // [HGM] atomic: return 1000 if we have no king
 }
 
+int
+HasLion (Board board, int flags)
+{
+    int lion = F_WHITE_ON_MOVE & flags ? WhiteLion : BlackLion;
+    int r, f;
+    for(r=0; r<BOARD_HEIGHT; r++) for(f=BOARD_LEFT; f<BOARD_RGHT; f++)
+        if(board[r][f] == lion) return 1;
+    return 0;
+}
+
 ChessMove
 LegalDrop (Board board, int flags, ChessSquare piece, int rt, int ft)
 {   // [HGM] put drop legality testing in separate routine for clarity
@@ -1110,8 +1465,8 @@ LegalityTest (Board board, int flags, int rf, int ff, int rt, int ft, int promoC
 
     /* [HGM] Cobra and Falcon are wildcard pieces; consider all their moves legal */
     /* (perhaps we should disallow moves that obviously leave us in check?)              */
-    if(piece == WhiteFalcon || piece == BlackFalcon ||
-       piece == WhiteCobra  || piece == BlackCobra)
+    if((piece == WhiteFalcon || piece == BlackFalcon ||
+        piece == WhiteCobra  || piece == BlackCobra) && gameInfo.variant != VariantChu)
         return CheckTest(board, flags, rf, ff, rt, ft, FALSE) ? IllegalMove : NormalMove;
 
     cl.rf = rf;
@@ -1132,12 +1487,23 @@ LegalityTest (Board board, int flags, int rf, int ff, int rt, int ft, int promoC
             if(rf != 0) return IllegalMove; // must be on back rank
             if(!(board[VIRGIN][ff] & VIRGIN_W)) return IllegalMove; // non-virgin
             if(board[PieceToNumber(CharToPiece(ToUpper(promoChar)))][BOARD_WIDTH-2] == 0) return ImpossibleMove;// must be in stock
+            if(cl.kind == WhiteHSideCastleFR && (ff == BOARD_RGHT-2 || ff == BOARD_RGHT-3)) return ImpossibleMove;
+            if(cl.kind == WhiteASideCastleFR && (ff == BOARD_LEFT+2 || ff == BOARD_LEFT+3)) return ImpossibleMove;
         } else {
             if(rf != BOARD_HEIGHT-1) return IllegalMove;
             if(!(board[VIRGIN][ff] & VIRGIN_B)) return IllegalMove; // non-virgin
             if(board[BOARD_HEIGHT-1-PieceToNumber(CharToPiece(ToLower(promoChar)))][1] == 0) return ImpossibleMove;
+            if(cl.kind == BlackHSideCastleFR && (ff == BOARD_RGHT-2 || ff == BOARD_RGHT-3)) return ImpossibleMove;
+            if(cl.kind == BlackASideCastleFR && (ff == BOARD_LEFT+2 || ff == BOARD_LEFT+3)) return ImpossibleMove;
         }
     } else
+    if(gameInfo.variant == VariantChu) {
+        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;
+        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) {
@@ -1172,16 +1538,26 @@ if(appData.debugMode)fprintf(debugFP,"SHOGI promoChar = %c\n", promoChar ? promo
         }
     } else
     if (promoChar != NULLCHAR) {
+       if(cl.kind == NormalMove && promoChar == '+') { // allow shogi-style promotion is pieceToChar specifies them
+            ChessSquare piece = board[rf][ff];
+            if(piece < BlackPawn ? piece > WhiteMan : piece > BlackMan) return ImpossibleMove; // already promoted
+            // should test if in zone, really
+            if(gameInfo.variant == VariantChuChess && (piece == WhiteKnight || piece == BlackKnight) && HasLion(board, flags))
+                return IllegalMove;
+            if(PieceToChar(PROMOTED piece) == '+') return flags & F_WHITE_ON_MOVE ? WhitePromotion : BlackPromotion;
+        } else
        if(promoChar == '=') cl.kind = IllegalMove; else // [HGM] shogi: no deferred promotion outside Shogi
        if (cl.kind == WhitePromotion || cl.kind == BlackPromotion) {
            ChessSquare piece = CharToPiece(flags & F_WHITE_ON_MOVE ? ToUpper(promoChar) : ToLower(promoChar));
            if(piece == EmptySquare)
                 cl.kind = ImpossibleMove; // non-existing piece
-           if(gameInfo.variant == VariantSpartan && cl.kind == BlackPromotion ) {
+           if(gameInfo.variant == VariantChuChess && promoChar == 'l' && HasLion(board, flags)) {
+                cl.kind = IllegalMove; // no two Lions
+           } else if(gameInfo.variant == VariantSpartan && cl.kind == BlackPromotion ) {
                if(promoChar != PieceToChar(BlackKing)) {
                    if(CheckTest(board, flags, rf, ff, rt, ft, FALSE)) cl.kind = IllegalMove; // [HGM] spartan: only promotion to King was possible
                    if(piece == BlackLance) cl.kind = ImpossibleMove;
-               } else { // promotion to King allowed only if we do not haave two yet
+               } else { // promotion to King allowed only if we do not have two yet
                    int r, f, kings = 0;
                    for(r=0; r<BOARD_HEIGHT; r++) for(f=BOARD_LEFT; f<BOARD_RGHT; f++) kings += (board[r][f] == BlackKing);
                    if(kings == 2) cl.kind = IllegalMove;
@@ -1266,7 +1642,7 @@ MateTest (Board board, int flags)
        else if(gameInfo.variant == VariantGiveaway) return MT_STEALMATE; // no check exists, stalemated = win
 
         return inCheck ? MT_CHECKMATE
-                      : (gameInfo.variant == VariantXiangqi || gameInfo.variant == VariantShatranj || gameInfo.variant == VariantShogi) ?
+                      : (gameInfo.variant == VariantXiangqi || gameInfo.variant == VariantShatranj || IS_SHOGI(gameInfo.variant)) ?
                          MT_STAINMATE : MT_STALEMATE;
     }
 }
@@ -1363,12 +1739,19 @@ Disambiguate (Board board, int flags, DisambiguateClosure *closure)
             if(closure->rf != 0) closure->kind = IllegalMove; // must be on back rank
             if(!(board[VIRGIN][closure->ff] & VIRGIN_W)) closure->kind = IllegalMove; // non-virgin
             if(board[PieceToNumber(CharToPiece(ToUpper(c)))][BOARD_WIDTH-2] == 0) closure->kind = ImpossibleMove;// must be in stock
+            if(closure->kind == WhiteHSideCastleFR && (closure->ff == BOARD_RGHT-2 || closure->ff == BOARD_RGHT-3)) closure->kind = ImpossibleMove;
+            if(closure->kind == WhiteASideCastleFR && (closure->ff == BOARD_LEFT+2 || closure->ff == BOARD_LEFT+3)) closure->kind = ImpossibleMove;
         } else {
             if(closure->rf != BOARD_HEIGHT-1) closure->kind = IllegalMove;
             if(!(board[VIRGIN][closure->ff] & VIRGIN_B)) closure->kind = IllegalMove; // non-virgin
             if(board[BOARD_HEIGHT-1-PieceToNumber(CharToPiece(ToLower(c)))][1] == 0) closure->kind = ImpossibleMove;
+            if(closure->kind == BlackHSideCastleFR && (closure->ff == BOARD_RGHT-2 || closure->ff == BOARD_RGHT-3)) closure->kind = ImpossibleMove;
+            if(closure->kind == BlackASideCastleFR && (closure->ff == BOARD_LEFT+2 || closure->ff == BOARD_LEFT+3)) closure->kind = ImpossibleMove;
         }
     } else
+    if(gameInfo.variant == VariantChu) {
+        if(c == '+') closure->kind = (flags & F_WHITE_ON_MOVE ? WhitePromotion : BlackPromotion); // for now, accept any
+    } else
     if(gameInfo.variant == VariantShogi) {
         /* [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) {
@@ -1402,7 +1785,8 @@ Disambiguate (Board board, int flags, DisambiguateClosure *closure)
     } else
     if (closure->kind == WhitePromotion || closure->kind == BlackPromotion) {
         if(c == NULLCHAR) { // missing promoChar on mandatory promotion; use default for variant
-            if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier || gameInfo.variant == VariantMakruk)
+            if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier ||
+               gameInfo.variant == VariantMakruk || gameInfo.variant == VariantASEAN)
                 c = PieceToChar(BlackFerz);
             else if(gameInfo.variant == VariantGreat)
                 c = PieceToChar(BlackMan);
@@ -1411,6 +1795,12 @@ Disambiguate (Board board, int flags, DisambiguateClosure *closure)
             else
                 c = PieceToChar(BlackQueen);
         } else if(c == '=') closure->kind = IllegalMove; // no deferral outside Shogi
+        else if(c == 'l' && gameInfo.variant == VariantChuChess && HasLion(board, flags)) closure->kind = IllegalMove;
+    } else if (c == '+') { // '+' outside shogi, check if pieceToCharTable enabled it
+        ChessSquare p = closure->piece;
+        if(p > WhiteMan && p < BlackPawn || p > BlackMan || PieceToChar(PROMOTED p) != '+')
+            closure->kind = ImpossibleMove; // used on non-promotable piece
+        else if(gameInfo.variant == VariantChuChess && HasLion(board, flags)) closure->kind = IllegalMove;
     } else if (c != NULLCHAR) closure->kind = IllegalMove;
 
     closure->promoChar = ToLower(c); // this can be NULLCHAR! Note we keep original promoChar even if illegal.
@@ -1529,7 +1919,7 @@ CoordsToAlgebraic (Board board, int flags, int rf, int ff, int rt, int ft, int p
        /* Use promotion suffix style "=Q" */
        *outp = NULLCHAR;
         if (promoChar != NULLCHAR) {
-            if(gameInfo.variant == VariantShogi) {
+            if(IS_SHOGI(gameInfo.variant)) {
                 /* [HGM] ... but not in Shogi! */
                 *outp++ = promoChar == '=' ? '=' : '+';
             } else {
@@ -1606,7 +1996,7 @@ CoordsToAlgebraic (Board board, int flags, int rf, int ff, int rt, int ft, int p
        */
         if( c == '~' || c == '+') {
            /* [HGM] print nonexistent piece as its demoted version */
-           piece = (ChessSquare) (DEMOTED piece);
+           piece = (ChessSquare) (DEMOTED piece - 11*(gameInfo.variant == VariantChu));
         }
         if(c=='+') *outp++ = c;
         *outp++ = ToUpper(PieceToChar(piece));
@@ -1627,11 +2017,12 @@ CoordsToAlgebraic (Board board, int flags, int rf, int ff, int rt, int ft, int p
         if(rt+ONE <= '9')
            *outp++ = rt + ONE;
         else { *outp++ = (rt+ONE-'0')/10 + '0';*outp++ = (rt+ONE-'0')%10 + '0'; }
-        if (gameInfo.variant == VariantShogi) {
+        if (IS_SHOGI(gameInfo.variant)) {
             /* [HGM] in Shogi non-pawns can promote */
             *outp++ = promoChar; // Don't bother to correct move type, return value is never used!
         }
-        else if (gameInfo.variant != VariantSuper && promoChar &&
+        else if (gameInfo.variant == VariantChuChess && promoChar ||
+                 gameInfo.variant != VariantSuper && promoChar &&
                  (piece == WhiteLance || piece == BlackLance) ) { // Lance sometimes represents Pawn
             *outp++ = '=';
             *outp++ = ToUpper(promoChar);
diff --git a/moves.h b/moves.h
index fb1edc8..a86cca5 100644 (file)
--- a/moves.h
+++ b/moves.h
@@ -81,12 +81,15 @@ typedef void (*MoveCallback) P((Board board, int flags, ChessMove kind,
                                   destroying your own king is illegal */
 #define F_FRC_TYPE_CASTLING 256 /* generate castlings as captures of own Rook */
 #define F_MANDATORY_CAPTURE 0x200
+#define F_NULL_MOVE         0x400
 
 /* Special epfile values. [HGM] positive values are non-reversible moves! */
-#define EP_NONE (-4)           /* [HGM] Tricky! order matters:            */
-#define EP_UNKNOWN (-1)        /*       >= EP_UNKNOWN spils rep-draw      */
+#define EP_NONE (-6)           /* [HGM] Tricky! order matters:            */
+#define EP_UNKNOWN (-1)        /*       >= EP_UNKNOWN spoils rep-draw     */
 #define EP_CAPTURE (-2)        /*       <= EP_NONE is reversible move     */
 #define EP_PAWN_MOVE (-3)
+#define EP_IRON_LION (-4)
+#define EP_ROYAL_LION (-5)
 #define EP_REP_DRAW   (-15)
 #define EP_RULE_DRAW  (-14)
 #define EP_INSUF_DRAW  (-13)
@@ -172,4 +175,4 @@ ChessMove CoordsToAlgebraic P((Board board, int flags,
                               int rf, int ff, int rt, int ft,
                               int promoChar, char out[MOVE_LEN]));
 
-extern int quickFlag;
+extern int quickFlag, killX, killY;
index fab7ce6..1818e61 100644 (file)
@@ -74,19 +74,21 @@ int highTextStart[2], highTextEnd[2];
 int MemoProc P((Option *opt, int n, int x, int y, char *text, int index));
 
 Option engoutOptions[] = {
-{  0,  LL|T2T,           17, NULL, NULL, NULL, NULL, Icon, " " },
-{  0, L2L|T2T|SAME_ROW, 163, NULL, NULL, NULL, NULL, Label, N_("engine name") },
+{  0,  LL|T2T,           18, NULL, NULL, NULL, NULL, Icon, " " },
+{  0, L2L|T2T|SAME_ROW, 162, NULL, NULL, NULL, NULL, Label, N_("engine name") },
 {  0,     T2T|SAME_ROW,  30, NULL, NULL, NULL, NULL, Icon, " " },
+/* TRANSLATORS: noun, as in "the move Nf3"*/
 {  0, R2R|T2T|SAME_ROW, 188, NULL, NULL, NULL, NULL, Label, N_("move") },
 {  0,  RR|T2T|SAME_ROW,  80, NULL, NULL, NULL, NULL, Label, N_("NPS") },
-{200, T_VSCRL | T_TOP,  500, NULL, (void*) &mem1, "", (char**) MemoProc, TextBox, "" },
+{200, T_VSCRL | T_TOP,  500, NULL, (void*) &mem1, (char*) &appData.historyFont, (char**) MemoProc, TextBox, "" },
 {  0,         0,         0, NULL, NULL, "", NULL, Break , "" },
-{  0,  LL|T2T,           17, NULL, NULL, NULL, NULL, Icon, " " },
-{  0, L2L|T2T|SAME_ROW, 163, NULL, NULL, NULL, NULL, Label, N_("engine name") },
+{  0,  LL|T2T,           18, NULL, NULL, NULL, NULL, Icon, " " },
+{  0, L2L|T2T|SAME_ROW, 162, NULL, NULL, NULL, NULL, Label, N_("engine name") },
 {  0,     T2T|SAME_ROW,  30, NULL, NULL, NULL, NULL, Icon, " " },
+/* TRANSLATORS: noun, as in "the move Nf3"*/
 {  0, R2R|T2T|SAME_ROW, 188, NULL, NULL, NULL, NULL, Label, N_("move") },
 {  0,  RR|T2T|SAME_ROW,  80, NULL, NULL, NULL, NULL, Label, N_("NPS") },
-{200, T_VSCRL | T_TOP,  500, NULL, (void*) &mem2, "", (char**) MemoProc, TextBox, "" },
+{200, T_VSCRL | T_TOP,  500, NULL, (void*) &mem2, (char*) &appData.historyFont, (char**) MemoProc, TextBox, "" },
 {   0,      NO_OK,       0, NULL, NULL, "", NULL, EndMark , "" }
 };
 
index c843d38..b415d19 100644 (file)
@@ -190,7 +190,7 @@ GameListPrepare (int byPos, int narrow)
        if(lg->number % 2000 == 0) {
            char buf[MSG_SIZ];
            snprintf(buf, MSG_SIZ, _("Scanning through games (%d)"), lg->number);
-           DisplayTitle(buf);
+           DisplayTitle(buf); DoEvents();
        }
        lg->position = pos;
        lg = (ListGame *) lg->node.succ;
@@ -242,6 +242,7 @@ GameListPopUp (FILE *fp, char *filename)
     page = 0;
     GameListReplace(0); // [HGM] filter: code put in separate routine, and also called to set title
     MarkMenu("View.GameList", GameListDlg);
+    EnableNamedMenuItem("File.SaveSelected", TRUE);
 }
 
 FILE *
@@ -254,6 +255,7 @@ void
 GameListDestroy ()
 {
     if (glc == NULL) return;
+    EnableNamedMenuItem("File.SaveSelected", FALSE);
     PopDown(GameListDlg);
     if (glc->strings != NULL) {
        char **st;
index 9cf56c0..2366dfd 100644 (file)
@@ -79,7 +79,7 @@ SelectMove (Option *opt, int n, int x, int y, char *text, int index)
 }
 
 Option historyOptions[] = {
-{ 200, T_VSCRL | T_FILL | T_WRAP | T_TOP, 400, NULL, (void*) &historyText, NULL, (char**) &SelectMove, TextBox, "" },
+{ 200, T_VSCRL | T_FILL | T_WRAP | T_TOP, 400, NULL, (void*) &historyText, (char*) &appData.historyFont, (char**) &SelectMove, TextBox, "" },
 {   0,           NO_OK,             0, NULL, (void*) NULL, "", NULL, EndMark , "" }
 };
 
index 8e31362..481e7b2 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -151,11 +151,11 @@ PromoSuffix (char **p)
 {
     char *start = *p;
     if(**p == 'e' && (Match("ep", p) || Match("e.p.", p))) { *p = start; return NULLCHAR; } // non-compliant e.p. suffix is no promoChar!
-    if(**p == '+' && gameInfo.variant == VariantShogi) { (*p)++; return '+'; }
+    if(**p == '+' && IS_SHOGI(gameInfo.variant)) { (*p)++; return '+'; }
     if(**p == '=' || (gameInfo.variant == VariantSChess) && **p == '/') (*p)++; // optional = (or / for Seirawan gating)
     if(**p == '(' && (*p)[2] == ')' && isalpha( (*p)[1] )) { (*p) += 3; return ToLower((*p)[-2]); }
-    if(isalpha(**p)) return ToLower(*(*p)++);
-    if(*p != start) return '='; // must be the optional =
+    if(isalpha(**p) && **p != 'x') return ToLower(*(*p)++); // reserve 'x' for multi-leg captures? 
+    if(*p != start) return **p == '+' ? *(*p)++ : '='; // must be the optional = (or =+)
     return NULLCHAR; // no suffix detected
 }
 
@@ -240,7 +240,7 @@ NextUnit (char **p)
        } else if(n == 1 && type[0] == NUMERIC && coord[0] > 1) { while(**p == '.') (*p)++; return Nothing; } // fast exit for move numbers
        if(n == 4 && type[2] != type[3] && // we have a valid to-square (kludge: type[3] can be NOTHING on fxg type move)
                     (piece || !promoted) && // promoted indicator only valid on named piece type
-                    (type[2] == ALPHABETIC || gameInfo.variant == VariantShogi)) { // in Shogi also allow alphabetic rank
+                    (type[2] == ALPHABETIC || IS_SHOGI(gameInfo.variant))) { // in Shogi also allow alphabetic rank
            DisambiguateClosure cl;
            int fromX, fromY, toX, toY;
 
@@ -261,7 +261,7 @@ NextUnit (char **p)
            if(piece) {
                cl.pieceIn = CharToPiece(wom ? piece : ToLower(piece));
                if(cl.pieceIn == EmptySquare) return ImpossibleMove; // non-existent piece
-               if(promoted) cl.pieceIn = (ChessSquare) (PROMOTED cl.pieceIn);
+               if(promoted) cl.pieceIn = (ChessSquare) (CHUPROMOTED cl.pieceIn);
            } else cl.pieceIn = EmptySquare;
            if(separator == '@' || separator == '*') { // drop move. We only get here without from-square or promoted piece
                fromY = DROP_RANK; fromX = cl.pieceIn;
@@ -279,13 +279,25 @@ NextUnit (char **p)
                fromY = (currentMoveString[1] = coord[1] + '0') - ONE;
                currentMoveString[4] = cl.promoCharIn = PromoSuffix(p);
                currentMoveString[5] = NULLCHAR;
+               if(!cl.promoCharIn && (**p == '-' || **p == 'x')) { // Lion-type multi-leg move
+                   currentMoveString[5] = (killX = toX) + AAA; // what we thought was to-square is in fact kill-square
+                   currentMoveString[6] = (killY = toY) + ONE; // append it as suffix behind long algebraic move
+                   currentMoveString[4] = ';';
+                   currentMoveString[7] = NULLCHAR;
+                   // read new to-square (VERY non-robust! Assumes correct (non-alpha-rank) syntax, and messes up on errors)
+                   toX = cl.ftIn = (currentMoveString[2] = *++*p) - AAA; ++*p;
+                   toY = cl.rtIn = (currentMoveString[3] = Number(p) + '0') - ONE;
+               }
                if(type[0] != NOTHING && type[1] != NOTHING && type[3] != NOTHING) { // fully specified.
+                   ChessSquare realPiece = boards[yyboardindex][fromY][fromX];
                    // Note that Disambiguate does not work for illegal moves, but flags them as impossible
                    if(piece) { // check if correct piece indicated
-                       ChessSquare realPiece = boards[yyboardindex][fromY][fromX];
                        if(PieceToChar(realPiece) == '~') realPiece = (ChessSquare) (DEMOTED realPiece);
                        if(!(appData.icsActive && PieceToChar(realPiece) == '+') && // trust ICS if it moves promoted pieces
                           piece && realPiece != cl.pieceIn) return ImpossibleMove;
+                   } else if(!separator && **p == '+') { // could be a protocol move, where bare '+' suffix means shogi-style promotion
+                       if(realPiece < (wom ?  WhiteCannon : BlackCannon) && PieceToChar(PROMOTED realPiece) == '+') // seems to be that
+                          currentMoveString[4] = cl.promoCharIn = *(*p)++; // append promochar after all
                    }
                    result = LegalityTest(boards[yyboardindex], PosFlags(yyboardindex), fromY, fromX, toY, toX, cl.promoCharIn);
                    if (currentMoveString[4] == NULLCHAR) { // suppy missing mandatory promotion character
@@ -321,6 +333,7 @@ NextUnit (char **p)
                currentMoveString[0] = cl.ff + AAA;
                currentMoveString[1] = cl.rf + ONE;
                currentMoveString[3] = cl.rt + ONE;
+               if(killX < 0) // [HGM] lion: do not overwrite kill-square suffix
                currentMoveString[4] = cl.promoChar;
 
                if((cl.kind == WhiteCapturesEnPassant || cl.kind == BlackCapturesEnPassant) && (Match("ep", p) || Match("e.p.", p)));
diff --git a/pixmaps/ANALYZING_14.xpm b/pixmaps/ANALYZING_14.xpm
deleted file mode 100644 (file)
index b43e871..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/* XPM */\r
-static char *ANALYZE_14[] = {\r
-/* columns rows colors chars-per-pixel */\r
-"14 14 3 1",\r
-"  c white",\r
-"* c black",\r
-". c None",\r
-/* pixels */\r
-".......   ....",\r
-".....  ...  ..",\r
-".... ....... .",\r
-".... .. .... .",\r
-"... ..  ..... ",\r
-"... ......... ",\r
-"... ......... ",\r
-".... ....... .",\r
-".... ....... .",\r
-"... .  ...  ..",\r
-".. . ..   ....",\r
-". . ..........",\r
-"   ...........",\r
-".............."\r
-};\r
diff --git a/pixmaps/BLACK_14.xpm b/pixmaps/BLACK_14.xpm
deleted file mode 100644 (file)
index cab2a1e..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/* XPM */\r
-static char *BLACK_14[] = {\r
-/* columns rows colors chars-per-pixel */\r
-"14 14 3 1",\r
-"  c white",\r
-"* c black",\r
-". c None",\r
-/* pixels */\r
-".....****.....",\r
-"...**    **...",\r
-"..*        *..",\r
-".*          *.",\r
-".*          *.",\r
-"*            *",\r
-"*            *",\r
-"*            *",\r
-"*            *",\r
-".*          *.",\r
-".*          *.",\r
-"..*        *..",\r
-"...**    **...",\r
-".....****....."\r
-};\r
diff --git a/pixmaps/CLEAR_14.xpm b/pixmaps/CLEAR_14.xpm
deleted file mode 100644 (file)
index 68a0efd..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/* XPM */\r
-static char *CLEAR_14[] = {\r
-/* columns rows colors chars-per-pixel */\r
-"14 14 3 1",\r
-"  c white",\r
-"* c black",\r
-". c None",\r
-/* pixels */\r
-"..............",\r
-"..............",\r
-"..............",\r
-"..............",\r
-"..............",\r
-"..............",\r
-"..............",\r
-"..............",\r
-"..............",\r
-"..............",\r
-"..............",\r
-"..............",\r
-"..............",\r
-".............."\r
-};\r
diff --git a/pixmaps/PONDER_14.xpm b/pixmaps/PONDER_14.xpm
deleted file mode 100644 (file)
index 2f732ab..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/* XPM */\r
-static char *PONDER_14[] = {\r
-/* columns rows colors chars-per-pixel */\r
-"14 14 3 1",\r
-"  c white",\r
-"* c black",\r
-". c None",\r
-/* pixels */\r
-"....  ..  ....",\r
-"..  ... ..  ..",\r
-". .......... .",\r
-" .......... ..",\r
-" ........... .",\r
-".  .......... ",\r
-".. .......... ",\r
-". .......... .",\r
-".. .......  ..",\r
-"... ..  .. ...",\r
-".. .  ..  ....",\r
-".   ..........",\r
-" .............",\r
-".............."\r
-};\r
diff --git a/pixmaps/THINKING_14.xpm b/pixmaps/THINKING_14.xpm
deleted file mode 100644 (file)
index 4b28f19..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/* XPM */\r
-static char *THINK_14[] = {\r
-/* columns rows colors chars-per-pixel */\r
-"14 14 3 1",\r
-"  c white",\r
-"* c black",\r
-". c None",\r
-/* pixels */\r
-".....   ......",\r
-"...  ...  ....",\r
-".. ... ... ...",\r
-". .... .... ..",\r
-". .... .... ..",\r
-" ..... ..... .",\r
-" ....     .. .",\r
-" ..... ..... .",\r
-". ......... ..",\r
-". ......... ..",\r
-".. ....... ...",\r
-"...  ...  ....",\r
-".....   ......",\r
-".............."\r
-};\r
diff --git a/pixmaps/UNKNOWN_14.xpm b/pixmaps/UNKNOWN_14.xpm
deleted file mode 100644 (file)
index 9f4c241..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/* XPM */\r
-static char *UNKNOWN_14[] = {\r
-/* columns rows colors chars-per-pixel */\r
-"14 14 3 1",\r
-"  c white",\r
-"* c black",\r
-". c None",\r
-/* pixels */\r
-".....****.....",\r
-"...**    **...",\r
-"..*  . .   *..",\r
-".* . . . .  *.",\r
-".*  . . . . *.",\r
-"*  . . . . . *",\r
-"* . . . . .  *",\r
-"*  . . . . . *",\r
-"* . . . . .  *",\r
-".* . . . .  *.",\r
-".*  . . . . *.",\r
-"..*  . .   *..",\r
-"...**    **...",\r
-".....****....."\r
-};\r
diff --git a/pixmaps/WHITE_14.xpm b/pixmaps/WHITE_14.xpm
deleted file mode 100644 (file)
index 3f13936..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/* XPM */\r
-static char *WHITE_14[] = {\r
-/* columns rows colors chars-per-pixel */\r
-"14 14 3 1",\r
-"  c white",\r
-"* c black",\r
-". c None",\r
-/* pixels */\r
-".....****.....",\r
-"...**    **...",\r
-"..*  ....  *..",\r
-".* ........ *.",\r
-".* ........ *.",\r
-"* .......... *",\r
-"* .......... *",\r
-"* .......... *",\r
-"* .......... *",\r
-".* ........ *.",\r
-".* ........ *.",\r
-"..*  ....  *..",\r
-"...**    **...",\r
-".....****....."\r
-};\r
diff --git a/pixmaps/board32.png b/pixmaps/board32.png
new file mode 100644 (file)
index 0000000..1f2ffa6
Binary files /dev/null and b/pixmaps/board32.png differ
diff --git a/pixmaps/board32.xpm b/pixmaps/board32.xpm
deleted file mode 100644 (file)
index cc92926..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/* XPM */
-static char *board__[] = {
-/* columns rows colors chars-per-pixel */
-"32 32 4 1",
-"  c #000000",
-". c #FFFF00",
-"X c #808080",
-"o c #FFFFFF",
-/* pixels */
-"X.X.    X.X.    X.X.    X.X.    ",
-".XoX    .XoX    .XoX    .XoX    ",
-"X.X.    X.X.    X.X.    X.X.    ",
-"oX.X    oX.X    oX.X    oX.X    ",
-"    X.X.    X.X.    X.X.    X.X.",
-"    .XoX    .XoX    .XoX    .XoX",
-"    X.X.    X.X.    X.X.    X.X.",
-"    oX.X    oX.X    oX.X    oX.X",
-"X.X.    X.X.    X.X.    X.X.    ",
-".XoX    .XoX    .XoX    .XoX    ",
-"X.X.    X.X.    X.X.    X.X.    ",
-"oX.X    oX.X    oX.X    oX.X    ",
-"    X.X.    X.X.    X.X.    X.X.",
-"    .XoX    .XoX    .XoX    .XoX",
-"    X.X.    X.X.    X.X.    X.X.",
-"    oX.X    oX.X    oX.X    oX.X",
-"X.X.    X.X.    X.X.    X.X.    ",
-".XoX    .XoX    .XoX    .XoX    ",
-"X.X.    X.X.    X.X.    X.X.    ",
-"oX.X    oX.X    oX.X    oX.X    ",
-"    X.X.    X.X.    X.X.    X.X.",
-"    .XoX    .XoX    .XoX    .XoX",
-"    X.X.    X.X.    X.X.    X.X.",
-"    oX.X    oX.X    oX.X    oX.X",
-"X.X.    X.X.    X.X.    X.X.    ",
-".XoX    .XoX    .XoX    .XoX    ",
-"X.X.    X.X.    X.X.    X.X.    ",
-"oX.X    oX.X    oX.X    oX.X    ",
-"    X.X.    X.X.    X.X.    X.X.",
-"    .XoX    .XoX    .XoX    .XoX",
-"    X.X.    X.X.    X.X.    X.X.",
-"    oX.X    oX.X    oX.X    oX.X"
-};
diff --git a/pixmaps/board48.png b/pixmaps/board48.png
new file mode 100644 (file)
index 0000000..f47e085
Binary files /dev/null and b/pixmaps/board48.png differ
diff --git a/pixmaps/board48.xpm b/pixmaps/board48.xpm
deleted file mode 100644 (file)
index 5aec594..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/* XPM */
-static char *board__[] = {
-/* columns rows colors chars-per-pixel */
-"48 48 4 1",
-"  c #000000",
-". c #FFFF00",
-"X c #808080",
-"o c #FFFFFF",
-/* pixels */
-"X.X.X.      X.X.X.      X.X.X.      X.X.X.      ",
-".XoX.X      .XoX.X      .XoX.X      .XoX.X      ",
-"X.X.X.      X.X.X.      X.X.X.      X.X.X.      ",
-"oX.XoX      oX.XoX      oX.XoX      oX.XoX      ",
-"X.X.X.      X.X.X.      X.X.X.      X.X.X.      ",
-".XoX.X      .XoX.X      .XoX.X      .XoX.X      ",
-"      X.X.X.      X.X.X.      X.X.X.      X.X.X.",
-"      .XoX.X      .XoX.X      .XoX.X      .XoX.X",
-"      X.X.X.      X.X.X.      X.X.X.      X.X.X.",
-"      oX.XoX      oX.XoX      oX.XoX      oX.XoX",
-"      X.X.X.      X.X.X.      X.X.X.      X.X.X.",
-"      .XoX.X      .XoX.X      .XoX.X      .XoX.X",
-"X.X.X.      X.X.X.      X.X.X.      X.X.X.      ",
-".XoX.X      .XoX.X      .XoX.X      .XoX.X      ",
-"X.X.X.      X.X.X.      X.X.X.      X.X.X.      ",
-"oX.XoX      oX.XoX      oX.XoX      oX.XoX      ",
-"X.X.X.      X.X.X.      X.X.X.      X.X.X.      ",
-".XoX.X      .XoX.X      .XoX.X      .XoX.X      ",
-"      X.X.X.      X.X.X.      X.X.X.      X.X.X.",
-"      .XoX.X      .XoX.X      .XoX.X      .XoX.X",
-"      X.X.X.      X.X.X.      X.X.X.      X.X.X.",
-"      oX.XoX      oX.XoX      oX.XoX      oX.XoX",
-"      X.X.X.      X.X.X.      X.X.X.      X.X.X.",
-"      .XoX.X      .XoX.X      .XoX.X      .XoX.X",
-"X.X.X.      X.X.X.      X.X.X.      X.X.X.      ",
-".XoX.X      .XoX.X      .XoX.X      .XoX.X      ",
-"X.X.X.      X.X.X.      X.X.X.      X.X.X.      ",
-"oX.XoX      oX.XoX      oX.XoX      oX.XoX      ",
-"X.X.X.      X.X.X.      X.X.X.      X.X.X.      ",
-".XoX.X      .XoX.X      .XoX.X      .XoX.X      ",
-"      X.X.X.      X.X.X.      X.X.X.      X.X.X.",
-"      .XoX.X      .XoX.X      .XoX.X      .XoX.X",
-"      X.X.X.      X.X.X.      X.X.X.      X.X.X.",
-"      oX.XoX      oX.XoX      oX.XoX      oX.XoX",
-"      X.X.X.      X.X.X.      X.X.X.      X.X.X.",
-"      .XoX.X      .XoX.X      .XoX.X      .XoX.X",
-"X.X.X.      X.X.X.      X.X.X.      X.X.X.      ",
-".XoX.X      .XoX.X      .XoX.X      .XoX.X      ",
-"X.X.X.      X.X.X.      X.X.X.      X.X.X.      ",
-"oX.XoX      oX.XoX      oX.XoX      oX.XoX      ",
-"X.X.X.      X.X.X.      X.X.X.      X.X.X.      ",
-".XoX.X      .XoX.X      .XoX.X      .XoX.X      ",
-"      X.X.X.      X.X.X.      X.X.X.      X.X.X.",
-"      .XoX.X      .XoX.X      .XoX.X      .XoX.X",
-"      X.X.X.      X.X.X.      X.X.X.      X.X.X.",
-"      oX.XoX      oX.XoX      oX.XoX      oX.XoX",
-"      X.X.X.      X.X.X.      X.X.X.      X.X.X.",
-"      .XoX.X      .XoX.X      .XoX.X      .XoX.X",
-};
diff --git a/pixmaps/cross32.png b/pixmaps/cross32.png
new file mode 100644 (file)
index 0000000..ccad759
Binary files /dev/null and b/pixmaps/cross32.png differ
diff --git a/pixmaps/cross32.xpm b/pixmaps/cross32.xpm
deleted file mode 100644 (file)
index 425c3a5..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/* XPM */
-static char *cross[] = {
-/* columns rows colors chars-per-pixel */
-"32 32 4 1",
-"  c #000000",
-". c #FF0000",
-"X c #0000FF",
-"o c #FFFFFF",
-/* pixels */
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
-"X     oooooooooooooooooooooooooX",
-"X     oo.ooooooooooooooooooooooX",
-"X     o...ooooooo...oooooooooooX",
-"X     oo.ooooooooooooooooooooooX",
-"X     oooooooooooooooooooooooooX",
-"Xooooo     ooooooooooooooooooooX",
-"Xooooo     oooooooooooo.oooooooX",
-"Xo...o     ooooooooooo...ooooooX",
-"Xooooo     oooooooooooo.oooooooX",
-"Xooooo     ooooooooooooooooooooX",
-"Xoooooooooo     oooooooooooooooX",
-"Xoooooooooo     o...oooooooooooX",
-"Xoooooooooo     oooooooooooo.ooX",
-"Xoooooooooo     o...ooooooo...oX",
-"Xoooooooooo     oooooooooooo.ooX",
-"Xooooooooooooooo     ooooooooooX",
-"Xoo.oooooooo...o     ooooooooooX",
-"Xo...ooooooooooo     ooooooooooX",
-"Xoo.oooooooo...o     ooooooooooX",
-"Xooooooooooooooo     ooooooooooX",
-"Xoooooooooooooooooooo     oooooX",
-"Xoooooooooooooooooooo     oo.ooX",
-"Xoooooo...ooooooooooo     o...oX",
-"Xoooooooooooooooooooo     oo.ooX",
-"Xoooooooooooooooooooo     oooooX",
-"Xooooooooooooooooooooooooo     X",
-"Xooooooooooo...ooooooooooo     X",
-"Xooooooooooooooooooooo...o     X",
-"Xooooooooooooooooooooooooo     X",
-"Xooooooooooooooooooooooooo     X",
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
-};
diff --git a/pixmaps/cross48.png b/pixmaps/cross48.png
new file mode 100644 (file)
index 0000000..5247864
Binary files /dev/null and b/pixmaps/cross48.png differ
diff --git a/pixmaps/cross48.xpm b/pixmaps/cross48.xpm
deleted file mode 100644 (file)
index 47b629b..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/* XPM */
-static char *cross[] = {
-/* columns rows colors chars-per-pixel */
-"48 48 4 1",
-"  c #000000",
-". c #FF0000",
-"X c #0000FF",
-"o c #FFFFFF",
-/* pixels */
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
-"XXooooooooooooooooooooooooooooooooooooooooooooXX",
-"XXo       ooooooooooooooooooooooooooooooooooooXX",
-"XXo       ooo.ooooooooooooooooooooooooooooooooXX",
-"XXo       ooo.ooooooooooooooooooooooooooooooooXX",
-"XXo       o.....ooooooooo.....ooooooooooooooooXX",
-"XXo       ooo.ooooooooooooooooooooooooooooooooXX",
-"XXo       ooo.ooooooooooooooooooooooooooooooooXX",
-"XXo       ooooooooooooooooooooooooooooooooooooXX",
-"XXoooooooo       oooooooooooooooooooooooooooooXX",
-"XXoooooooo       ooooooooooooooooo.oooooooooooXX",
-"XXoooooooo       ooooooooooooooooo.oooooooooooXX",
-"XXoo.....o       ooooooooooooooo.....oooooooooXX",
-"XXoooooooo       ooooooooooooooooo.oooooooooooXX",
-"XXoooooooo       ooooooooooooooooo.oooooooooooXX",
-"XXoooooooo       oooooooooooooooooooooooooooooXX",
-"XXooooooooooooooo       ooooooooooooooooooooooXX",
-"XXooooooooooooooo       ooooooooooooooooo.ooooXX",
-"XXooooooooooooooo       o.....ooooooooooo.ooooXX",
-"XXooooooooooooooo       ooooooooooooooo.....ooXX",
-"XXooooooooooooooo       o.....ooooooooooo.ooooXX",
-"XXooooooooooooooo       ooooooooooooooooo.ooooXX",
-"XXooooooooooooooo       ooooooooooooooooooooooXX",
-"XXoooooooooooooooooooooo       oooooooooooooooXX",
-"XXoooo.ooooooooooooooooo       oooooooooooooooXX",
-"XXoooo.ooooooooooo.....o       oooooooooooooooXX",
-"XXoo.....ooooooooooooooo       oooooooooooooooXX",
-"XXoooo.ooooooooooo.....o       oooooooooooooooXX",
-"XXoooo.ooooooooooooooooo       oooooooooooooooXX",
-"XXoooooooooooooooooooooo       oooooooooooooooXX",
-"XXooooooooooooooooooooooooooooo       ooooooooXX",
-"XXooooooooooooooooooooooooooooo       ooo.ooooXX",
-"XXooooooooooooooooooooooooooooo       ooo.ooooXX",
-"XXooooooooo.....ooooooooooooooo       o.....ooXX",
-"XXooooooooooooooooooooooooooooo       ooo.ooooXX",
-"XXooooooooooooooooooooooooooooo       ooo.ooooXX",
-"XXooooooooooooooooooooooooooooo       ooooooooXX",
-"XXoooooooooooooooooooooooooooooooooooo       oXX",
-"XXoooooooooooooooooooooooooooooooooooo       oXX",
-"XXoooooooooooooooooooooooooooooooooooo       oXX",
-"XXoooooooooooooooo.....ooooooooo.....o       oXX",
-"XXoooooooooooooooooooooooooooooooooooo       oXX",
-"XXoooooooooooooooooooooooooooooooooooo       oXX",
-"XXoooooooooooooooooooooooooooooooooooo       oXX",
-"XXooooooooooooooooooooooooooooooooooooooooooooXX",
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
-};
diff --git a/pixmaps/ini32.png b/pixmaps/ini32.png
new file mode 100644 (file)
index 0000000..ce8af9c
Binary files /dev/null and b/pixmaps/ini32.png differ
diff --git a/pixmaps/ini32.xpm b/pixmaps/ini32.xpm
deleted file mode 100644 (file)
index b6a7968..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/* XPM */
-static char *nld33[] = {
-/* columns rows colors chars-per-pixel */
-"32 32 3 1",
-"  c black",
-". c transparent",
-"X c white",
-/* pixels */
-"................................",
-"................................",
-"................................",
-".........  ...  ................",
-"......... X . XX ...............",
-"......... XX  XX   .............",
-"......... X   XX XX  ...........",
-"......... X XXXXXXXXX  .........",
-"........ XXXXXXXXXXXXX  ........",
-"........ X  XXXXXXXXXXX  .......",
-"....... X XXXXXXXXXXXXXX  ......",
-"....... X XXXXXXXX XXXXX  ......",
-"...... XXXXXXXXXXX XXXXXX  .....",
-"...... XXXXXXXXXXX XXXXXX  .....",
-"..... XXXXXXXXXXXX XXXXXXX  ....",
-"..... XXXXXXXXXXX XXXXXXXX  ....",
-".... XXXXXXXXXX   XXXXXXXX  ....",
-".... XXXXXXXXX .. XXXXXXXXX  ...",
-"... X XXXXXX  ... XXXXXXXXX  ...",
-"... X XXXXX .... XXXXXXXXXX  ...",
-"... XXX XX ..... XXXXXXXXXX  ...",
-"... XXX X ..... XXXXXXXXXXXX ...",
-"....     ..... XXXXXXXXXXXXX  ..",
-"............. XXXXXXXXXXXXXX  ..",
-"............ XXXXXXXXXXXXXXX  ..",
-"........... XXXXXXXXXXXXXXXX  ..",
-"........... XXXXXXXXXXXXXXXX  ..",
-".......... XXXXXXXXXXXXXXXXX  ..",
-".......... XXXXXXXXXXXXXXXXX  ..",
-"..........                    ..",
-"................................",
-"................................"
-};
diff --git a/pixmaps/ini48.png b/pixmaps/ini48.png
new file mode 100644 (file)
index 0000000..ea0415e
Binary files /dev/null and b/pixmaps/ini48.png differ
diff --git a/pixmaps/ini48.xpm b/pixmaps/ini48.xpm
deleted file mode 100644 (file)
index 4e0434f..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/* XPM */
-static char *nld49[] = {
-/* columns rows colors chars-per-pixel */
-"48 48 3 1",
-"  c black",
-". c transparent",
-"X c whit",
-/* pixels */
-"................................................",
-"................................................",
-"................................................",
-"............ ........ ..........................",
-"............   ..... X .........................",
-"............ XX .... XX ........................",
-"............ XXX .. XXX ........................",
-"............ XXXX   XXX    .....................",
-"............. XX  X XXX XXX   ..................",
-"............ XX XXXXXXXXXXXXXX  ................",
-"........... XXXXXXXXXXXXXXXXXXXX ...............",
-".......... XXXXXXXXXXXXXXXXXXXXXX  .............",
-".......... XXXXXXXXXXXXXXXXXXXXXXX  ............",
-"......... XXXXX XXXXXXXXXXXXXXXXXXX  ...........",
-"......... XXX  XXXXXXXXXXXXXXXXXXXXX  ..........",
-"......... XXX XXXXXXXXXXXXXXXXXXXXXXX ..........",
-"......... XX XXXXXXXXXXXXXXXXXXXXXXXX  .........",
-"........ XXXXXXXXXXXXXXXX XXXXXXXXXXXX  ........",
-"........ XXXXXXXXXXXXXXXX XXXXXXXXXXXX  ........",
-"........ XXXXXXXXXXXXXXXX XXXXXXXXXXXXX  .......",
-"....... XXXXXXXXXXXXXXXXX XXXXXXXXXXXXX  .......",
-"....... XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX .......",
-"...... XXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX  ......",
-"..... XXXXXXXXXXXXXXXXX . XXXXXXXXXXXXXX  ......",
-"..... XXXXXXXXXXXXXXXX .. XXXXXXXXXXXXXXX ......",
-".... XXXXXXXXXXXXXXX  ... XXXXXXXXXXXXXXX  .....",
-".... XXXXXXXXXXXXXX ..... XXXXXXXXXXXXXXX  .....",
-"... XX  XXXXXXXXX  ...... XXXXXXXXXXXXXXX  .....",
-"... XX XXXXXXXXX ....... XXXXXXXXXXXXXXXXX .....",
-"... XXXXXXXXXXX ........ XXXXXXXXXXXXXXXXX  ....",
-"... XXXXXX XXX ........ XXXXXXXXXXXXXXXXXX  ....",
-"... XXXXX XXX ........ XXXXXXXXXXXXXXXXXXX  ....",
-".... XXXX XX ........ XXXXXXXXXXXXXXXXXXXX  ....",
-".....     X ........ XXXXXXXXXXXXXXXXXXXXX  ....",
-"..........  ....... XXXXXXXXXXXXXXXXXXXXXXX ....",
-".................. XXXXXXXXXXXXXXXXXXXXXXXX  ...",
-".................. XXXXXXXXXXXXXXXXXXXXXXXX  ...",
-"................. XXXXXXXXXXXXXXXXXXXXXXXXX  ...",
-"................ XXXXXXXXXXXXXXXXXXXXXXXXXX  ...",
-"............... XXXXXXXXXXXXXXXXXXXXXXXXXXX  ...",
-"............... XXXXXXXXXXXXXXXXXXXXXXXXXXX  ...",
-".............. XXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...",
-".............. XXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...",
-".............. XXXXXXXXXXXXXXXXXXXXXXXXXXXX  ...",
-"..............                              ....",
-"................................................",
-"................................................",
-"................................................"
-};
index 3f9d403..e6ea5ac 100644 (file)
Binary files a/png/xqboard.png and b/png/xqboard.png differ
index ce00dd2..a985ef3 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 ru tr uk vi zh_CN zh_HK zh_TW
+da de es it nl ru tr uk vi zh_CN zh_HK zh_TW
index e5d42a6..0c2e38f 100644 (file)
--- a/po/da.po
+++ b/po/da.po
@@ -21,237 +21,239 @@ 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-01-05 12:51-0800\n"
+"POT-Creation-Date: 2014-01-19 22:19-0800\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:820
+#: args.h:833
 #, c-format
 msgid "%s in settings file\n"
 msgstr "%s i indstillingsfil\n"
 
-#: args.h:830
+#: args.h:867
 #, c-format
 msgid "Bad integer value %s"
 msgstr "Forkert heltalsværdi %s"
 
-#: args.h:923 args.h:1170
+#: args.h:968 args.h:1229
 #, c-format
 msgid "Unrecognized argument %s"
 msgstr "Ikke genkendt argument %s"
 
-#: args.h:954
+#: args.h:999
 #, c-format
 msgid "No value provided for argument %s"
 msgstr "Ingen værdi givet for argumentet %s"
 
-#: args.h:1014
+#: args.h:1059
 #, c-format
 msgid "Incomplete \\ escape in value for %s"
 msgstr "Ukomplet \\-undvigesekvens i værdi for %s"
 
-#: args.h:1125
+#: args.h:1170
 #, c-format
 msgid "Failed to open indirection file %s"
 msgstr "Åbning af inkluderet fil \"%s\" mislykkedes"
 
-#: args.h:1142
+#: args.h:1187
 #, c-format
 msgid "Unrecognized boolean argument value %s"
 msgstr "Ikke genkendt boolesk argumentværdi %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
-#: backend.c:744
+#: backend.c:800
 msgid "first"
 msgstr "første"
 
 #. 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:747
+#: backend.c:803
 msgid "second"
 msgstr "det andet"
 
-#: backend.c:827
+#: backend.c:885
 #, c-format
 msgid "protocol version %d not supported"
 msgstr "protokolversion %d er ikke understøttet"
 
-#: backend.c:933
+#: backend.c:991
 msgid "You did not specify the engine executable"
 msgstr "Du angav ikke et kørbart skakprogram"
 
-#: backend.c:989
+#: backend.c:1049
 #, c-format
 msgid "bad timeControl option %s"
 msgstr "forkert timeControl-tilvalg %s"
 
-#: backend.c:1004
+#: backend.c:1064
 #, c-format
 msgid "bad searchTime option %s"
 msgstr "forkert searchTime-tilvalg %s"
 
-#: backend.c:1110
+#: backend.c:1170
 #, c-format
 msgid "Variant %s supported only in ICS mode"
 msgstr "Varianten %s er kun understøttet i ICS-tilstand"
 
-#: backend.c:1128
+#: backend.c:1188
 #, c-format
 msgid "Unknown variant name %s"
 msgstr "Ukendt variantnavn %s"
 
-#: backend.c:1375
+#: backend.c:1439
 msgid "Starting chess program"
 msgstr "Starter skakprogram"
 
-#: backend.c:1398
+#: backend.c:1462
 msgid "Bad game file"
 msgstr "Fejl i partifil"
 
-#: backend.c:1405
+#: backend.c:1469
 msgid "Bad position file"
 msgstr "Fejl i stillingsfil"
 
-#: backend.c:1419
+#: backend.c:1483
 msgid "Pick new game"
 msgstr "Vælg nyt spil"
 
 # cycle = runde?
-#: backend.c:1488
+#: backend.c:1552
+#, fuzzy
 msgid ""
-"You restarted an already completed tourney\n"
-"One more cycle will now be added to it\n"
-"Games commence in 10 sec"
+"You restarted an already completed tourney.\n"
+"One more cycle will now be added to it.\n"
+"Games commence in 10 sec."
 msgstr ""
 "Du genstartede en allerede afsluttet turnering\n"
 "En mere cyklus vil nu blive tilføjet\n"
 "Partierne starter om 10 sekunder"
 
-#: backend.c:1495
+#: backend.c:1559
 #, c-format
 msgid "All games in tourney '%s' are already played or playing"
 msgstr "Alle partier i turneringen \"%s\" er allerede færdige eller i gang"
 
-#: backend.c:1502
+#: backend.c:1566
 msgid "Can't have a match with no chess programs"
 msgstr "Kan ikke have en match uden skakprogrammer"
 
-#: backend.c:1539
+#: backend.c:1620
 #, c-format
 msgid "Could not open comm port %s"
 msgstr "Kunne ikke åbne seriel port %s"
 
-#: backend.c:1542
+#: backend.c:1623
 #, c-format
 msgid "Could not connect to host %s, port %s"
 msgstr "Kunne ikke forbinde til vært %s, port %s"
 
-#: backend.c:1598
+#: backend.c:1679
 #, c-format
 msgid "Unknown initialMode %s"
 msgstr "Ukendt initialMode %s"
 
-#: backend.c:1624
+#: backend.c:1705
 msgid "AnalyzeFile mode requires a game file"
 msgstr "AnalyzeFile-tilstand kræver en partifil"
 
-#: backend.c:1651
+#: backend.c:1732
 msgid "Analysis mode requires a chess engine"
 msgstr "Analysetilstand kræver et skakprogram"
 
-#: backend.c:1655
+#: backend.c:1736
 msgid "Analysis mode does not work with ICS mode"
 msgstr "Analysetilstand virker ikke sammen med ICS-tilstand"
 
-#: backend.c:1666
+#: backend.c:1747
 msgid "MachineWhite mode requires a chess engine"
 msgstr "MachineWhite-tilstand kræver et skakprogram"
 
-#: backend.c:1671
+#: backend.c:1752
 msgid "MachineWhite mode does not work with ICS mode"
 msgstr "MachineWhite-tilstand virker ikke sammen med ICS-tilstand"
 
-#: backend.c:1678
+#: backend.c:1759
 msgid "MachineBlack mode requires a chess engine"
 msgstr "MachineBlack-tilstand kræver et skakprogram"
 
-#: backend.c:1683
+#: backend.c:1764
 msgid "MachineBlack mode does not work with ICS mode"
 msgstr "MachineBlack-tilstand virker ikke sammen med ICS-tilstand"
 
-#: backend.c:1690
+#: backend.c:1771
 msgid "TwoMachines mode requires a chess engine"
 msgstr "TwoMachines-tilstand kræver et skakprogram"
 
-#: backend.c:1695
+#: backend.c:1776
 msgid "TwoMachines mode does not work with ICS mode"
 msgstr "TwoMachines-tilstand virker ikke sammen med ICS-tilstand"
 
-#: backend.c:1706
+#: backend.c:1787
 msgid "Training mode requires a game file"
 msgstr "Træningstilstand kræver en partifil"
 
-#: backend.c:1869 backend.c:1924 backend.c:1947 backend.c:2346
+#: backend.c:1950 backend.c:2005 backend.c:2028 backend.c:2430
 msgid "Error writing to ICS"
 msgstr "Fejl ved skrivning til ICS"
 
-#: backend.c:1884
+#: backend.c:1965
 msgid "Error reading from keyboard"
 msgstr "Fejl ved læsning fra tastatur"
 
-#: backend.c:1887
+#: backend.c:1968
 msgid "Got end of file from keyboard"
 msgstr "Fik filafslutning fra tastatur"
 
-#: backend.c:2192
+#: backend.c:2276
 #, c-format
 msgid "Unknown wild type %d"
 msgstr "Ukendt vild type %d"
 
-#: backend.c:2263 usystem.c:329
+#: backend.c:2347 usystem.c:329
 msgid "Error writing to display"
 msgstr "Fejl ved skrivning til skærm"
 
-#: backend.c:3019
+#. TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers
+#: backend.c:3105
 #, c-format
 msgid "your opponent kibitzes: %s"
 msgstr "din modstander kommenterer: %s"
 
-#: backend.c:3548
+#: backend.c:3634
 msgid "Error gathering move list: two headers"
 msgstr "Fejl ved tolkning af trækliste: to teksthoveder"
 
-#: backend.c:3595
+#: backend.c:3681
 msgid "Error gathering move list: nested"
 msgstr "Fejl ved tolkning af trækliste: indlejret"
 
-#: backend.c:3699 backend.c:4117 backend.c:4321 backend.c:4880 backend.c:4884
-#: backend.c:6900 backend.c:12101 backend.c:13816 backend.c:13893
-#: backend.c:13939 backend.c:13945 backend.c:13950 backend.c:13955
+#: backend.c:3785 backend.c:4203 backend.c:4407 backend.c:4966 backend.c:4970
+#: backend.c:7073 backend.c:12577 backend.c:14306 backend.c:14383
+#: backend.c:14429 backend.c:14435 backend.c:14440 backend.c:14445
 msgid "vs."
 msgstr "–"
 
-#: backend.c:3827
+#: backend.c:3913
 msgid "Illegal move (rejected by ICS)"
 msgstr "Ulovligt træk (afvist af ICS)"
 
-#: backend.c:4165
+#: backend.c:4251
 msgid "Connection closed by ICS"
 msgstr "Forbindelse lukket af ICS"
 
-#: backend.c:4167
+#: backend.c:4253
 msgid "Error reading from ICS"
 msgstr "Fejl ved læsning fra ICS"
 
-#: backend.c:4244
+#: backend.c:4330
 #, c-format
 msgid ""
 "Failed to parse board string:\n"
@@ -260,108 +262,124 @@ msgstr ""
 "Fortolkning af brætstreng mislykkedes:\n"
 "\"%s\""
 
-#: backend.c:4253 backend.c:9756
+#: backend.c:4339 backend.c:10203
 msgid "Game too long; increase MAX_MOVES and recompile"
 msgstr "Parti for langt; forøg MAX_MOVES og genoversæt"
 
-#: backend.c:4372
+#: backend.c:4458
 msgid "Error gathering move list: extra board"
 msgstr "Fejl ved tolkning af trækliste: ekstra bræt"
 
-#: backend.c:4804 backend.c:4826
+#: backend.c:4890 backend.c:4912
 #, c-format
 msgid "Couldn't parse move \"%s\" from ICS"
 msgstr "Kunne ikke fortolke \"%s\" fra ICS"
 
-#: backend.c:5063
+#: backend.c:5161
 #, c-format
 msgid "say Internal error; bad moveType %d (%d,%d-%d,%d)"
 msgstr "say Intern fejl; forkert moveType%d (%d,%d-%d,%d)"
 
-#: backend.c:5133
+#: backend.c:5232
 msgid "You cannot do this while you are playing or observing"
 msgstr "Du kan ikke gøre dette, mens du spiller eller observerer"
 
-#: backend.c:6029
+#: backend.c:6174
 msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!"
 msgstr "Genoversæt for at understøtte denne BOARD_RANKS eller BOARD_FILES!"
 
-#: backend.c:6491
+#: backend.c:6664
 msgid "You are playing Black"
 msgstr "Du spiller sort"
 
-#: backend.c:6500 backend.c:6527
+#: backend.c:6673 backend.c:6700
 msgid "You are playing White"
 msgstr "Du spiller hvid"
 
-#: backend.c:6509 backend.c:6535 backend.c:6655 backend.c:6680 backend.c:6696
-#: backend.c:14592
+#: backend.c:6682 backend.c:6708 backend.c:6828 backend.c:6853 backend.c:6869
+#: backend.c:15113
 msgid "It is White's turn"
 msgstr "Det er hvids tur"
 
-#: backend.c:6513 backend.c:6539 backend.c:6663 backend.c:6686 backend.c:6717
-#: backend.c:14584
+#: backend.c:6686 backend.c:6712 backend.c:6836 backend.c:6859 backend.c:6890
+#: backend.c:15105
 msgid "It is Black's turn"
 msgstr "Det er sorts tur"
 
-#: backend.c:6552
+#: backend.c:6725
 msgid "Displayed position is not current"
 msgstr "Den viste stilling er ikke den aktuelle"
 
-#: backend.c:6790
+#: backend.c:6963
 msgid "Illegal move"
 msgstr "Ulovligt træk"
 
-#: backend.c:6857
+#: backend.c:7030
 msgid "End of game"
 msgstr "Slutningen af partiet"
 
-#: backend.c:6860
+#: backend.c:7033
 msgid "Incorrect move"
 msgstr "Ukorrekt træk"
 
-#: backend.c:7169 backend.c:7296
+#: backend.c:7423 backend.c:7569
 msgid "Pull pawn backwards to under-promote"
 msgstr "Træk bonde baglæns for at underforvandle"
 
-#: backend.c:7527
+#: backend.c:7532
+msgid "only marked squares are legal"
+msgstr ""
+
+#: backend.c:7820
 msgid "Swiss tourney finished"
 msgstr "Svejtserturnering afsluttet"
 
-#: backend.c:8103
+#: backend.c:8336
+msgid "could not load EGBB library"
+msgstr ""
+
+#: backend.c:8339
+msgid "wrong EGBB version"
+msgstr ""
+
+#: backend.c:8452
 msgid "Invalid pairing from pairing engine"
 msgstr "Ikke tilladt parring fra parringsprogram"
 
-#: backend.c:8236
+#: backend.c:8603
 #, c-format
 msgid "Illegal move \"%s\" from %s machine"
 msgstr "Ulovligt træk \"%s\" fra %s skakprogram"
 
-#: backend.c:8457
+#: backend.c:8849
 msgid "Bad FEN received from engine"
 msgstr "Fejl i FEN modtaget fra skakprogram"
 
-#: backend.c:8601 backend.c:13681 backend.c:13746
+#: backend.c:8950
+msgid "Engine did not send setup for non-standard variant"
+msgstr ""
+
+#: backend.c:9023 backend.c:14168 backend.c:14236
 #, c-format
 msgid "%s does not support analysis"
 msgstr "%s understøtter ikke analyse"
 
-#: backend.c:8667
+#: backend.c:9089
 #, c-format
 msgid "Illegal move \"%s\" (rejected by %s chess program)"
 msgstr "Ulovligt træk \"%s\" (afvist af %s skakprogram)"
 
-#: backend.c:8694
+#: backend.c:9116
 #, c-format
 msgid "Failed to start %s chess program %s on %s: %s\n"
 msgstr "Fejl ved start af %s skakprogram %s på %s: %s\n"
 
-#: backend.c:8715
+#: backend.c:9137
 #, c-format
 msgid "Hint: %s"
 msgstr "Tip: %s"
 
-#: backend.c:8720
+#: backend.c:9142
 #, c-format
 msgid ""
 "Illegal hint move \"%s\"\n"
@@ -370,59 +388,66 @@ msgstr ""
 "Ulovligt tip om træk \"%s\"\n"
 "fra %s skakprogram"
 
-#: backend.c:8895
+#: backend.c:9317
 msgid "Machine accepts your draw offer"
 msgstr "Skakprogrammet accepterer dit remistilbud"
 
-#: backend.c:8898
+#: backend.c:9320
+#, fuzzy
 msgid ""
-"Machine offers a draw\n"
-"Select Action / Draw to agree"
+"Machine offers a draw.\n"
+"Select Action / Draw to accept."
 msgstr ""
 "Skakprogrammet tilbyder remis\n"
 "Vælg Handlinger / Remis for at acceptere"
 
-#: backend.c:8977
+#. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone
+#: backend.c:9402
 msgid "failed writing PV"
 msgstr "skrivning af analysevariant mislykkedes"
 
-#: backend.c:9275
+#: backend.c:9701
 #, c-format
 msgid "Ambiguous move in ICS output: \"%s\""
 msgstr "Flertydigt træk i ICS-output: \"%s\""
 
-#: backend.c:9285
+#: backend.c:9711
 #, c-format
 msgid "Illegal move in ICS output: \"%s\""
 msgstr "Ulovligt træk i ICS-output: \"%s\""
 
-#: backend.c:9296
+#: backend.c:9722
 msgid "Gap in move list"
 msgstr "Hul i trækliste"
 
-#: backend.c:9917 dialogs.c:460
+#: backend.c:10357
 #, c-format
 msgid "Variant %s not supported by %s"
 msgstr "Variant %s understøttes ikke af %s"
 
-#: backend.c:10038
+#: backend.c:10364
+#, c-format
+msgid ", but %s is"
+msgstr ""
+
+#: backend.c:10506
 #, c-format
 msgid "Startup failure on '%s'"
 msgstr "Opstartsfejl på \"%s\""
 
-#: backend.c:10069
+#: backend.c:10537
 msgid "Waiting for first chess program"
 msgstr "Venter på første skakprogram"
 
-#: backend.c:10074 backend.c:13964
+#: backend.c:10542 backend.c:14454
 msgid "Waiting for second chess program"
 msgstr "Venter på andet skakprogram"
 
-#: backend.c:10123
+#: backend.c:10591
 msgid "Could not write on tourney file"
 msgstr "Kunne ikke skrive turneringsfil"
 
-#: backend.c:10197
+#: backend.c:10665
 msgid ""
 "You cannot replace an engine while it is engaged!\n"
 "Terminate its game first."
@@ -430,11 +455,11 @@ msgstr ""
 "Du kan ikke udskifte et skakprogram, mens det bruges!\n"
 "Afslut dets parti først."
 
-#: backend.c:10211
+#: backend.c:10679
 msgid "No engine with the name you gave is installed"
 msgstr "Der er ikke installeret et skakprogram med det angivne navn"
 
-#: backend.c:10213
+#: backend.c:10681
 msgid ""
 "First change an engine by editing the participants list\n"
 "of the Tournament Options dialog"
@@ -442,16 +467,16 @@ msgstr ""
 "Ændr først skakprogram ved at redigere deltagerlisten\n"
 "i turneringsindstillingerne"
 
-#: backend.c:10214
+#: backend.c:10682
 msgid "You can only change one engine at the time"
 msgstr "Du kan kun ændre et skakprogram ad gangen"
 
-#: backend.c:10229 backend.c:10376
+#: backend.c:10697 backend.c:10845
 #, fuzzy, c-format
 msgid "No engine %s is installed"
 msgstr "Der er ikke installeret et skakprogram med det angivne navn"
 
-#: backend.c:10249
+#: backend.c:10717
 msgid ""
 "You must supply a tournament file,\n"
 "for storing the tourney progress"
@@ -459,115 +484,115 @@ msgstr ""
 "Du skal angive en turneringsfil\n"
 "til at gemme turneringens afvikling"
 
-#: backend.c:10259
+#: backend.c:10727
 msgid "Not enough participants"
 msgstr "Der er ikke nok deltagere"
 
-#: backend.c:10460
+#: backend.c:10929
 msgid "Bad tournament file"
 msgstr "Fejl i turneringsfil"
 
-#: backend.c:10472
+#: backend.c:10941
 msgid "Waiting for other game(s)"
 msgstr "Venter på andet parti/andre partier"
 
-#: backend.c:10485
+#: backend.c:10954
 msgid "No pairing engine specified"
 msgstr "Der er ikke noget parringsprogram specificeret"
 
-#: backend.c:10962
+#: backend.c:11430
 #, c-format
 msgid "Match %s vs. %s: final score %d-%d-%d"
 msgstr "Match %s - %s: slutscore %d-%d-%d"
 
-#: backend.c:11424 backend.c:11455
+#: backend.c:11897 backend.c:11928
 #, c-format
 msgid "Illegal move: %d.%s%s"
 msgstr "Ulovligt træk: %d.%s%s"
 
-#: backend.c:11444
+#: backend.c:11917
 #, c-format
 msgid "Ambiguous move: %d.%s%s"
 msgstr "Flertydigt træk: %d.%s%s"
 
-#: backend.c:11497 backend.c:12524 backend.c:12717 backend.c:13078
+#: backend.c:11971 backend.c:13010 backend.c:13203 backend.c:13567
 #, c-format
 msgid "Can't open \"%s\""
 msgstr "Kan ikke åbne \"%s\""
 
-#: backend.c:11509 menus.c:116
+#: backend.c:11983 menus.c:116
 msgid "Cannot build game list"
 msgstr "Kan ikke konstruere partiliste"
 
-#: backend.c:11594
+#: backend.c:12068
 msgid "No more games in this message"
 msgstr "Der er ikke flere partier i denne besked"
 
-#: backend.c:11634
+#: backend.c:12108
 msgid "No game has been loaded yet"
 msgstr "Der er endnu ingen indlæste partier"
 
-#: backend.c:11638 backend.c:12505 ngamelist.c:129
+#: backend.c:12112 backend.c:12991 ngamelist.c:129
 msgid "Can't back up any further"
 msgstr "Kan ikke gå længere tilbage"
 
-#: backend.c:12077
+#: backend.c:12553
 msgid "Game number out of range"
 msgstr "Partinummer findes ikke"
 
-#: backend.c:12088
+#: backend.c:12564
 msgid "Can't seek on game file"
 msgstr "Kan ikke spole i partifil"
 
-#: backend.c:12146
+#: backend.c:12622
 msgid "Game not found in file"
 msgstr "Parti ikke fundet i fil"
 
-#: backend.c:12274 backend.c:12601
+#: backend.c:12751 backend.c:13087
 msgid "Bad FEN position in file"
 msgstr "Fejl i FEN-stilling i fil"
 
-#: backend.c:12426
+#: backend.c:12903
 msgid "No moves in game"
 msgstr "Ingen træk i partiet"
 
-#: backend.c:12501
+#: backend.c:12987
 msgid "No position has been loaded yet"
 msgstr "Ingen stilling er endnu indlæst"
 
-#: backend.c:12562 backend.c:12573
+#: backend.c:13048 backend.c:13059
 msgid "Can't seek on position file"
 msgstr "Kan ikke spole i stillingsfil"
 
-#: backend.c:12580 backend.c:12592
+#: backend.c:13066 backend.c:13078
 msgid "Position not found in file"
 msgstr "Stilling er ikke fundet i fil"
 
-#: backend.c:12632
+#: backend.c:13118
 msgid "Black to play"
 msgstr "Sort i trækket"
 
-#: backend.c:12635
+#: backend.c:13121
 msgid "White to play"
 msgstr "Hvid i trækket"
 
-#: backend.c:12722 backend.c:13083
+#: backend.c:13208 backend.c:13572
 msgid "Waiting for access to save file"
 msgstr "Venter på adgang til gemmefil"
 
-#: backend.c:12724
+#: backend.c:13210
 msgid "Saving game"
 msgstr "Gemmer parti"
 
-#: backend.c:12725
+#: backend.c:13211
 msgid "Bad Seek"
 msgstr "Søgning mislykkedes"
 
-#: backend.c:13085
+#: backend.c:13574
 msgid "Saving position"
 msgstr "Gemmer stilling"
 
-#: backend.c:13211
+#: backend.c:13700
 msgid ""
 "You have edited the game history.\n"
 "Use Reload Same Game and make your move again."
@@ -575,7 +600,7 @@ msgstr ""
 "Du har redigeret i parti-historikken.\n"
 "Genindlæs partiet og udfør trækket igen."
 
-#: backend.c:13216
+#: backend.c:13705
 msgid ""
 "You have entered too many moves.\n"
 "Back up to the correct position and try again."
@@ -583,7 +608,7 @@ msgstr ""
 "Du har indtastet for mange træk.\n"
 "Gå tilbage til den aktuelle stilling og prøv igen."
 
-#: backend.c:13221
+#: backend.c:13710
 msgid ""
 "Displayed position is not current.\n"
 "Step forward to the correct position and try again."
@@ -591,11 +616,11 @@ msgstr ""
 "Den viste stilling er ikke den aktuelle.\n"
 "Gå fremad til den korrekte stilling og prøv igen."
 
-#: backend.c:13268
+#: backend.c:13757
 msgid "You have not made a move yet"
 msgstr "Du har ikke trukket endnu"
 
-#: backend.c:13289
+#: backend.c:13778
 msgid ""
 "The cmail message is not loaded.\n"
 "Use Reload CMail Message and make your move again."
@@ -603,11 +628,11 @@ msgstr ""
 "Cmail-beskeden er ikke indlæst.\n"
 "Brug Genindlæs CMail-besked og lav dit træk igen."
 
-#: backend.c:13294
+#: backend.c:13783
 msgid "No unfinished games"
 msgstr "Der er ingen uafsluttede partier"
 
-#: backend.c:13300
+#: backend.c:13789
 #, c-format
 msgid ""
 "You have already mailed a move.\n"
@@ -622,211 +647,213 @@ msgstr ""
 "\"cmail -remail -game %s\"\n"
 "på kommandolinjen."
 
-#: backend.c:13315
+#: backend.c:13804
 msgid "Failed to invoke cmail"
 msgstr "Start af cmail mislykkedes"
 
-#: backend.c:13377
+#: backend.c:13866
 #, c-format
 msgid "Waiting for reply from opponent\n"
 msgstr "Venter på svar fra modstander\n"
 
-#: backend.c:13399
+#: backend.c:13888
 #, c-format
 msgid "Still need to make move for game\n"
 msgstr "Der er stadig nødvendigt at trække i partiet\n"
 
-#: backend.c:13403
+#: backend.c:13892
 #, c-format
 msgid "Still need to make moves for both games\n"
 msgstr "Der er stadig nødvendigt at trække i begge partier\n"
 
-#: backend.c:13407
+#: backend.c:13896
 #, c-format
 msgid "Still need to make moves for all %d games\n"
 msgstr "Der er stadig nødvendigt at trække i alle %d partier\n"
 
-#: backend.c:13414
+#: backend.c:13903
 #, c-format
 msgid "Still need to make a move for game %s\n"
 msgstr "Der er stadig nødvendigt at trække i partiet %s\n"
 
-#: backend.c:13420
+#: backend.c:13909
 #, c-format
 msgid "No unfinished games\n"
 msgstr "Der er ingen uafsluttede partier\n"
 
-#: backend.c:13422
+#: backend.c:13911
 #, c-format
 msgid "Ready to send mail\n"
 msgstr "Klar til at sende e-mail\n"
 
-#: backend.c:13427
+#: backend.c:13916
 #, c-format
 msgid "Still need to make moves for games %s\n"
 msgstr "Der er stadig nødvendigt at trække i partierne %s\n"
 
-#: backend.c:13631
+#: backend.c:14118
 msgid "Edit comment"
 msgstr "Redigér kommentar"
 
-#: backend.c:13633
+#: backend.c:14120
 #, c-format
 msgid "Edit comment on %d.%s%s"
 msgstr "Redigér kommentar til %d.%s%s"
 
-#: backend.c:13688
+#: backend.c:14175
 #, c-format
 msgid "You are not observing a game"
 msgstr "Du observerer ikke et parti"
 
-#: backend.c:13796
+#: backend.c:14286
 msgid "It is not White's turn"
 msgstr "Hvid er ikke i trækket"
 
-#: backend.c:13877
+#: backend.c:14367
 msgid "It is not Black's turn"
 msgstr "Sort er ikke i trækket"
 
-#: backend.c:13985
+#: backend.c:14475
 #, c-format
 msgid "Starting %s chess program"
 msgstr "Starter %s skakprogram"
 
-#: backend.c:14013 backend.c:15127
+#: backend.c:14503 backend.c:15648
+#, fuzzy
 msgid ""
 "Wait until your turn,\n"
-"or select Move Now"
+"or select 'Move Now'."
 msgstr ""
 "Vent på din tur,\n"
 "eller vælg Træk nu"
 
-#: backend.c:14147
+#: backend.c:14638
 msgid "Training mode off"
 msgstr "Træningstilstand fra"
 
-#: backend.c:14155
+#: backend.c:14646
 msgid "Training mode on"
 msgstr "Træningstilstand til"
 
-#: backend.c:14158
+#: backend.c:14649
 msgid "Already at end of game"
 msgstr "Allerede ved slutningen af partiet"
 
-#: backend.c:14238
+#: backend.c:14729
 msgid "Warning: You are still playing a game"
 msgstr "Advarsel: Du spiller stadig et parti"
 
-#: backend.c:14241
+#: backend.c:14732
 msgid "Warning: You are still observing a game"
 msgstr "Advarsel: Du observerer stadig et parti"
 
-#: backend.c:14244
+#: backend.c:14735
 msgid "Warning: You are still examining a game"
 msgstr "Advarsel: Du undersøger stadig et parti"
 
-#: backend.c:14311
+#: backend.c:14802
 msgid "Click clock to clear board"
 msgstr ""
 
-#: backend.c:14321
+#: backend.c:14812
 msgid "Close ICS engine analyze..."
 msgstr "Lukker skakprogram til ICS-analyse ..."
 
-#: backend.c:14609
+#: backend.c:15130
 msgid "That square is occupied"
 msgstr "Det felt er besat"
 
-#: backend.c:14633 backend.c:14659
+#: backend.c:15154 backend.c:15180
 msgid "There is no pending offer on this move"
 msgstr "Der er ingen aktuelle tilbud ved dette træk"
 
-#: backend.c:14695 backend.c:14706
+#: backend.c:15216 backend.c:15227
 msgid "Your opponent is not out of time"
 msgstr "Din modstander har ikke overskredet tiden"
 
-#: backend.c:14772
+#: backend.c:15293
 msgid "You must make your move before offering a draw"
 msgstr "Du skal trække før du tilbyder remis"
 
-#: backend.c:15109
+#: backend.c:15630
 msgid "You are not examining a game"
 msgstr "Du undersøger ikke et parti"
 
-#: backend.c:15113
+#: backend.c:15634
 msgid "You can't revert while pausing"
 msgstr "Du kan ikke annullere variantlinje under pause"
 
-#: backend.c:15167 backend.c:15174
+#: backend.c:15688 backend.c:15695
 msgid "It is your turn"
 msgstr "Det er dig som er i trækket"
 
-#: backend.c:15225 backend.c:15232 backend.c:15285 backend.c:15292
-msgid "Wait until your turn"
+#: backend.c:15746 backend.c:15753 backend.c:15806 backend.c:15813
+#, fuzzy
+msgid "Wait until your turn."
 msgstr "Vent til du kommer i trækket"
 
-#: backend.c:15237
+#: backend.c:15758
 msgid "No hint available"
 msgstr "Tip er ikke tilgængeligt"
 
-#: backend.c:15253 ngamelist.c:355
+#: backend.c:15774 ngamelist.c:355
 msgid "Game list not loaded or empty"
 msgstr "Partiliste ikke indlæst eller tom"
 
-#: backend.c:15260
+#: backend.c:15781
 msgid "Book file exists! Try again for overwrite."
 msgstr ""
 
-#: backend.c:15738
+#: backend.c:16259
 #, c-format
 msgid "Error writing to %s chess program"
 msgstr "Fejl ved skrivning til %s skakprogram"
 
-#: backend.c:15741 backend.c:15772
+#: backend.c:16262 backend.c:16293
 #, c-format
 msgid "%s program exits in draw position (%s)"
 msgstr "%s program afslutter i remisstilling (%s)"
 
-#: backend.c:15767
+#: backend.c:16288
 #, c-format
 msgid "Error: %s chess program (%s) exited unexpectedly"
 msgstr "Fejl: %s skakprogram (%s) afsluttede uventet"
 
-#: backend.c:15785
+#: backend.c:16306
 #, c-format
 msgid "Error reading from %s chess program (%s)"
 msgstr "Fejl ved læsning fra %s skakprogram (%s)"
 
-#: backend.c:16187
+#: backend.c:16730
 #, c-format
 msgid "%s engine has too many options\n"
 msgstr "%s skakprogram har for mange tilvalg\n"
 
-#: backend.c:16343
+#: backend.c:16886
 msgid "Displayed move is not current"
 msgstr "Det viste træk er ikke det aktuelle"
 
-#: backend.c:16352
+#: backend.c:16895
 msgid "Could not parse move"
 msgstr "Kunne ikke fortolke træk"
 
-#: backend.c:16477 backend.c:16499
+#: backend.c:17020 backend.c:17042
 msgid "Both flags fell"
 msgstr "Begge flag er faldet"
 
-#: backend.c:16479
+#: backend.c:17022
 msgid "White's flag fell"
 msgstr "Hvids flag er faldet"
 
-#: backend.c:16501
+#: backend.c:17044
 msgid "Black's flag fell"
 msgstr "Sorts flag er faldet"
 
-#: backend.c:16632
+#: backend.c:17175
 msgid "Clock adjustment not allowed in auto-flag mode"
 msgstr "Det er ikke tilladt er stille på uret i auto-flag-tilstand"
 
-#: backend.c:17467
+#: backend.c:18025
 msgid "Bad FEN position in clipboard"
 msgstr "Fejl i FEN-stilling i udklipsholder"
 
@@ -847,633 +874,680 @@ msgstr "Hashnøgler er forskellige"
 msgid "Could not create book"
 msgstr "Kunne ikke fortolke træk"
 
-#: dialogs.c:259
+#: dialogs.c:283
 #, fuzzy
 msgid "Tournament file:          "
 msgstr "Turneringsfil:"
 
-#: dialogs.c:260
+#: dialogs.c:284
+#, fuzzy
+msgid "For concurrent playing of tourney with multiple XBoards:"
+msgstr "Synkronisér efter cyklus    turnering med flere XBoard'er)"
+
+#: dialogs.c:285
 msgid "Sync after round"
 msgstr ""
 
-#: dialogs.c:261
-#, fuzzy
-msgid "    (for concurrent playing of a single"
-msgstr "Synkronisér efter runde    (for samtidig afvikling af en"
-
-#: dialogs.c:262
+#: dialogs.c:286
 msgid "Sync after cycle"
 msgstr ""
 
-#: dialogs.c:263
-#, fuzzy
-msgid "      tourney with multiple XBoards)"
-msgstr "Synkronisér efter cyklus    turnering med flere XBoard'er)"
-
-#: dialogs.c:264
+#: dialogs.c:287
 msgid "Tourney participants:"
 msgstr "Turneringsdeltagere:"
 
-#: dialogs.c:265
+#: dialogs.c:288
 msgid "Select Engine:"
 msgstr "Vælg skakprogram:"
 
-#: dialogs.c:273
+#: dialogs.c:296
 msgid "Tourney type (0 = round-robin, 1 = gauntlet):"
 msgstr "Turneringstype (0 = alle mod alle, 1 = en imod resten):"
 
-#: dialogs.c:274
+#: dialogs.c:297
 msgid "Number of tourney cycles (or Swiss rounds):"
 msgstr "Antal cyklusser i turneringen (eller svejtserrunder):"
 
-#: dialogs.c:275
+#: dialogs.c:298
 msgid "Default Number of Games in Match (or Pairing):"
 msgstr "Standard for antal partier i match (eller parring):"
 
-#: dialogs.c:276
+#: dialogs.c:299
 msgid "Pause between Match Games (msec):"
 msgstr "Pause imellem matchpartier (millisekunder):"
 
-#: dialogs.c:277
+#: dialogs.c:300
 msgid "Save Tourney Games on:"
 msgstr "Gem turneringspartier i:"
 
-#: dialogs.c:278
+#: dialogs.c:301
 msgid "Game File with Opening Lines:"
 msgstr "Partifil med åbninger:"
 
-#: dialogs.c:279
+#: dialogs.c:302
 msgid "Game Number (-1 or -2 = Auto-Increment):"
 msgstr "Partinummer (-1 eller -2 = automatisk forøgelse):"
 
-#: dialogs.c:280
+#: dialogs.c:303
 msgid "File with Start Positions:"
 msgstr "Fil med startstillinger:"
 
-#: dialogs.c:281
+#: dialogs.c:304
 msgid "Position Number (-1 or -2 = Auto-Increment):"
 msgstr "Stillingsnummer (-1 eller -2 = automatisk forøgelse):"
 
-#: dialogs.c:282
+#: dialogs.c:305
 msgid "Rewind Index after this many Games (0 = never):"
 msgstr "Genstart nummering efter dette antal partier (0 = aldrig):"
 
-#: dialogs.c:283
+#: dialogs.c:306
 msgid "Disable own engine books by default"
 msgstr "Deaktivér skakprogrammets egen åbningsbog som standard"
 
-#: dialogs.c:284
+#: dialogs.c:307 dialogs.c:1565
+msgid "Time Control"
+msgstr "Betænkningstid"
+
+#: dialogs.c:308
+#, fuzzy
+msgid "Common Engine"
+msgstr "Skakprogram ...    Alt+Shift+U"
+
+#: dialogs.c:309 dialogs.c:441
+msgid "General Options"
+msgstr "Generelle indstillinger"
+
+#: dialogs.c:310
+msgid "Continue Later"
+msgstr ""
+
+#: dialogs.c:311
 msgid "Replace Engine"
 msgstr "Udskift skakprogram"
 
-#: dialogs.c:285
+#: dialogs.c:312
 msgid "Upgrade Engine"
 msgstr "Opgradér skakprogram"
 
-#: dialogs.c:286
+#: dialogs.c:313
 msgid "Clone Tourney"
 msgstr "Kopiér turnering"
 
-#: dialogs.c:316
+#: dialogs.c:351
 msgid "First you must specify an existing tourney file to clone"
 msgstr "Du skal angive en eksisterende turneringsfil til at kopiere"
 
-#: dialogs.c:332 dialogs.c:1320
+#: dialogs.c:367 dialogs.c:1407
 msgid "# no engines are installed"
 msgstr ""
 
-#: dialogs.c:344
-msgid "Match Options"
-msgstr "Matchindstillinger"
+#: dialogs.c:375
+msgid "Internal error: PARTICIPANTS set wrong"
+msgstr ""
+
+#: dialogs.c:383
+#, fuzzy
+msgid "Tournament Options"
+msgstr "Lydindstillinger"
 
-#: dialogs.c:363
+#: dialogs.c:402
 msgid "Absolute Analysis Scores"
 msgstr "Absolutte analysescorer"
 
-#: dialogs.c:364
+#: dialogs.c:403
 msgid "Almost Always Queen (Detour Under-Promote)"
 msgstr "Næsten altid dronning (Omvejs-underforvandling)"
 
-#: dialogs.c:365 menus.c:714
+#: dialogs.c:404 menus.c:714
 msgid "Animate Dragging"
 msgstr "Animeret trækudførelse"
 
-#: dialogs.c:366 menus.c:715
+#: dialogs.c:405 menus.c:715
 msgid "Animate Moving"
 msgstr "Animeret flytning"
 
-#: dialogs.c:367 menus.c:716
+#: dialogs.c:406 menus.c:716
 msgid "Auto Flag"
 msgstr "Automatisk annoncering af tidsoverskridelse"
 
-#: dialogs.c:368 menus.c:717
+#: dialogs.c:407 menus.c:717
 msgid "Auto Flip View"
 msgstr "Automatisk vending af brættet"
 
-#: dialogs.c:369 menus.c:718
+#: dialogs.c:408 menus.c:718
 msgid "Blindfold"
 msgstr "Blindskak"
 
 # Menu til indsætning af brik på brættet i babyskak mv.
-#: dialogs.c:370
+#. 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 "Placér brik-menu"
 
-#: dialogs.c:371
+#: dialogs.c:411
 msgid "Enable Variation Trees"
 msgstr ""
 
-#: dialogs.c:372
+#: dialogs.c:412
+msgid "Headers in Engine Output Window"
+msgstr ""
+
+#: dialogs.c:413
 msgid "Hide Thinking from Human"
 msgstr "Skjul tænkning fra menneske"
 
-#: dialogs.c:373 menus.c:723
+#: dialogs.c:414 menus.c:723
 msgid "Highlight Last Move"
 msgstr "Fremhæv sidste træk"
 
-#: dialogs.c:374
+#: dialogs.c:415
 msgid "Highlight with Arrow"
 msgstr "Fremhæv med pil"
 
-#: dialogs.c:375 menus.c:726
+#: dialogs.c:416 menus.c:726
 msgid "One-Click Moving"
 msgstr "Ét-klikstræk"
 
-#: dialogs.c:376
+#: dialogs.c:417
 msgid "Periodic Updates (in Analysis Mode)"
 msgstr "Periodisk opdatering (i analysetilstand)"
 
-#: dialogs.c:378
+#: dialogs.c:419
 msgid "Play Move(s) of Clicked PV (Analysis)"
 msgstr ""
 
 # ... mens modstanderen er i trækket
-#: dialogs.c:379 dialogs.c:514 menus.c:728
+#: dialogs.c:420 dialogs.c:597 menus.c:728
 msgid "Ponder Next Move"
 msgstr "Spekulér på næste træk"
 
-#: dialogs.c:380
+#: dialogs.c:421
 msgid "Popup Exit Messages"
 msgstr "Pop op med afslutningsbeskeder"
 
-#: dialogs.c:381 menus.c:730
+#: dialogs.c:422 menus.c:730
 msgid "Popup Move Errors"
 msgstr "Pop op ved trækfejl"
 
-#: dialogs.c:382
+#: dialogs.c:423
 msgid "Scores in Move List"
 msgstr "Scorer i trækliste"
 
-#: dialogs.c:383
+#: dialogs.c:424
 msgid "Show Coordinates"
 msgstr "Vis koordinater"
 
-#: dialogs.c:384
+#: dialogs.c:425
 msgid "Show Target Squares"
 msgstr "Vis målfelter"
 
-#: dialogs.c:385
+#: dialogs.c:426
 msgid "Sticky Windows"
 msgstr "Klæbrige vinduer"
 
-#: dialogs.c:386 menus.c:733
+#: dialogs.c:427 menus.c:733
 msgid "Test Legality"
 msgstr "Test lovlighed"
 
-#: dialogs.c:387
+#: dialogs.c:428
 msgid "Top-Level Dialogs"
 msgstr ""
 
-#: dialogs.c:388
+#: dialogs.c:429
 msgid "Flash Moves (0 = no flashing):"
 msgstr "Blink ved træk (0 = ingen blink):"
 
-#: dialogs.c:389
+#: dialogs.c:430
 msgid "Flash Rate (high = fast):"
 msgstr "Blinkhastighed (høj = hurtig):"
 
-#: dialogs.c:390
+#: dialogs.c:431
 msgid "Animation Speed (high = slow):"
 msgstr "Animeringshastighed (høj = langsom):"
 
-#: dialogs.c:391
+#: dialogs.c:432
 msgid "Zoom factor in Evaluation Graph:"
 msgstr "Zoomfaktor i evalueringsgraf:"
 
-#: dialogs.c:400
-msgid "General Options"
-msgstr "Generelle indstillinger"
-
-#: dialogs.c:410
-msgid "normal"
+#: dialogs.c:452
+#, fuzzy
+msgid "Normal"
 msgstr "normal"
 
-#: dialogs.c:411
-msgid "makruk"
+#: dialogs.c:453
+msgid "Makruk"
 msgstr ""
 
-#: dialogs.c:412
+#: dialogs.c:454
 msgid "FRC"
 msgstr "skak960"
 
-#: dialogs.c:413
-msgid "shatranj"
+#: dialogs.c:455
+msgid "Shatranj"
 msgstr ""
 
-#: dialogs.c:414
-msgid "wild castle"
+#: dialogs.c:456
+msgid "Wild castle"
 msgstr ""
 
-#: dialogs.c:415
-msgid "knightmate"
-msgstr ""
+#: dialogs.c:457
+#, fuzzy
+msgid "Knightmate"
+msgstr "Springer"
 
-#: dialogs.c:416
-msgid "no castle"
+#: dialogs.c:458
+msgid "No castle"
 msgstr ""
 
-#: dialogs.c:417
-msgid "cylinder *"
+#: dialogs.c:459
+msgid "Cylinder *"
 msgstr ""
 
-#: dialogs.c:418
+#: dialogs.c:460
 msgid "3-checks"
 msgstr ""
 
-#: dialogs.c:419
+#: dialogs.c:461
 msgid "berolina *"
 msgstr ""
 
-#: dialogs.c:420
+#: dialogs.c:462
 msgid "atomic"
 msgstr ""
 
-#: dialogs.c:421
+#: dialogs.c:463
 msgid "two kings"
 msgstr ""
 
-#: dialogs.c:422
+#: dialogs.c:464
+msgid " "
+msgstr ""
+
+#: dialogs.c:465
+msgid "Spartan"
+msgstr ""
+
+#: dialogs.c:466
 msgid "Board size ( -1 = default for selected variant):"
 msgstr "Brætstørrelse (-1 = standard for valgt variant):"
 
-#: dialogs.c:423
+#: dialogs.c:467
 msgid "Number of Board Ranks:"
 msgstr "Antal brætrækker:"
 
-#: dialogs.c:424
+#: dialogs.c:468
 msgid "Number of Board Files:"
 msgstr "Antal brætlinjer:"
 
-#: dialogs.c:425
+#: dialogs.c:469
 msgid "Holdings Size:"
 msgstr "Depotstørrelse:"
 
-#: dialogs.c:429
-msgid "fairy"
+#: dialogs.c:471
+msgid ""
+"Variants marked with * can only be played\n"
+"with legality testing off."
 msgstr ""
 
-#: dialogs.c:430
+#: dialogs.c:473
+msgid "ASEAN"
+msgstr ""
+
+#: dialogs.c:474
 msgid "Great Shatranj (10x8)"
 msgstr ""
 
-#: dialogs.c:431
+#: dialogs.c:475
 msgid "Seirawan"
 msgstr ""
 
-#: dialogs.c:432
-msgid "falcon (10x8)"
+#: dialogs.c:476
+msgid "Falcon (10x8)"
 msgstr ""
 
-#: dialogs.c:433
+#: dialogs.c:477
 msgid "Superchess"
 msgstr ""
 
-#: dialogs.c:434
+#: dialogs.c:478
 msgid "Capablanca (10x8)"
 msgstr ""
 
-#: dialogs.c:435
-msgid "crazyhouse"
+#: dialogs.c:479
+msgid "Crazyhouse"
 msgstr ""
 
-#: dialogs.c:436
+#: dialogs.c:480
 msgid "Gothic (10x8)"
 msgstr ""
 
-#: dialogs.c:437
-msgid "bughouse"
+#: dialogs.c:481
+msgid "Bughouse"
 msgstr ""
 
-#: dialogs.c:438
-msgid "janus (10x8)"
+#: dialogs.c:482
+msgid "Janus (10x8)"
 msgstr ""
 
-#: dialogs.c:439
-msgid "suicide"
+#: dialogs.c:483
+msgid "Suicide"
 msgstr ""
 
-#: dialogs.c:440
+#: dialogs.c:484
 msgid "CRC (10x8)"
 msgstr ""
 
-#: dialogs.c:441
+#: dialogs.c:485
 msgid "give-away"
 msgstr ""
 
-#: dialogs.c:442
+#: dialogs.c:486
 msgid "grand (10x10)"
 msgstr ""
 
-#: dialogs.c:443
+#: dialogs.c:487
 msgid "losers"
 msgstr ""
 
-#: dialogs.c:444
+#: dialogs.c:488
 msgid "shogi (9x9)"
 msgstr ""
 
-#: dialogs.c:445
-msgid "Spartan"
+#: dialogs.c:489
+msgid "fairy"
 msgstr ""
 
-#: dialogs.c:446
+#: dialogs.c:490
 msgid "xiangqi (9x10)"
 msgstr ""
 
-#: dialogs.c:447
-msgid " "
+#: dialogs.c:491
+msgid "mighty lion"
 msgstr ""
 
-#: dialogs.c:448
+#: dialogs.c:492
 msgid "courier (12x8)"
 msgstr ""
 
-#: dialogs.c:465
+#: dialogs.c:493
+msgid "chu chess (10x10)"
+msgstr ""
+
+#: dialogs.c:494
+msgid "chu shogi (12x12)"
+msgstr ""
+
+#: dialogs.c:526
 #, c-format
 msgid "Warning: second engine (%s) does not support this!"
 msgstr "Advarsel: det andet skakprogram (%s) understøtter ikke dette!"
 
-#: dialogs.c:488
+#: dialogs.c:554
 #, c-format
-msgid "Only bughouse is not available in viewer mode"
+msgid "Only bughouse is not available in viewer mode."
 msgstr ""
 
-#: dialogs.c:489
+#: dialogs.c:555
 #, c-format
 msgid ""
-"All variants not supported by first engine\n"
-"(currently %s) are disabled"
+"All variants not supported by the first engine\n"
+"(currently %s) are disabled."
 msgstr ""
 
-#: dialogs.c:490
+#: dialogs.c:572
 msgid "New Variant"
 msgstr "Ny variant"
 
-#: dialogs.c:515
+#: dialogs.c:598
 msgid "Maximum Number of CPUs per Engine:"
 msgstr "Maksimalt antal CPU'er pr. skakprogram:"
 
-#: dialogs.c:516
+#: dialogs.c:599
 msgid "Polygot Directory:"
 msgstr "Polyglot-katalog:"
 
-#: dialogs.c:517
+#: dialogs.c:600
 msgid "Hash-Table Size (MB):"
 msgstr "Hashtabel-størrelse (MB):"
 
-#: dialogs.c:518
+#: dialogs.c:601
 msgid "Nalimov EGTB Path:"
 msgstr "Sti til Nalimov-EGTB:"
 
-#: dialogs.c:519
+#: dialogs.c:602
 msgid "EGTB Cache Size (MB):"
 msgstr "EGTB-cachestørrelse (MB):"
 
-#: dialogs.c:520
+#: dialogs.c:603
 msgid "Use GUI Book"
 msgstr "Brug GUI's åbningsbog"
 
-#: dialogs.c:521
+#: dialogs.c:604
 msgid "Opening-Book Filename:"
 msgstr "Åbningsbogsfilnavn:"
 
-#: dialogs.c:522
+#: dialogs.c:605
 msgid "Book Depth (moves):"
 msgstr "Åbningsbogsdybde (træk):"
 
-#: dialogs.c:523
+#: dialogs.c:606
 msgid "Book Variety (0) vs. Strength (100):"
 msgstr "Åbningsbogvariation (0) vs. styrke (100):"
 
-#: dialogs.c:524
+#: dialogs.c:607
 msgid "Engine #1 Has Own Book"
 msgstr "Skakprogram nr. 1 har egen åbningsbog"
 
-#: dialogs.c:525
+#: dialogs.c:608
 msgid "Engine #2 Has Own Book          "
 msgstr "Skakprogram nr. 2 har egen åbningsbog"
 
-#: dialogs.c:534
+#: dialogs.c:617
 msgid "Common Engine Settings"
 msgstr "Indstillinger for skakprogrammer"
 
-#: dialogs.c:540
+#: dialogs.c:623
 msgid "Detect all Mates"
 msgstr "Find alle matter"
 
-#: dialogs.c:541
+#: dialogs.c:624
 msgid "Verify Engine Result Claims"
 msgstr "Efterprøv resultatangivelser fra skakprogrammer"
 
-#: dialogs.c:542
+#: dialogs.c:625
 msgid "Draw if Insufficient Mating Material"
 msgstr "Remis ved utilstrækkeligt matsættende materiale"
 
-#: dialogs.c:543
+#: dialogs.c:626
 msgid "Adjudicate Trivial Draws (3-Move Delay)"
 msgstr "Døm trivielle remiser (3-træks forsinkelse)"
 
-#: dialogs.c:544
+#: dialogs.c:627
 msgid "N-Move Rule:"
 msgstr "N-træksregel:"
 
-#: dialogs.c:545
+#: dialogs.c:628
 msgid "N-fold Repeats:"
 msgstr "N-gange gentagelser:"
 
-#: dialogs.c:546
+#: dialogs.c:629
 msgid "Draw after N Moves Total:"
 msgstr "Remis efter i alt N træk:"
 
-#: dialogs.c:547
+#: dialogs.c:630
 msgid "Win / Loss Threshold:"
 msgstr "Gevinst/tabs-tærskel:"
 
-#: dialogs.c:548
+#: dialogs.c:631
 msgid "Negate Score of Engine #1"
 msgstr "Negér skakprogram nr. 1's score"
 
-#: dialogs.c:549
+#: dialogs.c:632
 msgid "Negate Score of Engine #2"
 msgstr "Negér skakprogram nr. 2's score"
 
-#: dialogs.c:556
+#: dialogs.c:639
 msgid "Adjudicate non-ICS Games"
 msgstr "Døm ikke-ICS partier"
 
-#: dialogs.c:569
+#: dialogs.c:652
 msgid "Auto-Kibitz"
 msgstr "Send kommentarer fra skakprogram"
 
-#: dialogs.c:570
+#: dialogs.c:653
 msgid "Auto-Comment"
 msgstr "Gem kommentarer til træk"
 
-#: dialogs.c:571
+#: dialogs.c:654
 msgid "Auto-Observe"
 msgstr "Observér automatisk"
 
-#: dialogs.c:572
+#: dialogs.c:655
 msgid "Auto-Raise Board"
 msgstr "Bræt øverst ved partistart"
 
-#: dialogs.c:573
+#: dialogs.c:656
 msgid "Auto-Create Logon Script"
 msgstr ""
 
-#: dialogs.c:574
+#: dialogs.c:657
 msgid "Background Observe while Playing"
 msgstr "Obsevér i baggrunden når der spilles"
 
-#: dialogs.c:575
+#: dialogs.c:658
 msgid "Dual Board for Background-Observed Game"
 msgstr "Andet bræt til baggrundsobservede partier"
 
-#: dialogs.c:576
+#: dialogs.c:659
 msgid "Get Move List"
 msgstr "Hent trækliste"
 
-#: dialogs.c:577
+#: dialogs.c:660
 msgid "Quiet Play"
 msgstr "Stille spil"
 
-#: dialogs.c:578
+#: dialogs.c:661
 msgid "Seek Graph"
 msgstr "Søgegraf"
 
-#: dialogs.c:579
+#: dialogs.c:662
 msgid "Auto-Refresh Seek Graph"
 msgstr "Automatisk opdatering af søgegraf"
 
-#: dialogs.c:580
+#: dialogs.c:663
 msgid "Auto-InputBox PopUp"
 msgstr ""
 
-#: dialogs.c:581
+#: dialogs.c:664
+#, fuzzy
+msgid "Quit after game"
+msgstr "Venter på andet parti/andre partier"
+
+#: dialogs.c:665
 msgid "Premove"
 msgstr "Forhåndstræk"
 
-#: dialogs.c:582
+#: dialogs.c:666
 msgid "Premove for White"
 msgstr "Forhåndstræk for hvid"
 
-#: dialogs.c:583
+#: dialogs.c:667
 msgid "First White Move:"
 msgstr "Hvids første træk:"
 
-#: dialogs.c:584
+#: dialogs.c:668
 msgid "Premove for Black"
 msgstr "Forhåndstræk for sort"
 
-#: dialogs.c:585
+#: dialogs.c:669
 msgid "First Black Move:"
 msgstr "Sorts første træk:"
 
-#: dialogs.c:587
+#: dialogs.c:671
 msgid "Alarm"
 msgstr "Alarm"
 
-#: dialogs.c:588
+#: dialogs.c:672
 msgid "Alarm Time (msec):"
 msgstr "Alarmtid (millisekunder):"
 
-#: dialogs.c:590
+#: dialogs.c:674
 msgid "Colorize Messages"
 msgstr "Farv meddelelser"
 
-#: dialogs.c:591
+#: dialogs.c:675
 msgid "Shout Text Colors:"
 msgstr "Tekstfarver for råb:"
 
-#: dialogs.c:592
+#: dialogs.c:676
 msgid "S-Shout Text Colors:"
 msgstr "Tekstfarver for s-råb:"
 
-#: dialogs.c:593
+#: dialogs.c:677
 msgid "Channel #1 Text Colors:"
 msgstr "Tekstfarver for kanal nr. 1:"
 
-#: dialogs.c:594
+#: dialogs.c:678
 msgid "Other Channel Text Colors:"
 msgstr "Tekstfarver for andre kanaler:"
 
-#: dialogs.c:595
+#: dialogs.c:679
 msgid "Kibitz Text Colors:"
 msgstr "Tekstfarver for kommentar:"
 
-#: dialogs.c:596
+#: dialogs.c:680
 msgid "Tell Text Colors:"
 msgstr "Tekstfarver for tale:"
 
-#: dialogs.c:597
+#: dialogs.c:681
 msgid "Challenge Text Colors:"
 msgstr "Tekstfarver for udfordring:"
 
-#: dialogs.c:598
+#: dialogs.c:682
 msgid "Request Text Colors:"
 msgstr "Tekstfarver for forespørgsel:"
 
-#: dialogs.c:599
+#: dialogs.c:683
 msgid "Seek Text Colors:"
 msgstr "Tekstfarver for søgning:"
 
-#: dialogs.c:606
+#: dialogs.c:690
 msgid "ICS Options"
 msgstr "ICS-indstillinger"
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Exact position match"
 msgstr "Eksakt stilling"
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Shown position is subset"
 msgstr "Viste stilling er en delmængde"
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Same material with exactly same Pawn chain"
 msgstr "Samme materiale med samme bondestruktur"
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Same material"
 msgstr "Samme materiale"
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Material range (top board half optional)"
 msgstr "Materiale-interval (øverste halvdel af brættet valgfrit)"
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Material difference (optional stuff balanced)"
 msgstr "Materiale-forskel (balanceret valgfrit materiale)"
 
-#: dialogs.c:624
+#: dialogs.c:708
 msgid "Auto-Display Tags"
 msgstr "Automatisk visning af partidata"
 
-#: dialogs.c:625
+#: dialogs.c:709
 msgid "Auto-Display Comment"
 msgstr "Automatisk visning af kommentarer"
 
-#: dialogs.c:626
+#: dialogs.c:710
 msgid ""
 "Auto-Play speed of loaded games\n"
 "(0 = instant, -1 = off):"
@@ -1481,12 +1555,12 @@ msgstr ""
 "Hastighed af gennemspilning af indlæste partier\n"
 "(0 = øjeblikkeligt, -1 fra):"
 
-#: dialogs.c:627
+#: dialogs.c:711
 msgid "Seconds per Move:"
 msgstr "Sekunder pr. træk:"
 
 # Ingen grund til ikke at bruge stort begyndelsesbogstav her.
-#: dialogs.c:628
+#: dialogs.c:712
 msgid ""
 "\n"
 "options to use in game-viewer mode:"
@@ -1494,7 +1568,7 @@ msgstr ""
 "\n"
 "Indstillinger til brug ved gennemkigning af partier:"
 
-#: dialogs.c:630
+#: dialogs.c:714
 msgid ""
 "\n"
 "Thresholds for position filtering in game list:"
@@ -1502,716 +1576,725 @@ msgstr ""
 "\n"
 "Grænseværdier for stillingsfiltrering i partiliste:"
 
-#: dialogs.c:631
+#: dialogs.c:715
 msgid "Elo of strongest player at least:"
 msgstr "Stærkeste spillers rating er mindst:"
 
-#: dialogs.c:632
+#: dialogs.c:716
 msgid "Elo of weakest player at least:"
 msgstr "Svageste spillers rating er mindst:"
 
-#: dialogs.c:633
+#: dialogs.c:717
 msgid "No games before year:"
 msgstr "Ingen partier før år:"
 
-#: dialogs.c:634
+#: dialogs.c:718
 msgid "Minimum nr consecutive positions:"
 msgstr "Mindste antal stillinger i følge ad gangen:"
 
-#: dialogs.c:635
+#: dialogs.c:719
 msgid "Search mode:"
 msgstr "Søgemetode:"
 
-#: dialogs.c:636
+#: dialogs.c:720
 msgid "Also match reversed colors"
 msgstr "Match også omvendte farver"
 
-#: dialogs.c:637
+#: dialogs.c:721
 msgid "Also match left-right flipped position"
 msgstr "Match også spejlvendt stilling"
 
-#: dialogs.c:645
+#: dialogs.c:729
 msgid "Load Game Options"
 msgstr "Indstillinger for indlæsning af parti"
 
-#: dialogs.c:657
+#: dialogs.c:741
 msgid "Auto-Save Games"
 msgstr "Gem partier automatisk"
 
-#: dialogs.c:658
+#: dialogs.c:742
 msgid "Own Games Only"
 msgstr ""
 
-#: dialogs.c:659
+#: dialogs.c:743
 msgid "Save Games on File:"
 msgstr "Gem partier i filen:"
 
-#: dialogs.c:660
+#: dialogs.c:744
 msgid "Save Final Positions on File:"
 msgstr "Gem slutstillinger i filen:"
 
-#: dialogs.c:661
+#: dialogs.c:745
 msgid "PGN Event Header:"
 msgstr "Event-tekst i PGN-fil:"
 
-#: dialogs.c:662
+#: dialogs.c:746
 msgid "Old Save Style (as opposed to PGN)"
 msgstr "Gammel gemmestil (i modsætning til PGN)"
 
-#: dialogs.c:663
+#: dialogs.c:747
 msgid "Include Number Tag in tourney PGN"
 msgstr "Brug partinumre i PGN-fil for turnering"
 
-#: dialogs.c:664
+#: dialogs.c:748
 msgid "Save Score/Depth Info in PGN"
 msgstr "Gem score/dybde-information i PGN"
 
-#: dialogs.c:665
+#: dialogs.c:749
 msgid "Save Out-of-Book Info in PGN           "
 msgstr "Gem ud af åbningsbog-info i PGN      "
 
-#: dialogs.c:672
+#: dialogs.c:756
 msgid "Save Game Options"
 msgstr "Indstillinger for gemning af parti"
 
-#: dialogs.c:681
+#: dialogs.c:765
 msgid "No Sound"
 msgstr "Ingen lyd"
 
-#: dialogs.c:682
+#: dialogs.c:766
 msgid "Default Beep"
 msgstr "Standard bip"
 
-#: dialogs.c:683
+#: dialogs.c:767
 msgid "Above WAV File"
 msgstr "WAV-filen ovenfor"
 
-#: dialogs.c:684
+#: dialogs.c:768
 msgid "Car Horn"
 msgstr "Bilhorn"
 
-#: dialogs.c:685
+#: dialogs.c:769
 msgid "Cymbal"
 msgstr "Bækken"
 
-#: dialogs.c:686
+#: dialogs.c:770
 msgid "Ding"
 msgstr "Ding"
 
-#: dialogs.c:687
+#: dialogs.c:771
 msgid "Gong"
 msgstr "Gongon"
 
-#: dialogs.c:688
+#: dialogs.c:772
 msgid "Laser"
 msgstr "Laser"
 
-#: dialogs.c:689
+#: dialogs.c:773
 msgid "Penalty"
 msgstr "Straffe"
 
-#: dialogs.c:690
+#: dialogs.c:774
 msgid "Phone"
 msgstr "Telefon"
 
-#: dialogs.c:691
+#: dialogs.c:775
 msgid "Pop"
 msgstr "Plop"
 
-#: dialogs.c:692
+#: dialogs.c:776
+msgid "Roar"
+msgstr ""
+
+#: dialogs.c:777
 msgid "Slap"
 msgstr "Slag"
 
-#: dialogs.c:693
+#: dialogs.c:778
 msgid "Wood Thunk"
 msgstr "Dunk"
 
-#: dialogs.c:695
+#: dialogs.c:780
 msgid "User File"
 msgstr "Brugerfil"
 
-#: dialogs.c:717
+#: dialogs.c:803
 msgid "User WAV File:"
 msgstr "Bruger WAV-fil:"
 
-#: dialogs.c:718
+#: dialogs.c:804
 msgid "Sound Program:"
 msgstr "Lydprogram:"
 
-#: dialogs.c:719
+#: dialogs.c:805
 msgid "Try-Out Sound:"
 msgstr "Afprøv lyd:"
 
-#: dialogs.c:720
+#: dialogs.c:806
 msgid "Play"
 msgstr "Afspil"
 
-#: dialogs.c:721
+#: dialogs.c:807
 msgid "Move:"
 msgstr "Træk:"
 
-#: dialogs.c:722
+#: dialogs.c:808
 msgid "Win:"
 msgstr "Gevinst:"
 
-#: dialogs.c:723
+#: dialogs.c:809
 msgid "Lose:"
 msgstr "Tab:"
 
-#: dialogs.c:724
+#: dialogs.c:810
 msgid "Draw:"
 msgstr "Remis:"
 
-#: dialogs.c:725
+#: dialogs.c:811
 msgid "Unfinished:"
 msgstr "Uafsluttet:"
 
-#: dialogs.c:726
+#: dialogs.c:812
 msgid "Alarm:"
 msgstr "Alarm:"
 
-#: dialogs.c:727
+#: dialogs.c:813
 msgid "Challenge:"
 msgstr "Udfodring:"
 
-#: dialogs.c:729
+#: dialogs.c:815
 msgid "Sounds Directory:"
 msgstr "Lydkatalog:"
 
-#: dialogs.c:730
+#: dialogs.c:816
 msgid "Shout:"
 msgstr "Råb:"
 
-#: dialogs.c:731
+#: dialogs.c:817
 msgid "S-Shout:"
 msgstr "S-råb:"
 
-#: dialogs.c:732
+#: dialogs.c:818
 msgid "Channel:"
 msgstr "Kanal:"
 
-#: dialogs.c:733
+#: dialogs.c:819
 msgid "Channel 1:"
 msgstr "Kanal 1:"
 
-#: dialogs.c:734
+#: dialogs.c:820
 msgid "Tell:"
 msgstr "Tale:"
 
-#: dialogs.c:735
+#: dialogs.c:821
 msgid "Kibitz:"
 msgstr "Kommentar:"
 
-#: dialogs.c:736
+#: dialogs.c:822
 msgid "Request:"
 msgstr "Forespøgsel:"
 
-#: dialogs.c:737
+#: dialogs.c:823
+msgid "Lion roar:"
+msgstr ""
+
+#: dialogs.c:824
 msgid "Seek:"
 msgstr "Søgning:"
 
-#: dialogs.c:753
+#: dialogs.c:840
 msgid "Sound Options"
 msgstr "Lydindstillinger"
 
-#: dialogs.c:774
+#: dialogs.c:861
 msgid "White Piece Color:"
 msgstr "Farve for hvide brikker:"
 
 #. TRANSLATORS: R = single letter for the color red
-#: dialogs.c:777 dialogs.c:786 dialogs.c:792 dialogs.c:798 dialogs.c:804
-#: dialogs.c:810
+#: dialogs.c:864 dialogs.c:873 dialogs.c:879 dialogs.c:885 dialogs.c:891
+#: dialogs.c:897
 msgid "R"
 msgstr "R"
 
 #. TRANSLATORS: G = single letter for the color green
-#: dialogs.c:779 dialogs.c:787 dialogs.c:793 dialogs.c:799 dialogs.c:805
-#: dialogs.c:811
+#: dialogs.c:866 dialogs.c:874 dialogs.c:880 dialogs.c:886 dialogs.c:892
+#: dialogs.c:898
 msgid "G"
 msgstr "G"
 
 #. TRANSLATORS: B = single letter for the color blue
-#: dialogs.c:781 dialogs.c:788 dialogs.c:794 dialogs.c:800 dialogs.c:806
-#: dialogs.c:812
+#: dialogs.c:868 dialogs.c:875 dialogs.c:881 dialogs.c:887 dialogs.c:893
+#: dialogs.c:899
 msgid "B"
 msgstr "B"
 
 #. TRANSLATORS: D = single letter to make a color darker
-#: dialogs.c:783 dialogs.c:789 dialogs.c:795 dialogs.c:801 dialogs.c:807
-#: dialogs.c:813
+#: dialogs.c:870 dialogs.c:876 dialogs.c:882 dialogs.c:888 dialogs.c:894
+#: dialogs.c:900
 msgid "D"
 msgstr "M"
 
-#: dialogs.c:784
+#: dialogs.c:871
 msgid "Black Piece Color:"
 msgstr "Farve for sorte brikker:"
 
-#: dialogs.c:790
+#: dialogs.c:877
 msgid "Light Square Color:"
 msgstr "Farve for lyse felter:"
 
-#: dialogs.c:796
+#: dialogs.c:883
 msgid "Dark Square Color:"
 msgstr "Farve for mørke felter:"
 
-#: dialogs.c:802
+#: dialogs.c:889
 msgid "Highlight Color:"
 msgstr "Farve til fremhævelse:"
 
-#: dialogs.c:808
+#: dialogs.c:895
 msgid "Premove Highlight Color:"
 msgstr "Farve til forhåndstræk:"
 
-#: dialogs.c:814
+#: dialogs.c:901
 msgid "Flip Pieces Shogi Style        (Colored buttons restore default)"
 msgstr "Ombyt brikker som i shogi    (Farvede knapper gendanner standard)"
 
-#: dialogs.c:816
+#: dialogs.c:903
 msgid "Mono Mode"
 msgstr "Monokrom-tilstand"
 
-#: dialogs.c:817
-msgid "Line Gap ( -1 = default for board size):"
+#: dialogs.c:904
+#, fuzzy
+msgid "Line Gap (-1 = default for board size):"
 msgstr "Mellemrum mellem felter (-1 = standard for brætstørrelsen):"
 
-#: dialogs.c:818
+#: dialogs.c:905
 msgid "Use Board Textures"
 msgstr "Brug brætteksturer"
 
-#: dialogs.c:819
+#: dialogs.c:906
 msgid "Light-Squares Texture File:"
 msgstr "Teksturfil for lyse felter:"
 
-#: dialogs.c:820
+#: dialogs.c:907
 msgid "Dark-Squares Texture File:"
 msgstr "Teksturfil for mørke felter:"
 
-#: dialogs.c:821
+#: dialogs.c:908
 msgid "Use external piece bitmaps with their own colors"
 msgstr ""
 
-#: dialogs.c:822
+#: dialogs.c:909
 #, fuzzy
 msgid "Directory with Pieces Images:"
 msgstr "Katalog med bitmap-brikker:"
 
-#: dialogs.c:872
+#: dialogs.c:959
 msgid "Board Options"
 msgstr "Brætindstillinger"
 
-#: dialogs.c:925 menus.c:634
+#: dialogs.c:1012 menus.c:634
 msgid "ICS text menu"
 msgstr "ICS-tekstmenu"
 
-#: dialogs.c:947
+#: dialogs.c:1034
 msgid "clear"
 msgstr "ryd"
 
-#: dialogs.c:948 dialogs.c:1036
+#: dialogs.c:1035 dialogs.c:1123
 msgid "save changes"
 msgstr "gem ændringer"
 
-#: dialogs.c:1051
+#: dialogs.c:1138
 msgid "Edit book"
 msgstr "Redigér åbningsbog"
 
-#: dialogs.c:1051 menus.c:636
+#: dialogs.c:1138 menus.c:636
 msgid "Tags"
 msgstr "Partidata"
 
-#: dialogs.c:1193
+#: dialogs.c:1280
 msgid "ICS input box"
 msgstr "ICS-inputboks"
 
-#: dialogs.c:1225
+#: dialogs.c:1312
 msgid "Type a move"
 msgstr "Tast et træk"
 
-#: dialogs.c:1251
+#: dialogs.c:1338
 msgid "Engine has no options"
 msgstr "Skakprogrammet har ingen tilvalg"
 
-#: dialogs.c:1253
+#: dialogs.c:1340
 msgid "Engine Settings"
 msgstr "Indstillinger for skakprogram"
 
-#: dialogs.c:1278
+#: dialogs.c:1365
 msgid "Select engine from list:"
 msgstr "Vælg skakprogram fra liste:"
 
-#: dialogs.c:1281
+#: dialogs.c:1368
 msgid "or specify one below:"
 msgstr "eller specificér en herunder:"
 
-#: dialogs.c:1282
+#: dialogs.c:1369
 msgid "Nickname (optional):"
 msgstr "Kaldenavn (ikke nødvendigt):"
 
-#: dialogs.c:1283
+#: dialogs.c:1370
 msgid "Use nickname in PGN player tags of engine-engine games"
 msgstr "Brug kaldenavnet som spillerbetegnelse i PGN-filer"
 
-#: dialogs.c:1284
+#: dialogs.c:1371
 msgid "Engine Directory:"
 msgstr "Skakprogramkatalog:"
 
-#: dialogs.c:1285
+#: dialogs.c:1372
 msgid "Engine Command:"
 msgstr "Skakprogramkommando:"
 
-#: dialogs.c:1286
+#: dialogs.c:1373
 msgid "(Directory will be derived from engine path when empty)"
 msgstr "(Katalog vil blive udledt fra programstien hvis ikke udfyldt)"
 
-#: dialogs.c:1287
+#: dialogs.c:1374
 msgid "UCI"
 msgstr "UCI"
 
-#: dialogs.c:1288
+#: dialogs.c:1375
 msgid "WB protocol v1 (do not wait for engine features)"
 msgstr "WB-protokol v1 (brug ikke særlige skakprogramfunktioner)"
 
-#: dialogs.c:1289
+#: dialogs.c:1376
 msgid "Must not use GUI book"
 msgstr "Må ikke bruge GUI's åbningsbog"
 
-#: dialogs.c:1290
+#: dialogs.c:1377
 msgid "Add this engine to the list"
 msgstr "Tilføj dette skakprogram til listen"
 
-#: dialogs.c:1291
+#: dialogs.c:1378
 msgid "Force current variant with this engine"
 msgstr "Brug aktuel variant med dette skakprogram"
 
-#: dialogs.c:1341
+#: dialogs.c:1428
 #, fuzzy
 msgid "Load first engine"
 msgstr "Indlæs skakprogram"
 
-#: dialogs.c:1347
+#: dialogs.c:1434
 #, fuzzy
 msgid "Load second engine"
 msgstr "Indlæs skakprogrammet som"
 
-#: dialogs.c:1370
+#: dialogs.c:1457
 msgid "shuffle"
 msgstr "bland brikker"
 
-#: dialogs.c:1371
+#: dialogs.c:1458
 msgid "Start-position number:"
 msgstr "Startstillingsnummer:"
 
-#: dialogs.c:1372
+#: dialogs.c:1459
 msgid "randomize"
 msgstr "vælg tilfældigt"
 
-#: dialogs.c:1373
+#: dialogs.c:1460
 msgid "pick fixed"
 msgstr "vælg bestemt"
 
-#: dialogs.c:1390
+#: dialogs.c:1477
 msgid "New Shuffle Game"
 msgstr "Nyt blandet parti"
 
 # Stort begyndelsesbogstav med vilje
-#: dialogs.c:1409
+#: dialogs.c:1496
 msgid "classical"
 msgstr "Klassisk"
 
 # Stort begyndelsesbogstav med vilje
-#: dialogs.c:1410
+#: dialogs.c:1497
 msgid "incremental"
 msgstr "Tillægstid"
 
 # Stort begyndelsesbogstav med vilje
-#: dialogs.c:1411
+#: dialogs.c:1498
 msgid "fixed max"
 msgstr "Maks. pr. træk"
 
-#: dialogs.c:1412
+#: dialogs.c:1499
 msgid "Moves per session:"
 msgstr "Træk pr.  tidsperiode:"
 
-#: dialogs.c:1413
+#: dialogs.c:1500
 msgid "Initial time (min):"
 msgstr "Tid fra start (minutter):"
 
-#: dialogs.c:1414
+#: dialogs.c:1501
 msgid "Increment or max (sec/move):"
 msgstr "Tillægstid eller maks. pr. træk (sekunder):"
 
-#: dialogs.c:1415
+#: dialogs.c:1502
 msgid "Time-Odds factors:"
 msgstr "Tidsforkortelses-faktorer:"
 
-#: dialogs.c:1416
+#: dialogs.c:1503
 msgid "Engine #1"
 msgstr "Skakprogram nr. 1"
 
-#: dialogs.c:1417
+#: dialogs.c:1504
 msgid "Engine #2 / Human"
 msgstr "Skakprogram nr. 2 / menneske"
 
-#: dialogs.c:1457 dialogs.c:1460 dialogs.c:1465 dialogs.c:1466
+#: dialogs.c:1544 dialogs.c:1547 dialogs.c:1552 dialogs.c:1553
 #: gtk/xoptions.c:194
 msgid "Unused"
 msgstr "Ubrugt"
 
-#: dialogs.c:1478
-msgid "Time Control"
-msgstr "Betænkningstid"
-
-#: dialogs.c:1507
+#: dialogs.c:1594
 msgid "Error writing to chess program"
 msgstr "Fejl ved skrivning til skakprogram"
 
-#: dialogs.c:1574
+#: dialogs.c:1662 xaw/xoptions.c:1276
 msgid "Cancel"
 msgstr "Annullér"
 
-#: dialogs.c:1579 dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:1667 dialogs.c:2061 dialogs.c:2065
 msgid "King"
 msgstr "Konge"
 
-#: dialogs.c:1582
+#: dialogs.c:1670
 msgid "Captain"
 msgstr ""
 
-#: dialogs.c:1583
+#: dialogs.c:1671
 msgid "Lieutenant"
 msgstr ""
 
-#: dialogs.c:1584
+#: dialogs.c:1672
 msgid "General"
 msgstr ""
 
-#: dialogs.c:1585
+#: dialogs.c:1673
 msgid "Warlord"
 msgstr ""
 
-#: dialogs.c:1587 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1675 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Knight"
 msgstr "Springer"
 
-#: dialogs.c:1588 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1676 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Bishop"
 msgstr "Løber"
 
-#: dialogs.c:1589 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1677 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Rook"
 msgstr "Tårn"
 
-#: dialogs.c:1593 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1681 dialogs.c:2062 dialogs.c:2066
 msgid "Archbishop"
 msgstr ""
 
-#: dialogs.c:1594 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1682 dialogs.c:2062 dialogs.c:2066
 msgid "Chancellor"
 msgstr ""
 
-#: dialogs.c:1596 dialogs.c:1971 dialogs.c:1975 dialogs.c:1993
+#: dialogs.c:1684 dialogs.c:2061 dialogs.c:2065 dialogs.c:2083
 msgid "Queen"
 msgstr "Dronning"
 
-#: dialogs.c:1600
+#: dialogs.c:1686
+msgid "Lion"
+msgstr ""
+
+#: dialogs.c:1690
 msgid "Defer"
 msgstr ""
 
-#: dialogs.c:1601 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1691 dialogs.c:2062 dialogs.c:2066
 msgid "Promote"
 msgstr "Bondeforvandling"
 
-#: dialogs.c:1616
+#: dialogs.c:1706
 msgid "Chat partner:"
 msgstr ""
 
-#: dialogs.c:1701
+#: dialogs.c:1791
 msgid "Chat box"
 msgstr ""
 
-#: dialogs.c:1742
+#: dialogs.c:1832
 msgid "factory"
 msgstr "standard"
 
-#: dialogs.c:1743
+#: dialogs.c:1833
 msgid "up"
 msgstr "op"
 
-#: dialogs.c:1744
+#: dialogs.c:1834
 msgid "down"
 msgstr "ned"
 
-#: dialogs.c:1762
+#: dialogs.c:1852
 msgid "No tag selected"
 msgstr "Ingen overskrift valgt"
 
-#: dialogs.c:1793
+#: dialogs.c:1883
 msgid "Game-list options"
 msgstr "Indstillinger for partiliste"
 
-#: dialogs.c:1869 dialogs.c:1883
+#: dialogs.c:1959 dialogs.c:1973
 msgid "Error"
 msgstr "Fejl"
 
-#: dialogs.c:1906
+#: dialogs.c:1996
 msgid "Fatal Error"
 msgstr "Fatal fejl"
 
-#: dialogs.c:1906
+#: dialogs.c:1996
 msgid "Exiting"
 msgstr "Afslutter"
 
-#: dialogs.c:1917
+#: dialogs.c:2007
 msgid "Information"
 msgstr "Meddelelse"
 
-#: dialogs.c:1924
+#: dialogs.c:2014
 msgid "Note"
 msgstr "Notits"
 
-#: dialogs.c:1970 dialogs.c:2245 dialogs.c:2248
+#: dialogs.c:2060 dialogs.c:2340 dialogs.c:2343
 msgid "White"
 msgstr "Hvid"
 
-#: dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Pawn"
 msgstr "Bonde"
 
-#: dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:2061 dialogs.c:2065
 msgid "Elephant"
 msgstr ""
 
-#: dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:2061 dialogs.c:2065
 msgid "Cannon"
 msgstr ""
 
-#: dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:2062 dialogs.c:2066
 msgid "Demote"
 msgstr ""
 
-#: dialogs.c:1973 dialogs.c:1977
+#: dialogs.c:2063 dialogs.c:2067
 msgid "Empty square"
 msgstr "Tomt felt"
 
-#: dialogs.c:1973 dialogs.c:1977
+#: dialogs.c:2063 dialogs.c:2067
 msgid "Clear board"
 msgstr "Ryd bræt"
 
-#: dialogs.c:1974 dialogs.c:2257 dialogs.c:2260
+#: dialogs.c:2064 dialogs.c:2352 dialogs.c:2355
 msgid "Black"
 msgstr "Sort"
 
-#: dialogs.c:2073 menus.c:787
+#: dialogs.c:2163 menus.c:787
 msgid "File"
 msgstr "Fil"
 
-#: dialogs.c:2074 menus.c:788
+#: dialogs.c:2164 menus.c:788
 msgid "Edit"
 msgstr "Redigér"
 
-#: dialogs.c:2075 menus.c:789
+#: dialogs.c:2165 menus.c:789
 msgid "View"
 msgstr "Vis"
 
-#: dialogs.c:2076 menus.c:790
+#: dialogs.c:2166 menus.c:790
 msgid "Mode"
 msgstr "Tilstand"
 
-#: dialogs.c:2077 menus.c:791
+#: dialogs.c:2167 menus.c:791
 msgid "Action"
 msgstr "Handlinger"
 
-#: dialogs.c:2078 menus.c:792
+#: dialogs.c:2168 menus.c:792
 msgid "Engine"
 msgstr "Skakprogram"
 
-#: dialogs.c:2079 menus.c:793
+#: dialogs.c:2169 menus.c:793
 msgid "Options"
 msgstr "Indstillinger"
 
-#: dialogs.c:2080 menus.c:794
+#: dialogs.c:2170 menus.c:794
 msgid "Help"
 msgstr "Hjælp"
 
-#: dialogs.c:2090
+#: dialogs.c:2180
 msgid "<<"
 msgstr ""
 
-#: dialogs.c:2091
+#: dialogs.c:2181
 msgid "<"
 msgstr ""
 
-#: dialogs.c:2093
+#: dialogs.c:2183
 msgid ">"
 msgstr ""
 
-#: dialogs.c:2094
+#: dialogs.c:2184
 msgid ">>"
 msgstr ""
 
-#: dialogs.c:2364
+#: dialogs.c:2458
 #, fuzzy
 msgid "Directories:"
 msgstr "Lydkatalog:"
 
-#: dialogs.c:2365
+#: dialogs.c:2459
 #, fuzzy
 msgid "Files:"
 msgstr "Fil"
 
-#: dialogs.c:2366
+#: dialogs.c:2460
 msgid "by name"
 msgstr ""
 
-#: dialogs.c:2367
+#: dialogs.c:2461
 msgid "by type"
 msgstr ""
 
-#: dialogs.c:2370
+#: dialogs.c:2464
 #, fuzzy
 msgid "Filename:"
 msgstr "Filter:"
 
-#: dialogs.c:2371
+#: dialogs.c:2465
 #, fuzzy
 msgid "New directory"
 msgstr "Skakprogramkatalog:"
 
-#: dialogs.c:2372
+#: dialogs.c:2466
 #, fuzzy
 msgid "File type:"
 msgstr "Filter:"
 
-#: dialogs.c:2447
+#: dialogs.c:2541
 #, fuzzy
 msgid "Contents of"
 msgstr "Kommentarer"
 
-#: dialogs.c:2473
+#: dialogs.c:2567
 #, fuzzy
 msgid "  next page"
 msgstr "næste side"
 
-#: dialogs.c:2490
+#: dialogs.c:2584
 msgid "FIRST TYPE DIRECTORY NAME HERE"
 msgstr ""
 
-#: dialogs.c:2491
+#: dialogs.c:2585
 msgid "TRY ANOTHER NAME"
 msgstr ""
 
-#: draw.c:293
+#: draw.c:310
 msgid ""
-"No default pieces installed\n"
-"Select your own -pieceImageDirectory"
+"No default pieces installed!\n"
+"Select your own using '-pieceImageDirectory'."
 msgstr ""
 
-#: engineoutput.c:107 menus.c:630
+#: engineoutput.c:110 menus.c:630
 #, c-format
 msgid "Engine Output"
 msgstr "Output fra skakprogram"
 
-#: engineoutput.c:117
+#: engineoutput.c:120
 #, c-format
 msgid "%s (%d reversible ply)"
 msgid_plural "%s (%d reversible plies)"
@@ -2220,7 +2303,7 @@ msgstr[1] "%s (%d reversible træk)"
 
 # NPS = Nodes pr. second
 # SPS = Stillinger pr. sekund (i motoranalyse)
-#: engineoutput.c:509 engineoutput.c:512 nengineoutput.c:81 nengineoutput.c:88
+#: engineoutput.c:542 engineoutput.c:545 nengineoutput.c:82 nengineoutput.c:90
 msgid "NPS"
 msgstr "SPS"
 
@@ -2229,52 +2312,52 @@ msgstr "SPS"
 msgid "Reading game file (%d)"
 msgstr "Læser partifil (%d)"
 
-#: gtk/xboard.c:844 xaw/xboard.c:1162
+#: gtk/xboard.c:867 xaw/xboard.c:1052
 #, c-format
 msgid "%s: can't cd to CHESSDIR: "
 msgstr "%s: kan ikke cd til CHESSDIR: "
 
-#: gtk/xboard.c:853 xaw/xboard.c:1171
+#: gtk/xboard.c:876 xaw/xboard.c:1061
 #, c-format
 msgid "Failed to open file '%s'\n"
 msgstr "Åbning af filen \"%s\" mislykkedes\n"
 
-#: gtk/xboard.c:868 xaw/xboard.c:1180
+#: gtk/xboard.c:891 xaw/xboard.c:1070
 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:887 xaw/xboard.c:1212
+#: gtk/xboard.c:910 xaw/xboard.c:1102
 #, c-format
 msgid "%s: bad boardSize syntax %s\n"
 msgstr "%s: forkert boardSize-syntaks %s\n"
 
-#: gtk/xboard.c:927 xaw/xboard.c:1249
+#: gtk/xboard.c:950 xaw/xboard.c:1139
 #, c-format
 msgid "%s: unrecognized boardSize name %s\n"
 msgstr "%s: ikke genkendt boardSize-navn %s\n"
 
-#: gtk/xboard.c:968 xaw/xboard.c:1286
+#: gtk/xboard.c:991 xaw/xboard.c:1176
 #, 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:1258 xaw/xboard.c:1568
+#: gtk/xboard.c:1281 xaw/xboard.c:1458
 #, c-format
 msgid "Unable to create font set for %s.\n"
 msgstr "Kan ikke lave skrifttypegruppe for %s.\n"
 
-#: gtk/xboard.c:1283 xaw/xboard.c:1591
+#: gtk/xboard.c:1306 xaw/xboard.c:1481
 #, c-format
 msgid "%s: no fonts match pattern %s\n"
 msgstr "%s: Ingen skrifttyper matcher mønstret %s\n"
 
-#: gtk/xboard.c:1722 xaw/xboard.c:2081
+#: gtk/xboard.c:1745 xaw/xboard.c:1971
 msgid "Can't open temp file"
 msgstr "Kan ikke åbne midlertidig fil"
 
-#: gtk/xboard.c:2174
+#: gtk/xboard.c:2199
 msgid "Failed to open file"
 msgstr "Åbning af fil mislykkedes"
 
@@ -2344,12 +2427,13 @@ msgid "New Game"
 msgstr "Nyt blandet parti"
 
 #: menus.c:583
-msgid "New Shuffle Game ..."
+#, fuzzy
+msgid "New Shuffle Game..."
 msgstr "Nyt blandet parti ..."
 
 #: menus.c:584
 #, fuzzy
-msgid "New Variant ..."
+msgid "New Variant..."
 msgstr "Ny variant"
 
 #: menus.c:586
@@ -2620,20 +2704,22 @@ msgstr "Døm remis"
 
 #: menus.c:684
 #, fuzzy
-msgid "Load New 1st Engine ..."
+msgid "Load New 1st Engine..."
 msgstr "Indlæs nyt skakprogram ..."
 
 #: menus.c:685
 #, fuzzy
-msgid "Load New 2nd Engine ..."
+msgid "Load New 2nd Engine..."
 msgstr "Indlæs nyt skakprogram ..."
 
 #: menus.c:687
-msgid "Engine #1 Settings ..."
+#, fuzzy
+msgid "Engine #1 Settings..."
 msgstr "Indstillinger for skakprogram nr. 1 ..."
 
 #: menus.c:688
-msgid "Engine #2 Settings ..."
+#, fuzzy
+msgid "Engine #2 Settings..."
 msgstr "Indstillinger for skakprogram nr. 2 ..."
 
 #: menus.c:690
@@ -2655,46 +2741,51 @@ msgid "Retract Move"
 msgstr "Annullér træk    Ctrl+X"
 
 #: menus.c:700
-msgid "General ..."
+#, fuzzy
+msgid "General..."
 msgstr "Generelle ..."
 
 #: menus.c:702
 #, fuzzy
-msgid "Time Control ..."
+msgid "Time Control..."
 msgstr "Betænkningstid"
 
 #: menus.c:703
 #, fuzzy
-msgid "Common Engine ..."
+msgid "Common Engine..."
 msgstr "Skakprogram ...    Alt+Shift+U"
 
 #: menus.c:704
 #, fuzzy
-msgid "Adjudications ..."
+msgid "Adjudications..."
 msgstr "Afgørelser ...    Alt+Shift+J"
 
 #: menus.c:705
-msgid "ICS ..."
-msgstr "ICS ..."
+msgid "ICS..."
+msgstr ""
 
 #: menus.c:706
-msgid "Match ..."
-msgstr "Match ..."
+msgid "Tournament..."
+msgstr ""
 
 #: menus.c:707
-msgid "Load Game ..."
+#, fuzzy
+msgid "Load Game..."
 msgstr "Indlæs parti ..."
 
 #: menus.c:708
-msgid "Save Game ..."
+#, fuzzy
+msgid "Save Game..."
 msgstr "Gem parti ..."
 
 #: menus.c:709
-msgid "Game List ..."
+#, fuzzy
+msgid "Game List..."
 msgstr "Partiliste ..."
 
 #: menus.c:710
-msgid "Sounds ..."
+#, fuzzy
+msgid "Sounds..."
 msgstr "Lyde ..."
 
 #: menus.c:713
@@ -2767,21 +2858,22 @@ msgstr "Nyheder i denne version (engelsk)"
 msgid "e-Mail Bug Report"
 msgstr "E-mail fejlrapport"
 
-#: nengineoutput.c:78 nengineoutput.c:85
+#: nengineoutput.c:78 nengineoutput.c:86
 #, fuzzy
 msgid "engine name"
 msgstr "Skakprogram nr. 1"
 
-#: nengineoutput.c:80 nengineoutput.c:87
+#. TRANSLATORS: noun, as in "the move Nf3"
+#: nengineoutput.c:81 nengineoutput.c:89
 #, fuzzy
 msgid "move"
 msgstr "Forhåndstræk"
 
-#: nengineoutput.c:153
+#: nengineoutput.c:155
 msgid "Engine output"
 msgstr "Output fra skakprogram"
 
-#: nengineoutput.c:157
+#: nengineoutput.c:159
 msgid ""
 "Mismatch of STRIDE in nengineoutput.c\n"
 "Change and recompile!"
@@ -2864,8 +2956,8 @@ msgid "%s: unrecognized color %s\n"
 msgstr "%s: ikke genkendt farve %s\n"
 
 #: usystem.c:230
-#, c-format
-msgid "%s: can't parse foreground color in `%s'\n"
+#, fuzzy, c-format
+msgid "%s: can't parse foreground color in '%s'\n"
 msgstr "%s: kan ikke fortolke forgrundsfarve i \"%s\"\n"
 
 #: usystem.c:259
@@ -2873,58 +2965,25 @@ msgstr "%s: kan ikke fortolke forgrundsfarve i \"%s\"\n"
 msgid "%s: can't parse color names; disabling colorization\n"
 msgstr "%s: kan ikke fortolke farvenavne; deaktiverer farvning\n"
 
-#: usystem.c:371
+#: usystem.c:374
 #, c-format
 msgid "ERROR: Unknown user %s (in path %s)\n"
 msgstr "FEJL: Ukendt bruger %s (i stien %s)\n"
 
-#: usystem.c:556
+#: usystem.c:557
 msgid "Socket support is not configured in"
 msgstr "Er ikke konfigureret med sokkelunderstøttelse"
 
-#: usystem.c:645
+#: usystem.c:646
 msgid "internal rcmd not implemented for Unix"
 msgstr "intern rcmd er ikke implementeret til Unix"
 
-#: xaw/xboard.c:478
-#, c-format
-msgid "%s: Can't access XPM directory %s\n"
-msgstr "%s: Har ikke adgang til XPM-katalog %s\n"
-
-#: xaw/xboard.c:499
-#, c-format
-msgid "Available `%s' sizes:\n"
-msgstr "Tilgængelige \"%s\"-størrelser:\n"
-
-#: xaw/xboard.c:532
-#, c-format
-msgid "Error: No `%s' files!\n"
-msgstr "Fejl: Ingen \"%s\"-filer!\n"
-
-#: xaw/xboard.c:545
-#, c-format
-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 ""
-"Advarsel: Ingen DIR-struktur fundet på dette system --\n"
-"      Kan ikke vælge størrelse for XPM/XIM-brikker.\n"
-"  Rappotér venligst denne fejl til %s.\n"
-"  Inkludér systemtype og styresystem i beskeden.\n"
-
-#: xaw/xboard.c:1292
+#: xaw/xboard.c:1182
 #, c-format
 msgid "white pixel = 0x%lx, black pixel = 0x%lx\n"
 msgstr "hvid pixel = 0x%lx, sort pixel = 0x%lx\n"
 
-#: xaw/xengineoutput.c:115
-#, c-format
-msgid "Error %d loading icon image\n"
-msgstr "Fejl %d ved indlæsning af ikonbillede\n"
-
-#: xaw/xoptions.c:321 xaw/xoptions.c:1023
+#: xaw/xoptions.c:321 xaw/xoptions.c:1025
 msgid "browse"
 msgstr "gennemse"
 
@@ -2940,13 +2999,48 @@ msgstr ""
 msgid "Shift"
 msgstr ""
 
-#: xaw/xoptions.c:1270
+#: xaw/xoptions.c:1272
 msgid "OK"
 msgstr "o.k."
 
-#: xaw/xoptions.c:1274
-msgid "cancel"
-msgstr "annullér"
+#, fuzzy
+#~ msgid "    (for concurrent playing of a single"
+#~ msgstr "Synkronisér efter runde    (for samtidig afvikling af en"
+
+#~ msgid "Match Options"
+#~ msgstr "Matchindstillinger"
+
+#~ msgid "ICS ..."
+#~ msgstr "ICS ..."
+
+#~ msgid "Match ..."
+#~ msgstr "Match ..."
+
+#~ msgid "%s: Can't access XPM directory %s\n"
+#~ msgstr "%s: Har ikke adgang til XPM-katalog %s\n"
+
+#~ msgid "Available `%s' sizes:\n"
+#~ msgstr "Tilgængelige \"%s\"-størrelser:\n"
+
+#~ msgid "Error: No `%s' files!\n"
+#~ msgstr "Fejl: Ingen \"%s\"-filer!\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 ""
+#~ "Advarsel: Ingen DIR-struktur fundet på dette system --\n"
+#~ "      Kan ikke vælge størrelse for XPM/XIM-brikker.\n"
+#~ "  Rappotér venligst denne fejl til %s.\n"
+#~ "  Inkludér systemtype og styresystem i beskeden.\n"
+
+#~ msgid "Error %d loading icon image\n"
+#~ msgstr "Fejl %d ved indlæsning af ikonbillede\n"
+
+#~ msgid "cancel"
+#~ msgstr "annullér"
 
 #~ msgid "recognized '%s' (%d) as variant %s\n"
 #~ msgstr "genkendte \"%s\" (%d) som variant %s\n"
index ba3dde9..a5cbdb2 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -5,10 +5,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: xboard 4.6.0.20121211\n"
+"Project-Id-Version: xboard 4.7.2\n"
 "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n"
-"POT-Creation-Date: 2014-01-05 12:51-0800\n"
-"PO-Revision-Date: 2013-01-20 18:51-0800\n"
+"POT-Creation-Date: 2014-01-19 22:19-0800\n"
+"PO-Revision-Date: 2013-11-24 18:22-0800\n"
 "Last-Translator: Arun Persaud <arun@nubati.net>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
 "Language: de\n"
@@ -17,226 +17,228 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: args.h:820
+#: args.h:833
 #, c-format
 msgid "%s in settings file\n"
 msgstr ""
 
-#: args.h:830
+#: args.h:867
 #, c-format
 msgid "Bad integer value %s"
 msgstr "Falscher Integer-wert %s"
 
-#: args.h:923 args.h:1170
+#: args.h:968 args.h:1229
 #, c-format
 msgid "Unrecognized argument %s"
 msgstr "Nicht erkanntes Argument %s"
 
-#: args.h:954
+#: args.h:999
 #, c-format
 msgid "No value provided for argument %s"
 msgstr "Fehlender Wert für Argument %s"
 
-#: args.h:1014
+#: args.h:1059
 #, c-format
 msgid "Incomplete \\ escape in value for %s"
 msgstr "Unvollständiges \\ escape im Wert von »%s«"
 
-#: args.h:1125
+#: args.h:1170
 #, c-format
 msgid "Failed to open indirection file %s"
 msgstr "Fehler beim Öffnen der Datei »%s«"
 
-#: args.h:1142
+#: args.h:1187
 #, c-format
 msgid "Unrecognized boolean argument value %s"
 msgstr "Nicht anerkannter 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
-#: backend.c:744
+#: backend.c:800
 msgid "first"
 msgstr "erstes"
 
 #. 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:747
+#: backend.c:803
 msgid "second"
 msgstr "zweites"
 
-#: backend.c:827
+#: backend.c:885
 #, c-format
 msgid "protocol version %d not supported"
 msgstr "Protokollversion %d nicht unterstützt"
 
-#: backend.c:933
+#: backend.c:991
 msgid "You did not specify the engine executable"
 msgstr "Das Computerprogramm für das Schachprogramm wurde nicht angegeben"
 
-#: backend.c:989
+#: backend.c:1049
 #, c-format
 msgid "bad timeControl option %s"
 msgstr "falsche timeControl-Option %s"
 
-#: backend.c:1004
+#: backend.c:1064
 #, c-format
 msgid "bad searchTime option %s"
 msgstr "falsche searchTime-Option %s"
 
-#: backend.c:1110
+#: backend.c:1170
 #, c-format
 msgid "Variant %s supported only in ICS mode"
 msgstr "Variante %s wird nur im ICS-Modus unterstützt"
 
-#: backend.c:1128
+#: backend.c:1188
 #, c-format
 msgid "Unknown variant name %s"
 msgstr "Unbekannte Variante mit Namen %s"
 
-#: backend.c:1375
+#: backend.c:1439
 msgid "Starting chess program"
 msgstr "Starte Schachprogramm"
 
-#: backend.c:1398
+#: backend.c:1462
 msgid "Bad game file"
 msgstr "Fehler in Partiedatei"
 
-#: backend.c:1405
+#: backend.c:1469
 msgid "Bad position file"
 msgstr "Fehler in Positionsdatei"
 
-#: backend.c:1419
+#: backend.c:1483
 msgid "Pick new game"
 msgstr "Wähle neues Spiel"
 
-#: backend.c:1488
+#: backend.c:1552
+#, fuzzy
 msgid ""
-"You restarted an already completed tourney\n"
-"One more cycle will now be added to it\n"
-"Games commence in 10 sec"
+"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"
 
-#: backend.c:1495
+#: backend.c:1559
 #, c-format
 msgid "All games in tourney '%s' are already played or playing"
 msgstr "Alle Spiele im Turnier »%s« sind entweder beendet oder werden gespielt"
 
-#: backend.c:1502
+#: backend.c:1566
 msgid "Can't have a match with no chess programs"
 msgstr "Partie ohne Schachprogram ist nicht möglich"
 
-#: backend.c:1539
+#: backend.c:1620
 #, c-format
 msgid "Could not open comm port %s"
 msgstr "Konnte Kommunikationsport %s nicht öffnen"
 
-#: backend.c:1542
+#: backend.c:1623
 #, c-format
 msgid "Could not connect to host %s, port %s"
 msgstr ""
 "Verbindung zu Hostrechner %s, Portnummer %s konnte nicht hergestellt werden"
 
-#: backend.c:1598
+#: backend.c:1679
 #, c-format
 msgid "Unknown initialMode %s"
 msgstr "Unbekannter initalMode %s"
 
-#: backend.c:1624
+#: backend.c:1705
 msgid "AnalyzeFile mode requires a game file"
 msgstr "»Analysiere Datei«-Modus benötigt eine Partiedatei"
 
-#: backend.c:1651
+#: backend.c:1732
 msgid "Analysis mode requires a chess engine"
 msgstr "Analyse-Modus benötigt ein Schachprogramm"
 
-#: backend.c:1655
+#: backend.c:1736
 msgid "Analysis mode does not work with ICS mode"
 msgstr "Analyse-Modus funktioniert nicht im ICS-Modus"
 
-#: backend.c:1666
+#: backend.c:1747
 msgid "MachineWhite mode requires a chess engine"
 msgstr "»Schachprogramm Weiß«-Modus benötigt ein Schachprogramm"
 
-#: backend.c:1671
+#: backend.c:1752
 msgid "MachineWhite mode does not work with ICS mode"
 msgstr "»Schachprogramm Weiß«-Modus funktioniert nicht im ICS-Modus"
 
-#: backend.c:1678
+#: backend.c:1759
 msgid "MachineBlack mode requires a chess engine"
 msgstr "»Schachprogramm Schwarz«-Modus benötigt ein Schachprogramm"
 
-#: backend.c:1683
+#: backend.c:1764
 msgid "MachineBlack mode does not work with ICS mode"
 msgstr "»Schachprogramm Schwarz«-Modus funktioniert nicht im ICS-Modus"
 
-#: backend.c:1690
+#: backend.c:1771
 msgid "TwoMachines mode requires a chess engine"
 msgstr "»Zwei Schachprogramme«-Modus benötigt ein Schachprogramm"
 
-#: backend.c:1695
+#: backend.c:1776
 msgid "TwoMachines mode does not work with ICS mode"
 msgstr "»Zwei Schachprogramme«-Modus funktioniert nicht im ICS-Modus"
 
-#: backend.c:1706
+#: backend.c:1787
 msgid "Training mode requires a game file"
 msgstr "Trainieren-Modus benötigt eine Partiedatei"
 
-#: backend.c:1869 backend.c:1924 backend.c:1947 backend.c:2346
+#: backend.c:1950 backend.c:2005 backend.c:2028 backend.c:2430
 msgid "Error writing to ICS"
 msgstr "Fehler beim Schreiben zum ICS"
 
-#: backend.c:1884
+#: backend.c:1965
 msgid "Error reading from keyboard"
 msgstr "Fehler beim Lesen der Tastatur"
 
-#: backend.c:1887
+#: backend.c:1968
 msgid "Got end of file from keyboard"
 msgstr "Habe Ende-der-Datei von der Tastatur erhalten"
 
-#: backend.c:2192
+#: backend.c:2276
 #, c-format
 msgid "Unknown wild type %d"
 msgstr "Unbekannter wild-Variante %d"
 
-#: backend.c:2263 usystem.c:329
+#: backend.c:2347 usystem.c:329
 msgid "Error writing to display"
 msgstr "Fehler beim Schreiben auf dem Display"
 
-#: backend.c:3019
+#. TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers
+#: backend.c:3105
 #, c-format
 msgid "your opponent kibitzes: %s"
 msgstr "Dein Gegner kibitzt: %s"
 
-#: backend.c:3548
+#: backend.c:3634
 msgid "Error gathering move list: two headers"
 msgstr "Fehler beim Erstellen der Zugliste: zwei Dateiköpfe"
 
-#: backend.c:3595
+#: backend.c:3681
 msgid "Error gathering move list: nested"
 msgstr "Fehler beim Erstellen der Zugliste: verschachtelt"
 
-#: backend.c:3699 backend.c:4117 backend.c:4321 backend.c:4880 backend.c:4884
-#: backend.c:6900 backend.c:12101 backend.c:13816 backend.c:13893
-#: backend.c:13939 backend.c:13945 backend.c:13950 backend.c:13955
+#: backend.c:3785 backend.c:4203 backend.c:4407 backend.c:4966 backend.c:4970
+#: backend.c:7073 backend.c:12577 backend.c:14306 backend.c:14383
+#: backend.c:14429 backend.c:14435 backend.c:14440 backend.c:14445
 msgid "vs."
 msgstr "gegen"
 
-#: backend.c:3827
+#: backend.c:3913
 msgid "Illegal move (rejected by ICS)"
 msgstr "Illegaler Zug (abgelehnt vom ICS)"
 
-#: backend.c:4165
+#: backend.c:4251
 msgid "Connection closed by ICS"
 msgstr "Verbindung zum ICS beendet"
 
-#: backend.c:4167
+#: backend.c:4253
 msgid "Error reading from ICS"
 msgstr "Fehler beim Lesen vom ICS"
 
-#: backend.c:4244
+#: backend.c:4330
 #, c-format
 msgid ""
 "Failed to parse board string:\n"
@@ -245,108 +247,124 @@ msgstr ""
 "Konnte Schachbrettzeichenkette nicht parsen:\n"
 "»%s«"
 
-#: backend.c:4253 backend.c:9756
+#: backend.c:4339 backend.c:10203
 msgid "Game too long; increase MAX_MOVES and recompile"
 msgstr "Partie zu lang; erhöhe MAX_MOVES und kompiliere neu"
 
-#: backend.c:4372
+#: backend.c:4458
 msgid "Error gathering move list: extra board"
 msgstr "Fehler beim Erstellen der Zugliste: extra Schachbrett"
 
-#: backend.c:4804 backend.c:4826
+#: backend.c:4890 backend.c:4912
 #, c-format
 msgid "Couldn't parse move \"%s\" from ICS"
 msgstr "Konnte Zug »%s« vom ICS nicht parsen"
 
-#: backend.c:5063
+#: backend.c:5161
 #, c-format
 msgid "say Internal error; bad moveType %d (%d,%d-%d,%d)"
 msgstr "Interner Fehler; falscher moveType %d (%d,%d-%d,%d)"
 
-#: backend.c:5133
+#: backend.c:5232
 msgid "You cannot do this while you are playing or observing"
 msgstr "Dies ist nicht möglich während oder beim Zuschauen eines Spieles"
 
-#: backend.c:6029
+#: backend.c:6174
 msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!"
 msgstr "Kompiliere erneut mit Unterstützung von BOARD_RANKS oder BOARD_FILES!"
 
-#: backend.c:6491
+#: backend.c:6664
 msgid "You are playing Black"
 msgstr "Sie spielen Schwarz"
 
-#: backend.c:6500 backend.c:6527
+#: backend.c:6673 backend.c:6700
 msgid "You are playing White"
 msgstr "Sie spielen Weiß"
 
-#: backend.c:6509 backend.c:6535 backend.c:6655 backend.c:6680 backend.c:6696
-#: backend.c:14592
+#: backend.c:6682 backend.c:6708 backend.c:6828 backend.c:6853 backend.c:6869
+#: backend.c:15113
 msgid "It is White's turn"
 msgstr "Weiß ist am Zug"
 
-#: backend.c:6513 backend.c:6539 backend.c:6663 backend.c:6686 backend.c:6717
-#: backend.c:14584
+#: backend.c:6686 backend.c:6712 backend.c:6836 backend.c:6859 backend.c:6890
+#: backend.c:15105
 msgid "It is Black's turn"
 msgstr "Schwarz ist am Zug"
 
-#: backend.c:6552
+#: backend.c:6725
 msgid "Displayed position is not current"
 msgstr "Angezeigte Position ist nicht die Aktuelle"
 
-#: backend.c:6790
+#: backend.c:6963
 msgid "Illegal move"
 msgstr "Ungültiger Zug"
 
-#: backend.c:6857
+#: backend.c:7030
 msgid "End of game"
 msgstr "Ende des Spiels"
 
-#: backend.c:6860
+#: backend.c:7033
 msgid "Incorrect move"
 msgstr "Ungültiger Zug"
 
-#: backend.c:7169 backend.c:7296
+#: backend.c:7423 backend.c:7569
 msgid "Pull pawn backwards to under-promote"
 msgstr "Bewege Bauern rückwärts zum Unterverwandeln"
 
-#: backend.c:7527
+#: backend.c:7532
+msgid "only marked squares are legal"
+msgstr ""
+
+#: backend.c:7820
 msgid "Swiss tourney finished"
 msgstr "Turnier im Schweizer System beendet"
 
-#: backend.c:8103
+#: backend.c:8336
+msgid "could not load EGBB library"
+msgstr ""
+
+#: backend.c:8339
+msgid "wrong EGBB version"
+msgstr ""
+
+#: backend.c:8452
 msgid "Invalid pairing from pairing engine"
 msgstr "Ungültige Paarungen vom Paarungsprogramm"
 
-#: backend.c:8236
+#: backend.c:8603
 #, c-format
 msgid "Illegal move \"%s\" from %s machine"
 msgstr "Illegaler Zug »%s« vom Schachprogramm %s"
 
-#: backend.c:8457
+#: backend.c:8849
 msgid "Bad FEN received from engine"
 msgstr "Schlechte FEN vom Schachprogramm erhalten"
 
-#: backend.c:8601 backend.c:13681 backend.c:13746
+#: backend.c:8950
+msgid "Engine did not send setup for non-standard variant"
+msgstr ""
+
+#: backend.c:9023 backend.c:14168 backend.c:14236
 #, c-format
 msgid "%s does not support analysis"
 msgstr "%s unterstützt keine Analyse"
 
-#: backend.c:8667
+#: backend.c:9089
 #, c-format
 msgid "Illegal move \"%s\" (rejected by %s chess program)"
 msgstr "Illegaler Zug »%s« (abgelehnt vom Schachprogram %s)"
 
-#: backend.c:8694
+#: backend.c:9116
 #, c-format
 msgid "Failed to start %s chess program %s on %s: %s\n"
 msgstr "Konnte %s Schachprogram %s auf %s nicht starten: %s\n"
 
-#: backend.c:8715
+#: backend.c:9137
 #, c-format
 msgid "Hint: %s"
 msgstr "Hinweis: %s"
 
-#: backend.c:8720
+#: backend.c:9142
 #, c-format
 msgid ""
 "Illegal hint move \"%s\"\n"
@@ -355,59 +373,66 @@ msgstr ""
 "Illegaler Zughinweis »%s«\n"
 "vom Schachprogramm %s"
 
-#: backend.c:8895
+#: backend.c:9317
 msgid "Machine accepts your draw offer"
-msgstr "Das Schachprogramm akzeptiert dein Remiangebot"
+msgstr "Das Schachprogramm akzeptiert dein Remisangebot"
 
-#: backend.c:8898
+#: backend.c:9320
+#, fuzzy
 msgid ""
-"Machine offers a draw\n"
-"Select Action / Draw to agree"
+"Machine offers a draw.\n"
+"Select Action / Draw to accept."
 msgstr ""
-"Das Schachprogramm bietet Remi an\n"
-"Wähle Aktion/Remi, um anzunehmen"
+"Das Schachprogramm bietet Remis an\n"
+"Wähle Aktion/Remis, um anzunehmen"
 
-#: backend.c:8977
+#. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone
+#: backend.c:9402
 msgid "failed writing PV"
 msgstr "schreiben des PV fehlgeschlagen"
 
-#: backend.c:9275
+#: backend.c:9701
 #, c-format
 msgid "Ambiguous move in ICS output: \"%s\""
 msgstr "Nicht eindeutiger Zug in der ICS-Ausgabe: »%s«"
 
-#: backend.c:9285
+#: backend.c:9711
 #, c-format
 msgid "Illegal move in ICS output: \"%s\""
 msgstr "Illegaler Zug in der ICS-Ausgabe: \"%s\""
 
-#: backend.c:9296
+#: backend.c:9722
 msgid "Gap in move list"
 msgstr "Lücke in Zugliste"
 
-#: backend.c:9917 dialogs.c:460
+#: backend.c:10357
 #, c-format
 msgid "Variant %s not supported by %s"
 msgstr "Variante %s wird von %s nicht unterstützt"
 
-#: backend.c:10038
+#: backend.c:10364
+#, c-format
+msgid ", but %s is"
+msgstr ""
+
+#: backend.c:10506
 #, c-format
 msgid "Startup failure on '%s'"
 msgstr "Fehler beim Starten »%s«"
 
-#: backend.c:10069
+#: backend.c:10537
 msgid "Waiting for first chess program"
 msgstr "Warte auf erstes Schachprogramm"
 
-#: backend.c:10074 backend.c:13964
+#: backend.c:10542 backend.c:14454
 msgid "Waiting for second chess program"
 msgstr "Warte auf zweites Schachprogramm"
 
-#: backend.c:10123
+#: backend.c:10591
 msgid "Could not write on tourney file"
 msgstr "Schreibzugriff auf Turnierdatei nicht möglich"
 
-#: backend.c:10197
+#: backend.c:10665
 msgid ""
 "You cannot replace an engine while it is engaged!\n"
 "Terminate its game first."
@@ -415,11 +440,11 @@ msgstr ""
 "Ersetzen eines Schachprogramms während es läuft nicht möglich!\n"
 "Beenden Sie das Spiel zuerst."
 
-#: backend.c:10211
+#: backend.c:10679
 msgid "No engine with the name you gave is installed"
 msgstr "Ein Schachprogram mit dem angegebenen Namen ist nicht installiert"
 
-#: backend.c:10213
+#: backend.c:10681
 msgid ""
 "First change an engine by editing the participants list\n"
 "of the Tournament Options dialog"
@@ -427,16 +452,16 @@ msgstr ""
 "Ändern Sie ein Schachprogramm indem Sie die Liste der Teilnehmner\n"
 "im Turnieroptionendialog editieren"
 
-#: backend.c:10214
+#: backend.c:10682
 msgid "You can only change one engine at the time"
 msgstr "Sie können immer nur ein Schachprogramm ändern"
 
-#: backend.c:10229 backend.c:10376
+#: backend.c:10697 backend.c:10845
 #, c-format
 msgid "No engine %s is installed"
 msgstr "Das Schachprogram %s ist nicht installiert"
 
-#: backend.c:10249
+#: backend.c:10717
 msgid ""
 "You must supply a tournament file,\n"
 "for storing the tourney progress"
@@ -444,115 +469,115 @@ msgstr ""
 "Sie müssen eine Turnierdatei zum Speichern\n"
 "der Turnierdaten angeben"
 
-#: backend.c:10259
+#: backend.c:10727
 msgid "Not enough participants"
 msgstr "Nicht genügend Teilnehmer"
 
-#: backend.c:10460
+#: backend.c:10929
 msgid "Bad tournament file"
 msgstr "Fehler in Turnierdatei"
 
-#: backend.c:10472
+#: backend.c:10941
 msgid "Waiting for other game(s)"
 msgstr "Warte auf weiter Spiele"
 
-#: backend.c:10485
+#: backend.c:10954
 msgid "No pairing engine specified"
 msgstr "Kein Paarungsprogram angegeben"
 
-#: backend.c:10962
+#: backend.c:11430
 #, c-format
 msgid "Match %s vs. %s: final score %d-%d-%d"
 msgstr "Partie %s gegen %s: Endergebnis %d-%d-%d"
 
-#: backend.c:11424 backend.c:11455
+#: backend.c:11897 backend.c:11928
 #, c-format
 msgid "Illegal move: %d.%s%s"
 msgstr "Illegaler Zug: %d.%s%s"
 
-#: backend.c:11444
+#: backend.c:11917
 #, c-format
 msgid "Ambiguous move: %d.%s%s"
 msgstr "Nicht eindeutiger Zug: %d.%s%s"
 
-#: backend.c:11497 backend.c:12524 backend.c:12717 backend.c:13078
+#: backend.c:11971 backend.c:13010 backend.c:13203 backend.c:13567
 #, c-format
 msgid "Can't open \"%s\""
 msgstr "Kann »%s« nicht öffnen"
 
-#: backend.c:11509 menus.c:116
+#: backend.c:11983 menus.c:116
 msgid "Cannot build game list"
 msgstr "Kann Zugliste nicht erstellen"
 
-#: backend.c:11594
+#: backend.c:12068
 msgid "No more games in this message"
 msgstr "Keine weiteren Partien in dieser Nachricht"
 
-#: backend.c:11634
+#: backend.c:12108
 msgid "No game has been loaded yet"
 msgstr "Noch keine Partie geladen"
 
-#: backend.c:11638 backend.c:12505 ngamelist.c:129
+#: backend.c:12112 backend.c:12991 ngamelist.c:129
 msgid "Can't back up any further"
 msgstr "Kann nicht weiter zurückgehen"
 
-#: backend.c:12077
+#: backend.c:12553
 msgid "Game number out of range"
 msgstr "Partienummer außerhalb des Bereichs"
 
-#: backend.c:12088
+#: backend.c:12564
 msgid "Can't seek on game file"
 msgstr "Kann nicht in der Partiedatei suchen"
 
-#: backend.c:12146
+#: backend.c:12622
 msgid "Game not found in file"
 msgstr "Spiel in Datei nicht gefunden"
 
-#: backend.c:12274 backend.c:12601
+#: backend.c:12751 backend.c:13087
 msgid "Bad FEN position in file"
 msgstr "Schlechte FEN-Stellung in Datei"
 
-#: backend.c:12426
+#: backend.c:12903
 msgid "No moves in game"
 msgstr "Keine Züge in dem Spiel"
 
-#: backend.c:12501
+#: backend.c:12987
 msgid "No position has been loaded yet"
 msgstr "Noch keine Stellung geladen"
 
-#: backend.c:12562 backend.c:12573
+#: backend.c:13048 backend.c:13059
 msgid "Can't seek on position file"
 msgstr "Kann nicht in Stellungsdatei suchen"
 
-#: backend.c:12580 backend.c:12592
+#: backend.c:13066 backend.c:13078
 msgid "Position not found in file"
 msgstr "Stellung in Datei nicht gefunden"
 
-#: backend.c:12632
+#: backend.c:13118
 msgid "Black to play"
 msgstr "Schwarz am Zug"
 
-#: backend.c:12635
+#: backend.c:13121
 msgid "White to play"
 msgstr "Weiß am Zug"
 
-#: backend.c:12722 backend.c:13083
+#: backend.c:13208 backend.c:13572
 msgid "Waiting for access to save file"
 msgstr "Warte auf Zugriff zur Datei zum Speichern"
 
-#: backend.c:12724
+#: backend.c:13210
 msgid "Saving game"
 msgstr "Speichere Spiel"
 
-#: backend.c:12725
+#: backend.c:13211
 msgid "Bad Seek"
 msgstr "Fehlerhafte Suche"
 
-#: backend.c:13085
+#: backend.c:13574
 msgid "Saving position"
 msgstr "Speichere Stellung "
 
-#: backend.c:13211
+#: backend.c:13700
 msgid ""
 "You have edited the game history.\n"
 "Use Reload Same Game and make your move again."
@@ -560,7 +585,7 @@ msgstr ""
 "Sie haben die Partieentwicklung verändert.\n"
 "Benutzen Sie »Spiel erneut laden« und führen Sie ihren Zug erneut aus."
 
-#: backend.c:13216
+#: backend.c:13705
 msgid ""
 "You have entered too many moves.\n"
 "Back up to the correct position and try again."
@@ -568,7 +593,7 @@ msgstr ""
 "Sie haben zu viele Züge eingegeben.\n"
 "Gehen Sie zur richtigen Stellung zurück und versuchen Sie es erneut."
 
-#: backend.c:13221
+#: backend.c:13710
 msgid ""
 "Displayed position is not current.\n"
 "Step forward to the correct position and try again."
@@ -576,11 +601,11 @@ msgstr ""
 "Die angezeigt Stellung ist nicht die aktuelle.\n"
 "Gehen Sie vorwärts zur richtigen Stellung und versuchen Sie es erneut."
 
-#: backend.c:13268
+#: backend.c:13757
 msgid "You have not made a move yet"
 msgstr "Sie haben noch keinen Zug gemacht"
 
-#: backend.c:13289
+#: backend.c:13778
 msgid ""
 "The cmail message is not loaded.\n"
 "Use Reload CMail Message and make your move again."
@@ -589,11 +614,11 @@ msgstr ""
 "Benutzen sie »CMail Nachricht erneut laden« und führen Sie ihren Zug erneut "
 "aus."
 
-#: backend.c:13294
+#: backend.c:13783
 msgid "No unfinished games"
 msgstr "Keine laufenden Partien"
 
-#: backend.c:13300
+#: backend.c:13789
 #, c-format
 msgid ""
 "You have already mailed a move.\n"
@@ -608,211 +633,213 @@ msgstr ""
 "»cmail -remail -game %s«\n"
 "in die Kommandozeile."
 
-#: backend.c:13315
+#: backend.c:13804
 msgid "Failed to invoke cmail"
 msgstr "Fehler beim Aufruf von cmail"
 
-#: backend.c:13377
+#: backend.c:13866
 #, c-format
 msgid "Waiting for reply from opponent\n"
 msgstr "Warte auf Antwort des Gegners\n"
 
-#: backend.c:13399
+#: backend.c:13888
 #, c-format
 msgid "Still need to make move for game\n"
 msgstr "Sie müssen noch einen Zug für die Partie machen\n"
 
-#: backend.c:13403
+#: backend.c:13892
 #, c-format
 msgid "Still need to make moves for both games\n"
 msgstr "Sie müssen noch Züge für beide Partien machen\n"
 
-#: backend.c:13407
+#: backend.c:13896
 #, c-format
 msgid "Still need to make moves for all %d games\n"
 msgstr "Sie müssen noch Züge für alle %d Partien machen\n"
 
-#: backend.c:13414
+#: backend.c:13903
 #, c-format
 msgid "Still need to make a move for game %s\n"
 msgstr "Sie müssen noch einen Zug für Partie %s machen\n"
 
-#: backend.c:13420
+#: backend.c:13909
 #, c-format
 msgid "No unfinished games\n"
 msgstr "Keine laufenden Partien\n"
 
-#: backend.c:13422
+#: backend.c:13911
 #, c-format
 msgid "Ready to send mail\n"
 msgstr "Bereit zum Versenden der Mail\n"
 
-#: backend.c:13427
+#: backend.c:13916
 #, c-format
 msgid "Still need to make moves for games %s\n"
 msgstr "Sie müssen noch Züge für Partie %s machen\n"
 
-#: backend.c:13631
+#: backend.c:14118
 msgid "Edit comment"
 msgstr "Editiere Kommentar"
 
-#: backend.c:13633
+#: backend.c:14120
 #, c-format
 msgid "Edit comment on %d.%s%s"
 msgstr "Editiere Kommentar für %d.%s%s"
 
-#: backend.c:13688
+#: backend.c:14175
 #, c-format
 msgid "You are not observing a game"
 msgstr "Sie schauen keiner Partie zu"
 
-#: backend.c:13796
+#: backend.c:14286
 msgid "It is not White's turn"
 msgstr "Weiß ist nicht am Zug"
 
-#: backend.c:13877
+#: backend.c:14367
 msgid "It is not Black's turn"
 msgstr "Schwarz ist nicht am Zug"
 
-#: backend.c:13985
+#: backend.c:14475
 #, c-format
 msgid "Starting %s chess program"
 msgstr "Starte %s Schachprogramm"
 
-#: backend.c:14013 backend.c:15127
+#: backend.c:14503 backend.c:15648
+#, fuzzy
 msgid ""
 "Wait until your turn,\n"
-"or select Move Now"
+"or select 'Move Now'."
 msgstr ""
 "Warte bis Sie am Zug sind\n"
 "oder wähle »Ziehe jetzt«"
 
-#: backend.c:14147
+#: backend.c:14638
 msgid "Training mode off"
 msgstr "Trainier-Modus aus"
 
-#: backend.c:14155
+#: backend.c:14646
 msgid "Training mode on"
 msgstr "Trainier-Modus ein"
 
-#: backend.c:14158
+#: backend.c:14649
 msgid "Already at end of game"
 msgstr "Schon am Ende der Partie"
 
-#: backend.c:14238
+#: backend.c:14729
 msgid "Warning: You are still playing a game"
 msgstr "Warnung: Sie spielen noch eine Partie"
 
-#: backend.c:14241
+#: backend.c:14732
 msgid "Warning: You are still observing a game"
 msgstr "Warnung: Sie schauen noch einer Partie zu"
 
-#: backend.c:14244
+#: backend.c:14735
 msgid "Warning: You are still examining a game"
 msgstr "Warnung: Sie untersuchen noch eine Partie"
 
-#: backend.c:14311
+#: backend.c:14802
 msgid "Click clock to clear board"
 msgstr "Klicke auf eine Uhr, um das Brett zu leeren"
 
-#: backend.c:14321
+#: backend.c:14812
 msgid "Close ICS engine analyze..."
 msgstr "Schließe ICS Programmanalyse…"
 
-#: backend.c:14609
+#: backend.c:15130
 msgid "That square is occupied"
 msgstr "Dieses Feld ist besetzt"
 
-#: backend.c:14633 backend.c:14659
+#: backend.c:15154 backend.c:15180
 msgid "There is no pending offer on this move"
 msgstr "Es liegt kein unbeantwortes Angebot für diesen Zug vor"
 
-#: backend.c:14695 backend.c:14706
+#: backend.c:15216 backend.c:15227
 msgid "Your opponent is not out of time"
 msgstr "Ihr Gegner hat die Zeit noch nicht überschritten"
 
-#: backend.c:14772
+#: backend.c:15293
 msgid "You must make your move before offering a draw"
-msgstr "Sie müssem erst ziehen bevor Sie Remi anbieten können"
+msgstr "Sie müssem erst ziehen bevor Sie Remis anbieten können"
 
-#: backend.c:15109
+#: backend.c:15630
 msgid "You are not examining a game"
 msgstr "Sie untersuchen keine Partie"
 
-#: backend.c:15113
+#: backend.c:15634
 msgid "You can't revert while pausing"
 msgstr "Sie können nicht zurücknehmen solange die Partie pausiert"
 
-#: backend.c:15167 backend.c:15174
+#: backend.c:15688 backend.c:15695
 msgid "It is your turn"
 msgstr "Sie sind am Zug"
 
-#: backend.c:15225 backend.c:15232 backend.c:15285 backend.c:15292
-msgid "Wait until your turn"
+#: backend.c:15746 backend.c:15753 backend.c:15806 backend.c:15813
+#, fuzzy
+msgid "Wait until your turn."
 msgstr "Warten Sie bis Sie am Zug sind"
 
-#: backend.c:15237
+#: backend.c:15758
 msgid "No hint available"
 msgstr "Kein Hinweis erhältlich"
 
-#: backend.c:15253 ngamelist.c:355
+#: backend.c:15774 ngamelist.c:355
 msgid "Game list not loaded or empty"
 msgstr "Noch keine Partie geladen"
 
-#: backend.c:15260
+#: backend.c:15781
 msgid "Book file exists! Try again for overwrite."
 msgstr "Buchdatei existiert! Versuche erneut zum Überschreiben."
 
-#: backend.c:15738
+#: backend.c:16259
 #, c-format
 msgid "Error writing to %s chess program"
 msgstr "Fehler beim Schreiben zum Schachprogramm %s"
 
-#: backend.c:15741 backend.c:15772
+#: backend.c:16262 backend.c:16293
 #, c-format
 msgid "%s program exits in draw position (%s)"
-msgstr "%s Schachprogramm beendet in Remistellung (%s)"
+msgstr "%s Schachprogramm beendet in Remisstellung (%s)"
 
-#: backend.c:15767
+#: backend.c:16288
 #, c-format
 msgid "Error: %s chess program (%s) exited unexpectedly"
 msgstr "Fehler: %s Schachprogramm (%s) unerwartet beendet"
 
-#: backend.c:15785
+#: backend.c:16306
 #, c-format
 msgid "Error reading from %s chess program (%s)"
 msgstr "Fehler beim Lesen vom Schachprogramm %s (%s)"
 
-#: backend.c:16187
+#: backend.c:16730
 #, c-format
 msgid "%s engine has too many options\n"
 msgstr "Schachprogramm %s hat zu viele Optionen\n"
 
-#: backend.c:16343
+#: backend.c:16886
 msgid "Displayed move is not current"
 msgstr "Angezeigter Zug ist nicht aktuell"
 
-#: backend.c:16352
+#: backend.c:16895
 msgid "Could not parse move"
 msgstr "Konnte Zug nicht parsen"
 
-#: backend.c:16477 backend.c:16499
+#: backend.c:17020 backend.c:17042
 msgid "Both flags fell"
 msgstr "Beide Zeitkontrollen überschritten"
 
-#: backend.c:16479
+#: backend.c:17022
 msgid "White's flag fell"
 msgstr "Weiß überschritt die Zeitkontrolle"
 
-#: backend.c:16501
+#: backend.c:17044
 msgid "Black's flag fell"
 msgstr "Schwarz überschritt die Zeitkontrolle"
 
-#: backend.c:16632
+#: backend.c:17175
 msgid "Clock adjustment not allowed in auto-flag mode"
 msgstr "Veränderungen an der Uhr sind im »Auto-flag«-Modus nicht erlaubt"
 
-#: backend.c:17467
+#: backend.c:18025
 msgid "Bad FEN position in clipboard"
 msgstr "Schlechte FEN-Stellung in der Zwischenablage"
 
@@ -832,1357 +859,1416 @@ msgstr "Hash-schlüssel verschieden"
 msgid "Could not create book"
 msgstr "Konnte Buch nicht erzeugen"
 
-#: dialogs.c:259
+#: dialogs.c:283
 msgid "Tournament file:          "
 msgstr "Turnierdatei:          "
 
-#: dialogs.c:260
+#: dialogs.c:284
+msgid "For concurrent playing of tourney with multiple XBoards:"
+msgstr ""
+
+#: dialogs.c:285
 msgid "Sync after round"
 msgstr "Sync. nach der Runde"
 
-#: dialogs.c:261
-msgid "    (for concurrent playing of a single"
-msgstr ""
-
-#: dialogs.c:262
+#: dialogs.c:286
 msgid "Sync after cycle"
 msgstr "Sync. nach Zyklus"
 
-#: dialogs.c:263
-msgid "      tourney with multiple XBoards)"
-msgstr ""
-
-#: dialogs.c:264
+#: dialogs.c:287
 msgid "Tourney participants:"
 msgstr "Tunierteilnehmer:"
 
-#: dialogs.c:265
+#: dialogs.c:288
 msgid "Select Engine:"
 msgstr "Wähle Schachprogramm:"
 
-#: dialogs.c:273
+#: dialogs.c:296
 msgid "Tourney type (0 = round-robin, 1 = gauntlet):"
 msgstr "Turniertyp (0 = round-robin, 1 = gauntlet):"
 
-#: dialogs.c:274
+#: dialogs.c:297
 msgid "Number of tourney cycles (or Swiss rounds):"
 msgstr "Anzahl der Turnierrunden:"
 
-#: dialogs.c:275
+#: dialogs.c:298
 msgid "Default Number of Games in Match (or Pairing):"
 msgstr ""
 
-#: dialogs.c:276
+#: dialogs.c:299
 msgid "Pause between Match Games (msec):"
 msgstr "Pause zwischen Tournierspielen (msek):"
 
-#: dialogs.c:277
+#: dialogs.c:300
 msgid "Save Tourney Games on:"
 msgstr "Speichere Turnierspiele:"
 
-#: dialogs.c:278
+#: dialogs.c:301
 msgid "Game File with Opening Lines:"
 msgstr ""
 
-#: dialogs.c:279
+#: dialogs.c:302
 msgid "Game Number (-1 or -2 = Auto-Increment):"
 msgstr ""
 
-#: dialogs.c:280
+#: dialogs.c:303
 msgid "File with Start Positions:"
 msgstr "Datei mit Startstellung:"
 
-#: dialogs.c:281
+#: dialogs.c:304
 msgid "Position Number (-1 or -2 = Auto-Increment):"
 msgstr ""
 
-#: dialogs.c:282
+#: dialogs.c:305
 msgid "Rewind Index after this many Games (0 = never):"
 msgstr ""
 
-#: dialogs.c:283
+#: dialogs.c:306
 msgid "Disable own engine books by default"
 msgstr ""
 
-#: dialogs.c:284
+#: dialogs.c:307 dialogs.c:1565
+msgid "Time Control"
+msgstr "Zeitkontrolle"
+
+#: dialogs.c:308
+#, fuzzy
+msgid "Common Engine"
+msgstr "Allgemein Schachprogramme…"
+
+#: dialogs.c:309 dialogs.c:441
+msgid "General Options"
+msgstr "Allgemeine Einstellungen"
+
+#: dialogs.c:310
+msgid "Continue Later"
+msgstr ""
+
+#: dialogs.c:311
 msgid "Replace Engine"
 msgstr "Ersetze Schachprogramm"
 
-#: dialogs.c:285
+#: dialogs.c:312
 msgid "Upgrade Engine"
 msgstr "Ersetze Schachprogramm"
 
-#: dialogs.c:286
+#: dialogs.c:313
 msgid "Clone Tourney"
 msgstr "Klone Turnier"
 
-#: dialogs.c:316
+#: 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"
 
-#: dialogs.c:332 dialogs.c:1320
+#: dialogs.c:367 dialogs.c:1407
 msgid "# no engines are installed"
 msgstr "# keine Schachprogramme installiert"
 
-#: dialogs.c:344
-msgid "Match Options"
-msgstr "Partieeinstellungen"
+#: dialogs.c:375
+msgid "Internal error: PARTICIPANTS set wrong"
+msgstr ""
+
+#: dialogs.c:383
+#, fuzzy
+msgid "Tournament Options"
+msgstr "Klangeinstellungen"
 
-#: dialogs.c:363
+#: dialogs.c:402
 msgid "Absolute Analysis Scores"
 msgstr ""
 
-#: dialogs.c:364
+#: dialogs.c:403
 msgid "Almost Always Queen (Detour Under-Promote)"
 msgstr ""
 
-#: dialogs.c:365 menus.c:714
+#: dialogs.c:404 menus.c:714
 msgid "Animate Dragging"
 msgstr "Ziehen animieren"
 
-#: dialogs.c:366 menus.c:715
+#: dialogs.c:405 menus.c:715
 msgid "Animate Moving"
 msgstr "Ziehen animieren"
 
-#: dialogs.c:367 menus.c:716
+#: dialogs.c:406 menus.c:716
 msgid "Auto Flag"
 msgstr "Zeit automatisch reklamieren"
 
-#: dialogs.c:368 menus.c:717
+#: dialogs.c:407 menus.c:717
 msgid "Auto Flip View"
 msgstr "Brett automatisch drehen"
 
-#: dialogs.c:369 menus.c:718
+#: dialogs.c:408 menus.c:718
 msgid "Blindfold"
 msgstr "Blindschach"
 
-#: dialogs.c:370
+#. 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 ""
 
-#: dialogs.c:371
+#: dialogs.c:411
 msgid "Enable Variation Trees"
+msgstr "Erlaube Varianten"
+
+#: dialogs.c:412
+msgid "Headers in Engine Output Window"
 msgstr ""
 
-#: dialogs.c:372
+#: dialogs.c:413
 msgid "Hide Thinking from Human"
 msgstr ""
 
-#: dialogs.c:373 menus.c:723
+#: dialogs.c:414 menus.c:723
 msgid "Highlight Last Move"
 msgstr "Letzten Zug hervorheben"
 
-#: dialogs.c:374
+#: dialogs.c:415
 msgid "Highlight with Arrow"
 msgstr "Hervorhebung mit Pfeil"
 
-#: dialogs.c:375 menus.c:726
+#: dialogs.c:416 menus.c:726
 msgid "One-Click Moving"
 msgstr "Ein-Klick Züge"
 
-#: dialogs.c:376
+#: dialogs.c:417
 msgid "Periodic Updates (in Analysis Mode)"
 msgstr ""
 
-#: dialogs.c:378
+#: dialogs.c:419
 msgid "Play Move(s) of Clicked PV (Analysis)"
 msgstr ""
 
-#: dialogs.c:379 dialogs.c:514 menus.c:728
+#: dialogs.c:420 dialogs.c:597 menus.c:728
 msgid "Ponder Next Move"
 msgstr "Nächsten Zug abwägen"
 
-#: dialogs.c:380
+#: dialogs.c:421
 msgid "Popup Exit Messages"
 msgstr "Popup Nachricht beim Beenden"
 
-#: dialogs.c:381 menus.c:730
+#: dialogs.c:422 menus.c:730
 msgid "Popup Move Errors"
 msgstr "Dialogfenster für Zugfehler"
 
-#: dialogs.c:382
+#: dialogs.c:423
 msgid "Scores in Move List"
 msgstr "Bewertung in Zugliste"
 
-#: dialogs.c:383
+#: dialogs.c:424
 msgid "Show Coordinates"
 msgstr "Zeige Koordinaten"
 
-#: dialogs.c:384
+#: dialogs.c:425
 msgid "Show Target Squares"
 msgstr "Zeige Zielfeld"
 
-#: dialogs.c:385
+#: dialogs.c:426
 msgid "Sticky Windows"
 msgstr ""
 
-#: dialogs.c:386 menus.c:733
+#: dialogs.c:427 menus.c:733
 msgid "Test Legality"
 msgstr ""
 
-#: dialogs.c:387
+#: dialogs.c:428
 msgid "Top-Level Dialogs"
 msgstr ""
 
-#: dialogs.c:388
+#: dialogs.c:429
 msgid "Flash Moves (0 = no flashing):"
 msgstr ""
 
-#: dialogs.c:389
+#: dialogs.c:430
 msgid "Flash Rate (high = fast):"
 msgstr ""
 
-#: dialogs.c:390
+#: dialogs.c:431
 msgid "Animation Speed (high = slow):"
 msgstr ""
 
-#: dialogs.c:391
+#: dialogs.c:432
 msgid "Zoom factor in Evaluation Graph:"
 msgstr "Vergrößerungsfaktor in Auswertungsgraph:"
 
-#: dialogs.c:400
-msgid "General Options"
-msgstr "Allgemeine Einstellungen"
-
-#: dialogs.c:410
-msgid "normal"
+#: dialogs.c:452
+#, fuzzy
+msgid "Normal"
 msgstr "Normal"
 
-#: dialogs.c:411
-msgid "makruk"
+#: dialogs.c:453
+msgid "Makruk"
 msgstr ""
 
-#: dialogs.c:412
+#: dialogs.c:454
 msgid "FRC"
 msgstr ""
 
-#: dialogs.c:413
-msgid "shatranj"
+#: dialogs.c:455
+msgid "Shatranj"
 msgstr ""
 
-#: dialogs.c:414
-msgid "wild castle"
-msgstr ""
+#: dialogs.c:456
+#, fuzzy
+msgid "Wild castle"
+msgstr "keine Rochade"
 
-#: dialogs.c:415
-msgid "knightmate"
-msgstr ""
+#: dialogs.c:457
+#, fuzzy
+msgid "Knightmate"
+msgstr "Springer"
 
-#: dialogs.c:416
-msgid "no castle"
-msgstr ""
+#: dialogs.c:458
+#, fuzzy
+msgid "No castle"
+msgstr "keine Rochade"
 
-#: dialogs.c:417
-msgid "cylinder *"
+#: dialogs.c:459
+msgid "Cylinder *"
 msgstr ""
 
-#: dialogs.c:418
+#: dialogs.c:460
 msgid "3-checks"
 msgstr ""
 
-#: dialogs.c:419
+#: dialogs.c:461
 msgid "berolina *"
 msgstr ""
 
-#: dialogs.c:420
+#: dialogs.c:462
 msgid "atomic"
 msgstr ""
 
-#: dialogs.c:421
+#: dialogs.c:463
 msgid "two kings"
+msgstr "Zwei Könige"
+
+#: dialogs.c:464
+msgid " "
+msgstr " "
+
+#: dialogs.c:465
+msgid "Spartan"
 msgstr ""
 
-#: dialogs.c:422
+#: dialogs.c:466
 msgid "Board size ( -1 = default for selected variant):"
-msgstr ""
+msgstr "Brettgröße (-1 = default für gewählte Variante):"
 
-#: dialogs.c:423
+#: dialogs.c:467
 msgid "Number of Board Ranks:"
 msgstr "Anzahl der Reihen:"
 
-#: dialogs.c:424
+#: dialogs.c:468
 msgid "Number of Board Files:"
 msgstr "Anzahl der Linien:"
 
-#: dialogs.c:425
+#: dialogs.c:469
 msgid "Holdings Size:"
 msgstr ""
 
-#: dialogs.c:429
-msgid "fairy"
+#: dialogs.c:471
+msgid ""
+"Variants marked with * can only be played\n"
+"with legality testing off."
 msgstr ""
 
-#: dialogs.c:430
+#: dialogs.c:473
+msgid "ASEAN"
+msgstr ""
+
+#: dialogs.c:474
 msgid "Great Shatranj (10x8)"
 msgstr ""
 
-#: dialogs.c:431
+#: dialogs.c:475
 msgid "Seirawan"
 msgstr ""
 
-#: dialogs.c:432
-msgid "falcon (10x8)"
+#: dialogs.c:476
+msgid "Falcon (10x8)"
 msgstr ""
 
-#: dialogs.c:433
+#: dialogs.c:477
 msgid "Superchess"
 msgstr ""
 
-#: dialogs.c:434
+#: dialogs.c:478
 msgid "Capablanca (10x8)"
 msgstr ""
 
-#: dialogs.c:435
-msgid "crazyhouse"
+#: dialogs.c:479
+msgid "Crazyhouse"
 msgstr ""
 
-#: dialogs.c:436
+#: dialogs.c:480
 msgid "Gothic (10x8)"
 msgstr ""
 
-#: dialogs.c:437
-msgid "bughouse"
+#: dialogs.c:481
+#, fuzzy
+msgid "Bughouse"
 msgstr "Tandemschach"
 
-#: dialogs.c:438
-msgid "janus (10x8)"
+#: dialogs.c:482
+msgid "Janus (10x8)"
 msgstr ""
 
-#: dialogs.c:439
-msgid "suicide"
-msgstr ""
+#: dialogs.c:483
+#, fuzzy
+msgid "Suicide"
+msgstr "Räuberschach"
 
-#: dialogs.c:440
+#: dialogs.c:484
 msgid "CRC (10x8)"
 msgstr ""
 
-#: dialogs.c:441
+#: dialogs.c:485
 msgid "give-away"
 msgstr ""
 
-#: dialogs.c:442
+#: dialogs.c:486
 msgid "grand (10x10)"
 msgstr ""
 
-#: dialogs.c:443
+#: dialogs.c:487
 msgid "losers"
 msgstr ""
 
-#: dialogs.c:444
+#: dialogs.c:488
 msgid "shogi (9x9)"
 msgstr ""
 
-#: dialogs.c:445
-msgid "Spartan"
+#: dialogs.c:489
+msgid "fairy"
 msgstr ""
 
-#: dialogs.c:446
+#: dialogs.c:490
 msgid "xiangqi (9x10)"
 msgstr ""
 
-#: dialogs.c:447
-msgid " "
-msgstr " "
+#: dialogs.c:491
+msgid "mighty lion"
+msgstr ""
 
-#: dialogs.c:448
+#: dialogs.c:492
 msgid "courier (12x8)"
 msgstr ""
 
-#: dialogs.c:465
+#: dialogs.c:493
+msgid "chu chess (10x10)"
+msgstr ""
+
+#: dialogs.c:494
+msgid "chu shogi (12x12)"
+msgstr ""
+
+#: dialogs.c:526
 #, c-format
 msgid "Warning: second engine (%s) does not support this!"
 msgstr "Warnung: zweites Schachprogramm (%s) unterstützt dies nicht!"
 
-#: dialogs.c:488
+#: dialogs.c:554
 #, c-format
-msgid "Only bughouse is not available in viewer mode"
+msgid "Only bughouse is not available in viewer mode."
 msgstr ""
 
-#: dialogs.c:489
+#: dialogs.c:555
 #, c-format
 msgid ""
-"All variants not supported by first engine\n"
-"(currently %s) are disabled"
+"All variants not supported by the first engine\n"
+"(currently %s) are disabled."
 msgstr ""
 
-#: dialogs.c:490
+#: dialogs.c:572
 msgid "New Variant"
 msgstr "Neue Variante"
 
-#: dialogs.c:515
+#: dialogs.c:598
 msgid "Maximum Number of CPUs per Engine:"
 msgstr "Maximal Anzahl der CPUs pro Schachprogram:"
 
-#: dialogs.c:516
+#: dialogs.c:599
 msgid "Polygot Directory:"
 msgstr "Polyglot-verzeichnis:"
 
-#: dialogs.c:517
+#: dialogs.c:600
 msgid "Hash-Table Size (MB):"
 msgstr "Größe der Hashtabelle (MB):"
 
-#: dialogs.c:518
+#: dialogs.c:601
 msgid "Nalimov EGTB Path:"
 msgstr ""
 
-#: dialogs.c:519
+#: dialogs.c:602
 msgid "EGTB Cache Size (MB):"
 msgstr ""
 
-#: dialogs.c:520
+#: dialogs.c:603
 msgid "Use GUI Book"
 msgstr ""
 
-#: dialogs.c:521
+#: dialogs.c:604
 msgid "Opening-Book Filename:"
 msgstr "Dateiname des Eröffnungsbuches:"
 
-#: dialogs.c:522
+#: dialogs.c:605
 msgid "Book Depth (moves):"
 msgstr ""
 
-#: dialogs.c:523
+#: dialogs.c:606
 msgid "Book Variety (0) vs. Strength (100):"
 msgstr ""
 
-#: dialogs.c:524
+#: dialogs.c:607
 msgid "Engine #1 Has Own Book"
 msgstr ""
 
-#: dialogs.c:525
+#: dialogs.c:608
 msgid "Engine #2 Has Own Book          "
 msgstr ""
 
-#: dialogs.c:534
+#: dialogs.c:617
 msgid "Common Engine Settings"
 msgstr ""
 
-#: dialogs.c:540
+#: dialogs.c:623
 msgid "Detect all Mates"
 msgstr ""
 
-#: dialogs.c:541
+#: dialogs.c:624
 msgid "Verify Engine Result Claims"
 msgstr ""
 
-#: dialogs.c:542
+#: dialogs.c:625
 msgid "Draw if Insufficient Mating Material"
 msgstr ""
 
-#: dialogs.c:543
+#: dialogs.c:626
 msgid "Adjudicate Trivial Draws (3-Move Delay)"
 msgstr ""
 
-#: dialogs.c:544
+#: dialogs.c:627
 msgid "N-Move Rule:"
 msgstr "N-Züge Regel:"
 
-#: dialogs.c:545
+#: dialogs.c:628
 msgid "N-fold Repeats:"
 msgstr ""
 
-#: dialogs.c:546
+#: dialogs.c:629
 msgid "Draw after N Moves Total:"
-msgstr "Remi nach N Zügen (total):"
+msgstr "Remis nach N Zügen (total):"
 
-#: dialogs.c:547
+#: dialogs.c:630
 msgid "Win / Loss Threshold:"
 msgstr "Gewinn/Verlust Grenzwert:"
 
-#: dialogs.c:548
+#: dialogs.c:631
 msgid "Negate Score of Engine #1"
 msgstr "Negiere Bewertung des 1. Schachprogramms"
 
-#: dialogs.c:549
+#: dialogs.c:632
 msgid "Negate Score of Engine #2"
 msgstr "Negiere Bewertung des 2. Schachprogramms"
 
-#: dialogs.c:556
+#: dialogs.c:639
 #, fuzzy
 msgid "Adjudicate non-ICS Games"
 msgstr "Gewinn Weiß zuerkennen"
 
-#: dialogs.c:569
+#: dialogs.c:652
 msgid "Auto-Kibitz"
 msgstr "Auto-Kibitz"
 
-#: dialogs.c:570
+#: dialogs.c:653
 msgid "Auto-Comment"
 msgstr "Automatische Kommentare"
 
-#: dialogs.c:571
+#: dialogs.c:654
 msgid "Auto-Observe"
 msgstr "Automatisch Beobachten"
 
-#: dialogs.c:572
+#: dialogs.c:655
 msgid "Auto-Raise Board"
 msgstr "Automatisch das Brett in den Vordergrung bringen"
 
-#: dialogs.c:573
+#: dialogs.c:656
 msgid "Auto-Create Logon Script"
 msgstr "Automatisch Login-skript erzeugen"
 
-#: dialogs.c:574
+#: dialogs.c:657
 msgid "Background Observe while Playing"
 msgstr "Beobachte im Hintegrund während einer Partie"
 
-#: dialogs.c:575
+#: dialogs.c:658
 msgid "Dual Board for Background-Observed Game"
 msgstr "Zweites Brett für beobachtetes Spiel"
 
-#: dialogs.c:576
+#: dialogs.c:659
 msgid "Get Move List"
 msgstr "Zugliste abholen"
 
-#: dialogs.c:577
+#: dialogs.c:660
 msgid "Quiet Play"
 msgstr ""
 
-#: dialogs.c:578
+#: dialogs.c:661
 msgid "Seek Graph"
-msgstr ""
+msgstr "Suchgraph"
 
-#: dialogs.c:579
+#: dialogs.c:662
 msgid "Auto-Refresh Seek Graph"
 msgstr ""
 
-#: dialogs.c:580
+#: dialogs.c:663
 msgid "Auto-InputBox PopUp"
 msgstr ""
 
-#: dialogs.c:581
+#: dialogs.c:664
+#, fuzzy
+msgid "Quit after game"
+msgstr "Warte auf weiter Spiele"
+
+#: dialogs.c:665
 msgid "Premove"
 msgstr ""
 
-#: dialogs.c:582
+#: dialogs.c:666
 msgid "Premove for White"
 msgstr ""
 
-#: dialogs.c:583
+#: dialogs.c:667
 msgid "First White Move:"
 msgstr "Erster Zug von Weiß:"
 
-#: dialogs.c:584
+#: dialogs.c:668
 msgid "Premove for Black"
 msgstr ""
 
-#: dialogs.c:585
+#: dialogs.c:669
 msgid "First Black Move:"
 msgstr "Erster Zug von Schwarz:"
 
-#: dialogs.c:587
+#: dialogs.c:671
 msgid "Alarm"
 msgstr "Alarm"
 
-#: dialogs.c:588
+#: dialogs.c:672
 msgid "Alarm Time (msec):"
 msgstr "Alarmzeit (msek):"
 
-#: dialogs.c:590
+#: dialogs.c:674
 msgid "Colorize Messages"
 msgstr "Nachrichten kolorieren"
 
-#: dialogs.c:591
+#: dialogs.c:675
 msgid "Shout Text Colors:"
 msgstr "Textfarbe Ruf:"
 
-#: dialogs.c:592
+#: dialogs.c:676
 msgid "S-Shout Text Colors:"
 msgstr "Textfarbe S-Ruf:"
 
-#: dialogs.c:593
+#: dialogs.c:677
 msgid "Channel #1 Text Colors:"
 msgstr "Textfarbe Kanal #1:"
 
-#: dialogs.c:594
+#: dialogs.c:678
 msgid "Other Channel Text Colors:"
 msgstr "Textfarbe andere Kanäle:"
 
-#: dialogs.c:595
+#: dialogs.c:679
 msgid "Kibitz Text Colors:"
 msgstr "Textfarbe Kibitz:"
 
-#: dialogs.c:596
+#: dialogs.c:680
 msgid "Tell Text Colors:"
 msgstr "Textfarbe Mitteilung:"
 
-#: dialogs.c:597
+#: dialogs.c:681
 msgid "Challenge Text Colors:"
-msgstr ""
+msgstr "Textfarbe Herausforderung:"
 
-#: dialogs.c:598
+#: dialogs.c:682
 msgid "Request Text Colors:"
 msgstr ""
 
-#: dialogs.c:599
+#: dialogs.c:683
 msgid "Seek Text Colors:"
-msgstr ""
+msgstr "Textfarbe Spielgesuch:"
 
-#: dialogs.c:606
+#: dialogs.c:690
 msgid "ICS Options"
 msgstr "ICS Optionen"
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Exact position match"
 msgstr ""
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Shown position is subset"
 msgstr ""
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Same material with exactly same Pawn chain"
 msgstr "Gleiches Material mit genau gleicher Bauernstruktur"
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Same material"
 msgstr "Gleiches Material"
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Material range (top board half optional)"
 msgstr ""
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Material difference (optional stuff balanced)"
 msgstr ""
 
-#: dialogs.c:624
+#: dialogs.c:708
 msgid "Auto-Display Tags"
 msgstr ""
 
-#: dialogs.c:625
+#: dialogs.c:709
 msgid "Auto-Display Comment"
 msgstr ""
 
-#: dialogs.c:626
+#: dialogs.c:710
 msgid ""
 "Auto-Play speed of loaded games\n"
 "(0 = instant, -1 = off):"
 msgstr ""
 
-#: dialogs.c:627
+#: dialogs.c:711
 msgid "Seconds per Move:"
 msgstr "Sekunden pro Zug:"
 
-#: dialogs.c:628
+#: dialogs.c:712
 msgid ""
 "\n"
 "options to use in game-viewer mode:"
 msgstr ""
 
-#: dialogs.c:630
+#: dialogs.c:714
 msgid ""
 "\n"
 "Thresholds for position filtering in game list:"
 msgstr ""
 
-#: dialogs.c:631
+#: dialogs.c:715
 msgid "Elo of strongest player at least:"
 msgstr "Mind. Elo des stärksten Spielers:"
 
-#: dialogs.c:632
+#: dialogs.c:716
 msgid "Elo of weakest player at least:"
 msgstr "Mind. Elo des schwächsten Spielers:"
 
-#: dialogs.c:633
+#: dialogs.c:717
 msgid "No games before year:"
 msgstr "Keine Partie vor Jahr:"
 
-#: dialogs.c:634
+#: dialogs.c:718
 msgid "Minimum nr consecutive positions:"
 msgstr ""
 
-#: dialogs.c:635
+#: dialogs.c:719
 msgid "Search mode:"
 msgstr "Such-modus:"
 
-#: dialogs.c:636
+#: dialogs.c:720
 msgid "Also match reversed colors"
 msgstr ""
 
-#: dialogs.c:637
+#: dialogs.c:721
 msgid "Also match left-right flipped position"
 msgstr ""
 
-#: dialogs.c:645
+#: dialogs.c:729
 msgid "Load Game Options"
 msgstr "Spieleinstellungen laden"
 
-#: dialogs.c:657
+#: dialogs.c:741
 msgid "Auto-Save Games"
 msgstr "Automatisch Partien speichern"
 
-#: dialogs.c:658
+#: dialogs.c:742
 msgid "Own Games Only"
-msgstr ""
+msgstr "Nur eigene Partien"
 
-#: dialogs.c:659
+#: dialogs.c:743
 msgid "Save Games on File:"
 msgstr "Partien speichern als Datei:"
 
-#: dialogs.c:660
+#: dialogs.c:744
 msgid "Save Final Positions on File:"
 msgstr "Speichere Endstellung in Datei:"
 
-#: dialogs.c:661
+#: dialogs.c:745
 msgid "PGN Event Header:"
 msgstr ""
 
-#: dialogs.c:662
+#: dialogs.c:746
 msgid "Old Save Style (as opposed to PGN)"
 msgstr ""
 
-#: dialogs.c:663
+#: dialogs.c:747
 msgid "Include Number Tag in tourney PGN"
 msgstr ""
 
-#: dialogs.c:664
+#: dialogs.c:748
 msgid "Save Score/Depth Info in PGN"
 msgstr ""
 
-#: dialogs.c:665
+#: dialogs.c:749
 msgid "Save Out-of-Book Info in PGN           "
 msgstr ""
 
-#: dialogs.c:672
+#: dialogs.c:756
 msgid "Save Game Options"
 msgstr "Spieleinstellungen speichern"
 
-#: dialogs.c:681
+#: dialogs.c:765
 msgid "No Sound"
 msgstr "Kein Ton"
 
-#: dialogs.c:682
+#: dialogs.c:766
 msgid "Default Beep"
 msgstr ""
 
-#: dialogs.c:683
+#: dialogs.c:767
 msgid "Above WAV File"
 msgstr ""
 
-#: dialogs.c:684
+#: dialogs.c:768
 msgid "Car Horn"
 msgstr "Hupe"
 
-#: dialogs.c:685
+#: dialogs.c:769
 msgid "Cymbal"
 msgstr ""
 
-#: dialogs.c:686
+#: dialogs.c:770
 msgid "Ding"
 msgstr ""
 
-#: dialogs.c:687
+#: dialogs.c:771
 msgid "Gong"
 msgstr ""
 
-#: dialogs.c:688
+#: dialogs.c:772
 msgid "Laser"
 msgstr "Laser"
 
-#: dialogs.c:689
+#: dialogs.c:773
 msgid "Penalty"
 msgstr ""
 
-#: dialogs.c:690
+#: dialogs.c:774
 msgid "Phone"
 msgstr ""
 
-#: dialogs.c:691
+#: dialogs.c:775
 msgid "Pop"
 msgstr ""
 
-#: dialogs.c:692
+#: dialogs.c:776
+msgid "Roar"
+msgstr ""
+
+#: dialogs.c:777
 msgid "Slap"
 msgstr ""
 
-#: dialogs.c:693
+#: dialogs.c:778
 msgid "Wood Thunk"
 msgstr ""
 
-#: dialogs.c:695
+#: dialogs.c:780
 msgid "User File"
 msgstr "Benutzerdatei"
 
-#: dialogs.c:717
+#: dialogs.c:803
 msgid "User WAV File:"
 msgstr ""
 
-#: dialogs.c:718
+#: dialogs.c:804
 msgid "Sound Program:"
 msgstr ""
 
-#: dialogs.c:719
+#: dialogs.c:805
 msgid "Try-Out Sound:"
 msgstr "Teste Geräusch:"
 
-#: dialogs.c:720
+#: dialogs.c:806
 msgid "Play"
 msgstr "Spielen"
 
-#: dialogs.c:721
+#: dialogs.c:807
 msgid "Move:"
 msgstr "Zug:"
 
-#: dialogs.c:722
+#: dialogs.c:808
 msgid "Win:"
 msgstr "Gewonnen:"
 
-#: dialogs.c:723
+#: dialogs.c:809
 msgid "Lose:"
 msgstr "Verloren:"
 
-#: dialogs.c:724
+#: dialogs.c:810
 msgid "Draw:"
-msgstr "Remi:"
+msgstr "Remis:"
 
-#: dialogs.c:725
+#: dialogs.c:811
 msgid "Unfinished:"
 msgstr "Nicht beendet:"
 
-#: dialogs.c:726
+#: dialogs.c:812
 msgid "Alarm:"
 msgstr "Alarm:"
 
-#: dialogs.c:727
+#: dialogs.c:813
 msgid "Challenge:"
-msgstr ""
+msgstr "Herausforderung:"
 
-#: dialogs.c:729
+#: dialogs.c:815
 msgid "Sounds Directory:"
-msgstr ""
+msgstr "Klangverzeichnis:"
 
-#: dialogs.c:730
+#: dialogs.c:816
 msgid "Shout:"
 msgstr "Ruf:"
 
-#: dialogs.c:731
+#: dialogs.c:817
 msgid "S-Shout:"
 msgstr "S-Ruf:"
 
-#: dialogs.c:732
+#: dialogs.c:818
 msgid "Channel:"
 msgstr "Kanal:"
 
-#: dialogs.c:733
+#: dialogs.c:819
 msgid "Channel 1:"
 msgstr "Kanal 1:"
 
-#: dialogs.c:734
+#: dialogs.c:820
 msgid "Tell:"
 msgstr "Mitteilung:"
 
-#: dialogs.c:735
+#: dialogs.c:821
 msgid "Kibitz:"
 msgstr "Kibitz:"
 
-#: dialogs.c:736
+#: dialogs.c:822
 msgid "Request:"
 msgstr ""
 
-#: dialogs.c:737
+#: dialogs.c:823
+msgid "Lion roar:"
+msgstr ""
+
+#: dialogs.c:824
 msgid "Seek:"
 msgstr "Gesuch:"
 
-#: dialogs.c:753
+#: dialogs.c:840
 msgid "Sound Options"
 msgstr "Klangeinstellungen"
 
-#: dialogs.c:774
+#: dialogs.c:861
 msgid "White Piece Color:"
-msgstr ""
+msgstr "Farbe weiße Figuren:"
 
 #. TRANSLATORS: R = single letter for the color red
-#: dialogs.c:777 dialogs.c:786 dialogs.c:792 dialogs.c:798 dialogs.c:804
-#: dialogs.c:810
+#: dialogs.c:864 dialogs.c:873 dialogs.c:879 dialogs.c:885 dialogs.c:891
+#: dialogs.c:897
 msgid "R"
 msgstr "R"
 
 #. TRANSLATORS: G = single letter for the color green
-#: dialogs.c:779 dialogs.c:787 dialogs.c:793 dialogs.c:799 dialogs.c:805
-#: dialogs.c:811
+#: dialogs.c:866 dialogs.c:874 dialogs.c:880 dialogs.c:886 dialogs.c:892
+#: dialogs.c:898
 msgid "G"
 msgstr "G"
 
 #. TRANSLATORS: B = single letter for the color blue
-#: dialogs.c:781 dialogs.c:788 dialogs.c:794 dialogs.c:800 dialogs.c:806
-#: dialogs.c:812
+#: dialogs.c:868 dialogs.c:875 dialogs.c:881 dialogs.c:887 dialogs.c:893
+#: dialogs.c:899
 msgid "B"
 msgstr "B"
 
 #. TRANSLATORS: D = single letter to make a color darker
-#: dialogs.c:783 dialogs.c:789 dialogs.c:795 dialogs.c:801 dialogs.c:807
-#: dialogs.c:813
+#: dialogs.c:870 dialogs.c:876 dialogs.c:882 dialogs.c:888 dialogs.c:894
+#: dialogs.c:900
 msgid "D"
 msgstr "D"
 
-#: dialogs.c:784
+#: dialogs.c:871
 msgid "Black Piece Color:"
-msgstr ""
+msgstr "Farbe schwarze Figuren:"
 
-#: dialogs.c:790
+#: dialogs.c:877
 msgid "Light Square Color:"
 msgstr "Weißes Feld:"
 
-#: dialogs.c:796
+#: dialogs.c:883
 msgid "Dark Square Color:"
 msgstr "Schwarzes Feld:"
 
-#: dialogs.c:802
+#: dialogs.c:889
 msgid "Highlight Color:"
 msgstr "Farbe zum Hervorheben:"
 
-#: dialogs.c:808
+#: dialogs.c:895
 msgid "Premove Highlight Color:"
 msgstr ""
 
-#: dialogs.c:814
+#: dialogs.c:901
 msgid "Flip Pieces Shogi Style        (Colored buttons restore default)"
 msgstr ""
 
-#: dialogs.c:816
+#: dialogs.c:903
 msgid "Mono Mode"
 msgstr ""
 
-#: dialogs.c:817
-msgid "Line Gap ( -1 = default for board size):"
+#: dialogs.c:904
+msgid "Line Gap (-1 = default for board size):"
 msgstr ""
 
-#: dialogs.c:818
+#: dialogs.c:905
 msgid "Use Board Textures"
-msgstr ""
+msgstr "Benutze Bretttexturen"
 
-#: dialogs.c:819
+#: dialogs.c:906
 msgid "Light-Squares Texture File:"
-msgstr ""
+msgstr "Texturedatei für weiße Felder:"
 
-#: dialogs.c:820
+#: dialogs.c:907
 msgid "Dark-Squares Texture File:"
-msgstr ""
+msgstr "Texturdatei für schwarze Felder:"
 
-#: dialogs.c:821
+#: dialogs.c:908
 msgid "Use external piece bitmaps with their own colors"
-msgstr ""
+msgstr "Benutze externe Figurebitmaps mit deren Farben"
 
-#: dialogs.c:822
+#: dialogs.c:909
 msgid "Directory with Pieces Images:"
-msgstr ""
+msgstr "Verzeichnis mit Bildern für Figuren:"
 
-#: dialogs.c:872
+#: dialogs.c:959
 msgid "Board Options"
 msgstr "Bretteinstellungen"
 
-#: dialogs.c:925 menus.c:634
+#: dialogs.c:1012 menus.c:634
 msgid "ICS text menu"
-msgstr "ICS-Textmenue"
+msgstr "ICS-Textmenü"
 
-#: dialogs.c:947
+#: dialogs.c:1034
 msgid "clear"
 msgstr ""
 
-#: dialogs.c:948 dialogs.c:1036
+#: dialogs.c:1035 dialogs.c:1123
 msgid "save changes"
 msgstr "speichere Änderungen"
 
-#: dialogs.c:1051
+#: dialogs.c:1138
 msgid "Edit book"
-msgstr "Bearbeite Buch"
+msgstr "Buch editieren"
 
-#: dialogs.c:1051 menus.c:636
+#: dialogs.c:1138 menus.c:636
 msgid "Tags"
 msgstr "Markierungen"
 
-#: dialogs.c:1193
+#: dialogs.c:1280
 msgid "ICS input box"
 msgstr "ICS Eingabefeld"
 
-#: dialogs.c:1225
+#: dialogs.c:1312
 msgid "Type a move"
 msgstr "Geben Sie einen Zug ein"
 
-#: dialogs.c:1251
+#: dialogs.c:1338
 msgid "Engine has no options"
 msgstr "Schachprogramm hat keine Optionen"
 
-#: dialogs.c:1253
+#: dialogs.c:1340
 msgid "Engine Settings"
 msgstr "Schachprogrammeinstellungen"
 
-#: dialogs.c:1278
+#: dialogs.c:1365
 msgid "Select engine from list:"
 msgstr "Wähle Schachprogram aus der Liste:"
 
-#: dialogs.c:1281
+#: dialogs.c:1368
 msgid "or specify one below:"
 msgstr ""
 
-#: dialogs.c:1282
+#: dialogs.c:1369
 msgid "Nickname (optional):"
-msgstr ""
+msgstr "Spitzname (optional):"
 
-#: dialogs.c:1283
+#: dialogs.c:1370
 msgid "Use nickname in PGN player tags of engine-engine games"
 msgstr ""
 
-#: dialogs.c:1284
+#: dialogs.c:1371
 msgid "Engine Directory:"
 msgstr ""
 
-#: dialogs.c:1285
+#: dialogs.c:1372
 msgid "Engine Command:"
-msgstr ""
+msgstr "Schachprogramkommando:"
 
-#: dialogs.c:1286
+#: dialogs.c:1373
 msgid "(Directory will be derived from engine path when empty)"
-msgstr ""
+msgstr "(Verzeichnis wird vom Schachprogrampfad genommen, falls leer)"
 
-#: dialogs.c:1287
+#: dialogs.c:1374
 msgid "UCI"
 msgstr ""
 
-#: dialogs.c:1288
+#: dialogs.c:1375
 msgid "WB protocol v1 (do not wait for engine features)"
 msgstr ""
 
-#: dialogs.c:1289
+#: dialogs.c:1376
 msgid "Must not use GUI book"
 msgstr ""
 
-#: dialogs.c:1290
+#: dialogs.c:1377
 msgid "Add this engine to the list"
 msgstr "Füge diese Schachprogramm zur Liste hinzu"
 
-#: dialogs.c:1291
+#: dialogs.c:1378
 msgid "Force current variant with this engine"
 msgstr ""
 
-#: dialogs.c:1341
+#: dialogs.c:1428
 msgid "Load first engine"
 msgstr "Lade erstes Schachprogramm"
 
-#: dialogs.c:1347
+#: dialogs.c:1434
 msgid "Load second engine"
 msgstr "Lade zweites Schachprogramm"
 
-#: dialogs.c:1370
+#: dialogs.c:1457
 msgid "shuffle"
 msgstr "Shuffle"
 
-#: dialogs.c:1371
+#: dialogs.c:1458
 msgid "Start-position number:"
 msgstr "Startposition-Nummer:"
 
-#: dialogs.c:1372
+#: dialogs.c:1459
 msgid "randomize"
 msgstr "zufällig"
 
-#: dialogs.c:1373
+#: dialogs.c:1460
 msgid "pick fixed"
 msgstr ""
 
-#: dialogs.c:1390
+#: dialogs.c:1477
 msgid "New Shuffle Game"
 msgstr "Neue Shuffle-Partie"
 
-#: dialogs.c:1409
+#: dialogs.c:1496
 msgid "classical"
 msgstr "klassisch"
 
-#: dialogs.c:1410
+#: dialogs.c:1497
 msgid "incremental"
 msgstr "Zuwachs"
 
-#: dialogs.c:1411
+#: dialogs.c:1498
 msgid "fixed max"
 msgstr ""
 
-#: dialogs.c:1412
+#: dialogs.c:1499
 msgid "Moves per session:"
 msgstr ""
 
-#: dialogs.c:1413
+#: dialogs.c:1500
 msgid "Initial time (min):"
 msgstr ""
 
-#: dialogs.c:1414
+#: dialogs.c:1501
 msgid "Increment or max (sec/move):"
 msgstr ""
 
-#: dialogs.c:1415
+#: dialogs.c:1502
 msgid "Time-Odds factors:"
 msgstr ""
 
-#: dialogs.c:1416
+#: dialogs.c:1503
 msgid "Engine #1"
 msgstr "Schachprogramm #1"
 
-#: dialogs.c:1417
+#: dialogs.c:1504
 msgid "Engine #2 / Human"
 msgstr "Schachprogram #2 / Spieler"
 
-#: dialogs.c:1457 dialogs.c:1460 dialogs.c:1465 dialogs.c:1466
+#: dialogs.c:1544 dialogs.c:1547 dialogs.c:1552 dialogs.c:1553
 #: gtk/xoptions.c:194
 msgid "Unused"
 msgstr "Nicht benutzt"
 
-#: dialogs.c:1478
-msgid "Time Control"
-msgstr "Zeitkontrolle"
-
-#: dialogs.c:1507
+#: dialogs.c:1594
 msgid "Error writing to chess program"
 msgstr "Fehler beim Schreiben zum Schachprogramm"
 
-#: dialogs.c:1574
+#: dialogs.c:1662 xaw/xoptions.c:1276
 msgid "Cancel"
 msgstr "Abbrechen"
 
-#: dialogs.c:1579 dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:1667 dialogs.c:2061 dialogs.c:2065
 msgid "King"
 msgstr "König"
 
-#: dialogs.c:1582
+#: dialogs.c:1670
 msgid "Captain"
 msgstr "Kapitän"
 
-#: dialogs.c:1583
+#: dialogs.c:1671
 msgid "Lieutenant"
 msgstr "Leutnant"
 
-#: dialogs.c:1584
+#: dialogs.c:1672
 msgid "General"
 msgstr "General"
 
-#: dialogs.c:1585
+#: dialogs.c:1673
 msgid "Warlord"
 msgstr "Kriegsherr"
 
-#: dialogs.c:1587 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1675 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Knight"
 msgstr "Springer"
 
-#: dialogs.c:1588 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1676 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Bishop"
 msgstr "Läufer"
 
-#: dialogs.c:1589 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1677 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Rook"
 msgstr "Turm"
 
-#: dialogs.c:1593 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1681 dialogs.c:2062 dialogs.c:2066
 msgid "Archbishop"
 msgstr "Erzbischof"
 
-#: dialogs.c:1594 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1682 dialogs.c:2062 dialogs.c:2066
 msgid "Chancellor"
 msgstr "Kanlzer"
 
-#: dialogs.c:1596 dialogs.c:1971 dialogs.c:1975 dialogs.c:1993
+#: dialogs.c:1684 dialogs.c:2061 dialogs.c:2065 dialogs.c:2083
 msgid "Queen"
 msgstr "Königin"
 
-#: dialogs.c:1600
+#: dialogs.c:1686
+msgid "Lion"
+msgstr ""
+
+#: dialogs.c:1690
 msgid "Defer"
 msgstr "vertagen"
 
-#: dialogs.c:1601 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1691 dialogs.c:2062 dialogs.c:2066
 msgid "Promote"
 msgstr "umwandlung"
 
-#: dialogs.c:1616
+#: dialogs.c:1706
 msgid "Chat partner:"
 msgstr ""
 
-#: dialogs.c:1701
+#: dialogs.c:1791
 msgid "Chat box"
 msgstr ""
 
-#: dialogs.c:1742
+#: dialogs.c:1832
 msgid "factory"
 msgstr "Fabrik"
 
-#: dialogs.c:1743
+#: dialogs.c:1833
 msgid "up"
 msgstr "hoch"
 
-#: dialogs.c:1744
+#: dialogs.c:1834
 msgid "down"
 msgstr "runter"
 
-#: dialogs.c:1762
+#: dialogs.c:1852
 msgid "No tag selected"
 msgstr "Keine Markierung selektiert"
 
-#: dialogs.c:1793
+#: dialogs.c:1883
 msgid "Game-list options"
 msgstr "Spieleliste-optionen"
 
-#: dialogs.c:1869 dialogs.c:1883
+#: dialogs.c:1959 dialogs.c:1973
 msgid "Error"
 msgstr "Fehler"
 
-#: dialogs.c:1906
+#: dialogs.c:1996
 msgid "Fatal Error"
 msgstr "Schwerwiegender Fehler"
 
-#: dialogs.c:1906
+#: dialogs.c:1996
 msgid "Exiting"
 msgstr "Beende"
 
-#: dialogs.c:1917
+#: dialogs.c:2007
 msgid "Information"
 msgstr "Information"
 
-#: dialogs.c:1924
+#: dialogs.c:2014
 msgid "Note"
 msgstr "Notiz"
 
-#: dialogs.c:1970 dialogs.c:2245 dialogs.c:2248
+#: dialogs.c:2060 dialogs.c:2340 dialogs.c:2343
 msgid "White"
 msgstr "Weiß"
 
-#: dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Pawn"
 msgstr "Bauer"
 
-#: dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:2061 dialogs.c:2065
 msgid "Elephant"
 msgstr "Elefant"
 
-#: dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:2061 dialogs.c:2065
 msgid "Cannon"
 msgstr "Kanone"
 
-#: dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:2062 dialogs.c:2066
 msgid "Demote"
 msgstr "degradieren"
 
-#: dialogs.c:1973 dialogs.c:1977
+#: dialogs.c:2063 dialogs.c:2067
 msgid "Empty square"
 msgstr "Leeres Feld"
 
-#: dialogs.c:1973 dialogs.c:1977
+#: dialogs.c:2063 dialogs.c:2067
 msgid "Clear board"
 msgstr "Brett leeren"
 
-#: dialogs.c:1974 dialogs.c:2257 dialogs.c:2260
+#: dialogs.c:2064 dialogs.c:2352 dialogs.c:2355
 msgid "Black"
 msgstr "Schwarz"
 
-#: dialogs.c:2073 menus.c:787
+#: dialogs.c:2163 menus.c:787
 msgid "File"
 msgstr "Datei"
 
-#: dialogs.c:2074 menus.c:788
+#: dialogs.c:2164 menus.c:788
 msgid "Edit"
 msgstr "Bearbeiten"
 
-#: dialogs.c:2075 menus.c:789
+#: dialogs.c:2165 menus.c:789
 msgid "View"
 msgstr "Anzeigen"
 
-#: dialogs.c:2076 menus.c:790
+#: dialogs.c:2166 menus.c:790
 msgid "Mode"
 msgstr "Modus"
 
-#: dialogs.c:2077 menus.c:791
+#: dialogs.c:2167 menus.c:791
 msgid "Action"
 msgstr "Aktion"
 
-#: dialogs.c:2078 menus.c:792
+#: dialogs.c:2168 menus.c:792
 msgid "Engine"
 msgstr "Schachprogramm"
 
-#: dialogs.c:2079 menus.c:793
+#: dialogs.c:2169 menus.c:793
 msgid "Options"
 msgstr "Optionen"
 
-#: dialogs.c:2080 menus.c:794
+#: dialogs.c:2170 menus.c:794
 msgid "Help"
 msgstr "Hilfe"
 
-#: dialogs.c:2090
+#: dialogs.c:2180
 msgid "<<"
 msgstr ""
 
-#: dialogs.c:2091
+#: dialogs.c:2181
 msgid "<"
 msgstr ""
 
-#: dialogs.c:2093
+#: dialogs.c:2183
 msgid ">"
 msgstr ""
 
-#: dialogs.c:2094
+#: dialogs.c:2184
 msgid ">>"
 msgstr ""
 
-#: dialogs.c:2364
+#: dialogs.c:2458
 msgid "Directories:"
 msgstr "Verzeichnisse:"
 
-#: dialogs.c:2365
+#: dialogs.c:2459
 msgid "Files:"
 msgstr "Dateien:"
 
-#: dialogs.c:2366
+#: dialogs.c:2460
 msgid "by name"
 msgstr "nach Namen"
 
-#: dialogs.c:2367
+#: dialogs.c:2461
 msgid "by type"
 msgstr "nach Typ"
 
-#: dialogs.c:2370
+#: dialogs.c:2464
 msgid "Filename:"
 msgstr "Dateinname:"
 
-#: dialogs.c:2371
+#: dialogs.c:2465
 msgid "New directory"
 msgstr "Neues Verzeichnis"
 
-#: dialogs.c:2372
+#: dialogs.c:2466
 msgid "File type:"
 msgstr "Dateientyp:"
 
-#: dialogs.c:2447
+#: dialogs.c:2541
 msgid "Contents of"
 msgstr "Inhalt von"
 
-#: dialogs.c:2473
-#, fuzzy
+#: dialogs.c:2567
 msgid "  next page"
 msgstr "nächste Seite"
 
-#: dialogs.c:2490
+#: dialogs.c:2584
 msgid "FIRST TYPE DIRECTORY NAME HERE"
 msgstr ""
 
-#: dialogs.c:2491
+#: dialogs.c:2585
 msgid "TRY ANOTHER NAME"
 msgstr "VERSUCHE EINEN ANDEREN NAMEN"
 
-#: draw.c:293
+#: draw.c:310
 msgid ""
-"No default pieces installed\n"
-"Select your own -pieceImageDirectory"
+"No default pieces installed!\n"
+"Select your own using '-pieceImageDirectory'."
 msgstr ""
 
-#: engineoutput.c:107 menus.c:630
+#: engineoutput.c:110 menus.c:630
 #, c-format
 msgid "Engine Output"
 msgstr "Schachprogrammausgabe"
 
-#: engineoutput.c:117
+#: engineoutput.c:120
 #, c-format
 msgid "%s (%d reversible ply)"
 msgid_plural "%s (%d reversible plies)"
 msgstr[0] ""
 msgstr[1] ""
 
-#: engineoutput.c:509 engineoutput.c:512 nengineoutput.c:81 nengineoutput.c:88
+#: engineoutput.c:542 engineoutput.c:545 nengineoutput.c:82 nengineoutput.c:90
 msgid "NPS"
 msgstr "NPS"
 
@@ -2191,52 +2277,52 @@ msgstr "NPS"
 msgid "Reading game file (%d)"
 msgstr "Lese Partiedatei (%d)"
 
-#: gtk/xboard.c:844 xaw/xboard.c:1162
+#: gtk/xboard.c:867 xaw/xboard.c:1052
 #, c-format
 msgid "%s: can't cd to CHESSDIR: "
 msgstr "%s: cd zu CHESSDIR funktioniert nicht: "
 
-#: gtk/xboard.c:853 xaw/xboard.c:1171
+#: gtk/xboard.c:876 xaw/xboard.c:1061
 #, c-format
 msgid "Failed to open file '%s'\n"
 msgstr "Fehler beim Öffnen der Datei '%s'\n"
 
-#: gtk/xboard.c:868 xaw/xboard.c:1180
+#: gtk/xboard.c:891 xaw/xboard.c:1070
 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"
 
-#: gtk/xboard.c:887 xaw/xboard.c:1212
+#: gtk/xboard.c:910 xaw/xboard.c:1102
 #, c-format
 msgid "%s: bad boardSize syntax %s\n"
 msgstr "%s: falsche boardSize Syntax %s\n"
 
-#: gtk/xboard.c:927 xaw/xboard.c:1249
+#: gtk/xboard.c:950 xaw/xboard.c:1139
 #, c-format
 msgid "%s: unrecognized boardSize name %s\n"
 msgstr "%s: unbekannter Name fuer boardSize %s\n"
 
-#: gtk/xboard.c:968 xaw/xboard.c:1286
+#: gtk/xboard.c:991 xaw/xboard.c:1176
 #, 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:1258 xaw/xboard.c:1568
+#: gtk/xboard.c:1281 xaw/xboard.c:1458
 #, 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:1283 xaw/xboard.c:1591
+#: gtk/xboard.c:1306 xaw/xboard.c:1481
 #, c-format
 msgid "%s: no fonts match pattern %s\n"
 msgstr "%s: keine Schriften stimmen mit Muster %s überein\n"
 
-#: gtk/xboard.c:1722 xaw/xboard.c:2081
+#: gtk/xboard.c:1745 xaw/xboard.c:1971
 msgid "Can't open temp file"
 msgstr "Kann temporäre Datei nicht öffnen"
 
-#: gtk/xboard.c:2174
+#: gtk/xboard.c:2199
 msgid "Failed to open file"
 msgstr "Fehler beim Öffnen der Datei"
 
@@ -2286,52 +2372,46 @@ msgid "About XBoard"
 msgstr "Über XBoard"
 
 #: menus.c:582
-#, fuzzy
 msgid "New Game"
-msgstr "Neue Shuffle-Partie"
+msgstr "Neue Partie"
 
 #: menus.c:583
-msgid "New Shuffle Game ..."
+#, fuzzy
+msgid "New Shuffle Game..."
 msgstr "Neue Shuffle Partie… "
 
 #: menus.c:584
 #, fuzzy
-msgid "New Variant ..."
-msgstr "Neue Variante"
+msgid "New Variant..."
+msgstr "Neue Variante…"
 
 #: menus.c:586
-#, fuzzy
 msgid "Load Game"
 msgstr "Partie laden…"
 
 #: menus.c:587
-#, fuzzy
 msgid "Load Position"
-msgstr "Nächste Stellung laden"
+msgstr "Stellung laden"
 
 #: menus.c:588
-#, fuzzy
 msgid "Next Position"
-msgstr "Nächste Stellung laden"
+msgstr "Nächste Stellung"
 
 #: menus.c:589
-#, fuzzy
 msgid "Prev Position"
-msgstr "Vorherige Stellung laden"
+msgstr "Vorherige Stellung"
 
 #: menus.c:591
-#, fuzzy
 msgid "Save Game"
 msgstr "Partie speichern…"
 
 #: menus.c:592
-#, fuzzy
 msgid "Save Position"
-msgstr "Speichere Stellung "
+msgstr "Speichere Stellung"
 
 #: menus.c:593
 msgid "Save Games as Book"
-msgstr "Partien speichern als Buch:"
+msgstr "Partien speichern als Buch"
 
 #: menus.c:595
 msgid "Mail Move"
@@ -2346,38 +2426,32 @@ msgid "Quit "
 msgstr ""
 
 #: menus.c:603
-#, fuzzy
 msgid "Copy Game"
-msgstr "Partieliste kopieren"
+msgstr "Partie kopieren"
 
 #: menus.c:604
-#, fuzzy
 msgid "Copy Position"
-msgstr "Stellung kopieren Strg+Umschalt+C"
+msgstr "Stellung kopieren"
 
 #: menus.c:605
 msgid "Copy Game List"
 msgstr "Partieliste kopieren"
 
 #: menus.c:607
-#, fuzzy
 msgid "Paste Game"
-msgstr "Spiel zurücksetzen"
+msgstr "Partie einfügen"
 
 #: menus.c:608
-#, fuzzy
 msgid "Paste Position"
-msgstr "Nächste Stellung laden"
+msgstr "Stellung einfügen"
 
 #: menus.c:610 menus.c:652
-#, fuzzy
 msgid "Edit Game"
-msgstr "Editiere Kommentar"
+msgstr "Partie editiere"
 
 #: menus.c:611 menus.c:653
-#, fuzzy
 msgid "Edit Position"
-msgstr "Nächste Stellung laden"
+msgstr "Stellung editieren"
 
 #: menus.c:612
 msgid "Edit Tags"
@@ -2400,9 +2474,8 @@ msgid "Annotate"
 msgstr "Annotieren"
 
 #: menus.c:618
-#, fuzzy
 msgid "Truncate Game"
-msgstr "Partie abbrechen         End"
+msgstr "Partie abbrechen"
 
 #: menus.c:620
 msgid "Backward"
@@ -2413,34 +2486,28 @@ msgid "Forward"
 msgstr "Vorwärts"
 
 #: menus.c:622
-#, fuzzy
 msgid "Back to Start"
-msgstr "Schwarz am Zug"
+msgstr "Zurück zum Anfang"
 
 #: menus.c:623
-#, fuzzy
 msgid "Forward to End"
-msgstr "Vorwärts zum Ende  Alt+End"
+msgstr "Zur Schlussstellung"
 
 #: menus.c:628
-#, fuzzy
 msgid "Flip View"
-msgstr "Brett automatisch drehen"
+msgstr "Brett drehen"
 
 #: menus.c:631
-#, fuzzy
 msgid "Move History"
 msgstr "Zugliste"
 
 #: menus.c:632
-#, fuzzy
 msgid "Evaluation Graph"
 msgstr "Auswertungsgraph"
 
 #: menus.c:633
-#, fuzzy
 msgid "Game List"
-msgstr "Partieliste…"
+msgstr "Partieliste"
 
 #: menus.c:637
 msgid "Comments"
@@ -2463,29 +2530,24 @@ msgid "Game List Tags..."
 msgstr "Partie Markierungen…"
 
 #: menus.c:647
-#, fuzzy
 msgid "Machine White"
-msgstr "Schachprogramm weiß   Strg+W"
+msgstr "Schachprogramm weiß"
 
 #: menus.c:648
-#, fuzzy
 msgid "Machine Black"
-msgstr "Schachprogramm Partie"
+msgstr "Schachprogramm schwarz"
 
 #: menus.c:649
-#, fuzzy
 msgid "Two Machines"
-msgstr "Zwei Schachprogramme   Strg+T"
+msgstr "Zwei Schachprogramme"
 
 #: menus.c:650
-#, fuzzy
 msgid "Analysis Mode"
-msgstr "Analyse-Modus   Strg+A"
+msgstr "Analyse-Modus"
 
 #: menus.c:651
-#, fuzzy
 msgid "Analyze Game"
-msgstr "Spiel analysieren   Strg+G"
+msgstr "Spiel analysieren"
 
 #: menus.c:654
 msgid "Training"
@@ -2493,7 +2555,7 @@ msgstr "Training"
 
 #: menus.c:655
 msgid "ICS Client"
-msgstr "ICS-client"
+msgstr "ICS-Client"
 
 #: menus.c:657
 msgid "Machine Match"
@@ -2516,14 +2578,12 @@ msgid "Rematch"
 msgstr ""
 
 #: menus.c:667
-#, fuzzy
 msgid "Call Flag"
-msgstr "Zeit reklamieren    F5"
+msgstr "Zeit reklamieren"
 
 #: menus.c:668
-#, fuzzy
 msgid "Draw"
-msgstr "Remi:"
+msgstr "Remis"
 
 #: menus.c:669
 msgid "Adjourn"
@@ -2538,14 +2598,12 @@ msgid "Resign"
 msgstr "Aufgeben"
 
 #: menus.c:673
-#, fuzzy
 msgid "Stop Observing"
-msgstr "Beobachtung beenden    F10"
+msgstr "Beobachtung beenden"
 
 #: menus.c:674
-#, fuzzy
 msgid "Stop Examining"
-msgstr "Untersuchen beenden   F11"
+msgstr "Untersuchen beenden"
 
 #: menus.c:675
 msgid "Upload to Examine"
@@ -2553,92 +2611,99 @@ msgstr "Hochladen zum Untersuchen"
 
 #: menus.c:677
 msgid "Adjudicate to White"
-msgstr "Gewinn Weiß zuerkennen"
+msgstr "Weiß den Gewinn zuerkennen"
 
 #: menus.c:678
 msgid "Adjudicate to Black"
-msgstr "Gewinn Schwartz zuerkennnen"
+msgstr "Schwarz den Gewinn zuerkennnen"
 
 #: menus.c:679
 msgid "Adjudicate Draw"
-msgstr "Remi zuerkennen"
+msgstr "Als Remis abschätzen"
 
 #: menus.c:684
-msgid "Load New 1st Engine ..."
+#, fuzzy
+msgid "Load New 1st Engine..."
 msgstr "Neues erstes Schachprogramm laden…"
 
 #: menus.c:685
-msgid "Load New 2nd Engine ..."
+#, fuzzy
+msgid "Load New 2nd Engine..."
 msgstr "Neues zweites Schachprogramm laden…"
 
 #: menus.c:687
-msgid "Engine #1 Settings ..."
+#, fuzzy
+msgid "Engine #1 Settings..."
 msgstr "Schachprogram #1 Einstellungen…"
 
 #: menus.c:688
-msgid "Engine #2 Settings ..."
+#, fuzzy
+msgid "Engine #2 Settings..."
 msgstr "Schachprogram #2 Einstellungen…"
 
 #: menus.c:690
 msgid "Hint"
-msgstr "Hinweiß"
+msgstr "Hinweis"
 
 #: menus.c:691
 msgid "Book"
 msgstr "Buch"
 
 #: menus.c:693
-#, fuzzy
 msgid "Move Now"
-msgstr "Klang für Zug"
+msgstr "Jetzt ziehen"
 
 #: menus.c:694
-#, fuzzy
 msgid "Retract Move"
-msgstr "Zug zurücknehmen  Strg+X"
+msgstr "Zug zurücknehmen"
 
 #: menus.c:700
-msgid "General ..."
+#, fuzzy
+msgid "General..."
 msgstr "Allgemein…"
 
 #: menus.c:702
 #, fuzzy
-msgid "Time Control ..."
-msgstr "Zeitkontrolle"
+msgid "Time Control..."
+msgstr "Zeitkontrolle…"
 
 #: menus.c:703
 #, fuzzy
-msgid "Common Engine ..."
-msgstr "Allemein Schachprogramme…    Alt+Umschalt+U"
+msgid "Common Engine..."
+msgstr "Allgemein Schachprogramme…"
 
 #: menus.c:704
 #, fuzzy
-msgid "Adjudications ..."
-msgstr "Zuerkennung…        Alt+Umschalt+J"
+msgid "Adjudications..."
+msgstr "Zuerkennung…"
 
 #: menus.c:705
-msgid "ICS ..."
-msgstr "ICS…"
+msgid "ICS..."
+msgstr ""
 
 #: menus.c:706
-msgid "Match ..."
-msgstr "Partie…"
+msgid "Tournament..."
+msgstr ""
 
 #: menus.c:707
-msgid "Load Game ..."
+#, fuzzy
+msgid "Load Game..."
 msgstr "Partie laden…"
 
 #: menus.c:708
-msgid "Save Game ..."
+#, fuzzy
+msgid "Save Game..."
 msgstr "Partie speichern…"
 
 #: menus.c:709
-msgid "Game List ..."
+#, fuzzy
+msgid "Game List..."
 msgstr "Partieliste…"
 
 #: menus.c:710
-msgid "Sounds ..."
-msgstr "Klang ..."
+#, fuzzy
+msgid "Sounds..."
+msgstr "Klang…"
 
 #: menus.c:713
 msgid "Always Queen"
@@ -2686,12 +2751,11 @@ msgstr "Einstellung am Ende speichern"
 
 #: menus.c:742
 msgid "Info XBoard"
-msgstr "Info XBoard"
+msgstr "Info über XBoard"
 
 #: menus.c:743
-#, fuzzy
 msgid "Man XBoard"
-msgstr "Man XBoard   F1"
+msgstr "XBoard-Hilfe"
 
 #: menus.c:745
 msgid "XBoard Home Page"
@@ -2703,25 +2767,26 @@ msgstr "Online Benutzerhandbuch"
 
 #: menus.c:747
 msgid "Development News"
-msgstr "Entwicklungsnachrichten"
+msgstr "Entwicklungsneuigkeiten"
 
 #: menus.c:748
 msgid "e-Mail Bug Report"
-msgstr "E-mail Fehlerreport"
+msgstr "Sende Fehlerbericht"
 
-#: nengineoutput.c:78 nengineoutput.c:85
+#: nengineoutput.c:78 nengineoutput.c:86
 msgid "engine name"
 msgstr "Schachprogramm"
 
-#: nengineoutput.c:80 nengineoutput.c:87
+#. TRANSLATORS: noun, as in "the move Nf3"
+#: nengineoutput.c:81 nengineoutput.c:89
 msgid "move"
 msgstr "Zug"
 
-#: nengineoutput.c:153
+#: nengineoutput.c:155
 msgid "Engine output"
 msgstr "Schachprogrammausgabe"
 
-#: nengineoutput.c:157
+#: nengineoutput.c:159
 msgid ""
 "Mismatch of STRIDE in nengineoutput.c\n"
 "Change and recompile!"
@@ -2803,8 +2868,8 @@ msgid "%s: unrecognized color %s\n"
 msgstr "%s: nicht erkannte Farbe %s\n"
 
 #: usystem.c:230
-#, c-format
-msgid "%s: can't parse foreground color in `%s'\n"
+#, fuzzy, c-format
+msgid "%s: can't parse foreground color in '%s'\n"
 msgstr "%s: Kann Vordergrundfarbe in »%s« nicht parsen\n"
 
 #: usystem.c:259
@@ -2812,81 +2877,79 @@ msgstr "%s: Kann Vordergrundfarbe in »%s« nicht parsen\n"
 msgid "%s: can't parse color names; disabling colorization\n"
 msgstr "%s: kann Farbname nicht parsen; deaktiere Farben\n"
 
-#: usystem.c:371
+#: usystem.c:374
 #, c-format
 msgid "ERROR: Unknown user %s (in path %s)\n"
 msgstr "FEHLER: unbekannter Benutzer %s (im Pfad %s)\n"
 
-#: usystem.c:556
+#: usystem.c:557
 msgid "Socket support is not configured in"
 msgstr "Socketunterstützung ist nicht konfiguriert"
 
-#: usystem.c:645
+#: usystem.c:646
 msgid "internal rcmd not implemented for Unix"
 msgstr "Interes rcmd ist in UNIX nicht implementiert"
 
-#: xaw/xboard.c:478
-#, c-format
-msgid "%s: Can't access XPM directory %s\n"
-msgstr "%s: XPM-Ordner nicht erreichbar %s\n"
-
-#: xaw/xboard.c:499
-#, c-format
-msgid "Available `%s' sizes:\n"
-msgstr "Mögliche »%s« Größen:\n"
-
-#: xaw/xboard.c:532
-#, c-format
-msgid "Error: No `%s' files!\n"
-msgstr "Fehler: Keine »%s« Datein!\n"
-
-#: xaw/xboard.c:545
-#, c-format
-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"
-
-#: xaw/xboard.c:1292
+#: xaw/xboard.c:1182
 #, c-format
 msgid "white pixel = 0x%lx, black pixel = 0x%lx\n"
 msgstr "weißes Pixel = 0x%lx, schwarzes Pixel = 0x%lx\n"
 
-#: xaw/xengineoutput.c:115
-#, c-format
-msgid "Error %d loading icon image\n"
-msgstr "Fehler %d beim Laden von Icon\n"
-
-#: xaw/xoptions.c:321 xaw/xoptions.c:1023
+#: xaw/xoptions.c:321 xaw/xoptions.c:1025
 msgid "browse"
 msgstr "durchsuche"
 
 #: xaw/xoptions.c:387 xaw/xoptions.c:388
 msgid "Ctrl"
-msgstr ""
+msgstr "Strg"
 
 #: xaw/xoptions.c:393 xaw/xoptions.c:394
 msgid "Alt"
-msgstr ""
+msgstr "Alt"
 
 #: xaw/xoptions.c:399 xaw/xoptions.c:400
 msgid "Shift"
-msgstr ""
+msgstr "Umschalt"
 
-#: xaw/xoptions.c:1270
+#: xaw/xoptions.c:1272
 msgid "OK"
 msgstr "OK"
 
-#: xaw/xoptions.c:1274
-msgid "cancel"
-msgstr "abbrechen"
+#~ 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"
@@ -3001,7 +3064,7 @@ msgstr "abbrechen"
 #~ msgstr "Revanche       F12"
 
 #~ msgid "Draw                F6"
-#~ msgstr "Remi          F6"
+#~ msgstr "Remis          F6"
 
 #~ msgid "Adjourn            F7"
 #~ msgstr "Aussetzen      F7"
@@ -3084,10 +3147,10 @@ msgstr "abbrechen"
 #~ msgstr "(Datei:%s) "
 
 #~ msgid "light square "
-#~ msgstr "weisses Feld "
+#~ msgstr "weißes Feld "
 
 #~ msgid "dark square "
-#~ msgstr "schwarze Feld "
+#~ msgstr "schwarzes Feld "
 
 #~ msgid "Done.\n"
 #~ msgstr "Fertig.\n"
index df06b88..f0cb944 100644 (file)
--- a/po/es.po
+++ b/po/es.po
 # XBoard -- a graphical chessboard for X
-# Copyright (C) 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
-# Enhancements Copyright (C) 1992-98 Free Software Foundation, Inc.
+# Copyright (C) 2013 Free Software Foundation, Inc.
 # This file is distributed under the same license as the XBoard package.
 # Traducción por Óscar Toledo G., 2010
+# Antonio Ceballos <aceballos@gmail.com>, 2013
 #
-#, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: GNU xboard master-20110411\n"
+"Project-Id-Version: GNU xboard 4.7.2\n"
 "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n"
-"POT-Creation-Date: 2014-01-05 12:51-0800\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"
+"POT-Creation-Date: 2014-01-19 22:19-0800\n"
+"PO-Revision-Date: 2013-12-07 00:14+0200\n"
+"Last-Translator: Antonio Ceballos <aceballos@gmail.com>\n"
+"Language-Team: Spanish <es@li.org>\n"
 "Language: es\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"
 
-#: args.h:820
+#: args.h:833
 #, c-format
 msgid "%s in settings file\n"
-msgstr ""
+msgstr "%s en el fichero de configuración\n"
 
-#: args.h:830
+#: args.h:867
 #, c-format
 msgid "Bad integer value %s"
-msgstr ""
+msgstr "Valor entero malo %s"
 
-#: args.h:923 args.h:1170
+#: args.h:968 args.h:1229
 #, c-format
 msgid "Unrecognized argument %s"
-msgstr ""
+msgstr "Argumento no reconocido %s"
 
-#: args.h:954
+#: args.h:999
 #, c-format
 msgid "No value provided for argument %s"
-msgstr ""
+msgstr "No se ha dado valor al argumento %s"
 
-#: args.h:1014
+#: args.h:1059
 #, c-format
 msgid "Incomplete \\ escape in value for %s"
-msgstr ""
+msgstr "Carácter de escape \\ incompleto en el valor de %s"
 
-#: args.h:1125
+#: args.h:1170
 #, c-format
 msgid "Failed to open indirection file %s"
-msgstr ""
+msgstr "Fallo al abrir fichero de indirección %s"
 
-#: args.h:1142
+#: args.h:1187
 #, c-format
 msgid "Unrecognized boolean argument value %s"
-msgstr ""
+msgstr "Valor del argumento lógico %s no reconocido"
 
 #. 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:744
+#: backend.c:800
 msgid "first"
-msgstr ""
+msgstr "primer"
 
 #. 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:747
+#: backend.c:803
 msgid "second"
-msgstr ""
+msgstr "segundo"
 
-#: backend.c:827
+#: backend.c:885
 #, c-format
 msgid "protocol version %d not supported"
 msgstr "versión %d del protocolo no es admitida"
 
-#: backend.c:933
+#: backend.c:991
 msgid "You did not specify the engine executable"
-msgstr ""
+msgstr "No se especificó el ejecutable del motor"
 
-#: backend.c:989
+#: backend.c:1049
 #, c-format
 msgid "bad timeControl option %s"
 msgstr "opción timeControl incorrecta %s"
 
-#: backend.c:1004
+#: backend.c:1064
 #, c-format
 msgid "bad searchTime option %s"
 msgstr "opción searchTime incorrecta %s"
 
-#: backend.c:1110
+#: backend.c:1170
 #, c-format
 msgid "Variant %s supported only in ICS mode"
 msgstr "La variante %s solo se admite en modo ICS"
 
-#: backend.c:1128
+#: backend.c:1188
 #, c-format
 msgid "Unknown variant name %s"
 msgstr "Nombre de variante desconocido %s"
 
-#: backend.c:1375
+#: backend.c:1439
 msgid "Starting chess program"
 msgstr "Iniciando programa de ajedrez"
 
-#: backend.c:1398
+#: backend.c:1462
 msgid "Bad game file"
 msgstr "archivo de partidas incorrecto"
 
-#: backend.c:1405
+#: backend.c:1469
 msgid "Bad position file"
 msgstr "archivo de posición incorrecto"
 
-#: backend.c:1419
+#: backend.c:1483
 msgid "Pick new game"
-msgstr ""
+msgstr "Seleccionar una nueva partida"
 
-#: backend.c:1488
+#: backend.c:1552
+#, fuzzy
 msgid ""
-"You restarted an already completed tourney\n"
-"One more cycle will now be added to it\n"
-"Games commence in 10 sec"
+"You restarted an already completed tourney.\n"
+"One more cycle will now be added to it.\n"
+"Games commence in 10 sec."
 msgstr ""
+"Se ha reiniciado un torneo que ya había concluido\n"
+"Se le va a añadir un nuevo ciclo\n"
+"Las partidas comienzan dentro de 10 s"
 
-#: backend.c:1495
+#: backend.c:1559
 #, c-format
 msgid "All games in tourney '%s' are already played or playing"
 msgstr ""
+"Ya se han disputado o se están disputando todas las partidas del torneo '%s'"
 
-#: backend.c:1502
+#: backend.c:1566
 msgid "Can't have a match with no chess programs"
 msgstr "No se puede tener una partida sin programas de ajedrez"
 
-#: backend.c:1539
+#: backend.c:1620
 #, c-format
 msgid "Could not open comm port %s"
 msgstr "No se pudo abrir la puerta de comunicaciones %s"
 
-#: backend.c:1542
+#: backend.c:1623
 #, c-format
 msgid "Could not connect to host %s, port %s"
 msgstr "No se pudo conectar al servidor %s, puerta %s"
 
-#: backend.c:1598
+#: backend.c:1679
 #, c-format
 msgid "Unknown initialMode %s"
 msgstr "Modo inicial desconocido %s"
 
-#: backend.c:1624
+#: backend.c:1705
 msgid "AnalyzeFile mode requires a game file"
-msgstr "El modo análisis de archivo requiere un archivo de partida"
+msgstr "El modo análisis de archivo requiere un archivo de partidas"
 
-#: backend.c:1651
+#: backend.c:1732
 msgid "Analysis mode requires a chess engine"
 msgstr "El modo de análisis requiere un motor de ajedrez"
 
-#: backend.c:1655
+#: backend.c:1736
 msgid "Analysis mode does not work with ICS mode"
 msgstr "El modo de análisis no funciona con el modo ICS"
 
-#: backend.c:1666
+#: backend.c:1747
 msgid "MachineWhite mode requires a chess engine"
 msgstr "El modo de máquina con blancas requiere un motor de ajedrez"
 
-#: backend.c:1671
+#: backend.c:1752
 msgid "MachineWhite mode does not work with ICS mode"
 msgstr "El modo de máquina con blancas no funciona con el modo ICS"
 
-#: backend.c:1678
+#: backend.c:1759
 msgid "MachineBlack mode requires a chess engine"
 msgstr "El modo de máquina con negras requiere un motor de ajedrez"
 
-#: backend.c:1683
+#: backend.c:1764
 msgid "MachineBlack mode does not work with ICS mode"
 msgstr "El modo de máquina con negras no funciona con el modo ICS"
 
-#: backend.c:1690
+#: backend.c:1771
 msgid "TwoMachines mode requires a chess engine"
 msgstr "El modo de dos máquinas requiere un motor de ajedrez"
 
-#: backend.c:1695
+#: backend.c:1776
 msgid "TwoMachines mode does not work with ICS mode"
 msgstr "El modo de dos máquinas no funciona con el modo ICS"
 
-#: backend.c:1706
+#: backend.c:1787
 msgid "Training mode requires a game file"
 msgstr "El modo de entrenamiento requiere un archivo de partidas"
 
-#: backend.c:1869 backend.c:1924 backend.c:1947 backend.c:2346
+#: backend.c:1950 backend.c:2005 backend.c:2028 backend.c:2430
 msgid "Error writing to ICS"
 msgstr "Error al escribir a ICS"
 
-#: backend.c:1884
+#: backend.c:1965
 msgid "Error reading from keyboard"
 msgstr "Error al leer el teclado"
 
-#: backend.c:1887
+#: backend.c:1968
 msgid "Got end of file from keyboard"
 msgstr "Se obtuvo del teclado un fin de archivo"
 
-#: backend.c:2192
+#: backend.c:2276
 #, c-format
 msgid "Unknown wild type %d"
-msgstr ""
+msgstr "Tipo «wild» %d desconocido"
 
-#: backend.c:2263 usystem.c:329
+#: backend.c:2347 usystem.c:329
 msgid "Error writing to display"
-msgstr "Error al escribir a la pantalla"
+msgstr "Error al escribir en la pantalla"
 
-#: backend.c:3019
+#. TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers
+#: backend.c:3105
 #, c-format
 msgid "your opponent kibitzes: %s"
-msgstr ""
+msgstr "información kibitz de su oponente: %s"
 
-#: backend.c:3548
+#: backend.c:3634
 msgid "Error gathering move list: two headers"
 msgstr "Error al recolectar lista de jugadas: dos encabezados"
 
-#: backend.c:3595
+#: backend.c:3681
 msgid "Error gathering move list: nested"
 msgstr "Error al recolectar lista de jugadas: anidado"
 
-#: backend.c:3699 backend.c:4117 backend.c:4321 backend.c:4880 backend.c:4884
-#: backend.c:6900 backend.c:12101 backend.c:13816 backend.c:13893
-#: backend.c:13939 backend.c:13945 backend.c:13950 backend.c:13955
+#: backend.c:3785 backend.c:4203 backend.c:4407 backend.c:4966 backend.c:4970
+#: backend.c:7073 backend.c:12577 backend.c:14306 backend.c:14383
+#: backend.c:14429 backend.c:14435 backend.c:14440 backend.c:14445
 msgid "vs."
-msgstr ""
+msgstr "contra"
 
-#: backend.c:3827
+#: backend.c:3913
 msgid "Illegal move (rejected by ICS)"
-msgstr ""
+msgstr "La jugada no es válida (la ha rechazado ICS)"
 
-#: backend.c:4165
+#: backend.c:4251
 msgid "Connection closed by ICS"
 msgstr "Conexión cerrada por ICS"
 
-#: backend.c:4167
+#: backend.c:4253
 msgid "Error reading from ICS"
 msgstr "Error al leer de ICS"
 
-#: backend.c:4244
+#: backend.c:4330
 #, c-format
 msgid ""
 "Failed to parse board string:\n"
 "\"%s\""
 msgstr ""
+"Fallo al analizar texto del tablero:\n"
+"\"%s\""
 
-#: backend.c:4253 backend.c:9756
+#: backend.c:4339 backend.c:10203
 msgid "Game too long; increase MAX_MOVES and recompile"
-msgstr "Juego demasiado largo; incremente MAX_MOVES y recompile"
+msgstr "Partida demasiado larga; incremente MAX_MOVES y recompile"
 
-#: backend.c:4372
+#: backend.c:4458
 msgid "Error gathering move list: extra board"
 msgstr "Error al recolectar lista de jugadas: tablero extra"
 
-#: backend.c:4804 backend.c:4826
+#: backend.c:4890 backend.c:4912
 #, c-format
 msgid "Couldn't parse move \"%s\" from ICS"
-msgstr "No se pudo analizar jugada \"%s\" de ICS"
+msgstr "No se pudo analizar la jugada \"%s\" de ICS"
 
-#: backend.c:5063
+#: backend.c:5161
 #, c-format
 msgid "say Internal error; bad moveType %d (%d,%d-%d,%d)"
 msgstr "say Error interno; moveType incorrecto %d (%d,%d-%d,%d)"
 
-#: backend.c:5133
+#: backend.c:5232
 msgid "You cannot do this while you are playing or observing"
-msgstr ""
+msgstr "No se puede hacer esto mientras se está jugando u observando"
 
-#: backend.c:6029
+#  TRANSLATORS: BOARDS_RANKS, BOARD_FILES translatable?
+#: backend.c:6174
 msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!"
-msgstr ""
+msgstr "¡Hace falta recompilar para disponer de BOARD_RANKS o BOARD_FILES!"
 
-#: backend.c:6491
+#: backend.c:6664
 msgid "You are playing Black"
 msgstr "Usted juega negras"
 
-#: backend.c:6500 backend.c:6527
+#: backend.c:6673 backend.c:6700
 msgid "You are playing White"
 msgstr "Usted juega blancas"
 
-#: backend.c:6509 backend.c:6535 backend.c:6655 backend.c:6680 backend.c:6696
-#: backend.c:14592
+#: backend.c:6682 backend.c:6708 backend.c:6828 backend.c:6853 backend.c:6869
+#: backend.c:15113
 msgid "It is White's turn"
 msgstr "Turno de las blancas"
 
-#: backend.c:6513 backend.c:6539 backend.c:6663 backend.c:6686 backend.c:6717
-#: backend.c:14584
+#: backend.c:6686 backend.c:6712 backend.c:6836 backend.c:6859 backend.c:6890
+#: backend.c:15105
 msgid "It is Black's turn"
 msgstr "Turno de las negras"
 
-#: backend.c:6552
+#: backend.c:6725
 msgid "Displayed position is not current"
 msgstr "La posición mostrada no es la actual"
 
-#: backend.c:6790
+#: backend.c:6963
 msgid "Illegal move"
 msgstr "Jugada ilegal"
 
-#: backend.c:6857
+#: backend.c:7030
 msgid "End of game"
 msgstr "Fin del juego"
 
-#: backend.c:6860
+#: backend.c:7033
 msgid "Incorrect move"
 msgstr "Jugada incorrecta"
 
-#: backend.c:7169 backend.c:7296
+#: backend.c:7423 backend.c:7569
 msgid "Pull pawn backwards to under-promote"
+msgstr "Retrasar el peón a la posición previa a la coronación"
+
+#: backend.c:7532
+msgid "only marked squares are legal"
 msgstr ""
 
-#: backend.c:7527
+#: backend.c:7820
 msgid "Swiss tourney finished"
+msgstr "Torneo suizo terminado"
+
+#: backend.c:8336
+msgid "could not load EGBB library"
 msgstr ""
 
-#: backend.c:8103
-msgid "Invalid pairing from pairing engine"
+#: backend.c:8339
+msgid "wrong EGBB version"
 msgstr ""
 
-#: backend.c:8236
+#: backend.c:8452
+msgid "Invalid pairing from pairing engine"
+msgstr "El bando del otro motor no es válido"
+
+#: backend.c:8603
 #, c-format
 msgid "Illegal move \"%s\" from %s machine"
 msgstr "Jugada ilegal \"%s\" del %s motor"
 
-#: backend.c:8457
+#: backend.c:8849
 msgid "Bad FEN received from engine"
+msgstr "El FEN recibido del motor es incorrecto"
+
+#: backend.c:8950
+msgid "Engine did not send setup for non-standard variant"
 msgstr ""
 
-#: backend.c:8601 backend.c:13681 backend.c:13746
+#: backend.c:9023 backend.c:14168 backend.c:14236
 #, c-format
 msgid "%s does not support analysis"
 msgstr "%s no admite análisis"
 
-#: backend.c:8667
+#: backend.c:9089
 #, c-format
 msgid "Illegal move \"%s\" (rejected by %s chess program)"
-msgstr "Jugada ilegal \"%s\" (rechazada por %s programa de ajedrez)"
+msgstr "Jugada ilegal \"%s\" (rechazada por el programa de ajedrez %s)"
 
-#: backend.c:8694
+#: backend.c:9116
 #, c-format
 msgid "Failed to start %s chess program %s on %s: %s\n"
-msgstr "Falla al iniciar %s programa de ajedrez %s en %s: %s\n"
+msgstr "Fallo al iniciar el programa de ajedrez %s %s en %s: %s\n"
 
-#: backend.c:8715
+#: backend.c:9137
 #, c-format
 msgid "Hint: %s"
 msgstr "Sugerencia: %s"
 
-#: backend.c:8720
+#: backend.c:9142
 #, c-format
 msgid ""
 "Illegal hint move \"%s\"\n"
 "from %s chess program"
 msgstr ""
+"La jugada sugerida \"%s\"\n"
+"por el programa de ajedrez %s no es válida"
 
-#: backend.c:8895
+#: backend.c:9317
 msgid "Machine accepts your draw offer"
 msgstr "La máquina acepta su oferta de tablas"
 
-#: backend.c:8898
+# TRANSLATORS: Action / Draw translatable?
+#: backend.c:9320
+#, fuzzy
 msgid ""
-"Machine offers a draw\n"
-"Select Action / Draw to agree"
+"Machine offers a draw.\n"
+"Select Action / Draw to accept."
 msgstr ""
+"La máquina ofrece tablas\n"
+"Seleccione Action / Draw si está de acuerdo"
 
-#: backend.c:8977
+#. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone
+#: backend.c:9402
 msgid "failed writing PV"
-msgstr ""
+msgstr "fallo al escribir la PV"
 
-#: backend.c:9275
+#: backend.c:9701
 #, c-format
 msgid "Ambiguous move in ICS output: \"%s\""
-msgstr "Jugada ambigua en salida ICS: \"%s\""
+msgstr "Jugada ambigua en la salida ICS: \"%s\""
 
-#: backend.c:9285
+#: backend.c:9711
 #, c-format
 msgid "Illegal move in ICS output: \"%s\""
-msgstr "Jugada ilegal en salida ICS: \"%s\""
+msgstr "Jugada ilegal en la salida ICS: \"%s\""
 
-#: backend.c:9296
+#: backend.c:9722
 msgid "Gap in move list"
-msgstr "Hueco en lista de jugadas"
+msgstr "Hueco en la lista de jugadas"
 
-#: backend.c:9917 dialogs.c:460
+#: backend.c:10357
 #, c-format
 msgid "Variant %s not supported by %s"
 msgstr "La variante %s no es admitida por %s"
 
-#: backend.c:10038
+#: backend.c:10364
+#, c-format
+msgid ", but %s is"
+msgstr ""
+
+#: backend.c:10506
 #, c-format
 msgid "Startup failure on '%s'"
-msgstr "Falla al iniciar '%s'"
+msgstr "Fallo al iniciar '%s'"
 
-#: backend.c:10069
+#: backend.c:10537
 msgid "Waiting for first chess program"
 msgstr "Esperando al primer programa de ajedrez"
 
-#: backend.c:10074 backend.c:13964
+#: backend.c:10542 backend.c:14454
 msgid "Waiting for second chess program"
 msgstr "Esperando al segundo programa de ajedrez"
 
-#: backend.c:10123
+#: backend.c:10591
 msgid "Could not write on tourney file"
-msgstr ""
+msgstr "No se ha podido escribir en el fichero de torneos"
 
-#: backend.c:10197
+#: backend.c:10665
 msgid ""
 "You cannot replace an engine while it is engaged!\n"
 "Terminate its game first."
 msgstr ""
+"¡No se puede reemplazar un motor mientras está ocupado!\n"
+"Termine primero la partida del motor."
 
-#: backend.c:10211
+#: backend.c:10679
 msgid "No engine with the name you gave is installed"
-msgstr ""
+msgstr "No hay ningún motor instalado con el nombre indicado"
 
-#: backend.c:10213
+#: backend.c:10681
 msgid ""
 "First change an engine by editing the participants list\n"
 "of the Tournament Options dialog"
 msgstr ""
+"Cambie primero un motor editando la lista de participantes\n"
+"en el diálogo de las Opciones de Torneo"
 
-#: backend.c:10214
+#: backend.c:10682
 msgid "You can only change one engine at the time"
-msgstr ""
+msgstr "Solo se puede cambiar un motor a la vez"
 
-#: backend.c:10229 backend.c:10376
+#: backend.c:10697 backend.c:10845
 #, c-format
 msgid "No engine %s is installed"
-msgstr ""
+msgstr "No hay ningún motor %s instalado"
 
-#: backend.c:10249
+#: backend.c:10717
 msgid ""
 "You must supply a tournament file,\n"
 "for storing the tourney progress"
 msgstr ""
+"Hay que proporcionar un fichero de torneos,\n"
+"para almacenar el progreso del torneo"
 
-#: backend.c:10259
+#: backend.c:10727
 msgid "Not enough participants"
-msgstr ""
+msgstr "No hay suficientes participantes"
 
-#: backend.c:10460
-#, fuzzy
+#: backend.c:10929
 msgid "Bad tournament file"
-msgstr "archivo de partidas incorrecto"
+msgstr "Archivo de torneos incorrecto"
 
-#: backend.c:10472
-#, fuzzy
+#: backend.c:10941
 msgid "Waiting for other game(s)"
-msgstr "Esperando al primer programa de ajedrez"
+msgstr "Esperando por otra(s) partida(s)"
 
-#: backend.c:10485
+#: backend.c:10954
 msgid "No pairing engine specified"
-msgstr ""
+msgstr "iNo se ha especificado el otro motor"
 
-#: backend.c:10962
+#: backend.c:11430
 #, c-format
 msgid "Match %s vs. %s: final score %d-%d-%d"
-msgstr "Partida %s vs. %s: puntuación final %d-%d-%d"
+msgstr "Encuentro %s - %s: puntuación final %d-%d-%d"
 
-#: backend.c:11424 backend.c:11455
+#: backend.c:11897 backend.c:11928
 #, c-format
 msgid "Illegal move: %d.%s%s"
 msgstr "Jugada ilegal: %d.%s%s"
 
-#: backend.c:11444
+#: backend.c:11917
 #, c-format
 msgid "Ambiguous move: %d.%s%s"
 msgstr "Jugada ambigua: %d.%s%s"
 
-#: backend.c:11497 backend.c:12524 backend.c:12717 backend.c:13078
+#: backend.c:11971 backend.c:13010 backend.c:13203 backend.c:13567
 #, c-format
 msgid "Can't open \"%s\""
 msgstr "No se puede abrir \"%s\""
 
-#: backend.c:11509 menus.c:116
+#: backend.c:11983 menus.c:116
 msgid "Cannot build game list"
-msgstr "No se pudo armar lista de partidas"
+msgstr "No se pudo construir la lista de partidas"
 
-#: backend.c:11594
+#: backend.c:12068
 msgid "No more games in this message"
 msgstr "No hay más partidas en este mensaje"
 
-#: backend.c:11634
+#: backend.c:12108
 msgid "No game has been loaded yet"
 msgstr "Ninguna partida se ha cargado aún"
 
-#: backend.c:11638 backend.c:12505 ngamelist.c:129
+#: backend.c:12112 backend.c:12991 ngamelist.c:129
 msgid "Can't back up any further"
 msgstr "Ya no se puede ir más atrás"
 
-#: backend.c:12077
+#: backend.c:12553
 msgid "Game number out of range"
 msgstr "Número de partida fuera de rango"
 
-#: backend.c:12088
+#: backend.c:12564
 msgid "Can't seek on game file"
 msgstr "No se puede buscar en archivo de partidas"
 
-#: backend.c:12146
+#: backend.c:12622
 msgid "Game not found in file"
 msgstr "Partida no hallada en archivo"
 
-#: backend.c:12274 backend.c:12601
+#: backend.c:12751 backend.c:13087
 msgid "Bad FEN position in file"
 msgstr "Posición FEN incorrecta en archivo"
 
-#: backend.c:12426
+#: backend.c:12903
 msgid "No moves in game"
 msgstr "Ninguna jugada en la partida"
 
-#: backend.c:12501
+#: backend.c:12987
 msgid "No position has been loaded yet"
 msgstr "Ninguna posición se ha cargado aún"
 
-#: backend.c:12562 backend.c:12573
+#: backend.c:13048 backend.c:13059
 msgid "Can't seek on position file"
-msgstr "No se puede buscar en archivo de partidas"
+msgstr "No se puede buscar en archivo de aperturas"
 
-#: backend.c:12580 backend.c:12592
+#: backend.c:13066 backend.c:13078
 msgid "Position not found in file"
 msgstr "No se halló la posición en el archivo"
 
-#: backend.c:12632
+#: backend.c:13118
 msgid "Black to play"
-msgstr "Las negras juegan"
+msgstr "Negras juegan"
 
-#: backend.c:12635
+#: backend.c:13121
 msgid "White to play"
-msgstr "Las blancas juegan"
+msgstr "Blancas juegan"
 
-#: backend.c:12722 backend.c:13083
-#, fuzzy
+#: backend.c:13208 backend.c:13572
 msgid "Waiting for access to save file"
-msgstr "Esperando al segundo programa de ajedrez"
+msgstr "Esperando a tener acceso para guardar el fichero"
 
-#: backend.c:12724
+#: backend.c:13210
 msgid "Saving game"
-msgstr ""
+msgstr "Guardando partida"
 
-#: backend.c:12725
+#: backend.c:13211
 msgid "Bad Seek"
-msgstr ""
+msgstr "Búsqueda incorrecta"
 
-#: backend.c:13085
-#, fuzzy
+#: backend.c:13574
 msgid "Saving position"
-msgstr "archivo de posición incorrecto"
+msgstr "Guardando posición"
 
-#: backend.c:13211
+#: backend.c:13700
 msgid ""
 "You have edited the game history.\n"
 "Use Reload Same Game and make your move again."
 msgstr ""
+"Usted ha editado el historial de la partida.\n"
+"Use «Reload Same Game» y vuelva a realizar un movimiento."
 
-#: backend.c:13216
+#: backend.c:13705
 msgid ""
 "You have entered too many moves.\n"
 "Back up to the correct position and try again."
 msgstr ""
+"Usted ha introducido demasiadas jugadas.\n"
+"Retroceda hasta la posición correcta e inténtelo de nuevo."
 
-#: backend.c:13221
+#: backend.c:13710
 msgid ""
 "Displayed position is not current.\n"
 "Step forward to the correct position and try again."
 msgstr ""
+"La posición que se está mostrando no es la actual.\n"
+"Avance hasta la posición correcta e inténtelo de nuevo."
 
-#: backend.c:13268
+#: backend.c:13757
 msgid "You have not made a move yet"
-msgstr "Usted todavía no hace una jugada"
+msgstr "Usted no ha realizado todavía ninguna jugada"
 
-#: backend.c:13289
+#: backend.c:13778
 msgid ""
 "The cmail message is not loaded.\n"
 "Use Reload CMail Message and make your move again."
 msgstr ""
+"El mensaje «cmail» no está cargado.\n"
+"Use «Reload CMail Message» y vuelva a realizar un movimiento."
 
-#: backend.c:13294
+#: backend.c:13783
 msgid "No unfinished games"
 msgstr "No hay partidas sin terminar"
 
-#: backend.c:13300
+#: backend.c:13789
 #, c-format
 msgid ""
 "You have already mailed a move.\n"
@@ -582,1679 +629,1760 @@ msgid ""
 "\"cmail -remail -game %s\"\n"
 "on the command line."
 msgstr ""
+"Ya ha enviado una jugada por correo.\n"
+"Espere hasta recibir una jugada de su adversario.\n"
+"Para volver a enviar la misma jugada, teclee\n"
+"\"cmail -remail -game %s\"\n"
+"en la línea de órdenes."
 
-#: backend.c:13315
+#: backend.c:13804
 msgid "Failed to invoke cmail"
-msgstr "Falla al invocar cmail"
+msgstr "Fallo al invocar cmail"
 
-#: backend.c:13377
+#: backend.c:13866
 #, c-format
 msgid "Waiting for reply from opponent\n"
 msgstr "Esperando respuesta del oponente\n"
 
-#: backend.c:13399
+#: backend.c:13888
 #, c-format
 msgid "Still need to make move for game\n"
 msgstr "Todavía necesita hacer una jugada para la partida\n"
 
-#: backend.c:13403
+#: backend.c:13892
 #, c-format
 msgid "Still need to make moves for both games\n"
 msgstr "Todavía necesita hacer jugadas para ambas partidas\n"
 
-#: backend.c:13407
+#: backend.c:13896
 #, c-format
 msgid "Still need to make moves for all %d games\n"
 msgstr "Todavía necesita hacer jugadas para las %d partidas\n"
 
-#: backend.c:13414
+#: backend.c:13903
 #, c-format
 msgid "Still need to make a move for game %s\n"
 msgstr "Todavía necesita hacer una jugada para la partida %s\n"
 
-#: backend.c:13420
+#: backend.c:13909
 #, c-format
 msgid "No unfinished games\n"
 msgstr "No hay juegos sin terminar\n"
 
-#: backend.c:13422
+#: backend.c:13911
 #, c-format
 msgid "Ready to send mail\n"
 msgstr "Listo para enviar correo\n"
 
-#: backend.c:13427
+#: backend.c:13916
 #, c-format
 msgid "Still need to make moves for games %s\n"
 msgstr "Todavía necesita hacer jugadas para las partidas %s\n"
 
-#: backend.c:13631
+#: backend.c:14118
 msgid "Edit comment"
 msgstr "Editar comentario"
 
-#: backend.c:13633
+#: backend.c:14120
 #, c-format
 msgid "Edit comment on %d.%s%s"
 msgstr "Editar comentario en %d.%s%s"
 
-#: backend.c:13688
+#: backend.c:14175
 #, c-format
 msgid "You are not observing a game"
-msgstr ""
+msgstr "Usted no está observando una partida"
 
-#: backend.c:13796
+#: backend.c:14286
 msgid "It is not White's turn"
 msgstr "No es turno de las blancas"
 
-#: backend.c:13877
+#: backend.c:14367
 msgid "It is not Black's turn"
 msgstr "No es turno de las negras"
 
-#: backend.c:13985
+#: backend.c:14475
 #, c-format
 msgid "Starting %s chess program"
-msgstr ""
+msgstr "Iniciando el programa de ajedrez %s"
 
-#: backend.c:14013 backend.c:15127
+#: backend.c:14503 backend.c:15648
+#, fuzzy
 msgid ""
 "Wait until your turn,\n"
-"or select Move Now"
+"or select 'Move Now'."
 msgstr ""
+"Espere su turno\n"
+"o seleccione «Move Now»"
 
-#: backend.c:14147
+#: backend.c:14638
 msgid "Training mode off"
 msgstr "Modo de entrenamiento apagado"
 
-#: backend.c:14155
+#: backend.c:14646
 msgid "Training mode on"
 msgstr "Modo de entrenamiento activo"
 
-#: backend.c:14158
+#: backend.c:14649
 msgid "Already at end of game"
 msgstr "Ya se encuentra al final de la partida"
 
-#: backend.c:14238
+#: backend.c:14729
 msgid "Warning: You are still playing a game"
 msgstr "Advertencia: Usted todavía está jugando una partida"
 
-#: backend.c:14241
+#: backend.c:14732
 msgid "Warning: You are still observing a game"
 msgstr "Advertencia: Usted todavía está observando una partida"
 
-#: backend.c:14244
+#: backend.c:14735
 msgid "Warning: You are still examining a game"
 msgstr "Advertencia: Usted todavía está examinando una partida"
 
-#: backend.c:14311
+#: backend.c:14802
 msgid "Click clock to clear board"
-msgstr ""
+msgstr "Pinche el reloj para limpiar el tablero"
 
-#: backend.c:14321
+#: backend.c:14812
 msgid "Close ICS engine analyze..."
-msgstr ""
+msgstr "Cerrar el modo de análisis del motor ICS..."
 
-#: backend.c:14609
+#: backend.c:15130
 msgid "That square is occupied"
 msgstr "Ese cuadro está ocupado"
 
-#: backend.c:14633 backend.c:14659
+#: backend.c:15154 backend.c:15180
 msgid "There is no pending offer on this move"
 msgstr "No hay oferta pendiente para esta jugada"
 
-#: backend.c:14695 backend.c:14706
+#: backend.c:15216 backend.c:15227
 msgid "Your opponent is not out of time"
 msgstr "Su oponente no está fuera de tiempo"
 
-#: backend.c:14772
+#: backend.c:15293
 msgid "You must make your move before offering a draw"
 msgstr "Debe hacer su jugada antes de ofrecer tablas"
 
-#: backend.c:15109
+#: backend.c:15630
 msgid "You are not examining a game"
 msgstr "Usted no está examinando una partida"
 
-#: backend.c:15113
+#: backend.c:15634
 msgid "You can't revert while pausing"
 msgstr "No puede revertir si está en pausa"
 
-#: backend.c:15167 backend.c:15174
+#: backend.c:15688 backend.c:15695
 msgid "It is your turn"
 msgstr "Es su turno"
 
-#: backend.c:15225 backend.c:15232 backend.c:15285 backend.c:15292
-msgid "Wait until your turn"
+#: backend.c:15746 backend.c:15753 backend.c:15806 backend.c:15813
+#, fuzzy
+msgid "Wait until your turn."
 msgstr "Espero su turno"
 
-#: backend.c:15237
+#: backend.c:15758
 msgid "No hint available"
 msgstr "No hay sugerencia disponible"
 
-#: backend.c:15253 ngamelist.c:355
-#, fuzzy
+#: backend.c:15774 ngamelist.c:355
 msgid "Game list not loaded or empty"
-msgstr "Ninguna partida se ha cargado aún"
+msgstr "La lista de partidas no se ha cargado o está vacía"
 
-#: backend.c:15260
+#: backend.c:15781
 msgid "Book file exists! Try again for overwrite."
 msgstr ""
+"¡Ya existe el fichero del libro! Inténtelo de nuevo si quiere "
+"sobreescribirlo."
 
-#: backend.c:15738
+#: backend.c:16259
 #, c-format
 msgid "Error writing to %s chess program"
 msgstr "Error al escribir al %s programa de ajedrez"
 
-#: backend.c:15741 backend.c:15772
+#: backend.c:16262 backend.c:16293
 #, c-format
 msgid "%s program exits in draw position (%s)"
-msgstr ""
+msgstr "El programa %s termina en posición de tablas (%s)"
 
-#: backend.c:15767
+#: backend.c:16288
 #, c-format
 msgid "Error: %s chess program (%s) exited unexpectedly"
 msgstr "Error: el %s programa de ajedrez (%s) terminó inesperadamente"
 
-#: backend.c:15785
+#: backend.c:16306
 #, c-format
 msgid "Error reading from %s chess program (%s)"
 msgstr "Error al leer del %s programa de ajedrez (%s)"
 
-#: backend.c:16187
+#: backend.c:16730
 #, c-format
 msgid "%s engine has too many options\n"
-msgstr ""
+msgstr "El motor %s tiene demasiadas opciones\n"
 
-#: backend.c:16343
+#: backend.c:16886
 msgid "Displayed move is not current"
 msgstr "La jugada ilustrada no es la actual"
 
-#: backend.c:16352
+#: backend.c:16895
 msgid "Could not parse move"
 msgstr "No se pudo analizar la jugada"
 
-#: backend.c:16477 backend.c:16499
+#: backend.c:17020 backend.c:17042
 msgid "Both flags fell"
 msgstr "Ambas banderas cayeron"
 
-#: backend.c:16479
+#: backend.c:17022
 msgid "White's flag fell"
 msgstr "La bandera blanca cayó"
 
-#: backend.c:16501
+#: backend.c:17044
 msgid "Black's flag fell"
 msgstr "La bandera negra cayó"
 
-#: backend.c:16632
+#: backend.c:17175
 msgid "Clock adjustment not allowed in auto-flag mode"
 msgstr ""
+"El ajuste del reloj no está permitido en el modo de advertencia de tiempo "
+"automático"
 
-#: backend.c:17467
+#: backend.c:18025
 msgid "Bad FEN position in clipboard"
 msgstr "Posición FEN incorrecta en portapapeles"
 
 #: book.c:577 book.c:833
 msgid "Polyglot book not valid"
-msgstr ""
+msgstr "El libro de Polyglot no es válido"
 
 #: book.c:701
 msgid "Book Fault"
-msgstr ""
+msgstr "Error en el libro"
 
 #: book.c:836
 msgid "Hash keys are different"
-msgstr ""
+msgstr "Las claves «hash» son diferentes"
 
 #: book.c:1003
-#, fuzzy
 msgid "Could not create book"
-msgstr "No se pudo analizar la jugada"
+msgstr "No se ha podido crear el libro"
 
-#: dialogs.c:259
-#, fuzzy
+#: dialogs.c:283
 msgid "Tournament file:          "
-msgstr "Aplazamiento   F7"
+msgstr "Fichero de torneos:       "
 
-#: dialogs.c:260
-msgid "Sync after round"
-msgstr ""
+#: dialogs.c:284
+#, fuzzy
+msgid "For concurrent playing of tourney with multiple XBoards:"
+msgstr "      torneo con múltiples XBoards)"
 
-#: dialogs.c:261
-msgid "    (for concurrent playing of a single"
-msgstr ""
+#: dialogs.c:285
+msgid "Sync after round"
+msgstr "Sincronizar después de la ronda"
 
-#: dialogs.c:262
+#: dialogs.c:286
 msgid "Sync after cycle"
-msgstr ""
+msgstr "Sincronizar después de una vuelta"
 
-#: dialogs.c:263
-msgid "      tourney with multiple XBoards)"
-msgstr ""
-
-#: dialogs.c:264
+#: dialogs.c:287
 msgid "Tourney participants:"
-msgstr ""
+msgstr "Participantes del torneo:"
 
-#: dialogs.c:265
-#, fuzzy
+#: dialogs.c:288
 msgid "Select Engine:"
-msgstr "Motor"
+msgstr "Seleccione Motor:"
 
-#: dialogs.c:273
+#: dialogs.c:296
 msgid "Tourney type (0 = round-robin, 1 = gauntlet):"
-msgstr ""
+msgstr "Tipo de torneo (0 = liga, 1 = uno contra todos):"
 
-#: dialogs.c:274
+#: dialogs.c:297
 msgid "Number of tourney cycles (or Swiss rounds):"
-msgstr ""
+msgstr "Número de vueltas del torneo (o rondas de torneo suizo)"
 
-#: dialogs.c:275
-#, fuzzy
+#: dialogs.c:298
 msgid "Default Number of Games in Match (or Pairing):"
-msgstr "Partidas torneo p/def"
+msgstr "Número predeterminado de partidas del encuentro (o emparejamiento):"
 
-#: dialogs.c:276
+#: dialogs.c:299
 msgid "Pause between Match Games (msec):"
-msgstr ""
+msgstr "Pausa entre partidas del encuentro (ms):"
 
-#: dialogs.c:277
-#, fuzzy
+#: dialogs.c:300
 msgid "Save Tourney Games on:"
-msgstr "Opciones al salvar partida"
+msgstr "Guardar partidas del torneo en:"
 
-#: dialogs.c:278
+#: dialogs.c:301
 msgid "Game File with Opening Lines:"
-msgstr ""
+msgstr "Fichero de partidas con líneas de apertura:"
 
-#: dialogs.c:279
+#: dialogs.c:302
 msgid "Game Number (-1 or -2 = Auto-Increment):"
-msgstr ""
+msgstr "Número de la partida (-1 o -2 = incremento automático):"
 
-#: dialogs.c:280
+#: dialogs.c:303
 msgid "File with Start Positions:"
-msgstr ""
+msgstr "Fichero con posiciones iniciales:"
 
-#: dialogs.c:281
+#: dialogs.c:304
 msgid "Position Number (-1 or -2 = Auto-Increment):"
-msgstr ""
+msgstr "Número de la posición (-1 o -2 = incremento automático):"
 
-#: dialogs.c:282
+#: dialogs.c:305
 msgid "Rewind Index after this many Games (0 = never):"
-msgstr ""
+msgstr "Rebobinar Índice después de este número de Partidas (0 = nunca)"
 
-#: dialogs.c:283
+#: dialogs.c:306
 msgid "Disable own engine books by default"
-msgstr ""
+msgstr "Inicialmente, desactivar los libros propios del motor"
 
-#: dialogs.c:284
+#: dialogs.c:307 dialogs.c:1565
+msgid "Time Control"
+msgstr "Control de tiempo"
+
+#: dialogs.c:308
 #, fuzzy
+msgid "Common Engine"
+msgstr "General de los motores..."
+
+#: dialogs.c:309 dialogs.c:441
+msgid "General Options"
+msgstr "Opciones generales"
+
+#: dialogs.c:310
+msgid "Continue Later"
+msgstr ""
+
+#: dialogs.c:311
 msgid "Replace Engine"
-msgstr "Motor"
+msgstr "Reemplazar motor"
 
-#: dialogs.c:285
-#, fuzzy
+#: dialogs.c:312
 msgid "Upgrade Engine"
-msgstr "Motor"
+msgstr "Actualizar motor"
 
-#: dialogs.c:286
+#: dialogs.c:313
 msgid "Clone Tourney"
-msgstr ""
+msgstr "Clonar torneo"
 
-#: dialogs.c:316
+#: dialogs.c:351
 msgid "First you must specify an existing tourney file to clone"
 msgstr ""
+"En primer lugar, debe usted especificar un fichero de torneos que exista, "
+"para ser clonado"
 
-#: dialogs.c:332 dialogs.c:1320
+#: dialogs.c:367 dialogs.c:1407
 msgid "# no engines are installed"
-msgstr ""
+msgstr "# no hay ningún motor instalado"
 
-#: dialogs.c:344
-msgid "Match Options"
+#: dialogs.c:375
+msgid "Internal error: PARTICIPANTS set wrong"
 msgstr ""
 
-#: dialogs.c:363
+#: dialogs.c:383
+#, fuzzy
+msgid "Tournament Options"
+msgstr "Opciones de sonido"
+
+#: dialogs.c:402
 msgid "Absolute Analysis Scores"
-msgstr ""
+msgstr "Puntuaciones absolutas del análisis"
 
-#: dialogs.c:364
+#: dialogs.c:403
 msgid "Almost Always Queen (Detour Under-Promote)"
-msgstr ""
+msgstr "Casi siempre dama (rodeo para subcoronar)"
 
-#: dialogs.c:365 menus.c:714
+#: dialogs.c:404 menus.c:714
 msgid "Animate Dragging"
 msgstr "Animar arrastre"
 
-#: dialogs.c:366 menus.c:715
+#: dialogs.c:405 menus.c:715
 msgid "Animate Moving"
 msgstr "Animar movimiento"
 
-#: dialogs.c:367 menus.c:716
+#: dialogs.c:406 menus.c:716
 msgid "Auto Flag"
 msgstr "Bandera automática"
 
-#: dialogs.c:368 menus.c:717
+#: dialogs.c:407 menus.c:717
 msgid "Auto Flip View"
 msgstr "Cambio de lado automático"
 
-#: dialogs.c:369 menus.c:718
+#: dialogs.c:408 menus.c:718
 msgid "Blindfold"
 msgstr "A ciegas"
 
-#: dialogs.c:370
+#. 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 "Menú «drop»"
 
-#: dialogs.c:371
+#: dialogs.c:411
 msgid "Enable Variation Trees"
+msgstr "Activar árboles de variaciones"
+
+#: dialogs.c:412
+msgid "Headers in Engine Output Window"
 msgstr ""
 
-#: dialogs.c:372
+#: dialogs.c:413
 msgid "Hide Thinking from Human"
 msgstr "Ocultar cogitaciones al jugar contra humano"
 
-#: dialogs.c:373 menus.c:723
+#: dialogs.c:414 menus.c:723
 msgid "Highlight Last Move"
 msgstr "Iluminar última jugada"
 
-#: dialogs.c:374
+#: dialogs.c:415
 msgid "Highlight with Arrow"
 msgstr "Iluminar con flecha"
 
-#: dialogs.c:375 menus.c:726
+#: dialogs.c:416 menus.c:726
 msgid "One-Click Moving"
 msgstr "Moviemento de un click"
 
-#: dialogs.c:376
+#: dialogs.c:417
 msgid "Periodic Updates (in Analysis Mode)"
 msgstr "Actualización periódica (en análisis)"
 
-#: dialogs.c:378
+#: dialogs.c:419
 msgid "Play Move(s) of Clicked PV (Analysis)"
-msgstr ""
+msgstr "Realizar la(s) jugada(s) de la PV escogida (análisis)"
 
-#: dialogs.c:379 dialogs.c:514 menus.c:728
+#: dialogs.c:420 dialogs.c:597 menus.c:728
 msgid "Ponder Next Move"
 msgstr "Prever siguente jugada"
 
-#: dialogs.c:380
+#: dialogs.c:421
 msgid "Popup Exit Messages"
-msgstr "Ventana al salir"
+msgstr "Ventana emergente al salir"
 
-#: dialogs.c:381 menus.c:730
+#: dialogs.c:422 menus.c:730
 msgid "Popup Move Errors"
-msgstr "Ventana si error en jugada"
+msgstr "Ventana emergente si error en jugada"
 
-#: dialogs.c:382
-#, fuzzy
+#: dialogs.c:423
 msgid "Scores in Move List"
-msgstr "Leer lista jugadas"
+msgstr "Puntuaciones de la lista de jugadas"
 
-#: dialogs.c:383
+#: dialogs.c:424
 msgid "Show Coordinates"
 msgstr "Mostrar coordenadas"
 
-#: dialogs.c:384
+#: dialogs.c:425
 msgid "Show Target Squares"
-msgstr ""
+msgstr "Mostrar casillas objetivo"
 
-#: dialogs.c:385
+#: dialogs.c:426
 msgid "Sticky Windows"
-msgstr ""
+msgstr "Ventanas adhesivas"
 
-#: dialogs.c:386 menus.c:733
+#: dialogs.c:427 menus.c:733
 msgid "Test Legality"
-msgstr "Checar legalidad"
+msgstr "Verificar legalidad"
 
-#: dialogs.c:387
+#: dialogs.c:428
 msgid "Top-Level Dialogs"
-msgstr ""
+msgstr "Diálogos de alto nivel"
 
-#: dialogs.c:388
+#: dialogs.c:429
 msgid "Flash Moves (0 = no flashing):"
-msgstr ""
+msgstr "Destello en las jugadas (0 = sin destello):"
 
-#: dialogs.c:389
+#: dialogs.c:430
 msgid "Flash Rate (high = fast):"
-msgstr ""
+msgstr "Velocidad de destello (high = rápido):"
 
-#: dialogs.c:390
+#: dialogs.c:431
 msgid "Animation Speed (high = slow):"
-msgstr ""
+msgstr "Velocidad de animación (high = lenta):"
 
-#: dialogs.c:391
-#, fuzzy
+#: dialogs.c:432
 msgid "Zoom factor in Evaluation Graph:"
-msgstr "Gráfica de evaluación"
+msgstr "Factor de «zoom» en el grafo de evaluación:"
 
-#: dialogs.c:400
-msgid "General Options"
-msgstr "Opciones generales"
-
-#: dialogs.c:410
-msgid "normal"
+#: dialogs.c:452
+#, fuzzy
+msgid "Normal"
 msgstr "normal"
 
-#: dialogs.c:411
-msgid "makruk"
-msgstr ""
+#: dialogs.c:453
+#, fuzzy
+msgid "Makruk"
+msgstr "«makruk» (tailandés)"
 
-#: dialogs.c:412
+#: dialogs.c:454
 msgid "FRC"
-msgstr ""
+msgstr "FRC (ajedrez aleatorio de Fischer)"
 
-#: dialogs.c:413
-msgid "shatranj"
-msgstr ""
+#: dialogs.c:455
+#, fuzzy
+msgid "Shatranj"
+msgstr "«shatranj»"
 
-#: dialogs.c:414
-msgid "wild castle"
-msgstr ""
+#: dialogs.c:456
+#, fuzzy
+msgid "Wild castle"
+msgstr "enroque salvaje"
 
-#: dialogs.c:415
-msgid "knightmate"
-msgstr ""
+#: dialogs.c:457
+#, fuzzy
+msgid "Knightmate"
+msgstr "mate al caballo"
 
-#: dialogs.c:416
-msgid "no castle"
-msgstr ""
+#: dialogs.c:458
+#, fuzzy
+msgid "No castle"
+msgstr "sin enroque"
 
-#: dialogs.c:417
+#: dialogs.c:459
 #, fuzzy
-msgid "cylinder *"
-msgstr "cilindro"
+msgid "Cylinder *"
+msgstr "cilíndrico *"
 
-#: dialogs.c:418
+#: dialogs.c:460
 msgid "3-checks"
-msgstr ""
+msgstr "tres jaques"
 
-#: dialogs.c:419
+#: dialogs.c:461
 msgid "berolina *"
-msgstr ""
+msgstr "belorina *"
 
-#: dialogs.c:420
+#: dialogs.c:462
 msgid "atomic"
 msgstr "atómico"
 
-#: dialogs.c:421
+#: dialogs.c:463
 msgid "two kings"
-msgstr ""
+msgstr "dos reyes"
 
-#: dialogs.c:422
+#: dialogs.c:464
+msgid " "
+msgstr " "
+
+#: dialogs.c:465
+msgid "Spartan"
+msgstr "espartano"
+
+#: dialogs.c:466
 msgid "Board size ( -1 = default for selected variant):"
 msgstr ""
+"Tamaño del tablero ( -1 = el predeterminado para la variante seleccionada):"
 
-#: dialogs.c:423
+#: dialogs.c:467
 msgid "Number of Board Ranks:"
-msgstr ""
+msgstr "Número de filas del tablero:"
 
-#: dialogs.c:424
+#: dialogs.c:468
 msgid "Number of Board Files:"
-msgstr ""
+msgstr "Número de columnas del tablero:"
 
-#: dialogs.c:425
+#: dialogs.c:469
 msgid "Holdings Size:"
 msgstr ""
 
-#: dialogs.c:429
-msgid "fairy"
+#: dialogs.c:471
+msgid ""
+"Variants marked with * can only be played\n"
+"with legality testing off."
 msgstr ""
 
-#: dialogs.c:430
-msgid "Great Shatranj (10x8)"
+#: dialogs.c:473
+msgid "ASEAN"
 msgstr ""
 
-#: dialogs.c:431
+#: dialogs.c:474
+msgid "Great Shatranj (10x8)"
+msgstr "Gran shatranj (10x8)"
+
+#: dialogs.c:475
 msgid "Seirawan"
-msgstr ""
+msgstr "Seirawan"
 
-#: dialogs.c:432
-msgid "falcon (10x8)"
-msgstr ""
+#: dialogs.c:476
+#, fuzzy
+msgid "Falcon (10x8)"
+msgstr "halcón (10x8)"
 
-#: dialogs.c:433
+#: dialogs.c:477
 msgid "Superchess"
-msgstr ""
+msgstr "Superajedrez"
 
-#: dialogs.c:434
+#: dialogs.c:478
 msgid "Capablanca (10x8)"
-msgstr ""
+msgstr "Capablanca (10x8)"
 
-#: dialogs.c:435
-msgid "crazyhouse"
-msgstr ""
+#: dialogs.c:479
+#, fuzzy
+msgid "Crazyhouse"
+msgstr "«crazyhouse»"
 
-#: dialogs.c:436
+#: dialogs.c:480
 msgid "Gothic (10x8)"
-msgstr ""
+msgstr "Gótico (10x8)"
 
-#: dialogs.c:437
-msgid "bughouse"
-msgstr ""
+#: dialogs.c:481
+#, fuzzy
+msgid "Bughouse"
+msgstr "pasapiezas"
 
-#: dialogs.c:438
-msgid "janus (10x8)"
-msgstr ""
+#: dialogs.c:482
+#, fuzzy
+msgid "Janus (10x8)"
+msgstr "janus (10x8)"
 
-#: dialogs.c:439
-msgid "suicide"
+#: dialogs.c:483
+#, fuzzy
+msgid "Suicide"
 msgstr "suicida"
 
-#: dialogs.c:440
+#: dialogs.c:484
 msgid "CRC (10x8)"
-msgstr ""
+msgstr "CRC (10x8)"
 
-#: dialogs.c:441
+# TRANSLATORS: give-away = losers?
+#: dialogs.c:485
 msgid "give-away"
-msgstr ""
+msgstr "pierde gana"
 
-#: dialogs.c:442
+#: dialogs.c:486
 msgid "grand (10x10)"
-msgstr ""
+msgstr "gran ajedrez (10x10)"
 
-#: dialogs.c:443
+# TRANSLATORS: give-away = losers?
+#: dialogs.c:487
 msgid "losers"
-msgstr ""
+msgstr "pierde gana"
 
-#: dialogs.c:444
+#: dialogs.c:488
 msgid "shogi (9x9)"
-msgstr ""
+msgstr "japonés (9x9)"
 
-#: dialogs.c:445
-msgid "Spartan"
+#: dialogs.c:489
+msgid "fairy"
 msgstr ""
 
-#: dialogs.c:446
+#: dialogs.c:490
 msgid "xiangqi (9x10)"
-msgstr ""
+msgstr "chino"
 
-#: dialogs.c:447
-msgid " "
+#: dialogs.c:491
+msgid "mighty lion"
 msgstr ""
 
-#: dialogs.c:448
+#: dialogs.c:492
 msgid "courier (12x8)"
+msgstr "ajedrez del mensajero (12x8)"
+
+#: dialogs.c:493
+msgid "chu chess (10x10)"
 msgstr ""
 
-#: dialogs.c:465
+#: dialogs.c:494
+#, fuzzy
+msgid "chu shogi (12x12)"
+msgstr "japonés (9x9)"
+
+#: dialogs.c:526
 #, c-format
 msgid "Warning: second engine (%s) does not support this!"
 msgstr "Advertencia: ¡el segundo motor (%s) no admite esto!"
 
-#: dialogs.c:488
-#, c-format
-msgid "Only bughouse is not available in viewer mode"
-msgstr ""
+#: dialogs.c:554
+#, fuzzy, c-format
+msgid "Only bughouse is not available in viewer mode."
+msgstr "Solo pasapiezas no está disponible en el modo visor"
 
-#: dialogs.c:489
-#, c-format
+#: dialogs.c:555
+#, fuzzy, c-format
 msgid ""
-"All variants not supported by first engine\n"
-"(currently %s) are disabled"
+"All variants not supported by the first engine\n"
+"(currently %s) are disabled."
 msgstr ""
+"Todas las variantes no disponibles en el primer motor\n"
+"(actualmente %s) están desactivas"
 
-#: dialogs.c:490
+#: dialogs.c:572
 msgid "New Variant"
-msgstr "Variantes"
+msgstr "Nueva variante"
 
-#: dialogs.c:515
+#: dialogs.c:598
 msgid "Maximum Number of CPUs per Engine:"
-msgstr "Número max. CPUs:"
+msgstr "Número max. CPUs por motor:"
 
-#: dialogs.c:516
+#: dialogs.c:599
 msgid "Polygot Directory:"
-msgstr ""
+msgstr "Directorio de Ployglot:"
 
-#: dialogs.c:517
+#: dialogs.c:600
 msgid "Hash-Table Size (MB):"
-msgstr "Tamaño hash (MB):"
+msgstr "Tamaño de la tabla de transposición (MB):"
 
-#: dialogs.c:518
+#: dialogs.c:601
 msgid "Nalimov EGTB Path:"
-msgstr "Carpeta EGTB:"
+msgstr "Carpeta de la EGTB Nalimov:"
 
-#: dialogs.c:519
+#: dialogs.c:602
 msgid "EGTB Cache Size (MB):"
-msgstr "Tamaño EGTB (MB):"
+msgstr "Tamaño de la caché de la EGTB (MB):"
 
-#: dialogs.c:520
+#: dialogs.c:603
 msgid "Use GUI Book"
-msgstr ""
+msgstr "Usar el libro de la GUI"
 
-#: dialogs.c:521
+#: dialogs.c:604
 msgid "Opening-Book Filename:"
-msgstr ""
+msgstr "Fichero del libro de aperturas:"
 
-#: dialogs.c:522
+#: dialogs.c:605
 msgid "Book Depth (moves):"
-msgstr "Profundo libro:"
+msgstr "Profundidad del libro (jugadas):"
 
-#: dialogs.c:523
+#: dialogs.c:606
 msgid "Book Variety (0) vs. Strength (100):"
-msgstr "Variación libro:"
+msgstr "Variedad del libro (0) frente a fuerza (100):"
 
-#: dialogs.c:524
+#: dialogs.c:607
 msgid "Engine #1 Has Own Book"
-msgstr "Primero tiene libro propio"
+msgstr "El motor 1 tiene libro propio"
 
-#: dialogs.c:525
+#: dialogs.c:608
 msgid "Engine #2 Has Own Book          "
-msgstr ""
+msgstr "El motor 2 tiene libro propio"
 
-#: dialogs.c:534
+#: dialogs.c:617
 msgid "Common Engine Settings"
-msgstr "Configuración común de motor"
+msgstr "Configuración general de los motores"
 
-#: dialogs.c:540
+#: dialogs.c:623
 msgid "Detect all Mates"
-msgstr "Detectar mates"
+msgstr "Detectar todos los mates"
 
-#: dialogs.c:541
+#: dialogs.c:624
 msgid "Verify Engine Result Claims"
 msgstr "Verificar avisos del motor"
 
-#: dialogs.c:542
+#: dialogs.c:625
 msgid "Draw if Insufficient Mating Material"
-msgstr "Tablas si hay material insufficiente"
+msgstr "Tablas si el material es insuficiente"
 
-#: dialogs.c:543
+#: dialogs.c:626
 msgid "Adjudicate Trivial Draws (3-Move Delay)"
-msgstr "Adjudicar tablas triviales"
+msgstr "Adjudicar tablas triviales (regla de las tres jugadas)"
 
-#: dialogs.c:544
+#: dialogs.c:627
 msgid "N-Move Rule:"
-msgstr ""
+msgstr "Regla de las N jugadas:"
 
-#: dialogs.c:545
+#: dialogs.c:628
 msgid "N-fold Repeats:"
 msgstr ""
 
-#: dialogs.c:546
+#: dialogs.c:629
 msgid "Draw after N Moves Total:"
 msgstr "Adjudicar mate después de:"
 
-#: dialogs.c:547
+#: dialogs.c:630
 msgid "Win / Loss Threshold:"
 msgstr "Límite para adjudicar juego:"
 
-#: dialogs.c:548
+#: dialogs.c:631
 msgid "Negate Score of Engine #1"
-msgstr "Puntuación motor #1 es absoluta"
+msgstr "Negar puntuación del motor #1"
 
-#: dialogs.c:549
+#: dialogs.c:632
 msgid "Negate Score of Engine #2"
-msgstr "Puntuación motor #2 es absoluta"
+msgstr "Negar puntuación del motor #2"
 
-#: dialogs.c:556
-#, fuzzy
+#: dialogs.c:639
 msgid "Adjudicate non-ICS Games"
-msgstr "Adjudicar a blancas"
+msgstr "Adjudicar partidas no ICS"
 
-#: dialogs.c:569
+#: dialogs.c:652
 msgid "Auto-Kibitz"
 msgstr "Auto Kibitz"
 
-#: dialogs.c:570
+#: dialogs.c:653
 msgid "Auto-Comment"
 msgstr "Auto-comentario"
 
-#: dialogs.c:571
+#: dialogs.c:654
 msgid "Auto-Observe"
 msgstr "Auto-Observar"
 
-#: dialogs.c:572
+#: dialogs.c:655
 msgid "Auto-Raise Board"
 msgstr "Tablero al frente (automático)"
 
-#: dialogs.c:573
+#: dialogs.c:656
 msgid "Auto-Create Logon Script"
-msgstr ""
+msgstr "Creación de fichero de registro automática"
 
-#: dialogs.c:574
+#: dialogs.c:657
 msgid "Background Observe while Playing"
-msgstr "Mirar en el fondo"
+msgstr "Seguir observando mientras se juega"
 
-#: dialogs.c:575
+#: dialogs.c:658
 msgid "Dual Board for Background-Observed Game"
-msgstr "Tablero dual"
+msgstr "Tablero dual para partidas observadas"
 
-#: dialogs.c:576
+#: dialogs.c:659
 msgid "Get Move List"
-msgstr "Leer lista jugadas"
+msgstr "Leer lista de jugadas"
 
-#: dialogs.c:577
+#: dialogs.c:660
 msgid "Quiet Play"
 msgstr "Jugar en silencio"
 
-#: dialogs.c:578
+#: dialogs.c:661
 msgid "Seek Graph"
 msgstr "Buscar gráfica"
 
-#: dialogs.c:579
+#: dialogs.c:662
 msgid "Auto-Refresh Seek Graph"
-msgstr "auto-Refresco"
+msgstr "Grafo de búsqueda con refresco automático"
 
-#: dialogs.c:580
+#: dialogs.c:663
 msgid "Auto-InputBox PopUp"
-msgstr ""
+msgstr "Ventana emergente de buzón automática"
+
+#: dialogs.c:664
+#, fuzzy
+msgid "Quit after game"
+msgstr "Esperando por otra(s) partida(s)"
 
-#: dialogs.c:581
+#: dialogs.c:665
 msgid "Premove"
-msgstr "Pre-mov."
+msgstr "Pre-jugada"
 
-#: dialogs.c:582
+#: dialogs.c:666
 msgid "Premove for White"
-msgstr ""
+msgstr "Prejugada de las blancas"
 
-#: dialogs.c:583
+#: dialogs.c:667
 msgid "First White Move:"
 msgstr "1er. mov. blancas"
 
-#: dialogs.c:584
+#: dialogs.c:668
 msgid "Premove for Black"
-msgstr ""
+msgstr "Prejugada de las negras"
 
-#: dialogs.c:585
+#: dialogs.c:669
 msgid "First Black Move:"
 msgstr "1er. mov. negras"
 
-#: dialogs.c:587
+#: dialogs.c:671
 msgid "Alarm"
 msgstr "Alarma"
 
-#: dialogs.c:588
+#: dialogs.c:672
 msgid "Alarm Time (msec):"
-msgstr ""
+msgstr "Tiempo de la alarma (ms):"
 
-#: dialogs.c:590
+#: dialogs.c:674
 msgid "Colorize Messages"
-msgstr ""
+msgstr "Mensajes coloreados"
 
-#: dialogs.c:591
+#: dialogs.c:675
 msgid "Shout Text Colors:"
-msgstr ""
+msgstr "Colores del texto que se expresa en voz alta:"
 
-#: dialogs.c:592
+#: dialogs.c:676
 msgid "S-Shout Text Colors:"
-msgstr ""
+msgstr "Colores «S» del texto que se expresa en voz alta:"
 
-#: dialogs.c:593
+#: dialogs.c:677
 msgid "Channel #1 Text Colors:"
-msgstr ""
+msgstr "Colores del texto del canal 1:"
 
-#: dialogs.c:594
+#: dialogs.c:678
 msgid "Other Channel Text Colors:"
-msgstr ""
+msgstr "Colores del texto del otro canal:"
 
-#: dialogs.c:595
+#: dialogs.c:679
 msgid "Kibitz Text Colors:"
-msgstr ""
+msgstr "Colores del texto kibitz:"
 
-#: dialogs.c:596
+#: dialogs.c:680
 msgid "Tell Text Colors:"
-msgstr ""
+msgstr "Colores del texto de hablar con otros:"
 
-#: dialogs.c:597
+#: dialogs.c:681
 msgid "Challenge Text Colors:"
-msgstr ""
+msgstr "Colores del texto de desafíos:"
 
-#: dialogs.c:598
+#: dialogs.c:682
 msgid "Request Text Colors:"
-msgstr ""
+msgstr "Colores del texto de peticiones:"
 
-#: dialogs.c:599
+#: dialogs.c:683
 msgid "Seek Text Colors:"
-msgstr ""
+msgstr "Colores del texto de búsqueda:"
 
-#: dialogs.c:606
+#: dialogs.c:690
 msgid "ICS Options"
 msgstr "Opciones ICS"
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Exact position match"
-msgstr ""
+msgstr "Coincidencia exacta de la posición"
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Shown position is subset"
-msgstr ""
+msgstr "La posición mostrada es un subconjunto"
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Same material with exactly same Pawn chain"
-msgstr ""
+msgstr "Mismo material con exactamente la misma cadena de peones"
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Same material"
-msgstr ""
+msgstr "Mismo material"
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Material range (top board half optional)"
-msgstr ""
+msgstr "Rango de material (mitad superior del tablero opcional)"
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Material difference (optional stuff balanced)"
-msgstr ""
+msgstr "Diferencia de material (situación equilibrada opcional)"
 
-#: dialogs.c:624
+#: dialogs.c:708
 msgid "Auto-Display Tags"
-msgstr ""
+msgstr "Etiquetas de visualización automática"
 
-#: dialogs.c:625
+#: dialogs.c:709
 msgid "Auto-Display Comment"
-msgstr ""
+msgstr "Comentario de visualización automática"
 
-#: dialogs.c:626
+#: dialogs.c:710
 msgid ""
 "Auto-Play speed of loaded games\n"
 "(0 = instant, -1 = off):"
 msgstr ""
+"Velocidad de juego automático de las partidas cargadas\n"
+"(0 = instantánea, -1 = desactivada):"
 
-#: dialogs.c:627
+#: dialogs.c:711
 msgid "Seconds per Move:"
-msgstr ""
+msgstr "Segundos por jugadas:"
 
-#: dialogs.c:628
+#: dialogs.c:712
 msgid ""
 "\n"
 "options to use in game-viewer mode:"
 msgstr ""
+"\n"
+"opciones para el modo de visualización de partidas:"
 
-#: dialogs.c:630
+#: dialogs.c:714
 msgid ""
 "\n"
 "Thresholds for position filtering in game list:"
 msgstr ""
+"\n"
+"Umbral para filtrar posiciones en la lista de partidas:"
 
-#: dialogs.c:631
+#: dialogs.c:715
 msgid "Elo of strongest player at least:"
-msgstr ""
+msgstr "Elo del mejor jugador como mínimo:"
 
-#: dialogs.c:632
+#: dialogs.c:716
 msgid "Elo of weakest player at least:"
-msgstr ""
+msgstr "Elo del peor jugador como mínimo:"
 
-#: dialogs.c:633
-#, fuzzy
+#: dialogs.c:717
 msgid "No games before year:"
-msgstr "Ninguna partida se ha cargado aún"
+msgstr "Número de partidas antes del año:"
 
-#: dialogs.c:634
+#: dialogs.c:718
 msgid "Minimum nr consecutive positions:"
-msgstr ""
+msgstr "Número mínimo de posiciones consecutivas:"
 
-#: dialogs.c:635
+#: dialogs.c:719
 msgid "Search mode:"
-msgstr ""
+msgstr "Modo de búsqueda:"
 
-#: dialogs.c:636
+#: dialogs.c:720
 msgid "Also match reversed colors"
-msgstr ""
+msgstr "También colores invertidos"
 
-#: dialogs.c:637
+#: dialogs.c:721
 msgid "Also match left-right flipped position"
-msgstr ""
+msgstr "También posición volteada izquierda-derecha"
 
-#: dialogs.c:645
+#: dialogs.c:729
 msgid "Load Game Options"
 msgstr "Opciones al leer partida"
 
-#: dialogs.c:657
+#: dialogs.c:741
 msgid "Auto-Save Games"
-msgstr ""
+msgstr "Guardar partidas automáticamente"
 
-#: dialogs.c:658
+#: dialogs.c:742
 msgid "Own Games Only"
-msgstr ""
+msgstr "Solo partidas propias"
 
-#: dialogs.c:659
+#: dialogs.c:743
 msgid "Save Games on File:"
-msgstr ""
+msgstr "Guardar partidas en fichero"
 
-#: dialogs.c:660
+#: dialogs.c:744
 msgid "Save Final Positions on File:"
-msgstr ""
+msgstr "Guardar en fichero posiciones finales:"
 
-#: dialogs.c:661
+#: dialogs.c:745
 msgid "PGN Event Header:"
-msgstr ""
+msgstr "Cabecera PGN del evento:"
 
-#: dialogs.c:662
+#: dialogs.c:746
 msgid "Old Save Style (as opposed to PGN)"
-msgstr ""
+msgstr "Estilo de guardado antiguo (en contraposición a PGN)"
 
-#: dialogs.c:663
+#: dialogs.c:747
 msgid "Include Number Tag in tourney PGN"
-msgstr ""
+msgstr "Incluir etiqueta de número en el PGN del torneo"
 
-#: dialogs.c:664
+#: dialogs.c:748
 msgid "Save Score/Depth Info in PGN"
-msgstr ""
+msgstr "Guardar la información de puntuación/profundidad en el PGN"
 
-#: dialogs.c:665
+#: dialogs.c:749
 msgid "Save Out-of-Book Info in PGN           "
-msgstr ""
+msgstr "Guardar información fuera-de-libro en PGN "
 
-#: dialogs.c:672
+#: dialogs.c:756
 msgid "Save Game Options"
 msgstr "Opciones al salvar partida"
 
-#: dialogs.c:681
+#: dialogs.c:765
 msgid "No Sound"
 msgstr "Sin sonido"
 
-#: dialogs.c:682
+#: dialogs.c:766
 msgid "Default Beep"
-msgstr "Bip por defecto"
+msgstr "Bip predeterminado"
 
-#: dialogs.c:683
+#: dialogs.c:767
 msgid "Above WAV File"
-msgstr ""
+msgstr "Fichero WAV de arriba"
 
-#: dialogs.c:684
+#: dialogs.c:768
 msgid "Car Horn"
-msgstr ""
+msgstr "Bocina de coche"
 
-#: dialogs.c:685
+#: dialogs.c:769
 msgid "Cymbal"
-msgstr ""
+msgstr "Platillos"
 
-#: dialogs.c:686
+#: dialogs.c:770
 msgid "Ding"
-msgstr ""
+msgstr "Timbre"
 
-#: dialogs.c:687
+#: dialogs.c:771
 msgid "Gong"
-msgstr ""
+msgstr "«Gong»"
 
-#: dialogs.c:688
+#: dialogs.c:772
 msgid "Laser"
-msgstr ""
+msgstr "Láser"
 
-#: dialogs.c:689
+# TRANSLATORS
+#: dialogs.c:773
 msgid "Penalty"
-msgstr ""
+msgstr "Penalización"
 
-#: dialogs.c:690
+#: dialogs.c:774
 msgid "Phone"
-msgstr ""
+msgstr "Teléfono"
 
-#: dialogs.c:691
+#: dialogs.c:775
 msgid "Pop"
+msgstr "«Pop»"
+
+#: dialogs.c:776
+msgid "Roar"
 msgstr ""
 
-#: dialogs.c:692
+#: dialogs.c:777
 msgid "Slap"
-msgstr ""
+msgstr "Palmada"
 
-#: dialogs.c:693
+# TRANSLATORS
+#: dialogs.c:778
 msgid "Wood Thunk"
 msgstr ""
 
-#: dialogs.c:695
+#: dialogs.c:780
 msgid "User File"
-msgstr ""
+msgstr "Fichero del usuario"
 
-#: dialogs.c:717
+#: dialogs.c:803
 msgid "User WAV File:"
-msgstr ""
+msgstr "Fichero WAV del usuario:"
 
-#: dialogs.c:718
+#: dialogs.c:804
 msgid "Sound Program:"
-msgstr ""
+msgstr "Programa de sonido:"
 
-#: dialogs.c:719
+#: dialogs.c:805
 msgid "Try-Out Sound:"
-msgstr ""
+msgstr "Sonido de prueba"
 
-#: dialogs.c:720
+#: dialogs.c:806
 msgid "Play"
 msgstr "Reproducir"
 
-#: dialogs.c:721
+#: dialogs.c:807
 msgid "Move:"
-msgstr ""
+msgstr "Jugada:"
 
-#: dialogs.c:722
+# TRANSLATORS
+#: dialogs.c:808
 msgid "Win:"
-msgstr ""
+msgstr "Victorias:"
 
-#: dialogs.c:723
+#: dialogs.c:809
 msgid "Lose:"
-msgstr ""
+msgstr "Derrotas:"
 
-#: dialogs.c:724
+#: dialogs.c:810
 msgid "Draw:"
-msgstr ""
+msgstr "Tablas"
 
-#: dialogs.c:725
+#: dialogs.c:811
 msgid "Unfinished:"
-msgstr ""
+msgstr "No terminadas:"
 
-#: dialogs.c:726
+#: dialogs.c:812
 msgid "Alarm:"
-msgstr ""
+msgstr "Alarma:"
 
-#: dialogs.c:727
+#: dialogs.c:813
 msgid "Challenge:"
-msgstr ""
+msgstr "Desafío:"
 
-#: dialogs.c:729
+#: dialogs.c:815
 msgid "Sounds Directory:"
-msgstr ""
+msgstr "Carpeta de sonidos:"
 
-#: dialogs.c:730
+#: dialogs.c:816
 msgid "Shout:"
-msgstr ""
+msgstr "En voz alta:"
 
-#: dialogs.c:731
+# TRANSLATORS
+#: dialogs.c:817
 msgid "S-Shout:"
-msgstr ""
+msgstr "En voz alta S"
 
-#: dialogs.c:732
+#: dialogs.c:818
 msgid "Channel:"
-msgstr ""
+msgstr "Canal:"
 
-#: dialogs.c:733
+#: dialogs.c:819
 msgid "Channel 1:"
-msgstr ""
+msgstr "Canal 1:"
 
-#: dialogs.c:734
+#: dialogs.c:820
 msgid "Tell:"
-msgstr ""
+msgstr "Decir:"
 
-#: dialogs.c:735
+#: dialogs.c:821
 msgid "Kibitz:"
-msgstr ""
+msgstr "Kibitz:"
 
-#: dialogs.c:736
+#: dialogs.c:822
 msgid "Request:"
+msgstr "Pedir:"
+
+#: dialogs.c:823
+msgid "Lion roar:"
 msgstr ""
 
-#: dialogs.c:737
+#: dialogs.c:824
 msgid "Seek:"
-msgstr ""
+msgstr "Buscar:"
 
-#: dialogs.c:753
+#: dialogs.c:840
 msgid "Sound Options"
-msgstr "Sonidos"
+msgstr "Opciones de sonido"
 
-#: dialogs.c:774
+#: dialogs.c:861
 msgid "White Piece Color:"
-msgstr ""
+msgstr "Color de las piezas blancas:"
 
 #. TRANSLATORS: R = single letter for the color red
-#: dialogs.c:777 dialogs.c:786 dialogs.c:792 dialogs.c:798 dialogs.c:804
-#: dialogs.c:810
+#: dialogs.c:864 dialogs.c:873 dialogs.c:879 dialogs.c:885 dialogs.c:891
+#: dialogs.c:897
 msgid "R"
-msgstr ""
+msgstr "R"
 
 #. TRANSLATORS: G = single letter for the color green
-#: dialogs.c:779 dialogs.c:787 dialogs.c:793 dialogs.c:799 dialogs.c:805
-#: dialogs.c:811
+#: dialogs.c:866 dialogs.c:874 dialogs.c:880 dialogs.c:886 dialogs.c:892
+#: dialogs.c:898
 msgid "G"
-msgstr ""
+msgstr "V"
 
 #. TRANSLATORS: B = single letter for the color blue
-#: dialogs.c:781 dialogs.c:788 dialogs.c:794 dialogs.c:800 dialogs.c:806
-#: dialogs.c:812
+#: dialogs.c:868 dialogs.c:875 dialogs.c:881 dialogs.c:887 dialogs.c:893
+#: dialogs.c:899
 msgid "B"
-msgstr ""
+msgstr "A"
 
 #. TRANSLATORS: D = single letter to make a color darker
-#: dialogs.c:783 dialogs.c:789 dialogs.c:795 dialogs.c:801 dialogs.c:807
-#: dialogs.c:813
+#: dialogs.c:870 dialogs.c:876 dialogs.c:882 dialogs.c:888 dialogs.c:894
+#: dialogs.c:900
 msgid "D"
-msgstr ""
+msgstr "O"
 
-#: dialogs.c:784
+#: dialogs.c:871
 msgid "Black Piece Color:"
-msgstr "Piezas negras"
+msgstr "Color de las piezas negras:"
 
-#: dialogs.c:790
+#: dialogs.c:877
 msgid "Light Square Color:"
-msgstr "Cuadros claros"
+msgstr "Color de los escaques claros"
 
-#: dialogs.c:796
+#: dialogs.c:883
 msgid "Dark Square Color:"
-msgstr "Cuadros obscuros"
+msgstr "Color de los escaques oscuros"
 
-#: dialogs.c:802
+#: dialogs.c:889
 msgid "Highlight Color:"
-msgstr "Cuadro iluminado"
+msgstr "Color de escaque iluminado"
 
-#: dialogs.c:808
+#: dialogs.c:895
 msgid "Premove Highlight Color:"
-msgstr "Iluminación pre.mov."
+msgstr "Color de iluminación de prejugada:"
 
-#: dialogs.c:814
+#: dialogs.c:901
 msgid "Flip Pieces Shogi Style        (Colored buttons restore default)"
-msgstr ""
+msgstr "Voltear piezas estilo Shogi    (Botones de colores predefinidos)"
 
-#: dialogs.c:816
+#: dialogs.c:903
 msgid "Mono Mode"
-msgstr "Monocromo"
+msgstr "Modo mono"
 
-#: dialogs.c:817
-msgid "Line Gap ( -1 = default for board size):"
+#: dialogs.c:904
+#, fuzzy
+msgid "Line Gap (-1 = default for board size):"
 msgstr ""
+"Hueco de la línea ( -1 = el predeterminado para el tamaño de ltablero):"
 
-#: dialogs.c:818
+#: dialogs.c:905
 msgid "Use Board Textures"
-msgstr ""
+msgstr "Utilizar tablero con texturas"
 
-#: dialogs.c:819
+#: dialogs.c:906
 msgid "Light-Squares Texture File:"
-msgstr ""
+msgstr "Fichero de texturas para escaques claros:"
 
-#: dialogs.c:820
+#: dialogs.c:907
 msgid "Dark-Squares Texture File:"
-msgstr ""
+msgstr "Fichero de texturas para escaques oscuros:"
 
-#: dialogs.c:821
+#: dialogs.c:908
 msgid "Use external piece bitmaps with their own colors"
-msgstr ""
+msgstr "Utilizar «bitmaps» externos para las piezas con sus propios colores"
 
-#: dialogs.c:822
+#: dialogs.c:909
 msgid "Directory with Pieces Images:"
-msgstr ""
+msgstr "Carpeta con imágenes de piezas:"
 
-#: dialogs.c:872
+#: dialogs.c:959
 msgid "Board Options"
 msgstr "Opciones de tablero"
 
-#: dialogs.c:925 menus.c:634
+#: dialogs.c:1012 menus.c:634
 msgid "ICS text menu"
-msgstr ""
+msgstr "Menú de texto ICS"
 
-#: dialogs.c:947
+#: dialogs.c:1034
 msgid "clear"
-msgstr ""
+msgstr "borrar"
 
-#: dialogs.c:948 dialogs.c:1036
+#: dialogs.c:1035 dialogs.c:1123
 msgid "save changes"
-msgstr ""
+msgstr "guardar cambios"
 
-#: dialogs.c:1051
-#, fuzzy
+#: dialogs.c:1138
 msgid "Edit book"
-msgstr "Edición"
+msgstr "Editar libro"
 
-#: dialogs.c:1051 menus.c:636
+#: dialogs.c:1138 menus.c:636
 msgid "Tags"
-msgstr "Circunstancias"
+msgstr "Etiquetas"
 
-#: dialogs.c:1193
+#: dialogs.c:1280
 msgid "ICS input box"
-msgstr ""
+msgstr "Cuadro de entrada ICS"
 
-#: dialogs.c:1225
+#: dialogs.c:1312
 msgid "Type a move"
-msgstr ""
+msgstr "Teclear una jugada"
 
-#: dialogs.c:1251
-#, fuzzy
+#: dialogs.c:1338
 msgid "Engine has no options"
-msgstr "Primero tiene libro propio"
+msgstr "El motor no tiene opciones"
 
-#: dialogs.c:1253
+#: dialogs.c:1340
 msgid "Engine Settings"
-msgstr ""
+msgstr "Configuración del motor"
 
-#: dialogs.c:1278
+#: dialogs.c:1365
 msgid "Select engine from list:"
-msgstr ""
+msgstr "Seleccionar un motor de la lista:"
 
-#: dialogs.c:1281
+#: dialogs.c:1368
 msgid "or specify one below:"
-msgstr ""
+msgstr "o especificar uno debajo:"
 
-#: dialogs.c:1282
+#: dialogs.c:1369
 msgid "Nickname (optional):"
-msgstr ""
+msgstr "Sobrenombre (opcional):"
 
-#: dialogs.c:1283
+#: dialogs.c:1370
 msgid "Use nickname in PGN player tags of engine-engine games"
 msgstr ""
+"Usar el sobrenombre de las etiquetas de jugadores del PGN en las partidas "
+"motor-motor"
 
-#: dialogs.c:1284
+#: dialogs.c:1371
 msgid "Engine Directory:"
-msgstr ""
+msgstr "Carpeta del motor:"
 
-#: dialogs.c:1285
+#: dialogs.c:1372
 msgid "Engine Command:"
-msgstr ""
+msgstr "Instrucción para el motor:"
 
-#: dialogs.c:1286
+#: dialogs.c:1373
 msgid "(Directory will be derived from engine path when empty)"
-msgstr ""
+msgstr "(La carpeta se derivará de la del motor cuando esté vacía)"
 
-#: dialogs.c:1287
+#: dialogs.c:1374
 msgid "UCI"
-msgstr ""
+msgstr "UCI"
 
-#: dialogs.c:1288
+#: dialogs.c:1375
 msgid "WB protocol v1 (do not wait for engine features)"
-msgstr ""
+msgstr "Protocolo WB v1 (no esperar por las características del motor)"
 
-#: dialogs.c:1289
+#: dialogs.c:1376
 msgid "Must not use GUI book"
-msgstr ""
+msgstr "No debe utilizar el libro de la GUI"
 
-#: dialogs.c:1290
+#: dialogs.c:1377
 msgid "Add this engine to the list"
-msgstr ""
+msgstr "Añadir este motor a la lista"
 
-#: dialogs.c:1291
+#: dialogs.c:1378
 msgid "Force current variant with this engine"
-msgstr ""
+msgstr "Forzar la variante actual con este motor"
 
-#: dialogs.c:1341
+#: dialogs.c:1428
 msgid "Load first engine"
-msgstr ""
+msgstr "Cargar el primer motor"
 
-#: dialogs.c:1347
+#: dialogs.c:1434
 msgid "Load second engine"
-msgstr ""
+msgstr "Cargar el segundo motor"
 
-#: dialogs.c:1370
+#: dialogs.c:1457
 msgid "shuffle"
-msgstr ""
+msgstr "barajar"
 
-#: dialogs.c:1371
+#: dialogs.c:1458
 msgid "Start-position number:"
 msgstr "Núm. de pos. inicial:"
 
-#: dialogs.c:1372
-#, fuzzy
+#: dialogs.c:1459
 msgid "randomize"
-msgstr "Aleatorio"
+msgstr "aleatorizar"
 
-#: dialogs.c:1373
+#: dialogs.c:1460
 msgid "pick fixed"
-msgstr ""
+msgstr "selección fijada"
 
-#: dialogs.c:1390
+#: dialogs.c:1477
 msgid "New Shuffle Game"
 msgstr "Nueva partida revuelta..."
 
-#: dialogs.c:1409
+#: dialogs.c:1496
 msgid "classical"
-msgstr ""
+msgstr "clásica"
 
-#: dialogs.c:1410
+#: dialogs.c:1497
 msgid "incremental"
-msgstr ""
+msgstr "incremental"
 
-#: dialogs.c:1411
+#: dialogs.c:1498
 msgid "fixed max"
-msgstr ""
+msgstr "máximo fijado"
 
-#: dialogs.c:1412
+#: dialogs.c:1499
 msgid "Moves per session:"
-msgstr ""
+msgstr "Jugadas por sesión:"
 
-#: dialogs.c:1413
+#: dialogs.c:1500
 msgid "Initial time (min):"
-msgstr ""
+msgstr "Tiempo inicial (min):"
 
-#: dialogs.c:1414
+#: dialogs.c:1501
 msgid "Increment or max (sec/move):"
-msgstr ""
+msgstr "Incremento o máximo (s(jugada):"
 
-#: dialogs.c:1415
-#, fuzzy
+#: dialogs.c:1502
 msgid "Time-Odds factors:"
-msgstr "Factores de tiempo:"
+msgstr "Factores de tiempo extra:"
 
-#: dialogs.c:1416
-#, fuzzy
+#: dialogs.c:1503
 msgid "Engine #1"
-msgstr "Motor"
+msgstr "Motor 1"
 
-#: dialogs.c:1417
-#, fuzzy
+#: dialogs.c:1504
 msgid "Engine #2 / Human"
-msgstr "Primero tiene libro propio"
+msgstr "Motor 2 / Humano"
 
-#: dialogs.c:1457 dialogs.c:1460 dialogs.c:1465 dialogs.c:1466
+#: dialogs.c:1544 dialogs.c:1547 dialogs.c:1552 dialogs.c:1553
 #: gtk/xoptions.c:194
 msgid "Unused"
-msgstr ""
+msgstr "No se usa"
 
-#: dialogs.c:1478
-msgid "Time Control"
-msgstr ""
-
-#: dialogs.c:1507
+#: dialogs.c:1594
 msgid "Error writing to chess program"
 msgstr "Error al escribir al programa de ajedrez"
 
-#: dialogs.c:1574
-#, fuzzy
+#: dialogs.c:1662 xaw/xoptions.c:1276
 msgid "Cancel"
 msgstr "Cancelar"
 
-#: dialogs.c:1579 dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:1667 dialogs.c:2061 dialogs.c:2065
 msgid "King"
 msgstr "Rey"
 
-#: dialogs.c:1582
+#: dialogs.c:1670
 msgid "Captain"
-msgstr ""
+msgstr "Capitán"
 
-#: dialogs.c:1583
+#: dialogs.c:1671
 msgid "Lieutenant"
-msgstr ""
+msgstr "Teniente"
 
-#: dialogs.c:1584
+#: dialogs.c:1672
 msgid "General"
-msgstr "Generales..."
+msgstr "General"
 
-#: dialogs.c:1585
+#: dialogs.c:1673
 msgid "Warlord"
-msgstr ""
+msgstr "Caudillo"
 
-#: dialogs.c:1587 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1675 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Knight"
 msgstr "Caballo"
 
-#: dialogs.c:1588 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1676 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Bishop"
 msgstr "Alfil"
 
-#: dialogs.c:1589 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1677 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Rook"
 msgstr "Torre"
 
-#: dialogs.c:1593 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1681 dialogs.c:2062 dialogs.c:2066
 msgid "Archbishop"
 msgstr "Arzobispo"
 
-#: dialogs.c:1594 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1682 dialogs.c:2062 dialogs.c:2066
 msgid "Chancellor"
 msgstr "Canciller"
 
-#: dialogs.c:1596 dialogs.c:1971 dialogs.c:1975 dialogs.c:1993
+#: dialogs.c:1684 dialogs.c:2061 dialogs.c:2065 dialogs.c:2083
 msgid "Queen"
 msgstr "Dama"
 
-#: dialogs.c:1600
-msgid "Defer"
+#: dialogs.c:1686
+msgid "Lion"
 msgstr ""
 
-#: dialogs.c:1601 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1690
+msgid "Defer"
+msgstr "Diferir"
+
+#: dialogs.c:1691 dialogs.c:2062 dialogs.c:2066
 msgid "Promote"
 msgstr "Coronar"
 
-#: dialogs.c:1616
+#: dialogs.c:1706
 msgid "Chat partner:"
-msgstr ""
+msgstr "Charlar con compañero:"
 
-#: dialogs.c:1701
+#: dialogs.c:1791
 msgid "Chat box"
-msgstr ""
+msgstr "Cuadro de charla"
 
-#: dialogs.c:1742
+#: dialogs.c:1832
 msgid "factory"
 msgstr "De fábrica"
 
-#: dialogs.c:1743
+#: dialogs.c:1833
 msgid "up"
-msgstr "Arriba"
+msgstr "arriba"
 
-#: dialogs.c:1744
+#: dialogs.c:1834
 msgid "down"
-msgstr "Abajo"
+msgstr "abajo"
 
-#: dialogs.c:1762
+#: dialogs.c:1852
 msgid "No tag selected"
-msgstr ""
+msgstr "Número de la etiqueta seleccionada"
 
-#: dialogs.c:1793
-#, fuzzy
+#: dialogs.c:1883
 msgid "Game-list options"
-msgstr "Opciones al leer partida"
+msgstr "Opciones de la lista de partidas"
 
-#: dialogs.c:1869 dialogs.c:1883
+#: dialogs.c:1959 dialogs.c:1973
 msgid "Error"
 msgstr "Error"
 
-#: dialogs.c:1906
+#: dialogs.c:1996
 msgid "Fatal Error"
 msgstr "Error fatal"
 
-#: dialogs.c:1906
+#: dialogs.c:1996
 msgid "Exiting"
 msgstr "Saliendo"
 
-#: dialogs.c:1917
+#: dialogs.c:2007
 msgid "Information"
 msgstr "Información"
 
-#: dialogs.c:1924
+#: dialogs.c:2014
 msgid "Note"
 msgstr "Nota"
 
-#: dialogs.c:1970 dialogs.c:2245 dialogs.c:2248
+#: dialogs.c:2060 dialogs.c:2340 dialogs.c:2343
 msgid "White"
 msgstr "Blancas"
 
-#: dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Pawn"
 msgstr "Peón"
 
-#: dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:2061 dialogs.c:2065
 msgid "Elephant"
 msgstr "Elefante"
 
-#: dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:2061 dialogs.c:2065
 msgid "Cannon"
 msgstr "Cañón"
 
-#: dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:2062 dialogs.c:2066
 msgid "Demote"
 msgstr "Degradar"
 
-#: dialogs.c:1973 dialogs.c:1977
+#: dialogs.c:2063 dialogs.c:2067
 msgid "Empty square"
 msgstr "Vaciar el escaque"
 
-#: dialogs.c:1973 dialogs.c:1977
+#: dialogs.c:2063 dialogs.c:2067
 msgid "Clear board"
-msgstr "Limpiar el tablero    "
+msgstr "Limpiar el tablero"
 
-#: dialogs.c:1974 dialogs.c:2257 dialogs.c:2260
+#: dialogs.c:2064 dialogs.c:2352 dialogs.c:2355
 msgid "Black"
 msgstr "Negras"
 
-#: dialogs.c:2073 menus.c:787
+#: dialogs.c:2163 menus.c:787
 msgid "File"
 msgstr "Archivo"
 
-#: dialogs.c:2074 menus.c:788
+#: dialogs.c:2164 menus.c:788
 msgid "Edit"
-msgstr "Edición"
+msgstr "Editar"
 
-#: dialogs.c:2075 menus.c:789
+#: dialogs.c:2165 menus.c:789
 msgid "View"
 msgstr "Ver"
 
-#: dialogs.c:2076 menus.c:790
+#: dialogs.c:2166 menus.c:790
 msgid "Mode"
 msgstr "Modo"
 
-#: dialogs.c:2077 menus.c:791
+#: dialogs.c:2167 menus.c:791
 msgid "Action"
-msgstr "Partida"
+msgstr "Acción"
 
-#: dialogs.c:2078 menus.c:792
+#: dialogs.c:2168 menus.c:792
 msgid "Engine"
 msgstr "Motor"
 
-#: dialogs.c:2079 menus.c:793
+#: dialogs.c:2169 menus.c:793
 msgid "Options"
 msgstr "Opciones"
 
-#: dialogs.c:2080 menus.c:794
+#: dialogs.c:2170 menus.c:794
 msgid "Help"
 msgstr "Ayuda"
 
-#: dialogs.c:2090
+#: dialogs.c:2180
 msgid "<<"
-msgstr ""
+msgstr "<<"
 
-#: dialogs.c:2091
+#: dialogs.c:2181
 msgid "<"
-msgstr ""
+msgstr "<"
 
-#: dialogs.c:2093
+#: dialogs.c:2183
 msgid ">"
-msgstr ""
+msgstr ">"
 
-#: dialogs.c:2094
+#: dialogs.c:2184
 msgid ">>"
-msgstr ""
+msgstr ">>"
 
-#: dialogs.c:2364
+#: dialogs.c:2458
 msgid "Directories:"
-msgstr ""
+msgstr "Carpetas:"
 
-#: dialogs.c:2365
-#, fuzzy
+#: dialogs.c:2459
 msgid "Files:"
-msgstr "Archivo"
+msgstr "Archivos:"
 
-#: dialogs.c:2366
+#: dialogs.c:2460
 msgid "by name"
-msgstr ""
+msgstr "por nombre"
 
-#: dialogs.c:2367
+#: dialogs.c:2461
 msgid "by type"
-msgstr ""
+msgstr "por tipo"
 
-#: dialogs.c:2370
-#, fuzzy
+#: dialogs.c:2464
 msgid "Filename:"
-msgstr "Filtro"
+msgstr "Nombre del fichero:"
 
-#: dialogs.c:2371
+#: dialogs.c:2465
 msgid "New directory"
-msgstr ""
+msgstr "Nueva carpeta"
 
-#: dialogs.c:2372
-#, fuzzy
+#: dialogs.c:2466
 msgid "File type:"
-msgstr "Filtro"
+msgstr "Tipo de fichero:"
 
-#: dialogs.c:2447
-#, fuzzy
+#: dialogs.c:2541
 msgid "Contents of"
-msgstr "Comentarios"
+msgstr "Contenido de"
 
-#: dialogs.c:2473
+#: dialogs.c:2567
 msgid "  next page"
-msgstr ""
+msgstr "  siguiente página"
 
-#: dialogs.c:2490
+#: dialogs.c:2584
 msgid "FIRST TYPE DIRECTORY NAME HERE"
 msgstr ""
 
-#: dialogs.c:2491
+#: dialogs.c:2585
 msgid "TRY ANOTHER NAME"
-msgstr ""
+msgstr "INTENTAR OTRO NOMBRE"
 
-#: draw.c:293
+#: draw.c:310
+#, fuzzy
 msgid ""
-"No default pieces installed\n"
-"Select your own -pieceImageDirectory"
+"No default pieces installed!\n"
+"Select your own using '-pieceImageDirectory'."
 msgstr ""
+"No hay piezas predeterminadas instaladas\n"
+"Seleccione su propio -pieceImageDirectory"
 
-#: engineoutput.c:107 menus.c:630
-#, fuzzy, c-format
+#: engineoutput.c:110 menus.c:630
+#, c-format
 msgid "Engine Output"
-msgstr "Salida de motores"
+msgstr "Salida del motor"
 
-#: engineoutput.c:117
+#: engineoutput.c:120
 #, c-format
 msgid "%s (%d reversible ply)"
 msgid_plural "%s (%d reversible plies)"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%s (%d media-jugada reversible)"
+msgstr[1] "%s (%d medias-jugadas reversibles)"
 
-#: engineoutput.c:509 engineoutput.c:512 nengineoutput.c:81 nengineoutput.c:88
+#: engineoutput.c:542 engineoutput.c:545 nengineoutput.c:82 nengineoutput.c:90
 msgid "NPS"
 msgstr "NPS"
 
 #: gamelist.c:375
-#, fuzzy, c-format
+#, c-format
 msgid "Reading game file (%d)"
-msgstr "archivo de partidas incorrecto"
+msgstr "Leyendo fichero de partidas (%d)"
 
-#: gtk/xboard.c:844 xaw/xboard.c:1162
+#: gtk/xboard.c:867 xaw/xboard.c:1052
 #, c-format
 msgid "%s: can't cd to CHESSDIR: "
-msgstr ""
+msgstr "%s: no se puede ir a la carpeta CHESSDIR: "
 
-#: gtk/xboard.c:853 xaw/xboard.c:1171
+#: gtk/xboard.c:876 xaw/xboard.c:1061
 #, c-format
 msgid "Failed to open file '%s'\n"
-msgstr ""
+msgstr "Fallo al abrir el fichero '%s'\n"
 
-#: gtk/xboard.c:868 xaw/xboard.c:1180
+#  TRANSLATORS: BOARDS_RANKS, BOARD_FILES translatable?
+#: gtk/xboard.c:891 xaw/xboard.c:1070
 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:887 xaw/xboard.c:1212
+#: gtk/xboard.c:910 xaw/xboard.c:1102
 #, c-format
 msgid "%s: bad boardSize syntax %s\n"
-msgstr ""
+msgstr "%s: sintaxis de boardSize incorrecta %s\n"
 
-#: gtk/xboard.c:927 xaw/xboard.c:1249
+#: gtk/xboard.c:950 xaw/xboard.c:1139
 #, c-format
 msgid "%s: unrecognized boardSize name %s\n"
-msgstr ""
+msgstr "%s: nombre de boardSize no reconocido %s\n"
 
-#: gtk/xboard.c:968 xaw/xboard.c:1286
+#: gtk/xboard.c:991 xaw/xboard.c:1176
 #, c-format
 msgid "%s: too few colors available; trying monochrome mode\n"
-msgstr ""
+msgstr "%s: insuficientes colores disponibles: probando modo monocromo\n"
 
-#: gtk/xboard.c:1258 xaw/xboard.c:1568
+#: gtk/xboard.c:1281 xaw/xboard.c:1458
 #, c-format
 msgid "Unable to create font set for %s.\n"
-msgstr ""
+msgstr "No se ha podido crear conjunto de fuentes para %s.\n"
 
-#: gtk/xboard.c:1283 xaw/xboard.c:1591
+#: gtk/xboard.c:1306 xaw/xboard.c:1481
 #, c-format
 msgid "%s: no fonts match pattern %s\n"
-msgstr ""
+msgstr "%s: ninguna fuente concuerda con el patrón %s\n"
 
-#: gtk/xboard.c:1722 xaw/xboard.c:2081
+#: gtk/xboard.c:1745 xaw/xboard.c:1971
 msgid "Can't open temp file"
-msgstr ""
+msgstr "No se puede abrir el fichero temporal"
 
-#: gtk/xboard.c:2174
-#, fuzzy
+#: gtk/xboard.c:2199
 msgid "Failed to open file"
-msgstr "Falla al invocar cmail"
+msgstr "Fallo al abrir fichero"
 
 #: menus.c:134
 msgid "Load game file name?"
-msgstr ""
+msgstr "¿Nombre del fichero de partidas para cargar?"
 
 #: menus.c:179
 msgid "Load position file name?"
-msgstr ""
+msgstr "¿Nombre del fichero de posiciones para cargar?"
 
 #: menus.c:185
 msgid "Save game file name?"
-msgstr ""
+msgstr "¿Nombre del fichero de partidas para guardar?"
 
 #: menus.c:194
 msgid "Save position file name?"
-msgstr ""
+msgstr "¿Nombre del fichero de posiciones para guardar?"
 
 #: menus.c:358
 msgid " (with Zippy code)"
-msgstr ""
+msgstr " (con el código de Zippy)"
 
 #: menus.c:363
-#, c-format
+#, fuzzy, c-format
 msgid ""
 "%s%s\n"
 "\n"
@@ -2273,169 +2401,164 @@ msgid ""
 "Report bugs via email at: <bug-xboard@gnu.org>\n"
 "\n"
 msgstr ""
+"%s%s\n"
+"\n"
+"Copyright 1991 Digital Equipment Corporation\n"
+"Copyright de las mejoras 1992-2013 Free Software Foundation\n"
+"Copyright de las mejoras 2005 Alessandro Scotti\n"
+"\n"
+"%s es software libre SIN NINGUNA GARANTÍA; ver el fichero COPYING para más "
+"información.\n"
+"La versión de GTK utilizada es experimental e inestable\n"
+"\n"
+"Visite XBoard en la web en: http://www.gnu.org/software/xboard/\n"
+"Obtenga las características más recientes en: http://www.gnu.org/software/"
+"xboard/whats_new.html\n"
+"\n"
+"Informe de errores por correo a: <bug-xboard@gnu.org>\n"
+"\n"
 
 #: menus.c:375 menus.c:750
 msgid "About XBoard"
 msgstr "Acerca de XBoard"
 
 #: menus.c:582
-#, fuzzy
 msgid "New Game"
-msgstr "Nueva partida revuelta..."
+msgstr "Nueva partida"
 
 #: menus.c:583
-msgid "New Shuffle Game ..."
+#, fuzzy
+msgid "New Shuffle Game..."
 msgstr "Nueva partida revuelta..."
 
 #: menus.c:584
 #, fuzzy
-msgid "New Variant ..."
-msgstr "Variantes"
+msgid "New Variant..."
+msgstr "Nueva variante ..."
 
 #: menus.c:586
-#, fuzzy
 msgid "Load Game"
-msgstr "Para leer partida...   Alt+Mayús+L"
+msgstr "Cargar partida"
 
 #: menus.c:587
-#, fuzzy
 msgid "Load Position"
-msgstr "archivo de posición incorrecto"
+msgstr "Cargar posición"
 
 #: menus.c:588
-#, fuzzy
 msgid "Next Position"
-msgstr "archivo de posición incorrecto"
+msgstr "Siguiente posición"
 
 #: menus.c:589
-#, fuzzy
 msgid "Prev Position"
-msgstr "archivo de posición incorrecto"
+msgstr "Posición previa"
 
 #: menus.c:591
-#, fuzzy
 msgid "Save Game"
-msgstr "Para guardar partida...   Alt+Mayús+S"
+msgstr "Guardar partida"
 
 #: menus.c:592
-#, fuzzy
 msgid "Save Position"
-msgstr "archivo de posición incorrecto"
+msgstr "Guardar posición"
 
 #: menus.c:593
-#, fuzzy
 msgid "Save Games as Book"
-msgstr "Para guardar partida...   Alt+Mayús+S"
+msgstr "Guardar partidas como libro"
 
 #: menus.c:595
 msgid "Mail Move"
-msgstr ""
+msgstr "Jugada por correo"
 
 #: menus.c:596
 msgid "Reload CMail Message"
-msgstr ""
+msgstr "Volver a cargar mensaje CMail"
 
 #: menus.c:598
 msgid "Quit "
-msgstr ""
+msgstr "Salir "
 
 #: menus.c:603
-#, fuzzy
 msgid "Copy Game"
-msgstr "Copiar lista de partidas"
+msgstr "Copiar partida"
 
 #: menus.c:604
-#, fuzzy
 msgid "Copy Position"
-msgstr "Copiar posición   Alt+Mayús+C"
+msgstr "Copiar posición"
 
 #: menus.c:605
 msgid "Copy Game List"
 msgstr "Copiar lista de partidas"
 
 #: menus.c:607
-#, fuzzy
 msgid "Paste Game"
-msgstr "Pegar partida   Ctrl+V"
+msgstr "Pegar partida"
 
 #: menus.c:608
-#, fuzzy
 msgid "Paste Position"
-msgstr "Pegar posición   Alt+Mayús+V"
+msgstr "Pegar posición"
 
 #: menus.c:610 menus.c:652
-#, fuzzy
 msgid "Edit Game"
-msgstr "Editar comentario"
+msgstr "Editar partida"
 
 #: menus.c:611 menus.c:653
-#, fuzzy
 msgid "Edit Position"
-msgstr "archivo de posición incorrecto"
+msgstr "Editar posición"
 
 #: menus.c:612
 msgid "Edit Tags"
-msgstr "Editar circunstancias"
+msgstr "Editar etiquetas"
 
 #: menus.c:613
 msgid "Edit Comment"
-msgstr "Editar comentarios"
+msgstr "Editar comentario"
 
 #: menus.c:614
-#, fuzzy
 msgid "Edit Book"
-msgstr "Repertorio de aperturas..."
+msgstr "Editar libro"
 
 #: menus.c:616
 msgid "Revert"
-msgstr ""
+msgstr "Revertir"
 
 #: menus.c:617
 msgid "Annotate"
 msgstr "Anotar"
 
 #: menus.c:618
-#, fuzzy
 msgid "Truncate Game"
-msgstr "Truncar partida   End"
+msgstr "Truncar partida"
 
 #: menus.c:620
 msgid "Backward"
-msgstr ""
+msgstr "Hacia atrás"
 
 #: menus.c:621
 msgid "Forward"
-msgstr ""
+msgstr "Hacia delante"
 
 #: menus.c:622
-#, fuzzy
 msgid "Back to Start"
-msgstr "Las negras juegan"
+msgstr "Volver a empezar"
 
 #: menus.c:623
-#, fuzzy
 msgid "Forward to End"
-msgstr "Ultima jugada   Alt+Fin"
+msgstr "Avanzar hasta el final"
 
 #: menus.c:628
-#, fuzzy
 msgid "Flip View"
-msgstr "Cambio de lado automático"
+msgstr "Voltear vista"
 
 #: menus.c:631
-#, fuzzy
 msgid "Move History"
-msgstr "Leer lista jugadas"
+msgstr "Historial de jugadas"
 
 #: menus.c:632
-#, fuzzy
 msgid "Evaluation Graph"
 msgstr "Gráfica de evaluación"
 
 #: menus.c:633
-#, fuzzy
 msgid "Game List"
-msgstr "Lista de partidas..."
+msgstr "Lista de partidas"
 
 #: menus.c:637
 msgid "Comments"
@@ -2443,44 +2566,39 @@ msgstr "Comentarios"
 
 #: menus.c:638
 msgid "ICS Input Box"
-msgstr ""
+msgstr "Cuatro de entrada ICS"
 
 #: menus.c:639
 msgid "Open Chat Window"
-msgstr ""
+msgstr "Abrir ventana de conversación"
 
 #: menus.c:641
 msgid "Board..."
-msgstr "Opciones del tablero..."
+msgstr "Tablero..."
 
 #: menus.c:642
 msgid "Game List Tags..."
-msgstr "Opciones de lista de partidas..."
+msgstr "Etiquetas de la lista de partidas..."
 
 #: menus.c:647
-#, fuzzy
 msgid "Machine White"
-msgstr "El programa juega con blancas   Ctrl+W"
+msgstr "El programa con blancas"
 
 #: menus.c:648
-#, fuzzy
 msgid "Machine Black"
-msgstr "Torneo de dos programas"
+msgstr "El programa con negras"
 
 #: menus.c:649
-#, fuzzy
 msgid "Two Machines"
-msgstr "Juegan dos programas   Ctrl+T"
+msgstr "Dos programas"
 
 #: menus.c:650
-#, fuzzy
 msgid "Analysis Mode"
-msgstr "Análisis   Ctrl+A"
+msgstr "Modo de análisis"
 
 #: menus.c:651
-#, fuzzy
 msgid "Analyze Game"
-msgstr "Analizar archivo   Ctrl+F"
+msgstr "Analizar partida"
 
 #: menus.c:654
 msgid "Training"
@@ -2488,7 +2606,7 @@ msgstr "Entrenamiento"
 
 #: menus.c:655
 msgid "ICS Client"
-msgstr "Conectado a un ICS"
+msgstr "Cliente ICS"
 
 #: menus.c:657
 msgid "Machine Match"
@@ -2496,50 +2614,47 @@ msgstr "Torneo de dos programas"
 
 #: menus.c:658
 msgid "Pause"
-msgstr ""
+msgstr "Pausa"
 
 #: menus.c:663
 msgid "Accept"
-msgstr ""
+msgstr "Aceptar"
 
 #: menus.c:664
 msgid "Decline"
-msgstr ""
+msgstr "Declinar"
 
 #: menus.c:665
 msgid "Rematch"
-msgstr ""
+msgstr "Revancha"
 
 #: menus.c:667
-#, fuzzy
 msgid "Call Flag"
-msgstr "Pedir la bandera   F5"
+msgstr "Pedir la bandera"
 
 #: menus.c:668
 msgid "Draw"
-msgstr ""
+msgstr "Tablas"
 
 #: menus.c:669
 msgid "Adjourn"
-msgstr ""
+msgstr "Aplazar"
 
 #: menus.c:670
 msgid "Abort"
-msgstr ""
+msgstr "Abortar"
 
 #: menus.c:671
 msgid "Resign"
-msgstr ""
+msgstr "Rendirse"
 
 #: menus.c:673
-#, fuzzy
 msgid "Stop Observing"
-msgstr "Dejo de observar   F10"
+msgstr "Dejar de observar"
 
 #: menus.c:674
-#, fuzzy
 msgid "Stop Examining"
-msgstr "Dejo de examinar   F11"
+msgstr "Dejar de examinar"
 
 #: menus.c:675
 msgid "Upload to Examine"
@@ -2558,88 +2673,96 @@ msgid "Adjudicate Draw"
 msgstr "Adjudicar tablas"
 
 #: menus.c:684
-msgid "Load New 1st Engine ..."
-msgstr ""
+#, fuzzy
+msgid "Load New 1st Engine..."
+msgstr "Cargar un nuevo primer motor ..."
 
 #: menus.c:685
-msgid "Load New 2nd Engine ..."
-msgstr ""
+#, fuzzy
+msgid "Load New 2nd Engine..."
+msgstr "Cargar un nuevo segundo motor ..."
 
 #: menus.c:687
-msgid "Engine #1 Settings ..."
-msgstr "Configuración motor #1..."
+#, fuzzy
+msgid "Engine #1 Settings..."
+msgstr "Configuración del motor #1..."
 
 #: menus.c:688
-msgid "Engine #2 Settings ..."
-msgstr "Configuración motor #2..."
+#, fuzzy
+msgid "Engine #2 Settings..."
+msgstr "Configuración del motor #2..."
 
 #: menus.c:690
 msgid "Hint"
-msgstr "Dame una pista..."
+msgstr "Pista"
 
 #: menus.c:691
 msgid "Book"
-msgstr "Repertorio de aperturas..."
+msgstr "Repertorio de aperturas"
 
 #: menus.c:693
 msgid "Move Now"
-msgstr ""
+msgstr "Mover ahora"
 
 #: menus.c:694
-#, fuzzy
 msgid "Retract Move"
-msgstr "Revocar jugada   Ctrl+X"
+msgstr "Revocar jugada"
 
 #: menus.c:700
-msgid "General ..."
-msgstr "Generales..."
+#, fuzzy
+msgid "General..."
+msgstr "General..."
 
 #: menus.c:702
 #, fuzzy
-msgid "Time Control ..."
+msgid "Time Control..."
 msgstr "Controles de tiempo..."
 
 #: menus.c:703
 #, fuzzy
-msgid "Common Engine ..."
-msgstr "Para los motores...   Alt+Mayús+U"
+msgid "Common Engine..."
+msgstr "General de los motores..."
 
 #: menus.c:704
 #, fuzzy
-msgid "Adjudications ..."
-msgstr "Adjudicaciones...   Alt+Mayús+J"
+msgid "Adjudications..."
+msgstr "Adjudicaciones..."
 
 #: menus.c:705
-msgid "ICS ..."
-msgstr "ICS..."
+msgid "ICS..."
+msgstr ""
 
 #: menus.c:706
-msgid "Match ..."
+msgid "Tournament..."
 msgstr ""
 
 #: menus.c:707
-msgid "Load Game ..."
-msgstr "Para leer partida...   Alt+Mayús+L"
+#, fuzzy
+msgid "Load Game..."
+msgstr "Cargar partida ..."
 
 #: menus.c:708
-msgid "Save Game ..."
-msgstr "Para guardar partida...   Alt+Mayús+S"
+#, fuzzy
+msgid "Save Game..."
+msgstr "Guardar partida ..."
 
 #: menus.c:709
-msgid "Game List ..."
-msgstr "Lista de partidas..."
+#, fuzzy
+msgid "Game List..."
+msgstr "Lista de partidas ..."
 
 #: menus.c:710
-msgid "Sounds ..."
-msgstr "Sonido..."
+#, fuzzy
+msgid "Sounds..."
+msgstr "Sonidos ..."
 
 #: menus.c:713
 msgid "Always Queen"
-msgstr ""
+msgstr "Siempre dama"
 
 #: menus.c:719
 msgid "Flash Moves"
-msgstr ""
+msgstr "Destello en las jugadas"
 
 #: menus.c:721
 msgid "Highlight Dragging"
@@ -2651,7 +2774,7 @@ msgstr "Iluminar con flecha"
 
 #: menus.c:725
 msgid "Move Sound"
-msgstr ""
+msgstr "Sonido en jugadas"
 
 #: menus.c:727
 msgid "Periodic Updates"
@@ -2659,69 +2782,68 @@ msgstr "Actualización periódica"
 
 #: menus.c:729
 msgid "Popup Exit Message"
-msgstr "Ventana al salir"
+msgstr "Mensaje de salida en venta emergente"
 
 #: menus.c:731
 msgid "Show Coords"
 msgstr "Mostrar coordenadas"
 
 #: menus.c:732
-#, fuzzy
 msgid "Hide Thinking"
-msgstr "Ocultar cogitaciones al jugar contra humano"
+msgstr "Ocultar cogitaciones"
 
 #: menus.c:736
 msgid "Save Settings Now"
-msgstr "Salvar config. ahora"
+msgstr "Guardar config. ahora"
 
 #: menus.c:737
 msgid "Save Settings on Exit"
-msgstr "Salvar config. al salir del programa"
+msgstr "Guardar config. al salir del programa"
 
 #: menus.c:742
 msgid "Info XBoard"
-msgstr ""
+msgstr "Información XBoard"
 
 #: menus.c:743
-#, fuzzy
 msgid "Man XBoard"
-msgstr "Acerca de XBoard"
+msgstr "Manual de XBoard"
 
 #: menus.c:745
 msgid "XBoard Home Page"
-msgstr ""
+msgstr "Página web de XBoard"
 
 #: menus.c:746
 msgid "On-line User Guide"
-msgstr ""
+msgstr "Guía del usuario en línea"
 
 #: menus.c:747
 msgid "Development News"
-msgstr ""
+msgstr "Noticias sobre el desarrollo"
 
 #: menus.c:748
 msgid "e-Mail Bug Report"
-msgstr ""
+msgstr "correo-e para informar de errores"
 
-#: nengineoutput.c:78 nengineoutput.c:85
-#, fuzzy
+#: nengineoutput.c:78 nengineoutput.c:86
 msgid "engine name"
-msgstr "Motor"
+msgstr "nombre del motor"
 
-#: nengineoutput.c:80 nengineoutput.c:87
-#, fuzzy
+#. TRANSLATORS: noun, as in "the move Nf3"
+#: nengineoutput.c:81 nengineoutput.c:89
 msgid "move"
-msgstr "jugadas"
+msgstr "jugada"
 
-#: nengineoutput.c:153
+#: nengineoutput.c:155
 msgid "Engine output"
-msgstr "Salida de motores"
+msgstr "Salida del motor"
 
-#: nengineoutput.c:157
+#: nengineoutput.c:159
 msgid ""
 "Mismatch of STRIDE in nengineoutput.c\n"
 "Change and recompile!"
 msgstr ""
+"STRIDE desajustado en nengineoutput.c\n"
+"¡Cambiar y recompilar!"
 
 #: nevalgraph.c:68
 msgid "Evaluation graph"
@@ -2729,33 +2851,31 @@ msgstr "Gráfica de evaluación"
 
 #: nevalgraph.c:105
 msgid "Eval"
-msgstr ""
+msgstr "Evaluación"
 
 #: ngamelist.c:87
-#, fuzzy
 msgid "find position"
-msgstr "archivo de posición incorrecto"
+msgstr "encontrar posición"
 
 #: ngamelist.c:88
 msgid "narrow"
-msgstr ""
+msgstr "estrecho"
 
 #: ngamelist.c:89
 msgid "thresholds"
-msgstr ""
+msgstr "umbrales"
 
 #: ngamelist.c:90
-#, fuzzy
 msgid "tags"
-msgstr "Circunstancias"
+msgstr "etiquetas"
 
 #: ngamelist.c:91
 msgid "next"
-msgstr ""
+msgstr "siguiente"
 
 #: ngamelist.c:92
 msgid "close"
-msgstr ""
+msgstr "cerrar"
 
 #: ngamelist.c:116
 msgid "No game selected"
@@ -2768,24 +2888,24 @@ msgstr "Ya no se puede ir más adelante"
 #: ngamelist.c:192
 #, c-format
 msgid "Scanning through games (%d)"
-msgstr ""
+msgstr "Explorando partidas (%d)"
 
 #: ngamelist.c:211
 msgid "previous page"
-msgstr ""
+msgstr "página anterior"
 
 #: ngamelist.c:214
 msgid "next page"
-msgstr ""
+msgstr "página siguiente"
 
 #: ngamelist.c:217
 msgid "no games matched your request"
-msgstr ""
+msgstr "ninguna partida responde a su búsqueda"
 
 #: ngamelist.c:219
-#, fuzzy, c-format
+#, c-format
 msgid "%s - %d/%d games (%d-%d-%d)"
-msgstr "Partida %s vs. %s: puntuación final %d-%d-%d"
+msgstr "%s - %d/%d partidas (%d-%d-%d)"
 
 #: ngamelist.c:274
 msgid "There is no game list"
@@ -2793,229 +2913,97 @@ msgstr "No hay lista de partidas"
 
 #: nhistory.c:109
 msgid "Move list"
-msgstr ""
+msgstr "Lista de jugadas"
 
 #: usystem.c:222
 #, c-format
 msgid "%s: unrecognized color %s\n"
-msgstr ""
+msgstr "%s: color no reconocido %s\n"
 
 #: usystem.c:230
-#, c-format
-msgid "%s: can't parse foreground color in `%s'\n"
-msgstr ""
+#, fuzzy, c-format
+msgid "%s: can't parse foreground color in '%s'\n"
+msgstr "%s: no se puede analizar el color de primer plano en `%s'\n"
 
 #: usystem.c:259
 #, c-format
 msgid "%s: can't parse color names; disabling colorization\n"
 msgstr ""
+"%s: no se puede analizar los nombres de los colores; desactivando colorido\n"
 
-#: usystem.c:371
+#: usystem.c:374
 #, c-format
 msgid "ERROR: Unknown user %s (in path %s)\n"
-msgstr ""
+msgstr "ERROR: usuario desconocido %s (en carpeta %s)\n"
 
-#: usystem.c:556
+#: usystem.c:557
 msgid "Socket support is not configured in"
-msgstr ""
+msgstr "La capacidad de «socket» no está configurada en"
 
-#: usystem.c:645
+#: usystem.c:646
 msgid "internal rcmd not implemented for Unix"
-msgstr ""
+msgstr "rcmd interno no implementado para Unix"
 
-#: xaw/xboard.c:478
-#, c-format
-msgid "%s: Can't access XPM directory %s\n"
-msgstr ""
-
-#: xaw/xboard.c:499
-#, c-format
-msgid "Available `%s' sizes:\n"
-msgstr ""
-
-#: xaw/xboard.c:532
-#, c-format
-msgid "Error: No `%s' files!\n"
-msgstr ""
-
-#: xaw/xboard.c:545
-#, c-format
-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 ""
-
-#: xaw/xboard.c:1292
+#: xaw/xboard.c:1182
 #, c-format
 msgid "white pixel = 0x%lx, black pixel = 0x%lx\n"
-msgstr ""
-
-#: xaw/xengineoutput.c:115
-#, c-format
-msgid "Error %d loading icon image\n"
-msgstr ""
+msgstr "pixel blanco = 0x%lx, pixel negro = 0x%lx\n"
 
-#: xaw/xoptions.c:321 xaw/xoptions.c:1023
+#: xaw/xoptions.c:321 xaw/xoptions.c:1025
 msgid "browse"
-msgstr ""
+msgstr "navegar"
 
 #: xaw/xoptions.c:387 xaw/xoptions.c:388
 msgid "Ctrl"
-msgstr ""
+msgstr "Ctrl"
 
 #: xaw/xoptions.c:393 xaw/xoptions.c:394
 msgid "Alt"
-msgstr ""
+msgstr "Alt"
 
 #: xaw/xoptions.c:399 xaw/xoptions.c:400
 msgid "Shift"
-msgstr ""
+msgstr "Mayús"
 
-#: xaw/xoptions.c:1270
+#: xaw/xoptions.c:1272
 msgid "OK"
 msgstr "Aceptar"
 
-#: xaw/xoptions.c:1274
-msgid "cancel"
-msgstr "Cancelar"
-
-#~ msgid "New Game        Ctrl+N"
-#~ msgstr "Nueva partida   Ctrl+N"
-
-#~ msgid "New Variant ...   Alt+Shift+V"
-#~ msgstr "Nueva variante...   Alt+Mayús+V"
-
-#~ msgid "Load Game       Ctrl+O"
-#~ msgstr "Leer partida...   Ctrl+O"
-
-#~ msgid "Load Position    Ctrl+Shift+O"
-#~ msgstr "Leer posición...   Ctrl+Mayús+O"
-
-#~ msgid "Save Game       Ctrl+S"
-#~ msgstr "Guardar partida...   Ctrl+S"
-
-#~ msgid "Save Position    Ctrl+Shift+S"
-#~ msgstr "Guardar posición...   Ctrl+Mayús+S"
-
-#~ msgid "Quit                 Ctr+Q"
-#~ msgstr "Salir"
-
-#~ msgid "Copy Game    Ctrl+C"
-#~ msgstr "Copiar partida   Ctrl+C"
-
-#~ msgid "Edit Game      Ctrl+E"
-#~ msgstr "Editar partida   Ctrl+E"
-
-#~ msgid "Edit Position   Ctrl+Shift+E"
-#~ msgstr "Editar posición   Ctrl+Mayús+E"
-
-#~ msgid "Revert              Home"
-#~ msgstr "Revertir   Home"
-
-#~ msgid "Backward         Alt+Left"
-#~ msgstr "Jugada anterior   Alt+Izquierda"
-
-#~ msgid "Forward           Alt+Right"
-#~ msgstr "Siguiente jugada   Alt+Derecha"
-
-#~ msgid "Back to Start     Alt+Home"
-#~ msgstr "Primera jugada   Alt+Inicio"
-
-#~ msgid "Flip View             F2"
-#~ msgstr "Tablero invertido   F2"
-
-#~ msgid "Engine Output      Alt+Shift+O"
-#~ msgstr "Mostrar salida del motor   Alt+Mayús+O"
-
-#~ msgid "Move History       Alt+Shift+H"
-#~ msgstr "Mostrar lista de jugadas   Alt+Mayús+H"
+#~ msgid "    (for concurrent playing of a single"
+#~ msgstr "    (para jugar simultáneamente en un solo"
 
-#~ msgid "Evaluation Graph  Alt+Shift+E"
-#~ msgstr "Mostrar gráfica de evaluación   Alt+Mayús+E"
+#~ msgid "Match Options"
+#~ msgstr "Opciones del encuentro"
 
-#~ msgid "Game List            Alt+Shift+G"
-#~ msgstr "Mostrar lista de partidas   Alt+Mayús+G"
-
-#~ msgid "Machine Black  Ctrl+B"
-#~ msgstr "El programa juega con negras   Ctrl+B"
-
-#~ msgid "Edit Game         Ctrl+E"
-#~ msgstr "Editar partida   Ctrl+E"
-
-#~ msgid "Edit Position      Ctrl+Shift+E"
-#~ msgstr "Editar posición   Ctrl+Mayús+E"
-
-#~ msgid "Pause               Pause"
-#~ msgstr "Pausa   Pausa"
-
-#~ msgid "Accept             F3"
-#~ msgstr "Acepto   F3"
-
-#~ msgid "Decline            F4"
-#~ msgstr "Rehuso   F4"
-
-#~ msgid "Rematch           F12"
-#~ msgstr "Pido desquite   F12"
-
-#~ msgid "Draw                F6"
-#~ msgstr "Tablas   F6"
-
-#~ msgid "Adjourn            F7"
-#~ msgstr "Aplazamiento   F7"
-
-#~ msgid "Abort                F8"
-#~ msgstr "Anulación   F8"
-
-#~ msgid "Resign              F9"
-#~ msgstr "Me rindo   F9"
-
-#~ msgid "Move Now     Ctrl+M"
-#~ msgstr "Forzar jugada   Ctrl+M"
-
-#~ msgid "Always Queen        Ctrl+Shift+Q"
-#~ msgstr "Siempre dama                Ctrl+Mayús+Q"
-
-#~ msgid "Animate Moving      Ctrl+Shift+A"
-#~ msgstr "Animar movimiento         Ctrl+Mayús+A"
-
-#~ msgid "Auto Flag               Ctrl+Shift+F"
-#~ msgstr "Bandera automática       Ctrl+Mayús+F"
-
-#~ msgid "Ponder Next Move  Ctrl+Shift+P"
-#~ msgstr "Prever próx.jugada      Ctrl+Mayús+P"
-
-#~ msgid "Hide Thinking        Ctrl+Shift+H"
-#~ msgstr "Ocultar cogitación      Ctrl+Mayús+H"
-
-#~ msgid "Test Legality          Ctrl+Shift+L"
-#~ msgstr "Checar legalidad         Ctrl+Mayús+L"
-
-#~ msgid "Drop"
-#~ msgstr "Soltar"
-
-#, fuzzy
-#~ msgid "could not open: "
-#~ msgstr "No se pudo analizar la jugada"
+#~ msgid "ICS ..."
+#~ msgstr "ICS ..."
 
-#~ msgid "Promotion"
-#~ msgstr "Coronación"
+#~ msgid "Match ..."
+#~ msgstr "Encuentro ..."
 
-#~ msgid "ok"
-#~ msgstr "Aceptar"
+#~ msgid "%s: Can't access XPM directory %s\n"
+#~ msgstr "%s: No se puede acceder a la carpeta XPM %s\n"
 
-#~ msgid "Highlight Dragging (Show Move Targets)"
-#~ msgstr "Iluminar arrastre"
+#~ msgid "Available `%s' sizes:\n"
+#~ msgstr "Disponibles `%s' tamaños:\n"
 
-#~ msgid "White "
-#~ msgstr "Blancas "
+#~ msgid "Error: No `%s' files!\n"
+#~ msgstr "¡Error: no hay ficheros `%s'!\n"
 
-#~ msgid "Black "
-#~ msgstr "Negras "
+#~ 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 ""
+#~ "ATENCIÓN: No se ha encontrado estructura DIR en este sistema --\n"
+#~ "          No se puede asignar tamaño automáticamente a las piezas XPM/"
+#~ "XIM.\n"
+#~ "   Por favor, informe de este error a %s.\n"
+#~ "   Incluya en su mensaje el tipo de sistema y de sistema operativo.\n"
 
-#~ msgid "Close"
-#~ msgstr "Cerrar"
+#~ msgid "Error %d loading icon image\n"
+#~ msgstr "Error %d cargando imagen de icono\n"
 
-#~ msgid "sec/move"
-#~ msgstr "segundos por jugada"
+#~ msgid "cancel"
+#~ msgstr "Cancelar"
index 29b7520..d6243dd 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-01-05 12:51-0800\n"
+"POT-Creation-Date: 2014-01-19 22:19-0800\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,566 +18,589 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: args.h:820
+#: args.h:833
 #, c-format
 msgid "%s in settings file\n"
 msgstr ""
 
-#: args.h:830
+#: args.h:867
 #, c-format
 msgid "Bad integer value %s"
 msgstr ""
 
-#: args.h:923 args.h:1170
+#: args.h:968 args.h:1229
 #, c-format
 msgid "Unrecognized argument %s"
 msgstr ""
 
-#: args.h:954
+#: args.h:999
 #, c-format
 msgid "No value provided for argument %s"
 msgstr ""
 
-#: args.h:1014
+#: args.h:1059
 #, c-format
 msgid "Incomplete \\ escape in value for %s"
 msgstr ""
 
-#: args.h:1125
+#: args.h:1170
 #, c-format
 msgid "Failed to open indirection file %s"
 msgstr ""
 
-#: args.h:1142
+#: args.h:1187
 #, c-format
 msgid "Unrecognized boolean argument value %s"
 msgstr ""
 
 #. 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:744
+#: backend.c:800
 msgid "first"
 msgstr ""
 
 #. 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:747
+#: backend.c:803
 msgid "second"
 msgstr ""
 
-#: backend.c:827
+#: backend.c:885
 #, c-format
 msgid "protocol version %d not supported"
 msgstr "Versione %d del protocollo non supportata"
 
-#: backend.c:933
+#: backend.c:991
 msgid "You did not specify the engine executable"
 msgstr ""
 
-#: backend.c:989
+#: backend.c:1049
 #, c-format
 msgid "bad timeControl option %s"
 msgstr "Opzione timeControl non corretta: %s"
 
-#: backend.c:1004
+#: backend.c:1064
 #, c-format
 msgid "bad searchTime option %s"
 msgstr "Opzione searchTime non corretta: %s"
 
-#: backend.c:1110
+#: backend.c:1170
 #, c-format
 msgid "Variant %s supported only in ICS mode"
 msgstr "La variante %s è supportata solo in modalità ICS"
 
-#: backend.c:1128
+#: backend.c:1188
 #, c-format
 msgid "Unknown variant name %s"
 msgstr "Nome di variante sconosciuto: %s"
 
-#: backend.c:1375
+#: backend.c:1439
 msgid "Starting chess program"
 msgstr "Avvio del motore di gioco"
 
-#: backend.c:1398
+#: backend.c:1462
 msgid "Bad game file"
 msgstr "File partita non riconosciuto"
 
-#: backend.c:1405
+#: backend.c:1469
 msgid "Bad position file"
 msgstr "File posizione non riconosciuto"
 
-#: backend.c:1419
+#: backend.c:1483
 msgid "Pick new game"
 msgstr ""
 
-#: backend.c:1488
+#: backend.c:1552
 msgid ""
-"You restarted an already completed tourney\n"
-"One more cycle will now be added to it\n"
-"Games commence in 10 sec"
+"You restarted an already completed tourney.\n"
+"One more cycle will now be added to it.\n"
+"Games commence in 10 sec."
 msgstr ""
 
-#: backend.c:1495
+#: backend.c:1559
 #, c-format
 msgid "All games in tourney '%s' are already played or playing"
 msgstr ""
 
-#: backend.c:1502
+#: backend.c:1566
 msgid "Can't have a match with no chess programs"
 msgstr "Impossibile avviare un match senza specificare alcun motore di gioco"
 
-#: backend.c:1539
+#: backend.c:1620
 #, c-format
 msgid "Could not open comm port %s"
 msgstr "Apertura della porta comm %s fallita"
 
-#: backend.c:1542
+#: backend.c:1623
 #, c-format
 msgid "Could not connect to host %s, port %s"
 msgstr "Connessione all'host %s, porta %s fallita"
 
-#: backend.c:1598
+#: backend.c:1679
 #, c-format
 msgid "Unknown initialMode %s"
 msgstr "Valore per initialMode non riconosciuto: %s"
 
-#: backend.c:1624
+#: backend.c:1705
 msgid "AnalyzeFile mode requires a game file"
 msgstr "La modalità 'Analizza file' richiede un file partita"
 
-#: backend.c:1651
+#: backend.c:1732
 msgid "Analysis mode requires a chess engine"
 msgstr "La modalità Analisi richiede un motore di gioco"
 
-#: backend.c:1655
+#: backend.c:1736
 msgid "Analysis mode does not work with ICS mode"
 msgstr "La funzione di Analisi non è disponibile in modalità ICS"
 
-#: backend.c:1666
+#: backend.c:1747
 msgid "MachineWhite mode requires a chess engine"
 msgstr "La modalità 'Bianco al motore di gioco' richiede almeno un motore"
 
-#: backend.c:1671
+#: backend.c:1752
 msgid "MachineWhite mode does not work with ICS mode"
 msgstr ""
 "La funzione 'Bianco al motore di gioco' non è disponibile in modalità ICS"
 
-#: backend.c:1678
+#: backend.c:1759
 msgid "MachineBlack mode requires a chess engine"
 msgstr "La modalità 'Nero al motore di gioco' richiede almeno un motore"
 
-#: backend.c:1683
+#: backend.c:1764
 msgid "MachineBlack mode does not work with ICS mode"
 msgstr ""
 "La funzione 'Nero al motore di gioco' non è disponibile in modalità ICS"
 
-#: backend.c:1690
+#: backend.c:1771
 msgid "TwoMachines mode requires a chess engine"
 msgstr ""
 "La modalità 'Motore di gioco 1 vs 2' richiede almeno un motore di gioco"
 
-#: backend.c:1695
+#: backend.c:1776
 msgid "TwoMachines mode does not work with ICS mode"
 msgstr "La funzione 'Motore di gioco 1 vs 2' non è disponibile in modalità ICS"
 
-#: backend.c:1706
+#: backend.c:1787
 msgid "Training mode requires a game file"
 msgstr "La modalità Allenamento richiede un file partita"
 
-#: backend.c:1869 backend.c:1924 backend.c:1947 backend.c:2346
+#: backend.c:1950 backend.c:2005 backend.c:2028 backend.c:2430
 msgid "Error writing to ICS"
 msgstr "Errore in scrittura sull'ICS"
 
-#: backend.c:1884
+#: backend.c:1965
 msgid "Error reading from keyboard"
 msgstr "Errore in lettura da tastiera"
 
-#: backend.c:1887
+#: backend.c:1968
 msgid "Got end of file from keyboard"
 msgstr "Ricevuto carattere di Fine file (EOF) dalla tastiera"
 
-#: backend.c:2192
+#: backend.c:2276
 #, c-format
 msgid "Unknown wild type %d"
 msgstr ""
 
-#: backend.c:2263 usystem.c:329
+#: backend.c:2347 usystem.c:329
 msgid "Error writing to display"
 msgstr "Errore in scrittura sul display"
 
-#: backend.c:3019
+#. TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers
+#: backend.c:3105
 #, c-format
 msgid "your opponent kibitzes: %s"
 msgstr ""
 
-#: backend.c:3548
+#: backend.c:3634
 msgid "Error gathering move list: two headers"
 msgstr "Errore nella lettura della lista mosse: sono presenti due intestazioni"
 
-#: backend.c:3595
+#: backend.c:3681
 msgid "Error gathering move list: nested"
 msgstr "Errore nella lettura della lista mosse: mosse annidate"
 
-#: backend.c:3699 backend.c:4117 backend.c:4321 backend.c:4880 backend.c:4884
-#: backend.c:6900 backend.c:12101 backend.c:13816 backend.c:13893
-#: backend.c:13939 backend.c:13945 backend.c:13950 backend.c:13955
+#: backend.c:3785 backend.c:4203 backend.c:4407 backend.c:4966 backend.c:4970
+#: backend.c:7073 backend.c:12577 backend.c:14306 backend.c:14383
+#: backend.c:14429 backend.c:14435 backend.c:14440 backend.c:14445
 msgid "vs."
 msgstr ""
 
-#: backend.c:3827
+#: backend.c:3913
 msgid "Illegal move (rejected by ICS)"
 msgstr ""
 
-#: backend.c:4165
+#: backend.c:4251
 msgid "Connection closed by ICS"
 msgstr "Connessione chiusa dal'ICS"
 
-#: backend.c:4167
+#: backend.c:4253
 msgid "Error reading from ICS"
 msgstr "Errore in lettura dall'ICS"
 
-#: backend.c:4244
+#: backend.c:4330
 #, c-format
 msgid ""
 "Failed to parse board string:\n"
 "\"%s\""
 msgstr ""
 
-#: backend.c:4253 backend.c:9756
+#: backend.c:4339 backend.c:10203
 msgid "Game too long; increase MAX_MOVES and recompile"
 msgstr ""
 "Partita troppo lunga; incrementare il valore di MAX_MOVES e ricompilare"
 
-#: backend.c:4372
+#: backend.c:4458
 msgid "Error gathering move list: extra board"
 msgstr "Errore nela lettura della lista mosse: è presente una posizione in più"
 
-#: backend.c:4804 backend.c:4826
+#: backend.c:4890 backend.c:4912
 #, c-format
 msgid "Couldn't parse move \"%s\" from ICS"
 msgstr "Impossibile interpretare la mossa dall'ICS: \"%s\""
 
-#: backend.c:5063
+#: backend.c:5161
 #, c-format
 msgid "say Internal error; bad moveType %d (%d,%d-%d,%d)"
 msgstr "say Errore interno; moveType malformato %d (%d,%d-%d,%d)"
 
-#: backend.c:5133
+#: backend.c:5232
 msgid "You cannot do this while you are playing or observing"
 msgstr ""
 
-#: backend.c:6029
+#: backend.c:6174
 msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!"
 msgstr ""
 
-#: backend.c:6491
+#: backend.c:6664
 msgid "You are playing Black"
 msgstr "Stai giocando con il Nero"
 
-#: backend.c:6500 backend.c:6527
+#: backend.c:6673 backend.c:6700
 msgid "You are playing White"
 msgstr "Stai giocando con il Bianco"
 
-#: backend.c:6509 backend.c:6535 backend.c:6655 backend.c:6680 backend.c:6696
-#: backend.c:14592
+#: backend.c:6682 backend.c:6708 backend.c:6828 backend.c:6853 backend.c:6869
+#: backend.c:15113
 msgid "It is White's turn"
 msgstr "Il tratto è al Bianco"
 
-#: backend.c:6513 backend.c:6539 backend.c:6663 backend.c:6686 backend.c:6717
-#: backend.c:14584
+#: backend.c:6686 backend.c:6712 backend.c:6836 backend.c:6859 backend.c:6890
+#: backend.c:15105
 msgid "It is Black's turn"
 msgstr "Il tratto è al Nero"
 
-#: backend.c:6552
+#: backend.c:6725
 msgid "Displayed position is not current"
 msgstr "La posizione mostrata non è quella corrente"
 
-#: backend.c:6790
+#: backend.c:6963
 msgid "Illegal move"
 msgstr "Mossa illegale"
 
-#: backend.c:6857
+#: backend.c:7030
 msgid "End of game"
 msgstr "Termine della partita"
 
-#: backend.c:6860
+#: backend.c:7033
 msgid "Incorrect move"
 msgstr "Mossa non corretta"
 
-#: backend.c:7169 backend.c:7296
+#: backend.c:7423 backend.c:7569
 msgid "Pull pawn backwards to under-promote"
 msgstr ""
 
-#: backend.c:7527
+#: backend.c:7532
+msgid "only marked squares are legal"
+msgstr ""
+
+#: backend.c:7820
 msgid "Swiss tourney finished"
 msgstr ""
 
-#: backend.c:8103
+#: backend.c:8336
+msgid "could not load EGBB library"
+msgstr ""
+
+#: backend.c:8339
+msgid "wrong EGBB version"
+msgstr ""
+
+#: backend.c:8452
 msgid "Invalid pairing from pairing engine"
 msgstr ""
 
-#: backend.c:8236
+#: backend.c:8603
 #, c-format
 msgid "Illegal move \"%s\" from %s machine"
 msgstr "Mossa illegale \"%s\" dal %s motore di gioco"
 
-#: backend.c:8457
+#: backend.c:8849
 msgid "Bad FEN received from engine"
 msgstr ""
 
-#: backend.c:8601 backend.c:13681 backend.c:13746
+#: backend.c:8950
+msgid "Engine did not send setup for non-standard variant"
+msgstr ""
+
+#: backend.c:9023 backend.c:14168 backend.c:14236
 #, c-format
 msgid "%s does not support analysis"
 msgstr "%s non supporta l'analisi"
 
-#: backend.c:8667
+#: backend.c:9089
 #, c-format
 msgid "Illegal move \"%s\" (rejected by %s chess program)"
 msgstr "Mossa illegale \"%s\" (rifiutata dal %s motore di gioco)"
 
-#: backend.c:8694
+#: backend.c:9116
 #, c-format
 msgid "Failed to start %s chess program %s on %s: %s\n"
 msgstr "Avvio del %s motore di gioco %s su %s fallito: %s\n"
 
-#: backend.c:8715
+#: backend.c:9137
 #, c-format
 msgid "Hint: %s"
 msgstr "Suggerimento: %s"
 
-#: backend.c:8720
+#: backend.c:9142
 #, c-format
 msgid ""
 "Illegal hint move \"%s\"\n"
 "from %s chess program"
 msgstr ""
 
-#: backend.c:8895
+#: backend.c:9317
 msgid "Machine accepts your draw offer"
 msgstr "Il motore di gioco accetta la tua offerta di patta"
 
-#: backend.c:8898
+#: backend.c:9320
 msgid ""
-"Machine offers a draw\n"
-"Select Action / Draw to agree"
+"Machine offers a draw.\n"
+"Select Action / Draw to accept."
 msgstr ""
 
-#: backend.c:8977
+#. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone
+#: backend.c:9402
 msgid "failed writing PV"
 msgstr ""
 
-#: backend.c:9275
+#: backend.c:9701
 #, c-format
 msgid "Ambiguous move in ICS output: \"%s\""
 msgstr "Mossa ambigua nell'output dell'ICS: \"%s\""
 
-#: backend.c:9285
+#: backend.c:9711
 #, c-format
 msgid "Illegal move in ICS output: \"%s\""
 msgstr "Mossa illegale nell'output dell'ICS: \"%s\""
 
-#: backend.c:9296
+#: backend.c:9722
 msgid "Gap in move list"
 msgstr "Mosse mancanti nella lista mosse"
 
-#: backend.c:9917 dialogs.c:460
+#: backend.c:10357
 #, c-format
 msgid "Variant %s not supported by %s"
 msgstr "La variante %s non è supportata da %s"
 
-#: backend.c:10038
+#: backend.c:10364
+#, c-format
+msgid ", but %s is"
+msgstr ""
+
+#: backend.c:10506
 #, c-format
 msgid "Startup failure on '%s'"
 msgstr "Avvio di '%s' fallito"
 
-#: backend.c:10069
+#: backend.c:10537
 msgid "Waiting for first chess program"
 msgstr "In attesa del primo motore di gioco"
 
-#: backend.c:10074 backend.c:13964
+#: backend.c:10542 backend.c:14454
 msgid "Waiting for second chess program"
 msgstr "In attesa del secondo motore di gioco"
 
-#: backend.c:10123
+#: backend.c:10591
 msgid "Could not write on tourney file"
 msgstr ""
 
-#: backend.c:10197
+#: backend.c:10665
 msgid ""
 "You cannot replace an engine while it is engaged!\n"
 "Terminate its game first."
 msgstr ""
 
-#: backend.c:10211
+#: backend.c:10679
 msgid "No engine with the name you gave is installed"
 msgstr ""
 
-#: backend.c:10213
+#: backend.c:10681
 msgid ""
 "First change an engine by editing the participants list\n"
 "of the Tournament Options dialog"
 msgstr ""
 
-#: backend.c:10214
+#: backend.c:10682
 msgid "You can only change one engine at the time"
 msgstr ""
 
-#: backend.c:10229 backend.c:10376
+#: backend.c:10697 backend.c:10845
 #, c-format
 msgid "No engine %s is installed"
 msgstr ""
 
-#: backend.c:10249
+#: backend.c:10717
 msgid ""
 "You must supply a tournament file,\n"
 "for storing the tourney progress"
 msgstr ""
 
-#: backend.c:10259
+#: backend.c:10727
 msgid "Not enough participants"
 msgstr ""
 
-#: backend.c:10460
+#: backend.c:10929
 #, fuzzy
 msgid "Bad tournament file"
 msgstr "File partita non riconosciuto"
 
-#: backend.c:10472
+#: backend.c:10941
 #, fuzzy
 msgid "Waiting for other game(s)"
 msgstr "In attesa del primo motore di gioco"
 
-#: backend.c:10485
+#: backend.c:10954
 msgid "No pairing engine specified"
 msgstr ""
 
-#: backend.c:10962
+#: backend.c:11430
 #, c-format
 msgid "Match %s vs. %s: final score %d-%d-%d"
 msgstr "Match %s vs %s: punteggio finale %d-%d-%d"
 
-#: backend.c:11424 backend.c:11455
+#: backend.c:11897 backend.c:11928
 #, c-format
 msgid "Illegal move: %d.%s%s"
 msgstr "Mossa illegale: %d.%s%s"
 
-#: backend.c:11444
+#: backend.c:11917
 #, c-format
 msgid "Ambiguous move: %d.%s%s"
 msgstr "Mossa ambigua: %d.%s%s"
 
-#: backend.c:11497 backend.c:12524 backend.c:12717 backend.c:13078
+#: backend.c:11971 backend.c:13010 backend.c:13203 backend.c:13567
 #, c-format
 msgid "Can't open \"%s\""
 msgstr "Impossibile aprire \"%s\""
 
-#: backend.c:11509 menus.c:116
+#: backend.c:11983 menus.c:116
 msgid "Cannot build game list"
 msgstr "Impossibile costruire lista delle partite"
 
-#: backend.c:11594
+#: backend.c:12068
 msgid "No more games in this message"
 msgstr "In questo messaggio non sono presenti altre partite"
 
-#: backend.c:11634
+#: backend.c:12108
 msgid "No game has been loaded yet"
 msgstr "Non è ancora stata caricata nessuna partita"
 
-#: backend.c:11638 backend.c:12505 ngamelist.c:129
+#: backend.c:12112 backend.c:12991 ngamelist.c:129
 msgid "Can't back up any further"
 msgstr "Impossibile tornare più indietro"
 
-#: backend.c:12077
+#: backend.c:12553
 msgid "Game number out of range"
 msgstr "Indice superiore al numero di partite"
 
-#: backend.c:12088
+#: backend.c:12564
 msgid "Can't seek on game file"
 msgstr "Impossibile effettuare la ricerca nel file di partita"
 
-#: backend.c:12146
+#: backend.c:12622
 msgid "Game not found in file"
 msgstr "Partita non trovata nel file"
 
-#: backend.c:12274 backend.c:12601
+#: backend.c:12751 backend.c:13087
 msgid "Bad FEN position in file"
 msgstr "Stringa FEN di posizione scorretta nel file"
 
-#: backend.c:12426
+#: backend.c:12903
 msgid "No moves in game"
 msgstr "Partita senza mosse"
 
-#: backend.c:12501
+#: backend.c:12987
 msgid "No position has been loaded yet"
 msgstr "Non è ancora stata caricata nessuna posizione"
 
-#: backend.c:12562 backend.c:12573
+#: backend.c:13048 backend.c:13059
 msgid "Can't seek on position file"
 msgstr "Impossibile effettuare la ricerca nel file di posizione"
 
-#: backend.c:12580 backend.c:12592
+#: backend.c:13066 backend.c:13078
 msgid "Position not found in file"
 msgstr "Posizione non trovata nel file"
 
-#: backend.c:12632
+#: backend.c:13118
 msgid "Black to play"
 msgstr "Il tratto è al Nero"
 
-#: backend.c:12635
+#: backend.c:13121
 msgid "White to play"
 msgstr "Il tratto è al Bianco"
 
-#: backend.c:12722 backend.c:13083
+#: backend.c:13208 backend.c:13572
 #, fuzzy
 msgid "Waiting for access to save file"
 msgstr "In attesa del secondo motore di gioco"
 
-#: backend.c:12724
+#: backend.c:13210
 msgid "Saving game"
 msgstr ""
 
-#: backend.c:12725
+#: backend.c:13211
 msgid "Bad Seek"
 msgstr ""
 
-#: backend.c:13085
+#: backend.c:13574
 #, fuzzy
 msgid "Saving position"
 msgstr "File posizione non riconosciuto"
 
-#: backend.c:13211
+#: backend.c:13700
 msgid ""
 "You have edited the game history.\n"
 "Use Reload Same Game and make your move again."
 msgstr ""
 
-#: backend.c:13216
+#: backend.c:13705
 msgid ""
 "You have entered too many moves.\n"
 "Back up to the correct position and try again."
 msgstr ""
 
-#: backend.c:13221
+#: backend.c:13710
 msgid ""
 "Displayed position is not current.\n"
 "Step forward to the correct position and try again."
 msgstr ""
 
-#: backend.c:13268
+#: backend.c:13757
 msgid "You have not made a move yet"
 msgstr "Non hai ancora fatto alcuna mossa"
 
-#: backend.c:13289
+#: backend.c:13778
 msgid ""
 "The cmail message is not loaded.\n"
 "Use Reload CMail Message and make your move again."
 msgstr ""
 
-#: backend.c:13294
+#: backend.c:13783
 msgid "No unfinished games"
 msgstr "Non è presente nessuna partita non terminata"
 
-#: backend.c:13300
+#: backend.c:13789
 #, c-format
 msgid ""
 "You have already mailed a move.\n"
@@ -587,210 +610,212 @@ msgid ""
 "on the command line."
 msgstr ""
 
-#: backend.c:13315
+#: backend.c:13804
 msgid "Failed to invoke cmail"
 msgstr "Impossibile aprire l'applicazione cmail"
 
-#: backend.c:13377
+#: backend.c:13866
 #, c-format
 msgid "Waiting for reply from opponent\n"
 msgstr "In attesa di risposta dall'avversario\n"
 
-#: backend.c:13399
+#: backend.c:13888
 #, c-format
 msgid "Still need to make move for game\n"
 msgstr "Occorre ancora eseguire la mossa per la partita\n"
 
-#: backend.c:13403
+#: backend.c:13892
 #, c-format
 msgid "Still need to make moves for both games\n"
 msgstr "Occorre ancora eseguire mosse per entrambe le partite\n"
 
-#: backend.c:13407
+#: backend.c:13896
 #, c-format
 msgid "Still need to make moves for all %d games\n"
 msgstr "Occorre ancora eseguire mosse per tutte le %d partite\n"
 
-#: backend.c:13414
+#: backend.c:13903
 #, c-format
 msgid "Still need to make a move for game %s\n"
 msgstr "Occorre ancora eseguire una mossa per la partita %s\n"
 
-#: backend.c:13420
+#: backend.c:13909
 #, c-format
 msgid "No unfinished games\n"
 msgstr "Non è presente nessuna partita non terminata\n"
 
-#: backend.c:13422
+#: backend.c:13911
 #, c-format
 msgid "Ready to send mail\n"
 msgstr "Pronto all'invio della posta\n"
 
-#: backend.c:13427
+#: backend.c:13916
 #, c-format
 msgid "Still need to make moves for games %s\n"
 msgstr "Occorre ancora eseguire mosse per le partite %s\n"
 
-#: backend.c:13631
+#: backend.c:14118
 msgid "Edit comment"
 msgstr "Modifica commento"
 
-#: backend.c:13633
+#: backend.c:14120
 #, c-format
 msgid "Edit comment on %d.%s%s"
 msgstr "Modifica commento a %d.%s%s"
 
-#: backend.c:13688
+#: backend.c:14175
 #, c-format
 msgid "You are not observing a game"
 msgstr ""
 
-#: backend.c:13796
+#: backend.c:14286
 msgid "It is not White's turn"
 msgstr "Il tratto non è al Bianco"
 
-#: backend.c:13877
+#: backend.c:14367
 msgid "It is not Black's turn"
 msgstr "Il tratto non è al Nero"
 
-#: backend.c:13985
+#: backend.c:14475
 #, c-format
 msgid "Starting %s chess program"
 msgstr ""
 
-#: backend.c:14013 backend.c:15127
+#: backend.c:14503 backend.c:15648
+#, fuzzy
 msgid ""
 "Wait until your turn,\n"
-"or select Move Now"
-msgstr ""
+"or select 'Move Now'."
+msgstr "Attendi il tuo turno"
 
-#: backend.c:14147
+#: backend.c:14638
 msgid "Training mode off"
 msgstr "Modalità Allenamento disattivata"
 
-#: backend.c:14155
+#: backend.c:14646
 msgid "Training mode on"
 msgstr "Modalità Allenamento attivata"
 
-#: backend.c:14158
+#: backend.c:14649
 msgid "Already at end of game"
 msgstr "Già alla fine della partita"
 
-#: backend.c:14238
+#: backend.c:14729
 msgid "Warning: You are still playing a game"
 msgstr "Avviso: Stai ancora giocando una partita"
 
-#: backend.c:14241
+#: backend.c:14732
 msgid "Warning: You are still observing a game"
 msgstr "Avviso: Stai ancora osservando una partita"
 
-#: backend.c:14244
+#: backend.c:14735
 msgid "Warning: You are still examining a game"
 msgstr "Avviso: Stai ancora esaminando una partita"
 
-#: backend.c:14311
+#: backend.c:14802
 msgid "Click clock to clear board"
 msgstr ""
 
-#: backend.c:14321
+#: backend.c:14812
 msgid "Close ICS engine analyze..."
 msgstr ""
 
-#: backend.c:14609
+#: backend.c:15130
 msgid "That square is occupied"
 msgstr "La casa è già occupata"
 
-#: backend.c:14633 backend.c:14659
+#: backend.c:15154 backend.c:15180
 msgid "There is no pending offer on this move"
 msgstr "Non vi è alcuna offerta pendente a questa mossa"
 
-#: backend.c:14695 backend.c:14706
+#: backend.c:15216 backend.c:15227
 msgid "Your opponent is not out of time"
 msgstr "Il tuo avversario non ha ancora esaurito il proprio tempo"
 
-#: backend.c:14772
+#: backend.c:15293
 msgid "You must make your move before offering a draw"
 msgstr "Devi eseguire la tua mossa prima di offrire la patta"
 
-#: backend.c:15109
+#: backend.c:15630
 msgid "You are not examining a game"
 msgstr "Non stai esaminando alcuna partita"
 
-#: backend.c:15113
+#: backend.c:15634
 msgid "You can't revert while pausing"
 msgstr "Non è possibile ripristinare mentre la pausa è attiva"
 
-#: backend.c:15167 backend.c:15174
+#: backend.c:15688 backend.c:15695
 msgid "It is your turn"
 msgstr "E' il tuo turno"
 
-#: backend.c:15225 backend.c:15232 backend.c:15285 backend.c:15292
-msgid "Wait until your turn"
+#: backend.c:15746 backend.c:15753 backend.c:15806 backend.c:15813
+#, fuzzy
+msgid "Wait until your turn."
 msgstr "Attendi il tuo turno"
 
-#: backend.c:15237
+#: backend.c:15758
 msgid "No hint available"
 msgstr "Nessun suggerimento disponibile"
 
-#: backend.c:15253 ngamelist.c:355
+#: backend.c:15774 ngamelist.c:355
 #, fuzzy
 msgid "Game list not loaded or empty"
 msgstr "Non è ancora stata caricata nessuna partita"
 
-#: backend.c:15260
+#: backend.c:15781
 msgid "Book file exists! Try again for overwrite."
 msgstr ""
 
-#: backend.c:15738
+#: backend.c:16259
 #, c-format
 msgid "Error writing to %s chess program"
 msgstr "Errore in scrittura sul %s motore di gioco"
 
-#: backend.c:15741 backend.c:15772
+#: backend.c:16262 backend.c:16293
 #, c-format
 msgid "%s program exits in draw position (%s)"
 msgstr ""
 
-#: backend.c:15767
+#: backend.c:16288
 #, c-format
 msgid "Error: %s chess program (%s) exited unexpectedly"
 msgstr "Errore: il %s motore di gioco (%s) è terminato in maniera inaspettata"
 
-#: backend.c:15785
+#: backend.c:16306
 #, c-format
 msgid "Error reading from %s chess program (%s)"
 msgstr "Errore in lettura dal %s motore di gioco (%s)"
 
-#: backend.c:16187
+#: backend.c:16730
 #, c-format
 msgid "%s engine has too many options\n"
 msgstr ""
 
-#: backend.c:16343
+#: backend.c:16886
 msgid "Displayed move is not current"
 msgstr "La mossa mostrata non è quella corrente"
 
-#: backend.c:16352
+#: backend.c:16895
 msgid "Could not parse move"
 msgstr "Impossibile leggere mossa"
 
-#: backend.c:16477 backend.c:16499
+#: backend.c:17020 backend.c:17042
 msgid "Both flags fell"
 msgstr "Tempo esaurito per entrambi"
 
-#: backend.c:16479
+#: backend.c:17022
 msgid "White's flag fell"
 msgstr "Tempo esaurito per il Bianco"
 
-#: backend.c:16501
+#: backend.c:17044
 msgid "Black's flag fell"
 msgstr ""
 
-#: backend.c:16632
+#: backend.c:17175
 msgid "Clock adjustment not allowed in auto-flag mode"
 msgstr ""
 
-#: backend.c:17467
+#: backend.c:18025
 msgid "Bad FEN position in clipboard"
 msgstr "Stringa FEN di posizione scorretta negli Appunti"
 
@@ -811,1377 +836,1437 @@ msgstr ""
 msgid "Could not create book"
 msgstr "Impossibile leggere mossa"
 
-#: dialogs.c:259
+#: dialogs.c:283
 #, fuzzy
 msgid "Tournament file:          "
 msgstr "Aggiorna   F7"
 
-#: dialogs.c:260
-msgid "Sync after round"
+#: dialogs.c:284
+msgid "For concurrent playing of tourney with multiple XBoards:"
 msgstr ""
 
-#: dialogs.c:261
-msgid "    (for concurrent playing of a single"
+#: dialogs.c:285
+msgid "Sync after round"
 msgstr ""
 
-#: dialogs.c:262
+#: dialogs.c:286
 msgid "Sync after cycle"
 msgstr ""
 
-#: dialogs.c:263
-msgid "      tourney with multiple XBoards)"
-msgstr ""
-
-#: dialogs.c:264
+#: dialogs.c:287
 msgid "Tourney participants:"
 msgstr ""
 
-#: dialogs.c:265
+#: dialogs.c:288
 #, fuzzy
 msgid "Select Engine:"
 msgstr "Motore"
 
-#: dialogs.c:273
+#: dialogs.c:296
 msgid "Tourney type (0 = round-robin, 1 = gauntlet):"
 msgstr ""
 
-#: dialogs.c:274
+#: dialogs.c:297
 msgid "Number of tourney cycles (or Swiss rounds):"
 msgstr ""
 
-#: dialogs.c:275
+#: dialogs.c:298
 #, fuzzy
 msgid "Default Number of Games in Match (or Pairing):"
 msgstr "Partite per match:"
 
-#: dialogs.c:276
+#: dialogs.c:299
 msgid "Pause between Match Games (msec):"
 msgstr ""
 
-#: dialogs.c:277
+#: dialogs.c:300
 #, fuzzy
 msgid "Save Tourney Games on:"
 msgstr "Impostazioni salvataggio partita"
 
-#: dialogs.c:278
+#: dialogs.c:301
 msgid "Game File with Opening Lines:"
 msgstr ""
 
-#: dialogs.c:279
+#: dialogs.c:302
 msgid "Game Number (-1 or -2 = Auto-Increment):"
 msgstr ""
 
-#: dialogs.c:280
+#: dialogs.c:303
 msgid "File with Start Positions:"
 msgstr ""
 
-#: dialogs.c:281
+#: dialogs.c:304
 msgid "Position Number (-1 or -2 = Auto-Increment):"
 msgstr ""
 
-#: dialogs.c:282
+#: dialogs.c:305
 msgid "Rewind Index after this many Games (0 = never):"
 msgstr ""
 
-#: dialogs.c:283
+#: dialogs.c:306
 msgid "Disable own engine books by default"
 msgstr ""
 
-#: dialogs.c:284
+#: dialogs.c:307 dialogs.c:1565
+msgid "Time Control"
+msgstr ""
+
+#: dialogs.c:308
+#, fuzzy
+msgid "Common Engine"
+msgstr "Motori di gioco...   Alt+Shift+U"
+
+#: dialogs.c:309 dialogs.c:441
+msgid "General Options"
+msgstr "Impostazioni generali"
+
+#: dialogs.c:310
+msgid "Continue Later"
+msgstr ""
+
+#: dialogs.c:311
 #, fuzzy
 msgid "Replace Engine"
 msgstr "Motore"
 
-#: dialogs.c:285
+#: dialogs.c:312
 #, fuzzy
 msgid "Upgrade Engine"
 msgstr "Motore"
 
-#: dialogs.c:286
+#: dialogs.c:313
 msgid "Clone Tourney"
 msgstr ""
 
-#: dialogs.c:316
+#: dialogs.c:351
 msgid "First you must specify an existing tourney file to clone"
 msgstr ""
 
-#: dialogs.c:332 dialogs.c:1320
+#: dialogs.c:367 dialogs.c:1407
 msgid "# no engines are installed"
 msgstr ""
 
-#: dialogs.c:344
-msgid "Match Options"
+#: dialogs.c:375
+msgid "Internal error: PARTICIPANTS set wrong"
 msgstr ""
 
-#: dialogs.c:363
+#: dialogs.c:383
+#, fuzzy
+msgid "Tournament Options"
+msgstr "Impostazioni suoni"
+
+#: dialogs.c:402
 msgid "Absolute Analysis Scores"
 msgstr ""
 
-#: dialogs.c:364
+#: dialogs.c:403
 msgid "Almost Always Queen (Detour Under-Promote)"
 msgstr ""
 
-#: dialogs.c:365 menus.c:714
+#: dialogs.c:404 menus.c:714
 msgid "Animate Dragging"
 msgstr "Trascinamento animato"
 
-#: dialogs.c:366 menus.c:715
+#: dialogs.c:405 menus.c:715
 msgid "Animate Moving"
 msgstr "Mosse animate"
 
-#: dialogs.c:367 menus.c:716
+#: dialogs.c:406 menus.c:716
 msgid "Auto Flag"
 msgstr "Aggiudica sul tempo"
 
-#: dialogs.c:368 menus.c:717
+#: dialogs.c:407 menus.c:717
 msgid "Auto Flip View"
 msgstr "Ruota vista automaticamente"
 
-#: dialogs.c:369 menus.c:718
+#: dialogs.c:408 menus.c:718
 msgid "Blindfold"
 msgstr "Alla cieca"
 
-#: dialogs.c:370
+#. 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 ""
 
-#: dialogs.c:371
+#: dialogs.c:411
 msgid "Enable Variation Trees"
 msgstr ""
 
-#: dialogs.c:372
+#: dialogs.c:412
+msgid "Headers in Engine Output Window"
+msgstr ""
+
+#: dialogs.c:413
 msgid "Hide Thinking from Human"
 msgstr "Nascondi l'output del motore se gioca contro un uomo"
 
-#: dialogs.c:373 menus.c:723
+#: dialogs.c:414 menus.c:723
 msgid "Highlight Last Move"
 msgstr "Evidenzia l'ultima mossa"
 
-#: dialogs.c:374
+#: dialogs.c:415
 msgid "Highlight with Arrow"
 msgstr "Evidenzia con una freccia"
 
-#: dialogs.c:375 menus.c:726
+#: dialogs.c:416 menus.c:726
 msgid "One-Click Moving"
 msgstr "Muovi con click singolo"
 
-#: dialogs.c:376
+#: dialogs.c:417
 msgid "Periodic Updates (in Analysis Mode)"
 msgstr "Aggiornamenti continui (per Modalità di analisi)"
 
-#: dialogs.c:378
+#: dialogs.c:419
 msgid "Play Move(s) of Clicked PV (Analysis)"
 msgstr ""
 
-#: dialogs.c:379 dialogs.c:514 menus.c:728
+#: dialogs.c:420 dialogs.c:597 menus.c:728
 msgid "Ponder Next Move"
 msgstr "Pensa sul mio tempo"
 
-#: dialogs.c:380
+#: dialogs.c:421
 msgid "Popup Exit Messages"
 msgstr "Chiedi conferma alla chiusura"
 
-#: dialogs.c:381 menus.c:730
+#: dialogs.c:422 menus.c:730
 msgid "Popup Move Errors"
 msgstr "Mostra popup per mosse errate"
 
-#: dialogs.c:382
+#: dialogs.c:423
 #, fuzzy
 msgid "Scores in Move List"
 msgstr "Scarica lista mosse"
 
-#: dialogs.c:383
+#: dialogs.c:424
 msgid "Show Coordinates"
 msgstr "Mostra coordinate"
 
-#: dialogs.c:384
+#: dialogs.c:425
 msgid "Show Target Squares"
 msgstr ""
 
-#: dialogs.c:385
+#: dialogs.c:426
 msgid "Sticky Windows"
 msgstr ""
 
-#: dialogs.c:386 menus.c:733
+#: dialogs.c:427 menus.c:733
 msgid "Test Legality"
 msgstr "Verifica mosse illegali"
 
-#: dialogs.c:387
+#: dialogs.c:428
 msgid "Top-Level Dialogs"
 msgstr ""
 
-#: dialogs.c:388
+#: dialogs.c:429
 msgid "Flash Moves (0 = no flashing):"
 msgstr ""
 
-#: dialogs.c:389
+#: dialogs.c:430
 msgid "Flash Rate (high = fast):"
 msgstr ""
 
-#: dialogs.c:390
+#: dialogs.c:431
 msgid "Animation Speed (high = slow):"
 msgstr ""
 
-#: dialogs.c:391
+#: dialogs.c:432
 #, fuzzy
 msgid "Zoom factor in Evaluation Graph:"
 msgstr "Grafico della valutazione"
 
-#: dialogs.c:400
-msgid "General Options"
-msgstr "Impostazioni generali"
-
-#: dialogs.c:410
-msgid "normal"
+#: dialogs.c:452
+#, fuzzy
+msgid "Normal"
 msgstr "Normale"
 
-#: dialogs.c:411
-msgid "makruk"
+#: dialogs.c:453
+#, fuzzy
+msgid "Makruk"
 msgstr "Makruk"
 
-#: dialogs.c:412
+#: dialogs.c:454
 msgid "FRC"
 msgstr "FRC"
 
-#: dialogs.c:413
-msgid "shatranj"
+#: dialogs.c:455
+msgid "Shatranj"
 msgstr ""
 
-#: dialogs.c:414
-msgid "wild castle"
+#: dialogs.c:456
+msgid "Wild castle"
 msgstr ""
 
-#: dialogs.c:415
-msgid "knightmate"
+#: dialogs.c:457
+#, fuzzy
+msgid "Knightmate"
 msgstr "Knightmate"
 
-#: dialogs.c:416
-msgid "no castle"
+#: dialogs.c:458
+msgid "No castle"
 msgstr ""
 
-#: dialogs.c:417
+#: dialogs.c:459
 #, fuzzy
-msgid "cylinder *"
+msgid "Cylinder *"
 msgstr "Cilindrici"
 
-#: dialogs.c:418
+#: dialogs.c:460
 msgid "3-checks"
 msgstr ""
 
-#: dialogs.c:419
+#: dialogs.c:461
 msgid "berolina *"
 msgstr ""
 
-#: dialogs.c:420
+#: dialogs.c:462
 msgid "atomic"
 msgstr "Atomic"
 
-#: dialogs.c:421
+#: dialogs.c:463
 msgid "two kings"
 msgstr ""
 
-#: dialogs.c:422
+#: dialogs.c:464
+msgid " "
+msgstr ""
+
+#: dialogs.c:465
+msgid "Spartan"
+msgstr ""
+
+#: dialogs.c:466
 msgid "Board size ( -1 = default for selected variant):"
 msgstr ""
 
-#: dialogs.c:423
+#: dialogs.c:467
 msgid "Number of Board Ranks:"
 msgstr ""
 
-#: dialogs.c:424
+#: dialogs.c:468
 msgid "Number of Board Files:"
 msgstr ""
 
-#: dialogs.c:425
+#: dialogs.c:469
 msgid "Holdings Size:"
 msgstr ""
 
-#: dialogs.c:429
-msgid "fairy"
-msgstr "Fairy"
+#: dialogs.c:471
+msgid ""
+"Variants marked with * can only be played\n"
+"with legality testing off."
+msgstr ""
 
-#: dialogs.c:430
+#: dialogs.c:473
+msgid "ASEAN"
+msgstr ""
+
+#: dialogs.c:474
 msgid "Great Shatranj (10x8)"
 msgstr ""
 
-#: dialogs.c:431
+#: dialogs.c:475
 msgid "Seirawan"
 msgstr ""
 
-#: dialogs.c:432
-msgid "falcon (10x8)"
+#: dialogs.c:476
+msgid "Falcon (10x8)"
 msgstr ""
 
-#: dialogs.c:433
+#: dialogs.c:477
 msgid "Superchess"
 msgstr ""
 
-#: dialogs.c:434
+#: dialogs.c:478
 msgid "Capablanca (10x8)"
 msgstr ""
 
-#: dialogs.c:435
-msgid "crazyhouse"
+#: dialogs.c:479
+#, fuzzy
+msgid "Crazyhouse"
 msgstr "Crazyhouse"
 
-#: dialogs.c:436
+#: dialogs.c:480
 msgid "Gothic (10x8)"
 msgstr ""
 
-#: dialogs.c:437
-msgid "bughouse"
+#: dialogs.c:481
+#, fuzzy
+msgid "Bughouse"
 msgstr "Bughouse"
 
-#: dialogs.c:438
-msgid "janus (10x8)"
+#: dialogs.c:482
+msgid "Janus (10x8)"
 msgstr ""
 
-#: dialogs.c:439
-msgid "suicide"
+#: dialogs.c:483
+#, fuzzy
+msgid "Suicide"
 msgstr "Suicide"
 
-#: dialogs.c:440
+#: dialogs.c:484
 msgid "CRC (10x8)"
 msgstr ""
 
-#: dialogs.c:441
+#: dialogs.c:485
 msgid "give-away"
 msgstr ""
 
-#: dialogs.c:442
+#: dialogs.c:486
 msgid "grand (10x10)"
 msgstr ""
 
-#: dialogs.c:443
+#: dialogs.c:487
 msgid "losers"
 msgstr "Losers"
 
-#: dialogs.c:444
+#: dialogs.c:488
 msgid "shogi (9x9)"
 msgstr ""
 
-#: dialogs.c:445
-msgid "Spartan"
-msgstr ""
+#: dialogs.c:489
+msgid "fairy"
+msgstr "Fairy"
 
-#: dialogs.c:446
+#: dialogs.c:490
 msgid "xiangqi (9x10)"
 msgstr ""
 
-#: dialogs.c:447
-msgid " "
+#: dialogs.c:491
+msgid "mighty lion"
 msgstr ""
 
-#: dialogs.c:448
+#: dialogs.c:492
 msgid "courier (12x8)"
 msgstr ""
 
-#: dialogs.c:465
+#: dialogs.c:493
+msgid "chu chess (10x10)"
+msgstr ""
+
+#: dialogs.c:494
+msgid "chu shogi (12x12)"
+msgstr ""
+
+#: dialogs.c:526
 #, c-format
 msgid "Warning: second engine (%s) does not support this!"
 msgstr ""
 "Attenzione: il secondo motore di gioco (%s) non supporta questa azione!"
 
-#: dialogs.c:488
+#: dialogs.c:554
 #, c-format
-msgid "Only bughouse is not available in viewer mode"
+msgid "Only bughouse is not available in viewer mode."
 msgstr ""
 
-#: dialogs.c:489
+#: dialogs.c:555
 #, c-format
 msgid ""
-"All variants not supported by first engine\n"
-"(currently %s) are disabled"
+"All variants not supported by the first engine\n"
+"(currently %s) are disabled."
 msgstr ""
 
-#: dialogs.c:490
+#: dialogs.c:572
 msgid "New Variant"
 msgstr "Varianti di gioco"
 
-#: dialogs.c:515
+#: dialogs.c:598
 msgid "Maximum Number of CPUs per Engine:"
 msgstr "Num max di CPU:"
 
-#: dialogs.c:516
+#: dialogs.c:599
 msgid "Polygot Directory:"
 msgstr ""
 
-#: dialogs.c:517
+#: dialogs.c:600
 msgid "Hash-Table Size (MB):"
 msgstr "Dimensione Hash [MB]:"
 
-#: dialogs.c:518
+#: dialogs.c:601
 msgid "Nalimov EGTB Path:"
 msgstr "Cartella EGTB:"
 
-#: dialogs.c:519
+#: dialogs.c:602
 msgid "EGTB Cache Size (MB):"
 msgstr "Dimensione EGTB [MB]:"
 
-#: dialogs.c:520
+#: dialogs.c:603
 msgid "Use GUI Book"
 msgstr ""
 
-#: dialogs.c:521
+#: dialogs.c:604
 msgid "Opening-Book Filename:"
 msgstr ""
 
-#: dialogs.c:522
+#: dialogs.c:605
 msgid "Book Depth (moves):"
 msgstr "Profondità Libro:"
 
-#: dialogs.c:523
+#: dialogs.c:606
 msgid "Book Variety (0) vs. Strength (100):"
 msgstr "Varianti Libro:"
 
-#: dialogs.c:524
+#: dialogs.c:607
 msgid "Engine #1 Has Own Book"
 msgstr "Libro proprio per motore 1"
 
-#: dialogs.c:525
+#: dialogs.c:608
 msgid "Engine #2 Has Own Book          "
 msgstr ""
 
-#: dialogs.c:534
+#: dialogs.c:617
 msgid "Common Engine Settings"
 msgstr "Impostazioni motori di gioco"
 
-#: dialogs.c:540
+#: dialogs.c:623
 msgid "Detect all Mates"
 msgstr "Individua scacco matto"
 
-#: dialogs.c:541
+#: dialogs.c:624
 msgid "Verify Engine Result Claims"
 msgstr "Verifica gli annunci del motore"
 
-#: dialogs.c:542
+#: dialogs.c:625
 msgid "Draw if Insufficient Mating Material"
 msgstr "Patta per materiale insufficiente"
 
-#: dialogs.c:543
+#: dialogs.c:626
 msgid "Adjudicate Trivial Draws (3-Move Delay)"
 msgstr "Aggiudica patte triviali"
 
-#: dialogs.c:544
+#: dialogs.c:627
 msgid "N-Move Rule:"
 msgstr ""
 
-#: dialogs.c:545
+#: dialogs.c:628
 msgid "N-fold Repeats:"
 msgstr ""
 
-#: dialogs.c:546
+#: dialogs.c:629
 msgid "Draw after N Moves Total:"
 msgstr "Aggiudica patta dopo:"
 
-#: dialogs.c:547
+#: dialogs.c:630
 msgid "Win / Loss Threshold:"
 msgstr "Limite per aggiudicare vinta/persa:"
 
-#: dialogs.c:548
+#: dialogs.c:631
 msgid "Negate Score of Engine #1"
 msgstr "Output motore 1 sempre riferito al Bianco"
 
-#: dialogs.c:549
+#: dialogs.c:632
 msgid "Negate Score of Engine #2"
 msgstr "Output motore 2 sempre riferito al Bianco"
 
-#: dialogs.c:556
+#: dialogs.c:639
 #, fuzzy
 msgid "Adjudicate non-ICS Games"
 msgstr "Aggiudica al Bianco"
 
-#: dialogs.c:569
+#: dialogs.c:652
 msgid "Auto-Kibitz"
 msgstr "Auto Kibitz"
 
-#: dialogs.c:570
+#: dialogs.c:653
 msgid "Auto-Comment"
 msgstr "Commenti automatici"
 
-#: dialogs.c:571
+#: dialogs.c:654
 msgid "Auto-Observe"
 msgstr "Osserva automaticamente"
 
-#: dialogs.c:572
+#: dialogs.c:655
 msgid "Auto-Raise Board"
 msgstr "Porta in primo piano"
 
-#: dialogs.c:573
+#: dialogs.c:656
 msgid "Auto-Create Logon Script"
 msgstr ""
 
-#: dialogs.c:574
+#: dialogs.c:657
 msgid "Background Observe while Playing"
 msgstr "Osserva in bckgnd"
 
-#: dialogs.c:575
+#: dialogs.c:658
 msgid "Dual Board for Background-Observed Game"
 msgstr "Doppia scacchiera"
 
-#: dialogs.c:576
+#: dialogs.c:659
 msgid "Get Move List"
 msgstr "Scarica lista mosse"
 
-#: dialogs.c:577
+#: dialogs.c:660
 msgid "Quiet Play"
 msgstr "Non disturbare durante il gioco"
 
-#: dialogs.c:578
+#: dialogs.c:661
 msgid "Seek Graph"
 msgstr "Grafico delle richieste"
 
-#: dialogs.c:579
+#: dialogs.c:662
 msgid "Auto-Refresh Seek Graph"
 msgstr "Auto aggiorna"
 
-#: dialogs.c:580
+#: dialogs.c:663
 msgid "Auto-InputBox PopUp"
 msgstr ""
 
-#: dialogs.c:581
+#: dialogs.c:664
+#, fuzzy
+msgid "Quit after game"
+msgstr "In attesa del primo motore di gioco"
+
+#: dialogs.c:665
 msgid "Premove"
 msgstr "Premossa"
 
-#: dialogs.c:582
+#: dialogs.c:666
 msgid "Premove for White"
 msgstr ""
 
-#: dialogs.c:583
+#: dialogs.c:667
 msgid "First White Move:"
 msgstr "1° mossa Bianco"
 
-#: dialogs.c:584
+#: dialogs.c:668
 msgid "Premove for Black"
 msgstr ""
 
-#: dialogs.c:585
+#: dialogs.c:669
 msgid "First Black Move:"
 msgstr "1° mossa Nero"
 
-#: dialogs.c:587
+#: dialogs.c:671
 msgid "Alarm"
 msgstr "Allarme"
 
-#: dialogs.c:588
+#: dialogs.c:672
 msgid "Alarm Time (msec):"
 msgstr ""
 
-#: dialogs.c:590
+#: dialogs.c:674
 msgid "Colorize Messages"
 msgstr ""
 
-#: dialogs.c:591
+#: dialogs.c:675
 msgid "Shout Text Colors:"
 msgstr ""
 
-#: dialogs.c:592
+#: dialogs.c:676
 msgid "S-Shout Text Colors:"
 msgstr ""
 
-#: dialogs.c:593
+#: dialogs.c:677
 msgid "Channel #1 Text Colors:"
 msgstr ""
 
-#: dialogs.c:594
+#: dialogs.c:678
 msgid "Other Channel Text Colors:"
 msgstr ""
 
-#: dialogs.c:595
+#: dialogs.c:679
 msgid "Kibitz Text Colors:"
 msgstr ""
 
-#: dialogs.c:596
+#: dialogs.c:680
 msgid "Tell Text Colors:"
 msgstr ""
 
-#: dialogs.c:597
+#: dialogs.c:681
 msgid "Challenge Text Colors:"
 msgstr ""
 
-#: dialogs.c:598
+#: dialogs.c:682
 msgid "Request Text Colors:"
 msgstr ""
 
-#: dialogs.c:599
+#: dialogs.c:683
 msgid "Seek Text Colors:"
 msgstr ""
 
-#: dialogs.c:606
+#: dialogs.c:690
 msgid "ICS Options"
 msgstr "Impostazioni ICS"
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Exact position match"
 msgstr ""
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Shown position is subset"
 msgstr ""
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Same material with exactly same Pawn chain"
 msgstr ""
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Same material"
 msgstr ""
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Material range (top board half optional)"
 msgstr ""
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Material difference (optional stuff balanced)"
 msgstr ""
 
-#: dialogs.c:624
+#: dialogs.c:708
 msgid "Auto-Display Tags"
 msgstr ""
 
-#: dialogs.c:625
+#: dialogs.c:709
 msgid "Auto-Display Comment"
 msgstr ""
 
-#: dialogs.c:626
+#: dialogs.c:710
 msgid ""
 "Auto-Play speed of loaded games\n"
 "(0 = instant, -1 = off):"
 msgstr ""
 
-#: dialogs.c:627
+#: dialogs.c:711
 msgid "Seconds per Move:"
 msgstr ""
 
-#: dialogs.c:628
+#: dialogs.c:712
 msgid ""
 "\n"
 "options to use in game-viewer mode:"
 msgstr ""
 
-#: dialogs.c:630
+#: dialogs.c:714
 msgid ""
 "\n"
 "Thresholds for position filtering in game list:"
 msgstr ""
 
-#: dialogs.c:631
+#: dialogs.c:715
 msgid "Elo of strongest player at least:"
 msgstr ""
 
-#: dialogs.c:632
+#: dialogs.c:716
 msgid "Elo of weakest player at least:"
 msgstr ""
 
-#: dialogs.c:633
+#: dialogs.c:717
 #, fuzzy
 msgid "No games before year:"
 msgstr "Non è ancora stata caricata nessuna partita"
 
-#: dialogs.c:634
+#: dialogs.c:718
 msgid "Minimum nr consecutive positions:"
 msgstr ""
 
-#: dialogs.c:635
+#: dialogs.c:719
 msgid "Search mode:"
 msgstr ""
 
-#: dialogs.c:636
+#: dialogs.c:720
 msgid "Also match reversed colors"
 msgstr ""
 
-#: dialogs.c:637
+#: dialogs.c:721
 msgid "Also match left-right flipped position"
 msgstr ""
 
-#: dialogs.c:645
+#: dialogs.c:729
 msgid "Load Game Options"
 msgstr "Impostazioni apertura partita"
 
-#: dialogs.c:657
+#: dialogs.c:741
 msgid "Auto-Save Games"
 msgstr ""
 
-#: dialogs.c:658
+#: dialogs.c:742
 msgid "Own Games Only"
 msgstr ""
 
-#: dialogs.c:659
+#: dialogs.c:743
 msgid "Save Games on File:"
 msgstr ""
 
-#: dialogs.c:660
+#: dialogs.c:744
 msgid "Save Final Positions on File:"
 msgstr ""
 
-#: dialogs.c:661
+#: dialogs.c:745
 msgid "PGN Event Header:"
 msgstr ""
 
-#: dialogs.c:662
+#: dialogs.c:746
 msgid "Old Save Style (as opposed to PGN)"
 msgstr ""
 
-#: dialogs.c:663
+#: dialogs.c:747
 msgid "Include Number Tag in tourney PGN"
 msgstr ""
 
-#: dialogs.c:664
+#: dialogs.c:748
 msgid "Save Score/Depth Info in PGN"
 msgstr ""
 
-#: dialogs.c:665
+#: dialogs.c:749
 msgid "Save Out-of-Book Info in PGN           "
 msgstr ""
 
-#: dialogs.c:672
+#: dialogs.c:756
 msgid "Save Game Options"
 msgstr "Impostazioni salvataggio partita"
 
-#: dialogs.c:681
+#: dialogs.c:765
 msgid "No Sound"
 msgstr "Silenzioso"
 
-#: dialogs.c:682
+#: dialogs.c:766
 msgid "Default Beep"
 msgstr "Beep"
 
-#: dialogs.c:683
+#: dialogs.c:767
 msgid "Above WAV File"
 msgstr ""
 
-#: dialogs.c:684
+#: dialogs.c:768
 msgid "Car Horn"
 msgstr ""
 
-#: dialogs.c:685
+#: dialogs.c:769
 msgid "Cymbal"
 msgstr ""
 
-#: dialogs.c:686
+#: dialogs.c:770
 msgid "Ding"
 msgstr ""
 
-#: dialogs.c:687
+#: dialogs.c:771
 msgid "Gong"
 msgstr ""
 
-#: dialogs.c:688
+#: dialogs.c:772
 msgid "Laser"
 msgstr ""
 
-#: dialogs.c:689
+#: dialogs.c:773
 msgid "Penalty"
 msgstr ""
 
-#: dialogs.c:690
+#: dialogs.c:774
 msgid "Phone"
 msgstr ""
 
-#: dialogs.c:691
+#: dialogs.c:775
 msgid "Pop"
 msgstr ""
 
-#: dialogs.c:692
+#: dialogs.c:776
+msgid "Roar"
+msgstr ""
+
+#: dialogs.c:777
 msgid "Slap"
 msgstr ""
 
-#: dialogs.c:693
+#: dialogs.c:778
 msgid "Wood Thunk"
 msgstr ""
 
-#: dialogs.c:695
+#: dialogs.c:780
 msgid "User File"
 msgstr ""
 
-#: dialogs.c:717
+#: dialogs.c:803
 msgid "User WAV File:"
 msgstr ""
 
-#: dialogs.c:718
+#: dialogs.c:804
 msgid "Sound Program:"
 msgstr ""
 
-#: dialogs.c:719
+#: dialogs.c:805
 msgid "Try-Out Sound:"
 msgstr ""
 
-#: dialogs.c:720
+#: dialogs.c:806
 msgid "Play"
 msgstr "Ascolta"
 
-#: dialogs.c:721
+#: dialogs.c:807
 msgid "Move:"
 msgstr ""
 
-#: dialogs.c:722
+#: dialogs.c:808
 msgid "Win:"
 msgstr ""
 
-#: dialogs.c:723
+#: dialogs.c:809
 msgid "Lose:"
 msgstr ""
 
-#: dialogs.c:724
+#: dialogs.c:810
 msgid "Draw:"
 msgstr ""
 
-#: dialogs.c:725
+#: dialogs.c:811
 msgid "Unfinished:"
 msgstr ""
 
-#: dialogs.c:726
+#: dialogs.c:812
 msgid "Alarm:"
 msgstr ""
 
-#: dialogs.c:727
+#: dialogs.c:813
 msgid "Challenge:"
 msgstr ""
 
-#: dialogs.c:729
+#: dialogs.c:815
 msgid "Sounds Directory:"
 msgstr ""
 
-#: dialogs.c:730
+#: dialogs.c:816
 msgid "Shout:"
 msgstr ""
 
-#: dialogs.c:731
+#: dialogs.c:817
 msgid "S-Shout:"
 msgstr ""
 
-#: dialogs.c:732
+#: dialogs.c:818
 msgid "Channel:"
 msgstr ""
 
-#: dialogs.c:733
+#: dialogs.c:819
 msgid "Channel 1:"
 msgstr ""
 
-#: dialogs.c:734
+#: dialogs.c:820
 msgid "Tell:"
 msgstr ""
 
-#: dialogs.c:735
+#: dialogs.c:821
 msgid "Kibitz:"
 msgstr ""
 
-#: dialogs.c:736
+#: dialogs.c:822
 msgid "Request:"
 msgstr ""
 
-#: dialogs.c:737
+#: dialogs.c:823
+msgid "Lion roar:"
+msgstr ""
+
+#: dialogs.c:824
 msgid "Seek:"
 msgstr ""
 
-#: dialogs.c:753
+#: dialogs.c:840
 msgid "Sound Options"
 msgstr "Impostazioni suoni"
 
-#: dialogs.c:774
+#: dialogs.c:861
 msgid "White Piece Color:"
 msgstr ""
 
 #. TRANSLATORS: R = single letter for the color red
-#: dialogs.c:777 dialogs.c:786 dialogs.c:792 dialogs.c:798 dialogs.c:804
-#: dialogs.c:810
+#: dialogs.c:864 dialogs.c:873 dialogs.c:879 dialogs.c:885 dialogs.c:891
+#: dialogs.c:897
 msgid "R"
 msgstr ""
 
 #. TRANSLATORS: G = single letter for the color green
-#: dialogs.c:779 dialogs.c:787 dialogs.c:793 dialogs.c:799 dialogs.c:805
-#: dialogs.c:811
+#: dialogs.c:866 dialogs.c:874 dialogs.c:880 dialogs.c:886 dialogs.c:892
+#: dialogs.c:898
 msgid "G"
 msgstr ""
 
 #. TRANSLATORS: B = single letter for the color blue
-#: dialogs.c:781 dialogs.c:788 dialogs.c:794 dialogs.c:800 dialogs.c:806
-#: dialogs.c:812
+#: dialogs.c:868 dialogs.c:875 dialogs.c:881 dialogs.c:887 dialogs.c:893
+#: dialogs.c:899
 msgid "B"
 msgstr ""
 
 #. TRANSLATORS: D = single letter to make a color darker
-#: dialogs.c:783 dialogs.c:789 dialogs.c:795 dialogs.c:801 dialogs.c:807
-#: dialogs.c:813
+#: dialogs.c:870 dialogs.c:876 dialogs.c:882 dialogs.c:888 dialogs.c:894
+#: dialogs.c:900
 msgid "D"
 msgstr ""
 
-#: dialogs.c:784
+#: dialogs.c:871
 msgid "Black Piece Color:"
 msgstr "Pezzi neri"
 
-#: dialogs.c:790
+#: dialogs.c:877
 msgid "Light Square Color:"
 msgstr "Case bianche"
 
-#: dialogs.c:796
+#: dialogs.c:883
 msgid "Dark Square Color:"
 msgstr "Case nere"
 
-#: dialogs.c:802
+#: dialogs.c:889
 msgid "Highlight Color:"
 msgstr "Case evidenziate"
 
-#: dialogs.c:808
+#: dialogs.c:895
 msgid "Premove Highlight Color:"
 msgstr "Premosse evidenziate"
 
-#: dialogs.c:814
+#: dialogs.c:901
 msgid "Flip Pieces Shogi Style        (Colored buttons restore default)"
 msgstr ""
 
-#: dialogs.c:816
+#: dialogs.c:903
 msgid "Mono Mode"
 msgstr "Monocromatico"
 
-#: dialogs.c:817
-msgid "Line Gap ( -1 = default for board size):"
+#: dialogs.c:904
+msgid "Line Gap (-1 = default for board size):"
 msgstr ""
 
-#: dialogs.c:818
+#: dialogs.c:905
 msgid "Use Board Textures"
 msgstr ""
 
-#: dialogs.c:819
+#: dialogs.c:906
 msgid "Light-Squares Texture File:"
 msgstr ""
 
-#: dialogs.c:820
+#: dialogs.c:907
 msgid "Dark-Squares Texture File:"
 msgstr ""
 
-#: dialogs.c:821
+#: dialogs.c:908
 msgid "Use external piece bitmaps with their own colors"
 msgstr ""
 
-#: dialogs.c:822
+#: dialogs.c:909
 msgid "Directory with Pieces Images:"
 msgstr ""
 
-#: dialogs.c:872
+#: dialogs.c:959
 msgid "Board Options"
 msgstr "Impostazioni scacchiera"
 
-#: dialogs.c:925 menus.c:634
+#: dialogs.c:1012 menus.c:634
 msgid "ICS text menu"
 msgstr ""
 
-#: dialogs.c:947
+#: dialogs.c:1034
 msgid "clear"
 msgstr ""
 
-#: dialogs.c:948 dialogs.c:1036
+#: dialogs.c:1035 dialogs.c:1123
 msgid "save changes"
 msgstr ""
 
-#: dialogs.c:1051
+#: dialogs.c:1138
 #, fuzzy
 msgid "Edit book"
 msgstr "Modifica"
 
-#: dialogs.c:1051 menus.c:636
+#: dialogs.c:1138 menus.c:636
 msgid "Tags"
 msgstr "Informazioni partita"
 
-#: dialogs.c:1193
+#: dialogs.c:1280
 msgid "ICS input box"
 msgstr ""
 
-#: dialogs.c:1225
+#: dialogs.c:1312
 msgid "Type a move"
 msgstr ""
 
-#: dialogs.c:1251
+#: dialogs.c:1338
 #, fuzzy
 msgid "Engine has no options"
 msgstr "Libro proprio per motore 1"
 
-#: dialogs.c:1253
+#: dialogs.c:1340
 msgid "Engine Settings"
 msgstr ""
 
-#: dialogs.c:1278
+#: dialogs.c:1365
 msgid "Select engine from list:"
 msgstr ""
 
-#: dialogs.c:1281
+#: dialogs.c:1368
 msgid "or specify one below:"
 msgstr ""
 
-#: dialogs.c:1282
+#: dialogs.c:1369
 msgid "Nickname (optional):"
 msgstr ""
 
-#: dialogs.c:1283
+#: dialogs.c:1370
 msgid "Use nickname in PGN player tags of engine-engine games"
 msgstr ""
 
-#: dialogs.c:1284
+#: dialogs.c:1371
 msgid "Engine Directory:"
 msgstr ""
 
-#: dialogs.c:1285
+#: dialogs.c:1372
 msgid "Engine Command:"
 msgstr ""
 
-#: dialogs.c:1286
+#: dialogs.c:1373
 msgid "(Directory will be derived from engine path when empty)"
 msgstr ""
 
-#: dialogs.c:1287
+#: dialogs.c:1374
 msgid "UCI"
 msgstr ""
 
-#: dialogs.c:1288
+#: dialogs.c:1375
 msgid "WB protocol v1 (do not wait for engine features)"
 msgstr ""
 
-#: dialogs.c:1289
+#: dialogs.c:1376
 msgid "Must not use GUI book"
 msgstr ""
 
-#: dialogs.c:1290
+#: dialogs.c:1377
 msgid "Add this engine to the list"
 msgstr ""
 
-#: dialogs.c:1291
+#: dialogs.c:1378
 msgid "Force current variant with this engine"
 msgstr ""
 
-#: dialogs.c:1341
+#: dialogs.c:1428
 msgid "Load first engine"
 msgstr ""
 
-#: dialogs.c:1347
+#: dialogs.c:1434
 msgid "Load second engine"
 msgstr ""
 
-#: dialogs.c:1370
+#: dialogs.c:1457
 msgid "shuffle"
 msgstr ""
 
-#: dialogs.c:1371
+#: dialogs.c:1458
 msgid "Start-position number:"
 msgstr "Disposizione iniziale:"
 
-#: dialogs.c:1372
+#: dialogs.c:1459
 #, fuzzy
 msgid "randomize"
 msgstr "Casuale"
 
-#: dialogs.c:1373
+#: dialogs.c:1460
 msgid "pick fixed"
 msgstr ""
 
-#: dialogs.c:1390
+#: dialogs.c:1477
 msgid "New Shuffle Game"
 msgstr "Nuova partita Shuffle..."
 
-#: dialogs.c:1409
+#: dialogs.c:1496
 msgid "classical"
 msgstr ""
 
-#: dialogs.c:1410
+#: dialogs.c:1497
 msgid "incremental"
 msgstr ""
 
-#: dialogs.c:1411
+#: dialogs.c:1498
 msgid "fixed max"
 msgstr ""
 
-#: dialogs.c:1412
+#: dialogs.c:1499
 msgid "Moves per session:"
 msgstr ""
 
-#: dialogs.c:1413
+#: dialogs.c:1500
 msgid "Initial time (min):"
 msgstr ""
 
-#: dialogs.c:1414
+#: dialogs.c:1501
 msgid "Increment or max (sec/move):"
 msgstr ""
 
-#: dialogs.c:1415
+#: dialogs.c:1502
 #, fuzzy
 msgid "Time-Odds factors:"
 msgstr "Riduci il tempo di un fattore:"
 
-#: dialogs.c:1416
+#: dialogs.c:1503
 #, fuzzy
 msgid "Engine #1"
 msgstr "Motore"
 
-#: dialogs.c:1417
+#: dialogs.c:1504
 #, fuzzy
 msgid "Engine #2 / Human"
 msgstr "Libro proprio per motore 1"
 
-#: dialogs.c:1457 dialogs.c:1460 dialogs.c:1465 dialogs.c:1466
+#: dialogs.c:1544 dialogs.c:1547 dialogs.c:1552 dialogs.c:1553
 #: gtk/xoptions.c:194
 msgid "Unused"
 msgstr ""
 
-#: dialogs.c:1478
-msgid "Time Control"
-msgstr ""
-
-#: dialogs.c:1507
+#: dialogs.c:1594
 msgid "Error writing to chess program"
 msgstr "Errore in scrittura sul motore di gioco"
 
-#: dialogs.c:1574
+#: dialogs.c:1662 xaw/xoptions.c:1276
 #, fuzzy
 msgid "Cancel"
 msgstr "Cancella"
 
-#: dialogs.c:1579 dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:1667 dialogs.c:2061 dialogs.c:2065
 msgid "King"
 msgstr "Re"
 
-#: dialogs.c:1582
+#: dialogs.c:1670
 msgid "Captain"
 msgstr ""
 
-#: dialogs.c:1583
+#: dialogs.c:1671
 msgid "Lieutenant"
 msgstr ""
 
-#: dialogs.c:1584
+#: dialogs.c:1672
 msgid "General"
 msgstr "Generali..."
 
-#: dialogs.c:1585
+#: dialogs.c:1673
 msgid "Warlord"
 msgstr ""
 
-#: dialogs.c:1587 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1675 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Knight"
 msgstr "Cavallo"
 
-#: dialogs.c:1588 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1676 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Bishop"
 msgstr "Alfiere"
 
-#: dialogs.c:1589 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1677 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Rook"
 msgstr "Torre"
 
-#: dialogs.c:1593 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1681 dialogs.c:2062 dialogs.c:2066
 msgid "Archbishop"
 msgstr "Arcivescovo"
 
-#: dialogs.c:1594 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1682 dialogs.c:2062 dialogs.c:2066
 msgid "Chancellor"
 msgstr "Cancelliere"
 
-#: dialogs.c:1596 dialogs.c:1971 dialogs.c:1975 dialogs.c:1993
+#: dialogs.c:1684 dialogs.c:2061 dialogs.c:2065 dialogs.c:2083
 msgid "Queen"
 msgstr "Donna"
 
-#: dialogs.c:1600
+#: dialogs.c:1686
+msgid "Lion"
+msgstr ""
+
+#: dialogs.c:1690
 msgid "Defer"
 msgstr ""
 
-#: dialogs.c:1601 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1691 dialogs.c:2062 dialogs.c:2066
 msgid "Promote"
 msgstr "Promuovi"
 
-#: dialogs.c:1616
+#: dialogs.c:1706
 msgid "Chat partner:"
 msgstr ""
 
-#: dialogs.c:1701
+#: dialogs.c:1791
 msgid "Chat box"
 msgstr ""
 
-#: dialogs.c:1742
+#: dialogs.c:1832
 msgid "factory"
 msgstr "Fabbrica"
 
-#: dialogs.c:1743
+#: dialogs.c:1833
 msgid "up"
 msgstr "Muovi su"
 
-#: dialogs.c:1744
+#: dialogs.c:1834
 msgid "down"
 msgstr "Muovi giu"
 
-#: dialogs.c:1762
+#: dialogs.c:1852
 msgid "No tag selected"
 msgstr ""
 
-#: dialogs.c:1793
+#: dialogs.c:1883
 #, fuzzy
 msgid "Game-list options"
 msgstr "Impostazioni apertura partita"
 
-#: dialogs.c:1869 dialogs.c:1883
+#: dialogs.c:1959 dialogs.c:1973
 msgid "Error"
 msgstr "Errore"
 
-#: dialogs.c:1906
+#: dialogs.c:1996
 msgid "Fatal Error"
 msgstr "Errore fatale"
 
-#: dialogs.c:1906
+#: dialogs.c:1996
 msgid "Exiting"
 msgstr "Chiusura in corso"
 
-#: dialogs.c:1917
+#: dialogs.c:2007
 msgid "Information"
 msgstr "Informazione"
 
-#: dialogs.c:1924
+#: dialogs.c:2014
 msgid "Note"
 msgstr "Nota"
 
-#: dialogs.c:1970 dialogs.c:2245 dialogs.c:2248
+#: dialogs.c:2060 dialogs.c:2340 dialogs.c:2343
 msgid "White"
 msgstr "Bianco"
 
-#: dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Pawn"
 msgstr "Pedone"
 
-#: dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:2061 dialogs.c:2065
 msgid "Elephant"
 msgstr "Elefante"
 
-#: dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:2061 dialogs.c:2065
 msgid "Cannon"
 msgstr "Cannone"
 
-#: dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:2062 dialogs.c:2066
 msgid "Demote"
 msgstr "Degrada"
 
-#: dialogs.c:1973 dialogs.c:1977
+#: dialogs.c:2063 dialogs.c:2067
 msgid "Empty square"
 msgstr "Casa vuota"
 
-#: dialogs.c:1973 dialogs.c:1977
+#: dialogs.c:2063 dialogs.c:2067
 msgid "Clear board"
 msgstr "Svuota scacchiera"
 
-#: dialogs.c:1974 dialogs.c:2257 dialogs.c:2260
+#: dialogs.c:2064 dialogs.c:2352 dialogs.c:2355
 msgid "Black"
 msgstr "Nero"
 
-#: dialogs.c:2073 menus.c:787
+#: dialogs.c:2163 menus.c:787
 msgid "File"
 msgstr "File"
 
-#: dialogs.c:2074 menus.c:788
+#: dialogs.c:2164 menus.c:788
 msgid "Edit"
 msgstr "Modifica"
 
-#: dialogs.c:2075 menus.c:789
+#: dialogs.c:2165 menus.c:789
 msgid "View"
 msgstr "Visualizza"
 
-#: dialogs.c:2076 menus.c:790
+#: dialogs.c:2166 menus.c:790
 msgid "Mode"
 msgstr "Modalità"
 
-#: dialogs.c:2077 menus.c:791
+#: dialogs.c:2167 menus.c:791
 msgid "Action"
 msgstr "Azioni"
 
-#: dialogs.c:2078 menus.c:792
+#: dialogs.c:2168 menus.c:792
 msgid "Engine"
 msgstr "Motore"
 
-#: dialogs.c:2079 menus.c:793
+#: dialogs.c:2169 menus.c:793
 msgid "Options"
 msgstr "Impostazioni"
 
-#: dialogs.c:2080 menus.c:794
+#: dialogs.c:2170 menus.c:794
 msgid "Help"
 msgstr "Aiuto"
 
-#: dialogs.c:2090
+#: dialogs.c:2180
 msgid "<<"
 msgstr ""
 
-#: dialogs.c:2091
+#: dialogs.c:2181
 msgid "<"
 msgstr ""
 
-#: dialogs.c:2093
+#: dialogs.c:2183
 msgid ">"
 msgstr ""
 
-#: dialogs.c:2094
+#: dialogs.c:2184
 msgid ">>"
 msgstr ""
 
-#: dialogs.c:2364
+#: dialogs.c:2458
 msgid "Directories:"
 msgstr ""
 
-#: dialogs.c:2365
+#: dialogs.c:2459
 #, fuzzy
 msgid "Files:"
 msgstr "File"
 
-#: dialogs.c:2366
+#: dialogs.c:2460
 msgid "by name"
 msgstr ""
 
-#: dialogs.c:2367
+#: dialogs.c:2461
 msgid "by type"
 msgstr ""
 
-#: dialogs.c:2370
+#: dialogs.c:2464
 #, fuzzy
 msgid "Filename:"
 msgstr "Filtro"
 
-#: dialogs.c:2371
+#: dialogs.c:2465
 msgid "New directory"
 msgstr ""
 
-#: dialogs.c:2372
+#: dialogs.c:2466
 #, fuzzy
 msgid "File type:"
 msgstr "Filtro"
 
-#: dialogs.c:2447
+#: dialogs.c:2541
 #, fuzzy
 msgid "Contents of"
 msgstr "Commenti"
 
-#: dialogs.c:2473
+#: dialogs.c:2567
 msgid "  next page"
 msgstr ""
 
-#: dialogs.c:2490
+#: dialogs.c:2584
 msgid "FIRST TYPE DIRECTORY NAME HERE"
 msgstr ""
 
-#: dialogs.c:2491
+#: dialogs.c:2585
 msgid "TRY ANOTHER NAME"
 msgstr ""
 
-#: draw.c:293
+#: draw.c:310
 msgid ""
-"No default pieces installed\n"
-"Select your own -pieceImageDirectory"
+"No default pieces installed!\n"
+"Select your own using '-pieceImageDirectory'."
 msgstr ""
 
-#: engineoutput.c:107 menus.c:630
+#: engineoutput.c:110 menus.c:630
 #, fuzzy, c-format
 msgid "Engine Output"
 msgstr "Output del motore di gioco"
 
-#: engineoutput.c:117
+#: engineoutput.c:120
 #, c-format
 msgid "%s (%d reversible ply)"
 msgid_plural "%s (%d reversible plies)"
 msgstr[0] ""
 msgstr[1] ""
 
-#: engineoutput.c:509 engineoutput.c:512 nengineoutput.c:81 nengineoutput.c:88
+#: engineoutput.c:542 engineoutput.c:545 nengineoutput.c:82 nengineoutput.c:90
 msgid "NPS"
 msgstr ""
 
@@ -2190,50 +2275,50 @@ msgstr ""
 msgid "Reading game file (%d)"
 msgstr "File partita non riconosciuto"
 
-#: gtk/xboard.c:844 xaw/xboard.c:1162
+#: gtk/xboard.c:867 xaw/xboard.c:1052
 #, c-format
 msgid "%s: can't cd to CHESSDIR: "
 msgstr ""
 
-#: gtk/xboard.c:853 xaw/xboard.c:1171
+#: gtk/xboard.c:876 xaw/xboard.c:1061
 #, c-format
 msgid "Failed to open file '%s'\n"
 msgstr ""
 
-#: gtk/xboard.c:868 xaw/xboard.c:1180
+#: gtk/xboard.c:891 xaw/xboard.c:1070
 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size"
 msgstr ""
 
-#: gtk/xboard.c:887 xaw/xboard.c:1212
+#: gtk/xboard.c:910 xaw/xboard.c:1102
 #, c-format
 msgid "%s: bad boardSize syntax %s\n"
 msgstr ""
 
-#: gtk/xboard.c:927 xaw/xboard.c:1249
+#: gtk/xboard.c:950 xaw/xboard.c:1139
 #, c-format
 msgid "%s: unrecognized boardSize name %s\n"
 msgstr ""
 
-#: gtk/xboard.c:968 xaw/xboard.c:1286
+#: gtk/xboard.c:991 xaw/xboard.c:1176
 #, c-format
 msgid "%s: too few colors available; trying monochrome mode\n"
 msgstr ""
 
-#: gtk/xboard.c:1258 xaw/xboard.c:1568
+#: gtk/xboard.c:1281 xaw/xboard.c:1458
 #, c-format
 msgid "Unable to create font set for %s.\n"
 msgstr ""
 
-#: gtk/xboard.c:1283 xaw/xboard.c:1591
+#: gtk/xboard.c:1306 xaw/xboard.c:1481
 #, c-format
 msgid "%s: no fonts match pattern %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1722 xaw/xboard.c:2081
+#: gtk/xboard.c:1745 xaw/xboard.c:1971
 msgid "Can't open temp file"
 msgstr ""
 
-#: gtk/xboard.c:2174
+#: gtk/xboard.c:2199
 #, fuzzy
 msgid "Failed to open file"
 msgstr "Impossibile aprire l'applicazione cmail"
@@ -2289,12 +2374,13 @@ msgid "New Game"
 msgstr "Nuova partita Shuffle..."
 
 #: menus.c:583
-msgid "New Shuffle Game ..."
+#, fuzzy
+msgid "New Shuffle Game..."
 msgstr "Nuova partita Shuffle..."
 
 #: menus.c:584
 #, fuzzy
-msgid "New Variant ..."
+msgid "New Variant..."
 msgstr "Varianti di gioco"
 
 #: menus.c:586
@@ -2563,19 +2649,22 @@ msgid "Adjudicate Draw"
 msgstr "Aggiudica come Patta"
 
 #: menus.c:684
-msgid "Load New 1st Engine ..."
+msgid "Load New 1st Engine..."
 msgstr ""
 
 #: menus.c:685
-msgid "Load New 2nd Engine ..."
-msgstr ""
+#, fuzzy
+msgid "Load New 2nd Engine..."
+msgstr "Motori di gioco...   Alt+Shift+U"
 
 #: menus.c:687
-msgid "Engine #1 Settings ..."
+#, fuzzy
+msgid "Engine #1 Settings..."
 msgstr "Impostazioni motore 1"
 
 #: menus.c:688
-msgid "Engine #2 Settings ..."
+#, fuzzy
+msgid "Engine #2 Settings..."
 msgstr "Impostazioni motore 2"
 
 #: menus.c:690
@@ -2596,46 +2685,51 @@ msgid "Retract Move"
 msgstr "Annulla mossa   Ctrl+X"
 
 #: menus.c:700
-msgid "General ..."
+#, fuzzy
+msgid "General..."
 msgstr "Generali..."
 
 #: menus.c:702
 #, fuzzy
-msgid "Time Control ..."
+msgid "Time Control..."
 msgstr "Controllo Tempo...   Alt+Shift+T"
 
 #: menus.c:703
 #, fuzzy
-msgid "Common Engine ..."
+msgid "Common Engine..."
 msgstr "Motori di gioco...   Alt+Shift+U"
 
 #: menus.c:704
 #, fuzzy
-msgid "Adjudications ..."
+msgid "Adjudications..."
 msgstr "Aggiudicazioni...   Alt+Shift+J"
 
 #: menus.c:705
-msgid "ICS ..."
-msgstr "ICS..."
+msgid "ICS..."
+msgstr ""
 
 #: menus.c:706
-msgid "Match ..."
+msgid "Tournament..."
 msgstr ""
 
 #: menus.c:707
-msgid "Load Game ..."
+#, fuzzy
+msgid "Load Game..."
 msgstr "Apertura partita...   Alt+Shift+L"
 
 #: menus.c:708
-msgid "Save Game ..."
+#, fuzzy
+msgid "Save Game..."
 msgstr "Salvataggio partita...   Alt+Shift+S"
 
 #: menus.c:709
-msgid "Game List ..."
+#, fuzzy
+msgid "Game List..."
 msgstr "Lista partite..."
 
 #: menus.c:710
-msgid "Sounds ..."
+#, fuzzy
+msgid "Sounds..."
 msgstr "Suoni..."
 
 #: menus.c:713
@@ -2708,21 +2802,22 @@ msgstr ""
 msgid "e-Mail Bug Report"
 msgstr ""
 
-#: nengineoutput.c:78 nengineoutput.c:85
+#: nengineoutput.c:78 nengineoutput.c:86
 #, fuzzy
 msgid "engine name"
 msgstr "Motore"
 
-#: nengineoutput.c:80 nengineoutput.c:87
+#. TRANSLATORS: noun, as in "the move Nf3"
+#: nengineoutput.c:81 nengineoutput.c:89
 #, fuzzy
 msgid "move"
 msgstr "mosse"
 
-#: nengineoutput.c:153
+#: nengineoutput.c:155
 msgid "Engine output"
 msgstr "Output del motore di gioco"
 
-#: nengineoutput.c:157
+#: nengineoutput.c:159
 msgid ""
 "Mismatch of STRIDE in nengineoutput.c\n"
 "Change and recompile!"
@@ -2807,7 +2902,7 @@ msgstr ""
 
 #: usystem.c:230
 #, c-format
-msgid "%s: can't parse foreground color in `%s'\n"
+msgid "%s: can't parse foreground color in '%s'\n"
 msgstr ""
 
 #: usystem.c:259
@@ -2815,54 +2910,25 @@ msgstr ""
 msgid "%s: can't parse color names; disabling colorization\n"
 msgstr ""
 
-#: usystem.c:371
+#: usystem.c:374
 #, c-format
 msgid "ERROR: Unknown user %s (in path %s)\n"
 msgstr ""
 
-#: usystem.c:556
+#: usystem.c:557
 msgid "Socket support is not configured in"
 msgstr ""
 
-#: usystem.c:645
+#: usystem.c:646
 msgid "internal rcmd not implemented for Unix"
 msgstr ""
 
-#: xaw/xboard.c:478
-#, c-format
-msgid "%s: Can't access XPM directory %s\n"
-msgstr ""
-
-#: xaw/xboard.c:499
-#, c-format
-msgid "Available `%s' sizes:\n"
-msgstr ""
-
-#: xaw/xboard.c:532
-#, c-format
-msgid "Error: No `%s' files!\n"
-msgstr ""
-
-#: xaw/xboard.c:545
-#, c-format
-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 ""
-
-#: xaw/xboard.c:1292
+#: xaw/xboard.c:1182
 #, c-format
 msgid "white pixel = 0x%lx, black pixel = 0x%lx\n"
 msgstr ""
 
-#: xaw/xengineoutput.c:115
-#, c-format
-msgid "Error %d loading icon image\n"
-msgstr ""
-
-#: xaw/xoptions.c:321 xaw/xoptions.c:1023
+#: xaw/xoptions.c:321 xaw/xoptions.c:1025
 msgid "browse"
 msgstr ""
 
@@ -2878,13 +2944,15 @@ msgstr ""
 msgid "Shift"
 msgstr ""
 
-#: xaw/xoptions.c:1270
+#: xaw/xoptions.c:1272
 msgid "OK"
 msgstr "OK"
 
-#: xaw/xoptions.c:1274
-msgid "cancel"
-msgstr "Cancella"
+#~ msgid "ICS ..."
+#~ msgstr "ICS..."
+
+#~ msgid "cancel"
+#~ msgstr "Cancella"
 
 #~ msgid "New Game        Ctrl+N"
 #~ msgstr "Nuova partita   Ctrl+N"
diff --git a/po/nl.po b/po/nl.po
new file mode 100644 (file)
index 0000000..542b7ad
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,2979 @@
+# Dutch translations for GNU XBoard.
+# Copyright (C) 2013 Free Software Foundation, Inc.
+# This file is distributed under the same license as the xboard package.
+#
+# "The patterns change, and never are the same again."
+#
+# Benno Schulenberg <benno@vertaalt.nl>, 2013, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU xboard 4.7.2\n"
+"Report-Msgid-Bugs-To: bug-xboard@gnu.org\n"
+"POT-Creation-Date: 2014-01-19 22:19-0800\n"
+"PO-Revision-Date: 2014-01-12 20:00+0100\n"
+"Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n"
+"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
+"Language: nl\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.0\n"
+
+#: args.h:833
+#, c-format
+msgid "%s in settings file\n"
+msgstr "%s in instellingenbestand\n"
+
+#: args.h:867
+#, c-format
+msgid "Bad integer value %s"
+msgstr "Ongeldig geheel getal: %s"
+
+#: args.h:968 args.h:1229
+#, c-format
+msgid "Unrecognized argument %s"
+msgstr "Niet-herkend argument: %s"
+
+#: args.h:999
+#, c-format
+msgid "No value provided for argument %s"
+msgstr "Geen waarde gegeven voor argument %s"
+
+#: args.h:1059
+#, c-format
+msgid "Incomplete \\ escape in value for %s"
+msgstr "Onvolledige \\-stuurcode in waarde voor %s"
+
+#: args.h:1170
+#, c-format
+msgid "Failed to open indirection file %s"
+msgstr "Kan indirectiebestand %s niet openen"
+
+#: args.h:1187
+#, c-format
+msgid "Unrecognized boolean argument value %s"
+msgstr "Niet-herkende booleaanse waarde: %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
+#: backend.c:800
+msgid "first"
+msgstr "eerste"
+
+#. 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:803
+msgid "second"
+msgstr "tweede"
+
+#: backend.c:885
+#, c-format
+msgid "protocol version %d not supported"
+msgstr "protocolversie %d wordt niet ondersteund"
+
+#: backend.c:991
+msgid "You did not specify the engine executable"
+msgstr "U hebt geen automaatbestand opgegeven."
+
+#: backend.c:1049
+#, c-format
+msgid "bad timeControl option %s"
+msgstr "ongeldige timeControl-optie: %s"
+
+#: backend.c:1064
+#, c-format
+msgid "bad searchTime option %s"
+msgstr "ongeldige searchTime-optie: %s"
+
+#: backend.c:1170
+#, c-format
+msgid "Variant %s supported only in ICS mode"
+msgstr "Variant %s wordt alleen ondersteund in ICS-modus"
+
+#: backend.c:1188
+#, c-format
+msgid "Unknown variant name %s"
+msgstr "Onbekende variantnaam: %s"
+
+#: backend.c:1439
+msgid "Starting chess program"
+msgstr "Starten van schaakprogramma"
+
+#: backend.c:1462
+msgid "Bad game file"
+msgstr "Incorrect partijbestand"
+
+#: backend.c:1469
+msgid "Bad position file"
+msgstr "Incorrect positiebestand"
+
+#: backend.c:1483
+msgid "Pick new game"
+msgstr "Kies een nieuwe partij"
+
+#: backend.c:1552
+#, 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 ""
+"U hebt een reeds voltooid toernooi herstart.\n"
+"Er wordt een extra cyclus aan toegevoegd.\n"
+"De partijen beginnen in tien seconden."
+
+#: backend.c:1559
+#, c-format
+msgid "All games in tourney '%s' are already played or playing"
+msgstr "Alle partijen in toernooi '%s' zijn al gespeeld of spelen nog"
+
+#: backend.c:1566
+msgid "Can't have a match with no chess programs"
+msgstr "Er is geen toernooi mogelijk zonder automaten."
+
+#: backend.c:1620
+#, c-format
+msgid "Could not open comm port %s"
+msgstr "Kan communicatiepoort %s niet openen"
+
+#: backend.c:1623
+#, c-format
+msgid "Could not connect to host %s, port %s"
+msgstr "Kan geen verbinding maken met host %s, poort %s"
+
+#: backend.c:1679
+#, c-format
+msgid "Unknown initialMode %s"
+msgstr "Onbekende initialMode %s"
+
+#: backend.c:1705
+msgid "AnalyzeFile mode requires a game file"
+msgstr "AnalyzeFile-modus vereist een partijbestand"
+
+#: backend.c:1732
+msgid "Analysis mode requires a chess engine"
+msgstr "Analysemodus vereist een schaakprogramma"
+
+#: backend.c:1736
+msgid "Analysis mode does not work with ICS mode"
+msgstr "Analysemodus werkt niet met ICS-modus"
+
+#: backend.c:1747
+msgid "MachineWhite mode requires a chess engine"
+msgstr "MachineWhite-modus vereist een schaakprogramma"
+
+#: backend.c:1752
+msgid "MachineWhite mode does not work with ICS mode"
+msgstr "MachineWhite-modus werkt niet met ICS-modus"
+
+#: backend.c:1759
+msgid "MachineBlack mode requires a chess engine"
+msgstr "MachineBlack-modus vereist een schaakprogramma"
+
+#: backend.c:1764
+msgid "MachineBlack mode does not work with ICS mode"
+msgstr "MachineBlack-modus werkt niet met ICS-modus"
+
+#: backend.c:1771
+msgid "TwoMachines mode requires a chess engine"
+msgstr "TwoMachines-modus vereist een schaakprogramma"
+
+#: backend.c:1776
+msgid "TwoMachines mode does not work with ICS mode"
+msgstr "TwoMachines-modus werkt niet met ICS-modus"
+
+#: backend.c:1787
+msgid "Training mode requires a game file"
+msgstr "Trainingsmodus vereist een partijbestand"
+
+#: backend.c:1950 backend.c:2005 backend.c:2028 backend.c:2430
+msgid "Error writing to ICS"
+msgstr "Fout bij schrijven naar ICS"
+
+#: backend.c:1965
+msgid "Error reading from keyboard"
+msgstr "Fout bij lezen van toetsenbord"
+
+#: backend.c:1968
+msgid "Got end of file from keyboard"
+msgstr "Einde-van-bestand ontvangen van toetsenbord"
+
+#: backend.c:2276
+#, c-format
+msgid "Unknown wild type %d"
+msgstr "Onbekend wild type %d"
+
+#: backend.c:2347 usystem.c:329
+msgid "Error writing to display"
+msgstr "Fout bij schrijven naar beeldscherm"
+
+#. TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers
+#: backend.c:3105
+#, c-format
+msgid "your opponent kibitzes: %s"
+msgstr "Uw tegenstander kibitzt: %s"
+
+#: backend.c:3634
+msgid "Error gathering move list: two headers"
+msgstr "Fout bij lezen van zettenlijst: twee koppen"
+
+#: backend.c:3681
+msgid "Error gathering move list: nested"
+msgstr "Fout bij lezen van zettenlijst: genest"
+
+#: backend.c:3785 backend.c:4203 backend.c:4407 backend.c:4966 backend.c:4970
+#: backend.c:7073 backend.c:12577 backend.c:14306 backend.c:14383
+#: backend.c:14429 backend.c:14435 backend.c:14440 backend.c:14445
+msgid "vs."
+msgstr "tegen"
+
+#: backend.c:3913
+msgid "Illegal move (rejected by ICS)"
+msgstr "Ongeldige zet (geweigerd door ICS)"
+
+#: backend.c:4251
+msgid "Connection closed by ICS"
+msgstr "Verbinding is gesloten door ICS"
+
+#: backend.c:4253
+msgid "Error reading from ICS"
+msgstr "Fout bij lezen van ICS"
+
+#: backend.c:4330
+#, c-format
+msgid ""
+"Failed to parse board string:\n"
+"\"%s\""
+msgstr ""
+"Ontleden van bordtekenreeks is mislukt:\n"
+"'%s'"
+
+#: backend.c:4339 backend.c:10203
+msgid "Game too long; increase MAX_MOVES and recompile"
+msgstr "*** Partij is te lang; verhoog MAX_MOVES en hercompileer."
+
+#: backend.c:4458
+msgid "Error gathering move list: extra board"
+msgstr "Fout bij lezen van zettenlijst: extra bord"
+
+#: backend.c:4890 backend.c:4912
+#, c-format
+msgid "Couldn't parse move \"%s\" from ICS"
+msgstr "Kan zet '%s' van ICS niet ontleden"
+
+#: backend.c:5161
+#, c-format
+msgid "say Internal error; bad moveType %d (%d,%d-%d,%d)"
+msgstr "**interne programmafout**; ongeldig moveType %d (%d,%d-%d,%d)"
+
+#: backend.c:5232
+msgid "You cannot do this while you are playing or observing"
+msgstr "U kunt dit niet doen tijdens het spelen of observeren."
+
+#: backend.c:6174
+msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!"
+msgstr "*** Hercompileer om BOARD_RANKS of BOARD_FILES te ondersteunen."
+
+#: backend.c:6664
+msgid "You are playing Black"
+msgstr "U speelt met zwart"
+
+#: backend.c:6673 backend.c:6700
+msgid "You are playing White"
+msgstr "U speelt met wit"
+
+#: backend.c:6682 backend.c:6708 backend.c:6828 backend.c:6853 backend.c:6869
+#: backend.c:15113
+msgid "It is White's turn"
+msgstr "Wit is aan zet"
+
+#: backend.c:6686 backend.c:6712 backend.c:6836 backend.c:6859 backend.c:6890
+#: backend.c:15105
+msgid "It is Black's turn"
+msgstr "Zwart is aan zet"
+
+#: backend.c:6725
+msgid "Displayed position is not current"
+msgstr "Getoonde positie is niet de huidige"
+
+#: backend.c:6963
+msgid "Illegal move"
+msgstr "Ongeldige zet"
+
+#: backend.c:7030
+msgid "End of game"
+msgstr "Einde van partij"
+
+#: backend.c:7033
+msgid "Incorrect move"
+msgstr "Onjuiste zet"
+
+#: backend.c:7423 backend.c:7569
+msgid "Pull pawn backwards to under-promote"
+msgstr "Beweeg pion terug voor onderpromotie."
+
+#: backend.c:7532
+msgid "only marked squares are legal"
+msgstr ""
+
+#: backend.c:7820
+msgid "Swiss tourney finished"
+msgstr "Zwitsers toernooi is beëindigd."
+
+#: backend.c:8336
+msgid "could not load EGBB library"
+msgstr ""
+
+#: backend.c:8339
+msgid "wrong EGBB version"
+msgstr ""
+
+#: backend.c:8452
+msgid "Invalid pairing from pairing engine"
+msgstr "Ongeldig koppel van koppelautomaat."
+
+#: backend.c:8603
+#, c-format
+msgid "Illegal move \"%s\" from %s machine"
+msgstr "Ongeldige zet '%s' van %s automaat."
+
+#: backend.c:8849
+msgid "Bad FEN received from engine"
+msgstr "Ongeldige FEN ontvangen van automaat"
+
+#: backend.c:8950
+msgid "Engine did not send setup for non-standard variant"
+msgstr ""
+
+#: backend.c:9023 backend.c:14168 backend.c:14236
+#, c-format
+msgid "%s does not support analysis"
+msgstr "%s ondersteunt analyse niet."
+
+#: backend.c:9089
+#, c-format
+msgid "Illegal move \"%s\" (rejected by %s chess program)"
+msgstr "Ongeldige zet '%s' (geweigerd door %s schaakprogramma)"
+
+#: backend.c:9116
+#, c-format
+msgid "Failed to start %s chess program %s on %s: %s\n"
+msgstr "Starten van %s schaakprogramma (%s) op %s is mislukt: %s\n"
+
+#: backend.c:9137
+#, c-format
+msgid "Hint: %s"
+msgstr "Hint: %s"
+
+#: backend.c:9142
+#, c-format
+msgid ""
+"Illegal hint move \"%s\"\n"
+"from %s chess program"
+msgstr ""
+"Ongeldige hintzet '%s'\n"
+"van %s schaakprogramma."
+
+#: backend.c:9317
+msgid "Machine accepts your draw offer"
+msgstr "Automaat accepteert uw remise-aanbod"
+
+# XXX punten
+#: backend.c:9320
+#, fuzzy
+msgid ""
+"Machine offers a draw.\n"
+"Select Action / Draw to accept."
+msgstr ""
+"Automaat biedt remise aan.\n"
+"Kies Acties > Remise om te accepteren."
+
+#. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone
+#: backend.c:9402
+msgid "failed writing PV"
+msgstr "schrijven van hoofdvariant is mislukt"
+
+#: backend.c:9701
+#, c-format
+msgid "Ambiguous move in ICS output: \"%s\""
+msgstr "Niet-eenduidige zet in ICS-uitvoer: '%s'"
+
+#: backend.c:9711
+#, c-format
+msgid "Illegal move in ICS output: \"%s\""
+msgstr "Ongeldige zet in ICS-uitvoer: '%s'"
+
+#: backend.c:9722
+msgid "Gap in move list"
+msgstr "Gat in zettenlijst"
+
+#: backend.c:10357
+#, c-format
+msgid "Variant %s not supported by %s"
+msgstr "Variant %s wordt niet ondersteund door %s"
+
+#: backend.c:10364
+#, c-format
+msgid ", but %s is"
+msgstr ""
+
+#: backend.c:10506
+#, c-format
+msgid "Startup failure on '%s'"
+msgstr "Opstartfout bij '%s'"
+
+#: backend.c:10537
+msgid "Waiting for first chess program"
+msgstr "Wachten op eerste schaakprogramma"
+
+#: backend.c:10542 backend.c:14454
+msgid "Waiting for second chess program"
+msgstr "Wachten op tweede schaakprogramma"
+
+#: backend.c:10591
+msgid "Could not write on tourney file"
+msgstr "Kan niet naar toernooibestand schrijven."
+
+#: backend.c:10665
+msgid ""
+"You cannot replace an engine while it is engaged!\n"
+"Terminate its game first."
+msgstr ""
+"U kunt een automaat niet vervangen terwijl deze\n"
+"gebruikt wordt.  Beëindig eerst diens partij."
+
+#: backend.c:10679
+msgid "No engine with the name you gave is installed"
+msgstr "Er is geen automaat met de gegeven naam geïnstalleerd"
+
+# XXX where is Tournament Options dialog?
+#: backend.c:10681
+msgid ""
+"First change an engine by editing the participants list\n"
+"of the Tournament Options dialog"
+msgstr ""
+"Wijzig eerst een automaat door de deelnemerslijst\n"
+"in de dialoog «Toernooi-instellingen» te bewerken."
+
+#: backend.c:10682
+msgid "You can only change one engine at the time"
+msgstr "U kunt slechts één automaat tegelijk wijzigen."
+
+#: backend.c:10697 backend.c:10845
+#, c-format
+msgid "No engine %s is installed"
+msgstr "Automaat '%s' is niet geïnstalleerd"
+
+#: backend.c:10717
+msgid ""
+"You must supply a tournament file,\n"
+"for storing the tourney progress"
+msgstr ""
+"U dient een toernooibestand op te geven,\n"
+"om de toernooivoortgang in op te slaan."
+
+#: backend.c:10727
+msgid "Not enough participants"
+msgstr "Te weinig deelnemers"
+
+#: backend.c:10929
+msgid "Bad tournament file"
+msgstr "Incorrect toernooibestand"
+
+#: backend.c:10941
+msgid "Waiting for other game(s)"
+msgstr "Wachten op andere partij(en)"
+
+#: backend.c:10954
+msgid "No pairing engine specified"
+msgstr "Geen koppelautomaat gegeven"
+
+#: backend.c:11430
+#, c-format
+msgid "Match %s vs. %s: final score %d-%d-%d"
+msgstr "Toernooi van %s tegen %s: eindscore %d-%d-%d"
+
+#: backend.c:11897 backend.c:11928
+#, c-format
+msgid "Illegal move: %d.%s%s"
+msgstr "Ongeldige zet: %d.%s%s"
+
+#: backend.c:11917
+#, c-format
+msgid "Ambiguous move: %d.%s%s"
+msgstr "Niet-eenduidige zet: %d.%s%s"
+
+#: backend.c:11971 backend.c:13010 backend.c:13203 backend.c:13567
+#, c-format
+msgid "Can't open \"%s\""
+msgstr "Kan '%s' niet openen"
+
+#: backend.c:11983 menus.c:116
+msgid "Cannot build game list"
+msgstr "Kan partijenlijst niet samenstellen"
+
+#: backend.c:12068
+msgid "No more games in this message"
+msgstr "Geen verdere partijen in dit bericht"
+
+#: backend.c:12108
+msgid "No game has been loaded yet"
+msgstr "Er is nog geen partij geladen"
+
+#: backend.c:12112 backend.c:12991 ngamelist.c:129
+msgid "Can't back up any further"
+msgstr "Kan niet nog verder teruggaan"
+
+#: backend.c:12553
+msgid "Game number out of range"
+msgstr "Partijnummer valt buiten bereik"
+
+#: backend.c:12564
+msgid "Can't seek on game file"
+msgstr "Kan niet springen in partijbestand"
+
+#: backend.c:12622
+msgid "Game not found in file"
+msgstr "Partij niet gevonden in bestand"
+
+#: backend.c:12751 backend.c:13087
+msgid "Bad FEN position in file"
+msgstr "Ongeldige FEN-positie in bestand"
+
+#: backend.c:12903
+msgid "No moves in game"
+msgstr "Partij bevat geen zetten"
+
+#: backend.c:12987
+msgid "No position has been loaded yet"
+msgstr "Er is nog geen positie geladen"
+
+#: backend.c:13048 backend.c:13059
+msgid "Can't seek on position file"
+msgstr "Kan niet springen in positiebestand"
+
+#: backend.c:13066 backend.c:13078
+msgid "Position not found in file"
+msgstr "Positie niet gevonden in bestand"
+
+#: backend.c:13118
+msgid "Black to play"
+msgstr "Zwart is aan zet"
+
+#: backend.c:13121
+msgid "White to play"
+msgstr "Wit is aan zet"
+
+#: backend.c:13208 backend.c:13572
+msgid "Waiting for access to save file"
+msgstr "Wachten op toegang om bestand op te slaan"
+
+#: backend.c:13210
+msgid "Saving game"
+msgstr "Opslaan van partij"
+
+#: backend.c:13211
+msgid "Bad Seek"
+msgstr "Ongeldige bestandssprong"
+
+#: backend.c:13574
+msgid "Saving position"
+msgstr "Opslaan van positie"
+
+# XXX Reload Same Game is not in POT
+#: backend.c:13700
+msgid ""
+"You have edited the game history.\n"
+"Use Reload Same Game and make your move again."
+msgstr ""
+"U hebt de partijgeschiedenis bewerkt.\n"
+"Gebruik «Zelfde partij herladen» en doe uw zet opnieuw."
+
+#: backend.c:13705
+msgid ""
+"You have entered too many moves.\n"
+"Back up to the correct position and try again."
+msgstr ""
+"U hebt te veel zetten ingevoerd.\n"
+"Ga terug naar de correcte positie en probeer het opnieuw."
+
+#: backend.c:13710
+msgid ""
+"Displayed position is not current.\n"
+"Step forward to the correct position and try again."
+msgstr ""
+"Getoonde positie is niet de huidige.\n"
+"Ga vooruit naar de correcte positie en probeer het opnieuw."
+
+#: backend.c:13757
+msgid "You have not made a move yet"
+msgstr "U hebt nog geen zet gedaan"
+
+#: backend.c:13778
+msgid ""
+"The cmail message is not loaded.\n"
+"Use Reload CMail Message and make your move again."
+msgstr ""
+"Het CMail-bericht is niet geladen.\n"
+"Gebruik «CMail-bericht herladen» en doe uw zet opnieuw."
+
+#: backend.c:13783
+msgid "No unfinished games"
+msgstr "Geen onafgemaakte partijen"
+
+#: backend.c:13789
+#, 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 ""
+
+#: backend.c:13804
+msgid "Failed to invoke cmail"
+msgstr "Aanroepen van 'cmail' is mislukt"
+
+#: backend.c:13866
+#, c-format
+msgid "Waiting for reply from opponent\n"
+msgstr "Wachten op antwoord van tegenstander\n"
+
+#: backend.c:13888
+#, c-format
+msgid "Still need to make move for game\n"
+msgstr "U dient nog een zet te doen voor deze partij.\n"
+
+#: backend.c:13892
+#, c-format
+msgid "Still need to make moves for both games\n"
+msgstr "U dient nog zetten te doen voor beide partijen.\n"
+
+#: backend.c:13896
+#, c-format
+msgid "Still need to make moves for all %d games\n"
+msgstr "U dient nog zetten te doen voor alle %d partijen.\n"
+
+#: backend.c:13903
+#, c-format
+msgid "Still need to make a move for game %s\n"
+msgstr "U dient nog een zet te doen voor partij %s.\n"
+
+#: backend.c:13909
+#, c-format
+msgid "No unfinished games\n"
+msgstr "Geen onafgemaakte partijen.\n"
+
+#: backend.c:13911
+#, c-format
+msgid "Ready to send mail\n"
+msgstr "Klaar om mail te verzenden.\n"
+
+#: backend.c:13916
+#, c-format
+msgid "Still need to make moves for games %s\n"
+msgstr "U dient nog zetten te doen voor partijen %s.\n"
+
+#: backend.c:14118
+msgid "Edit comment"
+msgstr "Opmerking bewerken"
+
+#: backend.c:14120
+#, c-format
+msgid "Edit comment on %d.%s%s"
+msgstr "Opmerking op %d.%s%s bewerken"
+
+#: backend.c:14175
+#, c-format
+msgid "You are not observing a game"
+msgstr "U bent geen partij aan het observeren."
+
+#: backend.c:14286
+msgid "It is not White's turn"
+msgstr "Wit is niet aan zet"
+
+#: backend.c:14367
+msgid "It is not Black's turn"
+msgstr "Zwart is niet aan zet"
+
+#: backend.c:14475
+#, c-format
+msgid "Starting %s chess program"
+msgstr "Starten van %s schaakprogramma"
+
+#: backend.c:14503 backend.c:15648
+#, fuzzy
+msgid ""
+"Wait until your turn,\n"
+"or select 'Move Now'."
+msgstr ""
+"Wacht op uw beurt,\n"
+"of kies «Nu zetten»."
+
+#: backend.c:14638
+msgid "Training mode off"
+msgstr "Trainingsmodus is uitgeschakeld"
+
+#: backend.c:14646
+msgid "Training mode on"
+msgstr "Trainingsmodus is ingeschakeld"
+
+#: backend.c:14649
+msgid "Already at end of game"
+msgstr "Reeds aan einde van partij."
+
+#: backend.c:14729
+msgid "Warning: You are still playing a game"
+msgstr "Waarschuwing: u bent nog een partij aan het spelen."
+
+#: backend.c:14732
+msgid "Warning: You are still observing a game"
+msgstr "Waarschuwing: u bent nog een partij aan het observeren."
+
+#: backend.c:14735
+msgid "Warning: You are still examining a game"
+msgstr "Waarschuwing: u bent nog een partij aan het bestuderen."
+
+#: backend.c:14802
+msgid "Click clock to clear board"
+msgstr "Klik op klok om bord leeg te maken."
+
+# XXX analysis?
+#: backend.c:14812
+msgid "Close ICS engine analyze..."
+msgstr ""
+
+#: backend.c:15130
+msgid "That square is occupied"
+msgstr "Dat veld is bezet."
+
+#: backend.c:15154 backend.c:15180
+msgid "There is no pending offer on this move"
+msgstr "Er is geen aanbod op deze zet."
+
+#: backend.c:15216 backend.c:15227
+msgid "Your opponent is not out of time"
+msgstr "Uw tegenstander heeft nog tijd."
+
+#: backend.c:15293
+msgid "You must make your move before offering a draw"
+msgstr "U dient uw zet te doen alvorens remise aan te bieden."
+
+#: backend.c:15630
+msgid "You are not examining a game"
+msgstr "U bent geen partij aan het bestuderen."
+
+#: backend.c:15634
+msgid "You can't revert while pausing"
+msgstr "U kunt niet terugdraaien tijdens pauze."
+
+#: backend.c:15688 backend.c:15695
+msgid "It is your turn"
+msgstr "U bent aan zet"
+
+#: backend.c:15746 backend.c:15753 backend.c:15806 backend.c:15813
+#, fuzzy
+msgid "Wait until your turn."
+msgstr "Wacht op uw beurt"
+
+#: backend.c:15758
+msgid "No hint available"
+msgstr "Geen hint beschikbaar"
+
+#: backend.c:15774 ngamelist.c:355
+msgid "Game list not loaded or empty"
+msgstr "Partijenlijst is leeg of niet geladen"
+
+#: backend.c:15781
+msgid "Book file exists! Try again for overwrite."
+msgstr "Bestand bestaat al.  Probeer het opnieuw om deze te overschrijven."
+
+#: backend.c:16259
+#, c-format
+msgid "Error writing to %s chess program"
+msgstr "Fout bij schrijven naar %s schaakprogramma"
+
+#: backend.c:16262 backend.c:16293
+#, c-format
+msgid "%s program exits in draw position (%s)"
+msgstr "%s programma is geëindigd in remisepositie (%s)"
+
+#: backend.c:16288
+#, c-format
+msgid "Error: %s chess program (%s) exited unexpectedly"
+msgstr "Fout: %s schaakprogramma (%s) is onverwacht beëindigd"
+
+#: backend.c:16306
+#, c-format
+msgid "Error reading from %s chess program (%s)"
+msgstr "Fout bij lezen van %s schaakprogramma (%s)"
+
+#: backend.c:16730
+#, c-format
+msgid "%s engine has too many options\n"
+msgstr "%s automaat heeft te veel instellingen\n"
+
+#: backend.c:16886
+msgid "Displayed move is not current"
+msgstr "Getoonde zet is niet de huidige"
+
+#: backend.c:16895
+msgid "Could not parse move"
+msgstr "Kan zet niet ontleden"
+
+#: backend.c:17020 backend.c:17042
+msgid "Both flags fell"
+msgstr "Beide vlaggen zijn gevallen"
+
+#: backend.c:17022
+msgid "White's flag fell"
+msgstr "Wits vlag is gevallen"
+
+#: backend.c:17044
+msgid "Black's flag fell"
+msgstr "Zwarts vlag is gevallen"
+
+#: backend.c:17175
+msgid "Clock adjustment not allowed in auto-flag mode"
+msgstr "Klokbijstelling is niet toegestaan in auto-vlagmodus"
+
+#: backend.c:18025
+msgid "Bad FEN position in clipboard"
+msgstr "Ongeldige FEN-positie op het klembord"
+
+#: book.c:577 book.c:833
+msgid "Polyglot book not valid"
+msgstr "Polyglot-boek is ongeldig"
+
+#: book.c:701
+msgid "Book Fault"
+msgstr "Fout in boek"
+
+#: book.c:836
+msgid "Hash keys are different"
+msgstr "Hash-sleutels zijn verschillend"
+
+#: book.c:1003
+msgid "Could not create book"
+msgstr "Kan geen boek aanmaken"
+
+#: dialogs.c:283
+msgid "Tournament file:          "
+msgstr "Toernooibestand:          "
+
+#: dialogs.c:284
+msgid "For concurrent playing of tourney with multiple XBoards:"
+msgstr ""
+
+#: dialogs.c:285
+msgid "Sync after round"
+msgstr ""
+
+#: dialogs.c:286
+msgid "Sync after cycle"
+msgstr ""
+
+#: dialogs.c:287
+msgid "Tourney participants:"
+msgstr "Toernooi-deelnemers:"
+
+#: dialogs.c:288
+msgid "Select Engine:"
+msgstr "Kies automaat:"
+
+#: dialogs.c:296
+msgid "Tourney type (0 = round-robin, 1 = gauntlet):"
+msgstr "Toernooitype (0 = op-de-rij-af, 1 = handschoen):"
+
+#: dialogs.c:297
+#, fuzzy
+msgid "Number of tourney cycles (or Swiss rounds):"
+msgstr "Aantal toernooirondes:"
+
+#: dialogs.c:298
+msgid "Default Number of Games in Match (or Pairing):"
+msgstr "Standaard aantal partijen in een toernooi (of koppel):"
+
+#: dialogs.c:299
+msgid "Pause between Match Games (msec):"
+msgstr "Pauze tussen toernooipartijen (msec):"
+
+#: dialogs.c:300
+msgid "Save Tourney Games on:"
+msgstr "Toernooipartijen bewaren op:"
+
+#: dialogs.c:301
+msgid "Game File with Opening Lines:"
+msgstr "Partijbestand met openingsregels:"
+
+#: dialogs.c:302
+msgid "Game Number (-1 or -2 = Auto-Increment):"
+msgstr "Partijnummer (-1 of -2 = automatische ophoging):"
+
+#: dialogs.c:303
+msgid "File with Start Positions:"
+msgstr "Bestand met startposities:"
+
+#: dialogs.c:304
+msgid "Position Number (-1 or -2 = Auto-Increment):"
+msgstr "Positienummer (-1 of -2 = automatische ophoging):"
+
+#: dialogs.c:305
+msgid "Rewind Index after this many Games (0 = never):"
+msgstr "Index terugspoelen na dit aantal partijen (0 = nooit):"
+
+#: dialogs.c:306
+msgid "Disable own engine books by default"
+msgstr "Eigen automaatboeken standaard uitschakelen"
+
+#: dialogs.c:307 dialogs.c:1565
+msgid "Time Control"
+msgstr "Tijdsbeperking"
+
+#: dialogs.c:308
+#, fuzzy
+msgid "Common Engine"
+msgstr "Automaten..."
+
+#: dialogs.c:309 dialogs.c:441
+msgid "General Options"
+msgstr "Algemene instellingen"
+
+#: dialogs.c:310
+msgid "Continue Later"
+msgstr ""
+
+#: dialogs.c:311
+msgid "Replace Engine"
+msgstr "Automaat vervangen"
+
+#: dialogs.c:312
+msgid "Upgrade Engine"
+msgstr "Automaat upgraden"
+
+#: dialogs.c:313
+msgid "Clone Tourney"
+msgstr "Toernooi klonen"
+
+#: dialogs.c:351
+msgid "First you must specify an existing tourney file to clone"
+msgstr "U dient eerst een bestaand toernooibestand op te geven."
+
+#: dialogs.c:367 dialogs.c:1407
+#, fuzzy
+msgid "# no engines are installed"
+msgstr "# er zijn geen automaten geïnstalleerd"
+
+#: dialogs.c:375
+msgid "Internal error: PARTICIPANTS set wrong"
+msgstr ""
+
+#: dialogs.c:383
+#, fuzzy
+msgid "Tournament Options"
+msgstr "Geluidsinstellingen"
+
+#: dialogs.c:402
+msgid "Absolute Analysis Scores"
+msgstr "Absolute analysescores"
+
+#: dialogs.c:403
+msgid "Almost Always Queen (Detour Under-Promote)"
+msgstr "Bijna altijd koningin (onderpromotie-omweg)"
+
+#: dialogs.c:404 menus.c:714
+msgid "Animate Dragging"
+msgstr "Slepen animeren"
+
+#: dialogs.c:405 menus.c:715
+msgid "Animate Moving"
+msgstr "Zetten animeren"
+
+#: dialogs.c:406 menus.c:716
+msgid "Auto Flag"
+msgstr "Vanzelf vlaggen"
+
+#: dialogs.c:407 menus.c:717
+msgid "Auto Flip View"
+msgstr "Bord vanzelf draaien"
+
+#: dialogs.c:408 menus.c:718
+msgid "Blindfold"
+msgstr "Geblinddoekt"
+
+#. 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 "Plaatsingsmenu"
+
+#: dialogs.c:411
+msgid "Enable Variation Trees"
+msgstr "Variatiebomen inschakelen"
+
+#: dialogs.c:412
+msgid "Headers in Engine Output Window"
+msgstr ""
+
+#: dialogs.c:413
+msgid "Hide Thinking from Human"
+msgstr "Denken verbergen voor mens"
+
+#: dialogs.c:414 menus.c:723
+msgid "Highlight Last Move"
+msgstr "Laatste zet markeren"
+
+#: dialogs.c:415
+msgid "Highlight with Arrow"
+msgstr "Markeren met pijl"
+
+#: dialogs.c:416 menus.c:726
+msgid "One-Click Moving"
+msgstr "Eenkliks zetten"
+
+#: dialogs.c:417
+msgid "Periodic Updates (in Analysis Mode)"
+msgstr "Periodieke updates (in analysemodus)"
+
+#: dialogs.c:419
+msgid "Play Move(s) of Clicked PV (Analysis)"
+msgstr ""
+
+#: dialogs.c:420 dialogs.c:597 menus.c:728
+msgid "Ponder Next Move"
+msgstr "Volgende zet overdenken"
+
+#: dialogs.c:421
+msgid "Popup Exit Messages"
+msgstr "Popup-afsluitberichten"
+
+#: dialogs.c:422 menus.c:730
+msgid "Popup Move Errors"
+msgstr "Popup-zetfouten"
+
+#: dialogs.c:423
+msgid "Scores in Move List"
+msgstr "Scores in zettenlijst"
+
+#: dialogs.c:424
+msgid "Show Coordinates"
+msgstr "Coördinaten tonen"
+
+#: dialogs.c:425
+msgid "Show Target Squares"
+msgstr "Doelvelden tonen"
+
+#: dialogs.c:426
+msgid "Sticky Windows"
+msgstr ""
+
+#: dialogs.c:427 menus.c:733
+msgid "Test Legality"
+msgstr "Geldigheid testen"
+
+#: dialogs.c:428
+msgid "Top-Level Dialogs"
+msgstr "Topniveau-dialogen"
+
+#: dialogs.c:429
+msgid "Flash Moves (0 = no flashing):"
+msgstr "Zetten knipperen (0 = niet knipperen):"
+
+#: dialogs.c:430
+msgid "Flash Rate (high = fast):"
+msgstr "Knippersnelheid (hoog = snel):"
+
+# XXX  reword
+#: dialogs.c:431
+msgid "Animation Speed (high = slow):"
+msgstr "Animatiesnelheid (hoog = langzaam):"
+
+#: dialogs.c:432
+msgid "Zoom factor in Evaluation Graph:"
+msgstr "Zoomfactor in evaluatiegrafiek:"
+
+#: dialogs.c:452
+#, fuzzy
+msgid "Normal"
+msgstr "normaal"
+
+#: dialogs.c:453
+#, fuzzy
+msgid "Makruk"
+msgstr "Makruk"
+
+#: dialogs.c:454
+msgid "FRC"
+msgstr "FRC"
+
+#: dialogs.c:455
+#, fuzzy
+msgid "Shatranj"
+msgstr "Shatranj"
+
+#: dialogs.c:456
+#, fuzzy
+msgid "Wild castle"
+msgstr "wilde rokade"
+
+#: dialogs.c:457
+#, fuzzy
+msgid "Knightmate"
+msgstr "paardmat"
+
+#: dialogs.c:458
+#, fuzzy
+msgid "No castle"
+msgstr "geen rokade"
+
+#: dialogs.c:459
+#, fuzzy
+msgid "Cylinder *"
+msgstr "cilinder *"
+
+#: dialogs.c:460
+msgid "3-checks"
+msgstr "drie keer schaak"
+
+#: dialogs.c:461
+msgid "berolina *"
+msgstr "berolina *"
+
+#: dialogs.c:462
+msgid "atomic"
+msgstr "atomisch"
+
+#: dialogs.c:463
+msgid "two kings"
+msgstr "twee koningen"
+
+#: dialogs.c:464
+msgid " "
+msgstr " "
+
+#: dialogs.c:465
+msgid "Spartan"
+msgstr "Spartaans"
+
+#: dialogs.c:466
+msgid "Board size ( -1 = default for selected variant):"
+msgstr "Bordafmetingen (-1 = standaard voor de variant):"
+
+#: dialogs.c:467
+msgid "Number of Board Ranks:"
+msgstr "Aantal bordrijen:"
+
+#: dialogs.c:468
+msgid "Number of Board Files:"
+msgstr "Aantal bordlijnen:"
+
+#: dialogs.c:469
+msgid "Holdings Size:"
+msgstr "Stalgrootte:"
+
+#: dialogs.c:471
+msgid ""
+"Variants marked with * can only be played\n"
+"with legality testing off."
+msgstr ""
+
+#: dialogs.c:473
+msgid "ASEAN"
+msgstr ""
+
+#: dialogs.c:474
+msgid "Great Shatranj (10x8)"
+msgstr "Grote Shatranj (10x8)"
+
+#: dialogs.c:475
+msgid "Seirawan"
+msgstr "Seirawan"
+
+#: dialogs.c:476
+#, fuzzy
+msgid "Falcon (10x8)"
+msgstr "Falcon (10x8)"
+
+#: dialogs.c:477
+msgid "Superchess"
+msgstr "Superschaak"
+
+#: dialogs.c:478
+msgid "Capablanca (10x8)"
+msgstr "Capablanca (10x8)"
+
+#: dialogs.c:479
+#, fuzzy
+msgid "Crazyhouse"
+msgstr "crazyhouse"
+
+#: dialogs.c:480
+msgid "Gothic (10x8)"
+msgstr "Gothic (10x8)"
+
+#: dialogs.c:481
+#, fuzzy
+msgid "Bughouse"
+msgstr "bughouse"
+
+#: dialogs.c:482
+#, fuzzy
+msgid "Janus (10x8)"
+msgstr "Janus (10x8)"
+
+#: dialogs.c:483
+#, fuzzy
+msgid "Suicide"
+msgstr "suïcide"
+
+#: dialogs.c:484
+msgid "CRC (10x8)"
+msgstr "CRC (10x8)"
+
+#: dialogs.c:485
+msgid "give-away"
+msgstr "weggever"
+
+#: dialogs.c:486
+msgid "grand (10x10)"
+msgstr "Grand (10x10)"
+
+#: dialogs.c:487
+msgid "losers"
+msgstr "verliezers"
+
+#: dialogs.c:488
+msgid "shogi (9x9)"
+msgstr "Shogi (9x9)"
+
+#: dialogs.c:489
+msgid "fairy"
+msgstr "Fairy"
+
+#: dialogs.c:490
+msgid "xiangqi (9x10)"
+msgstr "Xiangqi (9x10)"
+
+#: dialogs.c:491
+msgid "mighty lion"
+msgstr ""
+
+#: dialogs.c:492
+msgid "courier (12x8)"
+msgstr "Courier (12x8)"
+
+#: dialogs.c:493
+msgid "chu chess (10x10)"
+msgstr ""
+
+#: dialogs.c:494
+#, fuzzy
+msgid "chu shogi (12x12)"
+msgstr "Shogi (9x9)"
+
+#: dialogs.c:526
+#, c-format
+msgid "Warning: second engine (%s) does not support this!"
+msgstr "Waarschuwing: tweede automaat (%s) ondersteunt dit niet."
+
+#: dialogs.c:554
+#, c-format
+msgid "Only bughouse is not available in viewer mode."
+msgstr ""
+
+#: dialogs.c:555
+#, fuzzy, c-format
+msgid ""
+"All variants not supported by the first engine\n"
+"(currently %s) are disabled."
+msgstr ""
+"Varianten die de eerste automaat (momenteel\n"
+"%s) niet kent zijn onkiesbaar."
+
+# XXX "NEW" is confusing, plural is better
+#: dialogs.c:572
+msgid "New Variant"
+msgstr "Varianten"
+
+#: dialogs.c:598
+msgid "Maximum Number of CPUs per Engine:"
+msgstr "Maximum aantal processoren per automaat:"
+
+#: dialogs.c:599
+msgid "Polygot Directory:"
+msgstr "Polygot-map:"
+
+#: dialogs.c:600
+msgid "Hash-Table Size (MB):"
+msgstr "Grootte van hash-tabel (MB):"
+
+#: dialogs.c:601
+msgid "Nalimov EGTB Path:"
+msgstr "Nalimov-EGTB-pad:"
+
+#: dialogs.c:602
+msgid "EGTB Cache Size (MB):"
+msgstr "Grootte van EGTB-cache (MB):"
+
+#: dialogs.c:603
+msgid "Use GUI Book"
+msgstr ""
+
+#: dialogs.c:604
+msgid "Opening-Book Filename:"
+msgstr "Bestandsnaam van openingenboek:"
+
+#: dialogs.c:605
+msgid "Book Depth (moves):"
+msgstr "Boekdiepte (zetten):"
+
+#: dialogs.c:606
+msgid "Book Variety (0) vs. Strength (100):"
+msgstr ""
+
+#: dialogs.c:607
+msgid "Engine #1 Has Own Book"
+msgstr "Automaat #1 heeft eigen boek"
+
+# XXX why the spaces?
+#: dialogs.c:608
+msgid "Engine #2 Has Own Book          "
+msgstr "Automaat #2 heeft eigen boek"
+
+#: dialogs.c:617
+msgid "Common Engine Settings"
+msgstr "Algemene automaatinstellingen"
+
+#: dialogs.c:623
+msgid "Detect all Mates"
+msgstr "Alle matten detecteren"
+
+#: dialogs.c:624
+msgid "Verify Engine Result Claims"
+msgstr "Resultaatclaims van automaat controleren"
+
+#: dialogs.c:625
+msgid "Draw if Insufficient Mating Material"
+msgstr "Remise bij onvoldoende matmateriaal"
+
+#: dialogs.c:626
+msgid "Adjudicate Trivial Draws (3-Move Delay)"
+msgstr "Eenvoudige remises beslissen (3 zetten uitstel)"
+
+#: dialogs.c:627
+msgid "N-Move Rule:"
+msgstr "N-zettenregel:"
+
+#: dialogs.c:628
+msgid "N-fold Repeats:"
+msgstr "N-voudige herhalingen:"
+
+#: dialogs.c:629
+msgid "Draw after N Moves Total:"
+msgstr "Remise na in totaal N zetten:"
+
+#: dialogs.c:630
+msgid "Win / Loss Threshold:"
+msgstr "Winst/verlies-grenswaarde:"
+
+#: dialogs.c:631
+msgid "Negate Score of Engine #1"
+msgstr "Score van automaat 1 negatief maken"
+
+#: dialogs.c:632
+msgid "Negate Score of Engine #2"
+msgstr "Score van automaat 2 negatief maken"
+
+#: dialogs.c:639
+#, fuzzy
+msgid "Adjudicate non-ICS Games"
+msgstr "Non-ICS-partijen beslissen"
+
+#: dialogs.c:652
+msgid "Auto-Kibitz"
+msgstr "Vanzelf kibitzen"
+
+#: dialogs.c:653
+msgid "Auto-Comment"
+msgstr "Vanzelf becommentariëren"
+
+#: dialogs.c:654
+msgid "Auto-Observe"
+msgstr "Vanzelf observeren"
+
+#: dialogs.c:655
+msgid "Auto-Raise Board"
+msgstr ""
+
+#: dialogs.c:656
+msgid "Auto-Create Logon Script"
+msgstr ""
+
+#: dialogs.c:657
+msgid "Background Observe while Playing"
+msgstr "Op achtergrond observeren tijdens spelen"
+
+#: dialogs.c:658
+msgid "Dual Board for Background-Observed Game"
+msgstr "Dubbel bord voor op achtergrond geobserveerde partij"
+
+#: dialogs.c:659
+msgid "Get Move List"
+msgstr "Zettenlijst ophalen"
+
+#: dialogs.c:660
+msgid "Quiet Play"
+msgstr "Stil spelen"
+
+#: dialogs.c:661
+msgid "Seek Graph"
+msgstr "Zoekgrafiek"
+
+#: dialogs.c:662
+msgid "Auto-Refresh Seek Graph"
+msgstr "Zoekgrafiek vanzelf verversen"
+
+#: dialogs.c:663
+msgid "Auto-InputBox PopUp"
+msgstr ""
+
+#: dialogs.c:664
+#, fuzzy
+msgid "Quit after game"
+msgstr "Wachten op andere partij(en)"
+
+#: dialogs.c:665
+msgid "Premove"
+msgstr ""
+
+#: dialogs.c:666
+msgid "Premove for White"
+msgstr ""
+
+#: dialogs.c:667
+msgid "First White Move:"
+msgstr "Eerste zet van wit:"
+
+#: dialogs.c:668
+msgid "Premove for Black"
+msgstr ""
+
+#: dialogs.c:669
+msgid "First Black Move:"
+msgstr "Eerste zet van zwart:"
+
+#: dialogs.c:671
+msgid "Alarm"
+msgstr ""
+
+#: dialogs.c:672
+msgid "Alarm Time (msec):"
+msgstr ""
+
+#: dialogs.c:674
+msgid "Colorize Messages"
+msgstr "Berichten kleuren"
+
+#: dialogs.c:675
+msgid "Shout Text Colors:"
+msgstr "Shout-tekstkleuren:"
+
+#: dialogs.c:676
+msgid "S-Shout Text Colors:"
+msgstr "S-Shout-tekstkleuren:"
+
+#: dialogs.c:677
+msgid "Channel #1 Text Colors:"
+msgstr "Kanaal-1-tekstkleuren:"
+
+#: dialogs.c:678
+msgid "Other Channel Text Colors:"
+msgstr "Anderekanaal-tekstkleuren:"
+
+#: dialogs.c:679
+msgid "Kibitz Text Colors:"
+msgstr "Kibitz-tekstkleuren:"
+
+#: dialogs.c:680
+msgid "Tell Text Colors:"
+msgstr ""
+
+#: dialogs.c:681
+msgid "Challenge Text Colors:"
+msgstr ""
+
+#: dialogs.c:682
+msgid "Request Text Colors:"
+msgstr "Verzoek-tekstkleuren:"
+
+#: dialogs.c:683
+msgid "Seek Text Colors:"
+msgstr "Tekstkleuren voor zoeken:"
+
+#: dialogs.c:690
+msgid "ICS Options"
+msgstr "ICS-instellingen"
+
+#: dialogs.c:695
+msgid "Exact position match"
+msgstr "Exacte positie-overeenkomst"
+
+#: dialogs.c:695
+msgid "Shown position is subset"
+msgstr "Getoonde positie is een subset"
+
+#: dialogs.c:695
+msgid "Same material with exactly same Pawn chain"
+msgstr "Zelfde materiaal met exact dezelfde pionketen"
+
+#: dialogs.c:696
+msgid "Same material"
+msgstr "Zelfde materiaal"
+
+#: dialogs.c:696
+msgid "Material range (top board half optional)"
+msgstr "Materiaalbereik (bovenste bordhelft is optioneel)"
+
+#: dialogs.c:696
+msgid "Material difference (optional stuff balanced)"
+msgstr "Materiaalverschil (optioneel spul is in evenwicht)"
+
+#: dialogs.c:708
+msgid "Auto-Display Tags"
+msgstr "Labels vanzelf tonen"
+
+#: dialogs.c:709
+msgid "Auto-Display Comment"
+msgstr "Opmerkingen vanzelf tonen"
+
+#: dialogs.c:710
+msgid ""
+"Auto-Play speed of loaded games\n"
+"(0 = instant, -1 = off):"
+msgstr ""
+"Speelsnelheid van geladen partijen\n"
+"(0 = instantaan, -1 = uit):"
+
+#: dialogs.c:711
+msgid "Seconds per Move:"
+msgstr "Seconden per zet:"
+
+#: dialogs.c:712
+msgid ""
+"\n"
+"options to use in game-viewer mode:"
+msgstr ""
+
+#: dialogs.c:714
+msgid ""
+"\n"
+"Thresholds for position filtering in game list:"
+msgstr ""
+
+#: dialogs.c:715
+msgid "Elo of strongest player at least:"
+msgstr "Elo van sterkste speler minstens:"
+
+#: dialogs.c:716
+msgid "Elo of weakest player at least:"
+msgstr "Elo van zwakste speler minstens:"
+
+#: dialogs.c:717
+msgid "No games before year:"
+msgstr "Geen partijen vóór het jaar:"
+
+#: dialogs.c:718
+msgid "Minimum nr consecutive positions:"
+msgstr "Minimum aantal opeenvolgende posities:"
+
+#: dialogs.c:719
+msgid "Search mode:"
+msgstr "Zoekmodus:"
+
+#: dialogs.c:720
+msgid "Also match reversed colors"
+msgstr "Ook matchen met verwisselde kleuren"
+
+#: dialogs.c:721
+msgid "Also match left-right flipped position"
+msgstr "Ook matchen met links-rechts gespiegelde positie"
+
+#: dialogs.c:729
+msgid "Load Game Options"
+msgstr "Partij-instellingen laden"
+
+#: dialogs.c:741
+msgid "Auto-Save Games"
+msgstr "Partijen vanzelf opslaan"
+
+#: dialogs.c:742
+msgid "Own Games Only"
+msgstr "Alleen eigen partijen"
+
+#: dialogs.c:743
+msgid "Save Games on File:"
+msgstr "Partijen opslaan in:"
+
+#: dialogs.c:744
+msgid "Save Final Positions on File:"
+msgstr "Eindposities opslaan in:"
+
+#: dialogs.c:745
+msgid "PGN Event Header:"
+msgstr ""
+
+#: dialogs.c:746
+msgid "Old Save Style (as opposed to PGN)"
+msgstr ""
+
+#: dialogs.c:747
+msgid "Include Number Tag in tourney PGN"
+msgstr "Nummerlabel in toernooi-PGN opnemen"
+
+#: dialogs.c:748
+msgid "Save Score/Depth Info in PGN"
+msgstr ""
+
+#: dialogs.c:749
+msgid "Save Out-of-Book Info in PGN           "
+msgstr ""
+
+#: dialogs.c:756
+msgid "Save Game Options"
+msgstr "Partij-instellingen opslaan"
+
+#: dialogs.c:765
+msgid "No Sound"
+msgstr "(geen geluid)"
+
+#: dialogs.c:766
+msgid "Default Beep"
+msgstr "Standaardpiep"
+
+#: dialogs.c:767
+msgid "Above WAV File"
+msgstr "Bovenstaande WAV"
+
+#: dialogs.c:768
+msgid "Car Horn"
+msgstr "Claxon"
+
+#: dialogs.c:769
+msgid "Cymbal"
+msgstr "Cymbaal"
+
+#: dialogs.c:770
+msgid "Ding"
+msgstr "Tink"
+
+#: dialogs.c:771
+msgid "Gong"
+msgstr "Gong"
+
+#: dialogs.c:772
+msgid "Laser"
+msgstr "Laser"
+
+#: dialogs.c:773
+msgid "Penalty"
+msgstr "Zoemer"
+
+#: dialogs.c:774
+msgid "Phone"
+msgstr "Telefoon"
+
+#: dialogs.c:775
+msgid "Pop"
+msgstr "Plop"
+
+#: dialogs.c:776
+msgid "Roar"
+msgstr ""
+
+#: dialogs.c:777
+msgid "Slap"
+msgstr "Klap"
+
+#: dialogs.c:778
+msgid "Wood Thunk"
+msgstr "Houtplok"
+
+#: dialogs.c:780
+msgid "User File"
+msgstr "Gebruikersbestand"
+
+#: dialogs.c:803
+msgid "User WAV File:"
+msgstr "Eigen WAV-bestand:"
+
+#: dialogs.c:804
+msgid "Sound Program:"
+msgstr "Geluidsprogramma:"
+
+#: dialogs.c:805
+msgid "Try-Out Sound:"
+msgstr "Dit geluid proberen:"
+
+#: dialogs.c:806
+msgid "Play"
+msgstr "Afspelen"
+
+#: dialogs.c:807
+msgid "Move:"
+msgstr "Zet:"
+
+#: dialogs.c:808
+msgid "Win:"
+msgstr "Gewonnen:"
+
+#: dialogs.c:809
+msgid "Lose:"
+msgstr "Verloren:"
+
+#: dialogs.c:810
+msgid "Draw:"
+msgstr "Remise:"
+
+#: dialogs.c:811
+msgid "Unfinished:"
+msgstr "Onafgemaakt:"
+
+#: dialogs.c:812
+msgid "Alarm:"
+msgstr ""
+
+#: dialogs.c:813
+msgid "Challenge:"
+msgstr ""
+
+#: dialogs.c:815
+msgid "Sounds Directory:"
+msgstr "Geluidenmap:"
+
+#: dialogs.c:816
+msgid "Shout:"
+msgstr ""
+
+#: dialogs.c:817
+msgid "S-Shout:"
+msgstr ""
+
+#: dialogs.c:818
+msgid "Channel:"
+msgstr "Kanaal:"
+
+#: dialogs.c:819
+msgid "Channel 1:"
+msgstr "Kanaal 1:"
+
+#: dialogs.c:820
+msgid "Tell:"
+msgstr "Mededeling"
+
+#: dialogs.c:821
+msgid "Kibitz:"
+msgstr "Kibitz:"
+
+#: dialogs.c:822
+msgid "Request:"
+msgstr "Verzoek:"
+
+#: dialogs.c:823
+msgid "Lion roar:"
+msgstr ""
+
+#: dialogs.c:824
+msgid "Seek:"
+msgstr "Zoeken:"
+
+#: dialogs.c:840
+msgid "Sound Options"
+msgstr "Geluidsinstellingen"
+
+#: dialogs.c:861
+msgid "White Piece Color:"
+msgstr "Kleur van wit stuk:"
+
+#. TRANSLATORS: R = single letter for the color red
+#: dialogs.c:864 dialogs.c:873 dialogs.c:879 dialogs.c:885 dialogs.c:891
+#: dialogs.c:897
+msgid "R"
+msgstr "R"
+
+#. TRANSLATORS: G = single letter for the color green
+#: dialogs.c:866 dialogs.c:874 dialogs.c:880 dialogs.c:886 dialogs.c:892
+#: dialogs.c:898
+msgid "G"
+msgstr "G"
+
+#. TRANSLATORS: B = single letter for the color blue
+#: dialogs.c:868 dialogs.c:875 dialogs.c:881 dialogs.c:887 dialogs.c:893
+#: dialogs.c:899
+msgid "B"
+msgstr "B"
+
+#. TRANSLATORS: D = single letter to make a color darker
+#: dialogs.c:870 dialogs.c:876 dialogs.c:882 dialogs.c:888 dialogs.c:894
+#: dialogs.c:900
+msgid "D"
+msgstr "D"
+
+#: dialogs.c:871
+msgid "Black Piece Color:"
+msgstr "Kleur van zwart stuk:"
+
+#: dialogs.c:877
+msgid "Light Square Color:"
+msgstr "Kleur van licht veld:"
+
+#: dialogs.c:883
+msgid "Dark Square Color:"
+msgstr "Kleur van donker veld:"
+
+#: dialogs.c:889
+msgid "Highlight Color:"
+msgstr "Markeringskleur:"
+
+#: dialogs.c:895
+msgid "Premove Highlight Color:"
+msgstr ""
+
+#: dialogs.c:901
+msgid "Flip Pieces Shogi Style        (Colored buttons restore default)"
+msgstr ""
+
+#: dialogs.c:903
+msgid "Mono Mode"
+msgstr ""
+
+#: dialogs.c:904
+msgid "Line Gap (-1 = default for board size):"
+msgstr ""
+
+#: dialogs.c:905
+msgid "Use Board Textures"
+msgstr "Bordtexturen gebruiken"
+
+#: dialogs.c:906
+msgid "Light-Squares Texture File:"
+msgstr "Textuurbestand voor lichte velden:"
+
+#: dialogs.c:907
+msgid "Dark-Squares Texture File:"
+msgstr "Textuurbestand voor donkere velden:"
+
+#: dialogs.c:908
+msgid "Use external piece bitmaps with their own colors"
+msgstr ""
+
+#: dialogs.c:909
+msgid "Directory with Pieces Images:"
+msgstr "Map met afbeeldingen van stukken:"
+
+#: dialogs.c:959
+msgid "Board Options"
+msgstr "Bordinstellingen"
+
+#: dialogs.c:1012 menus.c:634
+msgid "ICS text menu"
+msgstr "ICS-tekstmenu"
+
+#: dialogs.c:1034
+msgid "clear"
+msgstr "wissen"
+
+#: dialogs.c:1035 dialogs.c:1123
+msgid "save changes"
+msgstr "wijzigingen opslaan"
+
+#: dialogs.c:1138
+msgid "Edit book"
+msgstr "Boek bewerken"
+
+#: dialogs.c:1138 menus.c:636
+msgid "Tags"
+msgstr "Labels"
+
+#: dialogs.c:1280
+msgid "ICS input box"
+msgstr "ICS-invoervak"
+
+#: dialogs.c:1312
+msgid "Type a move"
+msgstr "Typ een zet"
+
+#: dialogs.c:1338
+msgid "Engine has no options"
+msgstr "Automaat kent geen instellingen."
+
+#: dialogs.c:1340
+msgid "Engine Settings"
+msgstr "Automaatinstellingen"
+
+#: dialogs.c:1365
+msgid "Select engine from list:"
+msgstr "Selecteer een automaat uit de lijst:"
+
+#: dialogs.c:1368
+msgid "or specify one below:"
+msgstr "of geef er hieronder een op:"
+
+#: dialogs.c:1369
+msgid "Nickname (optional):"
+msgstr "Bijnaam (optioneel):"
+
+#: dialogs.c:1370
+msgid "Use nickname in PGN player tags of engine-engine games"
+msgstr ""
+
+#: dialogs.c:1371
+msgid "Engine Directory:"
+msgstr "Automatenmap:"
+
+#: dialogs.c:1372
+msgid "Engine Command:"
+msgstr "Automaatopdracht:"
+
+#: dialogs.c:1373
+msgid "(Directory will be derived from engine path when empty)"
+msgstr "(map wordt afgeleid uit automaatpad indien leeg)"
+
+#: dialogs.c:1374
+msgid "UCI"
+msgstr "UCI"
+
+#: dialogs.c:1375
+msgid "WB protocol v1 (do not wait for engine features)"
+msgstr ""
+
+#: dialogs.c:1376
+msgid "Must not use GUI book"
+msgstr ""
+
+#: dialogs.c:1377
+msgid "Add this engine to the list"
+msgstr "Deze automaat aan de lijst toevoegen"
+
+#: dialogs.c:1378
+msgid "Force current variant with this engine"
+msgstr "Huidige variant opdringen aan deze automaat"
+
+#: dialogs.c:1428
+msgid "Load first engine"
+msgstr "Eerste automaat laden"
+
+#: dialogs.c:1434
+msgid "Load second engine"
+msgstr "Tweede automaat laden"
+
+# XXX gets truncated to 7 chars
+#: dialogs.c:1457
+msgid "shuffle"
+msgstr "Husselen"
+
+#: dialogs.c:1458
+msgid "Start-position number:"
+msgstr "Startpositienummer:"
+
+#: dialogs.c:1459
+msgid "randomize"
+msgstr "Willekeurig"
+
+#: dialogs.c:1460
+msgid "pick fixed"
+msgstr "Vaste kiezen"
+
+#: dialogs.c:1477
+msgid "New Shuffle Game"
+msgstr "Husselpartij"
+
+#: dialogs.c:1496
+msgid "classical"
+msgstr "Klassiek"
+
+#: dialogs.c:1497
+msgid "incremental"
+msgstr "Ophogend"
+
+#: dialogs.c:1498
+msgid "fixed max"
+msgstr "Vast maximum"
+
+#: dialogs.c:1499
+msgid "Moves per session:"
+msgstr "Zetten per sessie:"
+
+#: dialogs.c:1500
+msgid "Initial time (min):"
+msgstr "Begintijd (minuten)"
+
+#: dialogs.c:1501
+msgid "Increment or max (sec/move):"
+msgstr "Ophoging of maximaal (sec/zet):"
+
+#: dialogs.c:1502
+msgid "Time-Odds factors:"
+msgstr "Tijdsfactoren:"
+
+#: dialogs.c:1503
+msgid "Engine #1"
+msgstr "Automaat 1"
+
+#: dialogs.c:1504
+msgid "Engine #2 / Human"
+msgstr "Automaat 2 / Mens"
+
+# XXX gets truncated at start to 8 chars
+#: dialogs.c:1544 dialogs.c:1547 dialogs.c:1552 dialogs.c:1553
+#: gtk/xoptions.c:194
+msgid "Unused"
+msgstr "(loos)"
+
+#: dialogs.c:1594
+msgid "Error writing to chess program"
+msgstr "Fout bij schrijven naar schaakprogramma"
+
+#: dialogs.c:1662 xaw/xoptions.c:1276
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: dialogs.c:1667 dialogs.c:2061 dialogs.c:2065
+msgid "King"
+msgstr "Koning"
+
+#: dialogs.c:1670
+msgid "Captain"
+msgstr "Kapitein"
+
+#: dialogs.c:1671
+msgid "Lieutenant"
+msgstr "Luitenant"
+
+#: dialogs.c:1672
+msgid "General"
+msgstr "Generaal"
+
+#: dialogs.c:1673
+msgid "Warlord"
+msgstr "Krijgsheer"
+
+#: dialogs.c:1675 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
+msgid "Knight"
+msgstr "Paard"
+
+#: dialogs.c:1676 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
+msgid "Bishop"
+msgstr "Loper"
+
+#: dialogs.c:1677 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
+msgid "Rook"
+msgstr "Toren"
+
+#: dialogs.c:1681 dialogs.c:2062 dialogs.c:2066
+msgid "Archbishop"
+msgstr "Aartsbisschop"
+
+#: dialogs.c:1682 dialogs.c:2062 dialogs.c:2066
+msgid "Chancellor"
+msgstr "Kanselier"
+
+#: dialogs.c:1684 dialogs.c:2061 dialogs.c:2065 dialogs.c:2083
+msgid "Queen"
+msgstr "Koningin"
+
+#: dialogs.c:1686
+msgid "Lion"
+msgstr ""
+
+#: dialogs.c:1690
+msgid "Defer"
+msgstr "Uitstellen"
+
+#: dialogs.c:1691 dialogs.c:2062 dialogs.c:2066
+msgid "Promote"
+msgstr "Promoveren"
+
+#: dialogs.c:1706
+msgid "Chat partner:"
+msgstr "Chatpartner:"
+
+#: dialogs.c:1791
+msgid "Chat box"
+msgstr "Chatbox"
+
+#: dialogs.c:1832
+msgid "factory"
+msgstr "origineel"
+
+#: dialogs.c:1833
+msgid "up"
+msgstr "omhoog"
+
+#: dialogs.c:1834
+msgid "down"
+msgstr "omlaag"
+
+#: dialogs.c:1852
+msgid "No tag selected"
+msgstr "Geen label geselecteerd"
+
+#: dialogs.c:1883
+msgid "Game-list options"
+msgstr "Partijenlijst-instellingen"
+
+#: dialogs.c:1959 dialogs.c:1973
+msgid "Error"
+msgstr "Fout"
+
+#: dialogs.c:1996
+msgid "Fatal Error"
+msgstr "Fatale fout"
+
+#: dialogs.c:1996
+msgid "Exiting"
+msgstr "Afsluiten"
+
+#: dialogs.c:2007
+msgid "Information"
+msgstr "Informatie"
+
+#: dialogs.c:2014
+msgid "Note"
+msgstr "Notitie"
+
+#: dialogs.c:2060 dialogs.c:2340 dialogs.c:2343
+msgid "White"
+msgstr "Wit"
+
+#: dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
+msgid "Pawn"
+msgstr "Pion"
+
+#: dialogs.c:2061 dialogs.c:2065
+msgid "Elephant"
+msgstr "Olifant"
+
+#: dialogs.c:2061 dialogs.c:2065
+msgid "Cannon"
+msgstr "Kanon"
+
+#: dialogs.c:2062 dialogs.c:2066
+msgid "Demote"
+msgstr "Degraderen"
+
+#: dialogs.c:2063 dialogs.c:2067
+msgid "Empty square"
+msgstr "Leeg veld"
+
+#: dialogs.c:2063 dialogs.c:2067
+msgid "Clear board"
+msgstr "Bord leegmaken"
+
+#: dialogs.c:2064 dialogs.c:2352 dialogs.c:2355
+msgid "Black"
+msgstr "Zwart"
+
+#: dialogs.c:2163 menus.c:787
+msgid "File"
+msgstr "Bestand"
+
+#: dialogs.c:2164 menus.c:788
+msgid "Edit"
+msgstr "Bewerken"
+
+#: dialogs.c:2165 menus.c:789
+msgid "View"
+msgstr "Weergave"
+
+#: dialogs.c:2166 menus.c:790
+msgid "Mode"
+msgstr "Modus"
+
+#: dialogs.c:2167 menus.c:791
+msgid "Action"
+msgstr "Acties"
+
+#: dialogs.c:2168 menus.c:792
+msgid "Engine"
+msgstr "Automaat"
+
+# XXX "Instellingen" is te lang, wordt afgeknabbeld.
+#: dialogs.c:2169 menus.c:793
+msgid "Options"
+msgstr "Opties"
+
+#: dialogs.c:2170 menus.c:794
+msgid "Help"
+msgstr "Hulp"
+
+#: dialogs.c:2180
+msgid "<<"
+msgstr "<<"
+
+#: dialogs.c:2181
+msgid "<"
+msgstr "<"
+
+#: dialogs.c:2183
+msgid ">"
+msgstr ">"
+
+#: dialogs.c:2184
+msgid ">>"
+msgstr ">>"
+
+#: dialogs.c:2458
+msgid "Directories:"
+msgstr "Mappen:"
+
+#: dialogs.c:2459
+msgid "Files:"
+msgstr "Bestanden:"
+
+#: dialogs.c:2460
+msgid "by name"
+msgstr "op naam"
+
+#: dialogs.c:2461
+msgid "by type"
+msgstr "op type"
+
+#: dialogs.c:2464
+msgid "Filename:"
+msgstr "Bestandsnaam:"
+
+#: dialogs.c:2465
+msgid "New directory"
+msgstr "Nieuwe map"
+
+#: dialogs.c:2466
+msgid "File type:"
+msgstr "Bestandstype:"
+
+#: dialogs.c:2541
+msgid "Contents of"
+msgstr "Inhoud van"
+
+#: dialogs.c:2567
+msgid "  next page"
+msgstr "  volgende pagina"
+
+#: dialogs.c:2584
+msgid "FIRST TYPE DIRECTORY NAME HERE"
+msgstr "Typ hier eerst een mapnaam"
+
+#: dialogs.c:2585
+msgid "TRY ANOTHER NAME"
+msgstr "Kies een andere naam"
+
+#: draw.c:310
+#, fuzzy
+msgid ""
+"No default pieces installed!\n"
+"Select your own using '-pieceImageDirectory'."
+msgstr ""
+"Geen standaardstukken geïnstalleerd.\n"
+"Kies uw eigen '-pieceImageDirectory'."
+
+#: engineoutput.c:110 menus.c:630
+#, c-format
+msgid "Engine Output"
+msgstr "Automaatuitvoer"
+
+#: engineoutput.c:120
+#, c-format
+msgid "%s (%d reversible ply)"
+msgid_plural "%s (%d reversible plies)"
+msgstr[0] "%s (%d omkeerbare ply)"
+msgstr[1] "%s (%d omkeerbare plies)"
+
+#: engineoutput.c:542 engineoutput.c:545 nengineoutput.c:82 nengineoutput.c:90
+msgid "NPS"
+msgstr "NPS"
+
+#: gamelist.c:375
+#, c-format
+msgid "Reading game file (%d)"
+msgstr "Lezen van partijbestand (%d)"
+
+#: gtk/xboard.c:867 xaw/xboard.c:1052
+#, c-format
+msgid "%s: can't cd to CHESSDIR: "
+msgstr "%s: Kan huidige map niet wijzigen naar CHESSDIR: "
+
+#: gtk/xboard.c:876 xaw/xboard.c:1061
+#, c-format
+msgid "Failed to open file '%s'\n"
+msgstr "Kan bestand '%s' niet openen\n"
+
+#: gtk/xboard.c:891 xaw/xboard.c:1070
+msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size"
+msgstr ""
+
+#: gtk/xboard.c:910 xaw/xboard.c:1102
+#, c-format
+msgid "%s: bad boardSize syntax %s\n"
+msgstr ""
+
+#: gtk/xboard.c:950 xaw/xboard.c:1139
+#, c-format
+msgid "%s: unrecognized boardSize name %s\n"
+msgstr ""
+
+#: gtk/xboard.c:991 xaw/xboard.c:1176
+#, 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:1281 xaw/xboard.c:1458
+#, c-format
+msgid "Unable to create font set for %s.\n"
+msgstr "Kan geen lettertypenset aanmaken voor %s.\n"
+
+#: gtk/xboard.c:1306 xaw/xboard.c:1481
+#, 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:1745 xaw/xboard.c:1971
+msgid "Can't open temp file"
+msgstr "Kan tijdelijk bestand niet openen"
+
+#: gtk/xboard.c:2199
+msgid "Failed to open file"
+msgstr "Kan bestand niet openen"
+
+#: menus.c:134
+msgid "Load game file name?"
+msgstr "Partij laden uit bestand:"
+
+#: menus.c:179
+msgid "Load position file name?"
+msgstr "Positie laden uit bestand:"
+
+#: menus.c:185
+msgid "Save game file name?"
+msgstr "Partij opslaan in bestand:"
+
+#: menus.c:194
+msgid "Save position file name?"
+msgstr "Positie opslaan in bestand:"
+
+#: menus.c:358
+msgid " (with Zippy code)"
+msgstr " (met Zippy-code)"
+
+#: menus.c:363
+#, fuzzy, 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"
+"Uitbreidingen Copyright 1992-2013 Free Software Foundation\n"
+"Uitbreidingen Copyright 2005 Alessandro Scotti\n"
+"\n"
+"%s is vrije software en kent GEEN GARANTIE;\n"
+"zie het bestand COPYING voor meer informatie.\n"
+"De GTK-versie is experimenteel en nog niet stabiel.\n"
+"\n"
+"Bezoek XBoard op het web: http://www.gnu.org/software/xboard/\n"
+"Voor nieuwe functies zie: http://www.gnu.org/software/xboard/whats_new.html\n"
+"\n"
+"Rapporteer gebreken in het programma aan <bug-xboard@gnu.org>;\n"
+"meld vertaalfouten aan <vertaling@vrijschrift.org>.\n"
+"\n"
+
+#: menus.c:375 menus.c:750
+msgid "About XBoard"
+msgstr "Over XBoard"
+
+#: menus.c:582
+msgid "New Game"
+msgstr "Nieuwe partij"
+
+#: menus.c:583
+#, fuzzy
+msgid "New Shuffle Game..."
+msgstr "Nieuwe husselpartij..."
+
+# XXX "NEW" is wrong
+#: menus.c:584
+#, fuzzy
+msgid "New Variant..."
+msgstr "Nieuwe variantpartij..."
+
+#: menus.c:586
+msgid "Load Game"
+msgstr "Partij laden"
+
+#: menus.c:587
+msgid "Load Position"
+msgstr "Positie laden"
+
+#: menus.c:588
+msgid "Next Position"
+msgstr "Volgende positie"
+
+#: menus.c:589
+msgid "Prev Position"
+msgstr "Vorige positie"
+
+#: menus.c:591
+msgid "Save Game"
+msgstr "Partij opslaan"
+
+#: menus.c:592
+msgid "Save Position"
+msgstr "Positie opslaan"
+
+#: menus.c:593
+msgid "Save Games as Book"
+msgstr "Partijen opslaan als boek"
+
+#: menus.c:595
+msgid "Mail Move"
+msgstr "Zet mailen"
+
+#: menus.c:596
+msgid "Reload CMail Message"
+msgstr "CMail-bericht herladen"
+
+#: menus.c:598
+msgid "Quit "
+msgstr "Afsluiten "
+
+#: menus.c:603
+msgid "Copy Game"
+msgstr "Partij kopiëren"
+
+#: menus.c:604
+msgid "Copy Position"
+msgstr "Positie kopiëren"
+
+#: menus.c:605
+msgid "Copy Game List"
+msgstr "Partijenlijst kopiëren"
+
+#: menus.c:607
+msgid "Paste Game"
+msgstr "Partij plakken"
+
+#: menus.c:608
+msgid "Paste Position"
+msgstr "Positie plakken"
+
+#: menus.c:610 menus.c:652
+msgid "Edit Game"
+msgstr "Partij bewerken"
+
+#: menus.c:611 menus.c:653
+msgid "Edit Position"
+msgstr "Positie bewerken"
+
+#: menus.c:612
+msgid "Edit Tags"
+msgstr "Labels bewerken"
+
+#: menus.c:613
+msgid "Edit Comment"
+msgstr "Opmerking bewerken"
+
+#: menus.c:614
+msgid "Edit Book"
+msgstr "Boek bewerken"
+
+#: menus.c:616
+msgid "Revert"
+msgstr "Terugdraaien"
+
+#: menus.c:617
+msgid "Annotate"
+msgstr "Annoteren"
+
+#: menus.c:618
+msgid "Truncate Game"
+msgstr "Partij afkappen"
+
+#: menus.c:620
+msgid "Backward"
+msgstr "Achterwaarts"
+
+#: menus.c:621
+msgid "Forward"
+msgstr "Voorwaarts"
+
+#: menus.c:622
+msgid "Back to Start"
+msgstr "Terug naar begin"
+
+#: menus.c:623
+msgid "Forward to End"
+msgstr "Vooruit naar einde"
+
+#: menus.c:628
+msgid "Flip View"
+msgstr "Bord draaien"
+
+#: menus.c:631
+msgid "Move History"
+msgstr "Zettengeschiedenis"
+
+#: menus.c:632
+msgid "Evaluation Graph"
+msgstr "Evaluatiegrafiek"
+
+#: menus.c:633
+msgid "Game List"
+msgstr "Partijenlijst"
+
+#: menus.c:637
+msgid "Comments"
+msgstr "Opmerkingen"
+
+#: menus.c:638
+msgid "ICS Input Box"
+msgstr "ICS-invoervak"
+
+#: menus.c:639
+msgid "Open Chat Window"
+msgstr "Chatvenster openen"
+
+#: menus.c:641
+msgid "Board..."
+msgstr "Bord..."
+
+#: menus.c:642
+msgid "Game List Tags..."
+msgstr "Partijenlijst-labels..."
+
+#: menus.c:647
+msgid "Machine White"
+msgstr "Automaat heeft wit"
+
+#: menus.c:648
+msgid "Machine Black"
+msgstr "Automaat heeft zwart"
+
+#: menus.c:649
+msgid "Two Machines"
+msgstr "Twee automaten"
+
+#: menus.c:650
+msgid "Analysis Mode"
+msgstr "Analysemodus"
+
+#: menus.c:651
+msgid "Analyze Game"
+msgstr "Partij analyseren"
+
+#: menus.c:654
+msgid "Training"
+msgstr "Training"
+
+#: menus.c:655
+msgid "ICS Client"
+msgstr "ICS-cliënt"
+
+#: menus.c:657
+msgid "Machine Match"
+msgstr "Automatentoernooi"
+
+#: menus.c:658
+msgid "Pause"
+msgstr "Pauzeren"
+
+#: menus.c:663
+msgid "Accept"
+msgstr "Accepteren"
+
+#: menus.c:664
+msgid "Decline"
+msgstr "Weigeren"
+
+#: menus.c:665
+msgid "Rematch"
+msgstr ""
+
+#: menus.c:667
+msgid "Call Flag"
+msgstr "'Vlag' roepen"
+
+#: menus.c:668
+msgid "Draw"
+msgstr "Remise"
+
+#: menus.c:669
+msgid "Adjourn"
+msgstr "Opschorten"
+
+#: menus.c:670
+msgid "Abort"
+msgstr "Afbreken"
+
+#: menus.c:671
+msgid "Resign"
+msgstr "Opgeven"
+
+#: menus.c:673
+msgid "Stop Observing"
+msgstr "Stoppen met observeren"
+
+#: menus.c:674
+msgid "Stop Examining"
+msgstr "Stoppen met bestuderen"
+
+#: menus.c:675
+msgid "Upload to Examine"
+msgstr "Uploaden om te bestuderen"
+
+#: menus.c:677
+msgid "Adjudicate to White"
+msgstr "Winst aan wit toekennen"
+
+#: menus.c:678
+msgid "Adjudicate to Black"
+msgstr "Winst aan zwart toekennen"
+
+#: menus.c:679
+msgid "Adjudicate Draw"
+msgstr "Tot remise besluiten"
+
+#: menus.c:684
+#, fuzzy
+msgid "Load New 1st Engine..."
+msgstr "Nieuwe 1ste automaat laden..."
+
+#: menus.c:685
+#, fuzzy
+msgid "Load New 2nd Engine..."
+msgstr "Nieuwe 2de automaat laden..."
+
+#: menus.c:687
+#, fuzzy
+msgid "Engine #1 Settings..."
+msgstr "Instellingen van automaat 1..."
+
+#: menus.c:688
+#, fuzzy
+msgid "Engine #2 Settings..."
+msgstr "Instellingen van automaat 2..."
+
+#: menus.c:690
+msgid "Hint"
+msgstr "Hint"
+
+#: menus.c:691
+msgid "Book"
+msgstr "Boek"
+
+#: menus.c:693
+msgid "Move Now"
+msgstr "Nu zetten"
+
+#: menus.c:694
+msgid "Retract Move"
+msgstr "Zet terugnemen"
+
+#: menus.c:700
+#, fuzzy
+msgid "General..."
+msgstr "Algemeen..."
+
+#: menus.c:702
+#, fuzzy
+msgid "Time Control..."
+msgstr "Tijdsbeperking..."
+
+#: menus.c:703
+#, fuzzy
+msgid "Common Engine..."
+msgstr "Automaten..."
+
+#: menus.c:704
+#, fuzzy
+msgid "Adjudications..."
+msgstr "Beslissingen..."
+
+#: menus.c:705
+msgid "ICS..."
+msgstr ""
+
+#: menus.c:706
+msgid "Tournament..."
+msgstr ""
+
+#: menus.c:707
+#, fuzzy
+msgid "Load Game..."
+msgstr "Partij laden..."
+
+#: menus.c:708
+#, fuzzy
+msgid "Save Game..."
+msgstr "Partij opslaan..."
+
+#: menus.c:709
+#, fuzzy
+msgid "Game List..."
+msgstr "Partijenlijst..."
+
+#: menus.c:710
+#, fuzzy
+msgid "Sounds..."
+msgstr "Geluiden..."
+
+#: menus.c:713
+msgid "Always Queen"
+msgstr "Altijd koningin"
+
+#: menus.c:719
+msgid "Flash Moves"
+msgstr "Zetten laten knipperen"
+
+#: menus.c:721
+msgid "Highlight Dragging"
+msgstr "Slepen markeren"
+
+#: menus.c:724
+msgid "Highlight With Arrow"
+msgstr "Markeren met pijl"
+
+#: menus.c:725
+msgid "Move Sound"
+msgstr "Zetgeluid"
+
+#: menus.c:727
+msgid "Periodic Updates"
+msgstr "Periodieke updates"
+
+#: menus.c:729
+msgid "Popup Exit Message"
+msgstr "Popup-afsluitbericht"
+
+#: menus.c:731
+msgid "Show Coords"
+msgstr "Coördinaten tonen"
+
+#: menus.c:732
+msgid "Hide Thinking"
+msgstr "Denken verbergen"
+
+#: menus.c:736
+msgid "Save Settings Now"
+msgstr "Instellingen nu opslaan"
+
+#: menus.c:737
+msgid "Save Settings on Exit"
+msgstr "Instellingen opslaan bij afsluiten"
+
+#: menus.c:742
+msgid "Info XBoard"
+msgstr "'info xboard'"
+
+#: menus.c:743
+msgid "Man XBoard"
+msgstr "'man xboard'"
+
+#: menus.c:745
+msgid "XBoard Home Page"
+msgstr "Webpagina van XBoard"
+
+#: menus.c:746
+msgid "On-line User Guide"
+msgstr "Online gebruikersgids"
+
+#: menus.c:747
+msgid "Development News"
+msgstr "Ontwikkelingsnieuws"
+
+#: menus.c:748
+msgid "e-Mail Bug Report"
+msgstr "Foutrapportage mailen"
+
+#: nengineoutput.c:78 nengineoutput.c:86
+msgid "engine name"
+msgstr "automaatnaam"
+
+#. TRANSLATORS: noun, as in "the move Nf3"
+#: nengineoutput.c:81 nengineoutput.c:89
+msgid "move"
+msgstr "zetten"
+
+#: nengineoutput.c:155
+msgid "Engine output"
+msgstr "Automaatuitvoer"
+
+#: nengineoutput.c:159
+msgid ""
+"Mismatch of STRIDE in nengineoutput.c\n"
+"Change and recompile!"
+msgstr ""
+"*** Niet-passende 'STRIDE' in 'nengineoutput.c'.\n"
+"Pas deze aan en hercompileer."
+
+#: nevalgraph.c:68
+msgid "Evaluation graph"
+msgstr "Evaluatiegrafiek"
+
+#: nevalgraph.c:105
+msgid "Eval"
+msgstr ""
+
+#: ngamelist.c:87
+msgid "find position"
+msgstr "positie vinden"
+
+#: ngamelist.c:88
+msgid "narrow"
+msgstr "nauw"
+
+#: ngamelist.c:89
+msgid "thresholds"
+msgstr "grenswaarden"
+
+#: ngamelist.c:90
+msgid "tags"
+msgstr "labels"
+
+#: ngamelist.c:91
+msgid "next"
+msgstr "volgende"
+
+#: ngamelist.c:92
+msgid "close"
+msgstr "sluiten"
+
+#: ngamelist.c:116
+msgid "No game selected"
+msgstr "Geen partij geselecteerd"
+
+#: ngamelist.c:122
+msgid "Can't go forward any further"
+msgstr "Kan niet nog verder vooruitgaan"
+
+#: ngamelist.c:192
+#, c-format
+msgid "Scanning through games (%d)"
+msgstr "Zoeken door partijen (%d)"
+
+#: ngamelist.c:211
+msgid "previous page"
+msgstr "voorgaande pagina"
+
+#: ngamelist.c:214
+msgid "next page"
+msgstr "volgende pagina"
+
+#: ngamelist.c:217
+msgid "no games matched your request"
+msgstr "er zijn geen partijen die overeenkomen met uw verzoek"
+
+#: ngamelist.c:219
+#, c-format
+msgid "%s - %d/%d games (%d-%d-%d)"
+msgstr "%s - %d/%d partijen (%d-%d-%d)"
+
+#: ngamelist.c:274
+msgid "There is no game list"
+msgstr "Er is geen partijenlijst"
+
+#: nhistory.c:109
+msgid "Move list"
+msgstr "Zettenlijst"
+
+#: usystem.c:222
+#, c-format
+msgid "%s: unrecognized color %s\n"
+msgstr "%s: niet-herkende kleur %s\n"
+
+#: usystem.c:230
+#, fuzzy, c-format
+msgid "%s: can't parse foreground color in '%s'\n"
+msgstr "%s: onbegrepen voorgrondkleur in '%s'\n"
+
+#: usystem.c:259
+#, c-format
+msgid "%s: can't parse color names; disabling colorization\n"
+msgstr "%s: onbegrepen kleurnamen; kleuring wordt uitgeschakeld\n"
+
+#: usystem.c:374
+#, c-format
+msgid "ERROR: Unknown user %s (in path %s)\n"
+msgstr "Fout: onbekende gebruiker %s (in pad %s)\n"
+
+#: usystem.c:557
+#, fuzzy
+msgid "Socket support is not configured in"
+msgstr "Ondersteuning voor sockets is niet geconfigureerd"
+
+#: usystem.c:646
+msgid "internal rcmd not implemented for Unix"
+msgstr "interne 'rcmd' is niet geïmplementeerd voor Unix"
+
+#: xaw/xboard.c:1182
+#, c-format
+msgid "white pixel = 0x%lx, black pixel = 0x%lx\n"
+msgstr "witte pixel = 0x%lx, zwarte pixel = 0x%lx\n"
+
+#: xaw/xoptions.c:321 xaw/xoptions.c:1025
+msgid "browse"
+msgstr "Bladeren"
+
+#: xaw/xoptions.c:387 xaw/xoptions.c:388
+msgid "Ctrl"
+msgstr "Ctrl"
+
+#: xaw/xoptions.c:393 xaw/xoptions.c:394
+msgid "Alt"
+msgstr "Alt"
+
+#: xaw/xoptions.c:399 xaw/xoptions.c:400
+msgid "Shift"
+msgstr "Shift"
+
+#: xaw/xoptions.c:1272
+msgid "OK"
+msgstr "OK"
+
+#~ msgid "Match Options"
+#~ msgstr "Toernooi-instellingen"
+
+#~ msgid "ICS ..."
+#~ msgstr "ICS..."
+
+# XXX wedstrijd OF overeenkomen??
+#~ msgid "Match ..."
+#~ msgstr "Toernooi..."
+
+#~ msgid "%s: Can't access XPM directory %s\n"
+#~ msgstr "%s: Kan geen toegang krijgen tot XPM-map %s\n"
+
+#~ msgid "Available `%s' sizes:\n"
+#~ msgstr "Beschikbare '%s'-groottes:\n"
+
+#~ msgid "Error: No `%s' files!\n"
+#~ msgstr "Fout: geen '%s'-bestanden!\n"
+
+#~ msgid "Error %d loading icon image\n"
+#~ msgstr "Fout %d tijdens laden van pictogram\n"
+
+#~ msgid "cancel"
+#~ msgstr "Annuleren"
index 5d2837b..5af1d05 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-01-05 12:51-0800\n"
+"POT-Creation-Date: 2014-01-19 22:19-0800\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,560 +18,583 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: args.h:820
+#: args.h:833
 #, c-format
 msgid "%s in settings file\n"
 msgstr ""
 
-#: args.h:830
+#: args.h:867
 #, c-format
 msgid "Bad integer value %s"
 msgstr ""
 
-#: args.h:923 args.h:1170
+#: args.h:968 args.h:1229
 #, c-format
 msgid "Unrecognized argument %s"
 msgstr ""
 
-#: args.h:954
+#: args.h:999
 #, c-format
 msgid "No value provided for argument %s"
 msgstr ""
 
-#: args.h:1014
+#: args.h:1059
 #, c-format
 msgid "Incomplete \\ escape in value for %s"
 msgstr ""
 
-#: args.h:1125
+#: args.h:1170
 #, c-format
 msgid "Failed to open indirection file %s"
 msgstr ""
 
-#: args.h:1142
+#: args.h:1187
 #, c-format
 msgid "Unrecognized boolean argument value %s"
 msgstr ""
 
 #. 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:744
+#: backend.c:800
 msgid "first"
 msgstr ""
 
 #. 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:747
+#: backend.c:803
 msgid "second"
 msgstr ""
 
-#: backend.c:827
+#: backend.c:885
 #, c-format
 msgid "protocol version %d not supported"
 msgstr "версия протокола %d не поддерживается"
 
-#: backend.c:933
+#: backend.c:991
 msgid "You did not specify the engine executable"
 msgstr ""
 
-#: backend.c:989
+#: backend.c:1049
 #, c-format
 msgid "bad timeControl option %s"
 msgstr "timeControl: неверный параметр %s"
 
-#: backend.c:1004
+#: backend.c:1064
 #, c-format
 msgid "bad searchTime option %s"
 msgstr "searchTime: неверный параметр %s"
 
-#: backend.c:1110
+#: backend.c:1170
 #, c-format
 msgid "Variant %s supported only in ICS mode"
 msgstr "Вариант %s поддерживается только в режиме ICS"
 
-#: backend.c:1128
+#: backend.c:1188
 #, c-format
 msgid "Unknown variant name %s"
 msgstr "Неизвестный вариант %s"
 
-#: backend.c:1375
+#: backend.c:1439
 msgid "Starting chess program"
 msgstr "Запускается шахматная программа"
 
-#: backend.c:1398
+#: backend.c:1462
 msgid "Bad game file"
 msgstr "Неправильный формат файла"
 
-#: backend.c:1405
+#: backend.c:1469
 msgid "Bad position file"
 msgstr "Неправильный формат файла позиции"
 
-#: backend.c:1419
+#: backend.c:1483
 msgid "Pick new game"
 msgstr ""
 
-#: backend.c:1488
+#: backend.c:1552
 msgid ""
-"You restarted an already completed tourney\n"
-"One more cycle will now be added to it\n"
-"Games commence in 10 sec"
+"You restarted an already completed tourney.\n"
+"One more cycle will now be added to it.\n"
+"Games commence in 10 sec."
 msgstr ""
 
-#: backend.c:1495
+#: backend.c:1559
 #, c-format
 msgid "All games in tourney '%s' are already played or playing"
 msgstr ""
 
-#: backend.c:1502
+#: backend.c:1566
 msgid "Can't have a match with no chess programs"
 msgstr "Не подключено ни одной шахматной программы"
 
-#: backend.c:1539
+#: backend.c:1620
 #, c-format
 msgid "Could not open comm port %s"
 msgstr "Не могу открыть COM-порт %s"
 
-#: backend.c:1542
+#: backend.c:1623
 #, c-format
 msgid "Could not connect to host %s, port %s"
 msgstr "Не могу установить связь с %s, порт %s"
 
-#: backend.c:1598
+#: backend.c:1679
 #, c-format
 msgid "Unknown initialMode %s"
 msgstr "initialMode: неизвестный режим %s"
 
-#: backend.c:1624
+#: backend.c:1705
 msgid "AnalyzeFile mode requires a game file"
 msgstr "Режим анализа: не указан файл для анализа"
 
-#: backend.c:1651
+#: backend.c:1732
 msgid "Analysis mode requires a chess engine"
 msgstr "Для анализа необходима шахматная программа"
 
-#: backend.c:1655
+#: backend.c:1736
 msgid "Analysis mode does not work with ICS mode"
 msgstr "Режим анализа не совместим с режимом ICS"
 
-#: backend.c:1666
+#: backend.c:1747
 msgid "MachineWhite mode requires a chess engine"
 msgstr "В режиме \"Компьютер белыми\" нужна шахматная программа"
 
-#: backend.c:1671
+#: backend.c:1752
 msgid "MachineWhite mode does not work with ICS mode"
 msgstr "Режим \"Компьютер белыми\" не совместим с режимом ICS"
 
-#: backend.c:1678
+#: backend.c:1759
 msgid "MachineBlack mode requires a chess engine"
 msgstr "В режиме \"Компьютер черными\" нужна шахматная программа (движок)"
 
-#: backend.c:1683
+#: backend.c:1764
 msgid "MachineBlack mode does not work with ICS mode"
 msgstr "Режим \"Компьютер черными\" не совместим с режимом ICS"
 
-#: backend.c:1690
+#: backend.c:1771
 msgid "TwoMachines mode requires a chess engine"
 msgstr "В режиме \"Два движка\" нужна шахматная программа"
 
-#: backend.c:1695
+#: backend.c:1776
 msgid "TwoMachines mode does not work with ICS mode"
 msgstr "Режим \"Два движка\" не совместим с режимом ICS"
 
-#: backend.c:1706
+#: backend.c:1787
 msgid "Training mode requires a game file"
 msgstr "Для тренировки необходимо загрузить шахматную партию из файла"
 
-#: backend.c:1869 backend.c:1924 backend.c:1947 backend.c:2346
+#: backend.c:1950 backend.c:2005 backend.c:2028 backend.c:2430
 msgid "Error writing to ICS"
 msgstr "Ошибка записи на вход сервера ICS"
 
-#: backend.c:1884
+#: backend.c:1965
 msgid "Error reading from keyboard"
 msgstr "Ошибка клавиатуры"
 
-#: backend.c:1887
+#: backend.c:1968
 msgid "Got end of file from keyboard"
 msgstr "Получен символ конца файла с клавиатуры"
 
-#: backend.c:2192
+#: backend.c:2276
 #, c-format
 msgid "Unknown wild type %d"
 msgstr ""
 
-#: backend.c:2263 usystem.c:329
+#: backend.c:2347 usystem.c:329
 msgid "Error writing to display"
 msgstr "Ошибка записи на дисплей"
 
-#: backend.c:3019
+#. TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers
+#: backend.c:3105
 #, c-format
 msgid "your opponent kibitzes: %s"
 msgstr ""
 
-#: backend.c:3548
+#: backend.c:3634
 msgid "Error gathering move list: two headers"
 msgstr "Ошибка чтения списка ходов: два заголовка"
 
-#: backend.c:3595
+#: backend.c:3681
 msgid "Error gathering move list: nested"
 msgstr "Ошибка чтения списка ходов: вложенные списки"
 
-#: backend.c:3699 backend.c:4117 backend.c:4321 backend.c:4880 backend.c:4884
-#: backend.c:6900 backend.c:12101 backend.c:13816 backend.c:13893
-#: backend.c:13939 backend.c:13945 backend.c:13950 backend.c:13955
+#: backend.c:3785 backend.c:4203 backend.c:4407 backend.c:4966 backend.c:4970
+#: backend.c:7073 backend.c:12577 backend.c:14306 backend.c:14383
+#: backend.c:14429 backend.c:14435 backend.c:14440 backend.c:14445
 msgid "vs."
 msgstr ""
 
-#: backend.c:3827
+#: backend.c:3913
 msgid "Illegal move (rejected by ICS)"
 msgstr ""
 
-#: backend.c:4165
+#: backend.c:4251
 msgid "Connection closed by ICS"
 msgstr "Сервер ICS разорвал соединение"
 
-#: backend.c:4167
+#: backend.c:4253
 msgid "Error reading from ICS"
 msgstr "Ошибка чтения с сервера ICS"
 
-#: backend.c:4244
+#: backend.c:4330
 #, c-format
 msgid ""
 "Failed to parse board string:\n"
 "\"%s\""
 msgstr ""
 
-#: backend.c:4253 backend.c:9756
+#: backend.c:4339 backend.c:10203
 msgid "Game too long; increase MAX_MOVES and recompile"
 msgstr ""
 "Слишком длинная партия: увеличьте значение MAX_MOVES и перекомпилируйте "
 "программу"
 
-#: backend.c:4372
+#: backend.c:4458
 msgid "Error gathering move list: extra board"
 msgstr "Ошибка чтения списка ходов: лишняя доска"
 
-#: backend.c:4804 backend.c:4826
+#: backend.c:4890 backend.c:4912
 #, c-format
 msgid "Couldn't parse move \"%s\" from ICS"
 msgstr "Странный ход \"%s\" получен с сервера ICS"
 
-#: backend.c:5063
+#: backend.c:5161
 #, c-format
 msgid "say Internal error; bad moveType %d (%d,%d-%d,%d)"
 msgstr ""
 
-#: backend.c:5133
+#: backend.c:5232
 msgid "You cannot do this while you are playing or observing"
 msgstr ""
 
-#: backend.c:6029
+#: backend.c:6174
 msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!"
 msgstr ""
 
-#: backend.c:6491
+#: backend.c:6664
 msgid "You are playing Black"
 msgstr "Вы играете черными"
 
-#: backend.c:6500 backend.c:6527
+#: backend.c:6673 backend.c:6700
 msgid "You are playing White"
 msgstr "Вы играете белыми"
 
-#: backend.c:6509 backend.c:6535 backend.c:6655 backend.c:6680 backend.c:6696
-#: backend.c:14592
+#: backend.c:6682 backend.c:6708 backend.c:6828 backend.c:6853 backend.c:6869
+#: backend.c:15113
 msgid "It is White's turn"
 msgstr "Ход белых"
 
-#: backend.c:6513 backend.c:6539 backend.c:6663 backend.c:6686 backend.c:6717
-#: backend.c:14584
+#: backend.c:6686 backend.c:6712 backend.c:6836 backend.c:6859 backend.c:6890
+#: backend.c:15105
 msgid "It is Black's turn"
 msgstr "Ход черных"
 
-#: backend.c:6552
+#: backend.c:6725
 msgid "Displayed position is not current"
 msgstr "Показанная позиция не соответствует положению в игре"
 
-#: backend.c:6790
+#: backend.c:6963
 msgid "Illegal move"
 msgstr "Неправильный ход"
 
-#: backend.c:6857
+#: backend.c:7030
 msgid "End of game"
 msgstr "Сыгран последний записанный ход"
 
-#: backend.c:6860
+#: backend.c:7033
 msgid "Incorrect move"
 msgstr "Неверный ход"
 
-#: backend.c:7169 backend.c:7296
+#: backend.c:7423 backend.c:7569
 msgid "Pull pawn backwards to under-promote"
 msgstr ""
 
-#: backend.c:7527
+#: backend.c:7532
+msgid "only marked squares are legal"
+msgstr ""
+
+#: backend.c:7820
 msgid "Swiss tourney finished"
 msgstr ""
 
-#: backend.c:8103
+#: backend.c:8336
+msgid "could not load EGBB library"
+msgstr ""
+
+#: backend.c:8339
+msgid "wrong EGBB version"
+msgstr ""
+
+#: backend.c:8452
 msgid "Invalid pairing from pairing engine"
 msgstr ""
 
-#: backend.c:8236
+#: backend.c:8603
 #, c-format
 msgid "Illegal move \"%s\" from %s machine"
 msgstr "Неправильный ход \"%s\" пытается выполнить движок %s"
 
-#: backend.c:8457
+#: backend.c:8849
 msgid "Bad FEN received from engine"
 msgstr ""
 
-#: backend.c:8601 backend.c:13681 backend.c:13746
+#: backend.c:8950
+msgid "Engine did not send setup for non-standard variant"
+msgstr ""
+
+#: backend.c:9023 backend.c:14168 backend.c:14236
 #, c-format
 msgid "%s does not support analysis"
 msgstr "%s не поддерживает режим анализа"
 
-#: backend.c:8667
+#: backend.c:9089
 #, c-format
 msgid "Illegal move \"%s\" (rejected by %s chess program)"
 msgstr "Неправильный ход \"%s\" (не принят движком %s)"
 
-#: backend.c:8694
+#: backend.c:9116
 #, c-format
 msgid "Failed to start %s chess program %s on %s: %s\n"
 msgstr "Не удалось запустить %s движок %s на %s: %s\n"
 
-#: backend.c:8715
+#: backend.c:9137
 #, c-format
 msgid "Hint: %s"
 msgstr "Подсказка: %s"
 
-#: backend.c:8720
+#: backend.c:9142
 #, c-format
 msgid ""
 "Illegal hint move \"%s\"\n"
 "from %s chess program"
 msgstr ""
 
-#: backend.c:8895
+#: backend.c:9317
 msgid "Machine accepts your draw offer"
 msgstr "Компьютер согласился на ничью"
 
-#: backend.c:8898
+#: backend.c:9320
 msgid ""
-"Machine offers a draw\n"
-"Select Action / Draw to agree"
+"Machine offers a draw.\n"
+"Select Action / Draw to accept."
 msgstr ""
 
-#: backend.c:8977
+#. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone
+#: backend.c:9402
 msgid "failed writing PV"
 msgstr ""
 
-#: backend.c:9275
+#: backend.c:9701
 #, c-format
 msgid "Ambiguous move in ICS output: \"%s\""
 msgstr "Неоднозначный ход с сервера ICS: \"%s\""
 
-#: backend.c:9285
+#: backend.c:9711
 #, c-format
 msgid "Illegal move in ICS output: \"%s\""
 msgstr "Неправильный ход с сервера ICS: \"%s\""
 
-#: backend.c:9296
+#: backend.c:9722
 msgid "Gap in move list"
 msgstr "Пропуск в записи ходов"
 
-#: backend.c:9917 dialogs.c:460
+#: backend.c:10357
 #, c-format
 msgid "Variant %s not supported by %s"
 msgstr "Вариант %s не поддерживается %s"
 
-#: backend.c:10038
+#: backend.c:10364
+#, c-format
+msgid ", but %s is"
+msgstr ""
+
+#: backend.c:10506
 #, c-format
 msgid "Startup failure on '%s'"
 msgstr "Ошибка при запуске программы '%s'"
 
-#: backend.c:10069
+#: backend.c:10537
 msgid "Waiting for first chess program"
 msgstr "Ждем первую шахматную программу"
 
-#: backend.c:10074 backend.c:13964
+#: backend.c:10542 backend.c:14454
 msgid "Waiting for second chess program"
 msgstr "Ждем вторую шахматную программу"
 
-#: backend.c:10123
+#: backend.c:10591
 msgid "Could not write on tourney file"
 msgstr ""
 
-#: backend.c:10197
+#: backend.c:10665
 msgid ""
 "You cannot replace an engine while it is engaged!\n"
 "Terminate its game first."
 msgstr ""
 
-#: backend.c:10211
+#: backend.c:10679
 msgid "No engine with the name you gave is installed"
 msgstr ""
 
-#: backend.c:10213
+#: backend.c:10681
 msgid ""
 "First change an engine by editing the participants list\n"
 "of the Tournament Options dialog"
 msgstr ""
 
-#: backend.c:10214
+#: backend.c:10682
 msgid "You can only change one engine at the time"
 msgstr ""
 
-#: backend.c:10229 backend.c:10376
+#: backend.c:10697 backend.c:10845
 #, c-format
 msgid "No engine %s is installed"
 msgstr ""
 
-#: backend.c:10249
+#: backend.c:10717
 msgid ""
 "You must supply a tournament file,\n"
 "for storing the tourney progress"
 msgstr ""
 
-#: backend.c:10259
+#: backend.c:10727
 msgid "Not enough participants"
 msgstr ""
 
-#: backend.c:10460
+#: backend.c:10929
 msgid "Bad tournament file"
 msgstr ""
 
-#: backend.c:10472
+#: backend.c:10941
 msgid "Waiting for other game(s)"
 msgstr ""
 
-#: backend.c:10485
+#: backend.c:10954
 msgid "No pairing engine specified"
 msgstr ""
 
-#: backend.c:10962
+#: backend.c:11430
 #, c-format
 msgid "Match %s vs. %s: final score %d-%d-%d"
 msgstr "Матч %s против %s: финальный результат %d-%d-%d"
 
-#: backend.c:11424 backend.c:11455
+#: backend.c:11897 backend.c:11928
 #, c-format
 msgid "Illegal move: %d.%s%s"
 msgstr "Неправильный ход: %d.%s%s"
 
-#: backend.c:11444
+#: backend.c:11917
 #, c-format
 msgid "Ambiguous move: %d.%s%s"
 msgstr "Неоднозначный ход: %d.%s%s"
 
-#: backend.c:11497 backend.c:12524 backend.c:12717 backend.c:13078
+#: backend.c:11971 backend.c:13010 backend.c:13203 backend.c:13567
 #, c-format
 msgid "Can't open \"%s\""
 msgstr "Не могу открыть файл \"%s\""
 
-#: backend.c:11509 menus.c:116
+#: backend.c:11983 menus.c:116
 msgid "Cannot build game list"
 msgstr "Не удалось создать список партий"
 
-#: backend.c:11594
+#: backend.c:12068
 msgid "No more games in this message"
 msgstr "В этом сообщении больше нет шахматных партий"
 
-#: backend.c:11634
+#: backend.c:12108
 msgid "No game has been loaded yet"
 msgstr "Нет загруженных шахматных партий"
 
-#: backend.c:11638 backend.c:12505 ngamelist.c:129
+#: backend.c:12112 backend.c:12991 ngamelist.c:129
 msgid "Can't back up any further"
 msgstr "Достигнуто начало списка"
 
-#: backend.c:12077
+#: backend.c:12553
 msgid "Game number out of range"
 msgstr "Номер партии - вне диапазона"
 
-#: backend.c:12088
+#: backend.c:12564
 msgid "Can't seek on game file"
 msgstr "Поиск в файлах записей партий не предусмотрен"
 
-#: backend.c:12146
+#: backend.c:12622
 msgid "Game not found in file"
 msgstr "Партия не найдена в файле"
 
-#: backend.c:12274 backend.c:12601
+#: backend.c:12751 backend.c:13087
 msgid "Bad FEN position in file"
 msgstr "Неправильная позиция формата FEN в файле"
 
-#: backend.c:12426
+#: backend.c:12903
 msgid "No moves in game"
 msgstr "Нет записанных ходов"
 
-#: backend.c:12501
+#: backend.c:12987
 msgid "No position has been loaded yet"
 msgstr "Нет загруженных позиций"
 
-#: backend.c:12562 backend.c:12573
+#: backend.c:13048 backend.c:13059
 msgid "Can't seek on position file"
 msgstr "Поиск в файлах позиций не предусмотрен"
 
-#: backend.c:12580 backend.c:12592
+#: backend.c:13066 backend.c:13078
 msgid "Position not found in file"
 msgstr "Позиция не найдена в файле"
 
-#: backend.c:12632
+#: backend.c:13118
 msgid "Black to play"
 msgstr "Ход черных"
 
-#: backend.c:12635
+#: backend.c:13121
 msgid "White to play"
 msgstr "Ход белых"
 
-#: backend.c:12722 backend.c:13083
+#: backend.c:13208 backend.c:13572
 msgid "Waiting for access to save file"
 msgstr ""
 
-#: backend.c:12724
+#: backend.c:13210
 msgid "Saving game"
 msgstr ""
 
-#: backend.c:12725
+#: backend.c:13211
 msgid "Bad Seek"
 msgstr ""
 
-#: backend.c:13085
+#: backend.c:13574
 msgid "Saving position"
 msgstr ""
 
-#: backend.c:13211
+#: backend.c:13700
 msgid ""
 "You have edited the game history.\n"
 "Use Reload Same Game and make your move again."
 msgstr ""
 
-#: backend.c:13216
+#: backend.c:13705
 msgid ""
 "You have entered too many moves.\n"
 "Back up to the correct position and try again."
 msgstr ""
 
-#: backend.c:13221
+#: backend.c:13710
 msgid ""
 "Displayed position is not current.\n"
 "Step forward to the correct position and try again."
 msgstr ""
 
-#: backend.c:13268
+#: backend.c:13757
 msgid "You have not made a move yet"
 msgstr "Вы еще не сделали ход"
 
-#: backend.c:13289
+#: backend.c:13778
 msgid ""
 "The cmail message is not loaded.\n"
 "Use Reload CMail Message and make your move again."
 msgstr ""
 
-#: backend.c:13294
+#: backend.c:13783
 msgid "No unfinished games"
 msgstr "Нет неоконченных партий"
 
-#: backend.c:13300
+#: backend.c:13789
 #, c-format
 msgid ""
 "You have already mailed a move.\n"
@@ -581,210 +604,212 @@ msgid ""
 "on the command line."
 msgstr ""
 
-#: backend.c:13315
+#: backend.c:13804
 msgid "Failed to invoke cmail"
 msgstr "Ошибка запуска cmail"
 
-#: backend.c:13377
+#: backend.c:13866
 #, c-format
 msgid "Waiting for reply from opponent\n"
 msgstr "Ожидание ответного хода\n"
 
-#: backend.c:13399
+#: backend.c:13888
 #, c-format
 msgid "Still need to make move for game\n"
 msgstr "Все еще ваша очередь ходить в этой партии\n"
 
-#: backend.c:13403
+#: backend.c:13892
 #, c-format
 msgid "Still need to make moves for both games\n"
 msgstr "Все еще ваша очередь ходить в обеих партиях\n"
 
-#: backend.c:13407
+#: backend.c:13896
 #, c-format
 msgid "Still need to make moves for all %d games\n"
 msgstr "Все еще ваш ход во всех %d партиях\n"
 
-#: backend.c:13414
+#: backend.c:13903
 #, c-format
 msgid "Still need to make a move for game %s\n"
 msgstr "Все еще ваш ход в партии %s\n"
 
-#: backend.c:13420
+#: backend.c:13909
 #, c-format
 msgid "No unfinished games\n"
 msgstr "Нет неоконченных партий\n"
 
-#: backend.c:13422
+#: backend.c:13911
 #, c-format
 msgid "Ready to send mail\n"
 msgstr "Можно отсылать почту\n"
 
-#: backend.c:13427
+#: backend.c:13916
 #, c-format
 msgid "Still need to make moves for games %s\n"
 msgstr "Все еще ваша очередь ходить в партиях %s\n"
 
-#: backend.c:13631
+#: backend.c:14118
 msgid "Edit comment"
 msgstr "Правка комментария"
 
-#: backend.c:13633
+#: backend.c:14120
 #, c-format
 msgid "Edit comment on %d.%s%s"
 msgstr "Правка комментария к %d.%s%s"
 
-#: backend.c:13688
+#: backend.c:14175
 #, c-format
 msgid "You are not observing a game"
 msgstr ""
 
-#: backend.c:13796
+#: backend.c:14286
 msgid "It is not White's turn"
 msgstr "Сейчас не ход белых"
 
-#: backend.c:13877
+#: backend.c:14367
 msgid "It is not Black's turn"
 msgstr "Сейчас не ход черных"
 
-#: backend.c:13985
+#: backend.c:14475
 #, c-format
 msgid "Starting %s chess program"
 msgstr ""
 
-#: backend.c:14013 backend.c:15127
+#: backend.c:14503 backend.c:15648
+#, fuzzy
 msgid ""
 "Wait until your turn,\n"
-"or select Move Now"
-msgstr ""
+"or select 'Move Now'."
+msgstr "Подождите своей очереди ходить"
 
-#: backend.c:14147
+#: backend.c:14638
 msgid "Training mode off"
 msgstr "Тренировка окончена"
 
-#: backend.c:14155
+#: backend.c:14646
 msgid "Training mode on"
 msgstr "Тренировка"
 
-#: backend.c:14158
+#: backend.c:14649
 msgid "Already at end of game"
 msgstr "Сыграны все ходы данной партии"
 
-#: backend.c:14238
+#: backend.c:14729
 msgid "Warning: You are still playing a game"
 msgstr "Предупреждение: вы все еще продолжаете играть"
 
-#: backend.c:14241
+#: backend.c:14732
 msgid "Warning: You are still observing a game"
 msgstr "Предупреждение: вы все еще наблюдаете за игрой"
 
-#: backend.c:14244
+#: backend.c:14735
 msgid "Warning: You are still examining a game"
 msgstr "Предупреждение: вы все еще изучаете игру"
 
-#: backend.c:14311
+#: backend.c:14802
 msgid "Click clock to clear board"
 msgstr ""
 
-#: backend.c:14321
+#: backend.c:14812
 msgid "Close ICS engine analyze..."
 msgstr ""
 
-#: backend.c:14609
+#: backend.c:15130
 msgid "That square is occupied"
 msgstr "Это поле занято"
 
-#: backend.c:14633 backend.c:14659
+#: backend.c:15154 backend.c:15180
 msgid "There is no pending offer on this move"
 msgstr "К данному ходу никаких предложений не сделано"
 
-#: backend.c:14695 backend.c:14706
+#: backend.c:15216 backend.c:15227
 msgid "Your opponent is not out of time"
 msgstr "У вашего соперника еще есть время"
 
-#: backend.c:14772
+#: backend.c:15293
 msgid "You must make your move before offering a draw"
 msgstr "Вы должны сделать свой ход прежде, чем предлагать ничью"
 
-#: backend.c:15109
+#: backend.c:15630
 msgid "You are not examining a game"
 msgstr "Не включен режим изучения шахматных партий"
 
-#: backend.c:15113
+#: backend.c:15634
 msgid "You can't revert while pausing"
 msgstr "Нельзя вернуться к началу пока выбрана \"Пауза\""
 
-#: backend.c:15167 backend.c:15174
+#: backend.c:15688 backend.c:15695
 msgid "It is your turn"
 msgstr "Ваш ход"
 
-#: backend.c:15225 backend.c:15232 backend.c:15285 backend.c:15292
-msgid "Wait until your turn"
+#: backend.c:15746 backend.c:15753 backend.c:15806 backend.c:15813
+#, fuzzy
+msgid "Wait until your turn."
 msgstr "Подождите своей очереди ходить"
 
-#: backend.c:15237
+#: backend.c:15758
 msgid "No hint available"
 msgstr "Подсказок нет"
 
-#: backend.c:15253 ngamelist.c:355
+#: backend.c:15774 ngamelist.c:355
 #, fuzzy
 msgid "Game list not loaded or empty"
 msgstr "Нет загруженных шахматных партий"
 
-#: backend.c:15260
+#: backend.c:15781
 msgid "Book file exists! Try again for overwrite."
 msgstr ""
 
-#: backend.c:15738
+#: backend.c:16259
 #, c-format
 msgid "Error writing to %s chess program"
 msgstr "Ошибка записи на вход движка %s"
 
-#: backend.c:15741 backend.c:15772
+#: backend.c:16262 backend.c:16293
 #, c-format
 msgid "%s program exits in draw position (%s)"
 msgstr ""
 
-#: backend.c:15767
+#: backend.c:16288
 #, c-format
 msgid "Error: %s chess program (%s) exited unexpectedly"
 msgstr "Ошибка: движок %s (%s) завершил работу"
 
-#: backend.c:15785
+#: backend.c:16306
 #, c-format
 msgid "Error reading from %s chess program (%s)"
 msgstr "Ошибка чтения с выхода движка %s (%s)"
 
-#: backend.c:16187
+#: backend.c:16730
 #, c-format
 msgid "%s engine has too many options\n"
 msgstr ""
 
-#: backend.c:16343
+#: backend.c:16886
 msgid "Displayed move is not current"
 msgstr "Позиция не отвечает положению в игре"
 
-#: backend.c:16352
+#: backend.c:16895
 msgid "Could not parse move"
 msgstr "Невозможно интерпретировать ход"
 
-#: backend.c:16477 backend.c:16499
+#: backend.c:17020 backend.c:17042
 msgid "Both flags fell"
 msgstr "У обоих игроков время вышло"
 
-#: backend.c:16479
+#: backend.c:17022
 msgid "White's flag fell"
 msgstr "У белых упал флажок"
 
-#: backend.c:16501
+#: backend.c:17044
 msgid "Black's flag fell"
 msgstr "У черных упал флажок"
 
-#: backend.c:16632
+#: backend.c:17175
 msgid "Clock adjustment not allowed in auto-flag mode"
 msgstr ""
 
-#: backend.c:17467
+#: backend.c:18025
 msgid "Bad FEN position in clipboard"
 msgstr "Позиция в буфере обмена не соответствует формату FEN"
 
@@ -805,1372 +830,1429 @@ msgstr ""
 msgid "Could not create book"
 msgstr "Невозможно интерпретировать ход"
 
-#: dialogs.c:259
+#: dialogs.c:283
 #, fuzzy
 msgid "Tournament file:          "
 msgstr "Отложить   F7"
 
-#: dialogs.c:260
-msgid "Sync after round"
+#: dialogs.c:284
+msgid "For concurrent playing of tourney with multiple XBoards:"
 msgstr ""
 
-#: dialogs.c:261
-msgid "    (for concurrent playing of a single"
+#: dialogs.c:285
+msgid "Sync after round"
 msgstr ""
 
-#: dialogs.c:262
+#: dialogs.c:286
 msgid "Sync after cycle"
 msgstr ""
 
-#: dialogs.c:263
-msgid "      tourney with multiple XBoards)"
-msgstr ""
-
-#: dialogs.c:264
+#: dialogs.c:287
 msgid "Tourney participants:"
 msgstr ""
 
-#: dialogs.c:265
+#: dialogs.c:288
 msgid "Select Engine:"
 msgstr ""
 
-#: dialogs.c:273
+#: dialogs.c:296
 msgid "Tourney type (0 = round-robin, 1 = gauntlet):"
 msgstr ""
 
-#: dialogs.c:274
+#: dialogs.c:297
 msgid "Number of tourney cycles (or Swiss rounds):"
 msgstr ""
 
-#: dialogs.c:275
+#: dialogs.c:298
 msgid "Default Number of Games in Match (or Pairing):"
 msgstr ""
 
-#: dialogs.c:276
+#: dialogs.c:299
 msgid "Pause between Match Games (msec):"
 msgstr ""
 
-#: dialogs.c:277
+#: dialogs.c:300
 msgid "Save Tourney Games on:"
 msgstr ""
 
-#: dialogs.c:278
+#: dialogs.c:301
 msgid "Game File with Opening Lines:"
 msgstr ""
 
-#: dialogs.c:279
+#: dialogs.c:302
 msgid "Game Number (-1 or -2 = Auto-Increment):"
 msgstr ""
 
-#: dialogs.c:280
+#: dialogs.c:303
 msgid "File with Start Positions:"
 msgstr ""
 
-#: dialogs.c:281
+#: dialogs.c:304
 msgid "Position Number (-1 or -2 = Auto-Increment):"
 msgstr ""
 
-#: dialogs.c:282
+#: dialogs.c:305
 msgid "Rewind Index after this many Games (0 = never):"
 msgstr ""
 
-#: dialogs.c:283
+#: dialogs.c:306
 msgid "Disable own engine books by default"
 msgstr ""
 
-#: dialogs.c:284
+#: dialogs.c:307 dialogs.c:1565
+msgid "Time Control"
+msgstr ""
+
+#: dialogs.c:308
+#, fuzzy
+msgid "Common Engine"
+msgstr "Общие для движков...   Alt+Shift+U"
+
+#: dialogs.c:309 dialogs.c:441
+msgid "General Options"
+msgstr "Общие настройки"
+
+#: dialogs.c:310
+msgid "Continue Later"
+msgstr ""
+
+#: dialogs.c:311
 #, fuzzy
 msgid "Replace Engine"
 msgstr "Движок"
 
-#: dialogs.c:285
+#: dialogs.c:312
 #, fuzzy
 msgid "Upgrade Engine"
 msgstr "Движок"
 
-#: dialogs.c:286
+#: dialogs.c:313
 msgid "Clone Tourney"
 msgstr ""
 
-#: dialogs.c:316
+#: dialogs.c:351
 msgid "First you must specify an existing tourney file to clone"
 msgstr ""
 
-#: dialogs.c:332 dialogs.c:1320
+#: dialogs.c:367 dialogs.c:1407
 msgid "# no engines are installed"
 msgstr ""
 
-#: dialogs.c:344
-msgid "Match Options"
+#: dialogs.c:375
+msgid "Internal error: PARTICIPANTS set wrong"
 msgstr ""
 
-#: dialogs.c:363
+#: dialogs.c:383
+#, fuzzy
+msgid "Tournament Options"
+msgstr "Звуки"
+
+#: dialogs.c:402
 msgid "Absolute Analysis Scores"
 msgstr ""
 
-#: dialogs.c:364
+#: dialogs.c:403
 msgid "Almost Always Queen (Detour Under-Promote)"
 msgstr ""
 
-#: dialogs.c:365 menus.c:714
+#: dialogs.c:404 menus.c:714
 msgid "Animate Dragging"
 msgstr "Анимация перетаскивания"
 
-#: dialogs.c:366 menus.c:715
+#: dialogs.c:405 menus.c:715
 msgid "Animate Moving"
 msgstr "Анимация ходов"
 
-#: dialogs.c:367 menus.c:716
+#: dialogs.c:406 menus.c:716
 msgid "Auto Flag"
 msgstr "Проверять время"
 
-#: dialogs.c:368 menus.c:717
+#: dialogs.c:407 menus.c:717
 msgid "Auto Flip View"
 msgstr "Авторазворот доски"
 
-#: dialogs.c:369 menus.c:718
+#: dialogs.c:408 menus.c:718
 msgid "Blindfold"
 msgstr "Невидимые фигуры"
 
-#: dialogs.c:370
+#. 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 ""
 
-#: dialogs.c:371
+#: dialogs.c:411
 msgid "Enable Variation Trees"
 msgstr ""
 
-#: dialogs.c:372
+#: dialogs.c:412
+msgid "Headers in Engine Output Window"
+msgstr ""
+
+#: dialogs.c:413
 msgid "Hide Thinking from Human"
 msgstr "Скрывать вывод движка в игре против человека"
 
-#: dialogs.c:373 menus.c:723
+#: dialogs.c:414 menus.c:723
 msgid "Highlight Last Move"
 msgstr "Выделять последний ход"
 
-#: dialogs.c:374
+#: dialogs.c:415
 msgid "Highlight with Arrow"
 msgstr "Выделять стрелкой"
 
-#: dialogs.c:375 menus.c:726
+#: dialogs.c:416 menus.c:726
 msgid "One-Click Moving"
 msgstr "Ход одним щелчком"
 
-#: dialogs.c:376
+#: dialogs.c:417
 msgid "Periodic Updates (in Analysis Mode)"
 msgstr "Периодически обновлять (в режиме анализа)"
 
-#: dialogs.c:378
+#: dialogs.c:419
 msgid "Play Move(s) of Clicked PV (Analysis)"
 msgstr ""
 
-#: dialogs.c:379 dialogs.c:514 menus.c:728
+#: dialogs.c:420 dialogs.c:597 menus.c:728
 msgid "Ponder Next Move"
 msgstr "Думать всегда"
 
-#: dialogs.c:380
+#: dialogs.c:421
 msgid "Popup Exit Messages"
 msgstr "Сообщение при выходе"
 
-#: dialogs.c:381 menus.c:730
+#: dialogs.c:422 menus.c:730
 msgid "Popup Move Errors"
 msgstr "Сообщать о неправильном ходе"
 
-#: dialogs.c:382
+#: dialogs.c:423
 #, fuzzy
 msgid "Scores in Move List"
 msgstr "Запрашивать запись ходов"
 
-#: dialogs.c:383
+#: dialogs.c:424
 msgid "Show Coordinates"
 msgstr "Показывать координаты"
 
-#: dialogs.c:384
+#: dialogs.c:425
 msgid "Show Target Squares"
 msgstr ""
 
-#: dialogs.c:385
+#: dialogs.c:426
 msgid "Sticky Windows"
 msgstr ""
 
-#: dialogs.c:386 menus.c:733
+#: dialogs.c:427 menus.c:733
 msgid "Test Legality"
 msgstr "Проверять правильность хода CS+L"
 
-#: dialogs.c:387
+#: dialogs.c:428
 msgid "Top-Level Dialogs"
 msgstr ""
 
-#: dialogs.c:388
+#: dialogs.c:429
 msgid "Flash Moves (0 = no flashing):"
 msgstr ""
 
-#: dialogs.c:389
+#: dialogs.c:430
 msgid "Flash Rate (high = fast):"
 msgstr ""
 
-#: dialogs.c:390
+#: dialogs.c:431
 msgid "Animation Speed (high = slow):"
 msgstr ""
 
-#: dialogs.c:391
+#: dialogs.c:432
 #, fuzzy
 msgid "Zoom factor in Evaluation Graph:"
 msgstr "Оценка позиции"
 
-#: dialogs.c:400
-msgid "General Options"
-msgstr "Общие настройки"
-
-#: dialogs.c:410
-msgid "normal"
+#: dialogs.c:452
+#, fuzzy
+msgid "Normal"
 msgstr "обычные"
 
-#: dialogs.c:411
-msgid "makruk"
+#: dialogs.c:453
+#, fuzzy
+msgid "Makruk"
 msgstr "макрук"
 
-#: dialogs.c:412
+#: dialogs.c:454
 msgid "FRC"
 msgstr "Фишера (960)"
 
-#: dialogs.c:413
-msgid "shatranj"
+#: dialogs.c:455
+msgid "Shatranj"
 msgstr ""
 
-#: dialogs.c:414
-msgid "wild castle"
+#: dialogs.c:456
+msgid "Wild castle"
 msgstr ""
 
-#: dialogs.c:415
-msgid "knightmate"
-msgstr ""
+#: dialogs.c:457
+#, fuzzy
+msgid "Knightmate"
+msgstr "Конь"
 
-#: dialogs.c:416
-msgid "no castle"
+#: dialogs.c:458
+msgid "No castle"
 msgstr ""
 
-#: dialogs.c:417
+#: dialogs.c:459
 #, fuzzy
-msgid "cylinder *"
+msgid "Cylinder *"
 msgstr "цилиндрические"
 
-#: dialogs.c:418
+#: dialogs.c:460
 msgid "3-checks"
 msgstr ""
 
-#: dialogs.c:419
+#: dialogs.c:461
 msgid "berolina *"
 msgstr ""
 
-#: dialogs.c:420
+#: dialogs.c:462
 msgid "atomic"
 msgstr "атомные"
 
-#: dialogs.c:421
+#: dialogs.c:463
 msgid "two kings"
 msgstr ""
 
-#: dialogs.c:422
+#: dialogs.c:464
+msgid " "
+msgstr ""
+
+#: dialogs.c:465
+msgid "Spartan"
+msgstr ""
+
+#: dialogs.c:466
 msgid "Board size ( -1 = default for selected variant):"
 msgstr ""
 
-#: dialogs.c:423
+#: dialogs.c:467
 msgid "Number of Board Ranks:"
 msgstr ""
 
-#: dialogs.c:424
+#: dialogs.c:468
 msgid "Number of Board Files:"
 msgstr ""
 
-#: dialogs.c:425
+#: dialogs.c:469
 msgid "Holdings Size:"
 msgstr ""
 
-#: dialogs.c:429
-msgid "fairy"
+#: dialogs.c:471
+msgid ""
+"Variants marked with * can only be played\n"
+"with legality testing off."
 msgstr ""
 
-#: dialogs.c:430
+#: dialogs.c:473
+msgid "ASEAN"
+msgstr ""
+
+#: dialogs.c:474
 msgid "Great Shatranj (10x8)"
 msgstr ""
 
-#: dialogs.c:431
+#: dialogs.c:475
 msgid "Seirawan"
 msgstr "Сейравана"
 
-#: dialogs.c:432
-msgid "falcon (10x8)"
+#: dialogs.c:476
+msgid "Falcon (10x8)"
 msgstr ""
 
-#: dialogs.c:433
+#: dialogs.c:477
 msgid "Superchess"
 msgstr ""
 
-#: dialogs.c:434
+#: dialogs.c:478
 msgid "Capablanca (10x8)"
 msgstr ""
 
-#: dialogs.c:435
-msgid "crazyhouse"
+#: dialogs.c:479
+msgid "Crazyhouse"
 msgstr ""
 
-#: dialogs.c:436
+#: dialogs.c:480
 msgid "Gothic (10x8)"
 msgstr ""
 
-#: dialogs.c:437
-msgid "bughouse"
+#: dialogs.c:481
+#, fuzzy
+msgid "Bughouse"
 msgstr "шведки"
 
-#: dialogs.c:438
-msgid "janus (10x8)"
+#: dialogs.c:482
+msgid "Janus (10x8)"
 msgstr ""
 
-#: dialogs.c:439
-msgid "suicide"
+#: dialogs.c:483
+msgid "Suicide"
 msgstr ""
 
-#: dialogs.c:440
+#: dialogs.c:484
 msgid "CRC (10x8)"
 msgstr ""
 
-#: dialogs.c:441
+#: dialogs.c:485
 msgid "give-away"
 msgstr ""
 
-#: dialogs.c:442
+#: dialogs.c:486
 msgid "grand (10x10)"
 msgstr ""
 
-#: dialogs.c:443
+#: dialogs.c:487
 msgid "losers"
 msgstr "поддавки (мат)"
 
-#: dialogs.c:444
+#: dialogs.c:488
 msgid "shogi (9x9)"
 msgstr ""
 
-#: dialogs.c:445
-msgid "Spartan"
+#: dialogs.c:489
+msgid "fairy"
 msgstr ""
 
-#: dialogs.c:446
+#: dialogs.c:490
 msgid "xiangqi (9x10)"
 msgstr ""
 
-#: dialogs.c:447
-msgid " "
+#: dialogs.c:491
+msgid "mighty lion"
 msgstr ""
 
-#: dialogs.c:448
+#: dialogs.c:492
 msgid "courier (12x8)"
 msgstr ""
 
-#: dialogs.c:465
+#: dialogs.c:493
+msgid "chu chess (10x10)"
+msgstr ""
+
+#: dialogs.c:494
+msgid "chu shogi (12x12)"
+msgstr ""
+
+#: dialogs.c:526
 #, c-format
 msgid "Warning: second engine (%s) does not support this!"
 msgstr "Предупреждение: второй движок (%s) не поддерживает это!"
 
-#: dialogs.c:488
+#: dialogs.c:554
 #, c-format
-msgid "Only bughouse is not available in viewer mode"
+msgid "Only bughouse is not available in viewer mode."
 msgstr ""
 
-#: dialogs.c:489
+#: dialogs.c:555
 #, c-format
 msgid ""
-"All variants not supported by first engine\n"
-"(currently %s) are disabled"
+"All variants not supported by the first engine\n"
+"(currently %s) are disabled."
 msgstr ""
 
-#: dialogs.c:490
+#: dialogs.c:572
 msgid "New Variant"
 msgstr "Варианты"
 
-#: dialogs.c:515
+#: dialogs.c:598
 msgid "Maximum Number of CPUs per Engine:"
 msgstr "Max число CPU:"
 
-#: dialogs.c:516
+#: dialogs.c:599
 msgid "Polygot Directory:"
 msgstr ""
 
-#: dialogs.c:517
+#: dialogs.c:600
 msgid "Hash-Table Size (MB):"
 msgstr "Размер хеша (МБ):"
 
-#: dialogs.c:518
+#: dialogs.c:601
 msgid "Nalimov EGTB Path:"
 msgstr "Путь к ЭБД:"
 
-#: dialogs.c:519
+#: dialogs.c:602
 msgid "EGTB Cache Size (MB):"
 msgstr "Кеш ЭБД (МБ):"
 
-#: dialogs.c:520
+#: dialogs.c:603
 msgid "Use GUI Book"
 msgstr ""
 
-#: dialogs.c:521
+#: dialogs.c:604
 msgid "Opening-Book Filename:"
 msgstr ""
 
-#: dialogs.c:522
+#: dialogs.c:605
 msgid "Book Depth (moves):"
 msgstr "Глубина книги:"
 
-#: dialogs.c:523
+#: dialogs.c:606
 msgid "Book Variety (0) vs. Strength (100):"
 msgstr "Варьирование:"
 
-#: dialogs.c:524
+#: dialogs.c:607
 msgid "Engine #1 Has Own Book"
 msgstr "Своя книга у движка 1"
 
-#: dialogs.c:525
+#: dialogs.c:608
 msgid "Engine #2 Has Own Book          "
 msgstr ""
 
-#: dialogs.c:534
+#: dialogs.c:617
 msgid "Common Engine Settings"
 msgstr "Общие настройки движков"
 
-#: dialogs.c:540
+#: dialogs.c:623
 msgid "Detect all Mates"
 msgstr "Определять мат"
 
-#: dialogs.c:541
+#: dialogs.c:624
 msgid "Verify Engine Result Claims"
 msgstr "Проверять требования движка"
 
-#: dialogs.c:542
+#: dialogs.c:625
 msgid "Draw if Insufficient Mating Material"
 msgstr "Ничья при нехватке материала"
 
-#: dialogs.c:543
+#: dialogs.c:626
 msgid "Adjudicate Trivial Draws (3-Move Delay)"
 msgstr "Ничья в технич. окончаниях"
 
-#: dialogs.c:544
+#: dialogs.c:627
 msgid "N-Move Rule:"
 msgstr ""
 
-#: dialogs.c:545
+#: dialogs.c:628
 msgid "N-fold Repeats:"
 msgstr ""
 
-#: dialogs.c:546
+#: dialogs.c:629
 msgid "Draw after N Moves Total:"
 msgstr "Присудить ничью после"
 
-#: dialogs.c:547
+#: dialogs.c:630
 msgid "Win / Loss Threshold:"
 msgstr "Победа/поражение при перевесе в"
 
-#: dialogs.c:548
+#: dialogs.c:631
 msgid "Negate Score of Engine #1"
 msgstr "Оценка движка 1 - абсолютная"
 
-#: dialogs.c:549
+#: dialogs.c:632
 msgid "Negate Score of Engine #2"
 msgstr "Оценка движка 2 - абсолютная"
 
-#: dialogs.c:556
+#: dialogs.c:639
 #, fuzzy
 msgid "Adjudicate non-ICS Games"
 msgstr "Присудить победу белым"
 
-#: dialogs.c:569
+#: dialogs.c:652
 msgid "Auto-Kibitz"
 msgstr ""
 
-#: dialogs.c:570
+#: dialogs.c:653
 msgid "Auto-Comment"
 msgstr "Комментарии"
 
-#: dialogs.c:571
+#: dialogs.c:654
 msgid "Auto-Observe"
 msgstr "Следить за игрой"
 
-#: dialogs.c:572
+#: dialogs.c:655
 msgid "Auto-Raise Board"
 msgstr "Раскрывать доску"
 
-#: dialogs.c:573
+#: dialogs.c:656
 msgid "Auto-Create Logon Script"
 msgstr ""
 
-#: dialogs.c:574
+#: dialogs.c:657
 msgid "Background Observe while Playing"
 msgstr "Следить в фоне"
 
-#: dialogs.c:575
+#: dialogs.c:658
 msgid "Dual Board for Background-Observed Game"
 msgstr "Двойная доска"
 
-#: dialogs.c:576
+#: dialogs.c:659
 msgid "Get Move List"
 msgstr "Запрашивать запись ходов"
 
-#: dialogs.c:577
+#: dialogs.c:660
 msgid "Quiet Play"
 msgstr "Спокойная игра"
 
-#: dialogs.c:578
+#: dialogs.c:661
 msgid "Seek Graph"
 msgstr "График поиска"
 
-#: dialogs.c:579
+#: dialogs.c:662
 msgid "Auto-Refresh Seek Graph"
 msgstr "Автообновление"
 
-#: dialogs.c:580
+#: dialogs.c:663
 msgid "Auto-InputBox PopUp"
 msgstr ""
 
-#: dialogs.c:581
+#: dialogs.c:664
+msgid "Quit after game"
+msgstr ""
+
+#: dialogs.c:665
 msgid "Premove"
 msgstr "Предварительный ход"
 
-#: dialogs.c:582
+#: dialogs.c:666
 msgid "Premove for White"
 msgstr ""
 
-#: dialogs.c:583
+#: dialogs.c:667
 msgid "First White Move:"
 msgstr "1-й ход белых"
 
-#: dialogs.c:584
+#: dialogs.c:668
 msgid "Premove for Black"
 msgstr ""
 
-#: dialogs.c:585
+#: dialogs.c:669
 msgid "First Black Move:"
 msgstr "1-й ход черных"
 
-#: dialogs.c:587
+#: dialogs.c:671
 msgid "Alarm"
 msgstr "Звонок"
 
-#: dialogs.c:588
+#: dialogs.c:672
 msgid "Alarm Time (msec):"
 msgstr ""
 
-#: dialogs.c:590
+#: dialogs.c:674
 msgid "Colorize Messages"
 msgstr ""
 
-#: dialogs.c:591
+#: dialogs.c:675
 msgid "Shout Text Colors:"
 msgstr ""
 
-#: dialogs.c:592
+#: dialogs.c:676
 msgid "S-Shout Text Colors:"
 msgstr ""
 
-#: dialogs.c:593
+#: dialogs.c:677
 msgid "Channel #1 Text Colors:"
 msgstr ""
 
-#: dialogs.c:594
+#: dialogs.c:678
 msgid "Other Channel Text Colors:"
 msgstr ""
 
-#: dialogs.c:595
+#: dialogs.c:679
 msgid "Kibitz Text Colors:"
 msgstr ""
 
-#: dialogs.c:596
+#: dialogs.c:680
 msgid "Tell Text Colors:"
 msgstr ""
 
-#: dialogs.c:597
+#: dialogs.c:681
 msgid "Challenge Text Colors:"
 msgstr ""
 
-#: dialogs.c:598
+#: dialogs.c:682
 msgid "Request Text Colors:"
 msgstr ""
 
-#: dialogs.c:599
+#: dialogs.c:683
 msgid "Seek Text Colors:"
 msgstr ""
 
-#: dialogs.c:606
+#: dialogs.c:690
 msgid "ICS Options"
 msgstr "Настройки соединения с ICS"
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Exact position match"
 msgstr ""
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Shown position is subset"
 msgstr ""
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Same material with exactly same Pawn chain"
 msgstr ""
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Same material"
 msgstr ""
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Material range (top board half optional)"
 msgstr ""
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Material difference (optional stuff balanced)"
 msgstr ""
 
-#: dialogs.c:624
+#: dialogs.c:708
 msgid "Auto-Display Tags"
 msgstr ""
 
-#: dialogs.c:625
+#: dialogs.c:709
 msgid "Auto-Display Comment"
 msgstr ""
 
-#: dialogs.c:626
+#: dialogs.c:710
 msgid ""
 "Auto-Play speed of loaded games\n"
 "(0 = instant, -1 = off):"
 msgstr ""
 
-#: dialogs.c:627
+#: dialogs.c:711
 msgid "Seconds per Move:"
 msgstr ""
 
-#: dialogs.c:628
+#: dialogs.c:712
 msgid ""
 "\n"
 "options to use in game-viewer mode:"
 msgstr ""
 
-#: dialogs.c:630
+#: dialogs.c:714
 msgid ""
 "\n"
 "Thresholds for position filtering in game list:"
 msgstr ""
 
-#: dialogs.c:631
+#: dialogs.c:715
 msgid "Elo of strongest player at least:"
 msgstr ""
 
-#: dialogs.c:632
+#: dialogs.c:716
 msgid "Elo of weakest player at least:"
 msgstr ""
 
-#: dialogs.c:633
+#: dialogs.c:717
 #, fuzzy
 msgid "No games before year:"
 msgstr "Нет загруженных шахматных партий"
 
-#: dialogs.c:634
+#: dialogs.c:718
 msgid "Minimum nr consecutive positions:"
 msgstr ""
 
-#: dialogs.c:635
+#: dialogs.c:719
 msgid "Search mode:"
 msgstr ""
 
-#: dialogs.c:636
+#: dialogs.c:720
 msgid "Also match reversed colors"
 msgstr ""
 
-#: dialogs.c:637
+#: dialogs.c:721
 msgid "Also match left-right flipped position"
 msgstr ""
 
-#: dialogs.c:645
+#: dialogs.c:729
 msgid "Load Game Options"
 msgstr "Параметры загрузки"
 
-#: dialogs.c:657
+#: dialogs.c:741
 msgid "Auto-Save Games"
 msgstr ""
 
-#: dialogs.c:658
+#: dialogs.c:742
 msgid "Own Games Only"
 msgstr ""
 
-#: dialogs.c:659
+#: dialogs.c:743
 msgid "Save Games on File:"
 msgstr ""
 
-#: dialogs.c:660
+#: dialogs.c:744
 msgid "Save Final Positions on File:"
 msgstr ""
 
-#: dialogs.c:661
+#: dialogs.c:745
 msgid "PGN Event Header:"
 msgstr ""
 
-#: dialogs.c:662
+#: dialogs.c:746
 msgid "Old Save Style (as opposed to PGN)"
 msgstr ""
 
-#: dialogs.c:663
+#: dialogs.c:747
 msgid "Include Number Tag in tourney PGN"
 msgstr ""
 
-#: dialogs.c:664
+#: dialogs.c:748
 msgid "Save Score/Depth Info in PGN"
 msgstr ""
 
-#: dialogs.c:665
+#: dialogs.c:749
 msgid "Save Out-of-Book Info in PGN           "
 msgstr ""
 
-#: dialogs.c:672
+#: dialogs.c:756
 msgid "Save Game Options"
 msgstr "Настройки сохранения"
 
-#: dialogs.c:681
+#: dialogs.c:765
 msgid "No Sound"
 msgstr "Без звука"
 
-#: dialogs.c:682
+#: dialogs.c:766
 msgid "Default Beep"
 msgstr "Простой сигнал"
 
-#: dialogs.c:683
+#: dialogs.c:767
 msgid "Above WAV File"
 msgstr ""
 
-#: dialogs.c:684
+#: dialogs.c:768
 msgid "Car Horn"
 msgstr ""
 
-#: dialogs.c:685
+#: dialogs.c:769
 msgid "Cymbal"
 msgstr ""
 
-#: dialogs.c:686
+#: dialogs.c:770
 msgid "Ding"
 msgstr ""
 
-#: dialogs.c:687
+#: dialogs.c:771
 msgid "Gong"
 msgstr ""
 
-#: dialogs.c:688
+#: dialogs.c:772
 msgid "Laser"
 msgstr ""
 
-#: dialogs.c:689
+#: dialogs.c:773
 msgid "Penalty"
 msgstr ""
 
-#: dialogs.c:690
+#: dialogs.c:774
 msgid "Phone"
 msgstr ""
 
-#: dialogs.c:691
+#: dialogs.c:775
 msgid "Pop"
 msgstr ""
 
-#: dialogs.c:692
+#: dialogs.c:776
+msgid "Roar"
+msgstr ""
+
+#: dialogs.c:777
 msgid "Slap"
 msgstr ""
 
-#: dialogs.c:693
+#: dialogs.c:778
 msgid "Wood Thunk"
 msgstr ""
 
-#: dialogs.c:695
+#: dialogs.c:780
 msgid "User File"
 msgstr ""
 
-#: dialogs.c:717
+#: dialogs.c:803
 msgid "User WAV File:"
 msgstr ""
 
-#: dialogs.c:718
+#: dialogs.c:804
 msgid "Sound Program:"
 msgstr ""
 
-#: dialogs.c:719
+#: dialogs.c:805
 msgid "Try-Out Sound:"
 msgstr ""
 
-#: dialogs.c:720
+#: dialogs.c:806
 msgid "Play"
 msgstr "Послушать"
 
-#: dialogs.c:721
+#: dialogs.c:807
 msgid "Move:"
 msgstr ""
 
-#: dialogs.c:722
+#: dialogs.c:808
 msgid "Win:"
 msgstr ""
 
-#: dialogs.c:723
+#: dialogs.c:809
 msgid "Lose:"
 msgstr ""
 
-#: dialogs.c:724
+#: dialogs.c:810
 msgid "Draw:"
 msgstr ""
 
-#: dialogs.c:725
+#: dialogs.c:811
 msgid "Unfinished:"
 msgstr ""
 
-#: dialogs.c:726
+#: dialogs.c:812
 msgid "Alarm:"
 msgstr ""
 
-#: dialogs.c:727
+#: dialogs.c:813
 msgid "Challenge:"
 msgstr ""
 
-#: dialogs.c:729
+#: dialogs.c:815
 msgid "Sounds Directory:"
 msgstr ""
 
-#: dialogs.c:730
+#: dialogs.c:816
 msgid "Shout:"
 msgstr ""
 
-#: dialogs.c:731
+#: dialogs.c:817
 msgid "S-Shout:"
 msgstr ""
 
-#: dialogs.c:732
+#: dialogs.c:818
 msgid "Channel:"
 msgstr ""
 
-#: dialogs.c:733
+#: dialogs.c:819
 msgid "Channel 1:"
 msgstr ""
 
-#: dialogs.c:734
+#: dialogs.c:820
 msgid "Tell:"
 msgstr ""
 
-#: dialogs.c:735
+#: dialogs.c:821
 msgid "Kibitz:"
 msgstr ""
 
-#: dialogs.c:736
+#: dialogs.c:822
 msgid "Request:"
 msgstr ""
 
-#: dialogs.c:737
+#: dialogs.c:823
+msgid "Lion roar:"
+msgstr ""
+
+#: dialogs.c:824
 msgid "Seek:"
 msgstr ""
 
-#: dialogs.c:753
+#: dialogs.c:840
 msgid "Sound Options"
 msgstr "Звуки"
 
-#: dialogs.c:774
+#: dialogs.c:861
 msgid "White Piece Color:"
 msgstr ""
 
 #. TRANSLATORS: R = single letter for the color red
-#: dialogs.c:777 dialogs.c:786 dialogs.c:792 dialogs.c:798 dialogs.c:804
-#: dialogs.c:810
+#: dialogs.c:864 dialogs.c:873 dialogs.c:879 dialogs.c:885 dialogs.c:891
+#: dialogs.c:897
 msgid "R"
 msgstr ""
 
 #. TRANSLATORS: G = single letter for the color green
-#: dialogs.c:779 dialogs.c:787 dialogs.c:793 dialogs.c:799 dialogs.c:805
-#: dialogs.c:811
+#: dialogs.c:866 dialogs.c:874 dialogs.c:880 dialogs.c:886 dialogs.c:892
+#: dialogs.c:898
 msgid "G"
 msgstr ""
 
 #. TRANSLATORS: B = single letter for the color blue
-#: dialogs.c:781 dialogs.c:788 dialogs.c:794 dialogs.c:800 dialogs.c:806
-#: dialogs.c:812
+#: dialogs.c:868 dialogs.c:875 dialogs.c:881 dialogs.c:887 dialogs.c:893
+#: dialogs.c:899
 msgid "B"
 msgstr ""
 
 #. TRANSLATORS: D = single letter to make a color darker
-#: dialogs.c:783 dialogs.c:789 dialogs.c:795 dialogs.c:801 dialogs.c:807
-#: dialogs.c:813
+#: dialogs.c:870 dialogs.c:876 dialogs.c:882 dialogs.c:888 dialogs.c:894
+#: dialogs.c:900
 msgid "D"
 msgstr ""
 
-#: dialogs.c:784
+#: dialogs.c:871
 msgid "Black Piece Color:"
 msgstr "Черные фигуры"
 
-#: dialogs.c:790
+#: dialogs.c:877
 msgid "Light Square Color:"
 msgstr "Белые поля"
 
-#: dialogs.c:796
+#: dialogs.c:883
 msgid "Dark Square Color:"
 msgstr "Черные поля"
 
-#: dialogs.c:802
+#: dialogs.c:889
 msgid "Highlight Color:"
 msgstr "Выделенное поле"
 
-#: dialogs.c:808
+#: dialogs.c:895
 msgid "Premove Highlight Color:"
 msgstr "Предварит. ход"
 
-#: dialogs.c:814
+#: dialogs.c:901
 msgid "Flip Pieces Shogi Style        (Colored buttons restore default)"
 msgstr ""
 
-#: dialogs.c:816
+#: dialogs.c:903
 msgid "Mono Mode"
 msgstr "Монохромная"
 
-#: dialogs.c:817
-msgid "Line Gap ( -1 = default for board size):"
+#: dialogs.c:904
+msgid "Line Gap (-1 = default for board size):"
 msgstr ""
 
-#: dialogs.c:818
+#: dialogs.c:905
 msgid "Use Board Textures"
 msgstr ""
 
-#: dialogs.c:819
+#: dialogs.c:906
 msgid "Light-Squares Texture File:"
 msgstr ""
 
-#: dialogs.c:820
+#: dialogs.c:907
 msgid "Dark-Squares Texture File:"
 msgstr ""
 
-#: dialogs.c:821
+#: dialogs.c:908
 msgid "Use external piece bitmaps with their own colors"
 msgstr ""
 
-#: dialogs.c:822
+#: dialogs.c:909
 msgid "Directory with Pieces Images:"
 msgstr ""
 
-#: dialogs.c:872
+#: dialogs.c:959
 msgid "Board Options"
 msgstr "Настройки доски"
 
-#: dialogs.c:925 menus.c:634
+#: dialogs.c:1012 menus.c:634
 msgid "ICS text menu"
 msgstr ""
 
-#: dialogs.c:947
+#: dialogs.c:1034
 msgid "clear"
 msgstr ""
 
-#: dialogs.c:948 dialogs.c:1036
+#: dialogs.c:1035 dialogs.c:1123
 msgid "save changes"
 msgstr ""
 
-#: dialogs.c:1051
+#: dialogs.c:1138
 #, fuzzy
 msgid "Edit book"
 msgstr "Правка"
 
-#: dialogs.c:1051 menus.c:636
+#: dialogs.c:1138 menus.c:636
 msgid "Tags"
 msgstr "Описание"
 
-#: dialogs.c:1193
+#: dialogs.c:1280
 msgid "ICS input box"
 msgstr ""
 
-#: dialogs.c:1225
+#: dialogs.c:1312
 msgid "Type a move"
 msgstr ""
 
-#: dialogs.c:1251
+#: dialogs.c:1338
 msgid "Engine has no options"
 msgstr ""
 
-#: dialogs.c:1253
+#: dialogs.c:1340
 msgid "Engine Settings"
 msgstr ""
 
-#: dialogs.c:1278
+#: dialogs.c:1365
 msgid "Select engine from list:"
 msgstr ""
 
-#: dialogs.c:1281
+#: dialogs.c:1368
 msgid "or specify one below:"
 msgstr ""
 
-#: dialogs.c:1282
+#: dialogs.c:1369
 msgid "Nickname (optional):"
 msgstr ""
 
-#: dialogs.c:1283
+#: dialogs.c:1370
 msgid "Use nickname in PGN player tags of engine-engine games"
 msgstr ""
 
-#: dialogs.c:1284
+#: dialogs.c:1371
 msgid "Engine Directory:"
 msgstr ""
 
-#: dialogs.c:1285
+#: dialogs.c:1372
 msgid "Engine Command:"
 msgstr ""
 
-#: dialogs.c:1286
+#: dialogs.c:1373
 msgid "(Directory will be derived from engine path when empty)"
 msgstr ""
 
-#: dialogs.c:1287
+#: dialogs.c:1374
 msgid "UCI"
 msgstr ""
 
-#: dialogs.c:1288
+#: dialogs.c:1375
 msgid "WB protocol v1 (do not wait for engine features)"
 msgstr ""
 
-#: dialogs.c:1289
+#: dialogs.c:1376
 msgid "Must not use GUI book"
 msgstr ""
 
-#: dialogs.c:1290
+#: dialogs.c:1377
 msgid "Add this engine to the list"
 msgstr ""
 
-#: dialogs.c:1291
+#: dialogs.c:1378
 msgid "Force current variant with this engine"
 msgstr ""
 
-#: dialogs.c:1341
+#: dialogs.c:1428
 msgid "Load first engine"
 msgstr ""
 
-#: dialogs.c:1347
+#: dialogs.c:1434
 msgid "Load second engine"
 msgstr ""
 
-#: dialogs.c:1370
+#: dialogs.c:1457
 msgid "shuffle"
 msgstr ""
 
-#: dialogs.c:1371
+#: dialogs.c:1458
 msgid "Start-position number:"
 msgstr "Номер позиции:"
 
-#: dialogs.c:1372
+#: dialogs.c:1459
 #, fuzzy
 msgid "randomize"
 msgstr "Случайно"
 
-#: dialogs.c:1373
+#: dialogs.c:1460
 msgid "pick fixed"
 msgstr ""
 
-#: dialogs.c:1390
+#: dialogs.c:1477
 msgid "New Shuffle Game"
 msgstr "Новая в смешанные шахматы..."
 
-#: dialogs.c:1409
+#: dialogs.c:1496
 msgid "classical"
 msgstr ""
 
-#: dialogs.c:1410
+#: dialogs.c:1497
 msgid "incremental"
 msgstr ""
 
-#: dialogs.c:1411
+#: dialogs.c:1498
 msgid "fixed max"
 msgstr ""
 
-#: dialogs.c:1412
+#: dialogs.c:1499
 msgid "Moves per session:"
 msgstr ""
 
-#: dialogs.c:1413
+#: dialogs.c:1500
 msgid "Initial time (min):"
 msgstr ""
 
-#: dialogs.c:1414
+#: dialogs.c:1501
 msgid "Increment or max (sec/move):"
 msgstr ""
 
-#: dialogs.c:1415
+#: dialogs.c:1502
 #, fuzzy
 msgid "Time-Odds factors:"
 msgstr "Фактор времени движков:"
 
-#: dialogs.c:1416
+#: dialogs.c:1503
 #, fuzzy
 msgid "Engine #1"
 msgstr "Движок"
 
-#: dialogs.c:1417
+#: dialogs.c:1504
 #, fuzzy
 msgid "Engine #2 / Human"
 msgstr "Своя книга у движка 1"
 
-#: dialogs.c:1457 dialogs.c:1460 dialogs.c:1465 dialogs.c:1466
+#: dialogs.c:1544 dialogs.c:1547 dialogs.c:1552 dialogs.c:1553
 #: gtk/xoptions.c:194
 msgid "Unused"
 msgstr ""
 
-#: dialogs.c:1478
-msgid "Time Control"
-msgstr ""
-
-#: dialogs.c:1507
+#: dialogs.c:1594
 msgid "Error writing to chess program"
 msgstr "Ошибка подключения к шахматной программе"
 
-#: dialogs.c:1574
+#: dialogs.c:1662 xaw/xoptions.c:1276
 #, fuzzy
 msgid "Cancel"
 msgstr "Отмена"
 
-#: dialogs.c:1579 dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:1667 dialogs.c:2061 dialogs.c:2065
 msgid "King"
 msgstr "Король"
 
-#: dialogs.c:1582
+#: dialogs.c:1670
 msgid "Captain"
 msgstr ""
 
-#: dialogs.c:1583
+#: dialogs.c:1671
 msgid "Lieutenant"
 msgstr ""
 
-#: dialogs.c:1584
+#: dialogs.c:1672
 msgid "General"
 msgstr "Общие..."
 
-#: dialogs.c:1585
+#: dialogs.c:1673
 msgid "Warlord"
 msgstr ""
 
-#: dialogs.c:1587 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1675 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Knight"
 msgstr "Конь"
 
-#: dialogs.c:1588 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1676 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Bishop"
 msgstr "Слон"
 
-#: dialogs.c:1589 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1677 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Rook"
 msgstr "Ладья"
 
-#: dialogs.c:1593 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1681 dialogs.c:2062 dialogs.c:2066
 msgid "Archbishop"
 msgstr "Архиепископ"
 
-#: dialogs.c:1594 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1682 dialogs.c:2062 dialogs.c:2066
 msgid "Chancellor"
 msgstr "Канцлер"
 
-#: dialogs.c:1596 dialogs.c:1971 dialogs.c:1975 dialogs.c:1993
+#: dialogs.c:1684 dialogs.c:2061 dialogs.c:2065 dialogs.c:2083
 msgid "Queen"
 msgstr "Ферзь"
 
-#: dialogs.c:1600
+#: dialogs.c:1686
+msgid "Lion"
+msgstr ""
+
+#: dialogs.c:1690
 msgid "Defer"
 msgstr ""
 
-#: dialogs.c:1601 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1691 dialogs.c:2062 dialogs.c:2066
 msgid "Promote"
 msgstr "Превратить"
 
-#: dialogs.c:1616
+#: dialogs.c:1706
 msgid "Chat partner:"
 msgstr ""
 
-#: dialogs.c:1701
+#: dialogs.c:1791
 msgid "Chat box"
 msgstr ""
 
-#: dialogs.c:1742
+#: dialogs.c:1832
 msgid "factory"
 msgstr "Стандарт"
 
-#: dialogs.c:1743
+#: dialogs.c:1833
 msgid "up"
 msgstr "Вверх"
 
-#: dialogs.c:1744
+#: dialogs.c:1834
 msgid "down"
 msgstr "Вниз"
 
-#: dialogs.c:1762
+#: dialogs.c:1852
 msgid "No tag selected"
 msgstr ""
 
-#: dialogs.c:1793
+#: dialogs.c:1883
 #, fuzzy
 msgid "Game-list options"
 msgstr "Параметры загрузки"
 
-#: dialogs.c:1869 dialogs.c:1883
+#: dialogs.c:1959 dialogs.c:1973
 msgid "Error"
 msgstr "Ошибка"
 
-#: dialogs.c:1906
+#: dialogs.c:1996
 msgid "Fatal Error"
 msgstr "Неисправимая ошибка"
 
-#: dialogs.c:1906
+#: dialogs.c:1996
 msgid "Exiting"
 msgstr "Выход"
 
-#: dialogs.c:1917
+#: dialogs.c:2007
 msgid "Information"
 msgstr "Информация"
 
-#: dialogs.c:1924
+#: dialogs.c:2014
 msgid "Note"
 msgstr "Примечание"
 
-#: dialogs.c:1970 dialogs.c:2245 dialogs.c:2248
+#: dialogs.c:2060 dialogs.c:2340 dialogs.c:2343
 msgid "White"
 msgstr "Белые"
 
-#: dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Pawn"
 msgstr "Пешка"
 
-#: dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:2061 dialogs.c:2065
 msgid "Elephant"
 msgstr "Слон (стар.)"
 
-#: dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:2061 dialogs.c:2065
 msgid "Cannon"
 msgstr "Пушка"
 
-#: dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:2062 dialogs.c:2066
 msgid "Demote"
 msgstr "Разжаловать"
 
-#: dialogs.c:1973 dialogs.c:1977
+#: dialogs.c:2063 dialogs.c:2067
 msgid "Empty square"
 msgstr "Пустое поле"
 
-#: dialogs.c:1973 dialogs.c:1977
+#: dialogs.c:2063 dialogs.c:2067
 msgid "Clear board"
 msgstr "Очистить доску"
 
-#: dialogs.c:1974 dialogs.c:2257 dialogs.c:2260
+#: dialogs.c:2064 dialogs.c:2352 dialogs.c:2355
 msgid "Black"
 msgstr "Черные"
 
-#: dialogs.c:2073 menus.c:787
+#: dialogs.c:2163 menus.c:787
 msgid "File"
 msgstr "Файл"
 
-#: dialogs.c:2074 menus.c:788
+#: dialogs.c:2164 menus.c:788
 msgid "Edit"
 msgstr "Правка"
 
-#: dialogs.c:2075 menus.c:789
+#: dialogs.c:2165 menus.c:789
 msgid "View"
 msgstr "Вид"
 
-#: dialogs.c:2076 menus.c:790
+#: dialogs.c:2166 menus.c:790
 msgid "Mode"
 msgstr "Режим"
 
-#: dialogs.c:2077 menus.c:791
+#: dialogs.c:2167 menus.c:791
 msgid "Action"
 msgstr "Игра"
 
-#: dialogs.c:2078 menus.c:792
+#: dialogs.c:2168 menus.c:792
 msgid "Engine"
 msgstr "Движок"
 
-#: dialogs.c:2079 menus.c:793
+#: dialogs.c:2169 menus.c:793
 msgid "Options"
 msgstr "Настройки"
 
-#: dialogs.c:2080 menus.c:794
+#: dialogs.c:2170 menus.c:794
 msgid "Help"
 msgstr "Справка"
 
-#: dialogs.c:2090
+#: dialogs.c:2180
 msgid "<<"
 msgstr ""
 
-#: dialogs.c:2091
+#: dialogs.c:2181
 msgid "<"
 msgstr ""
 
-#: dialogs.c:2093
+#: dialogs.c:2183
 msgid ">"
 msgstr ""
 
-#: dialogs.c:2094
+#: dialogs.c:2184
 msgid ">>"
 msgstr ""
 
-#: dialogs.c:2364
+#: dialogs.c:2458
 msgid "Directories:"
 msgstr ""
 
-#: dialogs.c:2365
+#: dialogs.c:2459
 #, fuzzy
 msgid "Files:"
 msgstr "Файл"
 
-#: dialogs.c:2366
+#: dialogs.c:2460
 msgid "by name"
 msgstr ""
 
-#: dialogs.c:2367
+#: dialogs.c:2461
 msgid "by type"
 msgstr ""
 
-#: dialogs.c:2370
+#: dialogs.c:2464
 #, fuzzy
 msgid "Filename:"
 msgstr "Фильтр"
 
-#: dialogs.c:2371
+#: dialogs.c:2465
 msgid "New directory"
 msgstr ""
 
-#: dialogs.c:2372
+#: dialogs.c:2466
 #, fuzzy
 msgid "File type:"
 msgstr "Фильтр"
 
-#: dialogs.c:2447
+#: dialogs.c:2541
 #, fuzzy
 msgid "Contents of"
 msgstr "Комментарии"
 
-#: dialogs.c:2473
+#: dialogs.c:2567
 msgid "  next page"
 msgstr ""
 
-#: dialogs.c:2490
+#: dialogs.c:2584
 msgid "FIRST TYPE DIRECTORY NAME HERE"
 msgstr ""
 
-#: dialogs.c:2491
+#: dialogs.c:2585
 msgid "TRY ANOTHER NAME"
 msgstr ""
 
-#: draw.c:293
+#: draw.c:310
 msgid ""
-"No default pieces installed\n"
-"Select your own -pieceImageDirectory"
+"No default pieces installed!\n"
+"Select your own using '-pieceImageDirectory'."
 msgstr ""
 
-#: engineoutput.c:107 menus.c:630
+#: engineoutput.c:110 menus.c:630
 #, fuzzy, c-format
 msgid "Engine Output"
 msgstr "Вывод движка"
 
-#: engineoutput.c:117
+#: engineoutput.c:120
 #, c-format
 msgid "%s (%d reversible ply)"
 msgid_plural "%s (%d reversible plies)"
 msgstr[0] ""
 msgstr[1] ""
 
-#: engineoutput.c:509 engineoutput.c:512 nengineoutput.c:81 nengineoutput.c:88
+#: engineoutput.c:542 engineoutput.c:545 nengineoutput.c:82 nengineoutput.c:90
 msgid "NPS"
 msgstr "NPS (Узл./сек.)"
 
@@ -2179,50 +2261,50 @@ msgstr "NPS (Узл./сек.)"
 msgid "Reading game file (%d)"
 msgstr "Неправильный формат файла"
 
-#: gtk/xboard.c:844 xaw/xboard.c:1162
+#: gtk/xboard.c:867 xaw/xboard.c:1052
 #, c-format
 msgid "%s: can't cd to CHESSDIR: "
 msgstr ""
 
-#: gtk/xboard.c:853 xaw/xboard.c:1171
+#: gtk/xboard.c:876 xaw/xboard.c:1061
 #, c-format
 msgid "Failed to open file '%s'\n"
 msgstr ""
 
-#: gtk/xboard.c:868 xaw/xboard.c:1180
+#: gtk/xboard.c:891 xaw/xboard.c:1070
 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size"
 msgstr ""
 
-#: gtk/xboard.c:887 xaw/xboard.c:1212
+#: gtk/xboard.c:910 xaw/xboard.c:1102
 #, c-format
 msgid "%s: bad boardSize syntax %s\n"
 msgstr ""
 
-#: gtk/xboard.c:927 xaw/xboard.c:1249
+#: gtk/xboard.c:950 xaw/xboard.c:1139
 #, c-format
 msgid "%s: unrecognized boardSize name %s\n"
 msgstr ""
 
-#: gtk/xboard.c:968 xaw/xboard.c:1286
+#: gtk/xboard.c:991 xaw/xboard.c:1176
 #, c-format
 msgid "%s: too few colors available; trying monochrome mode\n"
 msgstr ""
 
-#: gtk/xboard.c:1258 xaw/xboard.c:1568
+#: gtk/xboard.c:1281 xaw/xboard.c:1458
 #, c-format
 msgid "Unable to create font set for %s.\n"
 msgstr ""
 
-#: gtk/xboard.c:1283 xaw/xboard.c:1591
+#: gtk/xboard.c:1306 xaw/xboard.c:1481
 #, c-format
 msgid "%s: no fonts match pattern %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1722 xaw/xboard.c:2081
+#: gtk/xboard.c:1745 xaw/xboard.c:1971
 msgid "Can't open temp file"
 msgstr ""
 
-#: gtk/xboard.c:2174
+#: gtk/xboard.c:2199
 #, fuzzy
 msgid "Failed to open file"
 msgstr "Ошибка запуска cmail"
@@ -2278,12 +2360,13 @@ msgid "New Game"
 msgstr "Новая в смешанные шахматы..."
 
 #: menus.c:583
-msgid "New Shuffle Game ..."
+#, fuzzy
+msgid "New Shuffle Game..."
 msgstr "Новая в смешанные шахматы..."
 
 #: menus.c:584
 #, fuzzy
-msgid "New Variant ..."
+msgid "New Variant..."
 msgstr "Варианты"
 
 #: menus.c:586
@@ -2552,19 +2635,22 @@ msgid "Adjudicate Draw"
 msgstr "Присудить ничью"
 
 #: menus.c:684
-msgid "Load New 1st Engine ..."
+msgid "Load New 1st Engine..."
 msgstr ""
 
 #: menus.c:685
-msgid "Load New 2nd Engine ..."
-msgstr ""
+#, fuzzy
+msgid "Load New 2nd Engine..."
+msgstr "Общие для движков...   Alt+Shift+U"
 
 #: menus.c:687
-msgid "Engine #1 Settings ..."
+#, fuzzy
+msgid "Engine #1 Settings..."
 msgstr "Настройки движка 1..."
 
 #: menus.c:688
-msgid "Engine #2 Settings ..."
+#, fuzzy
+msgid "Engine #2 Settings..."
 msgstr "Настройки движка 2..."
 
 #: menus.c:690
@@ -2585,46 +2671,51 @@ msgid "Retract Move"
 msgstr "Взять ход назад   Ctrl+X"
 
 #: menus.c:700
-msgid "General ..."
+#, fuzzy
+msgid "General..."
 msgstr "Общие..."
 
 #: menus.c:702
 #, fuzzy
-msgid "Time Control ..."
+msgid "Time Control..."
 msgstr "Контроль времени...   Alt+Shift+T"
 
 #: menus.c:703
 #, fuzzy
-msgid "Common Engine ..."
+msgid "Common Engine..."
 msgstr "Общие для движков...   Alt+Shift+U"
 
 #: menus.c:704
 #, fuzzy
-msgid "Adjudications ..."
+msgid "Adjudications..."
 msgstr "Присуждение...   Alt+Shift+J"
 
 #: menus.c:705
-msgid "ICS ..."
-msgstr "ICS..."
+msgid "ICS..."
+msgstr ""
 
 #: menus.c:706
-msgid "Match ..."
+msgid "Tournament..."
 msgstr ""
 
 #: menus.c:707
-msgid "Load Game ..."
+#, fuzzy
+msgid "Load Game..."
 msgstr "Загрузка...   Alt+Shift+L"
 
 #: menus.c:708
-msgid "Save Game ..."
+#, fuzzy
+msgid "Save Game..."
 msgstr "Сохранение...   Alt+Shift+S"
 
 #: menus.c:709
-msgid "Game List ..."
+#, fuzzy
+msgid "Game List..."
 msgstr "Список партий..."
 
 #: menus.c:710
-msgid "Sounds ..."
+#, fuzzy
+msgid "Sounds..."
 msgstr "Звуки..."
 
 #: menus.c:713
@@ -2697,21 +2788,22 @@ msgstr ""
 msgid "e-Mail Bug Report"
 msgstr ""
 
-#: nengineoutput.c:78 nengineoutput.c:85
+#: nengineoutput.c:78 nengineoutput.c:86
 #, fuzzy
 msgid "engine name"
 msgstr "Движок"
 
-#: nengineoutput.c:80 nengineoutput.c:87
+#. TRANSLATORS: noun, as in "the move Nf3"
+#: nengineoutput.c:81 nengineoutput.c:89
 #, fuzzy
 msgid "move"
 msgstr "ходов"
 
-#: nengineoutput.c:153
+#: nengineoutput.c:155
 msgid "Engine output"
 msgstr "Вывод движка"
 
-#: nengineoutput.c:157
+#: nengineoutput.c:159
 msgid ""
 "Mismatch of STRIDE in nengineoutput.c\n"
 "Change and recompile!"
@@ -2796,7 +2888,7 @@ msgstr ""
 
 #: usystem.c:230
 #, c-format
-msgid "%s: can't parse foreground color in `%s'\n"
+msgid "%s: can't parse foreground color in '%s'\n"
 msgstr ""
 
 #: usystem.c:259
@@ -2804,54 +2896,25 @@ msgstr ""
 msgid "%s: can't parse color names; disabling colorization\n"
 msgstr ""
 
-#: usystem.c:371
+#: usystem.c:374
 #, c-format
 msgid "ERROR: Unknown user %s (in path %s)\n"
 msgstr ""
 
-#: usystem.c:556
+#: usystem.c:557
 msgid "Socket support is not configured in"
 msgstr ""
 
-#: usystem.c:645
+#: usystem.c:646
 msgid "internal rcmd not implemented for Unix"
 msgstr ""
 
-#: xaw/xboard.c:478
-#, c-format
-msgid "%s: Can't access XPM directory %s\n"
-msgstr ""
-
-#: xaw/xboard.c:499
-#, c-format
-msgid "Available `%s' sizes:\n"
-msgstr ""
-
-#: xaw/xboard.c:532
-#, c-format
-msgid "Error: No `%s' files!\n"
-msgstr ""
-
-#: xaw/xboard.c:545
-#, c-format
-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 ""
-
-#: xaw/xboard.c:1292
+#: xaw/xboard.c:1182
 #, c-format
 msgid "white pixel = 0x%lx, black pixel = 0x%lx\n"
 msgstr ""
 
-#: xaw/xengineoutput.c:115
-#, c-format
-msgid "Error %d loading icon image\n"
-msgstr ""
-
-#: xaw/xoptions.c:321 xaw/xoptions.c:1023
+#: xaw/xoptions.c:321 xaw/xoptions.c:1025
 msgid "browse"
 msgstr ""
 
@@ -2867,13 +2930,15 @@ msgstr ""
 msgid "Shift"
 msgstr ""
 
-#: xaw/xoptions.c:1270
+#: xaw/xoptions.c:1272
 msgid "OK"
 msgstr "OK"
 
-#: xaw/xoptions.c:1274
-msgid "cancel"
-msgstr "Отмена"
+#~ msgid "ICS ..."
+#~ msgstr "ICS..."
+
+#~ msgid "cancel"
+#~ msgstr "Отмена"
 
 #~ msgid "New Game        Ctrl+N"
 #~ msgstr "Новая партия   Ctrl+N"
index dc80ec1..e89a187 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-01-05 12:51-0800\n"
+"POT-Creation-Date: 2014-01-19 22:19-0800\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,559 +18,582 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: args.h:820
+#: args.h:833
 #, c-format
 msgid "%s in settings file\n"
 msgstr ""
 
-#: args.h:830
+#: args.h:867
 #, c-format
 msgid "Bad integer value %s"
 msgstr ""
 
-#: args.h:923 args.h:1170
+#: args.h:968 args.h:1229
 #, c-format
 msgid "Unrecognized argument %s"
 msgstr ""
 
-#: args.h:954
+#: args.h:999
 #, c-format
 msgid "No value provided for argument %s"
 msgstr ""
 
-#: args.h:1014
+#: args.h:1059
 #, c-format
 msgid "Incomplete \\ escape in value for %s"
 msgstr ""
 
-#: args.h:1125
+#: args.h:1170
 #, fuzzy, c-format
 msgid "Failed to open indirection file %s"
 msgstr "Dosya açýlamadý"
 
-#: args.h:1142
+#: args.h:1187
 #, c-format
 msgid "Unrecognized boolean argument value %s"
 msgstr ""
 
 #. 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:744
+#: backend.c:800
 msgid "first"
 msgstr ""
 
 #. 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:747
+#: backend.c:803
 msgid "second"
 msgstr ""
 
-#: backend.c:827
+#: backend.c:885
 #, c-format
 msgid "protocol version %d not supported"
 msgstr ""
 
-#: backend.c:933
+#: backend.c:991
 msgid "You did not specify the engine executable"
 msgstr ""
 
-#: backend.c:989
+#: backend.c:1049
 #, c-format
 msgid "bad timeControl option %s"
 msgstr ""
 
-#: backend.c:1004
+#: backend.c:1064
 #, c-format
 msgid "bad searchTime option %s"
 msgstr ""
 
-#: backend.c:1110
+#: backend.c:1170
 #, c-format
 msgid "Variant %s supported only in ICS mode"
 msgstr ""
 
-#: backend.c:1128
+#: backend.c:1188
 #, c-format
 msgid "Unknown variant name %s"
 msgstr ""
 
-#: backend.c:1375
+#: backend.c:1439
 msgid "Starting chess program"
 msgstr ""
 
-#: backend.c:1398
+#: backend.c:1462
 msgid "Bad game file"
 msgstr ""
 
-#: backend.c:1405
+#: backend.c:1469
 msgid "Bad position file"
 msgstr ""
 
-#: backend.c:1419
+#: backend.c:1483
 msgid "Pick new game"
 msgstr ""
 
-#: backend.c:1488
+#: backend.c:1552
 msgid ""
-"You restarted an already completed tourney\n"
-"One more cycle will now be added to it\n"
-"Games commence in 10 sec"
+"You restarted an already completed tourney.\n"
+"One more cycle will now be added to it.\n"
+"Games commence in 10 sec."
 msgstr ""
 
-#: backend.c:1495
+#: backend.c:1559
 #, c-format
 msgid "All games in tourney '%s' are already played or playing"
 msgstr ""
 
-#: backend.c:1502
+#: backend.c:1566
 msgid "Can't have a match with no chess programs"
 msgstr ""
 
-#: backend.c:1539
+#: backend.c:1620
 #, c-format
 msgid "Could not open comm port %s"
 msgstr ""
 
-#: backend.c:1542
+#: backend.c:1623
 #, c-format
 msgid "Could not connect to host %s, port %s"
 msgstr ""
 
-#: backend.c:1598
+#: backend.c:1679
 #, c-format
 msgid "Unknown initialMode %s"
 msgstr ""
 
-#: backend.c:1624
+#: backend.c:1705
 msgid "AnalyzeFile mode requires a game file"
 msgstr ""
 
-#: backend.c:1651
+#: backend.c:1732
 msgid "Analysis mode requires a chess engine"
 msgstr ""
 
-#: backend.c:1655
+#: backend.c:1736
 msgid "Analysis mode does not work with ICS mode"
 msgstr ""
 
-#: backend.c:1666
+#: backend.c:1747
 msgid "MachineWhite mode requires a chess engine"
 msgstr ""
 
-#: backend.c:1671
+#: backend.c:1752
 msgid "MachineWhite mode does not work with ICS mode"
 msgstr ""
 
-#: backend.c:1678
+#: backend.c:1759
 msgid "MachineBlack mode requires a chess engine"
 msgstr ""
 
-#: backend.c:1683
+#: backend.c:1764
 msgid "MachineBlack mode does not work with ICS mode"
 msgstr ""
 
-#: backend.c:1690
+#: backend.c:1771
 msgid "TwoMachines mode requires a chess engine"
 msgstr ""
 
-#: backend.c:1695
+#: backend.c:1776
 msgid "TwoMachines mode does not work with ICS mode"
 msgstr ""
 
-#: backend.c:1706
+#: backend.c:1787
 msgid "Training mode requires a game file"
 msgstr ""
 
-#: backend.c:1869 backend.c:1924 backend.c:1947 backend.c:2346
+#: backend.c:1950 backend.c:2005 backend.c:2028 backend.c:2430
 msgid "Error writing to ICS"
 msgstr ""
 
-#: backend.c:1884
+#: backend.c:1965
 msgid "Error reading from keyboard"
 msgstr ""
 
-#: backend.c:1887
+#: backend.c:1968
 msgid "Got end of file from keyboard"
 msgstr ""
 
-#: backend.c:2192
+#: backend.c:2276
 #, c-format
 msgid "Unknown wild type %d"
 msgstr ""
 
-#: backend.c:2263 usystem.c:329
+#: backend.c:2347 usystem.c:329
 msgid "Error writing to display"
 msgstr ""
 
-#: backend.c:3019
+#. TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers
+#: backend.c:3105
 #, c-format
 msgid "your opponent kibitzes: %s"
 msgstr ""
 
-#: backend.c:3548
+#: backend.c:3634
 msgid "Error gathering move list: two headers"
 msgstr ""
 
-#: backend.c:3595
+#: backend.c:3681
 msgid "Error gathering move list: nested"
 msgstr ""
 
-#: backend.c:3699 backend.c:4117 backend.c:4321 backend.c:4880 backend.c:4884
-#: backend.c:6900 backend.c:12101 backend.c:13816 backend.c:13893
-#: backend.c:13939 backend.c:13945 backend.c:13950 backend.c:13955
+#: backend.c:3785 backend.c:4203 backend.c:4407 backend.c:4966 backend.c:4970
+#: backend.c:7073 backend.c:12577 backend.c:14306 backend.c:14383
+#: backend.c:14429 backend.c:14435 backend.c:14440 backend.c:14445
 msgid "vs."
 msgstr ""
 
-#: backend.c:3827
+#: backend.c:3913
 msgid "Illegal move (rejected by ICS)"
 msgstr ""
 
-#: backend.c:4165
+#: backend.c:4251
 msgid "Connection closed by ICS"
 msgstr ""
 
-#: backend.c:4167
+#: backend.c:4253
 msgid "Error reading from ICS"
 msgstr ""
 
-#: backend.c:4244
+#: backend.c:4330
 #, c-format
 msgid ""
 "Failed to parse board string:\n"
 "\"%s\""
 msgstr ""
 
-#: backend.c:4253 backend.c:9756
+#: backend.c:4339 backend.c:10203
 msgid "Game too long; increase MAX_MOVES and recompile"
 msgstr ""
 
-#: backend.c:4372
+#: backend.c:4458
 msgid "Error gathering move list: extra board"
 msgstr ""
 
-#: backend.c:4804 backend.c:4826
+#: backend.c:4890 backend.c:4912
 #, c-format
 msgid "Couldn't parse move \"%s\" from ICS"
 msgstr ""
 
-#: backend.c:5063
+#: backend.c:5161
 #, c-format
 msgid "say Internal error; bad moveType %d (%d,%d-%d,%d)"
 msgstr ""
 
-#: backend.c:5133
+#: backend.c:5232
 msgid "You cannot do this while you are playing or observing"
 msgstr ""
 
-#: backend.c:6029
+#: backend.c:6174
 msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!"
 msgstr ""
 
-#: backend.c:6491
+#: backend.c:6664
 msgid "You are playing Black"
 msgstr "Siz Siyah'sýnýz"
 
-#: backend.c:6500 backend.c:6527
+#: backend.c:6673 backend.c:6700
 msgid "You are playing White"
 msgstr "Siz Beyaz'sýnýz"
 
-#: backend.c:6509 backend.c:6535 backend.c:6655 backend.c:6680 backend.c:6696
-#: backend.c:14592
+#: backend.c:6682 backend.c:6708 backend.c:6828 backend.c:6853 backend.c:6869
+#: backend.c:15113
 msgid "It is White's turn"
 msgstr "Sýra Beyaz'da"
 
-#: backend.c:6513 backend.c:6539 backend.c:6663 backend.c:6686 backend.c:6717
-#: backend.c:14584
+#: backend.c:6686 backend.c:6712 backend.c:6836 backend.c:6859 backend.c:6890
+#: backend.c:15105
 msgid "It is Black's turn"
 msgstr "Sýra Siyah'ta"
 
-#: backend.c:6552
+#: backend.c:6725
 msgid "Displayed position is not current"
 msgstr ""
 
-#: backend.c:6790
+#: backend.c:6963
 msgid "Illegal move"
 msgstr "Geçersiz hamle"
 
-#: backend.c:6857
+#: backend.c:7030
 msgid "End of game"
 msgstr "Oyun sonu"
 
-#: backend.c:6860
+#: backend.c:7033
 msgid "Incorrect move"
 msgstr "Yanlýþ hamle"
 
-#: backend.c:7169 backend.c:7296
+#: backend.c:7423 backend.c:7569
 msgid "Pull pawn backwards to under-promote"
 msgstr ""
 
-#: backend.c:7527
+#: backend.c:7532
+msgid "only marked squares are legal"
+msgstr ""
+
+#: backend.c:7820
 msgid "Swiss tourney finished"
 msgstr ""
 
-#: backend.c:8103
+#: backend.c:8336
+msgid "could not load EGBB library"
+msgstr ""
+
+#: backend.c:8339
+msgid "wrong EGBB version"
+msgstr ""
+
+#: backend.c:8452
 msgid "Invalid pairing from pairing engine"
 msgstr ""
 
-#: backend.c:8236
+#: backend.c:8603
 #, c-format
 msgid "Illegal move \"%s\" from %s machine"
 msgstr ""
 
-#: backend.c:8457
+#: backend.c:8849
 msgid "Bad FEN received from engine"
 msgstr ""
 
-#: backend.c:8601 backend.c:13681 backend.c:13746
+#: backend.c:8950
+msgid "Engine did not send setup for non-standard variant"
+msgstr ""
+
+#: backend.c:9023 backend.c:14168 backend.c:14236
 #, c-format
 msgid "%s does not support analysis"
 msgstr ""
 
-#: backend.c:8667
+#: backend.c:9089
 #, c-format
 msgid "Illegal move \"%s\" (rejected by %s chess program)"
 msgstr ""
 
-#: backend.c:8694
+#: backend.c:9116
 #, c-format
 msgid "Failed to start %s chess program %s on %s: %s\n"
 msgstr ""
 
-#: backend.c:8715
+#: backend.c:9137
 #, fuzzy, c-format
 msgid "Hint: %s"
 msgstr "Ýpucu"
 
-#: backend.c:8720
+#: backend.c:9142
 #, c-format
 msgid ""
 "Illegal hint move \"%s\"\n"
 "from %s chess program"
 msgstr ""
 
-#: backend.c:8895
+#: backend.c:9317
 msgid "Machine accepts your draw offer"
 msgstr ""
 
-#: backend.c:8898
+#: backend.c:9320
 msgid ""
-"Machine offers a draw\n"
-"Select Action / Draw to agree"
+"Machine offers a draw.\n"
+"Select Action / Draw to accept."
 msgstr ""
 
-#: backend.c:8977
+#. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone
+#: backend.c:9402
 msgid "failed writing PV"
 msgstr ""
 
-#: backend.c:9275
+#: backend.c:9701
 #, c-format
 msgid "Ambiguous move in ICS output: \"%s\""
 msgstr ""
 
-#: backend.c:9285
+#: backend.c:9711
 #, c-format
 msgid "Illegal move in ICS output: \"%s\""
 msgstr ""
 
-#: backend.c:9296
+#: backend.c:9722
 msgid "Gap in move list"
 msgstr ""
 
-#: backend.c:9917 dialogs.c:460
+#: backend.c:10357
 #, c-format
 msgid "Variant %s not supported by %s"
 msgstr ""
 
-#: backend.c:10038
+#: backend.c:10364
+#, c-format
+msgid ", but %s is"
+msgstr ""
+
+#: backend.c:10506
 #, c-format
 msgid "Startup failure on '%s'"
 msgstr ""
 
-#: backend.c:10069
+#: backend.c:10537
 msgid "Waiting for first chess program"
 msgstr ""
 
-#: backend.c:10074 backend.c:13964
+#: backend.c:10542 backend.c:14454
 msgid "Waiting for second chess program"
 msgstr ""
 
-#: backend.c:10123
+#: backend.c:10591
 msgid "Could not write on tourney file"
 msgstr ""
 
-#: backend.c:10197
+#: backend.c:10665
 msgid ""
 "You cannot replace an engine while it is engaged!\n"
 "Terminate its game first."
 msgstr ""
 
-#: backend.c:10211
+#: backend.c:10679
 msgid "No engine with the name you gave is installed"
 msgstr ""
 
-#: backend.c:10213
+#: backend.c:10681
 msgid ""
 "First change an engine by editing the participants list\n"
 "of the Tournament Options dialog"
 msgstr ""
 
-#: backend.c:10214
+#: backend.c:10682
 msgid "You can only change one engine at the time"
 msgstr ""
 
-#: backend.c:10229 backend.c:10376
+#: backend.c:10697 backend.c:10845
 #, c-format
 msgid "No engine %s is installed"
 msgstr ""
 
-#: backend.c:10249
+#: backend.c:10717
 msgid ""
 "You must supply a tournament file,\n"
 "for storing the tourney progress"
 msgstr ""
 
-#: backend.c:10259
+#: backend.c:10727
 msgid "Not enough participants"
 msgstr ""
 
-#: backend.c:10460
+#: backend.c:10929
 #, fuzzy
 msgid "Bad tournament file"
 msgstr "Dosya açýlamadý"
 
-#: backend.c:10472
+#: backend.c:10941
 msgid "Waiting for other game(s)"
 msgstr ""
 
-#: backend.c:10485
+#: backend.c:10954
 msgid "No pairing engine specified"
 msgstr ""
 
-#: backend.c:10962
+#: backend.c:11430
 #, c-format
 msgid "Match %s vs. %s: final score %d-%d-%d"
 msgstr ""
 
-#: backend.c:11424 backend.c:11455
+#: backend.c:11897 backend.c:11928
 #, c-format
 msgid "Illegal move: %d.%s%s"
 msgstr ""
 
-#: backend.c:11444
+#: backend.c:11917
 #, c-format
 msgid "Ambiguous move: %d.%s%s"
 msgstr ""
 
-#: backend.c:11497 backend.c:12524 backend.c:12717 backend.c:13078
+#: backend.c:11971 backend.c:13010 backend.c:13203 backend.c:13567
 #, c-format
 msgid "Can't open \"%s\""
 msgstr ""
 
-#: backend.c:11509 menus.c:116
+#: backend.c:11983 menus.c:116
 msgid "Cannot build game list"
 msgstr ""
 
-#: backend.c:11594
+#: backend.c:12068
 msgid "No more games in this message"
 msgstr ""
 
-#: backend.c:11634
+#: backend.c:12108
 msgid "No game has been loaded yet"
 msgstr ""
 
-#: backend.c:11638 backend.c:12505 ngamelist.c:129
+#: backend.c:12112 backend.c:12991 ngamelist.c:129
 msgid "Can't back up any further"
 msgstr ""
 
-#: backend.c:12077
+#: backend.c:12553
 msgid "Game number out of range"
 msgstr ""
 
-#: backend.c:12088
+#: backend.c:12564
 msgid "Can't seek on game file"
 msgstr ""
 
-#: backend.c:12146
+#: backend.c:12622
 msgid "Game not found in file"
 msgstr ""
 
-#: backend.c:12274 backend.c:12601
+#: backend.c:12751 backend.c:13087
 msgid "Bad FEN position in file"
 msgstr ""
 
-#: backend.c:12426
+#: backend.c:12903
 msgid "No moves in game"
 msgstr ""
 
-#: backend.c:12501
+#: backend.c:12987
 msgid "No position has been loaded yet"
 msgstr ""
 
-#: backend.c:12562 backend.c:12573
+#: backend.c:13048 backend.c:13059
 msgid "Can't seek on position file"
 msgstr ""
 
-#: backend.c:12580 backend.c:12592
+#: backend.c:13066 backend.c:13078
 msgid "Position not found in file"
 msgstr ""
 
-#: backend.c:12632
+#: backend.c:13118
 msgid "Black to play"
 msgstr ""
 
-#: backend.c:12635
+#: backend.c:13121
 msgid "White to play"
 msgstr ""
 
-#: backend.c:12722 backend.c:13083
+#: backend.c:13208 backend.c:13572
 msgid "Waiting for access to save file"
 msgstr ""
 
-#: backend.c:12724
+#: backend.c:13210
 msgid "Saving game"
 msgstr ""
 
-#: backend.c:12725
+#: backend.c:13211
 msgid "Bad Seek"
 msgstr ""
 
-#: backend.c:13085
+#: backend.c:13574
 msgid "Saving position"
 msgstr ""
 
-#: backend.c:13211
+#: backend.c:13700
 msgid ""
 "You have edited the game history.\n"
 "Use Reload Same Game and make your move again."
 msgstr ""
 
-#: backend.c:13216
+#: backend.c:13705
 msgid ""
 "You have entered too many moves.\n"
 "Back up to the correct position and try again."
 msgstr ""
 
-#: backend.c:13221
+#: backend.c:13710
 msgid ""
 "Displayed position is not current.\n"
 "Step forward to the correct position and try again."
 msgstr ""
 
-#: backend.c:13268
+#: backend.c:13757
 msgid "You have not made a move yet"
 msgstr ""
 
-#: backend.c:13289
+#: backend.c:13778
 msgid ""
 "The cmail message is not loaded.\n"
 "Use Reload CMail Message and make your move again."
 msgstr ""
 
-#: backend.c:13294
+#: backend.c:13783
 msgid "No unfinished games"
 msgstr ""
 
-#: backend.c:13300
+#: backend.c:13789
 #, c-format
 msgid ""
 "You have already mailed a move.\n"
@@ -580,209 +603,209 @@ msgid ""
 "on the command line."
 msgstr ""
 
-#: backend.c:13315
+#: backend.c:13804
 msgid "Failed to invoke cmail"
 msgstr ""
 
-#: backend.c:13377
+#: backend.c:13866
 #, c-format
 msgid "Waiting for reply from opponent\n"
 msgstr ""
 
-#: backend.c:13399
+#: backend.c:13888
 #, c-format
 msgid "Still need to make move for game\n"
 msgstr ""
 
-#: backend.c:13403
+#: backend.c:13892
 #, c-format
 msgid "Still need to make moves for both games\n"
 msgstr ""
 
-#: backend.c:13407
+#: backend.c:13896
 #, c-format
 msgid "Still need to make moves for all %d games\n"
 msgstr ""
 
-#: backend.c:13414
+#: backend.c:13903
 #, c-format
 msgid "Still need to make a move for game %s\n"
 msgstr ""
 
-#: backend.c:13420
+#: backend.c:13909
 #, c-format
 msgid "No unfinished games\n"
 msgstr ""
 
-#: backend.c:13422
+#: backend.c:13911
 #, c-format
 msgid "Ready to send mail\n"
 msgstr ""
 
-#: backend.c:13427
+#: backend.c:13916
 #, c-format
 msgid "Still need to make moves for games %s\n"
 msgstr ""
 
-#: backend.c:13631
+#: backend.c:14118
 msgid "Edit comment"
 msgstr ""
 
-#: backend.c:13633
+#: backend.c:14120
 #, c-format
 msgid "Edit comment on %d.%s%s"
 msgstr ""
 
-#: backend.c:13688
+#: backend.c:14175
 #, c-format
 msgid "You are not observing a game"
 msgstr ""
 
-#: backend.c:13796
+#: backend.c:14286
 msgid "It is not White's turn"
 msgstr ""
 
-#: backend.c:13877
+#: backend.c:14367
 msgid "It is not Black's turn"
 msgstr ""
 
-#: backend.c:13985
+#: backend.c:14475
 #, c-format
 msgid "Starting %s chess program"
 msgstr ""
 
-#: backend.c:14013 backend.c:15127
+#: backend.c:14503 backend.c:15648
 msgid ""
 "Wait until your turn,\n"
-"or select Move Now"
+"or select 'Move Now'."
 msgstr ""
 
-#: backend.c:14147
+#: backend.c:14638
 msgid "Training mode off"
 msgstr ""
 
-#: backend.c:14155
+#: backend.c:14646
 msgid "Training mode on"
 msgstr ""
 
-#: backend.c:14158
+#: backend.c:14649
 msgid "Already at end of game"
 msgstr ""
 
-#: backend.c:14238
+#: backend.c:14729
 msgid "Warning: You are still playing a game"
 msgstr ""
 
-#: backend.c:14241
+#: backend.c:14732
 msgid "Warning: You are still observing a game"
 msgstr ""
 
-#: backend.c:14244
+#: backend.c:14735
 msgid "Warning: You are still examining a game"
 msgstr ""
 
-#: backend.c:14311
+#: backend.c:14802
 msgid "Click clock to clear board"
 msgstr ""
 
-#: backend.c:14321
+#: backend.c:14812
 msgid "Close ICS engine analyze..."
 msgstr ""
 
-#: backend.c:14609
+#: backend.c:15130
 msgid "That square is occupied"
 msgstr ""
 
-#: backend.c:14633 backend.c:14659
+#: backend.c:15154 backend.c:15180
 msgid "There is no pending offer on this move"
 msgstr ""
 
-#: backend.c:14695 backend.c:14706
+#: backend.c:15216 backend.c:15227
 msgid "Your opponent is not out of time"
 msgstr ""
 
-#: backend.c:14772
+#: backend.c:15293
 msgid "You must make your move before offering a draw"
 msgstr ""
 
-#: backend.c:15109
+#: backend.c:15630
 msgid "You are not examining a game"
 msgstr ""
 
-#: backend.c:15113
+#: backend.c:15634
 msgid "You can't revert while pausing"
 msgstr ""
 
-#: backend.c:15167 backend.c:15174
+#: backend.c:15688 backend.c:15695
 msgid "It is your turn"
 msgstr ""
 
-#: backend.c:15225 backend.c:15232 backend.c:15285 backend.c:15292
-msgid "Wait until your turn"
+#: backend.c:15746 backend.c:15753 backend.c:15806 backend.c:15813
+msgid "Wait until your turn."
 msgstr ""
 
-#: backend.c:15237
+#: backend.c:15758
 msgid "No hint available"
 msgstr ""
 
-#: backend.c:15253 ngamelist.c:355
+#: backend.c:15774 ngamelist.c:355
 msgid "Game list not loaded or empty"
 msgstr ""
 
-#: backend.c:15260
+#: backend.c:15781
 msgid "Book file exists! Try again for overwrite."
 msgstr ""
 
-#: backend.c:15738
+#: backend.c:16259
 #, c-format
 msgid "Error writing to %s chess program"
 msgstr ""
 
-#: backend.c:15741 backend.c:15772
+#: backend.c:16262 backend.c:16293
 #, c-format
 msgid "%s program exits in draw position (%s)"
 msgstr ""
 
-#: backend.c:15767
+#: backend.c:16288
 #, c-format
 msgid "Error: %s chess program (%s) exited unexpectedly"
 msgstr ""
 
-#: backend.c:15785
+#: backend.c:16306
 #, c-format
 msgid "Error reading from %s chess program (%s)"
 msgstr ""
 
-#: backend.c:16187
+#: backend.c:16730
 #, c-format
 msgid "%s engine has too many options\n"
 msgstr ""
 
-#: backend.c:16343
+#: backend.c:16886
 msgid "Displayed move is not current"
 msgstr ""
 
-#: backend.c:16352
+#: backend.c:16895
 msgid "Could not parse move"
 msgstr ""
 
-#: backend.c:16477 backend.c:16499
+#: backend.c:17020 backend.c:17042
 msgid "Both flags fell"
 msgstr "Berabere"
 
-#: backend.c:16479
+#: backend.c:17022
 msgid "White's flag fell"
 msgstr "Beyaz Þah mat"
 
-#: backend.c:16501
+#: backend.c:17044
 msgid "Black's flag fell"
 msgstr "Siyah Þah mat"
 
-#: backend.c:16632
+#: backend.c:17175
 msgid "Clock adjustment not allowed in auto-flag mode"
 msgstr ""
 
-#: backend.c:17467
+#: backend.c:18025
 msgid "Bad FEN position in clipboard"
 msgstr ""
 
@@ -802,1388 +825,1439 @@ msgstr ""
 msgid "Could not create book"
 msgstr ""
 
-#: dialogs.c:259
+#: dialogs.c:283
 #, fuzzy
 msgid "Tournament file:          "
 msgstr "Dosya açýlamadý"
 
-#: dialogs.c:260
-msgid "Sync after round"
+#: dialogs.c:284
+msgid "For concurrent playing of tourney with multiple XBoards:"
 msgstr ""
 
-#: dialogs.c:261
-msgid "    (for concurrent playing of a single"
+#: dialogs.c:285
+msgid "Sync after round"
 msgstr ""
 
-#: dialogs.c:262
+#: dialogs.c:286
 msgid "Sync after cycle"
 msgstr ""
 
-#: dialogs.c:263
-msgid "      tourney with multiple XBoards)"
-msgstr ""
-
-#: dialogs.c:264
+#: dialogs.c:287
 msgid "Tourney participants:"
 msgstr ""
 
-#: dialogs.c:265
+#: dialogs.c:288
 msgid "Select Engine:"
 msgstr ""
 
-#: dialogs.c:273
+#: dialogs.c:296
 msgid "Tourney type (0 = round-robin, 1 = gauntlet):"
 msgstr ""
 
-#: dialogs.c:274
+#: dialogs.c:297
 msgid "Number of tourney cycles (or Swiss rounds):"
 msgstr ""
 
-#: dialogs.c:275
+#: dialogs.c:298
 msgid "Default Number of Games in Match (or Pairing):"
 msgstr ""
 
-#: dialogs.c:276
+#: dialogs.c:299
 msgid "Pause between Match Games (msec):"
 msgstr ""
 
-#: dialogs.c:277
+#: dialogs.c:300
 #, fuzzy
 msgid "Save Tourney Games on:"
 msgstr "Oyunu Kaydet"
 
-#: dialogs.c:278
+#: dialogs.c:301
 msgid "Game File with Opening Lines:"
 msgstr ""
 
-#: dialogs.c:279
+#: dialogs.c:302
 msgid "Game Number (-1 or -2 = Auto-Increment):"
 msgstr ""
 
-#: dialogs.c:280
+#: dialogs.c:303
 msgid "File with Start Positions:"
 msgstr ""
 
-#: dialogs.c:281
+#: dialogs.c:304
 msgid "Position Number (-1 or -2 = Auto-Increment):"
 msgstr ""
 
-#: dialogs.c:282
+#: dialogs.c:305
 msgid "Rewind Index after this many Games (0 = never):"
 msgstr ""
 
-#: dialogs.c:283
+#: dialogs.c:306
 msgid "Disable own engine books by default"
 msgstr ""
 
-#: dialogs.c:284
+#: dialogs.c:307 dialogs.c:1565
+msgid "Time Control"
+msgstr ""
+
+#: dialogs.c:308
+msgid "Common Engine"
+msgstr ""
+
+#: dialogs.c:309 dialogs.c:441
+#, fuzzy
+msgid "General Options"
+msgstr "Seçenekler"
+
+#: dialogs.c:310
+msgid "Continue Later"
+msgstr ""
+
+#: dialogs.c:311
 msgid "Replace Engine"
 msgstr ""
 
-#: dialogs.c:285
+#: dialogs.c:312
 msgid "Upgrade Engine"
 msgstr ""
 
-#: dialogs.c:286
+#: dialogs.c:313
 msgid "Clone Tourney"
 msgstr ""
 
-#: dialogs.c:316
+#: dialogs.c:351
 msgid "First you must specify an existing tourney file to clone"
 msgstr ""
 
-#: dialogs.c:332 dialogs.c:1320
+#: dialogs.c:367 dialogs.c:1407
 msgid "# no engines are installed"
 msgstr ""
 
-#: dialogs.c:344
+#: dialogs.c:375
+msgid "Internal error: PARTICIPANTS set wrong"
+msgstr ""
+
+#: dialogs.c:383
 #, fuzzy
-msgid "Match Options"
+msgid "Tournament Options"
 msgstr "Seçenekler"
 
-#: dialogs.c:363
+#: dialogs.c:402
 msgid "Absolute Analysis Scores"
 msgstr ""
 
-#: dialogs.c:364
+#: dialogs.c:403
 msgid "Almost Always Queen (Detour Under-Promote)"
 msgstr ""
 
-#: dialogs.c:365 menus.c:714
+#: dialogs.c:404 menus.c:714
 msgid "Animate Dragging"
 msgstr ""
 
-#: dialogs.c:366 menus.c:715
+#: dialogs.c:405 menus.c:715
 msgid "Animate Moving"
 msgstr ""
 
-#: dialogs.c:367 menus.c:716
+#: dialogs.c:406 menus.c:716
 msgid "Auto Flag"
 msgstr ""
 
-#: dialogs.c:368 menus.c:717
+#: dialogs.c:407 menus.c:717
 msgid "Auto Flip View"
 msgstr ""
 
-#: dialogs.c:369 menus.c:718
+#: dialogs.c:408 menus.c:718
 msgid "Blindfold"
 msgstr "Tahtayý Görmeden"
 
-#: dialogs.c:370
+#. 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 ""
 
-#: dialogs.c:371
+#: dialogs.c:411
 msgid "Enable Variation Trees"
 msgstr ""
 
-#: dialogs.c:372
+#: dialogs.c:412
+msgid "Headers in Engine Output Window"
+msgstr ""
+
+#: dialogs.c:413
 msgid "Hide Thinking from Human"
 msgstr ""
 
-#: dialogs.c:373 menus.c:723
+#: dialogs.c:414 menus.c:723
 msgid "Highlight Last Move"
 msgstr ""
 
-#: dialogs.c:374
+#: dialogs.c:415
 msgid "Highlight with Arrow"
 msgstr ""
 
-#: dialogs.c:375 menus.c:726
+#: dialogs.c:416 menus.c:726
 msgid "One-Click Moving"
 msgstr ""
 
-#: dialogs.c:376
+#: dialogs.c:417
 msgid "Periodic Updates (in Analysis Mode)"
 msgstr ""
 
-#: dialogs.c:378
+#: dialogs.c:419
 msgid "Play Move(s) of Clicked PV (Analysis)"
 msgstr ""
 
-#: dialogs.c:379 dialogs.c:514 menus.c:728
+#: dialogs.c:420 dialogs.c:597 menus.c:728
 #, fuzzy
 msgid "Ponder Next Move"
 msgstr "Sonraki Oyunu Yükle"
 
-#: dialogs.c:380
+#: dialogs.c:421
 msgid "Popup Exit Messages"
 msgstr ""
 
-#: dialogs.c:381 menus.c:730
+#: dialogs.c:422 menus.c:730
 msgid "Popup Move Errors"
 msgstr ""
 
-#: dialogs.c:382
+#: dialogs.c:423
 #, fuzzy
 msgid "Scores in Move List"
 msgstr "Hamle Listesini Göster"
 
-#: dialogs.c:383
+#: dialogs.c:424
 msgid "Show Coordinates"
 msgstr ""
 
-#: dialogs.c:384
+#: dialogs.c:425
 msgid "Show Target Squares"
 msgstr ""
 
-#: dialogs.c:385
+#: dialogs.c:426
 msgid "Sticky Windows"
 msgstr ""
 
-#: dialogs.c:386 menus.c:733
+#: dialogs.c:427 menus.c:733
 msgid "Test Legality"
 msgstr ""
 
-#: dialogs.c:387
+#: dialogs.c:428
 msgid "Top-Level Dialogs"
 msgstr ""
 
-#: dialogs.c:388
+#: dialogs.c:429
 msgid "Flash Moves (0 = no flashing):"
 msgstr ""
 
-#: dialogs.c:389
+#: dialogs.c:430
 msgid "Flash Rate (high = fast):"
 msgstr ""
 
-#: dialogs.c:390
+#: dialogs.c:431
 msgid "Animation Speed (high = slow):"
 msgstr ""
 
-#: dialogs.c:391
+#: dialogs.c:432
 msgid "Zoom factor in Evaluation Graph:"
 msgstr ""
 
-#: dialogs.c:400
-#, fuzzy
-msgid "General Options"
-msgstr "Seçenekler"
-
-#: dialogs.c:410
-msgid "normal"
+#: dialogs.c:452
+msgid "Normal"
 msgstr ""
 
-#: dialogs.c:411
-msgid "makruk"
+#: dialogs.c:453
+msgid "Makruk"
 msgstr ""
 
-#: dialogs.c:412
+#: dialogs.c:454
 msgid "FRC"
 msgstr ""
 
-#: dialogs.c:413
-msgid "shatranj"
+#: dialogs.c:455
+msgid "Shatranj"
 msgstr ""
 
-#: dialogs.c:414
-msgid "wild castle"
+#: dialogs.c:456
+msgid "Wild castle"
 msgstr ""
 
-#: dialogs.c:415
+#: dialogs.c:457
 #, fuzzy
-msgid "knightmate"
+msgid "Knightmate"
 msgstr "At"
 
-#: dialogs.c:416
-msgid "no castle"
+#: dialogs.c:458
+msgid "No castle"
 msgstr ""
 
-#: dialogs.c:417
-msgid "cylinder *"
+#: dialogs.c:459
+msgid "Cylinder *"
 msgstr ""
 
-#: dialogs.c:418
+#: dialogs.c:460
 msgid "3-checks"
 msgstr ""
 
-#: dialogs.c:419
+#: dialogs.c:461
 msgid "berolina *"
 msgstr ""
 
-#: dialogs.c:420
+#: dialogs.c:462
 msgid "atomic"
 msgstr ""
 
-#: dialogs.c:421
+#: dialogs.c:463
 msgid "two kings"
 msgstr ""
 
-#: dialogs.c:422
+#: dialogs.c:464
+msgid " "
+msgstr ""
+
+#: dialogs.c:465
+msgid "Spartan"
+msgstr ""
+
+#: dialogs.c:466
 msgid "Board size ( -1 = default for selected variant):"
 msgstr ""
 
-#: dialogs.c:423
+#: dialogs.c:467
 msgid "Number of Board Ranks:"
 msgstr ""
 
-#: dialogs.c:424
+#: dialogs.c:468
 msgid "Number of Board Files:"
 msgstr ""
 
-#: dialogs.c:425
+#: dialogs.c:469
 msgid "Holdings Size:"
 msgstr ""
 
-#: dialogs.c:429
-msgid "fairy"
+#: dialogs.c:471
+msgid ""
+"Variants marked with * can only be played\n"
+"with legality testing off."
 msgstr ""
 
-#: dialogs.c:430
+#: dialogs.c:473
+msgid "ASEAN"
+msgstr ""
+
+#: dialogs.c:474
 msgid "Great Shatranj (10x8)"
 msgstr ""
 
-#: dialogs.c:431
+#: dialogs.c:475
 msgid "Seirawan"
 msgstr ""
 
-#: dialogs.c:432
-msgid "falcon (10x8)"
+#: dialogs.c:476
+msgid "Falcon (10x8)"
 msgstr ""
 
-#: dialogs.c:433
+#: dialogs.c:477
 msgid "Superchess"
 msgstr ""
 
-#: dialogs.c:434
+#: dialogs.c:478
 msgid "Capablanca (10x8)"
 msgstr ""
 
-#: dialogs.c:435
-msgid "crazyhouse"
+#: dialogs.c:479
+msgid "Crazyhouse"
 msgstr ""
 
-#: dialogs.c:436
+#: dialogs.c:480
 msgid "Gothic (10x8)"
 msgstr ""
 
-#: dialogs.c:437
-msgid "bughouse"
+#: dialogs.c:481
+msgid "Bughouse"
 msgstr ""
 
-#: dialogs.c:438
-msgid "janus (10x8)"
+#: dialogs.c:482
+msgid "Janus (10x8)"
 msgstr ""
 
-#: dialogs.c:439
-msgid "suicide"
+#: dialogs.c:483
+msgid "Suicide"
 msgstr ""
 
-#: dialogs.c:440
+#: dialogs.c:484
 msgid "CRC (10x8)"
 msgstr ""
 
-#: dialogs.c:441
+#: dialogs.c:485
 msgid "give-away"
 msgstr ""
 
-#: dialogs.c:442
+#: dialogs.c:486
 msgid "grand (10x10)"
 msgstr ""
 
-#: dialogs.c:443
+#: dialogs.c:487
 #, fuzzy
 msgid "losers"
 msgstr "kapat"
 
-#: dialogs.c:444
+#: dialogs.c:488
 msgid "shogi (9x9)"
 msgstr ""
 
-#: dialogs.c:445
-msgid "Spartan"
+#: dialogs.c:489
+msgid "fairy"
 msgstr ""
 
-#: dialogs.c:446
+#: dialogs.c:490
 msgid "xiangqi (9x10)"
 msgstr ""
 
-#: dialogs.c:447
-msgid " "
+#: dialogs.c:491
+msgid "mighty lion"
 msgstr ""
 
-#: dialogs.c:448
+#: dialogs.c:492
 msgid "courier (12x8)"
 msgstr ""
 
-#: dialogs.c:465
+#: dialogs.c:493
+msgid "chu chess (10x10)"
+msgstr ""
+
+#: dialogs.c:494
+msgid "chu shogi (12x12)"
+msgstr ""
+
+#: dialogs.c:526
 #, c-format
 msgid "Warning: second engine (%s) does not support this!"
 msgstr ""
 
-#: dialogs.c:488
+#: dialogs.c:554
 #, c-format
-msgid "Only bughouse is not available in viewer mode"
+msgid "Only bughouse is not available in viewer mode."
 msgstr ""
 
-#: dialogs.c:489
+#: dialogs.c:555
 #, c-format
 msgid ""
-"All variants not supported by first engine\n"
-"(currently %s) are disabled"
+"All variants not supported by the first engine\n"
+"(currently %s) are disabled."
 msgstr ""
 
-#: dialogs.c:490
+#: dialogs.c:572
 msgid "New Variant"
 msgstr ""
 
-#: dialogs.c:515
+#: dialogs.c:598
 msgid "Maximum Number of CPUs per Engine:"
 msgstr ""
 
-#: dialogs.c:516
+#: dialogs.c:599
 msgid "Polygot Directory:"
 msgstr ""
 
-#: dialogs.c:517
+#: dialogs.c:600
 msgid "Hash-Table Size (MB):"
 msgstr ""
 
-#: dialogs.c:518
+#: dialogs.c:601
 msgid "Nalimov EGTB Path:"
 msgstr ""
 
-#: dialogs.c:519
+#: dialogs.c:602
 msgid "EGTB Cache Size (MB):"
 msgstr ""
 
-#: dialogs.c:520
+#: dialogs.c:603
 msgid "Use GUI Book"
 msgstr ""
 
-#: dialogs.c:521
+#: dialogs.c:604
 msgid "Opening-Book Filename:"
 msgstr ""
 
-#: dialogs.c:522
+#: dialogs.c:605
 msgid "Book Depth (moves):"
 msgstr ""
 
-#: dialogs.c:523
+#: dialogs.c:606
 msgid "Book Variety (0) vs. Strength (100):"
 msgstr ""
 
-#: dialogs.c:524
+#: dialogs.c:607
 msgid "Engine #1 Has Own Book"
 msgstr ""
 
-#: dialogs.c:525
+#: dialogs.c:608
 msgid "Engine #2 Has Own Book          "
 msgstr ""
 
-#: dialogs.c:534
+#: dialogs.c:617
 msgid "Common Engine Settings"
 msgstr ""
 
-#: dialogs.c:540
+#: dialogs.c:623
 msgid "Detect all Mates"
 msgstr ""
 
-#: dialogs.c:541
+#: dialogs.c:624
 msgid "Verify Engine Result Claims"
 msgstr ""
 
-#: dialogs.c:542
+#: dialogs.c:625
 msgid "Draw if Insufficient Mating Material"
 msgstr ""
 
-#: dialogs.c:543
+#: dialogs.c:626
 msgid "Adjudicate Trivial Draws (3-Move Delay)"
 msgstr ""
 
-#: dialogs.c:544
+#: dialogs.c:627
 msgid "N-Move Rule:"
 msgstr ""
 
-#: dialogs.c:545
+#: dialogs.c:628
 msgid "N-fold Repeats:"
 msgstr ""
 
-#: dialogs.c:546
+#: dialogs.c:629
 msgid "Draw after N Moves Total:"
 msgstr ""
 
-#: dialogs.c:547
+#: dialogs.c:630
 msgid "Win / Loss Threshold:"
 msgstr ""
 
-#: dialogs.c:548
+#: dialogs.c:631
 msgid "Negate Score of Engine #1"
 msgstr ""
 
-#: dialogs.c:549
+#: dialogs.c:632
 msgid "Negate Score of Engine #2"
 msgstr ""
 
-#: dialogs.c:556
+#: dialogs.c:639
 #, fuzzy
 msgid "Adjudicate non-ICS Games"
 msgstr "Oyunu Kaydet"
 
-#: dialogs.c:569
+#: dialogs.c:652
 msgid "Auto-Kibitz"
 msgstr ""
 
-#: dialogs.c:570
+#: dialogs.c:653
 msgid "Auto-Comment"
 msgstr ""
 
-#: dialogs.c:571
+#: dialogs.c:654
 msgid "Auto-Observe"
 msgstr ""
 
-#: dialogs.c:572
+#: dialogs.c:655
 #, fuzzy
 msgid "Auto-Raise Board"
 msgstr "XBoard Hakkýnda"
 
-#: dialogs.c:573
+#: dialogs.c:656
 msgid "Auto-Create Logon Script"
 msgstr ""
 
-#: dialogs.c:574
+#: dialogs.c:657
 msgid "Background Observe while Playing"
 msgstr ""
 
-#: dialogs.c:575
+#: dialogs.c:658
 msgid "Dual Board for Background-Observed Game"
 msgstr ""
 
-#: dialogs.c:576
+#: dialogs.c:659
 #, fuzzy
 msgid "Get Move List"
 msgstr "Hamle Listesini Göster"
 
-#: dialogs.c:577
+#: dialogs.c:660
 msgid "Quiet Play"
 msgstr ""
 
-#: dialogs.c:578
+#: dialogs.c:661
 msgid "Seek Graph"
 msgstr ""
 
-#: dialogs.c:579
+#: dialogs.c:662
 msgid "Auto-Refresh Seek Graph"
 msgstr ""
 
-#: dialogs.c:580
+#: dialogs.c:663
 msgid "Auto-InputBox PopUp"
 msgstr ""
 
-#: dialogs.c:581
+#: dialogs.c:664
+msgid "Quit after game"
+msgstr ""
+
+#: dialogs.c:665
 msgid "Premove"
 msgstr ""
 
-#: dialogs.c:582
+#: dialogs.c:666
 msgid "Premove for White"
 msgstr ""
 
-#: dialogs.c:583
+#: dialogs.c:667
 msgid "First White Move:"
 msgstr ""
 
-#: dialogs.c:584
+#: dialogs.c:668
 msgid "Premove for Black"
 msgstr ""
 
-#: dialogs.c:585
+#: dialogs.c:669
 msgid "First Black Move:"
 msgstr ""
 
-#: dialogs.c:587
+#: dialogs.c:671
 msgid "Alarm"
 msgstr ""
 
-#: dialogs.c:588
+#: dialogs.c:672
 msgid "Alarm Time (msec):"
 msgstr ""
 
-#: dialogs.c:590
+#: dialogs.c:674
 msgid "Colorize Messages"
 msgstr ""
 
-#: dialogs.c:591
+#: dialogs.c:675
 msgid "Shout Text Colors:"
 msgstr ""
 
-#: dialogs.c:592
+#: dialogs.c:676
 msgid "S-Shout Text Colors:"
 msgstr ""
 
-#: dialogs.c:593
+#: dialogs.c:677
 msgid "Channel #1 Text Colors:"
 msgstr ""
 
-#: dialogs.c:594
+#: dialogs.c:678
 msgid "Other Channel Text Colors:"
 msgstr ""
 
-#: dialogs.c:595
+#: dialogs.c:679
 msgid "Kibitz Text Colors:"
 msgstr ""
 
-#: dialogs.c:596
+#: dialogs.c:680
 msgid "Tell Text Colors:"
 msgstr ""
 
-#: dialogs.c:597
+#: dialogs.c:681
 msgid "Challenge Text Colors:"
 msgstr ""
 
-#: dialogs.c:598
+#: dialogs.c:682
 msgid "Request Text Colors:"
 msgstr ""
 
-#: dialogs.c:599
+#: dialogs.c:683
 msgid "Seek Text Colors:"
 msgstr ""
 
-#: dialogs.c:606
+#: dialogs.c:690
 #, fuzzy
 msgid "ICS Options"
 msgstr "Seçenekler"
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Exact position match"
 msgstr ""
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Shown position is subset"
 msgstr ""
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Same material with exactly same Pawn chain"
 msgstr ""
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Same material"
 msgstr ""
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Material range (top board half optional)"
 msgstr ""
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Material difference (optional stuff balanced)"
 msgstr ""
 
-#: dialogs.c:624
+#: dialogs.c:708
 msgid "Auto-Display Tags"
 msgstr ""
 
-#: dialogs.c:625
+#: dialogs.c:709
 msgid "Auto-Display Comment"
 msgstr ""
 
-#: dialogs.c:626
+#: dialogs.c:710
 msgid ""
 "Auto-Play speed of loaded games\n"
 "(0 = instant, -1 = off):"
 msgstr ""
 
-#: dialogs.c:627
+#: dialogs.c:711
 msgid "Seconds per Move:"
 msgstr ""
 
-#: dialogs.c:628
+#: dialogs.c:712
 msgid ""
 "\n"
 "options to use in game-viewer mode:"
 msgstr ""
 
-#: dialogs.c:630
+#: dialogs.c:714
 msgid ""
 "\n"
 "Thresholds for position filtering in game list:"
 msgstr ""
 
-#: dialogs.c:631
+#: dialogs.c:715
 msgid "Elo of strongest player at least:"
 msgstr ""
 
-#: dialogs.c:632
+#: dialogs.c:716
 msgid "Elo of weakest player at least:"
 msgstr ""
 
-#: dialogs.c:633
+#: dialogs.c:717
 msgid "No games before year:"
 msgstr ""
 
-#: dialogs.c:634
+#: dialogs.c:718
 msgid "Minimum nr consecutive positions:"
 msgstr ""
 
-#: dialogs.c:635
+#: dialogs.c:719
 msgid "Search mode:"
 msgstr ""
 
-#: dialogs.c:636
+#: dialogs.c:720
 msgid "Also match reversed colors"
 msgstr ""
 
-#: dialogs.c:637
+#: dialogs.c:721
 msgid "Also match left-right flipped position"
 msgstr ""
 
-#: dialogs.c:645
+#: dialogs.c:729
 #, fuzzy
 msgid "Load Game Options"
 msgstr "Oyun Yükle"
 
-#: dialogs.c:657
+#: dialogs.c:741
 #, fuzzy
 msgid "Auto-Save Games"
 msgstr "Oyunu Kaydet"
 
-#: dialogs.c:658
+#: dialogs.c:742
 msgid "Own Games Only"
 msgstr ""
 
-#: dialogs.c:659
+#: dialogs.c:743
 #, fuzzy
 msgid "Save Games on File:"
 msgstr "Oyunu Kaydet"
 
-#: dialogs.c:660
+#: dialogs.c:744
 msgid "Save Final Positions on File:"
 msgstr ""
 
-#: dialogs.c:661
+#: dialogs.c:745
 msgid "PGN Event Header:"
 msgstr ""
 
-#: dialogs.c:662
+#: dialogs.c:746
 msgid "Old Save Style (as opposed to PGN)"
 msgstr ""
 
-#: dialogs.c:663
+#: dialogs.c:747
 msgid "Include Number Tag in tourney PGN"
 msgstr ""
 
-#: dialogs.c:664
+#: dialogs.c:748
 msgid "Save Score/Depth Info in PGN"
 msgstr ""
 
-#: dialogs.c:665
+#: dialogs.c:749
 msgid "Save Out-of-Book Info in PGN           "
 msgstr ""
 
-#: dialogs.c:672
+#: dialogs.c:756
 #, fuzzy
 msgid "Save Game Options"
 msgstr "Oyunu Kaydet"
 
-#: dialogs.c:681
+#: dialogs.c:765
 msgid "No Sound"
 msgstr ""
 
-#: dialogs.c:682
+#: dialogs.c:766
 msgid "Default Beep"
 msgstr ""
 
-#: dialogs.c:683
+#: dialogs.c:767
 msgid "Above WAV File"
 msgstr ""
 
-#: dialogs.c:684
+#: dialogs.c:768
 msgid "Car Horn"
 msgstr ""
 
-#: dialogs.c:685
+#: dialogs.c:769
 msgid "Cymbal"
 msgstr ""
 
-#: dialogs.c:686
+#: dialogs.c:770
 msgid "Ding"
 msgstr ""
 
-#: dialogs.c:687
+#: dialogs.c:771
 msgid "Gong"
 msgstr ""
 
-#: dialogs.c:688
+#: dialogs.c:772
 msgid "Laser"
 msgstr ""
 
-#: dialogs.c:689
+#: dialogs.c:773
 msgid "Penalty"
 msgstr ""
 
-#: dialogs.c:690
+#: dialogs.c:774
 msgid "Phone"
 msgstr ""
 
-#: dialogs.c:691
+#: dialogs.c:775
 msgid "Pop"
 msgstr ""
 
-#: dialogs.c:692
+#: dialogs.c:776
+msgid "Roar"
+msgstr ""
+
+#: dialogs.c:777
 msgid "Slap"
 msgstr ""
 
-#: dialogs.c:693
+#: dialogs.c:778
 msgid "Wood Thunk"
 msgstr ""
 
-#: dialogs.c:695
+#: dialogs.c:780
 #, fuzzy
 msgid "User File"
 msgstr "Dosya"
 
-#: dialogs.c:717
+#: dialogs.c:803
 msgid "User WAV File:"
 msgstr ""
 
-#: dialogs.c:718
+#: dialogs.c:804
 msgid "Sound Program:"
 msgstr ""
 
-#: dialogs.c:719
+#: dialogs.c:805
 msgid "Try-Out Sound:"
 msgstr ""
 
-#: dialogs.c:720
+#: dialogs.c:806
 msgid "Play"
 msgstr ""
 
-#: dialogs.c:721
+#: dialogs.c:807
 msgid "Move:"
 msgstr ""
 
-#: dialogs.c:722
+#: dialogs.c:808
 msgid "Win:"
 msgstr ""
 
-#: dialogs.c:723
+#: dialogs.c:809
 msgid "Lose:"
 msgstr ""
 
-#: dialogs.c:724
+#: dialogs.c:810
 #, fuzzy
 msgid "Draw:"
 msgstr "Berabere"
 
-#: dialogs.c:725
+#: dialogs.c:811
 msgid "Unfinished:"
 msgstr ""
 
-#: dialogs.c:726
+#: dialogs.c:812
 msgid "Alarm:"
 msgstr ""
 
-#: dialogs.c:727
+#: dialogs.c:813
 msgid "Challenge:"
 msgstr ""
 
-#: dialogs.c:729
+#: dialogs.c:815
 msgid "Sounds Directory:"
 msgstr ""
 
-#: dialogs.c:730
+#: dialogs.c:816
 msgid "Shout:"
 msgstr ""
 
-#: dialogs.c:731
+#: dialogs.c:817
 msgid "S-Shout:"
 msgstr ""
 
-#: dialogs.c:732
+#: dialogs.c:818
 #, fuzzy
 msgid "Channel:"
 msgstr "iptal"
 
-#: dialogs.c:733
+#: dialogs.c:819
 #, fuzzy
 msgid "Channel 1:"
 msgstr "iptal"
 
-#: dialogs.c:734
+#: dialogs.c:820
 msgid "Tell:"
 msgstr ""
 
-#: dialogs.c:735
+#: dialogs.c:821
 msgid "Kibitz:"
 msgstr ""
 
-#: dialogs.c:736
+#: dialogs.c:822
 msgid "Request:"
 msgstr ""
 
-#: dialogs.c:737
+#: dialogs.c:823
+msgid "Lion roar:"
+msgstr ""
+
+#: dialogs.c:824
 msgid "Seek:"
 msgstr ""
 
-#: dialogs.c:753
+#: dialogs.c:840
 #, fuzzy
 msgid "Sound Options"
 msgstr "Seçenekler"
 
-#: dialogs.c:774
+#: dialogs.c:861
 msgid "White Piece Color:"
 msgstr ""
 
 #. TRANSLATORS: R = single letter for the color red
-#: dialogs.c:777 dialogs.c:786 dialogs.c:792 dialogs.c:798 dialogs.c:804
-#: dialogs.c:810
+#: dialogs.c:864 dialogs.c:873 dialogs.c:879 dialogs.c:885 dialogs.c:891
+#: dialogs.c:897
 msgid "R"
 msgstr ""
 
 #. TRANSLATORS: G = single letter for the color green
-#: dialogs.c:779 dialogs.c:787 dialogs.c:793 dialogs.c:799 dialogs.c:805
-#: dialogs.c:811
+#: dialogs.c:866 dialogs.c:874 dialogs.c:880 dialogs.c:886 dialogs.c:892
+#: dialogs.c:898
 msgid "G"
 msgstr ""
 
 #. TRANSLATORS: B = single letter for the color blue
-#: dialogs.c:781 dialogs.c:788 dialogs.c:794 dialogs.c:800 dialogs.c:806
-#: dialogs.c:812
+#: dialogs.c:868 dialogs.c:875 dialogs.c:881 dialogs.c:887 dialogs.c:893
+#: dialogs.c:899
 msgid "B"
 msgstr ""
 
 #. TRANSLATORS: D = single letter to make a color darker
-#: dialogs.c:783 dialogs.c:789 dialogs.c:795 dialogs.c:801 dialogs.c:807
-#: dialogs.c:813
+#: dialogs.c:870 dialogs.c:876 dialogs.c:882 dialogs.c:888 dialogs.c:894
+#: dialogs.c:900
 msgid "D"
 msgstr ""
 
-#: dialogs.c:784
+#: dialogs.c:871
 msgid "Black Piece Color:"
 msgstr ""
 
-#: dialogs.c:790
+#: dialogs.c:877
 msgid "Light Square Color:"
 msgstr ""
 
-#: dialogs.c:796
+#: dialogs.c:883
 msgid "Dark Square Color:"
 msgstr ""
 
-#: dialogs.c:802
+#: dialogs.c:889
 msgid "Highlight Color:"
 msgstr ""
 
-#: dialogs.c:808
+#: dialogs.c:895
 msgid "Premove Highlight Color:"
 msgstr ""
 
-#: dialogs.c:814
+#: dialogs.c:901
 msgid "Flip Pieces Shogi Style        (Colored buttons restore default)"
 msgstr ""
 
-#: dialogs.c:816
+#: dialogs.c:903
 #, fuzzy
 msgid "Mono Mode"
 msgstr "Kip"
 
-#: dialogs.c:817
-msgid "Line Gap ( -1 = default for board size):"
+#: dialogs.c:904
+msgid "Line Gap (-1 = default for board size):"
 msgstr ""
 
-#: dialogs.c:818
+#: dialogs.c:905
 msgid "Use Board Textures"
 msgstr ""
 
-#: dialogs.c:819
+#: dialogs.c:906
 msgid "Light-Squares Texture File:"
 msgstr ""
 
-#: dialogs.c:820
+#: dialogs.c:907
 msgid "Dark-Squares Texture File:"
 msgstr ""
 
-#: dialogs.c:821
+#: dialogs.c:908
 msgid "Use external piece bitmaps with their own colors"
 msgstr ""
 
-#: dialogs.c:822
+#: dialogs.c:909
 msgid "Directory with Pieces Images:"
 msgstr ""
 
-#: dialogs.c:872
+#: dialogs.c:959
 #, fuzzy
 msgid "Board Options"
 msgstr "Seçenekler"
 
-#: dialogs.c:925 menus.c:634
+#: dialogs.c:1012 menus.c:634
 msgid "ICS text menu"
 msgstr ""
 
-#: dialogs.c:947
+#: dialogs.c:1034
 msgid "clear"
 msgstr "temizle"
 
-#: dialogs.c:948 dialogs.c:1036
+#: dialogs.c:1035 dialogs.c:1123
 msgid "save changes"
 msgstr ""
 
-#: dialogs.c:1051
+#: dialogs.c:1138
 #, fuzzy
 msgid "Edit book"
 msgstr "Oyunu Düzenle"
 
-#: dialogs.c:1051 menus.c:636
+#: dialogs.c:1138 menus.c:636
 msgid "Tags"
 msgstr ""
 
-#: dialogs.c:1193
+#: dialogs.c:1280
 #, fuzzy
 msgid "ICS input box"
 msgstr "ICS Ýstemcisi"
 
-#: dialogs.c:1225
+#: dialogs.c:1312
 #, fuzzy
 msgid "Type a move"
 msgstr "Geçersiz hamle"
 
-#: dialogs.c:1251
+#: dialogs.c:1338
 msgid "Engine has no options"
 msgstr ""
 
-#: dialogs.c:1253
+#: dialogs.c:1340
 msgid "Engine Settings"
 msgstr ""
 
-#: dialogs.c:1278
+#: dialogs.c:1365
 msgid "Select engine from list:"
 msgstr ""
 
-#: dialogs.c:1281
+#: dialogs.c:1368
 msgid "or specify one below:"
 msgstr ""
 
-#: dialogs.c:1282
+#: dialogs.c:1369
 msgid "Nickname (optional):"
 msgstr ""
 
-#: dialogs.c:1283
+#: dialogs.c:1370
 msgid "Use nickname in PGN player tags of engine-engine games"
 msgstr ""
 
-#: dialogs.c:1284
+#: dialogs.c:1371
 msgid "Engine Directory:"
 msgstr ""
 
-#: dialogs.c:1285
+#: dialogs.c:1372
 msgid "Engine Command:"
 msgstr ""
 
-#: dialogs.c:1286
+#: dialogs.c:1373
 msgid "(Directory will be derived from engine path when empty)"
 msgstr ""
 
-#: dialogs.c:1287
+#: dialogs.c:1374
 msgid "UCI"
 msgstr ""
 
-#: dialogs.c:1288
+#: dialogs.c:1375
 msgid "WB protocol v1 (do not wait for engine features)"
 msgstr ""
 
-#: dialogs.c:1289
+#: dialogs.c:1376
 msgid "Must not use GUI book"
 msgstr ""
 
-#: dialogs.c:1290
+#: dialogs.c:1377
 msgid "Add this engine to the list"
 msgstr ""
 
-#: dialogs.c:1291
+#: dialogs.c:1378
 msgid "Force current variant with this engine"
 msgstr ""
 
-#: dialogs.c:1341
+#: dialogs.c:1428
 msgid "Load first engine"
 msgstr ""
 
-#: dialogs.c:1347
+#: dialogs.c:1434
 msgid "Load second engine"
 msgstr ""
 
-#: dialogs.c:1370
+#: dialogs.c:1457
 msgid "shuffle"
 msgstr ""
 
-#: dialogs.c:1371
+#: dialogs.c:1458
 msgid "Start-position number:"
 msgstr ""
 
-#: dialogs.c:1372
+#: dialogs.c:1459
 msgid "randomize"
 msgstr ""
 
-#: dialogs.c:1373
+#: dialogs.c:1460
 msgid "pick fixed"
 msgstr ""
 
-#: dialogs.c:1390
+#: dialogs.c:1477
 msgid "New Shuffle Game"
 msgstr ""
 
-#: dialogs.c:1409
+#: dialogs.c:1496
 msgid "classical"
 msgstr ""
 
-#: dialogs.c:1410
+#: dialogs.c:1497
 msgid "incremental"
 msgstr ""
 
-#: dialogs.c:1411
+#: dialogs.c:1498
 msgid "fixed max"
 msgstr ""
 
-#: dialogs.c:1412
+#: dialogs.c:1499
 msgid "Moves per session:"
 msgstr ""
 
-#: dialogs.c:1413
+#: dialogs.c:1500
 msgid "Initial time (min):"
 msgstr ""
 
-#: dialogs.c:1414
+#: dialogs.c:1501
 msgid "Increment or max (sec/move):"
 msgstr ""
 
-#: dialogs.c:1415
+#: dialogs.c:1502
 msgid "Time-Odds factors:"
 msgstr ""
 
-#: dialogs.c:1416
+#: dialogs.c:1503
 msgid "Engine #1"
 msgstr ""
 
-#: dialogs.c:1417
+#: dialogs.c:1504
 msgid "Engine #2 / Human"
 msgstr ""
 
-#: dialogs.c:1457 dialogs.c:1460 dialogs.c:1465 dialogs.c:1466
+#: dialogs.c:1544 dialogs.c:1547 dialogs.c:1552 dialogs.c:1553
 #: gtk/xoptions.c:194
 msgid "Unused"
 msgstr ""
 
-#: dialogs.c:1478
-msgid "Time Control"
-msgstr ""
-
-#: dialogs.c:1507
+#: dialogs.c:1594
 msgid "Error writing to chess program"
 msgstr ""
 
-#: dialogs.c:1574
+#: dialogs.c:1662 xaw/xoptions.c:1276
 #, fuzzy
 msgid "Cancel"
 msgstr "iptal"
 
-#: dialogs.c:1579 dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:1667 dialogs.c:2061 dialogs.c:2065
 msgid "King"
 msgstr "Þah"
 
-#: dialogs.c:1582
+#: dialogs.c:1670
 msgid "Captain"
 msgstr ""
 
-#: dialogs.c:1583
+#: dialogs.c:1671
 msgid "Lieutenant"
 msgstr ""
 
-#: dialogs.c:1584
+#: dialogs.c:1672
 msgid "General"
 msgstr ""
 
-#: dialogs.c:1585
+#: dialogs.c:1673
 msgid "Warlord"
 msgstr ""
 
-#: dialogs.c:1587 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1675 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Knight"
 msgstr "At"
 
-#: dialogs.c:1588 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1676 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Bishop"
 msgstr "Fil"
 
-#: dialogs.c:1589 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1677 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Rook"
 msgstr "Kale"
 
-#: dialogs.c:1593 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1681 dialogs.c:2062 dialogs.c:2066
 #, fuzzy
 msgid "Archbishop"
 msgstr "Fil"
 
-#: dialogs.c:1594 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1682 dialogs.c:2062 dialogs.c:2066
 #, fuzzy
 msgid "Chancellor"
 msgstr "iptal"
 
-#: dialogs.c:1596 dialogs.c:1971 dialogs.c:1975 dialogs.c:1993
+#: dialogs.c:1684 dialogs.c:2061 dialogs.c:2065 dialogs.c:2083
 msgid "Queen"
 msgstr "Vezir"
 
-#: dialogs.c:1600
+#: dialogs.c:1686
+msgid "Lion"
+msgstr ""
+
+#: dialogs.c:1690
 msgid "Defer"
 msgstr ""
 
-#: dialogs.c:1601 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1691 dialogs.c:2062 dialogs.c:2066
 #, fuzzy
 msgid "Promote"
 msgstr "Terfi"
 
-#: dialogs.c:1616
+#: dialogs.c:1706
 msgid "Chat partner:"
 msgstr ""
 
-#: dialogs.c:1701
+#: dialogs.c:1791
 msgid "Chat box"
 msgstr ""
 
-#: dialogs.c:1742
+#: dialogs.c:1832
 msgid "factory"
 msgstr ""
 
-#: dialogs.c:1743
+#: dialogs.c:1833
 msgid "up"
 msgstr ""
 
-#: dialogs.c:1744
+#: dialogs.c:1834
 msgid "down"
 msgstr ""
 
-#: dialogs.c:1762
+#: dialogs.c:1852
 msgid "No tag selected"
 msgstr ""
 
-#: dialogs.c:1793
+#: dialogs.c:1883
 #, fuzzy
 msgid "Game-list options"
 msgstr "Oyun Yükle"
 
-#: dialogs.c:1869 dialogs.c:1883
+#: dialogs.c:1959 dialogs.c:1973
 msgid "Error"
 msgstr "Hata"
 
-#: dialogs.c:1906
+#: dialogs.c:1996
 msgid "Fatal Error"
 msgstr ""
 
-#: dialogs.c:1906
+#: dialogs.c:1996
 msgid "Exiting"
 msgstr ""
 
-#: dialogs.c:1917
+#: dialogs.c:2007
 msgid "Information"
 msgstr "Bilgi"
 
-#: dialogs.c:1924
+#: dialogs.c:2014
 msgid "Note"
 msgstr "Not"
 
-#: dialogs.c:1970 dialogs.c:2245 dialogs.c:2248
+#: dialogs.c:2060 dialogs.c:2340 dialogs.c:2343
 msgid "White"
 msgstr "Beyaz"
 
-#: dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Pawn"
 msgstr "Piyon"
 
-#: dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:2061 dialogs.c:2065
 msgid "Elephant"
 msgstr ""
 
-#: dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:2061 dialogs.c:2065
 msgid "Cannon"
 msgstr ""
 
-#: dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:2062 dialogs.c:2066
 msgid "Demote"
 msgstr ""
 
-#: dialogs.c:1973 dialogs.c:1977
+#: dialogs.c:2063 dialogs.c:2067
 msgid "Empty square"
 msgstr "Kareyi Boþalt"
 
-#: dialogs.c:1973 dialogs.c:1977
+#: dialogs.c:2063 dialogs.c:2067
 msgid "Clear board"
 msgstr "Tahtayý Temizle"
 
-#: dialogs.c:1974 dialogs.c:2257 dialogs.c:2260
+#: dialogs.c:2064 dialogs.c:2352 dialogs.c:2355
 msgid "Black"
 msgstr "Siyah"
 
-#: dialogs.c:2073 menus.c:787
+#: dialogs.c:2163 menus.c:787
 msgid "File"
 msgstr "Dosya"
 
-#: dialogs.c:2074 menus.c:788
+#: dialogs.c:2164 menus.c:788
 #, fuzzy
 msgid "Edit"
 msgstr "Oyunu Düzenle"
 
-#: dialogs.c:2075 menus.c:789
+#: dialogs.c:2165 menus.c:789
 msgid "View"
 msgstr ""
 
-#: dialogs.c:2076 menus.c:790
+#: dialogs.c:2166 menus.c:790
 msgid "Mode"
 msgstr "Kip"
 
-#: dialogs.c:2077 menus.c:791
+#: dialogs.c:2167 menus.c:791
 msgid "Action"
 msgstr "Eylem"
 
-#: dialogs.c:2078 menus.c:792
+#: dialogs.c:2168 menus.c:792
 msgid "Engine"
 msgstr ""
 
-#: dialogs.c:2079 menus.c:793
+#: dialogs.c:2169 menus.c:793
 msgid "Options"
 msgstr "Seçenekler"
 
-#: dialogs.c:2080 menus.c:794
+#: dialogs.c:2170 menus.c:794
 msgid "Help"
 msgstr "Yardým"
 
-#: dialogs.c:2090
+#: dialogs.c:2180
 msgid "<<"
 msgstr ""
 
-#: dialogs.c:2091
+#: dialogs.c:2181
 msgid "<"
 msgstr ""
 
-#: dialogs.c:2093
+#: dialogs.c:2183
 msgid ">"
 msgstr ""
 
-#: dialogs.c:2094
+#: dialogs.c:2184
 msgid ">>"
 msgstr ""
 
-#: dialogs.c:2364
+#: dialogs.c:2458
 msgid "Directories:"
 msgstr ""
 
-#: dialogs.c:2365
+#: dialogs.c:2459
 #, fuzzy
 msgid "Files:"
 msgstr "Dosya"
 
-#: dialogs.c:2366
+#: dialogs.c:2460
 msgid "by name"
 msgstr ""
 
-#: dialogs.c:2367
+#: dialogs.c:2461
 msgid "by type"
 msgstr ""
 
-#: dialogs.c:2370
+#: dialogs.c:2464
 #, fuzzy
 msgid "Filename:"
 msgstr "Dosya adý giriþi"
 
-#: dialogs.c:2371
+#: dialogs.c:2465
 msgid "New directory"
 msgstr ""
 
-#: dialogs.c:2372
+#: dialogs.c:2466
 #, fuzzy
 msgid "File type:"
 msgstr "Analiz edilecek dosya"
 
-#: dialogs.c:2447
+#: dialogs.c:2541
 msgid "Contents of"
 msgstr ""
 
-#: dialogs.c:2473
+#: dialogs.c:2567
 #, fuzzy
 msgid "  next page"
 msgstr "sonraki"
 
-#: dialogs.c:2490
+#: dialogs.c:2584
 msgid "FIRST TYPE DIRECTORY NAME HERE"
 msgstr ""
 
-#: dialogs.c:2491
+#: dialogs.c:2585
 msgid "TRY ANOTHER NAME"
 msgstr ""
 
-#: draw.c:293
+#: draw.c:310
 msgid ""
-"No default pieces installed\n"
-"Select your own -pieceImageDirectory"
+"No default pieces installed!\n"
+"Select your own using '-pieceImageDirectory'."
 msgstr ""
 
-#: engineoutput.c:107 menus.c:630
+#: engineoutput.c:110 menus.c:630
 #, c-format
 msgid "Engine Output"
 msgstr ""
 
-#: engineoutput.c:117
+#: engineoutput.c:120
 #, c-format
 msgid "%s (%d reversible ply)"
 msgid_plural "%s (%d reversible plies)"
 msgstr[0] ""
 
-#: engineoutput.c:509 engineoutput.c:512 nengineoutput.c:81 nengineoutput.c:88
+#: engineoutput.c:542 engineoutput.c:545 nengineoutput.c:82 nengineoutput.c:90
 msgid "NPS"
 msgstr ""
 
@@ -2192,50 +2266,50 @@ msgstr ""
 msgid "Reading game file (%d)"
 msgstr ""
 
-#: gtk/xboard.c:844 xaw/xboard.c:1162
+#: gtk/xboard.c:867 xaw/xboard.c:1052
 #, c-format
 msgid "%s: can't cd to CHESSDIR: "
 msgstr ""
 
-#: gtk/xboard.c:853 xaw/xboard.c:1171
+#: gtk/xboard.c:876 xaw/xboard.c:1061
 #, fuzzy, c-format
 msgid "Failed to open file '%s'\n"
 msgstr "Dosya açýlamadý"
 
-#: gtk/xboard.c:868 xaw/xboard.c:1180
+#: gtk/xboard.c:891 xaw/xboard.c:1070
 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size"
 msgstr ""
 
-#: gtk/xboard.c:887 xaw/xboard.c:1212
+#: gtk/xboard.c:910 xaw/xboard.c:1102
 #, c-format
 msgid "%s: bad boardSize syntax %s\n"
 msgstr ""
 
-#: gtk/xboard.c:927 xaw/xboard.c:1249
+#: gtk/xboard.c:950 xaw/xboard.c:1139
 #, c-format
 msgid "%s: unrecognized boardSize name %s\n"
 msgstr ""
 
-#: gtk/xboard.c:968 xaw/xboard.c:1286
+#: gtk/xboard.c:991 xaw/xboard.c:1176
 #, c-format
 msgid "%s: too few colors available; trying monochrome mode\n"
 msgstr ""
 
-#: gtk/xboard.c:1258 xaw/xboard.c:1568
+#: gtk/xboard.c:1281 xaw/xboard.c:1458
 #, c-format
 msgid "Unable to create font set for %s.\n"
 msgstr ""
 
-#: gtk/xboard.c:1283 xaw/xboard.c:1591
+#: gtk/xboard.c:1306 xaw/xboard.c:1481
 #, c-format
 msgid "%s: no fonts match pattern %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1722 xaw/xboard.c:2081
+#: gtk/xboard.c:1745 xaw/xboard.c:1971
 msgid "Can't open temp file"
 msgstr ""
 
-#: gtk/xboard.c:2174
+#: gtk/xboard.c:2199
 msgid "Failed to open file"
 msgstr "Dosya açýlamadý"
 
@@ -2290,11 +2364,12 @@ msgid "New Game"
 msgstr "Oyunu Sýfýrla"
 
 #: menus.c:583
-msgid "New Shuffle Game ..."
-msgstr ""
+#, fuzzy
+msgid "New Shuffle Game..."
+msgstr "Oyunu Kaydet"
 
 #: menus.c:584
-msgid "New Variant ..."
+msgid "New Variant..."
 msgstr ""
 
 #: menus.c:586
@@ -2561,19 +2636,19 @@ msgid "Adjudicate Draw"
 msgstr ""
 
 #: menus.c:684
-msgid "Load New 1st Engine ..."
+msgid "Load New 1st Engine..."
 msgstr ""
 
 #: menus.c:685
-msgid "Load New 2nd Engine ..."
+msgid "Load New 2nd Engine..."
 msgstr ""
 
 #: menus.c:687
-msgid "Engine #1 Settings ..."
+msgid "Engine #1 Settings..."
 msgstr ""
 
 #: menus.c:688
-msgid "Engine #2 Settings ..."
+msgid "Engine #2 Settings..."
 msgstr ""
 
 #: menus.c:690
@@ -2594,46 +2669,47 @@ msgid "Retract Move"
 msgstr "Hamleyi Geri Al"
 
 #: menus.c:700
-msgid "General ..."
+msgid "General..."
 msgstr ""
 
 #: menus.c:702
-msgid "Time Control ..."
+msgid "Time Control..."
 msgstr ""
 
 #: menus.c:703
-msgid "Common Engine ..."
+msgid "Common Engine..."
 msgstr ""
 
 #: menus.c:704
-msgid "Adjudications ..."
-msgstr ""
+#, fuzzy
+msgid "Adjudications..."
+msgstr "Oyunu Kaydet"
 
 #: menus.c:705
-msgid "ICS ..."
+msgid "ICS..."
 msgstr ""
 
 #: menus.c:706
-msgid "Match ..."
+msgid "Tournament..."
 msgstr ""
 
 #: menus.c:707
 #, fuzzy
-msgid "Load Game ..."
+msgid "Load Game..."
 msgstr "Oyun Yükle"
 
 #: menus.c:708
 #, fuzzy
-msgid "Save Game ..."
+msgid "Save Game..."
 msgstr "Oyunu Kaydet"
 
 #: menus.c:709
 #, fuzzy
-msgid "Game List ..."
+msgid "Game List..."
 msgstr "Oyun Listesini Göster"
 
 #: menus.c:710
-msgid "Sounds ..."
+msgid "Sounds..."
 msgstr ""
 
 #: menus.c:713
@@ -2705,19 +2781,20 @@ msgstr ""
 msgid "e-Mail Bug Report"
 msgstr ""
 
-#: nengineoutput.c:78 nengineoutput.c:85
+#: nengineoutput.c:78 nengineoutput.c:86
 msgid "engine name"
 msgstr ""
 
-#: nengineoutput.c:80 nengineoutput.c:87
+#. TRANSLATORS: noun, as in "the move Nf3"
+#: nengineoutput.c:81 nengineoutput.c:89
 msgid "move"
 msgstr ""
 
-#: nengineoutput.c:153
+#: nengineoutput.c:155
 msgid "Engine output"
 msgstr ""
 
-#: nengineoutput.c:157
+#: nengineoutput.c:159
 msgid ""
 "Mismatch of STRIDE in nengineoutput.c\n"
 "Change and recompile!"
@@ -2803,7 +2880,7 @@ msgstr ""
 
 #: usystem.c:230
 #, c-format
-msgid "%s: can't parse foreground color in `%s'\n"
+msgid "%s: can't parse foreground color in '%s'\n"
 msgstr ""
 
 #: usystem.c:259
@@ -2811,54 +2888,25 @@ msgstr ""
 msgid "%s: can't parse color names; disabling colorization\n"
 msgstr ""
 
-#: usystem.c:371
+#: usystem.c:374
 #, c-format
 msgid "ERROR: Unknown user %s (in path %s)\n"
 msgstr ""
 
-#: usystem.c:556
+#: usystem.c:557
 msgid "Socket support is not configured in"
 msgstr ""
 
-#: usystem.c:645
+#: usystem.c:646
 msgid "internal rcmd not implemented for Unix"
 msgstr ""
 
-#: xaw/xboard.c:478
-#, c-format
-msgid "%s: Can't access XPM directory %s\n"
-msgstr ""
-
-#: xaw/xboard.c:499
-#, c-format
-msgid "Available `%s' sizes:\n"
-msgstr ""
-
-#: xaw/xboard.c:532
-#, c-format
-msgid "Error: No `%s' files!\n"
-msgstr ""
-
-#: xaw/xboard.c:545
-#, c-format
-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 ""
-
-#: xaw/xboard.c:1292
+#: xaw/xboard.c:1182
 #, c-format
 msgid "white pixel = 0x%lx, black pixel = 0x%lx\n"
 msgstr ""
 
-#: xaw/xengineoutput.c:115
-#, c-format
-msgid "Error %d loading icon image\n"
-msgstr ""
-
-#: xaw/xoptions.c:321 xaw/xoptions.c:1023
+#: xaw/xoptions.c:321 xaw/xoptions.c:1025
 msgid "browse"
 msgstr ""
 
@@ -2874,13 +2922,16 @@ msgstr ""
 msgid "Shift"
 msgstr ""
 
-#: xaw/xoptions.c:1270
+#: xaw/xoptions.c:1272
 msgid "OK"
 msgstr ""
 
-#: xaw/xoptions.c:1274
-msgid "cancel"
-msgstr "iptal"
+#, fuzzy
+#~ msgid "Match Options"
+#~ msgstr "Seçenekler"
+
+#~ msgid "cancel"
+#~ msgstr "iptal"
 
 #, fuzzy
 #~ msgid "Load Position    Ctrl+Shift+O"
index 083cc60..2d17fc7 100644 (file)
--- a/po/uk.po
+++ b/po/uk.po
@@ -5,10 +5,10 @@
 # Yuri Chornoivan <yurchor@ukr.net>, 2011, 2012, 2013.
 msgid ""
 msgstr ""
-"Project-Id-Version: GNU xboard-4.7.0.20130224\n"
+"Project-Id-Version: GNU xboard-4.7.2\n"
 "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n"
-"POT-Creation-Date: 2014-01-05 12:51-0800\n"
-"PO-Revision-Date: 2013-02-26 22:30+0200\n"
+"POT-Creation-Date: 2014-01-19 22:19-0800\n"
+"PO-Revision-Date: 2013-11-19 13:57+0200\n"
 "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
 "Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
 "Language: uk\n"
@@ -19,227 +19,229 @@ 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:820
+#: args.h:833
 #, c-format
 msgid "%s in settings file\n"
 msgstr "%s у файлі параметрів\n"
 
-#: args.h:830
+#: args.h:867
 #, c-format
 msgid "Bad integer value %s"
 msgstr "Помилкове ціле значення %s"
 
-#: args.h:923 args.h:1170
+#: args.h:968 args.h:1229
 #, c-format
 msgid "Unrecognized argument %s"
 msgstr "Невідомий аргумент %s"
 
-#: args.h:954
+#: args.h:999
 #, c-format
 msgid "No value provided for argument %s"
 msgstr "Не вказано значення для аргументу %s"
 
-#: args.h:1014
+#: args.h:1059
 #, c-format
 msgid "Incomplete \\ escape in value for %s"
 msgstr "Неповне екранування \\ у значенні для %s"
 
-#: args.h:1125
+#: args.h:1170
 #, c-format
 msgid "Failed to open indirection file %s"
 msgstr "Не вдалося відкрити файл переспрямування %s"
 
-#: args.h:1142
+#: args.h:1187
 #, c-format
 msgid "Unrecognized boolean argument value %s"
 msgstr "Невідоме значення булевого аргументу %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
-#: backend.c:744
+#: backend.c:800
 msgid "first"
 msgstr "перший"
 
 #. 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:747
+#: backend.c:803
 msgid "second"
 msgstr "другий"
 
-#: backend.c:827
+#: backend.c:885
 #, c-format
 msgid "protocol version %d not supported"
 msgstr "підтримки версії протоколу %d не передбачено"
 
-#: backend.c:933
+#: backend.c:991
 msgid "You did not specify the engine executable"
 msgstr "Вами не вказано виконуваного файла рушія"
 
-#: backend.c:989
+#: backend.c:1049
 #, c-format
 msgid "bad timeControl option %s"
 msgstr "помилковий параметр timeControl %s"
 
-#: backend.c:1004
+#: backend.c:1064
 #, c-format
 msgid "bad searchTime option %s"
 msgstr "помилковий параметр searchTime %s"
 
-#: backend.c:1110
+#: backend.c:1170
 #, c-format
 msgid "Variant %s supported only in ICS mode"
 msgstr "Підтримку варіанта %s передбачено лише у режимі ICS"
 
-#: backend.c:1128
+#: backend.c:1188
 #, c-format
 msgid "Unknown variant name %s"
 msgstr "Невідома назва варіанта %s"
 
-#: backend.c:1375
+#: backend.c:1439
 msgid "Starting chess program"
 msgstr "Запуск шахової програми"
 
-#: backend.c:1398
+#: backend.c:1462
 msgid "Bad game file"
 msgstr "Помилковий файл гри"
 
-#: backend.c:1405
+#: backend.c:1469
 msgid "Bad position file"
 msgstr "Помилковий файл позиції"
 
-#: backend.c:1419
+#: backend.c:1483
 msgid "Pick new game"
 msgstr "Виберіть нову гру"
 
-#: backend.c:1488
+#: backend.c:1552
+#, fuzzy
 msgid ""
-"You restarted an already completed tourney\n"
-"One more cycle will now be added to it\n"
-"Games commence in 10 sec"
+"You restarted an already completed tourney.\n"
+"One more cycle will now be added to it.\n"
+"Games commence in 10 sec."
 msgstr ""
 "Вами перезапущено вже завершений турнір.\n"
 "Тепер до турніру буде додано ще одне коло.\n"
 "Ігри розпочнуться за 10 секунд."
 
-#: backend.c:1495
+#: backend.c:1559
 #, c-format
 msgid "All games in tourney '%s' are already played or playing"
 msgstr "Всі ігри турніру «%s» вже зіграно або вже розпочато"
 
-#: backend.c:1502
+#: backend.c:1566
 msgid "Can't have a match with no chess programs"
 msgstr "Не можна розпочати матч, якщо не встановлено шахових програм"
 
-#: backend.c:1539
+#: backend.c:1620
 #, c-format
 msgid "Could not open comm port %s"
 msgstr "Не вдалося відкрити порт comm %s"
 
-#: backend.c:1542
+#: backend.c:1623
 #, c-format
 msgid "Could not connect to host %s, port %s"
 msgstr "Не вдалося з’єднатися з вузлом %s, порт %s"
 
-#: backend.c:1598
+#: backend.c:1679
 #, c-format
 msgid "Unknown initialMode %s"
 msgstr "Невідоме значення initialMode %s"
 
-#: backend.c:1624
+#: backend.c:1705
 msgid "AnalyzeFile mode requires a game file"
 msgstr "У режимі аналізу файла потрібен файл гри"
 
-#: backend.c:1651
+#: backend.c:1732
 msgid "Analysis mode requires a chess engine"
 msgstr "У режимі аналізу потрібен шаховий рушій"
 
-#: backend.c:1655
+#: backend.c:1736
 msgid "Analysis mode does not work with ICS mode"
 msgstr "Робота режиму разом з режимом ICS неможлива"
 
-#: backend.c:1666
+#: backend.c:1747
 msgid "MachineWhite mode requires a chess engine"
 msgstr "У режимі гри комп’ютера білими потрібен шаховий рушій"
 
-#: backend.c:1671
+#: backend.c:1752
 msgid "MachineWhite mode does not work with ICS mode"
 msgstr "Робота режиму гри комп’ютером білими разом з режимом ICS неможлива"
 
-#: backend.c:1678
+#: backend.c:1759
 msgid "MachineBlack mode requires a chess engine"
 msgstr "У режимі гри комп’ютера чорними потрібен шаховий рушій"
 
-#: backend.c:1683
+#: backend.c:1764
 msgid "MachineBlack mode does not work with ICS mode"
 msgstr "Робота режиму гри комп’ютером білими разом з режимом ICS неможлива"
 
-#: backend.c:1690
+#: backend.c:1771
 msgid "TwoMachines mode requires a chess engine"
 msgstr ""
 "Режимом гри між двома комп’ютерами можна скористатися, лише якщо встановлено "
 "шаховий рушій"
 
-#: backend.c:1695
+#: backend.c:1776
 msgid "TwoMachines mode does not work with ICS mode"
 msgstr "Робота режиму гри між двома комп’ютерами разом з режимом ICS неможлива"
 
-#: backend.c:1706
+#: backend.c:1787
 msgid "Training mode requires a game file"
 msgstr "У режимі тренування потрібен файл гри"
 
-#: backend.c:1869 backend.c:1924 backend.c:1947 backend.c:2346
+#: backend.c:1950 backend.c:2005 backend.c:2028 backend.c:2430
 msgid "Error writing to ICS"
 msgstr "Помилка під час спроби запису до ICS"
 
-#: backend.c:1884
+#: backend.c:1965
 msgid "Error reading from keyboard"
 msgstr "Помилка під час читання даних з клавіатури"
 
-#: backend.c:1887
+#: backend.c:1968
 msgid "Got end of file from keyboard"
 msgstr "Отримано символ кінця файла з клавіатури"
 
-#: backend.c:2192
+#: backend.c:2276
 #, c-format
 msgid "Unknown wild type %d"
 msgstr "Невідомий «дикий» тип %d"
 
-#: backend.c:2263 usystem.c:329
+#: backend.c:2347 usystem.c:329
 msgid "Error writing to display"
 msgstr "Помилка запису на дисплей"
 
-#: backend.c:3019
+#. TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers
+#: backend.c:3105
 #, c-format
 msgid "your opponent kibitzes: %s"
 msgstr "втручання вашого суперника: %s"
 
-#: backend.c:3548
+#: backend.c:3634
 msgid "Error gathering move list: two headers"
 msgstr "Помилка під час збирання списку ходів: два заголовки"
 
-#: backend.c:3595
+#: backend.c:3681
 msgid "Error gathering move list: nested"
 msgstr "Помилка під час збирання списку ходів: вкладеність"
 
-#: backend.c:3699 backend.c:4117 backend.c:4321 backend.c:4880 backend.c:4884
-#: backend.c:6900 backend.c:12101 backend.c:13816 backend.c:13893
-#: backend.c:13939 backend.c:13945 backend.c:13950 backend.c:13955
+#: backend.c:3785 backend.c:4203 backend.c:4407 backend.c:4966 backend.c:4970
+#: backend.c:7073 backend.c:12577 backend.c:14306 backend.c:14383
+#: backend.c:14429 backend.c:14435 backend.c:14440 backend.c:14445
 msgid "vs."
 msgstr "проти"
 
-#: backend.c:3827
+#: backend.c:3913
 msgid "Illegal move (rejected by ICS)"
 msgstr "Некоректний хід (заборонено ICS)"
 
-#: backend.c:4165
+#: backend.c:4251
 msgid "Connection closed by ICS"
 msgstr "З’єднання розірвано з боку ICS"
 
-#: backend.c:4167
+#: backend.c:4253
 msgid "Error reading from ICS"
 msgstr "Помилка під час спроби читання з ICS"
 
-#: backend.c:4244
+#: backend.c:4330
 #, c-format
 msgid ""
 "Failed to parse board string:\n"
@@ -248,111 +250,127 @@ msgstr ""
 "Не вдалося обробити рядок дошки:\n"
 "\"%s\""
 
-#: backend.c:4253 backend.c:9756
+#: backend.c:4339 backend.c:10203
 msgid "Game too long; increase MAX_MOVES and recompile"
 msgstr ""
 "Гра є занадто довгою. Збільшіть значення MAX_MOVES і перезберіть програму."
 
-#: backend.c:4372
+#: backend.c:4458
 msgid "Error gathering move list: extra board"
 msgstr "Помилка під час збирання списку ходів: вихід за межі дошки"
 
-#: backend.c:4804 backend.c:4826
+#: backend.c:4890 backend.c:4912
 #, c-format
 msgid "Couldn't parse move \"%s\" from ICS"
 msgstr "Не вдалося обробити хід «%s» з ICS"
 
-#: backend.c:5063
+#: backend.c:5161
 #, c-format
 msgid "say Internal error; bad moveType %d (%d,%d-%d,%d)"
 msgstr "say Internal error; bad moveType %d (%d,%d-%d,%d)"
 
-#: backend.c:5133
+#: backend.c:5232
 msgid "You cannot do this while you are playing or observing"
 msgstr "Ця дія неможлива у режимі гри або спостереження"
 
-#: backend.c:6029
+#: backend.c:6174
 msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!"
 msgstr ""
 "Повторно зберіть програму з підтримкою цих значень BOARD_RANKS і BOARD_FILES!"
 
-#: backend.c:6491
+#: backend.c:6664
 msgid "You are playing Black"
 msgstr "Ви граєте чорними"
 
-#: backend.c:6500 backend.c:6527
+#: backend.c:6673 backend.c:6700
 msgid "You are playing White"
 msgstr "Ви граєте білими"
 
-#: backend.c:6509 backend.c:6535 backend.c:6655 backend.c:6680 backend.c:6696
-#: backend.c:14592
+#: backend.c:6682 backend.c:6708 backend.c:6828 backend.c:6853 backend.c:6869
+#: backend.c:15113
 msgid "It is White's turn"
 msgstr "Хід білих"
 
-#: backend.c:6513 backend.c:6539 backend.c:6663 backend.c:6686 backend.c:6717
-#: backend.c:14584
+#: backend.c:6686 backend.c:6712 backend.c:6836 backend.c:6859 backend.c:6890
+#: backend.c:15105
 msgid "It is Black's turn"
 msgstr "Хід чорних"
 
-#: backend.c:6552
+#: backend.c:6725
 msgid "Displayed position is not current"
 msgstr "Показана позиція не є поточною"
 
-#: backend.c:6790
+#: backend.c:6963
 msgid "Illegal move"
 msgstr "Недозволений хід"
 
-#: backend.c:6857
+#: backend.c:7030
 msgid "End of game"
 msgstr "Кінець гри"
 
-#: backend.c:6860
+#: backend.c:7033
 msgid "Incorrect move"
 msgstr "Некоректний хід"
 
-#: backend.c:7169 backend.c:7296
+#: backend.c:7423 backend.c:7569
 msgid "Pull pawn backwards to under-promote"
 msgstr "Потягніть пішака назад, щоб знизити ранг фігури"
 
-#: backend.c:7527
+#: backend.c:7532
+msgid "only marked squares are legal"
+msgstr ""
+
+#: backend.c:7820
 msgid "Swiss tourney finished"
 msgstr "Турнір за швейцарською системою завершено"
 
-#: backend.c:8103
+#: backend.c:8336
+msgid "could not load EGBB library"
+msgstr ""
+
+#: backend.c:8339
+msgid "wrong EGBB version"
+msgstr ""
+
+#: backend.c:8452
 msgid "Invalid pairing from pairing engine"
 msgstr "Рушієм визначення пар повернуто некоректне значення пари"
 
-#: backend.c:8236
+#: backend.c:8603
 #, c-format
 msgid "Illegal move \"%s\" from %s machine"
 msgstr "Некоректний хід «%s» від комп’ютера %s"
 
-#: backend.c:8457
+#: backend.c:8849
 msgid "Bad FEN received from engine"
 msgstr "Отримано помилкові дані FEN від рушія"
 
-#: backend.c:8601 backend.c:13681 backend.c:13746
+#: backend.c:8950
+msgid "Engine did not send setup for non-standard variant"
+msgstr ""
+
+#: backend.c:9023 backend.c:14168 backend.c:14236
 #, c-format
 msgid "%s does not support analysis"
 msgstr "У %s не передбачено аналізу"
 
-#: backend.c:8667
+#: backend.c:9089
 #, c-format
 msgid "Illegal move \"%s\" (rejected by %s chess program)"
 msgstr ""
 "Недозволений хід «%s» (у реєстрації ходу відмовлено шаховою програмою %s)"
 
-#: backend.c:8694
+#: backend.c:9116
 #, c-format
 msgid "Failed to start %s chess program %s on %s: %s\n"
 msgstr "Не вдалося запустити шахову програму %s %s на %s: %s\n"
 
-#: backend.c:8715
+#: backend.c:9137
 #, c-format
 msgid "Hint: %s"
 msgstr "Підказка: %s"
 
-#: backend.c:8720
+#: backend.c:9142
 #, c-format
 msgid ""
 "Illegal hint move \"%s\"\n"
@@ -361,59 +379,66 @@ msgstr ""
 "Некоректна підказка щодо ходу «%s»\n"
 "від шахової програми %s"
 
-#: backend.c:8895
+#: backend.c:9317
 msgid "Machine accepts your draw offer"
 msgstr "Ком’ютер погодився з вашою пропозицією нічиєї"
 
-#: backend.c:8898
+#: backend.c:9320
+#, fuzzy
 msgid ""
-"Machine offers a draw\n"
-"Select Action / Draw to agree"
+"Machine offers a draw.\n"
+"Select Action / Draw to accept."
 msgstr ""
 "Комп’ютером запропоновано нічию\n"
 "Скористайтеся пунктом меню «Дія->Нічия», щоб погодитися"
 
-#: backend.c:8977
+#. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone
+#: backend.c:9402
 msgid "failed writing PV"
 msgstr "не вдалося записати PV"
 
-#: backend.c:9275
+#: backend.c:9701
 #, c-format
 msgid "Ambiguous move in ICS output: \"%s\""
 msgstr "Неоднозначний хід у виведених ICS даних: «%s»"
 
-#: backend.c:9285
+#: backend.c:9711
 #, c-format
 msgid "Illegal move in ICS output: \"%s\""
 msgstr "Некоректний хід у виведених даних ICS: «%s»"
 
-#: backend.c:9296
+#: backend.c:9722
 msgid "Gap in move list"
 msgstr "Пропущено хід у списку ходів"
 
-#: backend.c:9917 dialogs.c:460
+#: backend.c:10357
 #, c-format
 msgid "Variant %s not supported by %s"
 msgstr "Варіант %s не підтримується %s"
 
-#: backend.c:10038
+#: backend.c:10364
+#, c-format
+msgid ", but %s is"
+msgstr ""
+
+#: backend.c:10506
 #, c-format
 msgid "Startup failure on '%s'"
 msgstr "Помилка запуску на «%s»"
 
-#: backend.c:10069
+#: backend.c:10537
 msgid "Waiting for first chess program"
 msgstr "Очікування на запуск першої шахової програми"
 
-#: backend.c:10074 backend.c:13964
+#: backend.c:10542 backend.c:14454
 msgid "Waiting for second chess program"
 msgstr "Очікування на запуск другої шахової програми"
 
-#: backend.c:10123
+#: backend.c:10591
 msgid "Could not write on tourney file"
 msgstr "Не вдалося виконати запис до файла турніру"
 
-#: backend.c:10197
+#: backend.c:10665
 msgid ""
 "You cannot replace an engine while it is engaged!\n"
 "Terminate its game first."
@@ -421,11 +446,11 @@ msgstr ""
 "Не можна міняти рушій, який зараз використовується!\n"
 "Спочатку перервіть гру."
 
-#: backend.c:10211
+#: backend.c:10679
 msgid "No engine with the name you gave is installed"
 msgstr "Рушія з вказаною вами назвою не встановлено"
 
-#: backend.c:10213
+#: backend.c:10681
 msgid ""
 "First change an engine by editing the participants list\n"
 "of the Tournament Options dialog"
@@ -433,16 +458,16 @@ msgstr ""
 "Спочатку змініть рушій редагуванням списку учасників турніру\n"
 "у діалоговому вікні «Параметри турніру»"
 
-#: backend.c:10214
+#: backend.c:10682
 msgid "You can only change one engine at the time"
 msgstr "Одночасно змінювати можна лише один рушій"
 
-#: backend.c:10229 backend.c:10376
+#: backend.c:10697 backend.c:10845
 #, c-format
 msgid "No engine %s is installed"
 msgstr "Не встановлено жодного рушія %s"
 
-#: backend.c:10249
+#: backend.c:10717
 msgid ""
 "You must supply a tournament file,\n"
 "for storing the tourney progress"
@@ -450,115 +475,115 @@ msgstr ""
 "Для запису результатів турніру\n"
 "вам слід вказати файл турніру."
 
-#: backend.c:10259
+#: backend.c:10727
 msgid "Not enough participants"
 msgstr "Недостатньо учасників"
 
-#: backend.c:10460
+#: backend.c:10929
 msgid "Bad tournament file"
 msgstr "Помилковий файл турніру"
 
-#: backend.c:10472
+#: backend.c:10941
 msgid "Waiting for other game(s)"
 msgstr "Очікування на результати інших ігор"
 
-#: backend.c:10485
+#: backend.c:10954
 msgid "No pairing engine specified"
 msgstr "Не вказано рушія визначення пар"
 
-#: backend.c:10962
+#: backend.c:11430
 #, c-format
 msgid "Match %s vs. %s: final score %d-%d-%d"
 msgstr "Матч між %s і %s: остаточний рахунок — %d-%d-%d"
 
-#: backend.c:11424 backend.c:11455
+#: backend.c:11897 backend.c:11928
 #, c-format
 msgid "Illegal move: %d.%s%s"
 msgstr "Недозволений хід: %d.%s%s"
 
-#: backend.c:11444
+#: backend.c:11917
 #, c-format
 msgid "Ambiguous move: %d.%s%s"
 msgstr "Неоднозначний хід: %d.%s%s"
 
-#: backend.c:11497 backend.c:12524 backend.c:12717 backend.c:13078
+#: backend.c:11971 backend.c:13010 backend.c:13203 backend.c:13567
 #, c-format
 msgid "Can't open \"%s\""
 msgstr "Не вдалося відкрити «%s»"
 
-#: backend.c:11509 menus.c:116
+#: backend.c:11983 menus.c:116
 msgid "Cannot build game list"
 msgstr "Не вдалося побудувати список ігор"
 
-#: backend.c:11594
+#: backend.c:12068
 msgid "No more games in this message"
 msgstr "У цьому повідомленні більше немає результатів ігор"
 
-#: backend.c:11634
+#: backend.c:12108
 msgid "No game has been loaded yet"
 msgstr "Ще не завантажено жодної гри"
 
-#: backend.c:11638 backend.c:12505 ngamelist.c:129
+#: backend.c:12112 backend.c:12991 ngamelist.c:129
 msgid "Can't back up any further"
 msgstr "Подальше створення резервних копій неможливе"
 
-#: backend.c:12077
+#: backend.c:12553
 msgid "Game number out of range"
 msgstr "Номер гри поза доступним діапазоном"
 
-#: backend.c:12088
+#: backend.c:12564
 msgid "Can't seek on game file"
 msgstr "Пошук у файлі гри неможливий"
 
-#: backend.c:12146
+#: backend.c:12622
 msgid "Game not found in file"
 msgstr "У файлі немає даних щодо гри"
 
-#: backend.c:12274 backend.c:12601
+#: backend.c:12751 backend.c:13087
 msgid "Bad FEN position in file"
 msgstr "Помилкова позиція FEN у файлі"
 
-#: backend.c:12426
+#: backend.c:12903
 msgid "No moves in game"
 msgstr "У записі гри немає жодного ходу"
 
-#: backend.c:12501
+#: backend.c:12987
 msgid "No position has been loaded yet"
 msgstr "Жодної з позицій ще не завантажено"
 
-#: backend.c:12562 backend.c:12573
+#: backend.c:13048 backend.c:13059
 msgid "Can't seek on position file"
 msgstr "Пошук у файлі позицій неможливий"
 
-#: backend.c:12580 backend.c:12592
+#: backend.c:13066 backend.c:13078
 msgid "Position not found in file"
 msgstr "У файлі не знайдено позиції"
 
-#: backend.c:12632
+#: backend.c:13118
 msgid "Black to play"
 msgstr "Хід чорних"
 
-#: backend.c:12635
+#: backend.c:13121
 msgid "White to play"
 msgstr "Хід білих"
 
-#: backend.c:12722 backend.c:13083
+#: backend.c:13208 backend.c:13572
 msgid "Waiting for access to save file"
 msgstr "Очікування на доступ до можливості збереження файла"
 
-#: backend.c:12724
+#: backend.c:13210
 msgid "Saving game"
 msgstr "Збереження гри"
 
-#: backend.c:12725
+#: backend.c:13211
 msgid "Bad Seek"
 msgstr "Помилкове позиціювання"
 
-#: backend.c:13085
+#: backend.c:13574
 msgid "Saving position"
 msgstr "Збереження позиції"
 
-#: backend.c:13211
+#: backend.c:13700
 msgid ""
 "You have edited the game history.\n"
 "Use Reload Same Game and make your move again."
@@ -566,7 +591,7 @@ msgstr ""
 "Вами внесено зміни до журналу гри.\n"
 "Скористайтеся пунктом «Перезавантажити гру» і повторіть ваш хід."
 
-#: backend.c:13216
+#: backend.c:13705
 msgid ""
 "You have entered too many moves.\n"
 "Back up to the correct position and try again."
@@ -574,7 +599,7 @@ msgstr ""
 "Вами введено занадто багато ходів.\n"
 "Поверніться до правильної позиції і повторіть спробу."
 
-#: backend.c:13221
+#: backend.c:13710
 msgid ""
 "Displayed position is not current.\n"
 "Step forward to the correct position and try again."
@@ -582,11 +607,11 @@ msgstr ""
 "Показана позиція не є поточною.\n"
 "Продовжіть гру, щоб виправити позицію і повторіть спробу."
 
-#: backend.c:13268
+#: backend.c:13757
 msgid "You have not made a move yet"
 msgstr "Вами ще не зроблено жодного ходу"
 
-#: backend.c:13289
+#: backend.c:13778
 msgid ""
 "The cmail message is not loaded.\n"
 "Use Reload CMail Message and make your move again."
@@ -595,11 +620,11 @@ msgstr ""
 "Скористайтеся пунктом «Перезавантажити повідомлення CMail» і повторіть ваш "
 "хід."
 
-#: backend.c:13294
+#: backend.c:13783
 msgid "No unfinished games"
 msgstr "Немає незавершених ігор"
 
-#: backend.c:13300
+#: backend.c:13789
 #, c-format
 msgid ""
 "You have already mailed a move.\n"
@@ -614,211 +639,213 @@ msgstr ""
 "\"cmail -remail -game %s\"\n"
 "у командному рядку."
 
-#: backend.c:13315
+#: backend.c:13804
 msgid "Failed to invoke cmail"
 msgstr "Не вдалося викликати cmail"
 
-#: backend.c:13377
+#: backend.c:13866
 #, c-format
 msgid "Waiting for reply from opponent\n"
 msgstr "Очікування на відповідь від суперника\n"
 
-#: backend.c:13399
+#: backend.c:13888
 #, c-format
 msgid "Still need to make move for game\n"
 msgstr "Слід зробити хід у грі\n"
 
-#: backend.c:13403
+#: backend.c:13892
 #, c-format
 msgid "Still need to make moves for both games\n"
 msgstr "Слід зробити ходити у обох іграх\n"
 
-#: backend.c:13407
+#: backend.c:13896
 #, c-format
 msgid "Still need to make moves for all %d games\n"
 msgstr "Слід зробити ходити у всіх %d іграх\n"
 
-#: backend.c:13414
+#: backend.c:13903
 #, c-format
 msgid "Still need to make a move for game %s\n"
 msgstr "Слід зробити хід у грі %s\n"
 
-#: backend.c:13420
+#: backend.c:13909
 #, c-format
 msgid "No unfinished games\n"
 msgstr "Немає незавершених ігор\n"
 
-#: backend.c:13422
+#: backend.c:13911
 #, c-format
 msgid "Ready to send mail\n"
 msgstr "Програма готова до надсилання пошти\n"
 
-#: backend.c:13427
+#: backend.c:13916
 #, c-format
 msgid "Still need to make moves for games %s\n"
 msgstr "Слід зробити ходи у іграх %s\n"
 
-#: backend.c:13631
+#: backend.c:14118
 msgid "Edit comment"
 msgstr "Редагувати коментар"
 
-#: backend.c:13633
+#: backend.c:14120
 #, c-format
 msgid "Edit comment on %d.%s%s"
 msgstr "Змінити коментар щодо %d.%s%s"
 
-#: backend.c:13688
+#: backend.c:14175
 #, c-format
 msgid "You are not observing a game"
 msgstr "Ви не спостерігаєте за грою"
 
-#: backend.c:13796
+#: backend.c:14286
 msgid "It is not White's turn"
 msgstr "Зараз хід чорних"
 
-#: backend.c:13877
+#: backend.c:14367
 msgid "It is not Black's turn"
 msgstr "Зараз хід білих"
 
-#: backend.c:13985
+#: backend.c:14475
 #, c-format
 msgid "Starting %s chess program"
 msgstr "Запуск шахової програми %s"
 
-#: backend.c:14013 backend.c:15127
+#: backend.c:14503 backend.c:15648
+#, fuzzy
 msgid ""
 "Wait until your turn,\n"
-"or select Move Now"
+"or select 'Move Now'."
 msgstr ""
 "Зачекайте на ваш хід або\n"
 "виберіть пункт «Ходити»"
 
-#: backend.c:14147
+#: backend.c:14638
 msgid "Training mode off"
 msgstr "Режим тренування вимкнено"
 
-#: backend.c:14155
+#: backend.c:14646
 msgid "Training mode on"
 msgstr "Режим тренування увімкнено"
 
-#: backend.c:14158
+#: backend.c:14649
 msgid "Already at end of game"
 msgstr "Гру вже завершено"
 
-#: backend.c:14238
+#: backend.c:14729
 msgid "Warning: You are still playing a game"
 msgstr "Попередження: гра ще триває"
 
-#: backend.c:14241
+#: backend.c:14732
 msgid "Warning: You are still observing a game"
 msgstr "Попередження: ви ще продовжуєте спостерігати за грою"
 
-#: backend.c:14244
+#: backend.c:14735
 msgid "Warning: You are still examining a game"
 msgstr "Попередження: ви ще вивчаєте гру"
 
-#: backend.c:14311
+#: backend.c:14802
 msgid "Click clock to clear board"
 msgstr "Клацніть на годиннику, щоб спорожнити дошку"
 
-#: backend.c:14321
+#: backend.c:14812
 msgid "Close ICS engine analyze..."
 msgstr "Завершити процес аналізу рушія ICS…"
 
-#: backend.c:14609
+#: backend.c:15130
 msgid "That square is occupied"
 msgstr "Цю клітинку зайнято"
 
-#: backend.c:14633 backend.c:14659
+#: backend.c:15154 backend.c:15180
 msgid "There is no pending offer on this move"
 msgstr "У черзі немає пропозицій щодо цього ходу"
 
-#: backend.c:14695 backend.c:14706
+#: backend.c:15216 backend.c:15227
 msgid "Your opponent is not out of time"
 msgstr "У вашого суперника ще залишився час"
 
-#: backend.c:14772
+#: backend.c:15293
 msgid "You must make your move before offering a draw"
 msgstr "Перш ніж запропонувати нічию, вам слід зробити хід"
 
-#: backend.c:15109
+#: backend.c:15630
 msgid "You are not examining a game"
 msgstr "Ви не вивчаєте гру"
 
-#: backend.c:15113
+#: backend.c:15634
 msgid "You can't revert while pausing"
 msgstr "Скасовувати ходи у призупиненій грі не можна"
 
-#: backend.c:15167 backend.c:15174
+#: backend.c:15688 backend.c:15695
 msgid "It is your turn"
 msgstr "Ваш хід"
 
-#: backend.c:15225 backend.c:15232 backend.c:15285 backend.c:15292
-msgid "Wait until your turn"
+#: backend.c:15746 backend.c:15753 backend.c:15806 backend.c:15813
+#, fuzzy
+msgid "Wait until your turn."
 msgstr "Очікувати на ваш хід"
 
-#: backend.c:15237
+#: backend.c:15758
 msgid "No hint available"
 msgstr "Немає підказки"
 
-#: backend.c:15253 ngamelist.c:355
+#: backend.c:15774 ngamelist.c:355
 msgid "Game list not loaded or empty"
 msgstr "Список гри не завантажено або цей список є порожнім"
 
-#: backend.c:15260
+#: backend.c:15781
 msgid "Book file exists! Try again for overwrite."
 msgstr "Файл книги вже існує! Повторіть спробу, щоб перезаписати його."
 
-#: backend.c:15738
+#: backend.c:16259
 #, c-format
 msgid "Error writing to %s chess program"
 msgstr "Помилка під час спроби запису даних до шахової програми %s"
 
-#: backend.c:15741 backend.c:15772
+#: backend.c:16262 backend.c:16293
 #, c-format
 msgid "%s program exits in draw position (%s)"
 msgstr "Програма %s завершила роботу у нічийній позиції (%s)"
 
-#: backend.c:15767
+#: backend.c:16288
 #, c-format
 msgid "Error: %s chess program (%s) exited unexpectedly"
 msgstr "Помилка: шахова програма %s (%s) несподівано завершила роботу"
 
-#: backend.c:15785
+#: backend.c:16306
 #, c-format
 msgid "Error reading from %s chess program (%s)"
 msgstr "Помилка під час спроби читання даних з шахової програми %s (%s)"
 
-#: backend.c:16187
+#: backend.c:16730
 #, c-format
 msgid "%s engine has too many options\n"
 msgstr "Для рушія %s передбачено занадто багато параметрів\n"
 
-#: backend.c:16343
+#: backend.c:16886
 msgid "Displayed move is not current"
 msgstr "Показаний хід не є поточним"
 
-#: backend.c:16352
+#: backend.c:16895
 msgid "Could not parse move"
 msgstr "Не вдалося обробити хід"
 
-#: backend.c:16477 backend.c:16499
+#: backend.c:17020 backend.c:17042
 msgid "Both flags fell"
 msgstr "Обидва прапорці впали"
 
-#: backend.c:16479
+#: backend.c:17022
 msgid "White's flag fell"
 msgstr "Прапорець білих впав"
 
-#: backend.c:16501
+#: backend.c:17044
 msgid "Black's flag fell"
 msgstr "Прапорець чорних впав"
 
-#: backend.c:16632
+#: backend.c:17175
 msgid "Clock adjustment not allowed in auto-flag mode"
 msgstr "Коригування годинника у режимі автоматичних прапорців заборонене"
 
-#: backend.c:17467
+#: backend.c:18025
 msgid "Bad FEN position in clipboard"
 msgstr "Помилкова позиція FEN у буфері обміну"
 
@@ -838,631 +865,691 @@ msgstr "Ключі хешів не збігаються"
 msgid "Could not create book"
 msgstr "Не вдалося створити книгу"
 
-#: dialogs.c:259
+#: dialogs.c:283
 msgid "Tournament file:          "
 msgstr "Файл турніру:             "
 
-#: dialogs.c:260
+#: dialogs.c:284
+#, fuzzy
+msgid "For concurrent playing of tourney with multiple XBoards:"
+msgstr "      турніру з декількома XBoard)"
+
+#: dialogs.c:285
 msgid "Sync after round"
 msgstr "Синхронізувати після рауду"
 
-#: dialogs.c:261
-msgid "    (for concurrent playing of a single"
-msgstr "    (для одночасної гри окремого"
-
-#: dialogs.c:262
+#: dialogs.c:286
 msgid "Sync after cycle"
 msgstr "Синхронізувати після кола"
 
-#: dialogs.c:263
-msgid "      tourney with multiple XBoards)"
-msgstr "      турніру з декількома XBoard)"
-
-#: dialogs.c:264
+#: dialogs.c:287
 msgid "Tourney participants:"
 msgstr "Учасники турніру:"
 
-#: dialogs.c:265
+#: dialogs.c:288
 msgid "Select Engine:"
 msgstr "Виберіть рушій:"
 
-#: dialogs.c:273
+#: dialogs.c:296
 msgid "Tourney type (0 = round-robin, 1 = gauntlet):"
 msgstr "Система турніру (0 = кругова, 1 = почергова):"
 
-#: dialogs.c:274
+#: dialogs.c:297
 msgid "Number of tourney cycles (or Swiss rounds):"
 msgstr "Кількість кіл турніру (швейцарських раундів):"
 
-#: dialogs.c:275
+#: dialogs.c:298
 msgid "Default Number of Games in Match (or Pairing):"
 msgstr "Типова кількість ігор у матчі:"
 
-#: dialogs.c:276
+#: dialogs.c:299
 msgid "Pause between Match Games (msec):"
 msgstr "Проміжок між іграми у матчі (у мілісекундах):"
 
-#: dialogs.c:277
+#: dialogs.c:300
 msgid "Save Tourney Games on:"
 msgstr "Зберігати ігри турніру до:"
 
-#: dialogs.c:278
+#: dialogs.c:301
 msgid "Game File with Opening Lines:"
 msgstr "Файл гри з початковими рядками:"
 
-#: dialogs.c:279
+#: dialogs.c:302
 msgid "Game Number (-1 or -2 = Auto-Increment):"
 msgstr "Номер гри (-1 або -2 = автоматичне збільшення):"
 
-#: dialogs.c:280
+#: dialogs.c:303
 msgid "File with Start Positions:"
 msgstr "Файл з початковими позиціями:"
 
-#: dialogs.c:281
+#: dialogs.c:304
 msgid "Position Number (-1 or -2 = Auto-Increment):"
 msgstr "Номер позиції (-1 або -2 = автоматичне збільшення):"
 
-#: dialogs.c:282
+#: dialogs.c:305
 msgid "Rewind Index after this many Games (0 = never):"
 msgstr ""
 "Відновлювати початковий номер після вказаної кількості ігор (0=ніколи):"
 
-#: dialogs.c:283
+#: dialogs.c:306
 msgid "Disable own engine books by default"
 msgstr "Типово вимкнути власні бібліотеки позицій рушія"
 
-#: dialogs.c:284
+#: dialogs.c:307 dialogs.c:1565
+msgid "Time Control"
+msgstr "Керування часом"
+
+#: dialogs.c:308
+#, fuzzy
+msgid "Common Engine"
+msgstr "Загальний рушій…"
+
+#: dialogs.c:309 dialogs.c:441
+msgid "General Options"
+msgstr "Загальні параметри"
+
+#: dialogs.c:310
+msgid "Continue Later"
+msgstr ""
+
+#: dialogs.c:311
 msgid "Replace Engine"
 msgstr "Замінити рушій"
 
-#: dialogs.c:285
+#: dialogs.c:312
 msgid "Upgrade Engine"
 msgstr "Оновити рушій"
 
-#: dialogs.c:286
+#: dialogs.c:313
 msgid "Clone Tourney"
 msgstr "Клонувати турнір"
 
-#: dialogs.c:316
+#: dialogs.c:351
 msgid "First you must specify an existing tourney file to clone"
 msgstr "Спочатку вам слід вказати вже створений файл турніру для клонування"
 
-#: dialogs.c:332 dialogs.c:1320
+#: dialogs.c:367 dialogs.c:1407
 msgid "# no engines are installed"
 msgstr "# не встановлено жодного рушія"
 
-#: dialogs.c:344
-msgid "Match Options"
-msgstr "Параметри партії"
+#: dialogs.c:375
+msgid "Internal error: PARTICIPANTS set wrong"
+msgstr ""
+
+#: dialogs.c:383
+#, fuzzy
+msgid "Tournament Options"
+msgstr "Параметри звуку"
 
-#: dialogs.c:363
+#: dialogs.c:402
 msgid "Absolute Analysis Scores"
 msgstr "Абсолютні оцінки аналізу"
 
-#: dialogs.c:364
+#: dialogs.c:403
 msgid "Almost Always Queen (Detour Under-Promote)"
 msgstr "Майже завжди королева (відхиляти неповні перетворення)"
 
-#: dialogs.c:365 menus.c:714
+#: dialogs.c:404 menus.c:714
 msgid "Animate Dragging"
 msgstr "Анімація перетягування"
 
-#: dialogs.c:366 menus.c:715
+#: dialogs.c:405 menus.c:715
 msgid "Animate Moving"
 msgstr "Анімація ходів"
 
-#: dialogs.c:367 menus.c:716
+#: dialogs.c:406 menus.c:716
 msgid "Auto Flag"
 msgstr "Автопрапорець"
 
-#: dialogs.c:368 menus.c:717
+#: dialogs.c:407 menus.c:717
 msgid "Auto Flip View"
 msgstr "Автоматичне обертання дошки"
 
-#: dialogs.c:369 menus.c:718
+#: dialogs.c:408 menus.c:718
 msgid "Blindfold"
 msgstr "Наосліп"
 
-#: dialogs.c:370
+#. 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 "Спадне меню"
 
-#: dialogs.c:371
+#: dialogs.c:411
 msgid "Enable Variation Trees"
 msgstr "Увімкнути дерево варіантів"
 
-#: dialogs.c:372
+#: dialogs.c:412
+msgid "Headers in Engine Output Window"
+msgstr ""
+
+#: dialogs.c:413
 msgid "Hide Thinking from Human"
 msgstr "Приховувати обмірковування від людини"
 
-#: dialogs.c:373 menus.c:723
+#: dialogs.c:414 menus.c:723
 msgid "Highlight Last Move"
 msgstr "Позначати останній хід"
 
-#: dialogs.c:374
+#: dialogs.c:415
 msgid "Highlight with Arrow"
 msgstr "Позначити за допомогою стрілки"
 
-#: dialogs.c:375 menus.c:726
+#: dialogs.c:416 menus.c:726
 msgid "One-Click Moving"
 msgstr "Хід у одне клацання"
 
-#: dialogs.c:376
+#: dialogs.c:417
 msgid "Periodic Updates (in Analysis Mode)"
 msgstr "Періодичні оновлення (у режимі аналізу)"
 
-#: dialogs.c:378
+#: dialogs.c:419
 msgid "Play Move(s) of Clicked PV (Analysis)"
 msgstr "Грати ходи натиснутих PV (аналіз)"
 
-#: dialogs.c:379 dialogs.c:514 menus.c:728
+#: dialogs.c:420 dialogs.c:597 menus.c:728
 msgid "Ponder Next Move"
 msgstr "Обдумати наступний хід"
 
-#: dialogs.c:380
+#: dialogs.c:421
 msgid "Popup Exit Messages"
 msgstr "Контекстні підказки щодо виходу"
 
-#: dialogs.c:381 menus.c:730
+#: dialogs.c:422 menus.c:730
 msgid "Popup Move Errors"
 msgstr "Контекстні підказки з помилками щодо ходів"
 
-#: dialogs.c:382
+#: dialogs.c:423
 msgid "Scores in Move List"
 msgstr "Оцінки у списку ходів"
 
-#: dialogs.c:383
+#: dialogs.c:424
 msgid "Show Coordinates"
 msgstr "Показувати координати"
 
-#: dialogs.c:384
+#: dialogs.c:425
 msgid "Show Target Squares"
 msgstr "Показувати клітинки призначення"
 
-#: dialogs.c:385
+#: dialogs.c:426
 msgid "Sticky Windows"
 msgstr "Липкі вікна"
 
-#: dialogs.c:386 menus.c:733
+#: dialogs.c:427 menus.c:733
 msgid "Test Legality"
 msgstr "Перевіряти коректність"
 
-#: dialogs.c:387
+#: dialogs.c:428
 msgid "Top-Level Dialogs"
 msgstr "Вікна верхнього рівня"
 
-#: dialogs.c:388
+#: dialogs.c:429
 msgid "Flash Moves (0 = no flashing):"
 msgstr "Блимання під час ходів (0 = без блимання):"
 
-#: dialogs.c:389
+#: dialogs.c:430
 msgid "Flash Rate (high = fast):"
 msgstr "Частота блимання (висока = швидко):"
 
-#: dialogs.c:390
+#: dialogs.c:431
 msgid "Animation Speed (high = slow):"
 msgstr "Швидкість анімації (висока = повільно):"
 
-#: dialogs.c:391
+#: dialogs.c:432
 msgid "Zoom factor in Evaluation Graph:"
 msgstr "Масштаб графу оцінки позиції:"
 
-#: dialogs.c:400
-msgid "General Options"
-msgstr "Загальні параметри"
-
-#: dialogs.c:410
-msgid "normal"
+#: dialogs.c:452
+#, fuzzy
+msgid "Normal"
 msgstr "звичайні"
 
-#: dialogs.c:411
-msgid "makruk"
+#: dialogs.c:453
+#, fuzzy
+msgid "Makruk"
 msgstr "макрук"
 
-#: dialogs.c:412
+#: dialogs.c:454
 msgid "FRC"
 msgstr "Фішера"
 
-#: dialogs.c:413
-msgid "shatranj"
+#: dialogs.c:455
+#, fuzzy
+msgid "Shatranj"
 msgstr "шатрандж"
 
-#: dialogs.c:414
-msgid "wild castle"
+#: dialogs.c:456
+#, fuzzy
+msgid "Wild castle"
 msgstr "дика тура"
 
-#: dialogs.c:415
-msgid "knightmate"
+#: dialogs.c:457
+#, fuzzy
+msgid "Knightmate"
 msgstr "мат коню"
 
-#: dialogs.c:416
-msgid "no castle"
+#: dialogs.c:458
+#, fuzzy
+msgid "No castle"
 msgstr "без тури"
 
-#: dialogs.c:417
-msgid "cylinder *"
+#: dialogs.c:459
+#, fuzzy
+msgid "Cylinder *"
 msgstr "циліндричні *"
 
-#: dialogs.c:418
+#: dialogs.c:460
 msgid "3-checks"
 msgstr "Три шахи"
 
-#: dialogs.c:419
+#: dialogs.c:461
 msgid "berolina *"
 msgstr "бероліна *"
 
-#: dialogs.c:420
+#: dialogs.c:462
 msgid "atomic"
 msgstr "атомні"
 
-#: dialogs.c:421
+#: dialogs.c:463
 msgid "two kings"
 msgstr "два королі"
 
-#: dialogs.c:422
+#: dialogs.c:464
+msgid " "
+msgstr " "
+
+#: dialogs.c:465
+msgid "Spartan"
+msgstr "спартанські"
+
+#: dialogs.c:466
 msgid "Board size ( -1 = default for selected variant):"
 msgstr "Розмір дошки ( -1 = типовий для вибраного варіанта):"
 
-#: dialogs.c:423
+#: dialogs.c:467
 msgid "Number of Board Ranks:"
 msgstr "Кількість рангів дошки:"
 
-#: dialogs.c:424
+#: dialogs.c:468
 msgid "Number of Board Files:"
 msgstr "Кількість файлів дошки:"
 
-#: dialogs.c:425
+#: dialogs.c:469
 msgid "Holdings Size:"
 msgstr "Розмір резерву:"
 
-#: dialogs.c:429
-msgid "fairy"
-msgstr "казкові"
+#: dialogs.c:471
+msgid ""
+"Variants marked with * can only be played\n"
+"with legality testing off."
+msgstr ""
 
-#: dialogs.c:430
+#: dialogs.c:473
+msgid "ASEAN"
+msgstr ""
+
+#: dialogs.c:474
 msgid "Great Shatranj (10x8)"
 msgstr "Великий шатрандж (10x8)"
 
-#: dialogs.c:431
+#: dialogs.c:475
 msgid "Seirawan"
 msgstr "Сейравана"
 
-#: dialogs.c:432
-msgid "falcon (10x8)"
+#: dialogs.c:476
+#, fuzzy
+msgid "Falcon (10x8)"
 msgstr "сокіл (10x8)"
 
-#: dialogs.c:433
+#: dialogs.c:477
 msgid "Superchess"
 msgstr "Супершахи"
 
-#: dialogs.c:434
+#: dialogs.c:478
 msgid "Capablanca (10x8)"
 msgstr "Капабланка (10x8)"
 
-#: dialogs.c:435
-msgid "crazyhouse"
+#: dialogs.c:479
+#, fuzzy
+msgid "Crazyhouse"
 msgstr "крейзіхаус"
 
-#: dialogs.c:436
+#: dialogs.c:480
 msgid "Gothic (10x8)"
 msgstr "Готичні (10x8)"
 
-#: dialogs.c:437
-msgid "bughouse"
+#: dialogs.c:481
+#, fuzzy
+msgid "Bughouse"
 msgstr "шведські"
 
-#: dialogs.c:438
-msgid "janus (10x8)"
+#: dialogs.c:482
+#, fuzzy
+msgid "Janus (10x8)"
 msgstr "Янус (10x8)"
 
-#: dialogs.c:439
-msgid "suicide"
+#: dialogs.c:483
+#, fuzzy
+msgid "Suicide"
 msgstr "самовбивчі"
 
-#: dialogs.c:440
+#: dialogs.c:484
 msgid "CRC (10x8)"
 msgstr "Рівноправність (10x8)"
 
-#: dialogs.c:441
+#: dialogs.c:485
 msgid "give-away"
 msgstr "піддавки"
 
-#: dialogs.c:442
+#: dialogs.c:486
 msgid "grand (10x10)"
 msgstr "гранд-шахи (10x10)"
 
-#: dialogs.c:443
+#: dialogs.c:487
 msgid "losers"
 msgstr "Антишахи"
 
-#: dialogs.c:444
+#: dialogs.c:488
 msgid "shogi (9x9)"
 msgstr "сьогі (9x9)"
 
-#: dialogs.c:445
-msgid "Spartan"
-msgstr "спартанські"
+#: dialogs.c:489
+msgid "fairy"
+msgstr "казкові"
 
-#: dialogs.c:446
+#: dialogs.c:490
 msgid "xiangqi (9x10)"
 msgstr "сянці (9x10)"
 
-#: dialogs.c:447
-msgid " "
-msgstr " "
+#: dialogs.c:491
+msgid "mighty lion"
+msgstr ""
 
-#: dialogs.c:448
+#: dialogs.c:492
 msgid "courier (12x8)"
 msgstr "кур’єр (12x8)"
 
-#: dialogs.c:465
+#: dialogs.c:493
+msgid "chu chess (10x10)"
+msgstr ""
+
+#: dialogs.c:494
+#, fuzzy
+msgid "chu shogi (12x12)"
+msgstr "сьогі (9x9)"
+
+#: dialogs.c:526
 #, c-format
 msgid "Warning: second engine (%s) does not support this!"
 msgstr "Попередження: ця можливість не підтримується другим рушієм (%s)!"
 
-#: dialogs.c:488
-#, c-format
-msgid "Only bughouse is not available in viewer mode"
+#: dialogs.c:554
+#, fuzzy, c-format
+msgid "Only bughouse is not available in viewer mode."
 msgstr "У режимі перегляду недоступні лише шведські шахи"
 
-#: dialogs.c:489
-#, c-format
+#: dialogs.c:555
+#, fuzzy, c-format
 msgid ""
-"All variants not supported by first engine\n"
-"(currently %s) are disabled"
+"All variants not supported by the first engine\n"
+"(currently %s) are disabled."
 msgstr ""
 "Всі варіанти, які не підтримуються першим рушієм\n"
 "(зараз це %s), вимкнено"
 
-#: dialogs.c:490
+#: dialogs.c:572
 msgid "New Variant"
 msgstr "Новий варіант"
 
-#: dialogs.c:515
+#: dialogs.c:598
 msgid "Maximum Number of CPUs per Engine:"
 msgstr "Максимальна кількість процесорів на рушій:"
 
-#: dialogs.c:516
+#: dialogs.c:599
 msgid "Polygot Directory:"
 msgstr "Каталог бібліотек Polygot:"
 
-#: dialogs.c:517
+#: dialogs.c:600
 msgid "Hash-Table Size (MB):"
 msgstr "Розмір таблиці хешів (у МБ):"
 
-#: dialogs.c:518
+#: dialogs.c:601
 msgid "Nalimov EGTB Path:"
 msgstr "Шлях до бази даних EGTB Налімова:"
 
-#: dialogs.c:519
+#: dialogs.c:602
 msgid "EGTB Cache Size (MB):"
 msgstr "Розмір кешу EGTB (у МБ):"
 
-#: dialogs.c:520
+#: dialogs.c:603
 msgid "Use GUI Book"
 msgstr "Використовувати книгу з графічним інтерфейсом"
 
-#: dialogs.c:521
+#: dialogs.c:604
 msgid "Opening-Book Filename:"
 msgstr "Назва файла даних дебютів:"
 
-#: dialogs.c:522
+#: dialogs.c:605
 msgid "Book Depth (moves):"
 msgstr "Глибина книги (у ходах):"
 
-#: dialogs.c:523
+#: dialogs.c:606
 msgid "Book Variety (0) vs. Strength (100):"
 msgstr "Компроміс між різноманітністю (0) і силою (100) книги:"
 
-#: dialogs.c:524
+#: dialogs.c:607
 msgid "Engine #1 Has Own Book"
 msgstr "Рушій 1 має власну книгу"
 
-#: dialogs.c:525
+#: dialogs.c:608
 msgid "Engine #2 Has Own Book          "
 msgstr "Рушій 2 має власну книгу          "
 
-#: dialogs.c:534
+#: dialogs.c:617
 msgid "Common Engine Settings"
 msgstr "Загальні параметри рушіїв"
 
-#: dialogs.c:540
+#: dialogs.c:623
 msgid "Detect all Mates"
 msgstr "Виявляти всі мати"
 
-#: dialogs.c:541
+#: dialogs.c:624
 msgid "Verify Engine Result Claims"
 msgstr "Перевіряти вимоги до результатів рушія"
 
-#: dialogs.c:542
+#: dialogs.c:625
 msgid "Draw if Insufficient Mating Material"
 msgstr "Нічия, якщо недостатньо фігур для мату"
 
-#: dialogs.c:543
+#: dialogs.c:626
 msgid "Adjudicate Trivial Draws (3-Move Delay)"
 msgstr "Визначати тривіальні нічиї (трикратне повторення)"
 
-#: dialogs.c:544
+#: dialogs.c:627
 msgid "N-Move Rule:"
 msgstr "Правило N-го ходу:"
 
-#: dialogs.c:545
+#: dialogs.c:628
 msgid "N-fold Repeats:"
 msgstr "N-кратне повторення:"
 
-#: dialogs.c:546
+#: dialogs.c:629
 msgid "Draw after N Moves Total:"
 msgstr "Нічия після N ходів загалом:"
 
-#: dialogs.c:547
+#: dialogs.c:630
 msgid "Win / Loss Threshold:"
 msgstr "Поріг виграшу/програшу:"
 
-#: dialogs.c:548
+#: dialogs.c:631
 msgid "Negate Score of Engine #1"
 msgstr "Негативна оцінка рушія 1"
 
-#: dialogs.c:549
+#: dialogs.c:632
 msgid "Negate Score of Engine #2"
 msgstr "Негативна оцінка рушія 2"
 
-#: dialogs.c:556
+#: dialogs.c:639
 msgid "Adjudicate non-ICS Games"
 msgstr "Судити ігри, що не належать до класу ICS"
 
-#: dialogs.c:569
+#: dialogs.c:652
 msgid "Auto-Kibitz"
 msgstr "Автопоради"
 
-#: dialogs.c:570
+#: dialogs.c:653
 msgid "Auto-Comment"
 msgstr "Автокоментарі"
 
-#: dialogs.c:571
+#: dialogs.c:654
 msgid "Auto-Observe"
 msgstr "Автоспостереження"
 
-#: dialogs.c:572
+#: dialogs.c:655
 msgid "Auto-Raise Board"
 msgstr "Автопідняття дошки"
 
-#: dialogs.c:573
+#: dialogs.c:656
 msgid "Auto-Create Logon Script"
 msgstr "Автостворення скрипту входу"
 
-#: dialogs.c:574
+#: dialogs.c:657
 msgid "Background Observe while Playing"
 msgstr "Спостереження у тлі під час гри"
 
-#: dialogs.c:575
+#: dialogs.c:658
 msgid "Dual Board for Background-Observed Game"
 msgstr "Подвійна дошка для ігор з фоновим спостереженням"
 
-#: dialogs.c:576
+#: dialogs.c:659
 msgid "Get Move List"
 msgstr "Отримати список ходів"
 
-#: dialogs.c:577
+#: dialogs.c:660
 msgid "Quiet Play"
 msgstr "Мовчазна гра"
 
-#: dialogs.c:578
+#: dialogs.c:661
 msgid "Seek Graph"
 msgstr "Граф викликів"
 
-#: dialogs.c:579
+#: dialogs.c:662
 msgid "Auto-Refresh Seek Graph"
 msgstr "Автоматичне оновлення графу пошуків"
 
-#: dialogs.c:580
+#: dialogs.c:663
 msgid "Auto-InputBox PopUp"
 msgstr "Автоматичне вікно введення"
 
-#: dialogs.c:581
+#: dialogs.c:664
+#, fuzzy
+msgid "Quit after game"
+msgstr "Очікування на результати інших ігор"
+
+#: dialogs.c:665
 msgid "Premove"
 msgstr "Попередній хід"
 
-#: dialogs.c:582
+#: dialogs.c:666
 msgid "Premove for White"
 msgstr "Попередній хід для білих"
 
-#: dialogs.c:583
+#: dialogs.c:667
 msgid "First White Move:"
 msgstr "Перший хід білих:"
 
-#: dialogs.c:584
+#: dialogs.c:668
 msgid "Premove for Black"
 msgstr "Попередній хід для чорних"
 
-#: dialogs.c:585
+#: dialogs.c:669
 msgid "First Black Move:"
 msgstr "Перший хід чорних:"
 
-#: dialogs.c:587
+#: dialogs.c:671
 msgid "Alarm"
 msgstr "Нагадування"
 
-#: dialogs.c:588
+#: dialogs.c:672
 msgid "Alarm Time (msec):"
 msgstr "Час нагадування (у мс):"
 
-#: dialogs.c:590
+#: dialogs.c:674
 msgid "Colorize Messages"
 msgstr "Розфарбовувати повідомлення"
 
-#: dialogs.c:591
+#: dialogs.c:675
 msgid "Shout Text Colors:"
 msgstr "Кольори тексту вигуків:"
 
-#: dialogs.c:592
+#: dialogs.c:676
 msgid "S-Shout Text Colors:"
 msgstr "Колір тексту S-вигуків:"
 
-#: dialogs.c:593
+#: dialogs.c:677
 msgid "Channel #1 Text Colors:"
 msgstr "Кольори тексту каналу 1:"
 
-#: dialogs.c:594
+#: dialogs.c:678
 msgid "Other Channel Text Colors:"
 msgstr "Кольори тексту інших каналів:"
 
-#: dialogs.c:595
+#: dialogs.c:679
 msgid "Kibitz Text Colors:"
 msgstr "Кольори тексту порад:"
 
-#: dialogs.c:596
+#: dialogs.c:680
 msgid "Tell Text Colors:"
 msgstr "Кольори тексту висловлювань:"
 
-#: dialogs.c:597
+#: dialogs.c:681
 msgid "Challenge Text Colors:"
 msgstr "Кольори тексту викликів:"
 
-#: dialogs.c:598
+#: dialogs.c:682
 msgid "Request Text Colors:"
 msgstr "Кольори тексту запитів:"
 
-#: dialogs.c:599
+#: dialogs.c:683
 msgid "Seek Text Colors:"
 msgstr "Кольори тексту під час пошуку:"
 
-#: dialogs.c:606
+#: dialogs.c:690
 msgid "ICS Options"
 msgstr "Параметри ICS"
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Exact position match"
 msgstr "Точний збіг позицій"
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Shown position is subset"
 msgstr "Показана позиція є підмножиною"
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Same material with exactly same Pawn chain"
 msgstr "Однаковий матеріал з однаковим ланцюжком пішаків"
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Same material"
 msgstr "Однаковий матеріал"
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Material range (top board half optional)"
 msgstr "Діапазон матеріалу (верхня половина дошки, необов’язковий)"
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Material difference (optional stuff balanced)"
 msgstr "Відмінність матеріалів (з додатковим врівноваженням можливостей)"
 
-#: dialogs.c:624
+#: dialogs.c:708
 msgid "Auto-Display Tags"
 msgstr "Автопоказ міток"
 
-#: dialogs.c:625
+#: dialogs.c:709
 msgid "Auto-Display Comment"
 msgstr "Автопоказ коментарів"
 
-#: dialogs.c:626
+#: dialogs.c:710
 msgid ""
 "Auto-Play speed of loaded games\n"
 "(0 = instant, -1 = off):"
@@ -1470,11 +1557,11 @@ msgstr ""
 "Швидкість автогри у завантажених іграх\n"
 "(0 = негайний показ, -1 = вимкнути автогру):"
 
-#: dialogs.c:627
+#: dialogs.c:711
 msgid "Seconds per Move:"
 msgstr "Секунд на хід:"
 
-#: dialogs.c:628
+#: dialogs.c:712
 msgid ""
 "\n"
 "options to use in game-viewer mode:"
@@ -1482,7 +1569,7 @@ msgstr ""
 "\n"
 "Параметри режиму перегляду ігор:"
 
-#: dialogs.c:630
+#: dialogs.c:714
 msgid ""
 "\n"
 "Thresholds for position filtering in game list:"
@@ -1490,707 +1577,716 @@ msgstr ""
 "\n"
 "Порогові значення фільтрування позицій у списку ігор:"
 
-#: dialogs.c:631
+#: dialogs.c:715
 msgid "Elo of strongest player at least:"
 msgstr "Рейтинг Ело для сильнішого гравця не нижче за:"
 
-#: dialogs.c:632
+#: dialogs.c:716
 msgid "Elo of weakest player at least:"
 msgstr "Рейтинг Ело для слабшого гравця не нижче за:"
 
-#: dialogs.c:633
+#: dialogs.c:717
 msgid "No games before year:"
 msgstr "Не показувати ігри до року:"
 
-#: dialogs.c:634
+#: dialogs.c:718
 msgid "Minimum nr consecutive positions:"
 msgstr "Мінімальна к-ть послідовних позицій:"
 
-#: dialogs.c:635
+#: dialogs.c:719
 msgid "Search mode:"
 msgstr "Режим пошуку:"
 
-#: dialogs.c:636
+#: dialogs.c:720
 msgid "Also match reversed colors"
 msgstr "Шукати у позиціях зворотних кольорів"
 
-#: dialogs.c:637
+#: dialogs.c:721
 msgid "Also match left-right flipped position"
 msgstr "Шукати у симетричних позиціях"
 
-#: dialogs.c:645
+#: dialogs.c:729
 msgid "Load Game Options"
 msgstr "Параметри завантаження ігор"
 
-#: dialogs.c:657
+#: dialogs.c:741
 msgid "Auto-Save Games"
 msgstr "Автозбереження ігор"
 
-#: dialogs.c:658
+#: dialogs.c:742
 msgid "Own Games Only"
 msgstr "Лише власні ігри"
 
-#: dialogs.c:659
+#: dialogs.c:743
 msgid "Save Games on File:"
 msgstr "Зберігати ігри до файла:"
 
-#: dialogs.c:660
+#: dialogs.c:744
 msgid "Save Final Positions on File:"
 msgstr "Зберігати остаточні позиції до файла:"
 
-#: dialogs.c:661
+#: dialogs.c:745
 msgid "PGN Event Header:"
 msgstr "Обробник подій PGN:"
 
-#: dialogs.c:662
+#: dialogs.c:746
 msgid "Old Save Style (as opposed to PGN)"
 msgstr "Застарілий стиль збереження (на відміну від PGN)"
 
-#: dialogs.c:663
+#: dialogs.c:747
 msgid "Include Number Tag in tourney PGN"
 msgstr "Включити мітку номера до PGN турніру"
 
-#: dialogs.c:664
+#: dialogs.c:748
 msgid "Save Score/Depth Info in PGN"
 msgstr "Зберігати дані щодо рейтингу/глибини у PGN"
 
-#: dialogs.c:665
+#: dialogs.c:749
 msgid "Save Out-of-Book Info in PGN           "
 msgstr "Зберігати сторонні дані до PGN           "
 
-#: dialogs.c:672
+#: dialogs.c:756
 msgid "Save Game Options"
 msgstr "Параметри збереження ігор"
 
-#: dialogs.c:681
+#: dialogs.c:765
 msgid "No Sound"
 msgstr "Без звуку"
 
-#: dialogs.c:682
+#: dialogs.c:766
 msgid "Default Beep"
 msgstr "Типовий гудок"
 
-#: dialogs.c:683
+#: dialogs.c:767
 msgid "Above WAV File"
 msgstr "Файл WAV вище"
 
-#: dialogs.c:684
+#: dialogs.c:768
 msgid "Car Horn"
 msgstr "Автомобільний гудок"
 
-#: dialogs.c:685
+#: dialogs.c:769
 msgid "Cymbal"
 msgstr "Цимбали"
 
-#: dialogs.c:686
+#: dialogs.c:770
 msgid "Ding"
 msgstr "Дзвінок"
 
-#: dialogs.c:687
+#: dialogs.c:771
 msgid "Gong"
 msgstr "Гонг"
 
-#: dialogs.c:688
+#: dialogs.c:772
 msgid "Laser"
 msgstr "Лазер"
 
-#: dialogs.c:689
+#: dialogs.c:773
 msgid "Penalty"
 msgstr "Штраф"
 
-#: dialogs.c:690
+#: dialogs.c:774
 msgid "Phone"
 msgstr "Телефон"
 
-#: dialogs.c:691
+#: dialogs.c:775
 msgid "Pop"
 msgstr "Плескання"
 
-#: dialogs.c:692
+#: dialogs.c:776
+msgid "Roar"
+msgstr ""
+
+#: dialogs.c:777
 msgid "Slap"
 msgstr "Клацання"
 
-#: dialogs.c:693
+#: dialogs.c:778
 msgid "Wood Thunk"
 msgstr "Удар об дерево"
 
-#: dialogs.c:695
+#: dialogs.c:780
 msgid "User File"
 msgstr "Файл користувача"
 
-#: dialogs.c:717
+#: dialogs.c:803
 msgid "User WAV File:"
 msgstr "Файл WAV користувача:"
 
-#: dialogs.c:718
+#: dialogs.c:804
 msgid "Sound Program:"
 msgstr "Програма відтворення:"
 
-#: dialogs.c:719
+#: dialogs.c:805
 msgid "Try-Out Sound:"
 msgstr "Тестовий звук:"
 
-#: dialogs.c:720
+#: dialogs.c:806
 msgid "Play"
 msgstr "Пуск"
 
-#: dialogs.c:721
+#: dialogs.c:807
 msgid "Move:"
 msgstr "Хід:"
 
-#: dialogs.c:722
+#: dialogs.c:808
 msgid "Win:"
 msgstr "Виграшів:"
 
-#: dialogs.c:723
+#: dialogs.c:809
 msgid "Lose:"
 msgstr "Програшів:"
 
-#: dialogs.c:724
+#: dialogs.c:810
 msgid "Draw:"
 msgstr "Нічиїх:"
 
-#: dialogs.c:725
+#: dialogs.c:811
 msgid "Unfinished:"
 msgstr "Незавершених:"
 
-#: dialogs.c:726
+#: dialogs.c:812
 msgid "Alarm:"
 msgstr "Нагадування:"
 
-#: dialogs.c:727
+#: dialogs.c:813
 msgid "Challenge:"
 msgstr "Виклик:"
 
-#: dialogs.c:729
+#: dialogs.c:815
 msgid "Sounds Directory:"
 msgstr "Каталог звуків:"
 
-#: dialogs.c:730
+#: dialogs.c:816
 msgid "Shout:"
 msgstr "Вигук:"
 
-#: dialogs.c:731
+#: dialogs.c:817
 msgid "S-Shout:"
 msgstr "S-вигук:"
 
-#: dialogs.c:732
+#: dialogs.c:818
 msgid "Channel:"
 msgstr "Канал:"
 
-#: dialogs.c:733
+#: dialogs.c:819
 msgid "Channel 1:"
 msgstr "Канал 1:"
 
-#: dialogs.c:734
+#: dialogs.c:820
 msgid "Tell:"
 msgstr "Висловлення:"
 
-#: dialogs.c:735
+#: dialogs.c:821
 msgid "Kibitz:"
 msgstr "Порада:"
 
-#: dialogs.c:736
+#: dialogs.c:822
 msgid "Request:"
 msgstr "Запит:"
 
-#: dialogs.c:737
+#: dialogs.c:823
+msgid "Lion roar:"
+msgstr ""
+
+#: dialogs.c:824
 msgid "Seek:"
 msgstr "Пошук:"
 
-#: dialogs.c:753
+#: dialogs.c:840
 msgid "Sound Options"
 msgstr "Параметри звуку"
 
-#: dialogs.c:774
+#: dialogs.c:861
 msgid "White Piece Color:"
 msgstr "Колір фігур білих:"
 
 #. TRANSLATORS: R = single letter for the color red
-#: dialogs.c:777 dialogs.c:786 dialogs.c:792 dialogs.c:798 dialogs.c:804
-#: dialogs.c:810
+#: dialogs.c:864 dialogs.c:873 dialogs.c:879 dialogs.c:885 dialogs.c:891
+#: dialogs.c:897
 msgid "R"
 msgstr "Ч"
 
 #. TRANSLATORS: G = single letter for the color green
-#: dialogs.c:779 dialogs.c:787 dialogs.c:793 dialogs.c:799 dialogs.c:805
-#: dialogs.c:811
+#: dialogs.c:866 dialogs.c:874 dialogs.c:880 dialogs.c:886 dialogs.c:892
+#: dialogs.c:898
 msgid "G"
 msgstr "З"
 
 #. TRANSLATORS: B = single letter for the color blue
-#: dialogs.c:781 dialogs.c:788 dialogs.c:794 dialogs.c:800 dialogs.c:806
-#: dialogs.c:812
+#: dialogs.c:868 dialogs.c:875 dialogs.c:881 dialogs.c:887 dialogs.c:893
+#: dialogs.c:899
 msgid "B"
 msgstr "С"
 
 #. TRANSLATORS: D = single letter to make a color darker
-#: dialogs.c:783 dialogs.c:789 dialogs.c:795 dialogs.c:801 dialogs.c:807
-#: dialogs.c:813
+#: dialogs.c:870 dialogs.c:876 dialogs.c:882 dialogs.c:888 dialogs.c:894
+#: dialogs.c:900
 msgid "D"
 msgstr "Т"
 
-#: dialogs.c:784
+#: dialogs.c:871
 msgid "Black Piece Color:"
 msgstr "Колір фігур чорних:"
 
-#: dialogs.c:790
+#: dialogs.c:877
 msgid "Light Square Color:"
 msgstr "Колір світлих клітинок:"
 
-#: dialogs.c:796
+#: dialogs.c:883
 msgid "Dark Square Color:"
 msgstr "Колір темних клітинок:"
 
-#: dialogs.c:802
+#: dialogs.c:889
 msgid "Highlight Color:"
 msgstr "Колір позначення:"
 
-#: dialogs.c:808
+#: dialogs.c:895
 msgid "Premove Highlight Color:"
 msgstr "Колір підсвічування плану ходу:"
 
-#: dialogs.c:814
+#: dialogs.c:901
 msgid "Flip Pieces Shogi Style        (Colored buttons restore default)"
 msgstr "Стиль обміну фігурами сьогі     (Кольорові кнопки відновлюють типовий)"
 
-#: dialogs.c:816
+#: dialogs.c:903
 msgid "Mono Mode"
 msgstr "Монорежим"
 
-#: dialogs.c:817
-msgid "Line Gap ( -1 = default for board size):"
+#: dialogs.c:904
+#, fuzzy
+msgid "Line Gap (-1 = default for board size):"
 msgstr "Проміжок між рядами ( -1 = типовий для розмірів дошки):"
 
-#: dialogs.c:818
+#: dialogs.c:905
 msgid "Use Board Textures"
 msgstr "Використовувати текстури дошки"
 
-#: dialogs.c:819
+#: dialogs.c:906
 msgid "Light-Squares Texture File:"
 msgstr "Файл текстур світлих клітинок:"
 
-#: dialogs.c:820
+#: dialogs.c:907
 msgid "Dark-Squares Texture File:"
 msgstr "Файл текстур темних клітинок:"
 
-#: dialogs.c:821
+#: dialogs.c:908
 msgid "Use external piece bitmaps with their own colors"
 msgstr "Зовнішні растрові зображення фігур з власними кольорами"
 
-#: dialogs.c:822
+#: dialogs.c:909
 msgid "Directory with Pieces Images:"
 msgstr "Каталог з зображеннями фігур:"
 
-#: dialogs.c:872
+#: dialogs.c:959
 msgid "Board Options"
 msgstr "Параметри дошки"
 
-#: dialogs.c:925 menus.c:634
+#: dialogs.c:1012 menus.c:634
 msgid "ICS text menu"
 msgstr "Текстове меню ICS"
 
-#: dialogs.c:947
+#: dialogs.c:1034
 msgid "clear"
 msgstr "спорожнити"
 
-#: dialogs.c:948 dialogs.c:1036
+#: dialogs.c:1035 dialogs.c:1123
 msgid "save changes"
 msgstr "зберегти зміни"
 
-#: dialogs.c:1051
+#: dialogs.c:1138
 msgid "Edit book"
 msgstr "Змінити книгу"
 
-#: dialogs.c:1051 menus.c:636
+#: dialogs.c:1138 menus.c:636
 msgid "Tags"
 msgstr "Мітки"
 
-#: dialogs.c:1193
+#: dialogs.c:1280
 msgid "ICS input box"
 msgstr "Поле введення ICS"
 
-#: dialogs.c:1225
+#: dialogs.c:1312
 msgid "Type a move"
 msgstr "Введіть хід"
 
-#: dialogs.c:1251
+#: dialogs.c:1338
 msgid "Engine has no options"
 msgstr "Рушієві не передаються жодні параметри"
 
-#: dialogs.c:1253
+#: dialogs.c:1340
 msgid "Engine Settings"
 msgstr "Параметри рушія"
 
-#: dialogs.c:1278
+#: dialogs.c:1365
 msgid "Select engine from list:"
 msgstr "Виберіть рушій зі списку:"
 
-#: dialogs.c:1281
+#: dialogs.c:1368
 msgid "or specify one below:"
 msgstr "або вкажіть його нижче:"
 
-#: dialogs.c:1282
+#: dialogs.c:1369
 msgid "Nickname (optional):"
 msgstr "Псевдонім (необов’язковий):"
 
-#: dialogs.c:1283
+#: dialogs.c:1370
 msgid "Use nickname in PGN player tags of engine-engine games"
 msgstr "Використовувати псевдонім у мітках гравця PGN під час ігор між рушіями"
 
-#: dialogs.c:1284
+#: dialogs.c:1371
 msgid "Engine Directory:"
 msgstr "Каталог рушія:"
 
-#: dialogs.c:1285
+#: dialogs.c:1372
 msgid "Engine Command:"
 msgstr "Команда рушія:"
 
-#: dialogs.c:1286
+#: dialogs.c:1373
 msgid "(Directory will be derived from engine path when empty)"
 msgstr ""
 "(Каталог буде визначено на основі шляху до рушія, якщо каталог не вказано)"
 
-#: dialogs.c:1287
+#: dialogs.c:1374
 msgid "UCI"
 msgstr "UCI"
 
-#: dialogs.c:1288
+#: dialogs.c:1375
 msgid "WB protocol v1 (do not wait for engine features)"
 msgstr "Протокол WB версії 1 (не чекати на дані щодо можливостей)"
 
-#: dialogs.c:1289
+#: dialogs.c:1376
 msgid "Must not use GUI book"
 msgstr "Не повинен використовувати книгу з графічним інтерфейсом"
 
-#: dialogs.c:1290
+#: dialogs.c:1377
 msgid "Add this engine to the list"
 msgstr "Додати цей рушій до списку"
 
-#: dialogs.c:1291
+#: dialogs.c:1378
 msgid "Force current variant with this engine"
 msgstr "Примусово визначити поточний варіант для рушія"
 
-#: dialogs.c:1341
+#: dialogs.c:1428
 msgid "Load first engine"
 msgstr "Завантажити перший рушій"
 
-#: dialogs.c:1347
+#: dialogs.c:1434
 msgid "Load second engine"
 msgstr "Завантажити другий рушій"
 
-#: dialogs.c:1370
+#: dialogs.c:1457
 msgid "shuffle"
 msgstr "перемішати"
 
-#: dialogs.c:1371
+#: dialogs.c:1458
 msgid "Start-position number:"
 msgstr "Номер початкової позиції:"
 
-#: dialogs.c:1372
+#: dialogs.c:1459
 msgid "randomize"
 msgstr "випадково"
 
-#: dialogs.c:1373
+#: dialogs.c:1460
 msgid "pick fixed"
 msgstr "вибрати фіксовану"
 
-#: dialogs.c:1390
+#: dialogs.c:1477
 msgid "New Shuffle Game"
 msgstr "Нова випадкова гра"
 
-#: dialogs.c:1409
+#: dialogs.c:1496
 msgid "classical"
 msgstr "класичні"
 
-#: dialogs.c:1410
+#: dialogs.c:1497
 msgid "incremental"
 msgstr "нарощувальний"
 
-#: dialogs.c:1411
+#: dialogs.c:1498
 msgid "fixed max"
 msgstr "фіксований максимум"
 
-#: dialogs.c:1412
+#: dialogs.c:1499
 msgid "Moves per session:"
 msgstr "Ходів за сеанс:"
 
-#: dialogs.c:1413
+#: dialogs.c:1500
 msgid "Initial time (min):"
 msgstr "Початковий час (у хвилинах):"
 
-#: dialogs.c:1414
+#: dialogs.c:1501
 msgid "Increment or max (sec/move):"
 msgstr "Збільшення або максимум (сек/хід):"
 
-#: dialogs.c:1415
+#: dialogs.c:1502
 msgid "Time-Odds factors:"
 msgstr "Коефіцієнти виправлення часу:"
 
-#: dialogs.c:1416
+#: dialogs.c:1503
 msgid "Engine #1"
 msgstr "Рушій 1"
 
-#: dialogs.c:1417
+#: dialogs.c:1504
 msgid "Engine #2 / Human"
 msgstr "Рушій 2 / Людина"
 
-#: dialogs.c:1457 dialogs.c:1460 dialogs.c:1465 dialogs.c:1466
+#: dialogs.c:1544 dialogs.c:1547 dialogs.c:1552 dialogs.c:1553
 #: gtk/xoptions.c:194
 msgid "Unused"
 msgstr "Не використовується"
 
-#: dialogs.c:1478
-msgid "Time Control"
-msgstr "Керування часом"
-
-#: dialogs.c:1507
+#: dialogs.c:1594
 msgid "Error writing to chess program"
 msgstr "Помилка під час спроби запису даних до шахової програми"
 
-#: dialogs.c:1574
+#: dialogs.c:1662 xaw/xoptions.c:1276
 msgid "Cancel"
 msgstr "Скасувати"
 
-#: dialogs.c:1579 dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:1667 dialogs.c:2061 dialogs.c:2065
 msgid "King"
 msgstr "Король"
 
-#: dialogs.c:1582
+#: dialogs.c:1670
 msgid "Captain"
 msgstr "Капітан"
 
-#: dialogs.c:1583
+#: dialogs.c:1671
 msgid "Lieutenant"
 msgstr "Лейтенант"
 
-#: dialogs.c:1584
+#: dialogs.c:1672
 msgid "General"
 msgstr "Загальне"
 
-#: dialogs.c:1585
+#: dialogs.c:1673
 msgid "Warlord"
 msgstr "Полководець"
 
-#: dialogs.c:1587 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1675 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Knight"
 msgstr "Кінь"
 
-#: dialogs.c:1588 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1676 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Bishop"
 msgstr "Слон"
 
-#: dialogs.c:1589 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1677 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Rook"
 msgstr "Тура"
 
-#: dialogs.c:1593 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1681 dialogs.c:2062 dialogs.c:2066
 msgid "Archbishop"
 msgstr "Архієпископ"
 
-#: dialogs.c:1594 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1682 dialogs.c:2062 dialogs.c:2066
 msgid "Chancellor"
 msgstr "Канцлер"
 
-#: dialogs.c:1596 dialogs.c:1971 dialogs.c:1975 dialogs.c:1993
+#: dialogs.c:1684 dialogs.c:2061 dialogs.c:2065 dialogs.c:2083
 msgid "Queen"
 msgstr "Королева"
 
-#: dialogs.c:1600
+#: dialogs.c:1686
+msgid "Lion"
+msgstr ""
+
+#: dialogs.c:1690
 msgid "Defer"
 msgstr "Зменшити пріоритет"
 
-#: dialogs.c:1601 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1691 dialogs.c:2062 dialogs.c:2066
 msgid "Promote"
 msgstr "Підвищити"
 
-#: dialogs.c:1616
+#: dialogs.c:1706
 msgid "Chat partner:"
 msgstr "Співрозмовник:"
 
-#: dialogs.c:1701
+#: dialogs.c:1791
 msgid "Chat box"
 msgstr "Панель спілкування"
 
-#: dialogs.c:1742
+#: dialogs.c:1832
 msgid "factory"
 msgstr "типові"
 
-#: dialogs.c:1743
+#: dialogs.c:1833
 msgid "up"
 msgstr "вгору"
 
-#: dialogs.c:1744
+#: dialogs.c:1834
 msgid "down"
 msgstr "вниз"
 
-#: dialogs.c:1762
+#: dialogs.c:1852
 msgid "No tag selected"
 msgstr "Не вибрано жодної мітки"
 
-#: dialogs.c:1793
+#: dialogs.c:1883
 msgid "Game-list options"
 msgstr "Параметри списку гри"
 
-#: dialogs.c:1869 dialogs.c:1883
+#: dialogs.c:1959 dialogs.c:1973
 msgid "Error"
 msgstr "Помилка"
 
-#: dialogs.c:1906
+#: dialogs.c:1996
 msgid "Fatal Error"
 msgstr "Критична помилка"
 
-#: dialogs.c:1906
+#: dialogs.c:1996
 msgid "Exiting"
 msgstr "Вихід"
 
-#: dialogs.c:1917
+#: dialogs.c:2007
 msgid "Information"
 msgstr "Інформація"
 
-#: dialogs.c:1924
+#: dialogs.c:2014
 msgid "Note"
 msgstr "Нотатка"
 
-#: dialogs.c:1970 dialogs.c:2245 dialogs.c:2248
+#: dialogs.c:2060 dialogs.c:2340 dialogs.c:2343
 msgid "White"
 msgstr "Білі"
 
-#: dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Pawn"
 msgstr "Пішак"
 
-#: dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:2061 dialogs.c:2065
 msgid "Elephant"
 msgstr "Слон"
 
-#: dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:2061 dialogs.c:2065
 msgid "Cannon"
 msgstr "Гармата"
 
-#: dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:2062 dialogs.c:2066
 msgid "Demote"
 msgstr "Розжалувати"
 
-#: dialogs.c:1973 dialogs.c:1977
+#: dialogs.c:2063 dialogs.c:2067
 msgid "Empty square"
 msgstr "Порожня клітинка"
 
-#: dialogs.c:1973 dialogs.c:1977
+#: dialogs.c:2063 dialogs.c:2067
 msgid "Clear board"
 msgstr "Спорожнити дошку"
 
-#: dialogs.c:1974 dialogs.c:2257 dialogs.c:2260
+#: dialogs.c:2064 dialogs.c:2352 dialogs.c:2355
 msgid "Black"
 msgstr "Чорні"
 
-#: dialogs.c:2073 menus.c:787
+#: dialogs.c:2163 menus.c:787
 msgid "File"
 msgstr "Файл"
 
-#: dialogs.c:2074 menus.c:788
+#: dialogs.c:2164 menus.c:788
 msgid "Edit"
 msgstr "Зміни"
 
-#: dialogs.c:2075 menus.c:789
+#: dialogs.c:2165 menus.c:789
 msgid "View"
 msgstr "Перегляд"
 
-#: dialogs.c:2076 menus.c:790
+#: dialogs.c:2166 menus.c:790
 msgid "Mode"
 msgstr "Режим"
 
-#: dialogs.c:2077 menus.c:791
+#: dialogs.c:2167 menus.c:791
 msgid "Action"
 msgstr "Дія"
 
-#: dialogs.c:2078 menus.c:792
+#: dialogs.c:2168 menus.c:792
 msgid "Engine"
 msgstr "Рушій"
 
-#: dialogs.c:2079 menus.c:793
+#: dialogs.c:2169 menus.c:793
 msgid "Options"
 msgstr "Параметри"
 
-#: dialogs.c:2080 menus.c:794
+#: dialogs.c:2170 menus.c:794
 msgid "Help"
 msgstr "Довідка"
 
-#: dialogs.c:2090
+#: dialogs.c:2180
 msgid "<<"
 msgstr "<<"
 
-#: dialogs.c:2091
+#: dialogs.c:2181
 msgid "<"
 msgstr "<"
 
-#: dialogs.c:2093
+#: dialogs.c:2183
 msgid ">"
 msgstr ">"
 
-#: dialogs.c:2094
+#: dialogs.c:2184
 msgid ">>"
 msgstr ">>"
 
-#: dialogs.c:2364
+#: dialogs.c:2458
 msgid "Directories:"
 msgstr "Каталоги:"
 
-#: dialogs.c:2365
+#: dialogs.c:2459
 msgid "Files:"
 msgstr "Файли:"
 
-#: dialogs.c:2366
+#: dialogs.c:2460
 msgid "by name"
 msgstr "за назвою"
 
-#: dialogs.c:2367
+#: dialogs.c:2461
 msgid "by type"
 msgstr "за типом"
 
-#: dialogs.c:2370
+#: dialogs.c:2464
 msgid "Filename:"
 msgstr "Назва файла:"
 
-#: dialogs.c:2371
+#: dialogs.c:2465
 msgid "New directory"
 msgstr "Новий каталог"
 
-#: dialogs.c:2372
+#: dialogs.c:2466
 msgid "File type:"
 msgstr "Тип файлів:"
 
-#: dialogs.c:2447
+#: dialogs.c:2541
 msgid "Contents of"
 msgstr "Вміст"
 
-#: dialogs.c:2473
-#, fuzzy
+#: dialogs.c:2567
 msgid "  next page"
-msgstr "\7f наступна сторінка"
+msgstr "  наступна сторінка"
 
-#: dialogs.c:2490
+#: dialogs.c:2584
 msgid "FIRST TYPE DIRECTORY NAME HERE"
 msgstr "СПОЧАТКУ ВКАЖІТЬ ТУТ НАЗВУ КАТАЛОГУ"
 
-#: dialogs.c:2491
+#: dialogs.c:2585
 msgid "TRY ANOTHER NAME"
 msgstr "СПРОБУЙТЕ ІНШУ НАЗВУ"
 
-#: draw.c:293
+#: draw.c:310
+#, fuzzy
 msgid ""
-"No default pieces installed\n"
-"Select your own -pieceImageDirectory"
+"No default pieces installed!\n"
+"Select your own using '-pieceImageDirectory'."
 msgstr ""
 "Типових зображень фігур не встановлено.\n"
 "Вкажіть власні за допомогою параметра -pieceImageDirectory"
 
-#: engineoutput.c:107 menus.c:630
+#: engineoutput.c:110 menus.c:630
 #, c-format
 msgid "Engine Output"
 msgstr "Вивід рушія"
 
-#: engineoutput.c:117
+#: engineoutput.c:120
 #, c-format
 msgid "%s (%d reversible ply)"
 msgid_plural "%s (%d reversible plies)"
@@ -2199,7 +2295,7 @@ msgstr[1] "%s (з можливістю скасування %d ходів)"
 msgstr[2] "%s (з можливістю скасування %d ходів)"
 msgstr[3] "%s (з можливістю скасування %d ходу)"
 
-#: engineoutput.c:509 engineoutput.c:512 nengineoutput.c:81 nengineoutput.c:88
+#: engineoutput.c:542 engineoutput.c:545 nengineoutput.c:82 nengineoutput.c:90
 msgid "NPS"
 msgstr "NPS"
 
@@ -2208,52 +2304,52 @@ msgstr "NPS"
 msgid "Reading game file (%d)"
 msgstr "Читання файла гри (%d)"
 
-#: gtk/xboard.c:844 xaw/xboard.c:1162
+#: gtk/xboard.c:867 xaw/xboard.c:1052
 #, c-format
 msgid "%s: can't cd to CHESSDIR: "
 msgstr "%s: не вдалося перейти до каталогу CHESSDIR: "
 
-#: gtk/xboard.c:853 xaw/xboard.c:1171
+#: gtk/xboard.c:876 xaw/xboard.c:1061
 #, c-format
 msgid "Failed to open file '%s'\n"
 msgstr "Не вдалося відкрити файл «%s»\n"
 
-#: gtk/xboard.c:868 xaw/xboard.c:1180
+#: gtk/xboard.c:891 xaw/xboard.c:1070
 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size"
 msgstr ""
 "Для того, щоб скористатися підтримкою цього розміру, слід зібрати програму з "
 "більшими значеннями BOARD_RANKS або BOARD_FILES"
 
-#: gtk/xboard.c:887 xaw/xboard.c:1212
+#: gtk/xboard.c:910 xaw/xboard.c:1102
 #, c-format
 msgid "%s: bad boardSize syntax %s\n"
 msgstr "%s: помилковий синтаксис boardSize %s\n"
 
-#: gtk/xboard.c:927 xaw/xboard.c:1249
+#: gtk/xboard.c:950 xaw/xboard.c:1139
 #, c-format
 msgid "%s: unrecognized boardSize name %s\n"
 msgstr "%s: невідома назва boardSize %s\n"
 
-#: gtk/xboard.c:968 xaw/xboard.c:1286
+#: gtk/xboard.c:991 xaw/xboard.c:1176
 #, c-format
 msgid "%s: too few colors available; trying monochrome mode\n"
 msgstr "%s: занадто мало кольорів; спробуємо монохромний режим\n"
 
-#: gtk/xboard.c:1258 xaw/xboard.c:1568
+#: gtk/xboard.c:1281 xaw/xboard.c:1458
 #, c-format
 msgid "Unable to create font set for %s.\n"
 msgstr "Не вдалося створити набір шрифтів для %s.\n"
 
-#: gtk/xboard.c:1283 xaw/xboard.c:1591
+#: gtk/xboard.c:1306 xaw/xboard.c:1481
 #, c-format
 msgid "%s: no fonts match pattern %s\n"
 msgstr "%s: взірцеві %s не відповідає жоден шрифт\n"
 
-#: gtk/xboard.c:1722 xaw/xboard.c:2081
+#: gtk/xboard.c:1745 xaw/xboard.c:1971
 msgid "Can't open temp file"
 msgstr "Не вдалося відкрити тимчасовий файл даних"
 
-#: gtk/xboard.c:2174
+#: gtk/xboard.c:2199
 msgid "Failed to open file"
 msgstr "Не вдалося відкрити файл"
 
@@ -2324,11 +2420,13 @@ msgid "New Game"
 msgstr "Нова гра"
 
 #: menus.c:583
-msgid "New Shuffle Game ..."
+#, fuzzy
+msgid "New Shuffle Game..."
 msgstr "Нова випадкова гра…"
 
 #: menus.c:584
-msgid "New Variant ..."
+#, fuzzy
+msgid "New Variant..."
 msgstr "Новий варіант…"
 
 #: menus.c:586
@@ -2568,19 +2666,23 @@ msgid "Adjudicate Draw"
 msgstr "Визначити нічию"
 
 #: menus.c:684
-msgid "Load New 1st Engine ..."
+#, fuzzy
+msgid "Load New 1st Engine..."
 msgstr "Завантажити новий перший рушій…"
 
 #: menus.c:685
-msgid "Load New 2nd Engine ..."
+#, fuzzy
+msgid "Load New 2nd Engine..."
 msgstr "Завантажити новий другий рушій…"
 
 #: menus.c:687
-msgid "Engine #1 Settings ..."
+#, fuzzy
+msgid "Engine #1 Settings..."
 msgstr "Параметри рушія 1…"
 
 #: menus.c:688
-msgid "Engine #2 Settings ..."
+#, fuzzy
+msgid "Engine #2 Settings..."
 msgstr "Параметри рушія 2…"
 
 #: menus.c:690
@@ -2600,43 +2702,51 @@ msgid "Retract Move"
 msgstr "Відкликати хід"
 
 #: menus.c:700
-msgid "General ..."
+#, fuzzy
+msgid "General..."
 msgstr "Загальне…"
 
 #: menus.c:702
-msgid "Time Control ..."
+#, fuzzy
+msgid "Time Control..."
 msgstr "Керування часом…"
 
 #: menus.c:703
-msgid "Common Engine ..."
+#, fuzzy
+msgid "Common Engine..."
 msgstr "Загальний рушій…"
 
 #: menus.c:704
-msgid "Adjudications ..."
+#, fuzzy
+msgid "Adjudications..."
 msgstr "Визначення…"
 
 #: menus.c:705
-msgid "ICS ..."
-msgstr "ICS…"
+msgid "ICS..."
+msgstr ""
 
 #: menus.c:706
-msgid "Match ..."
-msgstr "Партія…"
+msgid "Tournament..."
+msgstr ""
 
 #: menus.c:707
-msgid "Load Game ..."
+#, fuzzy
+msgid "Load Game..."
 msgstr "Завантажити гру…"
 
 #: menus.c:708
-msgid "Save Game ..."
+#, fuzzy
+msgid "Save Game..."
 msgstr "Зберегти гру…"
 
 #: menus.c:709
-msgid "Game List ..."
+#, fuzzy
+msgid "Game List..."
 msgstr "Список ігор…"
 
 #: menus.c:710
-msgid "Sounds ..."
+#, fuzzy
+msgid "Sounds..."
 msgstr "Звуки…"
 
 #: menus.c:713
@@ -2707,19 +2817,20 @@ msgstr "Новини щодо розробки"
 msgid "e-Mail Bug Report"
 msgstr "Надіслати звіт про ваду електронною поштою"
 
-#: nengineoutput.c:78 nengineoutput.c:85
+#: nengineoutput.c:78 nengineoutput.c:86
 msgid "engine name"
 msgstr "назва рушія"
 
-#: nengineoutput.c:80 nengineoutput.c:87
+#. TRANSLATORS: noun, as in "the move Nf3"
+#: nengineoutput.c:81 nengineoutput.c:89
 msgid "move"
 msgstr "хід"
 
-#: nengineoutput.c:153
+#: nengineoutput.c:155
 msgid "Engine output"
 msgstr "Вивід рушія"
 
-#: nengineoutput.c:157
+#: nengineoutput.c:159
 msgid ""
 "Mismatch of STRIDE in nengineoutput.c\n"
 "Change and recompile!"
@@ -2803,8 +2914,8 @@ msgid "%s: unrecognized color %s\n"
 msgstr "%s: нерозпізнаний колір %s\n"
 
 #: usystem.c:230
-#, c-format
-msgid "%s: can't parse foreground color in `%s'\n"
+#, fuzzy, c-format
+msgid "%s: can't parse foreground color in '%s'\n"
 msgstr "%s: не вдалося обробити колір тексту у «%s»\n"
 
 #: usystem.c:259
@@ -2812,58 +2923,25 @@ msgstr "%s: не вдалося обробити колір тексту у «%s
 msgid "%s: can't parse color names; disabling colorization\n"
 msgstr "%s: не вдалося обробити назви кольорів; розфарбовування вимкнено\n"
 
-#: usystem.c:371
+#: usystem.c:374
 #, c-format
 msgid "ERROR: Unknown user %s (in path %s)\n"
 msgstr "Помилка: невідомий користувач %s (шлях — %s)\n"
 
-#: usystem.c:556
+#: usystem.c:557
 msgid "Socket support is not configured in"
 msgstr "Підтримку сокетів ще не налаштовано"
 
-#: usystem.c:645
+#: usystem.c:646
 msgid "internal rcmd not implemented for Unix"
 msgstr "вбудований rcmd ще не реалізовано для Unix"
 
-#: xaw/xboard.c:478
-#, c-format
-msgid "%s: Can't access XPM directory %s\n"
-msgstr "%s: не вдалося отримати доступ до каталогу XPM %s\n"
-
-#: xaw/xboard.c:499
-#, c-format
-msgid "Available `%s' sizes:\n"
-msgstr "Доступні розміри «%s»:\n"
-
-#: xaw/xboard.c:532
-#, c-format
-msgid "Error: No `%s' files!\n"
-msgstr "Помилка: немає файлів «%s»!\n"
-
-#: xaw/xboard.c:545
-#, c-format
-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 ""
-"Попередження: у системі не виявлено структури DIR —\n"
-"         автоматична зміна розмірів фігур XPM/XIM неможлива.\n"
-"   Будь ласка, повідомте про цю помилку на адресу %s.\n"
-"   Включіть до повідомлення дані щодо типу та назви операційної системи.\n"
-
-#: xaw/xboard.c:1292
+#: xaw/xboard.c:1182
 #, c-format
 msgid "white pixel = 0x%lx, black pixel = 0x%lx\n"
 msgstr "білий піксель = 0x%lx, чорний піксель = 0x%lx\n"
 
-#: xaw/xengineoutput.c:115
-#, c-format
-msgid "Error %d loading icon image\n"
-msgstr "Помилка %d під час завантаження зображення піктограми\n"
-
-#: xaw/xoptions.c:321 xaw/xoptions.c:1023
+#: xaw/xoptions.c:321 xaw/xoptions.c:1025
 msgid "browse"
 msgstr "вибрати"
 
@@ -2879,13 +2957,47 @@ msgstr "Alt"
 msgid "Shift"
 msgstr "Shift"
 
-#: xaw/xoptions.c:1270
+#: xaw/xoptions.c:1272
 msgid "OK"
 msgstr "Гаразд"
 
-#: xaw/xoptions.c:1274
-msgid "cancel"
-msgstr "скасувати"
+#~ msgid "    (for concurrent playing of a single"
+#~ msgstr "    (для одночасної гри окремого"
+
+#~ msgid "Match Options"
+#~ msgstr "Параметри партії"
+
+#~ msgid "ICS ..."
+#~ msgstr "ICS…"
+
+#~ msgid "Match ..."
+#~ msgstr "Партія…"
+
+#~ msgid "%s: Can't access XPM directory %s\n"
+#~ msgstr "%s: не вдалося отримати доступ до каталогу XPM %s\n"
+
+#~ msgid "Available `%s' sizes:\n"
+#~ msgstr "Доступні розміри «%s»:\n"
+
+#~ msgid "Error: No `%s' files!\n"
+#~ msgstr "Помилка: немає файлів «%s»!\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 ""
+#~ "Попередження: у системі не виявлено структури DIR —\n"
+#~ "         автоматична зміна розмірів фігур XPM/XIM неможлива.\n"
+#~ "   Будь ласка, повідомте про цю помилку на адресу %s.\n"
+#~ "   Включіть до повідомлення дані щодо типу та назви операційної системи.\n"
+
+#~ msgid "Error %d loading icon image\n"
+#~ msgstr "Помилка %d під час завантаження зображення піктограми\n"
+
+#~ msgid "cancel"
+#~ msgstr "скасувати"
 
 #~ msgid "recognized '%s' (%d) as variant %s\n"
 #~ msgstr "розпізнано «%s» (%d) як варіант %s\n"
index 9cfcf7c..a1d459a 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-01-05 12:51-0800\n"
+"POT-Creation-Date: 2014-01-19 22:19-0800\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,558 +18,581 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: args.h:820
+#: args.h:833
 #, c-format
 msgid "%s in settings file\n"
 msgstr ""
 
-#: args.h:830
+#: args.h:867
 #, c-format
 msgid "Bad integer value %s"
 msgstr ""
 
-#: args.h:923 args.h:1170
+#: args.h:968 args.h:1229
 #, c-format
 msgid "Unrecognized argument %s"
 msgstr ""
 
-#: args.h:954
+#: args.h:999
 #, c-format
 msgid "No value provided for argument %s"
 msgstr ""
 
-#: args.h:1014
+#: args.h:1059
 #, c-format
 msgid "Incomplete \\ escape in value for %s"
 msgstr ""
 
-#: args.h:1125
+#: args.h:1170
 #, c-format
 msgid "Failed to open indirection file %s"
 msgstr ""
 
-#: args.h:1142
+#: args.h:1187
 #, c-format
 msgid "Unrecognized boolean argument value %s"
 msgstr ""
 
 #. 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:744
+#: backend.c:800
 msgid "first"
 msgstr ""
 
 #. 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:747
+#: backend.c:803
 msgid "second"
 msgstr ""
 
-#: backend.c:827
+#: backend.c:885
 #, c-format
 msgid "protocol version %d not supported"
 msgstr ""
 
-#: backend.c:933
+#: backend.c:991
 msgid "You did not specify the engine executable"
 msgstr ""
 
-#: backend.c:989
+#: backend.c:1049
 #, c-format
 msgid "bad timeControl option %s"
 msgstr ""
 
-#: backend.c:1004
+#: backend.c:1064
 #, c-format
 msgid "bad searchTime option %s"
 msgstr ""
 
-#: backend.c:1110
+#: backend.c:1170
 #, c-format
 msgid "Variant %s supported only in ICS mode"
 msgstr ""
 
-#: backend.c:1128
+#: backend.c:1188
 #, c-format
 msgid "Unknown variant name %s"
 msgstr ""
 
-#: backend.c:1375
+#: backend.c:1439
 msgid "Starting chess program"
 msgstr ""
 
-#: backend.c:1398
+#: backend.c:1462
 msgid "Bad game file"
 msgstr ""
 
-#: backend.c:1405
+#: backend.c:1469
 msgid "Bad position file"
 msgstr ""
 
-#: backend.c:1419
+#: backend.c:1483
 msgid "Pick new game"
 msgstr ""
 
-#: backend.c:1488
+#: backend.c:1552
 msgid ""
-"You restarted an already completed tourney\n"
-"One more cycle will now be added to it\n"
-"Games commence in 10 sec"
+"You restarted an already completed tourney.\n"
+"One more cycle will now be added to it.\n"
+"Games commence in 10 sec."
 msgstr ""
 
-#: backend.c:1495
+#: backend.c:1559
 #, c-format
 msgid "All games in tourney '%s' are already played or playing"
 msgstr ""
 
-#: backend.c:1502
+#: backend.c:1566
 msgid "Can't have a match with no chess programs"
 msgstr ""
 
-#: backend.c:1539
+#: backend.c:1620
 #, c-format
 msgid "Could not open comm port %s"
 msgstr ""
 
-#: backend.c:1542
+#: backend.c:1623
 #, c-format
 msgid "Could not connect to host %s, port %s"
 msgstr ""
 
-#: backend.c:1598
+#: backend.c:1679
 #, c-format
 msgid "Unknown initialMode %s"
 msgstr ""
 
-#: backend.c:1624
+#: backend.c:1705
 msgid "AnalyzeFile mode requires a game file"
 msgstr ""
 
-#: backend.c:1651
+#: backend.c:1732
 msgid "Analysis mode requires a chess engine"
 msgstr ""
 
-#: backend.c:1655
+#: backend.c:1736
 msgid "Analysis mode does not work with ICS mode"
 msgstr ""
 
-#: backend.c:1666
+#: backend.c:1747
 msgid "MachineWhite mode requires a chess engine"
 msgstr ""
 
-#: backend.c:1671
+#: backend.c:1752
 msgid "MachineWhite mode does not work with ICS mode"
 msgstr ""
 
-#: backend.c:1678
+#: backend.c:1759
 msgid "MachineBlack mode requires a chess engine"
 msgstr ""
 
-#: backend.c:1683
+#: backend.c:1764
 msgid "MachineBlack mode does not work with ICS mode"
 msgstr ""
 
-#: backend.c:1690
+#: backend.c:1771
 msgid "TwoMachines mode requires a chess engine"
 msgstr ""
 
-#: backend.c:1695
+#: backend.c:1776
 msgid "TwoMachines mode does not work with ICS mode"
 msgstr ""
 
-#: backend.c:1706
+#: backend.c:1787
 msgid "Training mode requires a game file"
 msgstr ""
 
-#: backend.c:1869 backend.c:1924 backend.c:1947 backend.c:2346
+#: backend.c:1950 backend.c:2005 backend.c:2028 backend.c:2430
 msgid "Error writing to ICS"
 msgstr ""
 
-#: backend.c:1884
+#: backend.c:1965
 msgid "Error reading from keyboard"
 msgstr ""
 
-#: backend.c:1887
+#: backend.c:1968
 msgid "Got end of file from keyboard"
 msgstr ""
 
-#: backend.c:2192
+#: backend.c:2276
 #, c-format
 msgid "Unknown wild type %d"
 msgstr ""
 
-#: backend.c:2263 usystem.c:329
+#: backend.c:2347 usystem.c:329
 msgid "Error writing to display"
 msgstr ""
 
-#: backend.c:3019
+#. TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers
+#: backend.c:3105
 #, c-format
 msgid "your opponent kibitzes: %s"
 msgstr ""
 
-#: backend.c:3548
+#: backend.c:3634
 msgid "Error gathering move list: two headers"
 msgstr ""
 
-#: backend.c:3595
+#: backend.c:3681
 msgid "Error gathering move list: nested"
 msgstr ""
 
-#: backend.c:3699 backend.c:4117 backend.c:4321 backend.c:4880 backend.c:4884
-#: backend.c:6900 backend.c:12101 backend.c:13816 backend.c:13893
-#: backend.c:13939 backend.c:13945 backend.c:13950 backend.c:13955
+#: backend.c:3785 backend.c:4203 backend.c:4407 backend.c:4966 backend.c:4970
+#: backend.c:7073 backend.c:12577 backend.c:14306 backend.c:14383
+#: backend.c:14429 backend.c:14435 backend.c:14440 backend.c:14445
 msgid "vs."
 msgstr ""
 
-#: backend.c:3827
+#: backend.c:3913
 msgid "Illegal move (rejected by ICS)"
 msgstr ""
 
-#: backend.c:4165
+#: backend.c:4251
 msgid "Connection closed by ICS"
 msgstr ""
 
-#: backend.c:4167
+#: backend.c:4253
 msgid "Error reading from ICS"
 msgstr ""
 
-#: backend.c:4244
+#: backend.c:4330
 #, c-format
 msgid ""
 "Failed to parse board string:\n"
 "\"%s\""
 msgstr ""
 
-#: backend.c:4253 backend.c:9756
+#: backend.c:4339 backend.c:10203
 msgid "Game too long; increase MAX_MOVES and recompile"
 msgstr ""
 
-#: backend.c:4372
+#: backend.c:4458
 msgid "Error gathering move list: extra board"
 msgstr ""
 
-#: backend.c:4804 backend.c:4826
+#: backend.c:4890 backend.c:4912
 #, c-format
 msgid "Couldn't parse move \"%s\" from ICS"
 msgstr ""
 
-#: backend.c:5063
+#: backend.c:5161
 #, c-format
 msgid "say Internal error; bad moveType %d (%d,%d-%d,%d)"
 msgstr ""
 
-#: backend.c:5133
+#: backend.c:5232
 msgid "You cannot do this while you are playing or observing"
 msgstr ""
 
-#: backend.c:6029
+#: backend.c:6174
 msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!"
 msgstr ""
 
-#: backend.c:6491
+#: backend.c:6664
 msgid "You are playing Black"
 msgstr ""
 
-#: backend.c:6500 backend.c:6527
+#: backend.c:6673 backend.c:6700
 msgid "You are playing White"
 msgstr ""
 
-#: backend.c:6509 backend.c:6535 backend.c:6655 backend.c:6680 backend.c:6696
-#: backend.c:14592
+#: backend.c:6682 backend.c:6708 backend.c:6828 backend.c:6853 backend.c:6869
+#: backend.c:15113
 msgid "It is White's turn"
 msgstr ""
 
-#: backend.c:6513 backend.c:6539 backend.c:6663 backend.c:6686 backend.c:6717
-#: backend.c:14584
+#: backend.c:6686 backend.c:6712 backend.c:6836 backend.c:6859 backend.c:6890
+#: backend.c:15105
 msgid "It is Black's turn"
 msgstr ""
 
-#: backend.c:6552
+#: backend.c:6725
 msgid "Displayed position is not current"
 msgstr ""
 
-#: backend.c:6790
+#: backend.c:6963
 msgid "Illegal move"
 msgstr ""
 
-#: backend.c:6857
+#: backend.c:7030
 msgid "End of game"
 msgstr ""
 
-#: backend.c:6860
+#: backend.c:7033
 msgid "Incorrect move"
 msgstr ""
 
-#: backend.c:7169 backend.c:7296
+#: backend.c:7423 backend.c:7569
 msgid "Pull pawn backwards to under-promote"
 msgstr ""
 
-#: backend.c:7527
+#: backend.c:7532
+msgid "only marked squares are legal"
+msgstr ""
+
+#: backend.c:7820
 msgid "Swiss tourney finished"
 msgstr ""
 
-#: backend.c:8103
+#: backend.c:8336
+msgid "could not load EGBB library"
+msgstr ""
+
+#: backend.c:8339
+msgid "wrong EGBB version"
+msgstr ""
+
+#: backend.c:8452
 msgid "Invalid pairing from pairing engine"
 msgstr ""
 
-#: backend.c:8236
+#: backend.c:8603
 #, c-format
 msgid "Illegal move \"%s\" from %s machine"
 msgstr ""
 
-#: backend.c:8457
+#: backend.c:8849
 msgid "Bad FEN received from engine"
 msgstr ""
 
-#: backend.c:8601 backend.c:13681 backend.c:13746
+#: backend.c:8950
+msgid "Engine did not send setup for non-standard variant"
+msgstr ""
+
+#: backend.c:9023 backend.c:14168 backend.c:14236
 #, c-format
 msgid "%s does not support analysis"
 msgstr ""
 
-#: backend.c:8667
+#: backend.c:9089
 #, c-format
 msgid "Illegal move \"%s\" (rejected by %s chess program)"
 msgstr ""
 
-#: backend.c:8694
+#: backend.c:9116
 #, c-format
 msgid "Failed to start %s chess program %s on %s: %s\n"
 msgstr ""
 
-#: backend.c:8715
+#: backend.c:9137
 #, c-format
 msgid "Hint: %s"
 msgstr ""
 
-#: backend.c:8720
+#: backend.c:9142
 #, c-format
 msgid ""
 "Illegal hint move \"%s\"\n"
 "from %s chess program"
 msgstr ""
 
-#: backend.c:8895
+#: backend.c:9317
 msgid "Machine accepts your draw offer"
 msgstr ""
 
-#: backend.c:8898
+#: backend.c:9320
 msgid ""
-"Machine offers a draw\n"
-"Select Action / Draw to agree"
+"Machine offers a draw.\n"
+"Select Action / Draw to accept."
 msgstr ""
 
-#: backend.c:8977
+#. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone
+#: backend.c:9402
 msgid "failed writing PV"
 msgstr ""
 
-#: backend.c:9275
+#: backend.c:9701
 #, c-format
 msgid "Ambiguous move in ICS output: \"%s\""
 msgstr ""
 
-#: backend.c:9285
+#: backend.c:9711
 #, c-format
 msgid "Illegal move in ICS output: \"%s\""
 msgstr ""
 
-#: backend.c:9296
+#: backend.c:9722
 msgid "Gap in move list"
 msgstr ""
 
-#: backend.c:9917 dialogs.c:460
+#: backend.c:10357
 #, c-format
 msgid "Variant %s not supported by %s"
 msgstr ""
 
-#: backend.c:10038
+#: backend.c:10364
+#, c-format
+msgid ", but %s is"
+msgstr ""
+
+#: backend.c:10506
 #, c-format
 msgid "Startup failure on '%s'"
 msgstr ""
 
-#: backend.c:10069
+#: backend.c:10537
 msgid "Waiting for first chess program"
 msgstr ""
 
-#: backend.c:10074 backend.c:13964
+#: backend.c:10542 backend.c:14454
 msgid "Waiting for second chess program"
 msgstr ""
 
-#: backend.c:10123
+#: backend.c:10591
 msgid "Could not write on tourney file"
 msgstr ""
 
-#: backend.c:10197
+#: backend.c:10665
 msgid ""
 "You cannot replace an engine while it is engaged!\n"
 "Terminate its game first."
 msgstr ""
 
-#: backend.c:10211
+#: backend.c:10679
 msgid "No engine with the name you gave is installed"
 msgstr ""
 
-#: backend.c:10213
+#: backend.c:10681
 msgid ""
 "First change an engine by editing the participants list\n"
 "of the Tournament Options dialog"
 msgstr ""
 
-#: backend.c:10214
+#: backend.c:10682
 msgid "You can only change one engine at the time"
 msgstr ""
 
-#: backend.c:10229 backend.c:10376
+#: backend.c:10697 backend.c:10845
 #, c-format
 msgid "No engine %s is installed"
 msgstr ""
 
-#: backend.c:10249
+#: backend.c:10717
 msgid ""
 "You must supply a tournament file,\n"
 "for storing the tourney progress"
 msgstr ""
 
-#: backend.c:10259
+#: backend.c:10727
 msgid "Not enough participants"
 msgstr ""
 
-#: backend.c:10460
+#: backend.c:10929
 msgid "Bad tournament file"
 msgstr ""
 
-#: backend.c:10472
+#: backend.c:10941
 msgid "Waiting for other game(s)"
 msgstr ""
 
-#: backend.c:10485
+#: backend.c:10954
 msgid "No pairing engine specified"
 msgstr ""
 
-#: backend.c:10962
+#: backend.c:11430
 #, c-format
 msgid "Match %s vs. %s: final score %d-%d-%d"
 msgstr ""
 
-#: backend.c:11424 backend.c:11455
+#: backend.c:11897 backend.c:11928
 #, c-format
 msgid "Illegal move: %d.%s%s"
 msgstr ""
 
-#: backend.c:11444
+#: backend.c:11917
 #, c-format
 msgid "Ambiguous move: %d.%s%s"
 msgstr ""
 
-#: backend.c:11497 backend.c:12524 backend.c:12717 backend.c:13078
+#: backend.c:11971 backend.c:13010 backend.c:13203 backend.c:13567
 #, c-format
 msgid "Can't open \"%s\""
 msgstr ""
 
-#: backend.c:11509 menus.c:116
+#: backend.c:11983 menus.c:116
 msgid "Cannot build game list"
 msgstr ""
 
-#: backend.c:11594
+#: backend.c:12068
 msgid "No more games in this message"
 msgstr ""
 
-#: backend.c:11634
+#: backend.c:12108
 msgid "No game has been loaded yet"
 msgstr ""
 
-#: backend.c:11638 backend.c:12505 ngamelist.c:129
+#: backend.c:12112 backend.c:12991 ngamelist.c:129
 msgid "Can't back up any further"
 msgstr ""
 
-#: backend.c:12077
+#: backend.c:12553
 msgid "Game number out of range"
 msgstr ""
 
-#: backend.c:12088
+#: backend.c:12564
 msgid "Can't seek on game file"
 msgstr ""
 
-#: backend.c:12146
+#: backend.c:12622
 msgid "Game not found in file"
 msgstr ""
 
-#: backend.c:12274 backend.c:12601
+#: backend.c:12751 backend.c:13087
 msgid "Bad FEN position in file"
 msgstr ""
 
-#: backend.c:12426
+#: backend.c:12903
 msgid "No moves in game"
 msgstr ""
 
-#: backend.c:12501
+#: backend.c:12987
 msgid "No position has been loaded yet"
 msgstr ""
 
-#: backend.c:12562 backend.c:12573
+#: backend.c:13048 backend.c:13059
 msgid "Can't seek on position file"
 msgstr ""
 
-#: backend.c:12580 backend.c:12592
+#: backend.c:13066 backend.c:13078
 msgid "Position not found in file"
 msgstr ""
 
-#: backend.c:12632
+#: backend.c:13118
 msgid "Black to play"
 msgstr ""
 
-#: backend.c:12635
+#: backend.c:13121
 msgid "White to play"
 msgstr ""
 
-#: backend.c:12722 backend.c:13083
+#: backend.c:13208 backend.c:13572
 msgid "Waiting for access to save file"
 msgstr ""
 
-#: backend.c:12724
+#: backend.c:13210
 msgid "Saving game"
 msgstr ""
 
-#: backend.c:12725
+#: backend.c:13211
 msgid "Bad Seek"
 msgstr ""
 
-#: backend.c:13085
+#: backend.c:13574
 msgid "Saving position"
 msgstr ""
 
-#: backend.c:13211
+#: backend.c:13700
 msgid ""
 "You have edited the game history.\n"
 "Use Reload Same Game and make your move again."
 msgstr ""
 
-#: backend.c:13216
+#: backend.c:13705
 msgid ""
 "You have entered too many moves.\n"
 "Back up to the correct position and try again."
 msgstr ""
 
-#: backend.c:13221
+#: backend.c:13710
 msgid ""
 "Displayed position is not current.\n"
 "Step forward to the correct position and try again."
 msgstr ""
 
-#: backend.c:13268
+#: backend.c:13757
 msgid "You have not made a move yet"
 msgstr ""
 
-#: backend.c:13289
+#: backend.c:13778
 msgid ""
 "The cmail message is not loaded.\n"
 "Use Reload CMail Message and make your move again."
 msgstr ""
 
-#: backend.c:13294
+#: backend.c:13783
 msgid "No unfinished games"
 msgstr ""
 
-#: backend.c:13300
+#: backend.c:13789
 #, c-format
 msgid ""
 "You have already mailed a move.\n"
@@ -579,209 +602,209 @@ msgid ""
 "on the command line."
 msgstr ""
 
-#: backend.c:13315
+#: backend.c:13804
 msgid "Failed to invoke cmail"
 msgstr ""
 
-#: backend.c:13377
+#: backend.c:13866
 #, c-format
 msgid "Waiting for reply from opponent\n"
 msgstr ""
 
-#: backend.c:13399
+#: backend.c:13888
 #, c-format
 msgid "Still need to make move for game\n"
 msgstr ""
 
-#: backend.c:13403
+#: backend.c:13892
 #, c-format
 msgid "Still need to make moves for both games\n"
 msgstr ""
 
-#: backend.c:13407
+#: backend.c:13896
 #, c-format
 msgid "Still need to make moves for all %d games\n"
 msgstr ""
 
-#: backend.c:13414
+#: backend.c:13903
 #, c-format
 msgid "Still need to make a move for game %s\n"
 msgstr ""
 
-#: backend.c:13420
+#: backend.c:13909
 #, c-format
 msgid "No unfinished games\n"
 msgstr ""
 
-#: backend.c:13422
+#: backend.c:13911
 #, c-format
 msgid "Ready to send mail\n"
 msgstr ""
 
-#: backend.c:13427
+#: backend.c:13916
 #, c-format
 msgid "Still need to make moves for games %s\n"
 msgstr ""
 
-#: backend.c:13631
+#: backend.c:14118
 msgid "Edit comment"
 msgstr ""
 
-#: backend.c:13633
+#: backend.c:14120
 #, c-format
 msgid "Edit comment on %d.%s%s"
 msgstr ""
 
-#: backend.c:13688
+#: backend.c:14175
 #, c-format
 msgid "You are not observing a game"
 msgstr ""
 
-#: backend.c:13796
+#: backend.c:14286
 msgid "It is not White's turn"
 msgstr ""
 
-#: backend.c:13877
+#: backend.c:14367
 msgid "It is not Black's turn"
 msgstr ""
 
-#: backend.c:13985
+#: backend.c:14475
 #, c-format
 msgid "Starting %s chess program"
 msgstr ""
 
-#: backend.c:14013 backend.c:15127
+#: backend.c:14503 backend.c:15648
 msgid ""
 "Wait until your turn,\n"
-"or select Move Now"
+"or select 'Move Now'."
 msgstr ""
 
-#: backend.c:14147
+#: backend.c:14638
 msgid "Training mode off"
 msgstr ""
 
-#: backend.c:14155
+#: backend.c:14646
 msgid "Training mode on"
 msgstr ""
 
-#: backend.c:14158
+#: backend.c:14649
 msgid "Already at end of game"
 msgstr ""
 
-#: backend.c:14238
+#: backend.c:14729
 msgid "Warning: You are still playing a game"
 msgstr ""
 
-#: backend.c:14241
+#: backend.c:14732
 msgid "Warning: You are still observing a game"
 msgstr ""
 
-#: backend.c:14244
+#: backend.c:14735
 msgid "Warning: You are still examining a game"
 msgstr ""
 
-#: backend.c:14311
+#: backend.c:14802
 msgid "Click clock to clear board"
 msgstr ""
 
-#: backend.c:14321
+#: backend.c:14812
 msgid "Close ICS engine analyze..."
 msgstr ""
 
-#: backend.c:14609
+#: backend.c:15130
 msgid "That square is occupied"
 msgstr ""
 
-#: backend.c:14633 backend.c:14659
+#: backend.c:15154 backend.c:15180
 msgid "There is no pending offer on this move"
 msgstr ""
 
-#: backend.c:14695 backend.c:14706
+#: backend.c:15216 backend.c:15227
 msgid "Your opponent is not out of time"
 msgstr ""
 
-#: backend.c:14772
+#: backend.c:15293
 msgid "You must make your move before offering a draw"
 msgstr ""
 
-#: backend.c:15109
+#: backend.c:15630
 msgid "You are not examining a game"
 msgstr ""
 
-#: backend.c:15113
+#: backend.c:15634
 msgid "You can't revert while pausing"
 msgstr ""
 
-#: backend.c:15167 backend.c:15174
+#: backend.c:15688 backend.c:15695
 msgid "It is your turn"
 msgstr ""
 
-#: backend.c:15225 backend.c:15232 backend.c:15285 backend.c:15292
-msgid "Wait until your turn"
+#: backend.c:15746 backend.c:15753 backend.c:15806 backend.c:15813
+msgid "Wait until your turn."
 msgstr ""
 
-#: backend.c:15237
+#: backend.c:15758
 msgid "No hint available"
 msgstr ""
 
-#: backend.c:15253 ngamelist.c:355
+#: backend.c:15774 ngamelist.c:355
 msgid "Game list not loaded or empty"
 msgstr ""
 
-#: backend.c:15260
+#: backend.c:15781
 msgid "Book file exists! Try again for overwrite."
 msgstr ""
 
-#: backend.c:15738
+#: backend.c:16259
 #, c-format
 msgid "Error writing to %s chess program"
 msgstr ""
 
-#: backend.c:15741 backend.c:15772
+#: backend.c:16262 backend.c:16293
 #, c-format
 msgid "%s program exits in draw position (%s)"
 msgstr ""
 
-#: backend.c:15767
+#: backend.c:16288
 #, c-format
 msgid "Error: %s chess program (%s) exited unexpectedly"
 msgstr ""
 
-#: backend.c:15785
+#: backend.c:16306
 #, c-format
 msgid "Error reading from %s chess program (%s)"
 msgstr ""
 
-#: backend.c:16187
+#: backend.c:16730
 #, c-format
 msgid "%s engine has too many options\n"
 msgstr ""
 
-#: backend.c:16343
+#: backend.c:16886
 msgid "Displayed move is not current"
 msgstr ""
 
-#: backend.c:16352
+#: backend.c:16895
 msgid "Could not parse move"
 msgstr ""
 
-#: backend.c:16477 backend.c:16499
+#: backend.c:17020 backend.c:17042
 msgid "Both flags fell"
 msgstr ""
 
-#: backend.c:16479
+#: backend.c:17022
 msgid "White's flag fell"
 msgstr ""
 
-#: backend.c:16501
+#: backend.c:17044
 msgid "Black's flag fell"
 msgstr ""
 
-#: backend.c:16632
+#: backend.c:17175
 msgid "Clock adjustment not allowed in auto-flag mode"
 msgstr ""
 
-#: backend.c:17467
+#: backend.c:18025
 msgid "Bad FEN position in clipboard"
 msgstr ""
 
@@ -801,1363 +824,1417 @@ msgstr ""
 msgid "Could not create book"
 msgstr ""
 
-#: dialogs.c:259
+#: dialogs.c:283
 #, fuzzy
 msgid "Tournament file:          "
 msgstr "   F7"
 
-#: dialogs.c:260
-msgid "Sync after round"
+#: dialogs.c:284
+msgid "For concurrent playing of tourney with multiple XBoards:"
 msgstr ""
 
-#: dialogs.c:261
-msgid "    (for concurrent playing of a single"
+#: dialogs.c:285
+msgid "Sync after round"
 msgstr ""
 
-#: dialogs.c:262
+#: dialogs.c:286
 msgid "Sync after cycle"
 msgstr ""
 
-#: dialogs.c:263
-msgid "      tourney with multiple XBoards)"
-msgstr ""
-
-#: dialogs.c:264
+#: dialogs.c:287
 msgid "Tourney participants:"
 msgstr ""
 
-#: dialogs.c:265
+#: dialogs.c:288
 msgid "Select Engine:"
 msgstr ""
 
-#: dialogs.c:273
+#: dialogs.c:296
 msgid "Tourney type (0 = round-robin, 1 = gauntlet):"
 msgstr ""
 
-#: dialogs.c:274
+#: dialogs.c:297
 msgid "Number of tourney cycles (or Swiss rounds):"
 msgstr ""
 
-#: dialogs.c:275
+#: dialogs.c:298
 msgid "Default Number of Games in Match (or Pairing):"
 msgstr ""
 
-#: dialogs.c:276
+#: dialogs.c:299
 msgid "Pause between Match Games (msec):"
 msgstr ""
 
-#: dialogs.c:277
+#: dialogs.c:300
 msgid "Save Tourney Games on:"
 msgstr ""
 
-#: dialogs.c:278
+#: dialogs.c:301
 msgid "Game File with Opening Lines:"
 msgstr ""
 
-#: dialogs.c:279
+#: dialogs.c:302
 msgid "Game Number (-1 or -2 = Auto-Increment):"
 msgstr ""
 
-#: dialogs.c:280
+#: dialogs.c:303
 msgid "File with Start Positions:"
 msgstr ""
 
-#: dialogs.c:281
+#: dialogs.c:304
 msgid "Position Number (-1 or -2 = Auto-Increment):"
 msgstr ""
 
-#: dialogs.c:282
+#: dialogs.c:305
 msgid "Rewind Index after this many Games (0 = never):"
 msgstr ""
 
-#: dialogs.c:283
+#: dialogs.c:306
 msgid "Disable own engine books by default"
 msgstr ""
 
-#: dialogs.c:284
+#: dialogs.c:307 dialogs.c:1565
+msgid "Time Control"
+msgstr ""
+
+#: dialogs.c:308
+#, fuzzy
+msgid "Common Engine"
+msgstr "Chương Trình Cờ Chung...   Alt+Shift+U"
+
+#: dialogs.c:309 dialogs.c:441
+msgid "General Options"
+msgstr "Các Lựa Chọn Chung"
+
+#: dialogs.c:310
+msgid "Continue Later"
+msgstr ""
+
+#: dialogs.c:311
 msgid "Replace Engine"
 msgstr ""
 
-#: dialogs.c:285
+#: dialogs.c:312
 msgid "Upgrade Engine"
 msgstr ""
 
-#: dialogs.c:286
+#: dialogs.c:313
 msgid "Clone Tourney"
 msgstr ""
 
-#: dialogs.c:316
+#: dialogs.c:351
 msgid "First you must specify an existing tourney file to clone"
 msgstr ""
 
-#: dialogs.c:332 dialogs.c:1320
+#: dialogs.c:367 dialogs.c:1407
 msgid "# no engines are installed"
 msgstr ""
 
-#: dialogs.c:344
-msgid "Match Options"
+#: dialogs.c:375
+msgid "Internal error: PARTICIPANTS set wrong"
 msgstr ""
 
-#: dialogs.c:363
+#: dialogs.c:383
+#, fuzzy
+msgid "Tournament Options"
+msgstr "Âm thanh"
+
+#: dialogs.c:402
 msgid "Absolute Analysis Scores"
 msgstr ""
 
-#: dialogs.c:364
+#: dialogs.c:403
 msgid "Almost Always Queen (Detour Under-Promote)"
 msgstr ""
 
-#: dialogs.c:365 menus.c:714
+#: dialogs.c:404 menus.c:714
 msgid "Animate Dragging"
 msgstr ""
 
-#: dialogs.c:366 menus.c:715
+#: dialogs.c:405 menus.c:715
 msgid "Animate Moving"
 msgstr ""
 
-#: dialogs.c:367 menus.c:716
+#: dialogs.c:406 menus.c:716
 msgid "Auto Flag"
 msgstr "Tự Động Đặt Cờ"
 
-#: dialogs.c:368 menus.c:717
+#: dialogs.c:407 menus.c:717
 msgid "Auto Flip View"
 msgstr "Tự Động Xoay Bàn Cờ"
 
-#: dialogs.c:369 menus.c:718
+#: dialogs.c:408 menus.c:718
 msgid "Blindfold"
 msgstr "Mù Quáng"
 
-#: dialogs.c:370
+#. 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 ""
 
-#: dialogs.c:371
+#: dialogs.c:411
 msgid "Enable Variation Trees"
 msgstr ""
 
-#: dialogs.c:372
+#: dialogs.c:412
+msgid "Headers in Engine Output Window"
+msgstr ""
+
+#: dialogs.c:413
 msgid "Hide Thinking from Human"
 msgstr ""
 
-#: dialogs.c:373 menus.c:723
+#: dialogs.c:414 menus.c:723
 msgid "Highlight Last Move"
 msgstr "Đánh Dấu Nước Cuối"
 
-#: dialogs.c:374
+#: dialogs.c:415
 msgid "Highlight with Arrow"
 msgstr "Đánh Dấu Với Mũi Tên"
 
-#: dialogs.c:375 menus.c:726
+#: dialogs.c:416 menus.c:726
 msgid "One-Click Moving"
 msgstr "Đi Quân Với Chỉ Một Bấm"
 
-#: dialogs.c:376
+#: dialogs.c:417
 msgid "Periodic Updates (in Analysis Mode)"
 msgstr ""
 
-#: dialogs.c:378
+#: dialogs.c:419
 msgid "Play Move(s) of Clicked PV (Analysis)"
 msgstr ""
 
-#: dialogs.c:379 dialogs.c:514 menus.c:728
+#: dialogs.c:420 dialogs.c:597 menus.c:728
 msgid "Ponder Next Move"
 msgstr ""
 
-#: dialogs.c:380
+#: dialogs.c:421
 msgid "Popup Exit Messages"
 msgstr "Bật Cửa Sổ Thoát Chương trình"
 
-#: dialogs.c:381 menus.c:730
+#: dialogs.c:422 menus.c:730
 msgid "Popup Move Errors"
 msgstr "Bật Cửa Sổ Lỗi Nước Đi"
 
-#: dialogs.c:382
+#: dialogs.c:423
 msgid "Scores in Move List"
 msgstr ""
 
-#: dialogs.c:383
+#: dialogs.c:424
 msgid "Show Coordinates"
 msgstr "Hiện Tọa Độ"
 
-#: dialogs.c:384
+#: dialogs.c:425
 msgid "Show Target Squares"
 msgstr ""
 
-#: dialogs.c:385
+#: dialogs.c:426
 msgid "Sticky Windows"
 msgstr ""
 
-#: dialogs.c:386 menus.c:733
+#: dialogs.c:427 menus.c:733
 msgid "Test Legality"
 msgstr "Kiểm Tra Hợp Lệ"
 
-#: dialogs.c:387
+#: dialogs.c:428
 msgid "Top-Level Dialogs"
 msgstr ""
 
-#: dialogs.c:388
+#: dialogs.c:429
 msgid "Flash Moves (0 = no flashing):"
 msgstr ""
 
-#: dialogs.c:389
+#: dialogs.c:430
 msgid "Flash Rate (high = fast):"
 msgstr ""
 
-#: dialogs.c:390
+#: dialogs.c:431
 msgid "Animation Speed (high = slow):"
 msgstr ""
 
-#: dialogs.c:391
+#: dialogs.c:432
 msgid "Zoom factor in Evaluation Graph:"
 msgstr ""
 
-#: dialogs.c:400
-msgid "General Options"
-msgstr "Các Lựa Chọn Chung"
-
-#: dialogs.c:410
-msgid "normal"
+#: dialogs.c:452
+msgid "Normal"
 msgstr ""
 
-#: dialogs.c:411
-msgid "makruk"
+#: dialogs.c:453
+msgid "Makruk"
 msgstr ""
 
-#: dialogs.c:412
+#: dialogs.c:454
 msgid "FRC"
 msgstr ""
 
-#: dialogs.c:413
-msgid "shatranj"
+#: dialogs.c:455
+msgid "Shatranj"
 msgstr ""
 
-#: dialogs.c:414
-msgid "wild castle"
+#: dialogs.c:456
+msgid "Wild castle"
 msgstr ""
 
-#: dialogs.c:415
-msgid "knightmate"
-msgstr ""
+#: dialogs.c:457
+#, fuzzy
+msgid "Knightmate"
+msgstr "Mã"
 
-#: dialogs.c:416
-msgid "no castle"
+#: dialogs.c:458
+msgid "No castle"
 msgstr ""
 
-#: dialogs.c:417
-msgid "cylinder *"
+#: dialogs.c:459
+msgid "Cylinder *"
 msgstr ""
 
-#: dialogs.c:418
+#: dialogs.c:460
 msgid "3-checks"
 msgstr ""
 
-#: dialogs.c:419
+#: dialogs.c:461
 msgid "berolina *"
 msgstr ""
 
-#: dialogs.c:420
+#: dialogs.c:462
 msgid "atomic"
 msgstr ""
 
-#: dialogs.c:421
+#: dialogs.c:463
 msgid "two kings"
 msgstr ""
 
-#: dialogs.c:422
+#: dialogs.c:464
+msgid " "
+msgstr ""
+
+#: dialogs.c:465
+msgid "Spartan"
+msgstr ""
+
+#: dialogs.c:466
 msgid "Board size ( -1 = default for selected variant):"
 msgstr ""
 
-#: dialogs.c:423
+#: dialogs.c:467
 msgid "Number of Board Ranks:"
 msgstr ""
 
-#: dialogs.c:424
+#: dialogs.c:468
 msgid "Number of Board Files:"
 msgstr ""
 
-#: dialogs.c:425
+#: dialogs.c:469
 msgid "Holdings Size:"
 msgstr ""
 
-#: dialogs.c:429
-msgid "fairy"
+#: dialogs.c:471
+msgid ""
+"Variants marked with * can only be played\n"
+"with legality testing off."
 msgstr ""
 
-#: dialogs.c:430
+#: dialogs.c:473
+msgid "ASEAN"
+msgstr ""
+
+#: dialogs.c:474
 msgid "Great Shatranj (10x8)"
 msgstr ""
 
-#: dialogs.c:431
+#: dialogs.c:475
 msgid "Seirawan"
 msgstr ""
 
-#: dialogs.c:432
-msgid "falcon (10x8)"
+#: dialogs.c:476
+msgid "Falcon (10x8)"
 msgstr ""
 
-#: dialogs.c:433
+#: dialogs.c:477
 msgid "Superchess"
 msgstr ""
 
-#: dialogs.c:434
+#: dialogs.c:478
 msgid "Capablanca (10x8)"
 msgstr ""
 
-#: dialogs.c:435
-msgid "crazyhouse"
+#: dialogs.c:479
+msgid "Crazyhouse"
 msgstr ""
 
-#: dialogs.c:436
+#: dialogs.c:480
 msgid "Gothic (10x8)"
 msgstr ""
 
-#: dialogs.c:437
-msgid "bughouse"
+#: dialogs.c:481
+msgid "Bughouse"
 msgstr ""
 
-#: dialogs.c:438
-msgid "janus (10x8)"
+#: dialogs.c:482
+msgid "Janus (10x8)"
 msgstr ""
 
-#: dialogs.c:439
-msgid "suicide"
+#: dialogs.c:483
+msgid "Suicide"
 msgstr ""
 
-#: dialogs.c:440
+#: dialogs.c:484
 msgid "CRC (10x8)"
 msgstr ""
 
-#: dialogs.c:441
+#: dialogs.c:485
 msgid "give-away"
 msgstr ""
 
-#: dialogs.c:442
+#: dialogs.c:486
 msgid "grand (10x10)"
 msgstr ""
 
-#: dialogs.c:443
+#: dialogs.c:487
 msgid "losers"
 msgstr ""
 
-#: dialogs.c:444
+#: dialogs.c:488
 msgid "shogi (9x9)"
 msgstr ""
 
-#: dialogs.c:445
-msgid "Spartan"
+#: dialogs.c:489
+msgid "fairy"
 msgstr ""
 
-#: dialogs.c:446
+#: dialogs.c:490
 msgid "xiangqi (9x10)"
 msgstr ""
 
-#: dialogs.c:447
-msgid " "
+#: dialogs.c:491
+msgid "mighty lion"
 msgstr ""
 
-#: dialogs.c:448
+#: dialogs.c:492
 msgid "courier (12x8)"
 msgstr ""
 
-#: dialogs.c:465
+#: dialogs.c:493
+msgid "chu chess (10x10)"
+msgstr ""
+
+#: dialogs.c:494
+msgid "chu shogi (12x12)"
+msgstr ""
+
+#: dialogs.c:526
 #, c-format
 msgid "Warning: second engine (%s) does not support this!"
 msgstr ""
 
-#: dialogs.c:488
+#: dialogs.c:554
 #, c-format
-msgid "Only bughouse is not available in viewer mode"
+msgid "Only bughouse is not available in viewer mode."
 msgstr ""
 
-#: dialogs.c:489
+#: dialogs.c:555
 #, c-format
 msgid ""
-"All variants not supported by first engine\n"
-"(currently %s) are disabled"
+"All variants not supported by the first engine\n"
+"(currently %s) are disabled."
 msgstr ""
 
-#: dialogs.c:490
+#: dialogs.c:572
 msgid "New Variant"
 msgstr ""
 
-#: dialogs.c:515
+#: dialogs.c:598
 msgid "Maximum Number of CPUs per Engine:"
 msgstr ""
 
-#: dialogs.c:516
+#: dialogs.c:599
 msgid "Polygot Directory:"
 msgstr ""
 
-#: dialogs.c:517
+#: dialogs.c:600
 msgid "Hash-Table Size (MB):"
 msgstr ""
 
-#: dialogs.c:518
+#: dialogs.c:601
 msgid "Nalimov EGTB Path:"
 msgstr ""
 
-#: dialogs.c:519
+#: dialogs.c:602
 msgid "EGTB Cache Size (MB):"
 msgstr ""
 
-#: dialogs.c:520
+#: dialogs.c:603
 msgid "Use GUI Book"
 msgstr ""
 
-#: dialogs.c:521
+#: dialogs.c:604
 msgid "Opening-Book Filename:"
 msgstr ""
 
-#: dialogs.c:522
+#: dialogs.c:605
 msgid "Book Depth (moves):"
 msgstr ""
 
-#: dialogs.c:523
+#: dialogs.c:606
 msgid "Book Variety (0) vs. Strength (100):"
 msgstr ""
 
-#: dialogs.c:524
+#: dialogs.c:607
 msgid "Engine #1 Has Own Book"
 msgstr ""
 
-#: dialogs.c:525
+#: dialogs.c:608
 msgid "Engine #2 Has Own Book          "
 msgstr ""
 
-#: dialogs.c:534
+#: dialogs.c:617
 msgid "Common Engine Settings"
 msgstr ""
 
-#: dialogs.c:540
+#: dialogs.c:623
 msgid "Detect all Mates"
 msgstr ""
 
-#: dialogs.c:541
+#: dialogs.c:624
 msgid "Verify Engine Result Claims"
 msgstr ""
 
-#: dialogs.c:542
+#: dialogs.c:625
 msgid "Draw if Insufficient Mating Material"
 msgstr ""
 
-#: dialogs.c:543
+#: dialogs.c:626
 msgid "Adjudicate Trivial Draws (3-Move Delay)"
 msgstr ""
 
-#: dialogs.c:544
+#: dialogs.c:627
 msgid "N-Move Rule:"
 msgstr ""
 
-#: dialogs.c:545
+#: dialogs.c:628
 msgid "N-fold Repeats:"
 msgstr ""
 
-#: dialogs.c:546
+#: dialogs.c:629
 msgid "Draw after N Moves Total:"
 msgstr ""
 
-#: dialogs.c:547
+#: dialogs.c:630
 msgid "Win / Loss Threshold:"
 msgstr ""
 
-#: dialogs.c:548
+#: dialogs.c:631
 msgid "Negate Score of Engine #1"
 msgstr ""
 
-#: dialogs.c:549
+#: dialogs.c:632
 msgid "Negate Score of Engine #2"
 msgstr ""
 
-#: dialogs.c:556
+#: dialogs.c:639
 #, fuzzy
 msgid "Adjudicate non-ICS Games"
 msgstr "Phân Xử Trắng Thắng"
 
-#: dialogs.c:569
+#: dialogs.c:652
 msgid "Auto-Kibitz"
 msgstr ""
 
-#: dialogs.c:570
+#: dialogs.c:653
 msgid "Auto-Comment"
 msgstr ""
 
-#: dialogs.c:571
+#: dialogs.c:654
 msgid "Auto-Observe"
 msgstr ""
 
-#: dialogs.c:572
+#: dialogs.c:655
 msgid "Auto-Raise Board"
 msgstr "Tự Động Hiện Bàn Cờ"
 
-#: dialogs.c:573
+#: dialogs.c:656
 msgid "Auto-Create Logon Script"
 msgstr ""
 
-#: dialogs.c:574
+#: dialogs.c:657
 msgid "Background Observe while Playing"
 msgstr ""
 
-#: dialogs.c:575
+#: dialogs.c:658
 msgid "Dual Board for Background-Observed Game"
 msgstr ""
 
-#: dialogs.c:576
+#: dialogs.c:659
 msgid "Get Move List"
 msgstr ""
 
-#: dialogs.c:577
+#: dialogs.c:660
 msgid "Quiet Play"
 msgstr ""
 
-#: dialogs.c:578
+#: dialogs.c:661
 msgid "Seek Graph"
 msgstr ""
 
-#: dialogs.c:579
+#: dialogs.c:662
 msgid "Auto-Refresh Seek Graph"
 msgstr ""
 
-#: dialogs.c:580
+#: dialogs.c:663
 msgid "Auto-InputBox PopUp"
 msgstr ""
 
-#: dialogs.c:581
+#: dialogs.c:664
+msgid "Quit after game"
+msgstr ""
+
+#: dialogs.c:665
 msgid "Premove"
 msgstr ""
 
-#: dialogs.c:582
+#: dialogs.c:666
 msgid "Premove for White"
 msgstr ""
 
-#: dialogs.c:583
+#: dialogs.c:667
 msgid "First White Move:"
 msgstr ""
 
-#: dialogs.c:584
+#: dialogs.c:668
 msgid "Premove for Black"
 msgstr ""
 
-#: dialogs.c:585
+#: dialogs.c:669
 msgid "First Black Move:"
 msgstr ""
 
-#: dialogs.c:587
+#: dialogs.c:671
 msgid "Alarm"
 msgstr ""
 
-#: dialogs.c:588
+#: dialogs.c:672
 msgid "Alarm Time (msec):"
 msgstr ""
 
-#: dialogs.c:590
+#: dialogs.c:674
 msgid "Colorize Messages"
 msgstr ""
 
-#: dialogs.c:591
+#: dialogs.c:675
 msgid "Shout Text Colors:"
 msgstr ""
 
-#: dialogs.c:592
+#: dialogs.c:676
 msgid "S-Shout Text Colors:"
 msgstr ""
 
-#: dialogs.c:593
+#: dialogs.c:677
 msgid "Channel #1 Text Colors:"
 msgstr ""
 
-#: dialogs.c:594
+#: dialogs.c:678
 msgid "Other Channel Text Colors:"
 msgstr ""
 
-#: dialogs.c:595
+#: dialogs.c:679
 msgid "Kibitz Text Colors:"
 msgstr ""
 
-#: dialogs.c:596
+#: dialogs.c:680
 msgid "Tell Text Colors:"
 msgstr ""
 
-#: dialogs.c:597
+#: dialogs.c:681
 msgid "Challenge Text Colors:"
 msgstr ""
 
-#: dialogs.c:598
+#: dialogs.c:682
 msgid "Request Text Colors:"
 msgstr ""
 
-#: dialogs.c:599
+#: dialogs.c:683
 msgid "Seek Text Colors:"
 msgstr ""
 
-#: dialogs.c:606
+#: dialogs.c:690
 msgid "ICS Options"
 msgstr ""
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Exact position match"
 msgstr ""
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Shown position is subset"
 msgstr ""
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Same material with exactly same Pawn chain"
 msgstr ""
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Same material"
 msgstr ""
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Material range (top board half optional)"
 msgstr ""
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Material difference (optional stuff balanced)"
 msgstr ""
 
-#: dialogs.c:624
+#: dialogs.c:708
 msgid "Auto-Display Tags"
 msgstr ""
 
-#: dialogs.c:625
+#: dialogs.c:709
 msgid "Auto-Display Comment"
 msgstr ""
 
-#: dialogs.c:626
+#: dialogs.c:710
 msgid ""
 "Auto-Play speed of loaded games\n"
 "(0 = instant, -1 = off):"
 msgstr ""
 
-#: dialogs.c:627
+#: dialogs.c:711
 msgid "Seconds per Move:"
 msgstr ""
 
-#: dialogs.c:628
+#: dialogs.c:712
 msgid ""
 "\n"
 "options to use in game-viewer mode:"
 msgstr ""
 
-#: dialogs.c:630
+#: dialogs.c:714
 msgid ""
 "\n"
 "Thresholds for position filtering in game list:"
 msgstr ""
 
-#: dialogs.c:631
+#: dialogs.c:715
 msgid "Elo of strongest player at least:"
 msgstr ""
 
-#: dialogs.c:632
+#: dialogs.c:716
 msgid "Elo of weakest player at least:"
 msgstr ""
 
-#: dialogs.c:633
+#: dialogs.c:717
 msgid "No games before year:"
 msgstr ""
 
-#: dialogs.c:634
+#: dialogs.c:718
 msgid "Minimum nr consecutive positions:"
 msgstr ""
 
-#: dialogs.c:635
+#: dialogs.c:719
 msgid "Search mode:"
 msgstr ""
 
-#: dialogs.c:636
+#: dialogs.c:720
 msgid "Also match reversed colors"
 msgstr ""
 
-#: dialogs.c:637
+#: dialogs.c:721
 msgid "Also match left-right flipped position"
 msgstr ""
 
-#: dialogs.c:645
+#: dialogs.c:729
 msgid "Load Game Options"
 msgstr "Các Lựa Chọn Tải Ván Cờ"
 
-#: dialogs.c:657
+#: dialogs.c:741
 msgid "Auto-Save Games"
 msgstr ""
 
-#: dialogs.c:658
+#: dialogs.c:742
 msgid "Own Games Only"
 msgstr ""
 
-#: dialogs.c:659
+#: dialogs.c:743
 msgid "Save Games on File:"
 msgstr ""
 
-#: dialogs.c:660
+#: dialogs.c:744
 msgid "Save Final Positions on File:"
 msgstr ""
 
-#: dialogs.c:661
+#: dialogs.c:745
 msgid "PGN Event Header:"
 msgstr ""
 
-#: dialogs.c:662
+#: dialogs.c:746
 msgid "Old Save Style (as opposed to PGN)"
 msgstr ""
 
-#: dialogs.c:663
+#: dialogs.c:747
 msgid "Include Number Tag in tourney PGN"
 msgstr ""
 
-#: dialogs.c:664
+#: dialogs.c:748
 msgid "Save Score/Depth Info in PGN"
 msgstr ""
 
-#: dialogs.c:665
+#: dialogs.c:749
 msgid "Save Out-of-Book Info in PGN           "
 msgstr ""
 
-#: dialogs.c:672
+#: dialogs.c:756
 msgid "Save Game Options"
 msgstr "Các Lựa Chọn Lưu Ván Cờ"
 
-#: dialogs.c:681
+#: dialogs.c:765
 msgid "No Sound"
 msgstr "Không âm thanh"
 
-#: dialogs.c:682
+#: dialogs.c:766
 msgid "Default Beep"
 msgstr "Tiếng tút ngầm định"
 
-#: dialogs.c:683
+#: dialogs.c:767
 msgid "Above WAV File"
 msgstr ""
 
-#: dialogs.c:684
+#: dialogs.c:768
 msgid "Car Horn"
 msgstr ""
 
-#: dialogs.c:685
+#: dialogs.c:769
 msgid "Cymbal"
 msgstr ""
 
-#: dialogs.c:686
+#: dialogs.c:770
 msgid "Ding"
 msgstr ""
 
-#: dialogs.c:687
+#: dialogs.c:771
 msgid "Gong"
 msgstr ""
 
-#: dialogs.c:688
+#: dialogs.c:772
 msgid "Laser"
 msgstr ""
 
-#: dialogs.c:689
+#: dialogs.c:773
 msgid "Penalty"
 msgstr ""
 
-#: dialogs.c:690
+#: dialogs.c:774
 msgid "Phone"
 msgstr ""
 
-#: dialogs.c:691
+#: dialogs.c:775
 msgid "Pop"
 msgstr ""
 
-#: dialogs.c:692
+#: dialogs.c:776
+msgid "Roar"
+msgstr ""
+
+#: dialogs.c:777
 msgid "Slap"
 msgstr ""
 
-#: dialogs.c:693
+#: dialogs.c:778
 msgid "Wood Thunk"
 msgstr ""
 
-#: dialogs.c:695
+#: dialogs.c:780
 msgid "User File"
 msgstr ""
 
-#: dialogs.c:717
+#: dialogs.c:803
 msgid "User WAV File:"
 msgstr ""
 
-#: dialogs.c:718
+#: dialogs.c:804
 msgid "Sound Program:"
 msgstr ""
 
-#: dialogs.c:719
+#: dialogs.c:805
 msgid "Try-Out Sound:"
 msgstr ""
 
-#: dialogs.c:720
+#: dialogs.c:806
 msgid "Play"
 msgstr "Chơi"
 
-#: dialogs.c:721
+#: dialogs.c:807
 msgid "Move:"
 msgstr ""
 
-#: dialogs.c:722
+#: dialogs.c:808
 msgid "Win:"
 msgstr ""
 
-#: dialogs.c:723
+#: dialogs.c:809
 msgid "Lose:"
 msgstr ""
 
-#: dialogs.c:724
+#: dialogs.c:810
 msgid "Draw:"
 msgstr ""
 
-#: dialogs.c:725
+#: dialogs.c:811
 msgid "Unfinished:"
 msgstr ""
 
-#: dialogs.c:726
+#: dialogs.c:812
 msgid "Alarm:"
 msgstr ""
 
-#: dialogs.c:727
+#: dialogs.c:813
 msgid "Challenge:"
 msgstr ""
 
-#: dialogs.c:729
+#: dialogs.c:815
 msgid "Sounds Directory:"
 msgstr ""
 
-#: dialogs.c:730
+#: dialogs.c:816
 msgid "Shout:"
 msgstr ""
 
-#: dialogs.c:731
+#: dialogs.c:817
 msgid "S-Shout:"
 msgstr ""
 
-#: dialogs.c:732
+#: dialogs.c:818
 msgid "Channel:"
 msgstr ""
 
-#: dialogs.c:733
+#: dialogs.c:819
 msgid "Channel 1:"
 msgstr ""
 
-#: dialogs.c:734
+#: dialogs.c:820
 msgid "Tell:"
 msgstr ""
 
-#: dialogs.c:735
+#: dialogs.c:821
 msgid "Kibitz:"
 msgstr ""
 
-#: dialogs.c:736
+#: dialogs.c:822
 msgid "Request:"
 msgstr ""
 
-#: dialogs.c:737
+#: dialogs.c:823
+msgid "Lion roar:"
+msgstr ""
+
+#: dialogs.c:824
 msgid "Seek:"
 msgstr ""
 
-#: dialogs.c:753
+#: dialogs.c:840
 msgid "Sound Options"
 msgstr "Âm thanh"
 
-#: dialogs.c:774
+#: dialogs.c:861
 msgid "White Piece Color:"
 msgstr ""
 
 #. TRANSLATORS: R = single letter for the color red
-#: dialogs.c:777 dialogs.c:786 dialogs.c:792 dialogs.c:798 dialogs.c:804
-#: dialogs.c:810
+#: dialogs.c:864 dialogs.c:873 dialogs.c:879 dialogs.c:885 dialogs.c:891
+#: dialogs.c:897
 msgid "R"
 msgstr ""
 
 #. TRANSLATORS: G = single letter for the color green
-#: dialogs.c:779 dialogs.c:787 dialogs.c:793 dialogs.c:799 dialogs.c:805
-#: dialogs.c:811
+#: dialogs.c:866 dialogs.c:874 dialogs.c:880 dialogs.c:886 dialogs.c:892
+#: dialogs.c:898
 msgid "G"
 msgstr ""
 
 #. TRANSLATORS: B = single letter for the color blue
-#: dialogs.c:781 dialogs.c:788 dialogs.c:794 dialogs.c:800 dialogs.c:806
-#: dialogs.c:812
+#: dialogs.c:868 dialogs.c:875 dialogs.c:881 dialogs.c:887 dialogs.c:893
+#: dialogs.c:899
 msgid "B"
 msgstr ""
 
 #. TRANSLATORS: D = single letter to make a color darker
-#: dialogs.c:783 dialogs.c:789 dialogs.c:795 dialogs.c:801 dialogs.c:807
-#: dialogs.c:813
+#: dialogs.c:870 dialogs.c:876 dialogs.c:882 dialogs.c:888 dialogs.c:894
+#: dialogs.c:900
 msgid "D"
 msgstr ""
 
-#: dialogs.c:784
+#: dialogs.c:871
 msgid "Black Piece Color:"
 msgstr ""
 
-#: dialogs.c:790
+#: dialogs.c:877
 msgid "Light Square Color:"
 msgstr ""
 
-#: dialogs.c:796
+#: dialogs.c:883
 msgid "Dark Square Color:"
 msgstr ""
 
-#: dialogs.c:802
+#: dialogs.c:889
 msgid "Highlight Color:"
 msgstr ""
 
-#: dialogs.c:808
+#: dialogs.c:895
 msgid "Premove Highlight Color:"
 msgstr ""
 
-#: dialogs.c:814
+#: dialogs.c:901
 msgid "Flip Pieces Shogi Style        (Colored buttons restore default)"
 msgstr ""
 
-#: dialogs.c:816
+#: dialogs.c:903
 msgid "Mono Mode"
 msgstr ""
 
-#: dialogs.c:817
-msgid "Line Gap ( -1 = default for board size):"
+#: dialogs.c:904
+msgid "Line Gap (-1 = default for board size):"
 msgstr ""
 
-#: dialogs.c:818
+#: dialogs.c:905
 msgid "Use Board Textures"
 msgstr ""
 
-#: dialogs.c:819
+#: dialogs.c:906
 msgid "Light-Squares Texture File:"
 msgstr ""
 
-#: dialogs.c:820
+#: dialogs.c:907
 msgid "Dark-Squares Texture File:"
 msgstr ""
 
-#: dialogs.c:821
+#: dialogs.c:908
 msgid "Use external piece bitmaps with their own colors"
 msgstr ""
 
-#: dialogs.c:822
+#: dialogs.c:909
 msgid "Directory with Pieces Images:"
 msgstr ""
 
-#: dialogs.c:872
+#: dialogs.c:959
 msgid "Board Options"
 msgstr ""
 
-#: dialogs.c:925 menus.c:634
+#: dialogs.c:1012 menus.c:634
 msgid "ICS text menu"
 msgstr ""
 
-#: dialogs.c:947
+#: dialogs.c:1034
 msgid "clear"
 msgstr ""
 
-#: dialogs.c:948 dialogs.c:1036
+#: dialogs.c:1035 dialogs.c:1123
 msgid "save changes"
 msgstr ""
 
-#: dialogs.c:1051
+#: dialogs.c:1138
 #, fuzzy
 msgid "Edit book"
 msgstr "Soạn"
 
-#: dialogs.c:1051 menus.c:636
+#: dialogs.c:1138 menus.c:636
 msgid "Tags"
 msgstr "Các Thẻ"
 
-#: dialogs.c:1193
+#: dialogs.c:1280
 msgid "ICS input box"
 msgstr ""
 
-#: dialogs.c:1225
+#: dialogs.c:1312
 msgid "Type a move"
 msgstr ""
 
-#: dialogs.c:1251
+#: dialogs.c:1338
 msgid "Engine has no options"
 msgstr ""
 
-#: dialogs.c:1253
+#: dialogs.c:1340
 msgid "Engine Settings"
 msgstr ""
 
-#: dialogs.c:1278
+#: dialogs.c:1365
 msgid "Select engine from list:"
 msgstr ""
 
-#: dialogs.c:1281
+#: dialogs.c:1368
 msgid "or specify one below:"
 msgstr ""
 
-#: dialogs.c:1282
+#: dialogs.c:1369
 msgid "Nickname (optional):"
 msgstr ""
 
-#: dialogs.c:1283
+#: dialogs.c:1370
 msgid "Use nickname in PGN player tags of engine-engine games"
 msgstr ""
 
-#: dialogs.c:1284
+#: dialogs.c:1371
 msgid "Engine Directory:"
 msgstr ""
 
-#: dialogs.c:1285
+#: dialogs.c:1372
 msgid "Engine Command:"
 msgstr ""
 
-#: dialogs.c:1286
+#: dialogs.c:1373
 msgid "(Directory will be derived from engine path when empty)"
 msgstr ""
 
-#: dialogs.c:1287
+#: dialogs.c:1374
 msgid "UCI"
 msgstr ""
 
-#: dialogs.c:1288
+#: dialogs.c:1375
 msgid "WB protocol v1 (do not wait for engine features)"
 msgstr ""
 
-#: dialogs.c:1289
+#: dialogs.c:1376
 msgid "Must not use GUI book"
 msgstr ""
 
-#: dialogs.c:1290
+#: dialogs.c:1377
 msgid "Add this engine to the list"
 msgstr ""
 
-#: dialogs.c:1291
+#: dialogs.c:1378
 msgid "Force current variant with this engine"
 msgstr ""
 
-#: dialogs.c:1341
+#: dialogs.c:1428
 msgid "Load first engine"
 msgstr ""
 
-#: dialogs.c:1347
+#: dialogs.c:1434
 msgid "Load second engine"
 msgstr ""
 
-#: dialogs.c:1370
+#: dialogs.c:1457
 msgid "shuffle"
 msgstr ""
 
-#: dialogs.c:1371
+#: dialogs.c:1458
 msgid "Start-position number:"
 msgstr ""
 
-#: dialogs.c:1372
+#: dialogs.c:1459
 msgid "randomize"
 msgstr ""
 
-#: dialogs.c:1373
+#: dialogs.c:1460
 msgid "pick fixed"
 msgstr ""
 
-#: dialogs.c:1390
+#: dialogs.c:1477
 msgid "New Shuffle Game"
 msgstr "Tráo Bên..."
 
-#: dialogs.c:1409
+#: dialogs.c:1496
 msgid "classical"
 msgstr ""
 
-#: dialogs.c:1410
+#: dialogs.c:1497
 msgid "incremental"
 msgstr ""
 
-#: dialogs.c:1411
+#: dialogs.c:1498
 msgid "fixed max"
 msgstr ""
 
-#: dialogs.c:1412
+#: dialogs.c:1499
 msgid "Moves per session:"
 msgstr ""
 
-#: dialogs.c:1413
+#: dialogs.c:1500
 msgid "Initial time (min):"
 msgstr ""
 
-#: dialogs.c:1414
+#: dialogs.c:1501
 msgid "Increment or max (sec/move):"
 msgstr ""
 
-#: dialogs.c:1415
+#: dialogs.c:1502
 #, fuzzy
 msgid "Time-Odds factors:"
 msgstr "Hệ số thời gian lẻ"
 
-#: dialogs.c:1416
+#: dialogs.c:1503
 msgid "Engine #1"
 msgstr ""
 
-#: dialogs.c:1417
+#: dialogs.c:1504
 msgid "Engine #2 / Human"
 msgstr ""
 
-#: dialogs.c:1457 dialogs.c:1460 dialogs.c:1465 dialogs.c:1466
+#: dialogs.c:1544 dialogs.c:1547 dialogs.c:1552 dialogs.c:1553
 #: gtk/xoptions.c:194
 msgid "Unused"
 msgstr ""
 
-#: dialogs.c:1478
-msgid "Time Control"
-msgstr ""
-
-#: dialogs.c:1507
+#: dialogs.c:1594
 msgid "Error writing to chess program"
 msgstr ""
 
-#: dialogs.c:1574
+#: dialogs.c:1662 xaw/xoptions.c:1276
 #, fuzzy
 msgid "Cancel"
 msgstr "Bỏ"
 
-#: dialogs.c:1579 dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:1667 dialogs.c:2061 dialogs.c:2065
 msgid "King"
 msgstr "Vua"
 
-#: dialogs.c:1582
+#: dialogs.c:1670
 msgid "Captain"
 msgstr ""
 
-#: dialogs.c:1583
+#: dialogs.c:1671
 msgid "Lieutenant"
 msgstr ""
 
-#: dialogs.c:1584
+#: dialogs.c:1672
 msgid "General"
 msgstr "Chung..."
 
-#: dialogs.c:1585
+#: dialogs.c:1673
 msgid "Warlord"
 msgstr ""
 
-#: dialogs.c:1587 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1675 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Knight"
 msgstr "Mã"
 
-#: dialogs.c:1588 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1676 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Bishop"
 msgstr "Tượng"
 
-#: dialogs.c:1589 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1677 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Rook"
 msgstr "Xe"
 
-#: dialogs.c:1593 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1681 dialogs.c:2062 dialogs.c:2066
 msgid "Archbishop"
 msgstr "Sĩ"
 
-#: dialogs.c:1594 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1682 dialogs.c:2062 dialogs.c:2066
 msgid "Chancellor"
 msgstr "Xe"
 
-#: dialogs.c:1596 dialogs.c:1971 dialogs.c:1975 dialogs.c:1993
+#: dialogs.c:1684 dialogs.c:2061 dialogs.c:2065 dialogs.c:2083
 msgid "Queen"
 msgstr "Hoàng Hậu"
 
-#: dialogs.c:1600
+#: dialogs.c:1686
+msgid "Lion"
+msgstr ""
+
+#: dialogs.c:1690
 msgid "Defer"
 msgstr ""
 
-#: dialogs.c:1601 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1691 dialogs.c:2062 dialogs.c:2066
 msgid "Promote"
 msgstr "Phong Cấp"
 
-#: dialogs.c:1616
+#: dialogs.c:1706
 msgid "Chat partner:"
 msgstr ""
 
-#: dialogs.c:1701
+#: dialogs.c:1791
 msgid "Chat box"
 msgstr ""
 
-#: dialogs.c:1742
+#: dialogs.c:1832
 msgid "factory"
 msgstr ""
 
-#: dialogs.c:1743
+#: dialogs.c:1833
 msgid "up"
 msgstr ""
 
-#: dialogs.c:1744
+#: dialogs.c:1834
 msgid "down"
 msgstr ""
 
-#: dialogs.c:1762
+#: dialogs.c:1852
 msgid "No tag selected"
 msgstr ""
 
-#: dialogs.c:1793
+#: dialogs.c:1883
 #, fuzzy
 msgid "Game-list options"
 msgstr "Các Lựa Chọn Tải Ván Cờ"
 
-#: dialogs.c:1869 dialogs.c:1883
+#: dialogs.c:1959 dialogs.c:1973
 msgid "Error"
 msgstr ""
 
-#: dialogs.c:1906
+#: dialogs.c:1996
 msgid "Fatal Error"
 msgstr ""
 
-#: dialogs.c:1906
+#: dialogs.c:1996
 msgid "Exiting"
 msgstr ""
 
-#: dialogs.c:1917
+#: dialogs.c:2007
 msgid "Information"
 msgstr ""
 
-#: dialogs.c:1924
+#: dialogs.c:2014
 msgid "Note"
 msgstr ""
 
-#: dialogs.c:1970 dialogs.c:2245 dialogs.c:2248
+#: dialogs.c:2060 dialogs.c:2340 dialogs.c:2343
 msgid "White"
 msgstr "Trắng"
 
-#: dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Pawn"
 msgstr "Tốt"
 
-#: dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:2061 dialogs.c:2065
 msgid "Elephant"
 msgstr "Tượng"
 
-#: dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:2061 dialogs.c:2065
 msgid "Cannon"
 msgstr "Pháo"
 
-#: dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:2062 dialogs.c:2066
 msgid "Demote"
 msgstr ""
 
-#: dialogs.c:1973 dialogs.c:1977
+#: dialogs.c:2063 dialogs.c:2067
 msgid "Empty square"
 msgstr "Ô Trống"
 
-#: dialogs.c:1973 dialogs.c:1977
+#: dialogs.c:2063 dialogs.c:2067
 msgid "Clear board"
 msgstr "Xóa Bàn Cờ"
 
-#: dialogs.c:1974 dialogs.c:2257 dialogs.c:2260
+#: dialogs.c:2064 dialogs.c:2352 dialogs.c:2355
 msgid "Black"
 msgstr "Đen"
 
-#: dialogs.c:2073 menus.c:787
+#: dialogs.c:2163 menus.c:787
 msgid "File"
 msgstr ""
 
-#: dialogs.c:2074 menus.c:788
+#: dialogs.c:2164 menus.c:788
 msgid "Edit"
 msgstr "Soạn"
 
-#: dialogs.c:2075 menus.c:789
+#: dialogs.c:2165 menus.c:789
 msgid "View"
 msgstr ""
 
-#: dialogs.c:2076 menus.c:790
+#: dialogs.c:2166 menus.c:790
 msgid "Mode"
 msgstr ""
 
-#: dialogs.c:2077 menus.c:791
+#: dialogs.c:2167 menus.c:791
 msgid "Action"
 msgstr ""
 
-#: dialogs.c:2078 menus.c:792
+#: dialogs.c:2168 menus.c:792
 msgid "Engine"
 msgstr ""
 
-#: dialogs.c:2079 menus.c:793
+#: dialogs.c:2169 menus.c:793
 msgid "Options"
 msgstr ""
 
-#: dialogs.c:2080 menus.c:794
+#: dialogs.c:2170 menus.c:794
 msgid "Help"
 msgstr "Hướng Dẫn"
 
-#: dialogs.c:2090
+#: dialogs.c:2180
 msgid "<<"
 msgstr ""
 
-#: dialogs.c:2091
+#: dialogs.c:2181
 msgid "<"
 msgstr ""
 
-#: dialogs.c:2093
+#: dialogs.c:2183
 msgid ">"
 msgstr ""
 
-#: dialogs.c:2094
+#: dialogs.c:2184
 msgid ">>"
 msgstr ""
 
-#: dialogs.c:2364
+#: dialogs.c:2458
 msgid "Directories:"
 msgstr ""
 
-#: dialogs.c:2365
+#: dialogs.c:2459
 #, fuzzy
 msgid "Files:"
 msgstr "Lọc"
 
-#: dialogs.c:2366
+#: dialogs.c:2460
 msgid "by name"
 msgstr ""
 
-#: dialogs.c:2367
+#: dialogs.c:2461
 msgid "by type"
 msgstr ""
 
-#: dialogs.c:2370
+#: dialogs.c:2464
 #, fuzzy
 msgid "Filename:"
 msgstr "Lọc"
 
-#: dialogs.c:2371
+#: dialogs.c:2465
 msgid "New directory"
 msgstr ""
 
-#: dialogs.c:2372
+#: dialogs.c:2466
 #, fuzzy
 msgid "File type:"
 msgstr "Lọc"
 
-#: dialogs.c:2447
+#: dialogs.c:2541
 #, fuzzy
 msgid "Contents of"
 msgstr "Bình Chú"
 
-#: dialogs.c:2473
+#: dialogs.c:2567
 msgid "  next page"
 msgstr ""
 
-#: dialogs.c:2490
+#: dialogs.c:2584
 msgid "FIRST TYPE DIRECTORY NAME HERE"
 msgstr ""
 
-#: dialogs.c:2491
+#: dialogs.c:2585
 msgid "TRY ANOTHER NAME"
 msgstr ""
 
-#: draw.c:293
+#: draw.c:310
 msgid ""
-"No default pieces installed\n"
-"Select your own -pieceImageDirectory"
+"No default pieces installed!\n"
+"Select your own using '-pieceImageDirectory'."
 msgstr ""
 
-#: engineoutput.c:107 menus.c:630
+#: engineoutput.c:110 menus.c:630
 #, fuzzy, c-format
 msgid "Engine Output"
 msgstr "In Ra Của Các Chương Trình Cờ   Alt+Shift+O"
 
-#: engineoutput.c:117
+#: engineoutput.c:120
 #, c-format
 msgid "%s (%d reversible ply)"
 msgid_plural "%s (%d reversible plies)"
 msgstr[0] ""
 msgstr[1] ""
 
-#: engineoutput.c:509 engineoutput.c:512 nengineoutput.c:81 nengineoutput.c:88
+#: engineoutput.c:542 engineoutput.c:545 nengineoutput.c:82 nengineoutput.c:90
 msgid "NPS"
 msgstr ""
 
@@ -2166,50 +2243,50 @@ msgstr ""
 msgid "Reading game file (%d)"
 msgstr ""
 
-#: gtk/xboard.c:844 xaw/xboard.c:1162
+#: gtk/xboard.c:867 xaw/xboard.c:1052
 #, c-format
 msgid "%s: can't cd to CHESSDIR: "
 msgstr ""
 
-#: gtk/xboard.c:853 xaw/xboard.c:1171
+#: gtk/xboard.c:876 xaw/xboard.c:1061
 #, c-format
 msgid "Failed to open file '%s'\n"
 msgstr ""
 
-#: gtk/xboard.c:868 xaw/xboard.c:1180
+#: gtk/xboard.c:891 xaw/xboard.c:1070
 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size"
 msgstr ""
 
-#: gtk/xboard.c:887 xaw/xboard.c:1212
+#: gtk/xboard.c:910 xaw/xboard.c:1102
 #, c-format
 msgid "%s: bad boardSize syntax %s\n"
 msgstr ""
 
-#: gtk/xboard.c:927 xaw/xboard.c:1249
+#: gtk/xboard.c:950 xaw/xboard.c:1139
 #, c-format
 msgid "%s: unrecognized boardSize name %s\n"
 msgstr ""
 
-#: gtk/xboard.c:968 xaw/xboard.c:1286
+#: gtk/xboard.c:991 xaw/xboard.c:1176
 #, c-format
 msgid "%s: too few colors available; trying monochrome mode\n"
 msgstr ""
 
-#: gtk/xboard.c:1258 xaw/xboard.c:1568
+#: gtk/xboard.c:1281 xaw/xboard.c:1458
 #, c-format
 msgid "Unable to create font set for %s.\n"
 msgstr ""
 
-#: gtk/xboard.c:1283 xaw/xboard.c:1591
+#: gtk/xboard.c:1306 xaw/xboard.c:1481
 #, c-format
 msgid "%s: no fonts match pattern %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1722 xaw/xboard.c:2081
+#: gtk/xboard.c:1745 xaw/xboard.c:1971
 msgid "Can't open temp file"
 msgstr ""
 
-#: gtk/xboard.c:2174
+#: gtk/xboard.c:2199
 msgid "Failed to open file"
 msgstr ""
 
@@ -2264,12 +2341,13 @@ msgid "New Game"
 msgstr "Tráo Bên..."
 
 #: menus.c:583
-msgid "New Shuffle Game ..."
+#, fuzzy
+msgid "New Shuffle Game..."
 msgstr "Tráo Bên..."
 
 #: menus.c:584
 #, fuzzy
-msgid "New Variant ..."
+msgid "New Variant..."
 msgstr "Biến Mới...   Alt+Shift+V"
 
 #: menus.c:586
@@ -2537,19 +2615,22 @@ msgid "Adjudicate Draw"
 msgstr "Phân Xử Hòa"
 
 #: menus.c:684
-msgid "Load New 1st Engine ..."
+msgid "Load New 1st Engine..."
 msgstr ""
 
 #: menus.c:685
-msgid "Load New 2nd Engine ..."
-msgstr ""
+#, fuzzy
+msgid "Load New 2nd Engine..."
+msgstr "Chương Trình Cờ Chung...   Alt+Shift+U"
 
 #: menus.c:687
-msgid "Engine #1 Settings ..."
+#, fuzzy
+msgid "Engine #1 Settings..."
 msgstr "Đặt Tham Số Cho Chương Trình Chơi 1..."
 
 #: menus.c:688
-msgid "Engine #2 Settings ..."
+#, fuzzy
+msgid "Engine #2 Settings..."
 msgstr "Đặt Tham Số Cho Chương Trình Chơi 2..."
 
 #: menus.c:690
@@ -2570,46 +2651,51 @@ msgid "Retract Move"
 msgstr "Hoãn Nước Đi Vừa Rồi   Ctrl+X"
 
 #: menus.c:700
-msgid "General ..."
+#, fuzzy
+msgid "General..."
 msgstr "Chung..."
 
 #: menus.c:702
 #, fuzzy
-msgid "Time Control ..."
+msgid "Time Control..."
 msgstr "Đặt Thời Gian...   Alt+Shift+T"
 
 #: menus.c:703
 #, fuzzy
-msgid "Common Engine ..."
+msgid "Common Engine..."
 msgstr "Chương Trình Cờ Chung...   Alt+Shift+U"
 
 #: menus.c:704
 #, fuzzy
-msgid "Adjudications ..."
+msgid "Adjudications..."
 msgstr "Phân Xử Kết Quả...   Alt+Shift+J"
 
 #: menus.c:705
-msgid "ICS ..."
-msgstr "ICS..."
+msgid "ICS..."
+msgstr ""
 
 #: menus.c:706
-msgid "Match ..."
+msgid "Tournament..."
 msgstr ""
 
 #: menus.c:707
-msgid "Load Game ..."
+#, fuzzy
+msgid "Load Game..."
 msgstr "Tải Ván Cờ...   Alt+Shift+L"
 
 #: menus.c:708
-msgid "Save Game ..."
+#, fuzzy
+msgid "Save Game..."
 msgstr "Lưu Ván Cờ...   Alt+Shift+S"
 
 #: menus.c:709
-msgid "Game List ..."
+#, fuzzy
+msgid "Game List..."
 msgstr "Danh Sách Ván Cờ"
 
 #: menus.c:710
-msgid "Sounds ..."
+#, fuzzy
+msgid "Sounds..."
 msgstr "Âm Thanh"
 
 #: menus.c:713
@@ -2681,20 +2767,21 @@ msgstr ""
 msgid "e-Mail Bug Report"
 msgstr ""
 
-#: nengineoutput.c:78 nengineoutput.c:85
+#: nengineoutput.c:78 nengineoutput.c:86
 msgid "engine name"
 msgstr ""
 
-#: nengineoutput.c:80 nengineoutput.c:87
+#. TRANSLATORS: noun, as in "the move Nf3"
+#: nengineoutput.c:81 nengineoutput.c:89
 #, fuzzy
 msgid "move"
 msgstr "số giây mỗi nước"
 
-#: nengineoutput.c:153
+#: nengineoutput.c:155
 msgid "Engine output"
 msgstr ""
 
-#: nengineoutput.c:157
+#: nengineoutput.c:159
 msgid ""
 "Mismatch of STRIDE in nengineoutput.c\n"
 "Change and recompile!"
@@ -2779,7 +2866,7 @@ msgstr ""
 
 #: usystem.c:230
 #, c-format
-msgid "%s: can't parse foreground color in `%s'\n"
+msgid "%s: can't parse foreground color in '%s'\n"
 msgstr ""
 
 #: usystem.c:259
@@ -2787,54 +2874,25 @@ msgstr ""
 msgid "%s: can't parse color names; disabling colorization\n"
 msgstr ""
 
-#: usystem.c:371
+#: usystem.c:374
 #, c-format
 msgid "ERROR: Unknown user %s (in path %s)\n"
 msgstr ""
 
-#: usystem.c:556
+#: usystem.c:557
 msgid "Socket support is not configured in"
 msgstr ""
 
-#: usystem.c:645
+#: usystem.c:646
 msgid "internal rcmd not implemented for Unix"
 msgstr ""
 
-#: xaw/xboard.c:478
-#, c-format
-msgid "%s: Can't access XPM directory %s\n"
-msgstr ""
-
-#: xaw/xboard.c:499
-#, c-format
-msgid "Available `%s' sizes:\n"
-msgstr ""
-
-#: xaw/xboard.c:532
-#, c-format
-msgid "Error: No `%s' files!\n"
-msgstr ""
-
-#: xaw/xboard.c:545
-#, c-format
-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 ""
-
-#: xaw/xboard.c:1292
+#: xaw/xboard.c:1182
 #, c-format
 msgid "white pixel = 0x%lx, black pixel = 0x%lx\n"
 msgstr ""
 
-#: xaw/xengineoutput.c:115
-#, c-format
-msgid "Error %d loading icon image\n"
-msgstr ""
-
-#: xaw/xoptions.c:321 xaw/xoptions.c:1023
+#: xaw/xoptions.c:321 xaw/xoptions.c:1025
 msgid "browse"
 msgstr ""
 
@@ -2850,13 +2908,15 @@ msgstr ""
 msgid "Shift"
 msgstr ""
 
-#: xaw/xoptions.c:1270
+#: xaw/xoptions.c:1272
 msgid "OK"
 msgstr "Được"
 
-#: xaw/xoptions.c:1274
-msgid "cancel"
-msgstr "Bỏ"
+#~ msgid "ICS ..."
+#~ msgstr "ICS..."
+
+#~ msgid "cancel"
+#~ msgstr "Bỏ"
 
 #~ msgid "New Game        Ctrl+N"
 #~ msgstr "Ván Mới   Ctrl+N"
index 950293a..db43d37 100644 (file)
@@ -6,9 +6,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: GNU xboard 4.7.3\n"
+"Project-Id-Version: GNU xboard master-20140119\n"
 "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n"
-"POT-Creation-Date: 2014-01-05 12:51-0800\n"
+"POT-Creation-Date: 2014-01-19 22:19-0800\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,558 +18,581 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
 
-#: args.h:820
+#: args.h:833
 #, c-format
 msgid "%s in settings file\n"
 msgstr ""
 
-#: args.h:830
+#: args.h:867
 #, c-format
 msgid "Bad integer value %s"
 msgstr ""
 
-#: args.h:923 args.h:1170
+#: args.h:968 args.h:1229
 #, c-format
 msgid "Unrecognized argument %s"
 msgstr ""
 
-#: args.h:954
+#: args.h:999
 #, c-format
 msgid "No value provided for argument %s"
 msgstr ""
 
-#: args.h:1014
+#: args.h:1059
 #, c-format
 msgid "Incomplete \\ escape in value for %s"
 msgstr ""
 
-#: args.h:1125
+#: args.h:1170
 #, c-format
 msgid "Failed to open indirection file %s"
 msgstr ""
 
-#: args.h:1142
+#: args.h:1187
 #, c-format
 msgid "Unrecognized boolean argument value %s"
 msgstr ""
 
 #. 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:744
+#: backend.c:800
 msgid "first"
 msgstr ""
 
 #. 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:747
+#: backend.c:803
 msgid "second"
 msgstr ""
 
-#: backend.c:827
+#: backend.c:885
 #, c-format
 msgid "protocol version %d not supported"
 msgstr ""
 
-#: backend.c:933
+#: backend.c:991
 msgid "You did not specify the engine executable"
 msgstr ""
 
-#: backend.c:989
+#: backend.c:1049
 #, c-format
 msgid "bad timeControl option %s"
 msgstr ""
 
-#: backend.c:1004
+#: backend.c:1064
 #, c-format
 msgid "bad searchTime option %s"
 msgstr ""
 
-#: backend.c:1110
+#: backend.c:1170
 #, c-format
 msgid "Variant %s supported only in ICS mode"
 msgstr ""
 
-#: backend.c:1128
+#: backend.c:1188
 #, c-format
 msgid "Unknown variant name %s"
 msgstr ""
 
-#: backend.c:1375
+#: backend.c:1439
 msgid "Starting chess program"
 msgstr ""
 
-#: backend.c:1398
+#: backend.c:1462
 msgid "Bad game file"
 msgstr ""
 
-#: backend.c:1405
+#: backend.c:1469
 msgid "Bad position file"
 msgstr ""
 
-#: backend.c:1419
+#: backend.c:1483
 msgid "Pick new game"
 msgstr ""
 
-#: backend.c:1488
+#: backend.c:1552
 msgid ""
-"You restarted an already completed tourney\n"
-"One more cycle will now be added to it\n"
-"Games commence in 10 sec"
+"You restarted an already completed tourney.\n"
+"One more cycle will now be added to it.\n"
+"Games commence in 10 sec."
 msgstr ""
 
-#: backend.c:1495
+#: backend.c:1559
 #, c-format
 msgid "All games in tourney '%s' are already played or playing"
 msgstr ""
 
-#: backend.c:1502
+#: backend.c:1566
 msgid "Can't have a match with no chess programs"
 msgstr ""
 
-#: backend.c:1539
+#: backend.c:1620
 #, c-format
 msgid "Could not open comm port %s"
 msgstr ""
 
-#: backend.c:1542
+#: backend.c:1623
 #, c-format
 msgid "Could not connect to host %s, port %s"
 msgstr ""
 
-#: backend.c:1598
+#: backend.c:1679
 #, c-format
 msgid "Unknown initialMode %s"
 msgstr ""
 
-#: backend.c:1624
+#: backend.c:1705
 msgid "AnalyzeFile mode requires a game file"
 msgstr ""
 
-#: backend.c:1651
+#: backend.c:1732
 msgid "Analysis mode requires a chess engine"
 msgstr ""
 
-#: backend.c:1655
+#: backend.c:1736
 msgid "Analysis mode does not work with ICS mode"
 msgstr ""
 
-#: backend.c:1666
+#: backend.c:1747
 msgid "MachineWhite mode requires a chess engine"
 msgstr ""
 
-#: backend.c:1671
+#: backend.c:1752
 msgid "MachineWhite mode does not work with ICS mode"
 msgstr ""
 
-#: backend.c:1678
+#: backend.c:1759
 msgid "MachineBlack mode requires a chess engine"
 msgstr ""
 
-#: backend.c:1683
+#: backend.c:1764
 msgid "MachineBlack mode does not work with ICS mode"
 msgstr ""
 
-#: backend.c:1690
+#: backend.c:1771
 msgid "TwoMachines mode requires a chess engine"
 msgstr ""
 
-#: backend.c:1695
+#: backend.c:1776
 msgid "TwoMachines mode does not work with ICS mode"
 msgstr ""
 
-#: backend.c:1706
+#: backend.c:1787
 msgid "Training mode requires a game file"
 msgstr ""
 
-#: backend.c:1869 backend.c:1924 backend.c:1947 backend.c:2346
+#: backend.c:1950 backend.c:2005 backend.c:2028 backend.c:2430
 msgid "Error writing to ICS"
 msgstr ""
 
-#: backend.c:1884
+#: backend.c:1965
 msgid "Error reading from keyboard"
 msgstr ""
 
-#: backend.c:1887
+#: backend.c:1968
 msgid "Got end of file from keyboard"
 msgstr ""
 
-#: backend.c:2192
+#: backend.c:2276
 #, c-format
 msgid "Unknown wild type %d"
 msgstr ""
 
-#: backend.c:2263 usystem.c:329
+#: backend.c:2347 usystem.c:329
 msgid "Error writing to display"
 msgstr ""
 
-#: backend.c:3019
+#. TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers
+#: backend.c:3105
 #, c-format
 msgid "your opponent kibitzes: %s"
 msgstr ""
 
-#: backend.c:3548
+#: backend.c:3634
 msgid "Error gathering move list: two headers"
 msgstr ""
 
-#: backend.c:3595
+#: backend.c:3681
 msgid "Error gathering move list: nested"
 msgstr ""
 
-#: backend.c:3699 backend.c:4117 backend.c:4321 backend.c:4880 backend.c:4884
-#: backend.c:6900 backend.c:12101 backend.c:13816 backend.c:13893
-#: backend.c:13939 backend.c:13945 backend.c:13950 backend.c:13955
+#: backend.c:3785 backend.c:4203 backend.c:4407 backend.c:4966 backend.c:4970
+#: backend.c:7073 backend.c:12577 backend.c:14306 backend.c:14383
+#: backend.c:14429 backend.c:14435 backend.c:14440 backend.c:14445
 msgid "vs."
 msgstr ""
 
-#: backend.c:3827
+#: backend.c:3913
 msgid "Illegal move (rejected by ICS)"
 msgstr ""
 
-#: backend.c:4165
+#: backend.c:4251
 msgid "Connection closed by ICS"
 msgstr ""
 
-#: backend.c:4167
+#: backend.c:4253
 msgid "Error reading from ICS"
 msgstr ""
 
-#: backend.c:4244
+#: backend.c:4330
 #, c-format
 msgid ""
 "Failed to parse board string:\n"
 "\"%s\""
 msgstr ""
 
-#: backend.c:4253 backend.c:9756
+#: backend.c:4339 backend.c:10203
 msgid "Game too long; increase MAX_MOVES and recompile"
 msgstr ""
 
-#: backend.c:4372
+#: backend.c:4458
 msgid "Error gathering move list: extra board"
 msgstr ""
 
-#: backend.c:4804 backend.c:4826
+#: backend.c:4890 backend.c:4912
 #, c-format
 msgid "Couldn't parse move \"%s\" from ICS"
 msgstr ""
 
-#: backend.c:5063
+#: backend.c:5161
 #, c-format
 msgid "say Internal error; bad moveType %d (%d,%d-%d,%d)"
 msgstr ""
 
-#: backend.c:5133
+#: backend.c:5232
 msgid "You cannot do this while you are playing or observing"
 msgstr ""
 
-#: backend.c:6029
+#: backend.c:6174
 msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!"
 msgstr ""
 
-#: backend.c:6491
+#: backend.c:6664
 msgid "You are playing Black"
 msgstr ""
 
-#: backend.c:6500 backend.c:6527
+#: backend.c:6673 backend.c:6700
 msgid "You are playing White"
 msgstr ""
 
-#: backend.c:6509 backend.c:6535 backend.c:6655 backend.c:6680 backend.c:6696
-#: backend.c:14592
+#: backend.c:6682 backend.c:6708 backend.c:6828 backend.c:6853 backend.c:6869
+#: backend.c:15113
 msgid "It is White's turn"
 msgstr ""
 
-#: backend.c:6513 backend.c:6539 backend.c:6663 backend.c:6686 backend.c:6717
-#: backend.c:14584
+#: backend.c:6686 backend.c:6712 backend.c:6836 backend.c:6859 backend.c:6890
+#: backend.c:15105
 msgid "It is Black's turn"
 msgstr ""
 
-#: backend.c:6552
+#: backend.c:6725
 msgid "Displayed position is not current"
 msgstr ""
 
-#: backend.c:6790
+#: backend.c:6963
 msgid "Illegal move"
 msgstr ""
 
-#: backend.c:6857
+#: backend.c:7030
 msgid "End of game"
 msgstr ""
 
-#: backend.c:6860
+#: backend.c:7033
 msgid "Incorrect move"
 msgstr ""
 
-#: backend.c:7169 backend.c:7296
+#: backend.c:7423 backend.c:7569
 msgid "Pull pawn backwards to under-promote"
 msgstr ""
 
-#: backend.c:7527
+#: backend.c:7532
+msgid "only marked squares are legal"
+msgstr ""
+
+#: backend.c:7820
 msgid "Swiss tourney finished"
 msgstr ""
 
-#: backend.c:8103
+#: backend.c:8336
+msgid "could not load EGBB library"
+msgstr ""
+
+#: backend.c:8339
+msgid "wrong EGBB version"
+msgstr ""
+
+#: backend.c:8452
 msgid "Invalid pairing from pairing engine"
 msgstr ""
 
-#: backend.c:8236
+#: backend.c:8603
 #, c-format
 msgid "Illegal move \"%s\" from %s machine"
 msgstr ""
 
-#: backend.c:8457
+#: backend.c:8849
 msgid "Bad FEN received from engine"
 msgstr ""
 
-#: backend.c:8601 backend.c:13681 backend.c:13746
+#: backend.c:8950
+msgid "Engine did not send setup for non-standard variant"
+msgstr ""
+
+#: backend.c:9023 backend.c:14168 backend.c:14236
 #, c-format
 msgid "%s does not support analysis"
 msgstr ""
 
-#: backend.c:8667
+#: backend.c:9089
 #, c-format
 msgid "Illegal move \"%s\" (rejected by %s chess program)"
 msgstr ""
 
-#: backend.c:8694
+#: backend.c:9116
 #, c-format
 msgid "Failed to start %s chess program %s on %s: %s\n"
 msgstr ""
 
-#: backend.c:8715
+#: backend.c:9137
 #, c-format
 msgid "Hint: %s"
 msgstr ""
 
-#: backend.c:8720
+#: backend.c:9142
 #, c-format
 msgid ""
 "Illegal hint move \"%s\"\n"
 "from %s chess program"
 msgstr ""
 
-#: backend.c:8895
+#: backend.c:9317
 msgid "Machine accepts your draw offer"
 msgstr ""
 
-#: backend.c:8898
+#: backend.c:9320
 msgid ""
-"Machine offers a draw\n"
-"Select Action / Draw to agree"
+"Machine offers a draw.\n"
+"Select Action / Draw to accept."
 msgstr ""
 
-#: backend.c:8977
+#. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone
+#: backend.c:9402
 msgid "failed writing PV"
 msgstr ""
 
-#: backend.c:9275
+#: backend.c:9701
 #, c-format
 msgid "Ambiguous move in ICS output: \"%s\""
 msgstr ""
 
-#: backend.c:9285
+#: backend.c:9711
 #, c-format
 msgid "Illegal move in ICS output: \"%s\""
 msgstr ""
 
-#: backend.c:9296
+#: backend.c:9722
 msgid "Gap in move list"
 msgstr ""
 
-#: backend.c:9917 dialogs.c:460
+#: backend.c:10357
 #, c-format
 msgid "Variant %s not supported by %s"
 msgstr ""
 
-#: backend.c:10038
+#: backend.c:10364
+#, c-format
+msgid ", but %s is"
+msgstr ""
+
+#: backend.c:10506
 #, c-format
 msgid "Startup failure on '%s'"
 msgstr ""
 
-#: backend.c:10069
+#: backend.c:10537
 msgid "Waiting for first chess program"
 msgstr ""
 
-#: backend.c:10074 backend.c:13964
+#: backend.c:10542 backend.c:14454
 msgid "Waiting for second chess program"
 msgstr ""
 
-#: backend.c:10123
+#: backend.c:10591
 msgid "Could not write on tourney file"
 msgstr ""
 
-#: backend.c:10197
+#: backend.c:10665
 msgid ""
 "You cannot replace an engine while it is engaged!\n"
 "Terminate its game first."
 msgstr ""
 
-#: backend.c:10211
+#: backend.c:10679
 msgid "No engine with the name you gave is installed"
 msgstr ""
 
-#: backend.c:10213
+#: backend.c:10681
 msgid ""
 "First change an engine by editing the participants list\n"
 "of the Tournament Options dialog"
 msgstr ""
 
-#: backend.c:10214
+#: backend.c:10682
 msgid "You can only change one engine at the time"
 msgstr ""
 
-#: backend.c:10229 backend.c:10376
+#: backend.c:10697 backend.c:10845
 #, c-format
 msgid "No engine %s is installed"
 msgstr ""
 
-#: backend.c:10249
+#: backend.c:10717
 msgid ""
 "You must supply a tournament file,\n"
 "for storing the tourney progress"
 msgstr ""
 
-#: backend.c:10259
+#: backend.c:10727
 msgid "Not enough participants"
 msgstr ""
 
-#: backend.c:10460
+#: backend.c:10929
 msgid "Bad tournament file"
 msgstr ""
 
-#: backend.c:10472
+#: backend.c:10941
 msgid "Waiting for other game(s)"
 msgstr ""
 
-#: backend.c:10485
+#: backend.c:10954
 msgid "No pairing engine specified"
 msgstr ""
 
-#: backend.c:10962
+#: backend.c:11430
 #, c-format
 msgid "Match %s vs. %s: final score %d-%d-%d"
 msgstr ""
 
-#: backend.c:11424 backend.c:11455
+#: backend.c:11897 backend.c:11928
 #, c-format
 msgid "Illegal move: %d.%s%s"
 msgstr ""
 
-#: backend.c:11444
+#: backend.c:11917
 #, c-format
 msgid "Ambiguous move: %d.%s%s"
 msgstr ""
 
-#: backend.c:11497 backend.c:12524 backend.c:12717 backend.c:13078
+#: backend.c:11971 backend.c:13010 backend.c:13203 backend.c:13567
 #, c-format
 msgid "Can't open \"%s\""
 msgstr ""
 
-#: backend.c:11509 menus.c:116
+#: backend.c:11983 menus.c:116
 msgid "Cannot build game list"
 msgstr ""
 
-#: backend.c:11594
+#: backend.c:12068
 msgid "No more games in this message"
 msgstr ""
 
-#: backend.c:11634
+#: backend.c:12108
 msgid "No game has been loaded yet"
 msgstr ""
 
-#: backend.c:11638 backend.c:12505 ngamelist.c:129
+#: backend.c:12112 backend.c:12991 ngamelist.c:129
 msgid "Can't back up any further"
 msgstr ""
 
-#: backend.c:12077
+#: backend.c:12553
 msgid "Game number out of range"
 msgstr ""
 
-#: backend.c:12088
+#: backend.c:12564
 msgid "Can't seek on game file"
 msgstr ""
 
-#: backend.c:12146
+#: backend.c:12622
 msgid "Game not found in file"
 msgstr ""
 
-#: backend.c:12274 backend.c:12601
+#: backend.c:12751 backend.c:13087
 msgid "Bad FEN position in file"
 msgstr ""
 
-#: backend.c:12426
+#: backend.c:12903
 msgid "No moves in game"
 msgstr ""
 
-#: backend.c:12501
+#: backend.c:12987
 msgid "No position has been loaded yet"
 msgstr ""
 
-#: backend.c:12562 backend.c:12573
+#: backend.c:13048 backend.c:13059
 msgid "Can't seek on position file"
 msgstr ""
 
-#: backend.c:12580 backend.c:12592
+#: backend.c:13066 backend.c:13078
 msgid "Position not found in file"
 msgstr ""
 
-#: backend.c:12632
+#: backend.c:13118
 msgid "Black to play"
 msgstr ""
 
-#: backend.c:12635
+#: backend.c:13121
 msgid "White to play"
 msgstr ""
 
-#: backend.c:12722 backend.c:13083
+#: backend.c:13208 backend.c:13572
 msgid "Waiting for access to save file"
 msgstr ""
 
-#: backend.c:12724
+#: backend.c:13210
 msgid "Saving game"
 msgstr ""
 
-#: backend.c:12725
+#: backend.c:13211
 msgid "Bad Seek"
 msgstr ""
 
-#: backend.c:13085
+#: backend.c:13574
 msgid "Saving position"
 msgstr ""
 
-#: backend.c:13211
+#: backend.c:13700
 msgid ""
 "You have edited the game history.\n"
 "Use Reload Same Game and make your move again."
 msgstr ""
 
-#: backend.c:13216
+#: backend.c:13705
 msgid ""
 "You have entered too many moves.\n"
 "Back up to the correct position and try again."
 msgstr ""
 
-#: backend.c:13221
+#: backend.c:13710
 msgid ""
 "Displayed position is not current.\n"
 "Step forward to the correct position and try again."
 msgstr ""
 
-#: backend.c:13268
+#: backend.c:13757
 msgid "You have not made a move yet"
 msgstr ""
 
-#: backend.c:13289
+#: backend.c:13778
 msgid ""
 "The cmail message is not loaded.\n"
 "Use Reload CMail Message and make your move again."
 msgstr ""
 
-#: backend.c:13294
+#: backend.c:13783
 msgid "No unfinished games"
 msgstr ""
 
-#: backend.c:13300
+#: backend.c:13789
 #, c-format
 msgid ""
 "You have already mailed a move.\n"
@@ -579,209 +602,209 @@ msgid ""
 "on the command line."
 msgstr ""
 
-#: backend.c:13315
+#: backend.c:13804
 msgid "Failed to invoke cmail"
 msgstr ""
 
-#: backend.c:13377
+#: backend.c:13866
 #, c-format
 msgid "Waiting for reply from opponent\n"
 msgstr ""
 
-#: backend.c:13399
+#: backend.c:13888
 #, c-format
 msgid "Still need to make move for game\n"
 msgstr ""
 
-#: backend.c:13403
+#: backend.c:13892
 #, c-format
 msgid "Still need to make moves for both games\n"
 msgstr ""
 
-#: backend.c:13407
+#: backend.c:13896
 #, c-format
 msgid "Still need to make moves for all %d games\n"
 msgstr ""
 
-#: backend.c:13414
+#: backend.c:13903
 #, c-format
 msgid "Still need to make a move for game %s\n"
 msgstr ""
 
-#: backend.c:13420
+#: backend.c:13909
 #, c-format
 msgid "No unfinished games\n"
 msgstr ""
 
-#: backend.c:13422
+#: backend.c:13911
 #, c-format
 msgid "Ready to send mail\n"
 msgstr ""
 
-#: backend.c:13427
+#: backend.c:13916
 #, c-format
 msgid "Still need to make moves for games %s\n"
 msgstr ""
 
-#: backend.c:13631
+#: backend.c:14118
 msgid "Edit comment"
 msgstr ""
 
-#: backend.c:13633
+#: backend.c:14120
 #, c-format
 msgid "Edit comment on %d.%s%s"
 msgstr ""
 
-#: backend.c:13688
+#: backend.c:14175
 #, c-format
 msgid "You are not observing a game"
 msgstr ""
 
-#: backend.c:13796
+#: backend.c:14286
 msgid "It is not White's turn"
 msgstr ""
 
-#: backend.c:13877
+#: backend.c:14367
 msgid "It is not Black's turn"
 msgstr ""
 
-#: backend.c:13985
+#: backend.c:14475
 #, c-format
 msgid "Starting %s chess program"
 msgstr ""
 
-#: backend.c:14013 backend.c:15127
+#: backend.c:14503 backend.c:15648
 msgid ""
 "Wait until your turn,\n"
-"or select Move Now"
+"or select 'Move Now'."
 msgstr ""
 
-#: backend.c:14147
+#: backend.c:14638
 msgid "Training mode off"
 msgstr ""
 
-#: backend.c:14155
+#: backend.c:14646
 msgid "Training mode on"
 msgstr ""
 
-#: backend.c:14158
+#: backend.c:14649
 msgid "Already at end of game"
 msgstr ""
 
-#: backend.c:14238
+#: backend.c:14729
 msgid "Warning: You are still playing a game"
 msgstr ""
 
-#: backend.c:14241
+#: backend.c:14732
 msgid "Warning: You are still observing a game"
 msgstr ""
 
-#: backend.c:14244
+#: backend.c:14735
 msgid "Warning: You are still examining a game"
 msgstr ""
 
-#: backend.c:14311
+#: backend.c:14802
 msgid "Click clock to clear board"
 msgstr ""
 
-#: backend.c:14321
+#: backend.c:14812
 msgid "Close ICS engine analyze..."
 msgstr ""
 
-#: backend.c:14609
+#: backend.c:15130
 msgid "That square is occupied"
 msgstr ""
 
-#: backend.c:14633 backend.c:14659
+#: backend.c:15154 backend.c:15180
 msgid "There is no pending offer on this move"
 msgstr ""
 
-#: backend.c:14695 backend.c:14706
+#: backend.c:15216 backend.c:15227
 msgid "Your opponent is not out of time"
 msgstr ""
 
-#: backend.c:14772
+#: backend.c:15293
 msgid "You must make your move before offering a draw"
 msgstr ""
 
-#: backend.c:15109
+#: backend.c:15630
 msgid "You are not examining a game"
 msgstr ""
 
-#: backend.c:15113
+#: backend.c:15634
 msgid "You can't revert while pausing"
 msgstr ""
 
-#: backend.c:15167 backend.c:15174
+#: backend.c:15688 backend.c:15695
 msgid "It is your turn"
 msgstr ""
 
-#: backend.c:15225 backend.c:15232 backend.c:15285 backend.c:15292
-msgid "Wait until your turn"
+#: backend.c:15746 backend.c:15753 backend.c:15806 backend.c:15813
+msgid "Wait until your turn."
 msgstr ""
 
-#: backend.c:15237
+#: backend.c:15758
 msgid "No hint available"
 msgstr ""
 
-#: backend.c:15253 ngamelist.c:355
+#: backend.c:15774 ngamelist.c:355
 msgid "Game list not loaded or empty"
 msgstr ""
 
-#: backend.c:15260
+#: backend.c:15781
 msgid "Book file exists! Try again for overwrite."
 msgstr ""
 
-#: backend.c:15738
+#: backend.c:16259
 #, c-format
 msgid "Error writing to %s chess program"
 msgstr ""
 
-#: backend.c:15741 backend.c:15772
+#: backend.c:16262 backend.c:16293
 #, c-format
 msgid "%s program exits in draw position (%s)"
 msgstr ""
 
-#: backend.c:15767
+#: backend.c:16288
 #, c-format
 msgid "Error: %s chess program (%s) exited unexpectedly"
 msgstr ""
 
-#: backend.c:15785
+#: backend.c:16306
 #, c-format
 msgid "Error reading from %s chess program (%s)"
 msgstr ""
 
-#: backend.c:16187
+#: backend.c:16730
 #, c-format
 msgid "%s engine has too many options\n"
 msgstr ""
 
-#: backend.c:16343
+#: backend.c:16886
 msgid "Displayed move is not current"
 msgstr ""
 
-#: backend.c:16352
+#: backend.c:16895
 msgid "Could not parse move"
 msgstr ""
 
-#: backend.c:16477 backend.c:16499
+#: backend.c:17020 backend.c:17042
 msgid "Both flags fell"
 msgstr ""
 
-#: backend.c:16479
+#: backend.c:17022
 msgid "White's flag fell"
 msgstr ""
 
-#: backend.c:16501
+#: backend.c:17044
 msgid "Black's flag fell"
 msgstr ""
 
-#: backend.c:16632
+#: backend.c:17175
 msgid "Clock adjustment not allowed in auto-flag mode"
 msgstr ""
 
-#: backend.c:17467
+#: backend.c:18025
 msgid "Bad FEN position in clipboard"
 msgstr ""
 
@@ -801,1353 +824,1404 @@ msgstr ""
 msgid "Could not create book"
 msgstr ""
 
-#: dialogs.c:259
+#: dialogs.c:283
 msgid "Tournament file:          "
 msgstr ""
 
-#: dialogs.c:260
-msgid "Sync after round"
+#: dialogs.c:284
+msgid "For concurrent playing of tourney with multiple XBoards:"
 msgstr ""
 
-#: dialogs.c:261
-msgid "    (for concurrent playing of a single"
+#: dialogs.c:285
+msgid "Sync after round"
 msgstr ""
 
-#: dialogs.c:262
+#: dialogs.c:286
 msgid "Sync after cycle"
 msgstr ""
 
-#: dialogs.c:263
-msgid "      tourney with multiple XBoards)"
-msgstr ""
-
-#: dialogs.c:264
+#: dialogs.c:287
 msgid "Tourney participants:"
 msgstr ""
 
-#: dialogs.c:265
+#: dialogs.c:288
 msgid "Select Engine:"
 msgstr ""
 
-#: dialogs.c:273
+#: dialogs.c:296
 msgid "Tourney type (0 = round-robin, 1 = gauntlet):"
 msgstr ""
 
-#: dialogs.c:274
+#: dialogs.c:297
 msgid "Number of tourney cycles (or Swiss rounds):"
 msgstr ""
 
-#: dialogs.c:275
+#: dialogs.c:298
 msgid "Default Number of Games in Match (or Pairing):"
 msgstr ""
 
-#: dialogs.c:276
+#: dialogs.c:299
 msgid "Pause between Match Games (msec):"
 msgstr ""
 
-#: dialogs.c:277
+#: dialogs.c:300
 msgid "Save Tourney Games on:"
 msgstr ""
 
-#: dialogs.c:278
+#: dialogs.c:301
 msgid "Game File with Opening Lines:"
 msgstr ""
 
-#: dialogs.c:279
+#: dialogs.c:302
 msgid "Game Number (-1 or -2 = Auto-Increment):"
 msgstr ""
 
-#: dialogs.c:280
+#: dialogs.c:303
 msgid "File with Start Positions:"
 msgstr ""
 
-#: dialogs.c:281
+#: dialogs.c:304
 msgid "Position Number (-1 or -2 = Auto-Increment):"
 msgstr ""
 
-#: dialogs.c:282
+#: dialogs.c:305
 msgid "Rewind Index after this many Games (0 = never):"
 msgstr ""
 
-#: dialogs.c:283
+#: dialogs.c:306
 msgid "Disable own engine books by default"
 msgstr ""
 
-#: dialogs.c:284
+#: dialogs.c:307 dialogs.c:1565
+msgid "Time Control"
+msgstr ""
+
+#: dialogs.c:308
+msgid "Common Engine"
+msgstr ""
+
+#: dialogs.c:309 dialogs.c:441
+msgid "General Options"
+msgstr ""
+
+#: dialogs.c:310
+msgid "Continue Later"
+msgstr ""
+
+#: dialogs.c:311
 msgid "Replace Engine"
 msgstr ""
 
-#: dialogs.c:285
+#: dialogs.c:312
 msgid "Upgrade Engine"
 msgstr ""
 
-#: dialogs.c:286
+#: dialogs.c:313
 msgid "Clone Tourney"
 msgstr ""
 
-#: dialogs.c:316
+#: dialogs.c:351
 msgid "First you must specify an existing tourney file to clone"
 msgstr ""
 
-#: dialogs.c:332 dialogs.c:1320
+#: dialogs.c:367 dialogs.c:1407
 msgid "# no engines are installed"
 msgstr ""
 
-#: dialogs.c:344
-msgid "Match Options"
+#: dialogs.c:375
+msgid "Internal error: PARTICIPANTS set wrong"
 msgstr ""
 
-#: dialogs.c:363
+#: dialogs.c:383
+msgid "Tournament Options"
+msgstr ""
+
+#: dialogs.c:402
 msgid "Absolute Analysis Scores"
 msgstr ""
 
-#: dialogs.c:364
+#: dialogs.c:403
 msgid "Almost Always Queen (Detour Under-Promote)"
 msgstr ""
 
-#: dialogs.c:365 menus.c:714
+#: dialogs.c:404 menus.c:714
 msgid "Animate Dragging"
 msgstr ""
 
-#: dialogs.c:366 menus.c:715
+#: dialogs.c:405 menus.c:715
 msgid "Animate Moving"
 msgstr ""
 
-#: dialogs.c:367 menus.c:716
+#: dialogs.c:406 menus.c:716
 msgid "Auto Flag"
 msgstr ""
 
-#: dialogs.c:368 menus.c:717
+#: dialogs.c:407 menus.c:717
 msgid "Auto Flip View"
 msgstr ""
 
-#: dialogs.c:369 menus.c:718
+#: dialogs.c:408 menus.c:718
 msgid "Blindfold"
 msgstr ""
 
-#: dialogs.c:370
+#. 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 ""
 
-#: dialogs.c:371
+#: dialogs.c:411
 msgid "Enable Variation Trees"
 msgstr ""
 
-#: dialogs.c:372
+#: dialogs.c:412
+msgid "Headers in Engine Output Window"
+msgstr ""
+
+#: dialogs.c:413
 msgid "Hide Thinking from Human"
 msgstr ""
 
-#: dialogs.c:373 menus.c:723
+#: dialogs.c:414 menus.c:723
 msgid "Highlight Last Move"
 msgstr ""
 
-#: dialogs.c:374
+#: dialogs.c:415
 msgid "Highlight with Arrow"
 msgstr ""
 
-#: dialogs.c:375 menus.c:726
+#: dialogs.c:416 menus.c:726
 msgid "One-Click Moving"
 msgstr ""
 
-#: dialogs.c:376
+#: dialogs.c:417
 msgid "Periodic Updates (in Analysis Mode)"
 msgstr ""
 
-#: dialogs.c:378
+#: dialogs.c:419
 msgid "Play Move(s) of Clicked PV (Analysis)"
 msgstr ""
 
-#: dialogs.c:379 dialogs.c:514 menus.c:728
+#: dialogs.c:420 dialogs.c:597 menus.c:728
 msgid "Ponder Next Move"
 msgstr ""
 
-#: dialogs.c:380
+#: dialogs.c:421
 msgid "Popup Exit Messages"
 msgstr ""
 
-#: dialogs.c:381 menus.c:730
+#: dialogs.c:422 menus.c:730
 msgid "Popup Move Errors"
 msgstr ""
 
-#: dialogs.c:382
+#: dialogs.c:423
 msgid "Scores in Move List"
 msgstr ""
 
-#: dialogs.c:383
+#: dialogs.c:424
 msgid "Show Coordinates"
 msgstr ""
 
-#: dialogs.c:384
+#: dialogs.c:425
 msgid "Show Target Squares"
 msgstr ""
 
-#: dialogs.c:385
+#: dialogs.c:426
 msgid "Sticky Windows"
 msgstr ""
 
-#: dialogs.c:386 menus.c:733
+#: dialogs.c:427 menus.c:733
 msgid "Test Legality"
 msgstr ""
 
-#: dialogs.c:387
+#: dialogs.c:428
 msgid "Top-Level Dialogs"
 msgstr ""
 
-#: dialogs.c:388
+#: dialogs.c:429
 msgid "Flash Moves (0 = no flashing):"
 msgstr ""
 
-#: dialogs.c:389
+#: dialogs.c:430
 msgid "Flash Rate (high = fast):"
 msgstr ""
 
-#: dialogs.c:390
+#: dialogs.c:431
 msgid "Animation Speed (high = slow):"
 msgstr ""
 
-#: dialogs.c:391
+#: dialogs.c:432
 msgid "Zoom factor in Evaluation Graph:"
 msgstr ""
 
-#: dialogs.c:400
-msgid "General Options"
-msgstr ""
-
-#: dialogs.c:410
-msgid "normal"
+#: dialogs.c:452
+msgid "Normal"
 msgstr ""
 
-#: dialogs.c:411
-msgid "makruk"
+#: dialogs.c:453
+msgid "Makruk"
 msgstr ""
 
-#: dialogs.c:412
+#: dialogs.c:454
 msgid "FRC"
 msgstr ""
 
-#: dialogs.c:413
-msgid "shatranj"
+#: dialogs.c:455
+msgid "Shatranj"
 msgstr ""
 
-#: dialogs.c:414
-msgid "wild castle"
+#: dialogs.c:456
+msgid "Wild castle"
 msgstr ""
 
-#: dialogs.c:415
-msgid "knightmate"
+#: dialogs.c:457
+msgid "Knightmate"
 msgstr ""
 
-#: dialogs.c:416
-msgid "no castle"
+#: dialogs.c:458
+msgid "No castle"
 msgstr ""
 
-#: dialogs.c:417
-msgid "cylinder *"
+#: dialogs.c:459
+msgid "Cylinder *"
 msgstr ""
 
-#: dialogs.c:418
+#: dialogs.c:460
 msgid "3-checks"
 msgstr ""
 
-#: dialogs.c:419
+#: dialogs.c:461
 msgid "berolina *"
 msgstr ""
 
-#: dialogs.c:420
+#: dialogs.c:462
 msgid "atomic"
 msgstr ""
 
-#: dialogs.c:421
+#: dialogs.c:463
 msgid "two kings"
 msgstr ""
 
-#: dialogs.c:422
+#: dialogs.c:464
+msgid " "
+msgstr ""
+
+#: dialogs.c:465
+msgid "Spartan"
+msgstr ""
+
+#: dialogs.c:466
 msgid "Board size ( -1 = default for selected variant):"
 msgstr ""
 
-#: dialogs.c:423
+#: dialogs.c:467
 msgid "Number of Board Ranks:"
 msgstr ""
 
-#: dialogs.c:424
+#: dialogs.c:468
 msgid "Number of Board Files:"
 msgstr ""
 
-#: dialogs.c:425
+#: dialogs.c:469
 msgid "Holdings Size:"
 msgstr ""
 
-#: dialogs.c:429
-msgid "fairy"
+#: dialogs.c:471
+msgid ""
+"Variants marked with * can only be played\n"
+"with legality testing off."
 msgstr ""
 
-#: dialogs.c:430
+#: dialogs.c:473
+msgid "ASEAN"
+msgstr ""
+
+#: dialogs.c:474
 msgid "Great Shatranj (10x8)"
 msgstr ""
 
-#: dialogs.c:431
+#: dialogs.c:475
 msgid "Seirawan"
 msgstr ""
 
-#: dialogs.c:432
-msgid "falcon (10x8)"
+#: dialogs.c:476
+msgid "Falcon (10x8)"
 msgstr ""
 
-#: dialogs.c:433
+#: dialogs.c:477
 msgid "Superchess"
 msgstr ""
 
-#: dialogs.c:434
+#: dialogs.c:478
 msgid "Capablanca (10x8)"
 msgstr ""
 
-#: dialogs.c:435
-msgid "crazyhouse"
+#: dialogs.c:479
+msgid "Crazyhouse"
 msgstr ""
 
-#: dialogs.c:436
+#: dialogs.c:480
 msgid "Gothic (10x8)"
 msgstr ""
 
-#: dialogs.c:437
-msgid "bughouse"
+#: dialogs.c:481
+msgid "Bughouse"
 msgstr ""
 
-#: dialogs.c:438
-msgid "janus (10x8)"
+#: dialogs.c:482
+msgid "Janus (10x8)"
 msgstr ""
 
-#: dialogs.c:439
-msgid "suicide"
+#: dialogs.c:483
+msgid "Suicide"
 msgstr ""
 
-#: dialogs.c:440
+#: dialogs.c:484
 msgid "CRC (10x8)"
 msgstr ""
 
-#: dialogs.c:441
+#: dialogs.c:485
 msgid "give-away"
 msgstr ""
 
-#: dialogs.c:442
+#: dialogs.c:486
 msgid "grand (10x10)"
 msgstr ""
 
-#: dialogs.c:443
+#: dialogs.c:487
 msgid "losers"
 msgstr ""
 
-#: dialogs.c:444
+#: dialogs.c:488
 msgid "shogi (9x9)"
 msgstr ""
 
-#: dialogs.c:445
-msgid "Spartan"
+#: dialogs.c:489
+msgid "fairy"
 msgstr ""
 
-#: dialogs.c:446
+#: dialogs.c:490
 msgid "xiangqi (9x10)"
 msgstr ""
 
-#: dialogs.c:447
-msgid " "
+#: dialogs.c:491
+msgid "mighty lion"
 msgstr ""
 
-#: dialogs.c:448
+#: dialogs.c:492
 msgid "courier (12x8)"
 msgstr ""
 
-#: dialogs.c:465
+#: dialogs.c:493
+msgid "chu chess (10x10)"
+msgstr ""
+
+#: dialogs.c:494
+msgid "chu shogi (12x12)"
+msgstr ""
+
+#: dialogs.c:526
 #, c-format
 msgid "Warning: second engine (%s) does not support this!"
 msgstr ""
 
-#: dialogs.c:488
+#: dialogs.c:554
 #, c-format
-msgid "Only bughouse is not available in viewer mode"
+msgid "Only bughouse is not available in viewer mode."
 msgstr ""
 
-#: dialogs.c:489
+#: dialogs.c:555
 #, c-format
 msgid ""
-"All variants not supported by first engine\n"
-"(currently %s) are disabled"
+"All variants not supported by the first engine\n"
+"(currently %s) are disabled."
 msgstr ""
 
-#: dialogs.c:490
+#: dialogs.c:572
 msgid "New Variant"
 msgstr ""
 
-#: dialogs.c:515
+#: dialogs.c:598
 msgid "Maximum Number of CPUs per Engine:"
 msgstr ""
 
-#: dialogs.c:516
+#: dialogs.c:599
 msgid "Polygot Directory:"
 msgstr ""
 
-#: dialogs.c:517
+#: dialogs.c:600
 msgid "Hash-Table Size (MB):"
 msgstr ""
 
-#: dialogs.c:518
+#: dialogs.c:601
 msgid "Nalimov EGTB Path:"
 msgstr ""
 
-#: dialogs.c:519
+#: dialogs.c:602
 msgid "EGTB Cache Size (MB):"
 msgstr ""
 
-#: dialogs.c:520
+#: dialogs.c:603
 msgid "Use GUI Book"
 msgstr ""
 
-#: dialogs.c:521
+#: dialogs.c:604
 msgid "Opening-Book Filename:"
 msgstr ""
 
-#: dialogs.c:522
+#: dialogs.c:605
 msgid "Book Depth (moves):"
 msgstr ""
 
-#: dialogs.c:523
+#: dialogs.c:606
 msgid "Book Variety (0) vs. Strength (100):"
 msgstr ""
 
-#: dialogs.c:524
+#: dialogs.c:607
 msgid "Engine #1 Has Own Book"
 msgstr ""
 
-#: dialogs.c:525
+#: dialogs.c:608
 msgid "Engine #2 Has Own Book          "
 msgstr ""
 
-#: dialogs.c:534
+#: dialogs.c:617
 msgid "Common Engine Settings"
 msgstr ""
 
-#: dialogs.c:540
+#: dialogs.c:623
 msgid "Detect all Mates"
 msgstr ""
 
-#: dialogs.c:541
+#: dialogs.c:624
 msgid "Verify Engine Result Claims"
 msgstr ""
 
-#: dialogs.c:542
+#: dialogs.c:625
 msgid "Draw if Insufficient Mating Material"
 msgstr ""
 
-#: dialogs.c:543
+#: dialogs.c:626
 msgid "Adjudicate Trivial Draws (3-Move Delay)"
 msgstr ""
 
-#: dialogs.c:544
+#: dialogs.c:627
 msgid "N-Move Rule:"
 msgstr ""
 
-#: dialogs.c:545
+#: dialogs.c:628
 msgid "N-fold Repeats:"
 msgstr ""
 
-#: dialogs.c:546
+#: dialogs.c:629
 msgid "Draw after N Moves Total:"
 msgstr ""
 
-#: dialogs.c:547
+#: dialogs.c:630
 msgid "Win / Loss Threshold:"
 msgstr ""
 
-#: dialogs.c:548
+#: dialogs.c:631
 msgid "Negate Score of Engine #1"
 msgstr ""
 
-#: dialogs.c:549
+#: dialogs.c:632
 msgid "Negate Score of Engine #2"
 msgstr ""
 
-#: dialogs.c:556
+#: dialogs.c:639
 msgid "Adjudicate non-ICS Games"
 msgstr ""
 
-#: dialogs.c:569
+#: dialogs.c:652
 msgid "Auto-Kibitz"
 msgstr ""
 
-#: dialogs.c:570
+#: dialogs.c:653
 msgid "Auto-Comment"
 msgstr ""
 
-#: dialogs.c:571
+#: dialogs.c:654
 msgid "Auto-Observe"
 msgstr ""
 
-#: dialogs.c:572
+#: dialogs.c:655
 msgid "Auto-Raise Board"
 msgstr ""
 
-#: dialogs.c:573
+#: dialogs.c:656
 msgid "Auto-Create Logon Script"
 msgstr ""
 
-#: dialogs.c:574
+#: dialogs.c:657
 msgid "Background Observe while Playing"
 msgstr ""
 
-#: dialogs.c:575
+#: dialogs.c:658
 msgid "Dual Board for Background-Observed Game"
 msgstr ""
 
-#: dialogs.c:576
+#: dialogs.c:659
 msgid "Get Move List"
 msgstr ""
 
-#: dialogs.c:577
+#: dialogs.c:660
 msgid "Quiet Play"
 msgstr ""
 
-#: dialogs.c:578
+#: dialogs.c:661
 msgid "Seek Graph"
 msgstr ""
 
-#: dialogs.c:579
+#: dialogs.c:662
 msgid "Auto-Refresh Seek Graph"
 msgstr ""
 
-#: dialogs.c:580
+#: dialogs.c:663
 msgid "Auto-InputBox PopUp"
 msgstr ""
 
-#: dialogs.c:581
+#: dialogs.c:664
+msgid "Quit after game"
+msgstr ""
+
+#: dialogs.c:665
 msgid "Premove"
 msgstr ""
 
-#: dialogs.c:582
+#: dialogs.c:666
 msgid "Premove for White"
 msgstr ""
 
-#: dialogs.c:583
+#: dialogs.c:667
 msgid "First White Move:"
 msgstr ""
 
-#: dialogs.c:584
+#: dialogs.c:668
 msgid "Premove for Black"
 msgstr ""
 
-#: dialogs.c:585
+#: dialogs.c:669
 msgid "First Black Move:"
 msgstr ""
 
-#: dialogs.c:587
+#: dialogs.c:671
 msgid "Alarm"
 msgstr ""
 
-#: dialogs.c:588
+#: dialogs.c:672
 msgid "Alarm Time (msec):"
 msgstr ""
 
-#: dialogs.c:590
+#: dialogs.c:674
 msgid "Colorize Messages"
 msgstr ""
 
-#: dialogs.c:591
+#: dialogs.c:675
 msgid "Shout Text Colors:"
 msgstr ""
 
-#: dialogs.c:592
+#: dialogs.c:676
 msgid "S-Shout Text Colors:"
 msgstr ""
 
-#: dialogs.c:593
+#: dialogs.c:677
 msgid "Channel #1 Text Colors:"
 msgstr ""
 
-#: dialogs.c:594
+#: dialogs.c:678
 msgid "Other Channel Text Colors:"
 msgstr ""
 
-#: dialogs.c:595
+#: dialogs.c:679
 msgid "Kibitz Text Colors:"
 msgstr ""
 
-#: dialogs.c:596
+#: dialogs.c:680
 msgid "Tell Text Colors:"
 msgstr ""
 
-#: dialogs.c:597
+#: dialogs.c:681
 msgid "Challenge Text Colors:"
 msgstr ""
 
-#: dialogs.c:598
+#: dialogs.c:682
 msgid "Request Text Colors:"
 msgstr ""
 
-#: dialogs.c:599
+#: dialogs.c:683
 msgid "Seek Text Colors:"
 msgstr ""
 
-#: dialogs.c:606
+#: dialogs.c:690
 msgid "ICS Options"
 msgstr ""
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Exact position match"
 msgstr ""
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Shown position is subset"
 msgstr ""
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Same material with exactly same Pawn chain"
 msgstr ""
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Same material"
 msgstr ""
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Material range (top board half optional)"
 msgstr ""
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Material difference (optional stuff balanced)"
 msgstr ""
 
-#: dialogs.c:624
+#: dialogs.c:708
 msgid "Auto-Display Tags"
 msgstr ""
 
-#: dialogs.c:625
+#: dialogs.c:709
 msgid "Auto-Display Comment"
 msgstr ""
 
-#: dialogs.c:626
+#: dialogs.c:710
 msgid ""
 "Auto-Play speed of loaded games\n"
 "(0 = instant, -1 = off):"
 msgstr ""
 
-#: dialogs.c:627
+#: dialogs.c:711
 msgid "Seconds per Move:"
 msgstr ""
 
-#: dialogs.c:628
+#: dialogs.c:712
 msgid ""
 "\n"
 "options to use in game-viewer mode:"
 msgstr ""
 
-#: dialogs.c:630
+#: dialogs.c:714
 msgid ""
 "\n"
 "Thresholds for position filtering in game list:"
 msgstr ""
 
-#: dialogs.c:631
+#: dialogs.c:715
 msgid "Elo of strongest player at least:"
 msgstr ""
 
-#: dialogs.c:632
+#: dialogs.c:716
 msgid "Elo of weakest player at least:"
 msgstr ""
 
-#: dialogs.c:633
+#: dialogs.c:717
 msgid "No games before year:"
 msgstr ""
 
-#: dialogs.c:634
+#: dialogs.c:718
 msgid "Minimum nr consecutive positions:"
 msgstr ""
 
-#: dialogs.c:635
+#: dialogs.c:719
 msgid "Search mode:"
 msgstr ""
 
-#: dialogs.c:636
+#: dialogs.c:720
 msgid "Also match reversed colors"
 msgstr ""
 
-#: dialogs.c:637
+#: dialogs.c:721
 msgid "Also match left-right flipped position"
 msgstr ""
 
-#: dialogs.c:645
+#: dialogs.c:729
 msgid "Load Game Options"
 msgstr ""
 
-#: dialogs.c:657
+#: dialogs.c:741
 msgid "Auto-Save Games"
 msgstr ""
 
-#: dialogs.c:658
+#: dialogs.c:742
 msgid "Own Games Only"
 msgstr ""
 
-#: dialogs.c:659
+#: dialogs.c:743
 msgid "Save Games on File:"
 msgstr ""
 
-#: dialogs.c:660
+#: dialogs.c:744
 msgid "Save Final Positions on File:"
 msgstr ""
 
-#: dialogs.c:661
+#: dialogs.c:745
 msgid "PGN Event Header:"
 msgstr ""
 
-#: dialogs.c:662
+#: dialogs.c:746
 msgid "Old Save Style (as opposed to PGN)"
 msgstr ""
 
-#: dialogs.c:663
+#: dialogs.c:747
 msgid "Include Number Tag in tourney PGN"
 msgstr ""
 
-#: dialogs.c:664
+#: dialogs.c:748
 msgid "Save Score/Depth Info in PGN"
 msgstr ""
 
-#: dialogs.c:665
+#: dialogs.c:749
 msgid "Save Out-of-Book Info in PGN           "
 msgstr ""
 
-#: dialogs.c:672
+#: dialogs.c:756
 msgid "Save Game Options"
 msgstr ""
 
-#: dialogs.c:681
+#: dialogs.c:765
 msgid "No Sound"
 msgstr ""
 
-#: dialogs.c:682
+#: dialogs.c:766
 msgid "Default Beep"
 msgstr ""
 
-#: dialogs.c:683
+#: dialogs.c:767
 msgid "Above WAV File"
 msgstr ""
 
-#: dialogs.c:684
+#: dialogs.c:768
 msgid "Car Horn"
 msgstr ""
 
-#: dialogs.c:685
+#: dialogs.c:769
 msgid "Cymbal"
 msgstr ""
 
-#: dialogs.c:686
+#: dialogs.c:770
 msgid "Ding"
 msgstr ""
 
-#: dialogs.c:687
+#: dialogs.c:771
 msgid "Gong"
 msgstr ""
 
-#: dialogs.c:688
+#: dialogs.c:772
 msgid "Laser"
 msgstr ""
 
-#: dialogs.c:689
+#: dialogs.c:773
 msgid "Penalty"
 msgstr ""
 
-#: dialogs.c:690
+#: dialogs.c:774
 msgid "Phone"
 msgstr ""
 
-#: dialogs.c:691
+#: dialogs.c:775
 msgid "Pop"
 msgstr ""
 
-#: dialogs.c:692
+#: dialogs.c:776
+msgid "Roar"
+msgstr ""
+
+#: dialogs.c:777
 msgid "Slap"
 msgstr ""
 
-#: dialogs.c:693
+#: dialogs.c:778
 msgid "Wood Thunk"
 msgstr ""
 
-#: dialogs.c:695
+#: dialogs.c:780
 msgid "User File"
 msgstr ""
 
-#: dialogs.c:717
+#: dialogs.c:803
 msgid "User WAV File:"
 msgstr ""
 
-#: dialogs.c:718
+#: dialogs.c:804
 msgid "Sound Program:"
 msgstr ""
 
-#: dialogs.c:719
+#: dialogs.c:805
 msgid "Try-Out Sound:"
 msgstr ""
 
-#: dialogs.c:720
+#: dialogs.c:806
 msgid "Play"
 msgstr ""
 
-#: dialogs.c:721
+#: dialogs.c:807
 msgid "Move:"
 msgstr ""
 
-#: dialogs.c:722
+#: dialogs.c:808
 msgid "Win:"
 msgstr ""
 
-#: dialogs.c:723
+#: dialogs.c:809
 msgid "Lose:"
 msgstr ""
 
-#: dialogs.c:724
+#: dialogs.c:810
 msgid "Draw:"
 msgstr ""
 
-#: dialogs.c:725
+#: dialogs.c:811
 msgid "Unfinished:"
 msgstr ""
 
-#: dialogs.c:726
+#: dialogs.c:812
 msgid "Alarm:"
 msgstr ""
 
-#: dialogs.c:727
+#: dialogs.c:813
 msgid "Challenge:"
 msgstr ""
 
-#: dialogs.c:729
+#: dialogs.c:815
 msgid "Sounds Directory:"
 msgstr ""
 
-#: dialogs.c:730
+#: dialogs.c:816
 msgid "Shout:"
 msgstr ""
 
-#: dialogs.c:731
+#: dialogs.c:817
 msgid "S-Shout:"
 msgstr ""
 
-#: dialogs.c:732
+#: dialogs.c:818
 msgid "Channel:"
 msgstr ""
 
-#: dialogs.c:733
+#: dialogs.c:819
 msgid "Channel 1:"
 msgstr ""
 
-#: dialogs.c:734
+#: dialogs.c:820
 msgid "Tell:"
 msgstr ""
 
-#: dialogs.c:735
+#: dialogs.c:821
 msgid "Kibitz:"
 msgstr ""
 
-#: dialogs.c:736
+#: dialogs.c:822
 msgid "Request:"
 msgstr ""
 
-#: dialogs.c:737
+#: dialogs.c:823
+msgid "Lion roar:"
+msgstr ""
+
+#: dialogs.c:824
 msgid "Seek:"
 msgstr ""
 
-#: dialogs.c:753
+#: dialogs.c:840
 msgid "Sound Options"
 msgstr ""
 
-#: dialogs.c:774
+#: dialogs.c:861
 msgid "White Piece Color:"
 msgstr ""
 
 #. TRANSLATORS: R = single letter for the color red
-#: dialogs.c:777 dialogs.c:786 dialogs.c:792 dialogs.c:798 dialogs.c:804
-#: dialogs.c:810
+#: dialogs.c:864 dialogs.c:873 dialogs.c:879 dialogs.c:885 dialogs.c:891
+#: dialogs.c:897
 msgid "R"
 msgstr ""
 
 #. TRANSLATORS: G = single letter for the color green
-#: dialogs.c:779 dialogs.c:787 dialogs.c:793 dialogs.c:799 dialogs.c:805
-#: dialogs.c:811
+#: dialogs.c:866 dialogs.c:874 dialogs.c:880 dialogs.c:886 dialogs.c:892
+#: dialogs.c:898
 msgid "G"
 msgstr ""
 
 #. TRANSLATORS: B = single letter for the color blue
-#: dialogs.c:781 dialogs.c:788 dialogs.c:794 dialogs.c:800 dialogs.c:806
-#: dialogs.c:812
+#: dialogs.c:868 dialogs.c:875 dialogs.c:881 dialogs.c:887 dialogs.c:893
+#: dialogs.c:899
 msgid "B"
 msgstr ""
 
 #. TRANSLATORS: D = single letter to make a color darker
-#: dialogs.c:783 dialogs.c:789 dialogs.c:795 dialogs.c:801 dialogs.c:807
-#: dialogs.c:813
+#: dialogs.c:870 dialogs.c:876 dialogs.c:882 dialogs.c:888 dialogs.c:894
+#: dialogs.c:900
 msgid "D"
 msgstr ""
 
-#: dialogs.c:784
+#: dialogs.c:871
 msgid "Black Piece Color:"
 msgstr ""
 
-#: dialogs.c:790
+#: dialogs.c:877
 msgid "Light Square Color:"
 msgstr ""
 
-#: dialogs.c:796
+#: dialogs.c:883
 msgid "Dark Square Color:"
 msgstr ""
 
-#: dialogs.c:802
+#: dialogs.c:889
 msgid "Highlight Color:"
 msgstr ""
 
-#: dialogs.c:808
+#: dialogs.c:895
 msgid "Premove Highlight Color:"
 msgstr ""
 
-#: dialogs.c:814
+#: dialogs.c:901
 msgid "Flip Pieces Shogi Style        (Colored buttons restore default)"
 msgstr ""
 
-#: dialogs.c:816
+#: dialogs.c:903
 msgid "Mono Mode"
 msgstr ""
 
-#: dialogs.c:817
-msgid "Line Gap ( -1 = default for board size):"
+#: dialogs.c:904
+msgid "Line Gap (-1 = default for board size):"
 msgstr ""
 
-#: dialogs.c:818
+#: dialogs.c:905
 msgid "Use Board Textures"
 msgstr ""
 
-#: dialogs.c:819
+#: dialogs.c:906
 msgid "Light-Squares Texture File:"
 msgstr ""
 
-#: dialogs.c:820
+#: dialogs.c:907
 msgid "Dark-Squares Texture File:"
 msgstr ""
 
-#: dialogs.c:821
+#: dialogs.c:908
 msgid "Use external piece bitmaps with their own colors"
 msgstr ""
 
-#: dialogs.c:822
+#: dialogs.c:909
 msgid "Directory with Pieces Images:"
 msgstr ""
 
-#: dialogs.c:872
+#: dialogs.c:959
 msgid "Board Options"
 msgstr ""
 
-#: dialogs.c:925 menus.c:634
+#: dialogs.c:1012 menus.c:634
 msgid "ICS text menu"
 msgstr ""
 
-#: dialogs.c:947
+#: dialogs.c:1034
 msgid "clear"
 msgstr ""
 
-#: dialogs.c:948 dialogs.c:1036
+#: dialogs.c:1035 dialogs.c:1123
 msgid "save changes"
 msgstr ""
 
-#: dialogs.c:1051
+#: dialogs.c:1138
 msgid "Edit book"
 msgstr ""
 
-#: dialogs.c:1051 menus.c:636
+#: dialogs.c:1138 menus.c:636
 msgid "Tags"
 msgstr ""
 
-#: dialogs.c:1193
+#: dialogs.c:1280
 msgid "ICS input box"
 msgstr ""
 
-#: dialogs.c:1225
+#: dialogs.c:1312
 msgid "Type a move"
 msgstr ""
 
-#: dialogs.c:1251
+#: dialogs.c:1338
 msgid "Engine has no options"
 msgstr ""
 
-#: dialogs.c:1253
+#: dialogs.c:1340
 msgid "Engine Settings"
 msgstr ""
 
-#: dialogs.c:1278
+#: dialogs.c:1365
 msgid "Select engine from list:"
 msgstr ""
 
-#: dialogs.c:1281
+#: dialogs.c:1368
 msgid "or specify one below:"
 msgstr ""
 
-#: dialogs.c:1282
+#: dialogs.c:1369
 msgid "Nickname (optional):"
 msgstr ""
 
-#: dialogs.c:1283
+#: dialogs.c:1370
 msgid "Use nickname in PGN player tags of engine-engine games"
 msgstr ""
 
-#: dialogs.c:1284
+#: dialogs.c:1371
 msgid "Engine Directory:"
 msgstr ""
 
-#: dialogs.c:1285
+#: dialogs.c:1372
 msgid "Engine Command:"
 msgstr ""
 
-#: dialogs.c:1286
+#: dialogs.c:1373
 msgid "(Directory will be derived from engine path when empty)"
 msgstr ""
 
-#: dialogs.c:1287
+#: dialogs.c:1374
 msgid "UCI"
 msgstr ""
 
-#: dialogs.c:1288
+#: dialogs.c:1375
 msgid "WB protocol v1 (do not wait for engine features)"
 msgstr ""
 
-#: dialogs.c:1289
+#: dialogs.c:1376
 msgid "Must not use GUI book"
 msgstr ""
 
-#: dialogs.c:1290
+#: dialogs.c:1377
 msgid "Add this engine to the list"
 msgstr ""
 
-#: dialogs.c:1291
+#: dialogs.c:1378
 msgid "Force current variant with this engine"
 msgstr ""
 
-#: dialogs.c:1341
+#: dialogs.c:1428
 msgid "Load first engine"
 msgstr ""
 
-#: dialogs.c:1347
+#: dialogs.c:1434
 msgid "Load second engine"
 msgstr ""
 
-#: dialogs.c:1370
+#: dialogs.c:1457
 msgid "shuffle"
 msgstr ""
 
-#: dialogs.c:1371
+#: dialogs.c:1458
 msgid "Start-position number:"
 msgstr ""
 
-#: dialogs.c:1372
+#: dialogs.c:1459
 msgid "randomize"
 msgstr ""
 
-#: dialogs.c:1373
+#: dialogs.c:1460
 msgid "pick fixed"
 msgstr ""
 
-#: dialogs.c:1390
+#: dialogs.c:1477
 msgid "New Shuffle Game"
 msgstr ""
 
-#: dialogs.c:1409
+#: dialogs.c:1496
 msgid "classical"
 msgstr ""
 
-#: dialogs.c:1410
+#: dialogs.c:1497
 msgid "incremental"
 msgstr ""
 
-#: dialogs.c:1411
+#: dialogs.c:1498
 msgid "fixed max"
 msgstr ""
 
-#: dialogs.c:1412
+#: dialogs.c:1499
 msgid "Moves per session:"
 msgstr ""
 
-#: dialogs.c:1413
+#: dialogs.c:1500
 msgid "Initial time (min):"
 msgstr ""
 
-#: dialogs.c:1414
+#: dialogs.c:1501
 msgid "Increment or max (sec/move):"
 msgstr ""
 
-#: dialogs.c:1415
+#: dialogs.c:1502
 msgid "Time-Odds factors:"
 msgstr ""
 
-#: dialogs.c:1416
+#: dialogs.c:1503
 msgid "Engine #1"
 msgstr ""
 
-#: dialogs.c:1417
+#: dialogs.c:1504
 msgid "Engine #2 / Human"
 msgstr ""
 
-#: dialogs.c:1457 dialogs.c:1460 dialogs.c:1465 dialogs.c:1466
+#: dialogs.c:1544 dialogs.c:1547 dialogs.c:1552 dialogs.c:1553
 #: gtk/xoptions.c:194
 msgid "Unused"
 msgstr ""
 
-#: dialogs.c:1478
-msgid "Time Control"
-msgstr ""
-
-#: dialogs.c:1507
+#: dialogs.c:1594
 msgid "Error writing to chess program"
 msgstr ""
 
-#: dialogs.c:1574
+#: dialogs.c:1662 xaw/xoptions.c:1276
 msgid "Cancel"
 msgstr ""
 
-#: dialogs.c:1579 dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:1667 dialogs.c:2061 dialogs.c:2065
 msgid "King"
 msgstr ""
 
-#: dialogs.c:1582
+#: dialogs.c:1670
 msgid "Captain"
 msgstr ""
 
-#: dialogs.c:1583
+#: dialogs.c:1671
 msgid "Lieutenant"
 msgstr ""
 
-#: dialogs.c:1584
+#: dialogs.c:1672
 msgid "General"
 msgstr ""
 
-#: dialogs.c:1585
+#: dialogs.c:1673
 msgid "Warlord"
 msgstr ""
 
-#: dialogs.c:1587 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1675 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Knight"
 msgstr ""
 
-#: dialogs.c:1588 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1676 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Bishop"
 msgstr ""
 
-#: dialogs.c:1589 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1677 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Rook"
 msgstr ""
 
-#: dialogs.c:1593 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1681 dialogs.c:2062 dialogs.c:2066
 msgid "Archbishop"
 msgstr ""
 
-#: dialogs.c:1594 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1682 dialogs.c:2062 dialogs.c:2066
 msgid "Chancellor"
 msgstr ""
 
-#: dialogs.c:1596 dialogs.c:1971 dialogs.c:1975 dialogs.c:1993
+#: dialogs.c:1684 dialogs.c:2061 dialogs.c:2065 dialogs.c:2083
 msgid "Queen"
 msgstr ""
 
-#: dialogs.c:1600
+#: dialogs.c:1686
+msgid "Lion"
+msgstr ""
+
+#: dialogs.c:1690
 msgid "Defer"
 msgstr ""
 
-#: dialogs.c:1601 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1691 dialogs.c:2062 dialogs.c:2066
 msgid "Promote"
 msgstr ""
 
-#: dialogs.c:1616
+#: dialogs.c:1706
 msgid "Chat partner:"
 msgstr ""
 
-#: dialogs.c:1701
+#: dialogs.c:1791
 msgid "Chat box"
 msgstr ""
 
-#: dialogs.c:1742
+#: dialogs.c:1832
 msgid "factory"
 msgstr ""
 
-#: dialogs.c:1743
+#: dialogs.c:1833
 msgid "up"
 msgstr ""
 
-#: dialogs.c:1744
+#: dialogs.c:1834
 msgid "down"
 msgstr ""
 
-#: dialogs.c:1762
+#: dialogs.c:1852
 msgid "No tag selected"
 msgstr ""
 
-#: dialogs.c:1793
+#: dialogs.c:1883
 msgid "Game-list options"
 msgstr ""
 
-#: dialogs.c:1869 dialogs.c:1883
+#: dialogs.c:1959 dialogs.c:1973
 msgid "Error"
 msgstr ""
 
-#: dialogs.c:1906
+#: dialogs.c:1996
 msgid "Fatal Error"
 msgstr ""
 
-#: dialogs.c:1906
+#: dialogs.c:1996
 msgid "Exiting"
 msgstr ""
 
-#: dialogs.c:1917
+#: dialogs.c:2007
 msgid "Information"
 msgstr ""
 
-#: dialogs.c:1924
+#: dialogs.c:2014
 msgid "Note"
 msgstr ""
 
-#: dialogs.c:1970 dialogs.c:2245 dialogs.c:2248
+#: dialogs.c:2060 dialogs.c:2340 dialogs.c:2343
 msgid "White"
 msgstr ""
 
-#: dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Pawn"
 msgstr ""
 
-#: dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:2061 dialogs.c:2065
 msgid "Elephant"
 msgstr ""
 
-#: dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:2061 dialogs.c:2065
 msgid "Cannon"
 msgstr ""
 
-#: dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:2062 dialogs.c:2066
 msgid "Demote"
 msgstr ""
 
-#: dialogs.c:1973 dialogs.c:1977
+#: dialogs.c:2063 dialogs.c:2067
 msgid "Empty square"
 msgstr ""
 
-#: dialogs.c:1973 dialogs.c:1977
+#: dialogs.c:2063 dialogs.c:2067
 msgid "Clear board"
 msgstr ""
 
-#: dialogs.c:1974 dialogs.c:2257 dialogs.c:2260
+#: dialogs.c:2064 dialogs.c:2352 dialogs.c:2355
 msgid "Black"
 msgstr ""
 
-#: dialogs.c:2073 menus.c:787
+#: dialogs.c:2163 menus.c:787
 msgid "File"
 msgstr ""
 
-#: dialogs.c:2074 menus.c:788
+#: dialogs.c:2164 menus.c:788
 msgid "Edit"
 msgstr ""
 
-#: dialogs.c:2075 menus.c:789
+#: dialogs.c:2165 menus.c:789
 msgid "View"
 msgstr ""
 
-#: dialogs.c:2076 menus.c:790
+#: dialogs.c:2166 menus.c:790
 msgid "Mode"
 msgstr ""
 
-#: dialogs.c:2077 menus.c:791
+#: dialogs.c:2167 menus.c:791
 msgid "Action"
 msgstr ""
 
-#: dialogs.c:2078 menus.c:792
+#: dialogs.c:2168 menus.c:792
 msgid "Engine"
 msgstr ""
 
-#: dialogs.c:2079 menus.c:793
+#: dialogs.c:2169 menus.c:793
 msgid "Options"
 msgstr ""
 
-#: dialogs.c:2080 menus.c:794
+#: dialogs.c:2170 menus.c:794
 msgid "Help"
 msgstr ""
 
-#: dialogs.c:2090
+#: dialogs.c:2180
 msgid "<<"
 msgstr ""
 
-#: dialogs.c:2091
+#: dialogs.c:2181
 msgid "<"
 msgstr ""
 
-#: dialogs.c:2093
+#: dialogs.c:2183
 msgid ">"
 msgstr ""
 
-#: dialogs.c:2094
+#: dialogs.c:2184
 msgid ">>"
 msgstr ""
 
-#: dialogs.c:2364
+#: dialogs.c:2458
 msgid "Directories:"
 msgstr ""
 
-#: dialogs.c:2365
+#: dialogs.c:2459
 msgid "Files:"
 msgstr ""
 
-#: dialogs.c:2366
+#: dialogs.c:2460
 msgid "by name"
 msgstr ""
 
-#: dialogs.c:2367
+#: dialogs.c:2461
 msgid "by type"
 msgstr ""
 
-#: dialogs.c:2370
+#: dialogs.c:2464
 msgid "Filename:"
 msgstr ""
 
-#: dialogs.c:2371
+#: dialogs.c:2465
 msgid "New directory"
 msgstr ""
 
-#: dialogs.c:2372
+#: dialogs.c:2466
 msgid "File type:"
 msgstr ""
 
-#: dialogs.c:2447
+#: dialogs.c:2541
 msgid "Contents of"
 msgstr ""
 
-#: dialogs.c:2473
+#: dialogs.c:2567
 msgid "  next page"
 msgstr ""
 
-#: dialogs.c:2490
+#: dialogs.c:2584
 msgid "FIRST TYPE DIRECTORY NAME HERE"
 msgstr ""
 
-#: dialogs.c:2491
+#: dialogs.c:2585
 msgid "TRY ANOTHER NAME"
 msgstr ""
 
-#: draw.c:293
+#: draw.c:310
 msgid ""
-"No default pieces installed\n"
-"Select your own -pieceImageDirectory"
+"No default pieces installed!\n"
+"Select your own using '-pieceImageDirectory'."
 msgstr ""
 
-#: engineoutput.c:107 menus.c:630
+#: engineoutput.c:110 menus.c:630
 #, c-format
 msgid "Engine Output"
 msgstr ""
 
-#: engineoutput.c:117
+#: engineoutput.c:120
 #, c-format
 msgid "%s (%d reversible ply)"
 msgid_plural "%s (%d reversible plies)"
 msgstr[0] ""
 msgstr[1] ""
 
-#: engineoutput.c:509 engineoutput.c:512 nengineoutput.c:81 nengineoutput.c:88
+#: engineoutput.c:542 engineoutput.c:545 nengineoutput.c:82 nengineoutput.c:90
 msgid "NPS"
 msgstr ""
 
@@ -2156,50 +2230,50 @@ msgstr ""
 msgid "Reading game file (%d)"
 msgstr ""
 
-#: gtk/xboard.c:844 xaw/xboard.c:1162
+#: gtk/xboard.c:867 xaw/xboard.c:1052
 #, c-format
 msgid "%s: can't cd to CHESSDIR: "
 msgstr ""
 
-#: gtk/xboard.c:853 xaw/xboard.c:1171
+#: gtk/xboard.c:876 xaw/xboard.c:1061
 #, c-format
 msgid "Failed to open file '%s'\n"
 msgstr ""
 
-#: gtk/xboard.c:868 xaw/xboard.c:1180
+#: gtk/xboard.c:891 xaw/xboard.c:1070
 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size"
 msgstr ""
 
-#: gtk/xboard.c:887 xaw/xboard.c:1212
+#: gtk/xboard.c:910 xaw/xboard.c:1102
 #, c-format
 msgid "%s: bad boardSize syntax %s\n"
 msgstr ""
 
-#: gtk/xboard.c:927 xaw/xboard.c:1249
+#: gtk/xboard.c:950 xaw/xboard.c:1139
 #, c-format
 msgid "%s: unrecognized boardSize name %s\n"
 msgstr ""
 
-#: gtk/xboard.c:968 xaw/xboard.c:1286
+#: gtk/xboard.c:991 xaw/xboard.c:1176
 #, c-format
 msgid "%s: too few colors available; trying monochrome mode\n"
 msgstr ""
 
-#: gtk/xboard.c:1258 xaw/xboard.c:1568
+#: gtk/xboard.c:1281 xaw/xboard.c:1458
 #, c-format
 msgid "Unable to create font set for %s.\n"
 msgstr ""
 
-#: gtk/xboard.c:1283 xaw/xboard.c:1591
+#: gtk/xboard.c:1306 xaw/xboard.c:1481
 #, c-format
 msgid "%s: no fonts match pattern %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1722 xaw/xboard.c:2081
+#: gtk/xboard.c:1745 xaw/xboard.c:1971
 msgid "Can't open temp file"
 msgstr ""
 
-#: gtk/xboard.c:2174
+#: gtk/xboard.c:2199
 msgid "Failed to open file"
 msgstr ""
 
@@ -2253,11 +2327,11 @@ msgid "New Game"
 msgstr ""
 
 #: menus.c:583
-msgid "New Shuffle Game ..."
+msgid "New Shuffle Game..."
 msgstr ""
 
 #: menus.c:584
-msgid "New Variant ..."
+msgid "New Variant..."
 msgstr ""
 
 #: menus.c:586
@@ -2497,19 +2571,19 @@ msgid "Adjudicate Draw"
 msgstr ""
 
 #: menus.c:684
-msgid "Load New 1st Engine ..."
+msgid "Load New 1st Engine..."
 msgstr ""
 
 #: menus.c:685
-msgid "Load New 2nd Engine ..."
+msgid "Load New 2nd Engine..."
 msgstr ""
 
 #: menus.c:687
-msgid "Engine #1 Settings ..."
+msgid "Engine #1 Settings..."
 msgstr ""
 
 #: menus.c:688
-msgid "Engine #2 Settings ..."
+msgid "Engine #2 Settings..."
 msgstr ""
 
 #: menus.c:690
@@ -2529,43 +2603,43 @@ msgid "Retract Move"
 msgstr ""
 
 #: menus.c:700
-msgid "General ..."
+msgid "General..."
 msgstr ""
 
 #: menus.c:702
-msgid "Time Control ..."
+msgid "Time Control..."
 msgstr ""
 
 #: menus.c:703
-msgid "Common Engine ..."
+msgid "Common Engine..."
 msgstr ""
 
 #: menus.c:704
-msgid "Adjudications ..."
+msgid "Adjudications..."
 msgstr ""
 
 #: menus.c:705
-msgid "ICS ..."
+msgid "ICS..."
 msgstr ""
 
 #: menus.c:706
-msgid "Match ..."
+msgid "Tournament..."
 msgstr ""
 
 #: menus.c:707
-msgid "Load Game ..."
+msgid "Load Game..."
 msgstr ""
 
 #: menus.c:708
-msgid "Save Game ..."
+msgid "Save Game..."
 msgstr ""
 
 #: menus.c:709
-msgid "Game List ..."
+msgid "Game List..."
 msgstr ""
 
 #: menus.c:710
-msgid "Sounds ..."
+msgid "Sounds..."
 msgstr ""
 
 #: menus.c:713
@@ -2636,19 +2710,20 @@ msgstr ""
 msgid "e-Mail Bug Report"
 msgstr ""
 
-#: nengineoutput.c:78 nengineoutput.c:85
+#: nengineoutput.c:78 nengineoutput.c:86
 msgid "engine name"
 msgstr ""
 
-#: nengineoutput.c:80 nengineoutput.c:87
+#. TRANSLATORS: noun, as in "the move Nf3"
+#: nengineoutput.c:81 nengineoutput.c:89
 msgid "move"
 msgstr ""
 
-#: nengineoutput.c:153
+#: nengineoutput.c:155
 msgid "Engine output"
 msgstr ""
 
-#: nengineoutput.c:157
+#: nengineoutput.c:159
 msgid ""
 "Mismatch of STRIDE in nengineoutput.c\n"
 "Change and recompile!"
@@ -2731,7 +2806,7 @@ msgstr ""
 
 #: usystem.c:230
 #, c-format
-msgid "%s: can't parse foreground color in `%s'\n"
+msgid "%s: can't parse foreground color in '%s'\n"
 msgstr ""
 
 #: usystem.c:259
@@ -2739,54 +2814,25 @@ msgstr ""
 msgid "%s: can't parse color names; disabling colorization\n"
 msgstr ""
 
-#: usystem.c:371
+#: usystem.c:374
 #, c-format
 msgid "ERROR: Unknown user %s (in path %s)\n"
 msgstr ""
 
-#: usystem.c:556
+#: usystem.c:557
 msgid "Socket support is not configured in"
 msgstr ""
 
-#: usystem.c:645
+#: usystem.c:646
 msgid "internal rcmd not implemented for Unix"
 msgstr ""
 
-#: xaw/xboard.c:478
-#, c-format
-msgid "%s: Can't access XPM directory %s\n"
-msgstr ""
-
-#: xaw/xboard.c:499
-#, c-format
-msgid "Available `%s' sizes:\n"
-msgstr ""
-
-#: xaw/xboard.c:532
-#, c-format
-msgid "Error: No `%s' files!\n"
-msgstr ""
-
-#: xaw/xboard.c:545
-#, c-format
-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 ""
-
-#: xaw/xboard.c:1292
+#: xaw/xboard.c:1182
 #, c-format
 msgid "white pixel = 0x%lx, black pixel = 0x%lx\n"
 msgstr ""
 
-#: xaw/xengineoutput.c:115
-#, c-format
-msgid "Error %d loading icon image\n"
-msgstr ""
-
-#: xaw/xoptions.c:321 xaw/xoptions.c:1023
+#: xaw/xoptions.c:321 xaw/xoptions.c:1025
 msgid "browse"
 msgstr ""
 
@@ -2802,10 +2848,6 @@ msgstr ""
 msgid "Shift"
 msgstr ""
 
-#: xaw/xoptions.c:1270
+#: xaw/xoptions.c:1272
 msgid "OK"
 msgstr ""
-
-#: xaw/xoptions.c:1274
-msgid "cancel"
-msgstr ""
index 304dec3..e4d7291 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-01-05 12:51-0800\n"
+"POT-Creation-Date: 2014-01-19 22:19-0800\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,558 +18,581 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: args.h:820
+#: args.h:833
 #, c-format
 msgid "%s in settings file\n"
 msgstr ""
 
-#: args.h:830
+#: args.h:867
 #, c-format
 msgid "Bad integer value %s"
 msgstr ""
 
-#: args.h:923 args.h:1170
+#: args.h:968 args.h:1229
 #, c-format
 msgid "Unrecognized argument %s"
 msgstr ""
 
-#: args.h:954
+#: args.h:999
 #, c-format
 msgid "No value provided for argument %s"
 msgstr ""
 
-#: args.h:1014
+#: args.h:1059
 #, c-format
 msgid "Incomplete \\ escape in value for %s"
 msgstr ""
 
-#: args.h:1125
+#: args.h:1170
 #, c-format
 msgid "Failed to open indirection file %s"
 msgstr ""
 
-#: args.h:1142
+#: args.h:1187
 #, c-format
 msgid "Unrecognized boolean argument value %s"
 msgstr ""
 
 #. 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:744
+#: backend.c:800
 msgid "first"
 msgstr ""
 
 #. 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:747
+#: backend.c:803
 msgid "second"
 msgstr ""
 
-#: backend.c:827
+#: backend.c:885
 #, c-format
 msgid "protocol version %d not supported"
 msgstr "协议版本 %d 不被支持"
 
-#: backend.c:933
+#: backend.c:991
 msgid "You did not specify the engine executable"
 msgstr ""
 
-#: backend.c:989
+#: backend.c:1049
 #, c-format
 msgid "bad timeControl option %s"
 msgstr "非法的\"timeControl\"(时间控制)选项 %s"
 
-#: backend.c:1004
+#: backend.c:1064
 #, c-format
 msgid "bad searchTime option %s"
 msgstr "非法的\"searchTime\"(搜索时间)选项 %s"
 
-#: backend.c:1110
+#: backend.c:1170
 #, c-format
 msgid "Variant %s supported only in ICS mode"
 msgstr "变体 %s 只在ICS模式下支持"
 
-#: backend.c:1128
+#: backend.c:1188
 #, c-format
 msgid "Unknown variant name %s"
 msgstr "未知的变体名 %s"
 
-#: backend.c:1375
+#: backend.c:1439
 msgid "Starting chess program"
 msgstr "启动国际象棋程序"
 
-#: backend.c:1398
+#: backend.c:1462
 msgid "Bad game file"
 msgstr "棋局文件错误"
 
-#: backend.c:1405
+#: backend.c:1469
 msgid "Bad position file"
 msgstr "局面文件错误"
 
-#: backend.c:1419
+#: backend.c:1483
 msgid "Pick new game"
 msgstr ""
 
-#: backend.c:1488
+#: backend.c:1552
 msgid ""
-"You restarted an already completed tourney\n"
-"One more cycle will now be added to it\n"
-"Games commence in 10 sec"
+"You restarted an already completed tourney.\n"
+"One more cycle will now be added to it.\n"
+"Games commence in 10 sec."
 msgstr ""
 
-#: backend.c:1495
+#: backend.c:1559
 #, c-format
 msgid "All games in tourney '%s' are already played or playing"
 msgstr ""
 
-#: backend.c:1502
+#: backend.c:1566
 msgid "Can't have a match with no chess programs"
 msgstr "没有象棋程序时无法进行比赛"
 
-#: backend.c:1539
+#: backend.c:1620
 #, c-format
 msgid "Could not open comm port %s"
 msgstr "无法打开通讯端口 %s"
 
-#: backend.c:1542
+#: backend.c:1623
 #, c-format
 msgid "Could not connect to host %s, port %s"
 msgstr "无法连接主机 %s 端口 %s"
 
-#: backend.c:1598
+#: backend.c:1679
 #, c-format
 msgid "Unknown initialMode %s"
 msgstr "未知的\"initialMode\"(初始模式)选项 %s"
 
-#: backend.c:1624
+#: backend.c:1705
 msgid "AnalyzeFile mode requires a game file"
 msgstr "\"AnalyzeFile\"(分析文件)模式必须指定一个棋局文件"
 
-#: backend.c:1651
+#: backend.c:1732
 msgid "Analysis mode requires a chess engine"
 msgstr "\"Analysis\"(分析)模式必须启动国际象棋引擎"
 
-#: backend.c:1655
+#: backend.c:1736
 msgid "Analysis mode does not work with ICS mode"
 msgstr "\"Analysis\"(分析)模式无法在ICS模式下工作"
 
-#: backend.c:1666
+#: backend.c:1747
 msgid "MachineWhite mode requires a chess engine"
 msgstr "\"MachineWhite\"(电脑执白)模式必须启动国际象棋引擎"
 
-#: backend.c:1671
+#: backend.c:1752
 msgid "MachineWhite mode does not work with ICS mode"
 msgstr "\"MachineWhite\"(电脑执白)模式无法在ICS模式下运行"
 
-#: backend.c:1678
+#: backend.c:1759
 msgid "MachineBlack mode requires a chess engine"
 msgstr "\"MachineBlack\"(电脑执黑)模式必须启动国际象棋引擎"
 
-#: backend.c:1683
+#: backend.c:1764
 msgid "MachineBlack mode does not work with ICS mode"
 msgstr "\"MachineBlack\"(电脑执黑)模式无法在ICS模式下运行"
 
-#: backend.c:1690
+#: backend.c:1771
 msgid "TwoMachines mode requires a chess engine"
 msgstr "\"TwoMachines\"(分析)模式必须启动国际象棋引擎"
 
-#: backend.c:1695
+#: backend.c:1776
 msgid "TwoMachines mode does not work with ICS mode"
 msgstr "\"TwoMachines\"(电脑对弈)模式无法在ICS模式下运行"
 
-#: backend.c:1706
+#: backend.c:1787
 msgid "Training mode requires a game file"
 msgstr "\"Training\"(训练)模式必须指定一个棋局文件"
 
-#: backend.c:1869 backend.c:1924 backend.c:1947 backend.c:2346
+#: backend.c:1950 backend.c:2005 backend.c:2028 backend.c:2430
 msgid "Error writing to ICS"
 msgstr "发送信息给ICS时出错"
 
-#: backend.c:1884
+#: backend.c:1965
 msgid "Error reading from keyboard"
 msgstr "读取键盘时出错"
 
-#: backend.c:1887
+#: backend.c:1968
 msgid "Got end of file from keyboard"
 msgstr "读取键盘时遇到文件尾"
 
-#: backend.c:2192
+#: backend.c:2276
 #, c-format
 msgid "Unknown wild type %d"
 msgstr ""
 
-#: backend.c:2263 usystem.c:329
+#: backend.c:2347 usystem.c:329
 msgid "Error writing to display"
 msgstr "发送信息给显示器时出错"
 
-#: backend.c:3019
+#. TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers
+#: backend.c:3105
 #, c-format
 msgid "your opponent kibitzes: %s"
 msgstr ""
 
-#: backend.c:3548
+#: backend.c:3634
 msgid "Error gathering move list: two headers"
 msgstr "读取着法时出错,出现两个开头"
 
-#: backend.c:3595
+#: backend.c:3681
 msgid "Error gathering move list: nested"
 msgstr "读取着法时出错,嵌套错误"
 
-#: backend.c:3699 backend.c:4117 backend.c:4321 backend.c:4880 backend.c:4884
-#: backend.c:6900 backend.c:12101 backend.c:13816 backend.c:13893
-#: backend.c:13939 backend.c:13945 backend.c:13950 backend.c:13955
+#: backend.c:3785 backend.c:4203 backend.c:4407 backend.c:4966 backend.c:4970
+#: backend.c:7073 backend.c:12577 backend.c:14306 backend.c:14383
+#: backend.c:14429 backend.c:14435 backend.c:14440 backend.c:14445
 msgid "vs."
 msgstr ""
 
-#: backend.c:3827
+#: backend.c:3913
 msgid "Illegal move (rejected by ICS)"
 msgstr ""
 
-#: backend.c:4165
+#: backend.c:4251
 msgid "Connection closed by ICS"
 msgstr "连接被ICS关闭"
 
-#: backend.c:4167
+#: backend.c:4253
 msgid "Error reading from ICS"
 msgstr "读取ICS信息时出错"
 
-#: backend.c:4244
+#: backend.c:4330
 #, c-format
 msgid ""
 "Failed to parse board string:\n"
 "\"%s\""
 msgstr ""
 
-#: backend.c:4253 backend.c:9756
+#: backend.c:4339 backend.c:10203
 msgid "Game too long; increase MAX_MOVES and recompile"
 msgstr "棋局太长,需要增加\"MAX_MOVES\"并重新编译"
 
-#: backend.c:4372
+#: backend.c:4458
 msgid "Error gathering move list: extra board"
 msgstr "读取着法时出错,超出棋盘"
 
-#: backend.c:4804 backend.c:4826
+#: backend.c:4890 backend.c:4912
 #, c-format
 msgid "Couldn't parse move \"%s\" from ICS"
 msgstr "无法解析从ICS读到的着法\"%s\""
 
-#: backend.c:5063
+#: backend.c:5161
 #, c-format
 msgid "say Internal error; bad moveType %d (%d,%d-%d,%d)"
 msgstr "say 内部错误,非法的\"moveType\"(着法类型) %d (%d,%d-%d,%d)"
 
-#: backend.c:5133
+#: backend.c:5232
 msgid "You cannot do this while you are playing or observing"
 msgstr ""
 
-#: backend.c:6029
+#: backend.c:6174
 msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!"
 msgstr ""
 
-#: backend.c:6491
+#: backend.c:6664
 msgid "You are playing Black"
 msgstr "你在执黑"
 
-#: backend.c:6500 backend.c:6527
+#: backend.c:6673 backend.c:6700
 msgid "You are playing White"
 msgstr "你在执白"
 
-#: backend.c:6509 backend.c:6535 backend.c:6655 backend.c:6680 backend.c:6696
-#: backend.c:14592
+#: backend.c:6682 backend.c:6708 backend.c:6828 backend.c:6853 backend.c:6869
+#: backend.c:15113
 msgid "It is White's turn"
 msgstr "轮到白方走棋"
 
-#: backend.c:6513 backend.c:6539 backend.c:6663 backend.c:6686 backend.c:6717
-#: backend.c:14584
+#: backend.c:6686 backend.c:6712 backend.c:6836 backend.c:6859 backend.c:6890
+#: backend.c:15105
 msgid "It is Black's turn"
 msgstr "轮到黑方走棋"
 
-#: backend.c:6552
+#: backend.c:6725
 msgid "Displayed position is not current"
 msgstr "显示的局面不是当前局面"
 
-#: backend.c:6790
+#: backend.c:6963
 msgid "Illegal move"
 msgstr "着法错误"
 
-#: backend.c:6857
+#: backend.c:7030
 msgid "End of game"
 msgstr "棋局结束"
 
-#: backend.c:6860
+#: backend.c:7033
 msgid "Incorrect move"
 msgstr "着法错误"
 
-#: backend.c:7169 backend.c:7296
+#: backend.c:7423 backend.c:7569
 msgid "Pull pawn backwards to under-promote"
 msgstr ""
 
-#: backend.c:7527
+#: backend.c:7532
+msgid "only marked squares are legal"
+msgstr ""
+
+#: backend.c:7820
 msgid "Swiss tourney finished"
 msgstr ""
 
-#: backend.c:8103
+#: backend.c:8336
+msgid "could not load EGBB library"
+msgstr ""
+
+#: backend.c:8339
+msgid "wrong EGBB version"
+msgstr ""
+
+#: backend.c:8452
 msgid "Invalid pairing from pairing engine"
 msgstr ""
 
-#: backend.c:8236
+#: backend.c:8603
 #, c-format
 msgid "Illegal move \"%s\" from %s machine"
 msgstr "从%s机器读到不合理着法\"%s\""
 
-#: backend.c:8457
+#: backend.c:8849
 msgid "Bad FEN received from engine"
 msgstr ""
 
-#: backend.c:8601 backend.c:13681 backend.c:13746
+#: backend.c:8950
+msgid "Engine did not send setup for non-standard variant"
+msgstr ""
+
+#: backend.c:9023 backend.c:14168 backend.c:14236
 #, c-format
 msgid "%s does not support analysis"
 msgstr "%s 不支持分析功能"
 
-#: backend.c:8667
+#: backend.c:9089
 #, c-format
 msgid "Illegal move \"%s\" (rejected by %s chess program)"
 msgstr "不合理着法\"%s\" (%s国际象棋程序拒绝接受该着法)"
 
-#: backend.c:8694
+#: backend.c:9116
 #, c-format
 msgid "Failed to start %s chess program %s on %s: %s\n"
 msgstr "无法启动%s国际象棋程序 %s(在主机 %s 上),%s\n"
 
-#: backend.c:8715
+#: backend.c:9137
 #, c-format
 msgid "Hint: %s"
 msgstr "提示 %s"
 
-#: backend.c:8720
+#: backend.c:9142
 #, c-format
 msgid ""
 "Illegal hint move \"%s\"\n"
 "from %s chess program"
 msgstr ""
 
-#: backend.c:8895
+#: backend.c:9317
 msgid "Machine accepts your draw offer"
 msgstr " *.*"
 
-#: backend.c:8898
+#: backend.c:9320
 msgid ""
-"Machine offers a draw\n"
-"Select Action / Draw to agree"
+"Machine offers a draw.\n"
+"Select Action / Draw to accept."
 msgstr ""
 
-#: backend.c:8977
+#. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone
+#: backend.c:9402
 msgid "failed writing PV"
 msgstr ""
 
-#: backend.c:9275
+#: backend.c:9701
 #, c-format
 msgid "Ambiguous move in ICS output: \"%s\""
 msgstr "ICS输出不明确的着法\"%s\""
 
-#: backend.c:9285
+#: backend.c:9711
 #, c-format
 msgid "Illegal move in ICS output: \"%s\""
 msgstr "ICS输出不明确的着法\"%s\""
 
-#: backend.c:9296
+#: backend.c:9722
 msgid "Gap in move list"
 msgstr "着法断开"
 
-#: backend.c:9917 dialogs.c:460
+#: backend.c:10357
 #, c-format
 msgid "Variant %s not supported by %s"
 msgstr "变体 %s 不被 %s 所支持"
 
-#: backend.c:10038
+#: backend.c:10364
+#, c-format
+msgid ", but %s is"
+msgstr ""
+
+#: backend.c:10506
 #, c-format
 msgid "Startup failure on '%s'"
 msgstr "无法启动'%s'"
 
-#: backend.c:10069
+#: backend.c:10537
 msgid "Waiting for first chess program"
 msgstr "等待第一个国际象棋程序"
 
-#: backend.c:10074 backend.c:13964
+#: backend.c:10542 backend.c:14454
 msgid "Waiting for second chess program"
 msgstr "等待第二个国际象棋程序"
 
-#: backend.c:10123
+#: backend.c:10591
 msgid "Could not write on tourney file"
 msgstr ""
 
-#: backend.c:10197
+#: backend.c:10665
 msgid ""
 "You cannot replace an engine while it is engaged!\n"
 "Terminate its game first."
 msgstr ""
 
-#: backend.c:10211
+#: backend.c:10679
 msgid "No engine with the name you gave is installed"
 msgstr ""
 
-#: backend.c:10213
+#: backend.c:10681
 msgid ""
 "First change an engine by editing the participants list\n"
 "of the Tournament Options dialog"
 msgstr ""
 
-#: backend.c:10214
+#: backend.c:10682
 msgid "You can only change one engine at the time"
 msgstr ""
 
-#: backend.c:10229 backend.c:10376
+#: backend.c:10697 backend.c:10845
 #, c-format
 msgid "No engine %s is installed"
 msgstr ""
 
-#: backend.c:10249
+#: backend.c:10717
 msgid ""
 "You must supply a tournament file,\n"
 "for storing the tourney progress"
 msgstr ""
 
-#: backend.c:10259
+#: backend.c:10727
 msgid "Not enough participants"
 msgstr ""
 
-#: backend.c:10460
+#: backend.c:10929
 msgid "Bad tournament file"
 msgstr ""
 
-#: backend.c:10472
+#: backend.c:10941
 msgid "Waiting for other game(s)"
 msgstr ""
 
-#: backend.c:10485
+#: backend.c:10954
 msgid "No pairing engine specified"
 msgstr ""
 
-#: backend.c:10962
+#: backend.c:11430
 #, c-format
 msgid "Match %s vs. %s: final score %d-%d-%d"
 msgstr "比赛 %s vs. %s: 最终比分 %d-%d-%d"
 
-#: backend.c:11424 backend.c:11455
+#: backend.c:11897 backend.c:11928
 #, c-format
 msgid "Illegal move: %d.%s%s"
 msgstr "不合理着法 %d.%s%s"
 
-#: backend.c:11444
+#: backend.c:11917
 #, c-format
 msgid "Ambiguous move: %d.%s%s"
 msgstr "不明确的着法 %d.%s%s"
 
-#: backend.c:11497 backend.c:12524 backend.c:12717 backend.c:13078
+#: backend.c:11971 backend.c:13010 backend.c:13203 backend.c:13567
 #, c-format
 msgid "Can't open \"%s\""
 msgstr "无法打开\"%s\""
 
-#: backend.c:11509 menus.c:116
+#: backend.c:11983 menus.c:116
 msgid "Cannot build game list"
 msgstr "无法建立棋局列表"
 
-#: backend.c:11594
+#: backend.c:12068
 msgid "No more games in this message"
 msgstr "这条信息不包含更多的棋局"
 
-#: backend.c:11634
+#: backend.c:12108
 msgid "No game has been loaded yet"
 msgstr "尚未有棋局载入"
 
-#: backend.c:11638 backend.c:12505 ngamelist.c:129
+#: backend.c:12112 backend.c:12991 ngamelist.c:129
 msgid "Can't back up any further"
 msgstr "无法再后退了"
 
-#: backend.c:12077
+#: backend.c:12553
 msgid "Game number out of range"
 msgstr "棋局数量超出范围"
 
-#: backend.c:12088
+#: backend.c:12564
 msgid "Can't seek on game file"
 msgstr "无法搜索棋局文件"
 
-#: backend.c:12146
+#: backend.c:12622
 msgid "Game not found in file"
 msgstr "文件中没有找到棋局"
 
-#: backend.c:12274 backend.c:12601
+#: backend.c:12751 backend.c:13087
 msgid "Bad FEN position in file"
 msgstr "文件中的FEN局面错误"
 
-#: backend.c:12426
+#: backend.c:12903
 msgid "No moves in game"
 msgstr "棋局中没有着法"
 
-#: backend.c:12501
+#: backend.c:12987
 msgid "No position has been loaded yet"
 msgstr "尚未有局面载入"
 
-#: backend.c:12562 backend.c:12573
+#: backend.c:13048 backend.c:13059
 msgid "Can't seek on position file"
 msgstr "无法搜索局面文件"
 
-#: backend.c:12580 backend.c:12592
+#: backend.c:13066 backend.c:13078
 msgid "Position not found in file"
 msgstr "文件中没有着到局面"
 
-#: backend.c:12632
+#: backend.c:13118
 msgid "Black to play"
 msgstr "轮到黑方走棋"
 
-#: backend.c:12635
+#: backend.c:13121
 msgid "White to play"
 msgstr "轮到白方走棋"
 
-#: backend.c:12722 backend.c:13083
+#: backend.c:13208 backend.c:13572
 msgid "Waiting for access to save file"
 msgstr ""
 
-#: backend.c:12724
+#: backend.c:13210
 msgid "Saving game"
 msgstr ""
 
-#: backend.c:12725
+#: backend.c:13211
 msgid "Bad Seek"
 msgstr ""
 
-#: backend.c:13085
+#: backend.c:13574
 msgid "Saving position"
 msgstr ""
 
-#: backend.c:13211
+#: backend.c:13700
 msgid ""
 "You have edited the game history.\n"
 "Use Reload Same Game and make your move again."
 msgstr ""
 
-#: backend.c:13216
+#: backend.c:13705
 msgid ""
 "You have entered too many moves.\n"
 "Back up to the correct position and try again."
 msgstr ""
 
-#: backend.c:13221
+#: backend.c:13710
 msgid ""
 "Displayed position is not current.\n"
 "Step forward to the correct position and try again."
 msgstr ""
 
-#: backend.c:13268
+#: backend.c:13757
 msgid "You have not made a move yet"
 msgstr "一步棋也没走过"
 
-#: backend.c:13289
+#: backend.c:13778
 msgid ""
 "The cmail message is not loaded.\n"
 "Use Reload CMail Message and make your move again."
 msgstr ""
 
-#: backend.c:13294
+#: backend.c:13783
 msgid "No unfinished games"
 msgstr "No unfinished games"
 
-#: backend.c:13300
+#: backend.c:13789
 #, c-format
 msgid ""
 "You have already mailed a move.\n"
@@ -579,210 +602,212 @@ msgid ""
 "on the command line."
 msgstr ""
 
-#: backend.c:13315
+#: backend.c:13804
 msgid "Failed to invoke cmail"
 msgstr "Failed to invoke cmail"
 
-#: backend.c:13377
+#: backend.c:13866
 #, c-format
 msgid "Waiting for reply from opponent\n"
 msgstr "Waiting for reply from opponent\n"
 
-#: backend.c:13399
+#: backend.c:13888
 #, c-format
 msgid "Still need to make move for game\n"
 msgstr "Still need to make move for game\n"
 
-#: backend.c:13403
+#: backend.c:13892
 #, c-format
 msgid "Still need to make moves for both games\n"
 msgstr "Still need to make moves for both games\n"
 
-#: backend.c:13407
+#: backend.c:13896
 #, c-format
 msgid "Still need to make moves for all %d games\n"
 msgstr "Still need to make moves for all %d games\n"
 
-#: backend.c:13414
+#: backend.c:13903
 #, c-format
 msgid "Still need to make a move for game %s\n"
 msgstr "Still need to make a move for game %s\n"
 
-#: backend.c:13420
+#: backend.c:13909
 #, c-format
 msgid "No unfinished games\n"
 msgstr "No unfinished games\n"
 
-#: backend.c:13422
+#: backend.c:13911
 #, c-format
 msgid "Ready to send mail\n"
 msgstr "Ready to send mail\n"
 
-#: backend.c:13427
+#: backend.c:13916
 #, c-format
 msgid "Still need to make moves for games %s\n"
 msgstr "Still need to make moves for games %s\n"
 
-#: backend.c:13631
+#: backend.c:14118
 msgid "Edit comment"
 msgstr "编辑注释"
 
-#: backend.c:13633
+#: backend.c:14120
 #, c-format
 msgid "Edit comment on %d.%s%s"
 msgstr "编辑注释 %d.%s%s"
 
-#: backend.c:13688
+#: backend.c:14175
 #, c-format
 msgid "You are not observing a game"
 msgstr ""
 
-#: backend.c:13796
+#: backend.c:14286
 msgid "It is not White's turn"
 msgstr "没有轮到白方走棋"
 
-#: backend.c:13877
+#: backend.c:14367
 msgid "It is not Black's turn"
 msgstr "没有轮到黑方走棋"
 
-#: backend.c:13985
+#: backend.c:14475
 #, c-format
 msgid "Starting %s chess program"
 msgstr ""
 
-#: backend.c:14013 backend.c:15127
+#: backend.c:14503 backend.c:15648
+#, fuzzy
 msgid ""
 "Wait until your turn,\n"
-"or select Move Now"
-msgstr ""
+"or select 'Move Now'."
+msgstr "等待对手走棋"
 
-#: backend.c:14147
+#: backend.c:14638
 msgid "Training mode off"
 msgstr "训练模式已关闭"
 
-#: backend.c:14155
+#: backend.c:14646
 msgid "Training mode on"
 msgstr "训练模式已打开"
 
-#: backend.c:14158
+#: backend.c:14649
 msgid "Already at end of game"
 msgstr "棋局已经结束"
 
-#: backend.c:14238
+#: backend.c:14729
 msgid "Warning: You are still playing a game"
 msgstr "注意:你正在进行棋局"
 
-#: backend.c:14241
+#: backend.c:14732
 msgid "Warning: You are still observing a game"
 msgstr "注意:你正在旁观棋局"
 
-#: backend.c:14244
+#: backend.c:14735
 msgid "Warning: You are still examining a game"
 msgstr "注意:你正在研究棋局"
 
-#: backend.c:14311
+#: backend.c:14802
 msgid "Click clock to clear board"
 msgstr ""
 
-#: backend.c:14321
+#: backend.c:14812
 msgid "Close ICS engine analyze..."
 msgstr ""
 
-#: backend.c:14609
+#: backend.c:15130
 msgid "That square is occupied"
 msgstr "格子已放棋子"
 
-#: backend.c:14633 backend.c:14659
+#: backend.c:15154 backend.c:15180
 msgid "There is no pending offer on this move"
 msgstr "该着法没有待定的提议"
 
-#: backend.c:14695 backend.c:14706
+#: backend.c:15216 backend.c:15227
 msgid "Your opponent is not out of time"
 msgstr "对手没有超时"
 
-#: backend.c:14772
+#: backend.c:15293
 msgid "You must make your move before offering a draw"
 msgstr "必须走完棋才能提和"
 
-#: backend.c:15109
+#: backend.c:15630
 msgid "You are not examining a game"
 msgstr "没有分析棋局"
 
-#: backend.c:15113
+#: backend.c:15634
 msgid "You can't revert while pausing"
 msgstr "暂停时不能复原棋局"
 
-#: backend.c:15167 backend.c:15174
+#: backend.c:15688 backend.c:15695
 msgid "It is your turn"
 msgstr "轮到你走棋"
 
-#: backend.c:15225 backend.c:15232 backend.c:15285 backend.c:15292
-msgid "Wait until your turn"
+#: backend.c:15746 backend.c:15753 backend.c:15806 backend.c:15813
+#, fuzzy
+msgid "Wait until your turn."
 msgstr "等待对手走棋"
 
-#: backend.c:15237
+#: backend.c:15758
 msgid "No hint available"
 msgstr "没有可用的提示"
 
-#: backend.c:15253 ngamelist.c:355
+#: backend.c:15774 ngamelist.c:355
 #, fuzzy
 msgid "Game list not loaded or empty"
 msgstr "尚未有棋局载入"
 
-#: backend.c:15260
+#: backend.c:15781
 msgid "Book file exists! Try again for overwrite."
 msgstr ""
 
-#: backend.c:15738
+#: backend.c:16259
 #, c-format
 msgid "Error writing to %s chess program"
 msgstr "发送信息到%s国际象棋程序时出错"
 
-#: backend.c:15741 backend.c:15772
+#: backend.c:16262 backend.c:16293
 #, c-format
 msgid "%s program exits in draw position (%s)"
 msgstr ""
 
-#: backend.c:15767
+#: backend.c:16288
 #, c-format
 msgid "Error: %s chess program (%s) exited unexpectedly"
 msgstr "错误:%s国际象棋程序(%s)突然退出了"
 
-#: backend.c:15785
+#: backend.c:16306
 #, c-format
 msgid "Error reading from %s chess program (%s)"
 msgstr "从%s国际象棋程序(%s)接收信息时出错"
 
-#: backend.c:16187
+#: backend.c:16730
 #, c-format
 msgid "%s engine has too many options\n"
 msgstr ""
 
-#: backend.c:16343
+#: backend.c:16886
 msgid "Displayed move is not current"
 msgstr "显示的着法不是当前着法"
 
-#: backend.c:16352
+#: backend.c:16895
 msgid "Could not parse move"
 msgstr "无法解析着法"
 
-#: backend.c:16477 backend.c:16499
+#: backend.c:17020 backend.c:17042
 msgid "Both flags fell"
 msgstr "双方都超时了"
 
-#: backend.c:16479
+#: backend.c:17022
 msgid "White's flag fell"
 msgstr "白方超时"
 
-#: backend.c:16501
+#: backend.c:17044
 msgid "Black's flag fell"
 msgstr "黑方超时"
 
-#: backend.c:16632
+#: backend.c:17175
 msgid "Clock adjustment not allowed in auto-flag mode"
 msgstr ""
 
-#: backend.c:17467
+#: backend.c:18025
 msgid "Bad FEN position in clipboard"
 msgstr "剪贴板的FEN局面错误"
 
@@ -803,1371 +828,1425 @@ msgstr ""
 msgid "Could not create book"
 msgstr "无法解析着法"
 
-#: dialogs.c:259
+#: dialogs.c:283
 #, fuzzy
 msgid "Tournament file:          "
 msgstr "封盘(J)   F7"
 
-#: dialogs.c:260
-msgid "Sync after round"
+#: dialogs.c:284
+msgid "For concurrent playing of tourney with multiple XBoards:"
 msgstr ""
 
-#: dialogs.c:261
-msgid "    (for concurrent playing of a single"
+#: dialogs.c:285
+msgid "Sync after round"
 msgstr ""
 
-#: dialogs.c:262
+#: dialogs.c:286
 msgid "Sync after cycle"
 msgstr ""
 
-#: dialogs.c:263
-msgid "      tourney with multiple XBoards)"
-msgstr ""
-
-#: dialogs.c:264
+#: dialogs.c:287
 msgid "Tourney participants:"
 msgstr ""
 
-#: dialogs.c:265
+#: dialogs.c:288
 msgid "Select Engine:"
 msgstr ""
 
-#: dialogs.c:273
+#: dialogs.c:296
 msgid "Tourney type (0 = round-robin, 1 = gauntlet):"
 msgstr ""
 
-#: dialogs.c:274
+#: dialogs.c:297
 msgid "Number of tourney cycles (or Swiss rounds):"
 msgstr ""
 
-#: dialogs.c:275
+#: dialogs.c:298
 msgid "Default Number of Games in Match (or Pairing):"
 msgstr ""
 
-#: dialogs.c:276
+#: dialogs.c:299
 msgid "Pause between Match Games (msec):"
 msgstr ""
 
-#: dialogs.c:277
+#: dialogs.c:300
 msgid "Save Tourney Games on:"
 msgstr ""
 
-#: dialogs.c:278
+#: dialogs.c:301
 msgid "Game File with Opening Lines:"
 msgstr ""
 
-#: dialogs.c:279
+#: dialogs.c:302
 msgid "Game Number (-1 or -2 = Auto-Increment):"
 msgstr ""
 
-#: dialogs.c:280
+#: dialogs.c:303
 msgid "File with Start Positions:"
 msgstr ""
 
-#: dialogs.c:281
+#: dialogs.c:304
 msgid "Position Number (-1 or -2 = Auto-Increment):"
 msgstr ""
 
-#: dialogs.c:282
+#: dialogs.c:305
 msgid "Rewind Index after this many Games (0 = never):"
 msgstr ""
 
-#: dialogs.c:283
+#: dialogs.c:306
 msgid "Disable own engine books by default"
 msgstr ""
 
-#: dialogs.c:284
+#: dialogs.c:307 dialogs.c:1565
+msgid "Time Control"
+msgstr ""
+
+#: dialogs.c:308
+#, fuzzy
+msgid "Common Engine"
+msgstr "通用引擎设置(E)...   Alt+Shift+U"
+
+#: dialogs.c:309 dialogs.c:441
+msgid "General Options"
+msgstr "常规选项"
+
+#: dialogs.c:310
+msgid "Continue Later"
+msgstr ""
+
+#: dialogs.c:311
 #, fuzzy
 msgid "Replace Engine"
 msgstr "引擎(N)"
 
-#: dialogs.c:285
+#: dialogs.c:312
 #, fuzzy
 msgid "Upgrade Engine"
 msgstr "引擎(N)"
 
-#: dialogs.c:286
+#: dialogs.c:313
 msgid "Clone Tourney"
 msgstr ""
 
-#: dialogs.c:316
+#: dialogs.c:351
 msgid "First you must specify an existing tourney file to clone"
 msgstr ""
 
-#: dialogs.c:332 dialogs.c:1320
+#: dialogs.c:367 dialogs.c:1407
 msgid "# no engines are installed"
 msgstr ""
 
-#: dialogs.c:344
-msgid "Match Options"
+#: dialogs.c:375
+msgid "Internal error: PARTICIPANTS set wrong"
 msgstr ""
 
-#: dialogs.c:363
+#: dialogs.c:383
+#, fuzzy
+msgid "Tournament Options"
+msgstr "声音"
+
+#: dialogs.c:402
 msgid "Absolute Analysis Scores"
 msgstr ""
 
-#: dialogs.c:364
+#: dialogs.c:403
 msgid "Almost Always Queen (Detour Under-Promote)"
 msgstr ""
 
-#: dialogs.c:365 menus.c:714
+#: dialogs.c:404 menus.c:714
 msgid "Animate Dragging"
 msgstr "动画拖拽(D)"
 
-#: dialogs.c:366 menus.c:715
+#: dialogs.c:405 menus.c:715
 msgid "Animate Moving"
 msgstr "动画走棋(A)"
 
-#: dialogs.c:367 menus.c:716
+#: dialogs.c:406 menus.c:716
 msgid "Auto Flag"
 msgstr "自动超时判负(F) Ctrl+Shift+F"
 
-#: dialogs.c:368 menus.c:717
+#: dialogs.c:407 menus.c:717
 msgid "Auto Flip View"
 msgstr "自动翻转棋盘(V)"
 
-#: dialogs.c:369 menus.c:718
+#: dialogs.c:408 menus.c:718
 msgid "Blindfold"
 msgstr "盲棋(B)"
 
-#: dialogs.c:370
+#. 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 ""
 
-#: dialogs.c:371
+#: dialogs.c:411
 msgid "Enable Variation Trees"
 msgstr ""
 
-#: dialogs.c:372
+#: dialogs.c:412
+msgid "Headers in Engine Output Window"
+msgstr ""
+
+#: dialogs.c:413
 msgid "Hide Thinking from Human"
 msgstr "与人对弈时隐藏思考细节"
 
-#: dialogs.c:373 menus.c:723
+#: dialogs.c:414 menus.c:723
 msgid "Highlight Last Move"
 msgstr "醒目提示上一着法(M)"
 
-#: dialogs.c:374
+#: dialogs.c:415
 msgid "Highlight with Arrow"
 msgstr "用箭头突出移动"
 
-#: dialogs.c:375 menus.c:726
+#: dialogs.c:416 menus.c:726
 msgid "One-Click Moving"
 msgstr "单击移动(M)"
 
-#: dialogs.c:376
+#: dialogs.c:417
 msgid "Periodic Updates (in Analysis Mode)"
 msgstr "定期更新(分析模式)"
 
-#: dialogs.c:378
+#: dialogs.c:419
 msgid "Play Move(s) of Clicked PV (Analysis)"
 msgstr ""
 
-#: dialogs.c:379 dialogs.c:514 menus.c:728
+#: dialogs.c:420 dialogs.c:597 menus.c:728
 msgid "Ponder Next Move"
 msgstr "同步思考(N)"
 
-#: dialogs.c:380
+#: dialogs.c:421
 msgid "Popup Exit Messages"
 msgstr "退出时提示(P)"
 
-#: dialogs.c:381 menus.c:730
+#: dialogs.c:422 menus.c:730
 msgid "Popup Move Errors"
 msgstr "提示错误着法(E)"
 
-#: dialogs.c:382
+#: dialogs.c:423
 #, fuzzy
 msgid "Scores in Move List"
 msgstr "获取着法列表(G)"
 
-#: dialogs.c:383
+#: dialogs.c:424
 msgid "Show Coordinates"
 msgstr "显示坐标(C)"
 
-#: dialogs.c:384
+#: dialogs.c:425
 msgid "Show Target Squares"
 msgstr ""
 
-#: dialogs.c:385
+#: dialogs.c:426
 msgid "Sticky Windows"
 msgstr ""
 
-#: dialogs.c:386 menus.c:733
+#: dialogs.c:427 menus.c:733
 msgid "Test Legality"
 msgstr "检查着法合理性(L) Cl+Sh+L"
 
-#: dialogs.c:387
+#: dialogs.c:428
 msgid "Top-Level Dialogs"
 msgstr ""
 
-#: dialogs.c:388
+#: dialogs.c:429
 msgid "Flash Moves (0 = no flashing):"
 msgstr ""
 
-#: dialogs.c:389
+#: dialogs.c:430
 msgid "Flash Rate (high = fast):"
 msgstr ""
 
-#: dialogs.c:390
+#: dialogs.c:431
 msgid "Animation Speed (high = slow):"
 msgstr ""
 
-#: dialogs.c:391
+#: dialogs.c:432
 #, fuzzy
 msgid "Zoom factor in Evaluation Graph:"
 msgstr "评价图"
 
-#: dialogs.c:400
-msgid "General Options"
-msgstr "常规选项"
-
-#: dialogs.c:410
-msgid "normal"
+#: dialogs.c:452
+msgid "Normal"
 msgstr ""
 
-#: dialogs.c:411
-msgid "makruk"
+#: dialogs.c:453
+msgid "Makruk"
 msgstr ""
 
-#: dialogs.c:412
+#: dialogs.c:454
 msgid "FRC"
 msgstr ""
 
-#: dialogs.c:413
-msgid "shatranj"
+#: dialogs.c:455
+msgid "Shatranj"
 msgstr ""
 
-#: dialogs.c:414
-msgid "wild castle"
+#: dialogs.c:456
+msgid "Wild castle"
 msgstr ""
 
-#: dialogs.c:415
-msgid "knightmate"
-msgstr ""
+#: dialogs.c:457
+#, fuzzy
+msgid "Knightmate"
+msgstr "马"
 
-#: dialogs.c:416
-msgid "no castle"
+#: dialogs.c:458
+msgid "No castle"
 msgstr ""
 
-#: dialogs.c:417
-msgid "cylinder *"
+#: dialogs.c:459
+msgid "Cylinder *"
 msgstr ""
 
-#: dialogs.c:418
+#: dialogs.c:460
 msgid "3-checks"
 msgstr ""
 
-#: dialogs.c:419
+#: dialogs.c:461
 msgid "berolina *"
 msgstr ""
 
-#: dialogs.c:420
+#: dialogs.c:462
 msgid "atomic"
 msgstr ""
 
-#: dialogs.c:421
+#: dialogs.c:463
 msgid "two kings"
 msgstr ""
 
-#: dialogs.c:422
+#: dialogs.c:464
+msgid " "
+msgstr ""
+
+#: dialogs.c:465
+msgid "Spartan"
+msgstr ""
+
+#: dialogs.c:466
 msgid "Board size ( -1 = default for selected variant):"
 msgstr ""
 
-#: dialogs.c:423
+#: dialogs.c:467
 msgid "Number of Board Ranks:"
 msgstr ""
 
-#: dialogs.c:424
+#: dialogs.c:468
 msgid "Number of Board Files:"
 msgstr ""
 
-#: dialogs.c:425
+#: dialogs.c:469
 msgid "Holdings Size:"
 msgstr ""
 
-#: dialogs.c:429
-msgid "fairy"
+#: dialogs.c:471
+msgid ""
+"Variants marked with * can only be played\n"
+"with legality testing off."
 msgstr ""
 
-#: dialogs.c:430
+#: dialogs.c:473
+msgid "ASEAN"
+msgstr ""
+
+#: dialogs.c:474
 msgid "Great Shatranj (10x8)"
 msgstr ""
 
-#: dialogs.c:431
+#: dialogs.c:475
 msgid "Seirawan"
 msgstr ""
 
-#: dialogs.c:432
-msgid "falcon (10x8)"
+#: dialogs.c:476
+msgid "Falcon (10x8)"
 msgstr ""
 
-#: dialogs.c:433
+#: dialogs.c:477
 msgid "Superchess"
 msgstr ""
 
-#: dialogs.c:434
+#: dialogs.c:478
 msgid "Capablanca (10x8)"
 msgstr ""
 
-#: dialogs.c:435
-msgid "crazyhouse"
+#: dialogs.c:479
+msgid "Crazyhouse"
 msgstr ""
 
-#: dialogs.c:436
+#: dialogs.c:480
 msgid "Gothic (10x8)"
 msgstr ""
 
-#: dialogs.c:437
-msgid "bughouse"
+#: dialogs.c:481
+msgid "Bughouse"
 msgstr ""
 
-#: dialogs.c:438
-msgid "janus (10x8)"
+#: dialogs.c:482
+msgid "Janus (10x8)"
 msgstr ""
 
-#: dialogs.c:439
-msgid "suicide"
+#: dialogs.c:483
+msgid "Suicide"
 msgstr ""
 
-#: dialogs.c:440
+#: dialogs.c:484
 msgid "CRC (10x8)"
 msgstr ""
 
-#: dialogs.c:441
+#: dialogs.c:485
 msgid "give-away"
 msgstr ""
 
-#: dialogs.c:442
+#: dialogs.c:486
 msgid "grand (10x10)"
 msgstr ""
 
-#: dialogs.c:443
+#: dialogs.c:487
 msgid "losers"
 msgstr ""
 
-#: dialogs.c:444
+#: dialogs.c:488
 msgid "shogi (9x9)"
 msgstr ""
 
-#: dialogs.c:445
-msgid "Spartan"
+#: dialogs.c:489
+msgid "fairy"
 msgstr ""
 
-#: dialogs.c:446
+#: dialogs.c:490
 msgid "xiangqi (9x10)"
 msgstr ""
 
-#: dialogs.c:447
-msgid " "
+#: dialogs.c:491
+msgid "mighty lion"
 msgstr ""
 
-#: dialogs.c:448
+#: dialogs.c:492
 msgid "courier (12x8)"
 msgstr ""
 
-#: dialogs.c:465
+#: dialogs.c:493
+msgid "chu chess (10x10)"
+msgstr ""
+
+#: dialogs.c:494
+msgid "chu shogi (12x12)"
+msgstr ""
+
+#: dialogs.c:526
 #, c-format
 msgid "Warning: second engine (%s) does not support this!"
 msgstr "警告: 第二个引擎(%s) 不支持此!"
 
-#: dialogs.c:488
+#: dialogs.c:554
 #, c-format
-msgid "Only bughouse is not available in viewer mode"
+msgid "Only bughouse is not available in viewer mode."
 msgstr ""
 
-#: dialogs.c:489
+#: dialogs.c:555
 #, c-format
 msgid ""
-"All variants not supported by first engine\n"
-"(currently %s) are disabled"
+"All variants not supported by the first engine\n"
+"(currently %s) are disabled."
 msgstr ""
 
-#: dialogs.c:490
+#: dialogs.c:572
 msgid "New Variant"
 msgstr "变种"
 
-#: dialogs.c:515
+#: dialogs.c:598
 msgid "Maximum Number of CPUs per Engine:"
 msgstr "最大CPU数"
 
-#: dialogs.c:516
+#: dialogs.c:599
 msgid "Polygot Directory:"
 msgstr ""
 
-#: dialogs.c:517
+#: dialogs.c:600
 msgid "Hash-Table Size (MB):"
 msgstr "Hash 大小(MB)"
 
-#: dialogs.c:518
+#: dialogs.c:601
 msgid "Nalimov EGTB Path:"
 msgstr "EGTB 路径"
 
-#: dialogs.c:519
+#: dialogs.c:602
 msgid "EGTB Cache Size (MB):"
 msgstr "EGTB 大小(MB)"
 
-#: dialogs.c:520
+#: dialogs.c:603
 msgid "Use GUI Book"
 msgstr ""
 
-#: dialogs.c:521
+#: dialogs.c:604
 msgid "Opening-Book Filename:"
 msgstr ""
 
-#: dialogs.c:522
+#: dialogs.c:605
 msgid "Book Depth (moves):"
 msgstr "库着法深度"
 
-#: dialogs.c:523
+#: dialogs.c:606
 msgid "Book Variety (0) vs. Strength (100):"
 msgstr "库变例"
 
-#: dialogs.c:524
+#: dialogs.c:607
 msgid "Engine #1 Has Own Book"
 msgstr "引擎1有自用库"
 
-#: dialogs.c:525
+#: dialogs.c:608
 msgid "Engine #2 Has Own Book          "
 msgstr ""
 
-#: dialogs.c:534
+#: dialogs.c:617
 msgid "Common Engine Settings"
 msgstr "通用引擎设置"
 
-#: dialogs.c:540
+#: dialogs.c:623
 msgid "Detect all Mates"
 msgstr "检测将杀(M)"
 
-#: dialogs.c:541
+#: dialogs.c:624
 msgid "Verify Engine Result Claims"
 msgstr "验证引擎声明(V)"
 
-#: dialogs.c:542
+#: dialogs.c:625
 msgid "Draw if Insufficient Mating Material"
 msgstr "子力不足时判和(I)"
 
-#: dialogs.c:543
+#: dialogs.c:626
 msgid "Adjudicate Trivial Draws (3-Move Delay)"
 msgstr "一般和棋判决(T)"
 
-#: dialogs.c:544
+#: dialogs.c:627
 msgid "N-Move Rule:"
 msgstr ""
 
-#: dialogs.c:545
+#: dialogs.c:628
 msgid "N-fold Repeats:"
 msgstr ""
 
-#: dialogs.c:546
+#: dialogs.c:629
 msgid "Draw after N Moves Total:"
 msgstr "几着后判决"
 
-#: dialogs.c:547
+#: dialogs.c:630
 msgid "Win / Loss Threshold:"
 msgstr "输/赢判决阈值"
 
-#: dialogs.c:548
+#: dialogs.c:631
 msgid "Negate Score of Engine #1"
 msgstr "引擎 #1 是绝对分数"
 
-#: dialogs.c:549
+#: dialogs.c:632
 msgid "Negate Score of Engine #2"
 msgstr "引擎 #2 是绝对分数"
 
-#: dialogs.c:556
+#: dialogs.c:639
 #, fuzzy
 msgid "Adjudicate non-ICS Games"
 msgstr "裁决白赢 (W)"
 
-#: dialogs.c:569
+#: dialogs.c:652
 msgid "Auto-Kibitz"
 msgstr "自动\"kibitz\"(A)"
 
-#: dialogs.c:570
+#: dialogs.c:653
 msgid "Auto-Comment"
 msgstr "自动注释(A)"
 
-#: dialogs.c:571
+#: dialogs.c:654
 msgid "Auto-Observe"
 msgstr "自动旁观(O)"
 
-#: dialogs.c:572
+#: dialogs.c:655
 msgid "Auto-Raise Board"
 msgstr "自动改变棋盘大小(R)"
 
-#: dialogs.c:573
+#: dialogs.c:656
 msgid "Auto-Create Logon Script"
 msgstr ""
 
-#: dialogs.c:574
+#: dialogs.c:657
 msgid "Background Observe while Playing"
 msgstr "后台观察(v)"
 
-#: dialogs.c:575
+#: dialogs.c:658
 msgid "Dual Board for Background-Observed Game"
 msgstr "双棋盘(D)"
 
-#: dialogs.c:576
+#: dialogs.c:659
 msgid "Get Move List"
 msgstr "获取着法列表(G)"
 
-#: dialogs.c:577
+#: dialogs.c:660
 msgid "Quiet Play"
 msgstr "落子无声(Q)"
 
-#: dialogs.c:578
+#: dialogs.c:661
 msgid "Seek Graph"
 msgstr "可选对手图表(k)"
 
-#: dialogs.c:579
+#: dialogs.c:662
 msgid "Auto-Refresh Seek Graph"
 msgstr "自动刷新图表(R)"
 
-#: dialogs.c:580
+#: dialogs.c:663
 msgid "Auto-InputBox PopUp"
 msgstr ""
 
-#: dialogs.c:581
+#: dialogs.c:664
+msgid "Quit after game"
+msgstr ""
+
+#: dialogs.c:665
 msgid "Premove"
 msgstr "预先走棋(P)"
 
-#: dialogs.c:582
+#: dialogs.c:666
 msgid "Premove for White"
 msgstr ""
 
-#: dialogs.c:583
+#: dialogs.c:667
 msgid "First White Move:"
 msgstr "白方先行(W)"
 
-#: dialogs.c:584
+#: dialogs.c:668
 msgid "Premove for Black"
 msgstr ""
 
-#: dialogs.c:585
+#: dialogs.c:669
 msgid "First Black Move:"
 msgstr "黑方先行(B)"
 
-#: dialogs.c:587
+#: dialogs.c:671
 msgid "Alarm"
 msgstr "提示"
 
-#: dialogs.c:588
+#: dialogs.c:672
 msgid "Alarm Time (msec):"
 msgstr ""
 
-#: dialogs.c:590
+#: dialogs.c:674
 msgid "Colorize Messages"
 msgstr ""
 
-#: dialogs.c:591
+#: dialogs.c:675
 msgid "Shout Text Colors:"
 msgstr ""
 
-#: dialogs.c:592
+#: dialogs.c:676
 msgid "S-Shout Text Colors:"
 msgstr ""
 
-#: dialogs.c:593
+#: dialogs.c:677
 msgid "Channel #1 Text Colors:"
 msgstr ""
 
-#: dialogs.c:594
+#: dialogs.c:678
 msgid "Other Channel Text Colors:"
 msgstr ""
 
-#: dialogs.c:595
+#: dialogs.c:679
 msgid "Kibitz Text Colors:"
 msgstr ""
 
-#: dialogs.c:596
+#: dialogs.c:680
 msgid "Tell Text Colors:"
 msgstr ""
 
-#: dialogs.c:597
+#: dialogs.c:681
 msgid "Challenge Text Colors:"
 msgstr ""
 
-#: dialogs.c:598
+#: dialogs.c:682
 msgid "Request Text Colors:"
 msgstr ""
 
-#: dialogs.c:599
+#: dialogs.c:683
 msgid "Seek Text Colors:"
 msgstr ""
 
-#: dialogs.c:606
+#: dialogs.c:690
 msgid "ICS Options"
 msgstr "ICS设置"
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Exact position match"
 msgstr ""
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Shown position is subset"
 msgstr ""
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Same material with exactly same Pawn chain"
 msgstr ""
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Same material"
 msgstr ""
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Material range (top board half optional)"
 msgstr ""
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Material difference (optional stuff balanced)"
 msgstr ""
 
-#: dialogs.c:624
+#: dialogs.c:708
 msgid "Auto-Display Tags"
 msgstr ""
 
-#: dialogs.c:625
+#: dialogs.c:709
 msgid "Auto-Display Comment"
 msgstr ""
 
-#: dialogs.c:626
+#: dialogs.c:710
 msgid ""
 "Auto-Play speed of loaded games\n"
 "(0 = instant, -1 = off):"
 msgstr ""
 
-#: dialogs.c:627
+#: dialogs.c:711
 msgid "Seconds per Move:"
 msgstr ""
 
-#: dialogs.c:628
+#: dialogs.c:712
 msgid ""
 "\n"
 "options to use in game-viewer mode:"
 msgstr ""
 
-#: dialogs.c:630
+#: dialogs.c:714
 msgid ""
 "\n"
 "Thresholds for position filtering in game list:"
 msgstr ""
 
-#: dialogs.c:631
+#: dialogs.c:715
 msgid "Elo of strongest player at least:"
 msgstr ""
 
-#: dialogs.c:632
+#: dialogs.c:716
 msgid "Elo of weakest player at least:"
 msgstr ""
 
-#: dialogs.c:633
+#: dialogs.c:717
 #, fuzzy
 msgid "No games before year:"
 msgstr "尚未有棋局载入"
 
-#: dialogs.c:634
+#: dialogs.c:718
 msgid "Minimum nr consecutive positions:"
 msgstr ""
 
-#: dialogs.c:635
+#: dialogs.c:719
 msgid "Search mode:"
 msgstr ""
 
-#: dialogs.c:636
+#: dialogs.c:720
 msgid "Also match reversed colors"
 msgstr ""
 
-#: dialogs.c:637
+#: dialogs.c:721
 msgid "Also match left-right flipped position"
 msgstr ""
 
-#: dialogs.c:645
+#: dialogs.c:729
 msgid "Load Game Options"
 msgstr "载入棋局选项"
 
-#: dialogs.c:657
+#: dialogs.c:741
 msgid "Auto-Save Games"
 msgstr ""
 
-#: dialogs.c:658
+#: dialogs.c:742
 msgid "Own Games Only"
 msgstr ""
 
-#: dialogs.c:659
+#: dialogs.c:743
 msgid "Save Games on File:"
 msgstr ""
 
-#: dialogs.c:660
+#: dialogs.c:744
 msgid "Save Final Positions on File:"
 msgstr ""
 
-#: dialogs.c:661
+#: dialogs.c:745
 msgid "PGN Event Header:"
 msgstr ""
 
-#: dialogs.c:662
+#: dialogs.c:746
 msgid "Old Save Style (as opposed to PGN)"
 msgstr ""
 
-#: dialogs.c:663
+#: dialogs.c:747
 msgid "Include Number Tag in tourney PGN"
 msgstr ""
 
-#: dialogs.c:664
+#: dialogs.c:748
 msgid "Save Score/Depth Info in PGN"
 msgstr ""
 
-#: dialogs.c:665
+#: dialogs.c:749
 msgid "Save Out-of-Book Info in PGN           "
 msgstr ""
 
-#: dialogs.c:672
+#: dialogs.c:756
 msgid "Save Game Options"
 msgstr "保存棋局选项"
 
-#: dialogs.c:681
+#: dialogs.c:765
 msgid "No Sound"
 msgstr "无声"
 
-#: dialogs.c:682
+#: dialogs.c:766
 msgid "Default Beep"
 msgstr "默认声音"
 
-#: dialogs.c:683
+#: dialogs.c:767
 msgid "Above WAV File"
 msgstr ""
 
-#: dialogs.c:684
+#: dialogs.c:768
 msgid "Car Horn"
 msgstr ""
 
-#: dialogs.c:685
+#: dialogs.c:769
 msgid "Cymbal"
 msgstr ""
 
-#: dialogs.c:686
+#: dialogs.c:770
 msgid "Ding"
 msgstr ""
 
-#: dialogs.c:687
+#: dialogs.c:771
 msgid "Gong"
 msgstr ""
 
-#: dialogs.c:688
+#: dialogs.c:772
 msgid "Laser"
 msgstr ""
 
-#: dialogs.c:689
+#: dialogs.c:773
 msgid "Penalty"
 msgstr ""
 
-#: dialogs.c:690
+#: dialogs.c:774
 msgid "Phone"
 msgstr ""
 
-#: dialogs.c:691
+#: dialogs.c:775
 msgid "Pop"
 msgstr ""
 
-#: dialogs.c:692
+#: dialogs.c:776
+msgid "Roar"
+msgstr ""
+
+#: dialogs.c:777
 msgid "Slap"
 msgstr ""
 
-#: dialogs.c:693
+#: dialogs.c:778
 msgid "Wood Thunk"
 msgstr ""
 
-#: dialogs.c:695
+#: dialogs.c:780
 msgid "User File"
 msgstr ""
 
-#: dialogs.c:717
+#: dialogs.c:803
 msgid "User WAV File:"
 msgstr ""
 
-#: dialogs.c:718
+#: dialogs.c:804
 msgid "Sound Program:"
 msgstr ""
 
-#: dialogs.c:719
+#: dialogs.c:805
 msgid "Try-Out Sound:"
 msgstr ""
 
-#: dialogs.c:720
+#: dialogs.c:806
 msgid "Play"
 msgstr "播放"
 
-#: dialogs.c:721
+#: dialogs.c:807
 msgid "Move:"
 msgstr ""
 
-#: dialogs.c:722
+#: dialogs.c:808
 msgid "Win:"
 msgstr ""
 
-#: dialogs.c:723
+#: dialogs.c:809
 msgid "Lose:"
 msgstr ""
 
-#: dialogs.c:724
+#: dialogs.c:810
 msgid "Draw:"
 msgstr ""
 
-#: dialogs.c:725
+#: dialogs.c:811
 msgid "Unfinished:"
 msgstr ""
 
-#: dialogs.c:726
+#: dialogs.c:812
 msgid "Alarm:"
 msgstr ""
 
-#: dialogs.c:727
+#: dialogs.c:813
 msgid "Challenge:"
 msgstr ""
 
-#: dialogs.c:729
+#: dialogs.c:815
 msgid "Sounds Directory:"
 msgstr ""
 
-#: dialogs.c:730
+#: dialogs.c:816
 msgid "Shout:"
 msgstr ""
 
-#: dialogs.c:731
+#: dialogs.c:817
 msgid "S-Shout:"
 msgstr ""
 
-#: dialogs.c:732
+#: dialogs.c:818
 msgid "Channel:"
 msgstr ""
 
-#: dialogs.c:733
+#: dialogs.c:819
 msgid "Channel 1:"
 msgstr ""
 
-#: dialogs.c:734
+#: dialogs.c:820
 msgid "Tell:"
 msgstr ""
 
-#: dialogs.c:735
+#: dialogs.c:821
 msgid "Kibitz:"
 msgstr ""
 
-#: dialogs.c:736
+#: dialogs.c:822
 msgid "Request:"
 msgstr ""
 
-#: dialogs.c:737
+#: dialogs.c:823
+msgid "Lion roar:"
+msgstr ""
+
+#: dialogs.c:824
 msgid "Seek:"
 msgstr ""
 
-#: dialogs.c:753
+#: dialogs.c:840
 msgid "Sound Options"
 msgstr "声音"
 
-#: dialogs.c:774
+#: dialogs.c:861
 msgid "White Piece Color:"
 msgstr ""
 
 #. TRANSLATORS: R = single letter for the color red
-#: dialogs.c:777 dialogs.c:786 dialogs.c:792 dialogs.c:798 dialogs.c:804
-#: dialogs.c:810
+#: dialogs.c:864 dialogs.c:873 dialogs.c:879 dialogs.c:885 dialogs.c:891
+#: dialogs.c:897
 msgid "R"
 msgstr ""
 
 #. TRANSLATORS: G = single letter for the color green
-#: dialogs.c:779 dialogs.c:787 dialogs.c:793 dialogs.c:799 dialogs.c:805
-#: dialogs.c:811
+#: dialogs.c:866 dialogs.c:874 dialogs.c:880 dialogs.c:886 dialogs.c:892
+#: dialogs.c:898
 msgid "G"
 msgstr ""
 
 #. TRANSLATORS: B = single letter for the color blue
-#: dialogs.c:781 dialogs.c:788 dialogs.c:794 dialogs.c:800 dialogs.c:806
-#: dialogs.c:812
+#: dialogs.c:868 dialogs.c:875 dialogs.c:881 dialogs.c:887 dialogs.c:893
+#: dialogs.c:899
 msgid "B"
 msgstr ""
 
 #. TRANSLATORS: D = single letter to make a color darker
-#: dialogs.c:783 dialogs.c:789 dialogs.c:795 dialogs.c:801 dialogs.c:807
-#: dialogs.c:813
+#: dialogs.c:870 dialogs.c:876 dialogs.c:882 dialogs.c:888 dialogs.c:894
+#: dialogs.c:900
 msgid "D"
 msgstr ""
 
-#: dialogs.c:784
+#: dialogs.c:871
 msgid "Black Piece Color:"
 msgstr "黑子"
 
-#: dialogs.c:790
+#: dialogs.c:877
 msgid "Light Square Color:"
 msgstr "白格"
 
-#: dialogs.c:796
+#: dialogs.c:883
 msgid "Dark Square Color:"
 msgstr "黑格"
 
-#: dialogs.c:802
+#: dialogs.c:889
 msgid "Highlight Color:"
 msgstr "格子标记"
 
-#: dialogs.c:808
+#: dialogs.c:895
 msgid "Premove Highlight Color:"
 msgstr "预先走棋标记"
 
-#: dialogs.c:814
+#: dialogs.c:901
 msgid "Flip Pieces Shogi Style        (Colored buttons restore default)"
 msgstr ""
 
-#: dialogs.c:816
+#: dialogs.c:903
 msgid "Mono Mode"
 msgstr "黑白"
 
-#: dialogs.c:817
-msgid "Line Gap ( -1 = default for board size):"
+#: dialogs.c:904
+msgid "Line Gap (-1 = default for board size):"
 msgstr ""
 
-#: dialogs.c:818
+#: dialogs.c:905
 msgid "Use Board Textures"
 msgstr ""
 
-#: dialogs.c:819
+#: dialogs.c:906
 msgid "Light-Squares Texture File:"
 msgstr ""
 
-#: dialogs.c:820
+#: dialogs.c:907
 msgid "Dark-Squares Texture File:"
 msgstr ""
 
-#: dialogs.c:821
+#: dialogs.c:908
 msgid "Use external piece bitmaps with their own colors"
 msgstr ""
 
-#: dialogs.c:822
+#: dialogs.c:909
 msgid "Directory with Pieces Images:"
 msgstr ""
 
-#: dialogs.c:872
+#: dialogs.c:959
 msgid "Board Options"
 msgstr "棋盘选项"
 
-#: dialogs.c:925 menus.c:634
+#: dialogs.c:1012 menus.c:634
 msgid "ICS text menu"
 msgstr ""
 
-#: dialogs.c:947
+#: dialogs.c:1034
 msgid "clear"
 msgstr ""
 
-#: dialogs.c:948 dialogs.c:1036
+#: dialogs.c:1035 dialogs.c:1123
 msgid "save changes"
 msgstr ""
 
-#: dialogs.c:1051
+#: dialogs.c:1138
 #, fuzzy
 msgid "Edit book"
 msgstr "编辑(E)"
 
-#: dialogs.c:1051 menus.c:636
+#: dialogs.c:1138 menus.c:636
 msgid "Tags"
 msgstr "编辑标签(T)"
 
-#: dialogs.c:1193
+#: dialogs.c:1280
 msgid "ICS input box"
 msgstr ""
 
-#: dialogs.c:1225
+#: dialogs.c:1312
 msgid "Type a move"
 msgstr ""
 
-#: dialogs.c:1251
+#: dialogs.c:1338
 msgid "Engine has no options"
 msgstr ""
 
-#: dialogs.c:1253
+#: dialogs.c:1340
 msgid "Engine Settings"
 msgstr ""
 
-#: dialogs.c:1278
+#: dialogs.c:1365
 msgid "Select engine from list:"
 msgstr ""
 
-#: dialogs.c:1281
+#: dialogs.c:1368
 msgid "or specify one below:"
 msgstr ""
 
-#: dialogs.c:1282
+#: dialogs.c:1369
 msgid "Nickname (optional):"
 msgstr ""
 
-#: dialogs.c:1283
+#: dialogs.c:1370
 msgid "Use nickname in PGN player tags of engine-engine games"
 msgstr ""
 
-#: dialogs.c:1284
+#: dialogs.c:1371
 msgid "Engine Directory:"
 msgstr ""
 
-#: dialogs.c:1285
+#: dialogs.c:1372
 msgid "Engine Command:"
 msgstr ""
 
-#: dialogs.c:1286
+#: dialogs.c:1373
 msgid "(Directory will be derived from engine path when empty)"
 msgstr ""
 
-#: dialogs.c:1287
+#: dialogs.c:1374
 msgid "UCI"
 msgstr ""
 
-#: dialogs.c:1288
+#: dialogs.c:1375
 msgid "WB protocol v1 (do not wait for engine features)"
 msgstr ""
 
-#: dialogs.c:1289
+#: dialogs.c:1376
 msgid "Must not use GUI book"
 msgstr ""
 
-#: dialogs.c:1290
+#: dialogs.c:1377
 msgid "Add this engine to the list"
 msgstr ""
 
-#: dialogs.c:1291
+#: dialogs.c:1378
 msgid "Force current variant with this engine"
 msgstr ""
 
-#: dialogs.c:1341
+#: dialogs.c:1428
 msgid "Load first engine"
 msgstr ""
 
-#: dialogs.c:1347
+#: dialogs.c:1434
 msgid "Load second engine"
 msgstr ""
 
-#: dialogs.c:1370
+#: dialogs.c:1457
 msgid "shuffle"
 msgstr ""
 
-#: dialogs.c:1371
+#: dialogs.c:1458
 msgid "Start-position number:"
 msgstr "启动位置号码(S)"
 
-#: dialogs.c:1372
+#: dialogs.c:1459
 #, fuzzy
 msgid "randomize"
 msgstr "随机"
 
-#: dialogs.c:1373
+#: dialogs.c:1460
 msgid "pick fixed"
 msgstr ""
 
-#: dialogs.c:1390
+#: dialogs.c:1477
 msgid "New Shuffle Game"
 msgstr "洗牌游戏(u)..."
 
-#: dialogs.c:1409
+#: dialogs.c:1496
 msgid "classical"
 msgstr ""
 
-#: dialogs.c:1410
+#: dialogs.c:1497
 msgid "incremental"
 msgstr ""
 
-#: dialogs.c:1411
+#: dialogs.c:1498
 msgid "fixed max"
 msgstr ""
 
-#: dialogs.c:1412
+#: dialogs.c:1499
 msgid "Moves per session:"
 msgstr ""
 
-#: dialogs.c:1413
+#: dialogs.c:1500
 msgid "Initial time (min):"
 msgstr ""
 
-#: dialogs.c:1414
+#: dialogs.c:1501
 msgid "Increment or max (sec/move):"
 msgstr ""
 
-#: dialogs.c:1415
+#: dialogs.c:1502
 #, fuzzy
 msgid "Time-Odds factors:"
 msgstr "时间倍数"
 
-#: dialogs.c:1416
+#: dialogs.c:1503
 #, fuzzy
 msgid "Engine #1"
 msgstr "引擎(N)"
 
-#: dialogs.c:1417
+#: dialogs.c:1504
 #, fuzzy
 msgid "Engine #2 / Human"
 msgstr "引擎1有自用库"
 
-#: dialogs.c:1457 dialogs.c:1460 dialogs.c:1465 dialogs.c:1466
+#: dialogs.c:1544 dialogs.c:1547 dialogs.c:1552 dialogs.c:1553
 #: gtk/xoptions.c:194
 msgid "Unused"
 msgstr ""
 
-#: dialogs.c:1478
-msgid "Time Control"
-msgstr ""
-
-#: dialogs.c:1507
+#: dialogs.c:1594
 msgid "Error writing to chess program"
 msgstr "发送信息给国际象棋程序时出错"
 
-#: dialogs.c:1574
+#: dialogs.c:1662 xaw/xoptions.c:1276
 #, fuzzy
 msgid "Cancel"
 msgstr "取消(C)"
 
-#: dialogs.c:1579 dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:1667 dialogs.c:2061 dialogs.c:2065
 msgid "King"
 msgstr "王"
 
-#: dialogs.c:1582
+#: dialogs.c:1670
 msgid "Captain"
 msgstr ""
 
-#: dialogs.c:1583
+#: dialogs.c:1671
 msgid "Lieutenant"
 msgstr ""
 
-#: dialogs.c:1584
+#: dialogs.c:1672
 msgid "General"
 msgstr "常规选项(G)..."
 
-#: dialogs.c:1585
+#: dialogs.c:1673
 msgid "Warlord"
 msgstr ""
 
-#: dialogs.c:1587 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1675 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Knight"
 msgstr "马"
 
-#: dialogs.c:1588 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1676 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Bishop"
 msgstr "象"
 
-#: dialogs.c:1589 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1677 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Rook"
 msgstr "车"
 
-#: dialogs.c:1593 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1681 dialogs.c:2062 dialogs.c:2066
 msgid "Archbishop"
 msgstr "国师"
 
-#: dialogs.c:1594 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1682 dialogs.c:2062 dialogs.c:2066
 msgid "Chancellor"
 msgstr "宰相"
 
-#: dialogs.c:1596 dialogs.c:1971 dialogs.c:1975 dialogs.c:1993
+#: dialogs.c:1684 dialogs.c:2061 dialogs.c:2065 dialogs.c:2083
 msgid "Queen"
 msgstr "后"
 
-#: dialogs.c:1600
+#: dialogs.c:1686
+msgid "Lion"
+msgstr ""
+
+#: dialogs.c:1690
 msgid "Defer"
 msgstr ""
 
-#: dialogs.c:1601 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1691 dialogs.c:2062 dialogs.c:2066
 msgid "Promote"
 msgstr "升变"
 
-#: dialogs.c:1616
+#: dialogs.c:1706
 msgid "Chat partner:"
 msgstr ""
 
-#: dialogs.c:1701
+#: dialogs.c:1791
 msgid "Chat box"
 msgstr ""
 
-#: dialogs.c:1742
+#: dialogs.c:1832
 msgid "factory"
 msgstr ""
 
-#: dialogs.c:1743
+#: dialogs.c:1833
 msgid "up"
 msgstr "向上"
 
-#: dialogs.c:1744
+#: dialogs.c:1834
 msgid "down"
 msgstr "向下"
 
-#: dialogs.c:1762
+#: dialogs.c:1852
 msgid "No tag selected"
 msgstr ""
 
-#: dialogs.c:1793
+#: dialogs.c:1883
 #, fuzzy
 msgid "Game-list options"
 msgstr "载入棋局选项"
 
-#: dialogs.c:1869 dialogs.c:1883
+#: dialogs.c:1959 dialogs.c:1973
 msgid "Error"
 msgstr "错误"
 
-#: dialogs.c:1906
+#: dialogs.c:1996
 msgid "Fatal Error"
 msgstr "严重错误"
 
-#: dialogs.c:1906
+#: dialogs.c:1996
 msgid "Exiting"
 msgstr "退出"
 
-#: dialogs.c:1917
+#: dialogs.c:2007
 msgid "Information"
 msgstr ""
 
-#: dialogs.c:1924
+#: dialogs.c:2014
 msgid "Note"
 msgstr "注释"
 
-#: dialogs.c:1970 dialogs.c:2245 dialogs.c:2248
+#: dialogs.c:2060 dialogs.c:2340 dialogs.c:2343
 msgid "White"
 msgstr "白方"
 
-#: dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Pawn"
 msgstr "兵"
 
-#: dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:2061 dialogs.c:2065
 msgid "Elephant"
 msgstr "象"
 
-#: dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:2061 dialogs.c:2065
 msgid "Cannon"
 msgstr "炮"
 
-#: dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:2062 dialogs.c:2066
 msgid "Demote"
 msgstr "降级"
 
-#: dialogs.c:1973 dialogs.c:1977
+#: dialogs.c:2063 dialogs.c:2067
 msgid "Empty square"
 msgstr "清空格子"
 
-#: dialogs.c:1973 dialogs.c:1977
+#: dialogs.c:2063 dialogs.c:2067
 msgid "Clear board"
 msgstr "清空棋盘"
 
-#: dialogs.c:1974 dialogs.c:2257 dialogs.c:2260
+#: dialogs.c:2064 dialogs.c:2352 dialogs.c:2355
 msgid "Black"
 msgstr "黑方"
 
-#: dialogs.c:2073 menus.c:787
+#: dialogs.c:2163 menus.c:787
 msgid "File"
 msgstr "文件(F)"
 
-#: dialogs.c:2074 menus.c:788
+#: dialogs.c:2164 menus.c:788
 msgid "Edit"
 msgstr "编辑(E)"
 
-#: dialogs.c:2075 menus.c:789
+#: dialogs.c:2165 menus.c:789
 msgid "View"
 msgstr "外观(V)"
 
-#: dialogs.c:2076 menus.c:790
+#: dialogs.c:2166 menus.c:790
 msgid "Mode"
 msgstr "模式(M)"
 
-#: dialogs.c:2077 menus.c:791
+#: dialogs.c:2167 menus.c:791
 msgid "Action"
 msgstr "行为(A)"
 
-#: dialogs.c:2078 menus.c:792
+#: dialogs.c:2168 menus.c:792
 msgid "Engine"
 msgstr "引擎(N)"
 
-#: dialogs.c:2079 menus.c:793
+#: dialogs.c:2169 menus.c:793
 msgid "Options"
 msgstr "选项(O)"
 
-#: dialogs.c:2080 menus.c:794
+#: dialogs.c:2170 menus.c:794
 msgid "Help"
 msgstr "帮助(H)"
 
-#: dialogs.c:2090
+#: dialogs.c:2180
 msgid "<<"
 msgstr ""
 
-#: dialogs.c:2091
+#: dialogs.c:2181
 msgid "<"
 msgstr ""
 
-#: dialogs.c:2093
+#: dialogs.c:2183
 msgid ">"
 msgstr ""
 
-#: dialogs.c:2094
+#: dialogs.c:2184
 msgid ">>"
 msgstr ""
 
-#: dialogs.c:2364
+#: dialogs.c:2458
 msgid "Directories:"
 msgstr ""
 
-#: dialogs.c:2365
+#: dialogs.c:2459
 #, fuzzy
 msgid "Files:"
 msgstr "文件(F)"
 
-#: dialogs.c:2366
+#: dialogs.c:2460
 msgid "by name"
 msgstr ""
 
-#: dialogs.c:2367
+#: dialogs.c:2461
 msgid "by type"
 msgstr ""
 
-#: dialogs.c:2370
+#: dialogs.c:2464
 #, fuzzy
 msgid "Filename:"
 msgstr "过滤器"
 
-#: dialogs.c:2371
+#: dialogs.c:2465
 msgid "New directory"
 msgstr ""
 
-#: dialogs.c:2372
+#: dialogs.c:2466
 #, fuzzy
 msgid "File type:"
 msgstr "过滤器"
 
-#: dialogs.c:2447
+#: dialogs.c:2541
 #, fuzzy
 msgid "Contents of"
 msgstr "编辑注释(C) *.*"
 
-#: dialogs.c:2473
+#: dialogs.c:2567
 msgid "  next page"
 msgstr ""
 
-#: dialogs.c:2490
+#: dialogs.c:2584
 msgid "FIRST TYPE DIRECTORY NAME HERE"
 msgstr ""
 
-#: dialogs.c:2491
+#: dialogs.c:2585
 msgid "TRY ANOTHER NAME"
 msgstr ""
 
-#: draw.c:293
+#: draw.c:310
 msgid ""
-"No default pieces installed\n"
-"Select your own -pieceImageDirectory"
+"No default pieces installed!\n"
+"Select your own using '-pieceImageDirectory'."
 msgstr ""
 
-#: engineoutput.c:107 menus.c:630
+#: engineoutput.c:110 menus.c:630
 #, fuzzy, c-format
 msgid "Engine Output"
 msgstr "引擎输出"
 
-#: engineoutput.c:117
+#: engineoutput.c:120
 #, c-format
 msgid "%s (%d reversible ply)"
 msgid_plural "%s (%d reversible plies)"
 msgstr[0] ""
 msgstr[1] ""
 
-#: engineoutput.c:509 engineoutput.c:512 nengineoutput.c:81 nengineoutput.c:88
+#: engineoutput.c:542 engineoutput.c:545 nengineoutput.c:82 nengineoutput.c:90
 msgid "NPS"
 msgstr "NPS"
 
@@ -2176,50 +2255,50 @@ msgstr "NPS"
 msgid "Reading game file (%d)"
 msgstr "棋局文件错误"
 
-#: gtk/xboard.c:844 xaw/xboard.c:1162
+#: gtk/xboard.c:867 xaw/xboard.c:1052
 #, c-format
 msgid "%s: can't cd to CHESSDIR: "
 msgstr ""
 
-#: gtk/xboard.c:853 xaw/xboard.c:1171
+#: gtk/xboard.c:876 xaw/xboard.c:1061
 #, c-format
 msgid "Failed to open file '%s'\n"
 msgstr ""
 
-#: gtk/xboard.c:868 xaw/xboard.c:1180
+#: gtk/xboard.c:891 xaw/xboard.c:1070
 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size"
 msgstr ""
 
-#: gtk/xboard.c:887 xaw/xboard.c:1212
+#: gtk/xboard.c:910 xaw/xboard.c:1102
 #, c-format
 msgid "%s: bad boardSize syntax %s\n"
 msgstr ""
 
-#: gtk/xboard.c:927 xaw/xboard.c:1249
+#: gtk/xboard.c:950 xaw/xboard.c:1139
 #, c-format
 msgid "%s: unrecognized boardSize name %s\n"
 msgstr ""
 
-#: gtk/xboard.c:968 xaw/xboard.c:1286
+#: gtk/xboard.c:991 xaw/xboard.c:1176
 #, c-format
 msgid "%s: too few colors available; trying monochrome mode\n"
 msgstr ""
 
-#: gtk/xboard.c:1258 xaw/xboard.c:1568
+#: gtk/xboard.c:1281 xaw/xboard.c:1458
 #, c-format
 msgid "Unable to create font set for %s.\n"
 msgstr ""
 
-#: gtk/xboard.c:1283 xaw/xboard.c:1591
+#: gtk/xboard.c:1306 xaw/xboard.c:1481
 #, c-format
 msgid "%s: no fonts match pattern %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1722 xaw/xboard.c:2081
+#: gtk/xboard.c:1745 xaw/xboard.c:1971
 msgid "Can't open temp file"
 msgstr ""
 
-#: gtk/xboard.c:2174
+#: gtk/xboard.c:2199
 #, fuzzy
 msgid "Failed to open file"
 msgstr "Failed to invoke cmail"
@@ -2275,12 +2354,13 @@ msgid "New Game"
 msgstr "洗牌游戏(u)..."
 
 #: menus.c:583
-msgid "New Shuffle Game ..."
+#, fuzzy
+msgid "New Shuffle Game..."
 msgstr "洗牌游戏(u)..."
 
 #: menus.c:584
 #, fuzzy
-msgid "New Variant ..."
+msgid "New Variant..."
 msgstr "变种"
 
 #: menus.c:586
@@ -2549,19 +2629,22 @@ msgid "Adjudicate Draw"
 msgstr "提请仲裁(D)"
 
 #: menus.c:684
-msgid "Load New 1st Engine ..."
+msgid "Load New 1st Engine..."
 msgstr ""
 
 #: menus.c:685
-msgid "Load New 2nd Engine ..."
-msgstr ""
+#, fuzzy
+msgid "Load New 2nd Engine..."
+msgstr "通用引擎设置(E)...   Alt+Shift+U"
 
 #: menus.c:687
-msgid "Engine #1 Settings ..."
+#, fuzzy
+msgid "Engine #1 Settings..."
 msgstr "引擎 #1 设置"
 
 #: menus.c:688
-msgid "Engine #2 Settings ..."
+#, fuzzy
+msgid "Engine #2 Settings..."
 msgstr "引擎 #2 设置"
 
 #: menus.c:690
@@ -2582,46 +2665,51 @@ msgid "Retract Move"
 msgstr "悔棋(R)   Ctrl+X"
 
 #: menus.c:700
-msgid "General ..."
+#, fuzzy
+msgid "General..."
 msgstr "常规选项(G)..."
 
 #: menus.c:702
 #, fuzzy
-msgid "Time Control ..."
+msgid "Time Control..."
 msgstr "时限设置(T)...   Alt+Shift+T"
 
 #: menus.c:703
 #, fuzzy
-msgid "Common Engine ..."
+msgid "Common Engine..."
 msgstr "通用引擎设置(E)...   Alt+Shift+U"
 
 #: menus.c:704
 #, fuzzy
-msgid "Adjudications ..."
+msgid "Adjudications..."
 msgstr "判决(j)...   Alt+Shift+J"
 
 #: menus.c:705
-msgid "ICS ..."
-msgstr "ICS选项..."
+msgid "ICS..."
+msgstr ""
 
 #: menus.c:706
-msgid "Match ..."
+msgid "Tournament..."
 msgstr ""
 
 #: menus.c:707
-msgid "Load Game ..."
+#, fuzzy
+msgid "Load Game..."
 msgstr "载入棋局选项(L)...   Alt+Shift+L"
 
 #: menus.c:708
-msgid "Save Game ..."
+#, fuzzy
+msgid "Save Game..."
 msgstr "保存棋局选项(S)...   Alt+Shift+S"
 
 #: menus.c:709
-msgid "Game List ..."
+#, fuzzy
+msgid "Game List..."
 msgstr "游戏列表..."
 
 #: menus.c:710
-msgid "Sounds ..."
+#, fuzzy
+msgid "Sounds..."
 msgstr "声音选项(D)..."
 
 #: menus.c:713
@@ -2694,21 +2782,22 @@ msgstr ""
 msgid "e-Mail Bug Report"
 msgstr ""
 
-#: nengineoutput.c:78 nengineoutput.c:85
+#: nengineoutput.c:78 nengineoutput.c:86
 #, fuzzy
 msgid "engine name"
 msgstr "引擎(N)"
 
-#: nengineoutput.c:80 nengineoutput.c:87
+#. TRANSLATORS: noun, as in "the move Nf3"
+#: nengineoutput.c:81 nengineoutput.c:89
 #, fuzzy
 msgid "move"
 msgstr "着法"
 
-#: nengineoutput.c:153
+#: nengineoutput.c:155
 msgid "Engine output"
 msgstr "引擎输出"
 
-#: nengineoutput.c:157
+#: nengineoutput.c:159
 msgid ""
 "Mismatch of STRIDE in nengineoutput.c\n"
 "Change and recompile!"
@@ -2793,7 +2882,7 @@ msgstr ""
 
 #: usystem.c:230
 #, c-format
-msgid "%s: can't parse foreground color in `%s'\n"
+msgid "%s: can't parse foreground color in '%s'\n"
 msgstr ""
 
 #: usystem.c:259
@@ -2801,54 +2890,25 @@ msgstr ""
 msgid "%s: can't parse color names; disabling colorization\n"
 msgstr ""
 
-#: usystem.c:371
+#: usystem.c:374
 #, c-format
 msgid "ERROR: Unknown user %s (in path %s)\n"
 msgstr ""
 
-#: usystem.c:556
+#: usystem.c:557
 msgid "Socket support is not configured in"
 msgstr ""
 
-#: usystem.c:645
+#: usystem.c:646
 msgid "internal rcmd not implemented for Unix"
 msgstr ""
 
-#: xaw/xboard.c:478
-#, c-format
-msgid "%s: Can't access XPM directory %s\n"
-msgstr ""
-
-#: xaw/xboard.c:499
-#, c-format
-msgid "Available `%s' sizes:\n"
-msgstr ""
-
-#: xaw/xboard.c:532
-#, c-format
-msgid "Error: No `%s' files!\n"
-msgstr ""
-
-#: xaw/xboard.c:545
-#, c-format
-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 ""
-
-#: xaw/xboard.c:1292
+#: xaw/xboard.c:1182
 #, c-format
 msgid "white pixel = 0x%lx, black pixel = 0x%lx\n"
 msgstr ""
 
-#: xaw/xengineoutput.c:115
-#, c-format
-msgid "Error %d loading icon image\n"
-msgstr ""
-
-#: xaw/xoptions.c:321 xaw/xoptions.c:1023
+#: xaw/xoptions.c:321 xaw/xoptions.c:1025
 msgid "browse"
 msgstr ""
 
@@ -2864,13 +2924,15 @@ msgstr ""
 msgid "Shift"
 msgstr ""
 
-#: xaw/xoptions.c:1270
+#: xaw/xoptions.c:1272
 msgid "OK"
 msgstr "确定"
 
-#: xaw/xoptions.c:1274
-msgid "cancel"
-msgstr "取消(C)"
+#~ msgid "ICS ..."
+#~ msgstr "ICS选项..."
+
+#~ msgid "cancel"
+#~ msgstr "取消(C)"
 
 #~ msgid "New Game        Ctrl+N"
 #~ msgstr "重置棋局(N)   Ctrl+N"
index d76664e..c64bcbf 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-01-05 12:51-0800\n"
+"POT-Creation-Date: 2014-01-19 22:19-0800\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,562 +18,585 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: args.h:820
+#: args.h:833
 #, c-format
 msgid "%s in settings file\n"
 msgstr ""
 
-#: args.h:830
+#: args.h:867
 #, c-format
 msgid "Bad integer value %s"
 msgstr ""
 
-#: args.h:923 args.h:1170
+#: args.h:968 args.h:1229
 #, c-format
 msgid "Unrecognized argument %s"
 msgstr ""
 
-#: args.h:954
+#: args.h:999
 #, c-format
 msgid "No value provided for argument %s"
 msgstr ""
 
-#: args.h:1014
+#: args.h:1059
 #, c-format
 msgid "Incomplete \\ escape in value for %s"
 msgstr ""
 
-#: args.h:1125
+#: args.h:1170
 #, c-format
 msgid "Failed to open indirection file %s"
 msgstr ""
 
-#: args.h:1142
+#: args.h:1187
 #, c-format
 msgid "Unrecognized boolean argument value %s"
 msgstr ""
 
 #. 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:744
+#: backend.c:800
 msgid "first"
 msgstr ""
 
 #. 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:747
+#: backend.c:803
 msgid "second"
 msgstr ""
 
-#: backend.c:827
+#: backend.c:885
 #, c-format
 msgid "protocol version %d not supported"
 msgstr "通訊協定版本 %d 不被支持"
 
-#: backend.c:933
+#: backend.c:991
 msgid "You did not specify the engine executable"
 msgstr ""
 
-#: backend.c:989
+#: backend.c:1049
 #, c-format
 msgid "bad timeControl option %s"
 msgstr "非法的\"timeControl\"(時間控制)選項 %s"
 
-#: backend.c:1004
+#: backend.c:1064
 #, c-format
 msgid "bad searchTime option %s"
 msgstr "非法的\"searchTime\"(搜尋時間)選項 %s"
 
-#: backend.c:1110
+#: backend.c:1170
 #, c-format
 msgid "Variant %s supported only in ICS mode"
 msgstr "變體 %s 只在ICS模式下支持"
 
-#: backend.c:1128
+#: backend.c:1188
 #, c-format
 msgid "Unknown variant name %s"
 msgstr "未知的變體名 %s"
 
-#: backend.c:1375
+#: backend.c:1439
 msgid "Starting chess program"
 msgstr "啟動國際象棋程式"
 
-#: backend.c:1398
+#: backend.c:1462
 msgid "Bad game file"
 msgstr "棋局檔案錯誤"
 
-#: backend.c:1405
+#: backend.c:1469
 msgid "Bad position file"
 msgstr "盤面檔案錯誤"
 
-#: backend.c:1419
+#: backend.c:1483
 msgid "Pick new game"
 msgstr ""
 
-#: backend.c:1488
+#: backend.c:1552
 msgid ""
-"You restarted an already completed tourney\n"
-"One more cycle will now be added to it\n"
-"Games commence in 10 sec"
+"You restarted an already completed tourney.\n"
+"One more cycle will now be added to it.\n"
+"Games commence in 10 sec."
 msgstr ""
 
-#: backend.c:1495
+#: backend.c:1559
 #, c-format
 msgid "All games in tourney '%s' are already played or playing"
 msgstr ""
 
-#: backend.c:1502
+#: backend.c:1566
 msgid "Can't have a match with no chess programs"
 msgstr "沒有象棋程式時無法進行比賽"
 
-#: backend.c:1539
+#: backend.c:1620
 #, c-format
 msgid "Could not open comm port %s"
 msgstr "無法打開通訊連接埠 %s"
 
-#: backend.c:1542
+#: backend.c:1623
 #, c-format
 msgid "Could not connect to host %s, port %s"
 msgstr "無法連接主機 %s 連接埠 %s"
 
-#: backend.c:1598
+#: backend.c:1679
 #, c-format
 msgid "Unknown initialMode %s"
 msgstr "未知的\"initialMode\"(初始模式)選項 %s"
 
-#: backend.c:1624
+#: backend.c:1705
 msgid "AnalyzeFile mode requires a game file"
 msgstr "\"AnalyzeFile\"(分析檔案)模式必須指定一個棋局檔案"
 
-#: backend.c:1651
+#: backend.c:1732
 msgid "Analysis mode requires a chess engine"
 msgstr "\"Analysis\"(分析)模式必須啟動國際象棋引擎"
 
-#: backend.c:1655
+#: backend.c:1736
 msgid "Analysis mode does not work with ICS mode"
 msgstr "\"Analysis\"(分析)模式無法在ICS模式下工作"
 
-#: backend.c:1666
+#: backend.c:1747
 msgid "MachineWhite mode requires a chess engine"
 msgstr "\"MachineWhite\"(電腦執紅)模式必須啟動國際象棋引擎"
 
-#: backend.c:1671
+#: backend.c:1752
 msgid "MachineWhite mode does not work with ICS mode"
 msgstr "\"MachineWhite\"(電腦執紅)模式無法在ICS模式下運行"
 
-#: backend.c:1678
+#: backend.c:1759
 msgid "MachineBlack mode requires a chess engine"
 msgstr "\"MachineBlack\"(電腦執黑)模式必須啟動國際象棋引擎"
 
-#: backend.c:1683
+#: backend.c:1764
 msgid "MachineBlack mode does not work with ICS mode"
 msgstr "\"MachineBlack\"(電腦執黑)模式無法在ICS模式下運行"
 
-#: backend.c:1690
+#: backend.c:1771
 msgid "TwoMachines mode requires a chess engine"
 msgstr "\"TwoMachines\"(分析)模式必須啟動國際象棋引擎"
 
-#: backend.c:1695
+#: backend.c:1776
 msgid "TwoMachines mode does not work with ICS mode"
 msgstr "\"TwoMachines\"(電腦對弈)模式無法在ICS模式下運行"
 
-#: backend.c:1706
+#: backend.c:1787
 msgid "Training mode requires a game file"
 msgstr "\"Training\"(訓練)模式必須指定一個棋局檔案"
 
-#: backend.c:1869 backend.c:1924 backend.c:1947 backend.c:2346
+#: backend.c:1950 backend.c:2005 backend.c:2028 backend.c:2430
 msgid "Error writing to ICS"
 msgstr "發送訊息給ICS時出錯"
 
-#: backend.c:1884
+#: backend.c:1965
 msgid "Error reading from keyboard"
 msgstr "讀取鍵盤時出錯"
 
-#: backend.c:1887
+#: backend.c:1968
 msgid "Got end of file from keyboard"
 msgstr "讀取鍵盤時遇到檔案尾"
 
-#: backend.c:2192
+#: backend.c:2276
 #, c-format
 msgid "Unknown wild type %d"
 msgstr ""
 
-#: backend.c:2263 usystem.c:329
+#: backend.c:2347 usystem.c:329
 msgid "Error writing to display"
 msgstr "發送訊息給顯示器時出錯"
 
-#: backend.c:3019
+#. TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers
+#: backend.c:3105
 #, c-format
 msgid "your opponent kibitzes: %s"
 msgstr ""
 
-#: backend.c:3548
+#: backend.c:3634
 msgid "Error gathering move list: two headers"
 msgstr "讀取著法時出錯,出現兩個開頭"
 
-#: backend.c:3595
+#: backend.c:3681
 msgid "Error gathering move list: nested"
 msgstr "讀取著法時出錯,巢狀錯誤"
 
-#: backend.c:3699 backend.c:4117 backend.c:4321 backend.c:4880 backend.c:4884
-#: backend.c:6900 backend.c:12101 backend.c:13816 backend.c:13893
-#: backend.c:13939 backend.c:13945 backend.c:13950 backend.c:13955
+#: backend.c:3785 backend.c:4203 backend.c:4407 backend.c:4966 backend.c:4970
+#: backend.c:7073 backend.c:12577 backend.c:14306 backend.c:14383
+#: backend.c:14429 backend.c:14435 backend.c:14440 backend.c:14445
 msgid "vs."
 msgstr ""
 
-#: backend.c:3827
+#: backend.c:3913
 msgid "Illegal move (rejected by ICS)"
 msgstr ""
 
-#: backend.c:4165
+#: backend.c:4251
 msgid "Connection closed by ICS"
 msgstr "連接被ICS關閉"
 
-#: backend.c:4167
+#: backend.c:4253
 msgid "Error reading from ICS"
 msgstr "讀取ICS訊息時出錯"
 
-#: backend.c:4244
+#: backend.c:4330
 #, c-format
 msgid ""
 "Failed to parse board string:\n"
 "\"%s\""
 msgstr ""
 
-#: backend.c:4253 backend.c:9756
+#: backend.c:4339 backend.c:10203
 msgid "Game too long; increase MAX_MOVES and recompile"
 msgstr "棋局太長,需要增加\"MAX_MOVES\"並重新編譯"
 
-#: backend.c:4372
+#: backend.c:4458
 msgid "Error gathering move list: extra board"
 msgstr "讀取著法時出錯,超出棋盤"
 
-#: backend.c:4804 backend.c:4826
+#: backend.c:4890 backend.c:4912
 #, c-format
 msgid "Couldn't parse move \"%s\" from ICS"
 msgstr "無法解析從ICS讀到的著法\"%s\""
 
-#: backend.c:5063
+#: backend.c:5161
 #, c-format
 msgid "say Internal error; bad moveType %d (%d,%d-%d,%d)"
 msgstr "say 內部錯誤,非法的\"moveType\"(著法類型) %d (%d,%d-%d,%d)"
 
-#: backend.c:5133
+#: backend.c:5232
 msgid "You cannot do this while you are playing or observing"
 msgstr ""
 
-#: backend.c:6029
+#: backend.c:6174
 msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!"
 msgstr ""
 
-#: backend.c:6491
+#: backend.c:6664
 msgid "You are playing Black"
 msgstr "你在執黑"
 
-#: backend.c:6500 backend.c:6527
+#: backend.c:6673 backend.c:6700
 msgid "You are playing White"
 msgstr "你在執紅"
 
-#: backend.c:6509 backend.c:6535 backend.c:6655 backend.c:6680 backend.c:6696
-#: backend.c:14592
+#: backend.c:6682 backend.c:6708 backend.c:6828 backend.c:6853 backend.c:6869
+#: backend.c:15113
 msgid "It is White's turn"
 msgstr "輪到紅方走棋"
 
-#: backend.c:6513 backend.c:6539 backend.c:6663 backend.c:6686 backend.c:6717
-#: backend.c:14584
+#: backend.c:6686 backend.c:6712 backend.c:6836 backend.c:6859 backend.c:6890
+#: backend.c:15105
 msgid "It is Black's turn"
 msgstr "輪到黑方走棋"
 
-#: backend.c:6552
+#: backend.c:6725
 msgid "Displayed position is not current"
 msgstr "顯示的盤面不是當前盤面"
 
-#: backend.c:6790
+#: backend.c:6963
 msgid "Illegal move"
 msgstr "著法錯誤"
 
-#: backend.c:6857
+#: backend.c:7030
 msgid "End of game"
 msgstr "棋局結束"
 
-#: backend.c:6860
+#: backend.c:7033
 msgid "Incorrect move"
 msgstr "著法錯誤"
 
-#: backend.c:7169 backend.c:7296
+#: backend.c:7423 backend.c:7569
 msgid "Pull pawn backwards to under-promote"
 msgstr ""
 
-#: backend.c:7527
+#: backend.c:7532
+msgid "only marked squares are legal"
+msgstr ""
+
+#: backend.c:7820
 msgid "Swiss tourney finished"
 msgstr ""
 
-#: backend.c:8103
+#: backend.c:8336
+msgid "could not load EGBB library"
+msgstr ""
+
+#: backend.c:8339
+msgid "wrong EGBB version"
+msgstr ""
+
+#: backend.c:8452
 msgid "Invalid pairing from pairing engine"
 msgstr ""
 
-#: backend.c:8236
+#: backend.c:8603
 #, c-format
 msgid "Illegal move \"%s\" from %s machine"
 msgstr "從%s機器讀到不合法著法\"%s\""
 
-#: backend.c:8457
+#: backend.c:8849
 msgid "Bad FEN received from engine"
 msgstr ""
 
-#: backend.c:8601 backend.c:13681 backend.c:13746
+#: backend.c:8950
+msgid "Engine did not send setup for non-standard variant"
+msgstr ""
+
+#: backend.c:9023 backend.c:14168 backend.c:14236
 #, c-format
 msgid "%s does not support analysis"
 msgstr "%s 不支持分析功能"
 
-#: backend.c:8667
+#: backend.c:9089
 #, c-format
 msgid "Illegal move \"%s\" (rejected by %s chess program)"
 msgstr "不合法著法\"%s\" (%s國際象棋程式拒絕接受該著法)"
 
-#: backend.c:8694
+#: backend.c:9116
 #, c-format
 msgid "Failed to start %s chess program %s on %s: %s\n"
 msgstr "無法啟動%s國際象棋程式 %s(在主機 %s 上),%s\n"
 
-#: backend.c:8715
+#: backend.c:9137
 #, c-format
 msgid "Hint: %s"
 msgstr "提示 %s"
 
-#: backend.c:8720
+#: backend.c:9142
 #, c-format
 msgid ""
 "Illegal hint move \"%s\"\n"
 "from %s chess program"
 msgstr ""
 
-#: backend.c:8895
+#: backend.c:9317
 msgid "Machine accepts your draw offer"
 msgstr "電腦同意和棋"
 
-#: backend.c:8898
+#: backend.c:9320
 msgid ""
-"Machine offers a draw\n"
-"Select Action / Draw to agree"
+"Machine offers a draw.\n"
+"Select Action / Draw to accept."
 msgstr ""
 
-#: backend.c:8977
+#. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone
+#: backend.c:9402
 msgid "failed writing PV"
 msgstr ""
 
-#: backend.c:9275
+#: backend.c:9701
 #, c-format
 msgid "Ambiguous move in ICS output: \"%s\""
 msgstr "ICS輸出不明確的著法\"%s\""
 
-#: backend.c:9285
+#: backend.c:9711
 #, c-format
 msgid "Illegal move in ICS output: \"%s\""
 msgstr "ICS輸出不明確的著法\"%s\""
 
-#: backend.c:9296
+#: backend.c:9722
 msgid "Gap in move list"
 msgstr "著法斷開"
 
-#: backend.c:9917 dialogs.c:460
+#: backend.c:10357
 #, c-format
 msgid "Variant %s not supported by %s"
 msgstr "變體 %s 不被 %s 所支持"
 
-#: backend.c:10038
+#: backend.c:10364
+#, c-format
+msgid ", but %s is"
+msgstr ""
+
+#: backend.c:10506
 #, c-format
 msgid "Startup failure on '%s'"
 msgstr "無法啟動'%s'"
 
-#: backend.c:10069
+#: backend.c:10537
 msgid "Waiting for first chess program"
 msgstr "等待第一個國際象棋程式"
 
-#: backend.c:10074 backend.c:13964
+#: backend.c:10542 backend.c:14454
 msgid "Waiting for second chess program"
 msgstr "等待第二個國際象棋程式"
 
-#: backend.c:10123
+#: backend.c:10591
 msgid "Could not write on tourney file"
 msgstr ""
 
-#: backend.c:10197
+#: backend.c:10665
 msgid ""
 "You cannot replace an engine while it is engaged!\n"
 "Terminate its game first."
 msgstr ""
 
-#: backend.c:10211
+#: backend.c:10679
 msgid "No engine with the name you gave is installed"
 msgstr ""
 
-#: backend.c:10213
+#: backend.c:10681
 msgid ""
 "First change an engine by editing the participants list\n"
 "of the Tournament Options dialog"
 msgstr ""
 
-#: backend.c:10214
+#: backend.c:10682
 msgid "You can only change one engine at the time"
 msgstr ""
 
-#: backend.c:10229 backend.c:10376
+#: backend.c:10697 backend.c:10845
 #, c-format
 msgid "No engine %s is installed"
 msgstr ""
 
-#: backend.c:10249
+#: backend.c:10717
 msgid ""
 "You must supply a tournament file,\n"
 "for storing the tourney progress"
 msgstr ""
 
-#: backend.c:10259
+#: backend.c:10727
 msgid "Not enough participants"
 msgstr ""
 
-#: backend.c:10460
+#: backend.c:10929
 #, fuzzy
 msgid "Bad tournament file"
 msgstr "棋局檔案錯誤"
 
-#: backend.c:10472
+#: backend.c:10941
 #, fuzzy
 msgid "Waiting for other game(s)"
 msgstr "等待第一個國際象棋程式"
 
-#: backend.c:10485
+#: backend.c:10954
 msgid "No pairing engine specified"
 msgstr ""
 
-#: backend.c:10962
+#: backend.c:11430
 #, c-format
 msgid "Match %s vs. %s: final score %d-%d-%d"
 msgstr "比賽 %s vs. %s: 最終比分 %d-%d-%d"
 
-#: backend.c:11424 backend.c:11455
+#: backend.c:11897 backend.c:11928
 #, c-format
 msgid "Illegal move: %d.%s%s"
 msgstr "不合法著法 %d.%s%s"
 
-#: backend.c:11444
+#: backend.c:11917
 #, c-format
 msgid "Ambiguous move: %d.%s%s"
 msgstr "不明確的著法 %d.%s%s"
 
-#: backend.c:11497 backend.c:12524 backend.c:12717 backend.c:13078
+#: backend.c:11971 backend.c:13010 backend.c:13203 backend.c:13567
 #, c-format
 msgid "Can't open \"%s\""
 msgstr "無法打開\"%s\""
 
-#: backend.c:11509 menus.c:116
+#: backend.c:11983 menus.c:116
 msgid "Cannot build game list"
 msgstr "無法建立棋局列表"
 
-#: backend.c:11594
+#: backend.c:12068
 msgid "No more games in this message"
 msgstr "這條訊息不包含更多的棋局"
 
-#: backend.c:11634
+#: backend.c:12108
 msgid "No game has been loaded yet"
 msgstr "尚未有棋局載入"
 
-#: backend.c:11638 backend.c:12505 ngamelist.c:129
+#: backend.c:12112 backend.c:12991 ngamelist.c:129
 msgid "Can't back up any further"
 msgstr "無法再後退了"
 
-#: backend.c:12077
+#: backend.c:12553
 msgid "Game number out of range"
 msgstr "棋局數量超出範圍"
 
-#: backend.c:12088
+#: backend.c:12564
 msgid "Can't seek on game file"
 msgstr "無法搜尋棋局檔案"
 
-#: backend.c:12146
+#: backend.c:12622
 msgid "Game not found in file"
 msgstr "檔案中沒有找到棋局"
 
-#: backend.c:12274 backend.c:12601
+#: backend.c:12751 backend.c:13087
 msgid "Bad FEN position in file"
 msgstr "檔案中的FEN盤面錯誤"
 
-#: backend.c:12426
+#: backend.c:12903
 msgid "No moves in game"
 msgstr "棋局中沒有著法"
 
-#: backend.c:12501
+#: backend.c:12987
 msgid "No position has been loaded yet"
 msgstr "尚未有盤面載入"
 
-#: backend.c:12562 backend.c:12573
+#: backend.c:13048 backend.c:13059
 msgid "Can't seek on position file"
 msgstr "無法搜尋盤面檔案"
 
-#: backend.c:12580 backend.c:12592
+#: backend.c:13066 backend.c:13078
 msgid "Position not found in file"
 msgstr "檔案中沒有找到盤面"
 
-#: backend.c:12632
+#: backend.c:13118
 msgid "Black to play"
 msgstr "輪到黑方走棋"
 
-#: backend.c:12635
+#: backend.c:13121
 msgid "White to play"
 msgstr "輪到紅方走棋"
 
-#: backend.c:12722 backend.c:13083
+#: backend.c:13208 backend.c:13572
 #, fuzzy
 msgid "Waiting for access to save file"
 msgstr "等待第二個國際象棋程式"
 
-#: backend.c:12724
+#: backend.c:13210
 msgid "Saving game"
 msgstr ""
 
-#: backend.c:12725
+#: backend.c:13211
 msgid "Bad Seek"
 msgstr ""
 
-#: backend.c:13085
+#: backend.c:13574
 #, fuzzy
 msgid "Saving position"
 msgstr "盤面檔案錯誤"
 
-#: backend.c:13211
+#: backend.c:13700
 msgid ""
 "You have edited the game history.\n"
 "Use Reload Same Game and make your move again."
 msgstr ""
 
-#: backend.c:13216
+#: backend.c:13705
 msgid ""
 "You have entered too many moves.\n"
 "Back up to the correct position and try again."
 msgstr ""
 
-#: backend.c:13221
+#: backend.c:13710
 msgid ""
 "Displayed position is not current.\n"
 "Step forward to the correct position and try again."
 msgstr ""
 
-#: backend.c:13268
+#: backend.c:13757
 msgid "You have not made a move yet"
 msgstr "你尚未走棋"
 
-#: backend.c:13289
+#: backend.c:13778
 msgid ""
 "The cmail message is not loaded.\n"
 "Use Reload CMail Message and make your move again."
 msgstr ""
 
-#: backend.c:13294
+#: backend.c:13783
 msgid "No unfinished games"
 msgstr "不存在未完成棋局"
 
-#: backend.c:13300
+#: backend.c:13789
 #, c-format
 msgid ""
 "You have already mailed a move.\n"
@@ -583,210 +606,212 @@ msgid ""
 "on the command line."
 msgstr ""
 
-#: backend.c:13315
+#: backend.c:13804
 msgid "Failed to invoke cmail"
 msgstr "呼叫cmail失敗"
 
-#: backend.c:13377
+#: backend.c:13866
 #, c-format
 msgid "Waiting for reply from opponent\n"
 msgstr "等待對手回應\n"
 
-#: backend.c:13399
+#: backend.c:13888
 #, c-format
 msgid "Still need to make move for game\n"
 msgstr "本棋局仍需走棋\n"
 
-#: backend.c:13403
+#: backend.c:13892
 #, c-format
 msgid "Still need to make moves for both games\n"
 msgstr "兩棋局皆仍需走棋\n"
 
-#: backend.c:13407
+#: backend.c:13896
 #, c-format
 msgid "Still need to make moves for all %d games\n"
 msgstr "所有 %d 棋局皆仍需走棋\n"
 
-#: backend.c:13414
+#: backend.c:13903
 #, c-format
 msgid "Still need to make a move for game %s\n"
 msgstr "棋局 %s 仍需走棋\n"
 
-#: backend.c:13420
+#: backend.c:13909
 #, c-format
 msgid "No unfinished games\n"
 msgstr "不存在未完成棋局\n"
 
-#: backend.c:13422
+#: backend.c:13911
 #, c-format
 msgid "Ready to send mail\n"
 msgstr "準備送信就緒\n"
 
-#: backend.c:13427
+#: backend.c:13916
 #, c-format
 msgid "Still need to make moves for games %s\n"
 msgstr "棋局 %s 仍需走棋\n"
 
-#: backend.c:13631
+#: backend.c:14118
 msgid "Edit comment"
 msgstr "編輯註解"
 
-#: backend.c:13633
+#: backend.c:14120
 #, c-format
 msgid "Edit comment on %d.%s%s"
 msgstr "編輯註解 %d.%s%s"
 
-#: backend.c:13688
+#: backend.c:14175
 #, c-format
 msgid "You are not observing a game"
 msgstr ""
 
-#: backend.c:13796
+#: backend.c:14286
 msgid "It is not White's turn"
 msgstr "沒有輪到紅方走棋"
 
-#: backend.c:13877
+#: backend.c:14367
 msgid "It is not Black's turn"
 msgstr "沒有輪到黑方走棋"
 
-#: backend.c:13985
+#: backend.c:14475
 #, c-format
 msgid "Starting %s chess program"
 msgstr ""
 
-#: backend.c:14013 backend.c:15127
+#: backend.c:14503 backend.c:15648
+#, fuzzy
 msgid ""
 "Wait until your turn,\n"
-"or select Move Now"
-msgstr ""
+"or select 'Move Now'."
+msgstr "等待對手走棋"
 
-#: backend.c:14147
+#: backend.c:14638
 msgid "Training mode off"
 msgstr "訓練模式已關閉"
 
-#: backend.c:14155
+#: backend.c:14646
 msgid "Training mode on"
 msgstr "訓練模式已打開"
 
-#: backend.c:14158
+#: backend.c:14649
 msgid "Already at end of game"
 msgstr "棋局已經結束"
 
-#: backend.c:14238
+#: backend.c:14729
 msgid "Warning: You are still playing a game"
 msgstr "注意:你正在進行棋局"
 
-#: backend.c:14241
+#: backend.c:14732
 msgid "Warning: You are still observing a game"
 msgstr "注意:你正在觀棋棋局"
 
-#: backend.c:14244
+#: backend.c:14735
 msgid "Warning: You are still examining a game"
 msgstr "注意:你正在研究棋局"
 
-#: backend.c:14311
+#: backend.c:14802
 msgid "Click clock to clear board"
 msgstr ""
 
-#: backend.c:14321
+#: backend.c:14812
 msgid "Close ICS engine analyze..."
 msgstr ""
 
-#: backend.c:14609
+#: backend.c:15130
 msgid "That square is occupied"
 msgstr "格子已有棋子"
 
-#: backend.c:14633 backend.c:14659
+#: backend.c:15154 backend.c:15180
 msgid "There is no pending offer on this move"
 msgstr "該著法沒有待定的提議"
 
-#: backend.c:14695 backend.c:14706
+#: backend.c:15216 backend.c:15227
 msgid "Your opponent is not out of time"
 msgstr "對手沒有超時"
 
-#: backend.c:14772
+#: backend.c:15293
 msgid "You must make your move before offering a draw"
 msgstr "必須走完棋才能提和"
 
-#: backend.c:15109
+#: backend.c:15630
 msgid "You are not examining a game"
 msgstr "沒有分析棋局"
 
-#: backend.c:15113
+#: backend.c:15634
 msgid "You can't revert while pausing"
 msgstr "暫停時不能復原棋局"
 
-#: backend.c:15167 backend.c:15174
+#: backend.c:15688 backend.c:15695
 msgid "It is your turn"
 msgstr "輪到你走棋"
 
-#: backend.c:15225 backend.c:15232 backend.c:15285 backend.c:15292
-msgid "Wait until your turn"
+#: backend.c:15746 backend.c:15753 backend.c:15806 backend.c:15813
+#, fuzzy
+msgid "Wait until your turn."
 msgstr "等待對手走棋"
 
-#: backend.c:15237
+#: backend.c:15758
 msgid "No hint available"
 msgstr "沒有可用的提示"
 
-#: backend.c:15253 ngamelist.c:355
+#: backend.c:15774 ngamelist.c:355
 #, fuzzy
 msgid "Game list not loaded or empty"
 msgstr "尚未有棋局載入"
 
-#: backend.c:15260
+#: backend.c:15781
 msgid "Book file exists! Try again for overwrite."
 msgstr ""
 
-#: backend.c:15738
+#: backend.c:16259
 #, c-format
 msgid "Error writing to %s chess program"
 msgstr "發送訊息到%s國際象棋程式時出錯"
 
-#: backend.c:15741 backend.c:15772
+#: backend.c:16262 backend.c:16293
 #, c-format
 msgid "%s program exits in draw position (%s)"
 msgstr ""
 
-#: backend.c:15767
+#: backend.c:16288
 #, c-format
 msgid "Error: %s chess program (%s) exited unexpectedly"
 msgstr "錯誤:%s國際象棋程式(%s)異常終止"
 
-#: backend.c:15785
+#: backend.c:16306
 #, c-format
 msgid "Error reading from %s chess program (%s)"
 msgstr "從%s國際象棋程式(%s)接收訊息時出錯"
 
-#: backend.c:16187
+#: backend.c:16730
 #, c-format
 msgid "%s engine has too many options\n"
 msgstr ""
 
-#: backend.c:16343
+#: backend.c:16886
 msgid "Displayed move is not current"
 msgstr "顯示的著法不是當前著法"
 
-#: backend.c:16352
+#: backend.c:16895
 msgid "Could not parse move"
 msgstr "無法解析著法"
 
-#: backend.c:16477 backend.c:16499
+#: backend.c:17020 backend.c:17042
 msgid "Both flags fell"
 msgstr "雙方都超時了"
 
-#: backend.c:16479
+#: backend.c:17022
 msgid "White's flag fell"
 msgstr "紅方超時"
 
-#: backend.c:16501
+#: backend.c:17044
 msgid "Black's flag fell"
 msgstr "黑方超時"
 
-#: backend.c:16632
+#: backend.c:17175
 msgid "Clock adjustment not allowed in auto-flag mode"
 msgstr ""
 
-#: backend.c:17467
+#: backend.c:18025
 msgid "Bad FEN position in clipboard"
 msgstr "剪貼簿的FEN盤面錯誤"
 
@@ -807,1372 +832,1427 @@ msgstr ""
 msgid "Could not create book"
 msgstr "無法解析著法"
 
-#: dialogs.c:259
+#: dialogs.c:283
 #, fuzzy
 msgid "Tournament file:          "
 msgstr "封盤(J)   F7"
 
-#: dialogs.c:260
-msgid "Sync after round"
+#: dialogs.c:284
+msgid "For concurrent playing of tourney with multiple XBoards:"
 msgstr ""
 
-#: dialogs.c:261
-msgid "    (for concurrent playing of a single"
+#: dialogs.c:285
+msgid "Sync after round"
 msgstr ""
 
-#: dialogs.c:262
+#: dialogs.c:286
 msgid "Sync after cycle"
 msgstr ""
 
-#: dialogs.c:263
-msgid "      tourney with multiple XBoards)"
-msgstr ""
-
-#: dialogs.c:264
+#: dialogs.c:287
 msgid "Tourney participants:"
 msgstr ""
 
-#: dialogs.c:265
+#: dialogs.c:288
 msgid "Select Engine:"
 msgstr ""
 
-#: dialogs.c:273
+#: dialogs.c:296
 msgid "Tourney type (0 = round-robin, 1 = gauntlet):"
 msgstr ""
 
-#: dialogs.c:274
+#: dialogs.c:297
 msgid "Number of tourney cycles (or Swiss rounds):"
 msgstr ""
 
-#: dialogs.c:275
+#: dialogs.c:298
 #, fuzzy
 msgid "Default Number of Games in Match (or Pairing):"
 msgstr "預設比賽對局數"
 
-#: dialogs.c:276
+#: dialogs.c:299
 msgid "Pause between Match Games (msec):"
 msgstr ""
 
-#: dialogs.c:277
+#: dialogs.c:300
 #, fuzzy
 msgid "Save Tourney Games on:"
 msgstr "儲存棋局選項"
 
-#: dialogs.c:278
+#: dialogs.c:301
 msgid "Game File with Opening Lines:"
 msgstr ""
 
-#: dialogs.c:279
+#: dialogs.c:302
 msgid "Game Number (-1 or -2 = Auto-Increment):"
 msgstr ""
 
-#: dialogs.c:280
+#: dialogs.c:303
 msgid "File with Start Positions:"
 msgstr ""
 
-#: dialogs.c:281
+#: dialogs.c:304
 msgid "Position Number (-1 or -2 = Auto-Increment):"
 msgstr ""
 
-#: dialogs.c:282
+#: dialogs.c:305
 msgid "Rewind Index after this many Games (0 = never):"
 msgstr ""
 
-#: dialogs.c:283
+#: dialogs.c:306
 msgid "Disable own engine books by default"
 msgstr ""
 
-#: dialogs.c:284
+#: dialogs.c:307 dialogs.c:1565
+msgid "Time Control"
+msgstr ""
+
+#: dialogs.c:308
+#, fuzzy
+msgid "Common Engine"
+msgstr "通用引擎設定(E)...   Alt+Shift+U"
+
+#: dialogs.c:309 dialogs.c:441
+msgid "General Options"
+msgstr "一般選項"
+
+#: dialogs.c:310
+msgid "Continue Later"
+msgstr ""
+
+#: dialogs.c:311
 msgid "Replace Engine"
 msgstr ""
 
-#: dialogs.c:285
+#: dialogs.c:312
 msgid "Upgrade Engine"
 msgstr ""
 
-#: dialogs.c:286
+#: dialogs.c:313
 msgid "Clone Tourney"
 msgstr ""
 
-#: dialogs.c:316
+#: dialogs.c:351
 msgid "First you must specify an existing tourney file to clone"
 msgstr ""
 
-#: dialogs.c:332 dialogs.c:1320
+#: dialogs.c:367 dialogs.c:1407
 msgid "# no engines are installed"
 msgstr ""
 
-#: dialogs.c:344
-msgid "Match Options"
+#: dialogs.c:375
+msgid "Internal error: PARTICIPANTS set wrong"
 msgstr ""
 
-#: dialogs.c:363
+#: dialogs.c:383
+#, fuzzy
+msgid "Tournament Options"
+msgstr "聲音"
+
+#: dialogs.c:402
 msgid "Absolute Analysis Scores"
 msgstr ""
 
-#: dialogs.c:364
+#: dialogs.c:403
 msgid "Almost Always Queen (Detour Under-Promote)"
 msgstr ""
 
-#: dialogs.c:365 menus.c:714
+#: dialogs.c:404 menus.c:714
 msgid "Animate Dragging"
 msgstr "動畫拖曳(D)"
 
-#: dialogs.c:366 menus.c:715
+#: dialogs.c:405 menus.c:715
 msgid "Animate Moving"
 msgstr "動畫走棋(A)"
 
-#: dialogs.c:367 menus.c:716
+#: dialogs.c:406 menus.c:716
 msgid "Auto Flag"
 msgstr "自動超時判負(F) Ctrl+Shift+F"
 
-#: dialogs.c:368 menus.c:717
+#: dialogs.c:407 menus.c:717
 msgid "Auto Flip View"
 msgstr "自動翻轉棋盤(V)"
 
-#: dialogs.c:369 menus.c:718
+#: dialogs.c:408 menus.c:718
 msgid "Blindfold"
 msgstr "盲棋(B)"
 
-#: dialogs.c:370
+#. 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 ""
 
-#: dialogs.c:371
+#: dialogs.c:411
 msgid "Enable Variation Trees"
 msgstr ""
 
-#: dialogs.c:372
+#: dialogs.c:412
+msgid "Headers in Engine Output Window"
+msgstr ""
+
+#: dialogs.c:413
 msgid "Hide Thinking from Human"
 msgstr "與人對弈時隱藏思考細節"
 
-#: dialogs.c:373 menus.c:723
+#: dialogs.c:414 menus.c:723
 msgid "Highlight Last Move"
 msgstr "標記上一著法(M)"
 
-#: dialogs.c:374
+#: dialogs.c:415
 msgid "Highlight with Arrow"
 msgstr "用箭頭突出移動"
 
-#: dialogs.c:375 menus.c:726
+#: dialogs.c:416 menus.c:726
 msgid "One-Click Moving"
 msgstr "單擊移動(M)"
 
-#: dialogs.c:376
+#: dialogs.c:417
 msgid "Periodic Updates (in Analysis Mode)"
 msgstr "定期更新(分析模式)"
 
-#: dialogs.c:378
+#: dialogs.c:419
 msgid "Play Move(s) of Clicked PV (Analysis)"
 msgstr ""
 
-#: dialogs.c:379 dialogs.c:514 menus.c:728
+#: dialogs.c:420 dialogs.c:597 menus.c:728
 msgid "Ponder Next Move"
 msgstr "同步思考(N)"
 
-#: dialogs.c:380
+#: dialogs.c:421
 msgid "Popup Exit Messages"
 msgstr "離開時提示(P)"
 
-#: dialogs.c:381 menus.c:730
+#: dialogs.c:422 menus.c:730
 msgid "Popup Move Errors"
 msgstr "提示錯誤著法(E)"
 
-#: dialogs.c:382
+#: dialogs.c:423
 #, fuzzy
 msgid "Scores in Move List"
 msgstr "取得著法列表(G)"
 
-#: dialogs.c:383
+#: dialogs.c:424
 msgid "Show Coordinates"
 msgstr "顯示坐標(C)"
 
-#: dialogs.c:384
+#: dialogs.c:425
 msgid "Show Target Squares"
 msgstr ""
 
-#: dialogs.c:385
+#: dialogs.c:426
 msgid "Sticky Windows"
 msgstr ""
 
-#: dialogs.c:386 menus.c:733
+#: dialogs.c:427 menus.c:733
 msgid "Test Legality"
 msgstr "檢查著法合理性(L) Cl+Sh+L"
 
-#: dialogs.c:387
+#: dialogs.c:428
 msgid "Top-Level Dialogs"
 msgstr ""
 
-#: dialogs.c:388
+#: dialogs.c:429
 msgid "Flash Moves (0 = no flashing):"
 msgstr ""
 
-#: dialogs.c:389
+#: dialogs.c:430
 msgid "Flash Rate (high = fast):"
 msgstr ""
 
-#: dialogs.c:390
+#: dialogs.c:431
 msgid "Animation Speed (high = slow):"
 msgstr ""
 
-#: dialogs.c:391
+#: dialogs.c:432
 #, fuzzy
 msgid "Zoom factor in Evaluation Graph:"
 msgstr "審局圖"
 
-#: dialogs.c:400
-msgid "General Options"
-msgstr "一般選項"
-
-#: dialogs.c:410
-msgid "normal"
+#: dialogs.c:452
+msgid "Normal"
 msgstr ""
 
-#: dialogs.c:411
-msgid "makruk"
+#: dialogs.c:453
+msgid "Makruk"
 msgstr ""
 
-#: dialogs.c:412
+#: dialogs.c:454
 msgid "FRC"
 msgstr ""
 
-#: dialogs.c:413
-msgid "shatranj"
+#: dialogs.c:455
+msgid "Shatranj"
 msgstr ""
 
-#: dialogs.c:414
-msgid "wild castle"
+#: dialogs.c:456
+msgid "Wild castle"
 msgstr ""
 
-#: dialogs.c:415
-msgid "knightmate"
-msgstr ""
+#: dialogs.c:457
+#, fuzzy
+msgid "Knightmate"
+msgstr "馬"
 
-#: dialogs.c:416
-msgid "no castle"
+#: dialogs.c:458
+msgid "No castle"
 msgstr ""
 
-#: dialogs.c:417
-msgid "cylinder *"
+#: dialogs.c:459
+msgid "Cylinder *"
 msgstr ""
 
-#: dialogs.c:418
+#: dialogs.c:460
 msgid "3-checks"
 msgstr ""
 
-#: dialogs.c:419
+#: dialogs.c:461
 msgid "berolina *"
 msgstr ""
 
-#: dialogs.c:420
+#: dialogs.c:462
 msgid "atomic"
 msgstr ""
 
-#: dialogs.c:421
+#: dialogs.c:463
 msgid "two kings"
 msgstr ""
 
-#: dialogs.c:422
+#: dialogs.c:464
+msgid " "
+msgstr ""
+
+#: dialogs.c:465
+msgid "Spartan"
+msgstr ""
+
+#: dialogs.c:466
 msgid "Board size ( -1 = default for selected variant):"
 msgstr ""
 
-#: dialogs.c:423
+#: dialogs.c:467
 msgid "Number of Board Ranks:"
 msgstr ""
 
-#: dialogs.c:424
+#: dialogs.c:468
 msgid "Number of Board Files:"
 msgstr ""
 
-#: dialogs.c:425
+#: dialogs.c:469
 msgid "Holdings Size:"
 msgstr ""
 
-#: dialogs.c:429
-msgid "fairy"
+#: dialogs.c:471
+msgid ""
+"Variants marked with * can only be played\n"
+"with legality testing off."
 msgstr ""
 
-#: dialogs.c:430
+#: dialogs.c:473
+msgid "ASEAN"
+msgstr ""
+
+#: dialogs.c:474
 msgid "Great Shatranj (10x8)"
 msgstr ""
 
-#: dialogs.c:431
+#: dialogs.c:475
 msgid "Seirawan"
 msgstr ""
 
-#: dialogs.c:432
-msgid "falcon (10x8)"
+#: dialogs.c:476
+msgid "Falcon (10x8)"
 msgstr ""
 
-#: dialogs.c:433
+#: dialogs.c:477
 msgid "Superchess"
 msgstr ""
 
-#: dialogs.c:434
+#: dialogs.c:478
 msgid "Capablanca (10x8)"
 msgstr ""
 
-#: dialogs.c:435
-msgid "crazyhouse"
+#: dialogs.c:479
+msgid "Crazyhouse"
 msgstr ""
 
-#: dialogs.c:436
+#: dialogs.c:480
 msgid "Gothic (10x8)"
 msgstr ""
 
-#: dialogs.c:437
-msgid "bughouse"
+#: dialogs.c:481
+msgid "Bughouse"
 msgstr ""
 
-#: dialogs.c:438
-msgid "janus (10x8)"
+#: dialogs.c:482
+msgid "Janus (10x8)"
 msgstr ""
 
-#: dialogs.c:439
-msgid "suicide"
+#: dialogs.c:483
+msgid "Suicide"
 msgstr ""
 
-#: dialogs.c:440
+#: dialogs.c:484
 msgid "CRC (10x8)"
 msgstr ""
 
-#: dialogs.c:441
+#: dialogs.c:485
 msgid "give-away"
 msgstr ""
 
-#: dialogs.c:442
+#: dialogs.c:486
 msgid "grand (10x10)"
 msgstr ""
 
-#: dialogs.c:443
+#: dialogs.c:487
 msgid "losers"
 msgstr ""
 
-#: dialogs.c:444
+#: dialogs.c:488
 msgid "shogi (9x9)"
 msgstr ""
 
-#: dialogs.c:445
-msgid "Spartan"
+#: dialogs.c:489
+msgid "fairy"
 msgstr ""
 
-#: dialogs.c:446
+#: dialogs.c:490
 msgid "xiangqi (9x10)"
 msgstr ""
 
-#: dialogs.c:447
-msgid " "
+#: dialogs.c:491
+msgid "mighty lion"
 msgstr ""
 
-#: dialogs.c:448
+#: dialogs.c:492
 msgid "courier (12x8)"
 msgstr ""
 
-#: dialogs.c:465
+#: dialogs.c:493
+msgid "chu chess (10x10)"
+msgstr ""
+
+#: dialogs.c:494
+msgid "chu shogi (12x12)"
+msgstr ""
+
+#: dialogs.c:526
 #, c-format
 msgid "Warning: second engine (%s) does not support this!"
 msgstr "警告: 第二個引擎(%s) 不支持此!"
 
-#: dialogs.c:488
+#: dialogs.c:554
 #, c-format
-msgid "Only bughouse is not available in viewer mode"
+msgid "Only bughouse is not available in viewer mode."
 msgstr ""
 
-#: dialogs.c:489
+#: dialogs.c:555
 #, c-format
 msgid ""
-"All variants not supported by first engine\n"
-"(currently %s) are disabled"
+"All variants not supported by the first engine\n"
+"(currently %s) are disabled."
 msgstr ""
 
-#: dialogs.c:490
+#: dialogs.c:572
 msgid "New Variant"
 msgstr "變種"
 
-#: dialogs.c:515
+#: dialogs.c:598
 msgid "Maximum Number of CPUs per Engine:"
 msgstr "最大CPU數"
 
-#: dialogs.c:516
+#: dialogs.c:599
 msgid "Polygot Directory:"
 msgstr ""
 
-#: dialogs.c:517
+#: dialogs.c:600
 msgid "Hash-Table Size (MB):"
 msgstr "雜湊表大小(MB)"
 
-#: dialogs.c:518
+#: dialogs.c:601
 msgid "Nalimov EGTB Path:"
 msgstr "EGTB 路徑"
 
-#: dialogs.c:519
+#: dialogs.c:602
 msgid "EGTB Cache Size (MB):"
 msgstr "EGTB 大小(MB)"
 
-#: dialogs.c:520
+#: dialogs.c:603
 msgid "Use GUI Book"
 msgstr ""
 
-#: dialogs.c:521
+#: dialogs.c:604
 msgid "Opening-Book Filename:"
 msgstr ""
 
-#: dialogs.c:522
+#: dialogs.c:605
 msgid "Book Depth (moves):"
 msgstr "庫著法深度"
 
-#: dialogs.c:523
+#: dialogs.c:606
 msgid "Book Variety (0) vs. Strength (100):"
 msgstr "庫變例"
 
-#: dialogs.c:524
+#: dialogs.c:607
 msgid "Engine #1 Has Own Book"
 msgstr "引擎1有自用庫"
 
-#: dialogs.c:525
+#: dialogs.c:608
 msgid "Engine #2 Has Own Book          "
 msgstr ""
 
-#: dialogs.c:534
+#: dialogs.c:617
 msgid "Common Engine Settings"
 msgstr "通用引擎設定"
 
-#: dialogs.c:540
+#: dialogs.c:623
 msgid "Detect all Mates"
 msgstr "檢測將殺(M)"
 
-#: dialogs.c:541
+#: dialogs.c:624
 msgid "Verify Engine Result Claims"
 msgstr "驗證引擎聲明(V)"
 
-#: dialogs.c:542
+#: dialogs.c:625
 msgid "Draw if Insufficient Mating Material"
 msgstr "子力不足時判和(I)"
 
-#: dialogs.c:543
+#: dialogs.c:626
 msgid "Adjudicate Trivial Draws (3-Move Delay)"
 msgstr "簡易和棋判決(T)"
 
-#: dialogs.c:544
+#: dialogs.c:627
 msgid "N-Move Rule:"
 msgstr ""
 
-#: dialogs.c:545
+#: dialogs.c:628
 msgid "N-fold Repeats:"
 msgstr ""
 
-#: dialogs.c:546
+#: dialogs.c:629
 msgid "Draw after N Moves Total:"
 msgstr "幾著後判和"
 
-#: dialogs.c:547
+#: dialogs.c:630
 msgid "Win / Loss Threshold:"
 msgstr "輸/贏判決門檻"
 
-#: dialogs.c:548
+#: dialogs.c:631
 msgid "Negate Score of Engine #1"
 msgstr "引擎 #1 是絕對分數"
 
-#: dialogs.c:549
+#: dialogs.c:632
 msgid "Negate Score of Engine #2"
 msgstr "引擎 #2 是絕對分數"
 
-#: dialogs.c:556
+#: dialogs.c:639
 #, fuzzy
 msgid "Adjudicate non-ICS Games"
 msgstr "裁決紅贏 (W)"
 
-#: dialogs.c:569
+#: dialogs.c:652
 msgid "Auto-Kibitz"
 msgstr "自動\"kibitz\"(A)"
 
-#: dialogs.c:570
+#: dialogs.c:653
 msgid "Auto-Comment"
 msgstr "自動註解(A)"
 
-#: dialogs.c:571
+#: dialogs.c:654
 msgid "Auto-Observe"
 msgstr "自動觀棋(O)"
 
-#: dialogs.c:572
+#: dialogs.c:655
 msgid "Auto-Raise Board"
 msgstr "自動改變棋盤大小(R)"
 
-#: dialogs.c:573
+#: dialogs.c:656
 msgid "Auto-Create Logon Script"
 msgstr ""
 
-#: dialogs.c:574
+#: dialogs.c:657
 msgid "Background Observe while Playing"
 msgstr "背景觀察(v)"
 
-#: dialogs.c:575
+#: dialogs.c:658
 msgid "Dual Board for Background-Observed Game"
 msgstr "雙棋盤(D)"
 
-#: dialogs.c:576
+#: dialogs.c:659
 msgid "Get Move List"
 msgstr "取得著法列表(G)"
 
-#: dialogs.c:577
+#: dialogs.c:660
 msgid "Quiet Play"
 msgstr "落子無聲(Q)"
 
-#: dialogs.c:578
+#: dialogs.c:661
 msgid "Seek Graph"
 msgstr "可選對手圖表(k)"
 
-#: dialogs.c:579
+#: dialogs.c:662
 msgid "Auto-Refresh Seek Graph"
 msgstr "自動刷新圖表(R)"
 
-#: dialogs.c:580
+#: dialogs.c:663
 msgid "Auto-InputBox PopUp"
 msgstr ""
 
-#: dialogs.c:581
+#: dialogs.c:664
+#, fuzzy
+msgid "Quit after game"
+msgstr "等待第一個國際象棋程式"
+
+#: dialogs.c:665
 msgid "Premove"
 msgstr "預先走棋(P)"
 
-#: dialogs.c:582
+#: dialogs.c:666
 msgid "Premove for White"
 msgstr ""
 
-#: dialogs.c:583
+#: dialogs.c:667
 msgid "First White Move:"
 msgstr "紅方先走(W)"
 
-#: dialogs.c:584
+#: dialogs.c:668
 msgid "Premove for Black"
 msgstr ""
 
-#: dialogs.c:585
+#: dialogs.c:669
 msgid "First Black Move:"
 msgstr "黑方先走(B)"
 
-#: dialogs.c:587
+#: dialogs.c:671
 msgid "Alarm"
 msgstr "提示"
 
-#: dialogs.c:588
+#: dialogs.c:672
 msgid "Alarm Time (msec):"
 msgstr ""
 
-#: dialogs.c:590
+#: dialogs.c:674
 msgid "Colorize Messages"
 msgstr ""
 
-#: dialogs.c:591
+#: dialogs.c:675
 msgid "Shout Text Colors:"
 msgstr ""
 
-#: dialogs.c:592
+#: dialogs.c:676
 msgid "S-Shout Text Colors:"
 msgstr ""
 
-#: dialogs.c:593
+#: dialogs.c:677
 msgid "Channel #1 Text Colors:"
 msgstr ""
 
-#: dialogs.c:594
+#: dialogs.c:678
 msgid "Other Channel Text Colors:"
 msgstr ""
 
-#: dialogs.c:595
+#: dialogs.c:679
 msgid "Kibitz Text Colors:"
 msgstr ""
 
-#: dialogs.c:596
+#: dialogs.c:680
 msgid "Tell Text Colors:"
 msgstr ""
 
-#: dialogs.c:597
+#: dialogs.c:681
 msgid "Challenge Text Colors:"
 msgstr ""
 
-#: dialogs.c:598
+#: dialogs.c:682
 msgid "Request Text Colors:"
 msgstr ""
 
-#: dialogs.c:599
+#: dialogs.c:683
 msgid "Seek Text Colors:"
 msgstr ""
 
-#: dialogs.c:606
+#: dialogs.c:690
 msgid "ICS Options"
 msgstr "ICS設定"
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Exact position match"
 msgstr ""
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Shown position is subset"
 msgstr ""
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Same material with exactly same Pawn chain"
 msgstr ""
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Same material"
 msgstr ""
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Material range (top board half optional)"
 msgstr ""
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Material difference (optional stuff balanced)"
 msgstr ""
 
-#: dialogs.c:624
+#: dialogs.c:708
 msgid "Auto-Display Tags"
 msgstr ""
 
-#: dialogs.c:625
+#: dialogs.c:709
 msgid "Auto-Display Comment"
 msgstr ""
 
-#: dialogs.c:626
+#: dialogs.c:710
 msgid ""
 "Auto-Play speed of loaded games\n"
 "(0 = instant, -1 = off):"
 msgstr ""
 
-#: dialogs.c:627
+#: dialogs.c:711
 msgid "Seconds per Move:"
 msgstr ""
 
-#: dialogs.c:628
+#: dialogs.c:712
 msgid ""
 "\n"
 "options to use in game-viewer mode:"
 msgstr ""
 
-#: dialogs.c:630
+#: dialogs.c:714
 msgid ""
 "\n"
 "Thresholds for position filtering in game list:"
 msgstr ""
 
-#: dialogs.c:631
+#: dialogs.c:715
 msgid "Elo of strongest player at least:"
 msgstr ""
 
-#: dialogs.c:632
+#: dialogs.c:716
 msgid "Elo of weakest player at least:"
 msgstr ""
 
-#: dialogs.c:633
+#: dialogs.c:717
 #, fuzzy
 msgid "No games before year:"
 msgstr "尚未有棋局載入"
 
-#: dialogs.c:634
+#: dialogs.c:718
 msgid "Minimum nr consecutive positions:"
 msgstr ""
 
-#: dialogs.c:635
+#: dialogs.c:719
 msgid "Search mode:"
 msgstr ""
 
-#: dialogs.c:636
+#: dialogs.c:720
 msgid "Also match reversed colors"
 msgstr ""
 
-#: dialogs.c:637
+#: dialogs.c:721
 msgid "Also match left-right flipped position"
 msgstr ""
 
-#: dialogs.c:645
+#: dialogs.c:729
 msgid "Load Game Options"
 msgstr "載入棋局選項"
 
-#: dialogs.c:657
+#: dialogs.c:741
 msgid "Auto-Save Games"
 msgstr ""
 
-#: dialogs.c:658
+#: dialogs.c:742
 msgid "Own Games Only"
 msgstr ""
 
-#: dialogs.c:659
+#: dialogs.c:743
 msgid "Save Games on File:"
 msgstr ""
 
-#: dialogs.c:660
+#: dialogs.c:744
 msgid "Save Final Positions on File:"
 msgstr ""
 
-#: dialogs.c:661
+#: dialogs.c:745
 msgid "PGN Event Header:"
 msgstr ""
 
-#: dialogs.c:662
+#: dialogs.c:746
 msgid "Old Save Style (as opposed to PGN)"
 msgstr ""
 
-#: dialogs.c:663
+#: dialogs.c:747
 msgid "Include Number Tag in tourney PGN"
 msgstr ""
 
-#: dialogs.c:664
+#: dialogs.c:748
 msgid "Save Score/Depth Info in PGN"
 msgstr ""
 
-#: dialogs.c:665
+#: dialogs.c:749
 msgid "Save Out-of-Book Info in PGN           "
 msgstr ""
 
-#: dialogs.c:672
+#: dialogs.c:756
 msgid "Save Game Options"
 msgstr "儲存棋局選項"
 
-#: dialogs.c:681
+#: dialogs.c:765
 msgid "No Sound"
 msgstr "無聲"
 
-#: dialogs.c:682
+#: dialogs.c:766
 msgid "Default Beep"
 msgstr "預設聲音"
 
-#: dialogs.c:683
+#: dialogs.c:767
 msgid "Above WAV File"
 msgstr ""
 
-#: dialogs.c:684
+#: dialogs.c:768
 msgid "Car Horn"
 msgstr ""
 
-#: dialogs.c:685
+#: dialogs.c:769
 msgid "Cymbal"
 msgstr ""
 
-#: dialogs.c:686
+#: dialogs.c:770
 msgid "Ding"
 msgstr ""
 
-#: dialogs.c:687
+#: dialogs.c:771
 msgid "Gong"
 msgstr ""
 
-#: dialogs.c:688
+#: dialogs.c:772
 msgid "Laser"
 msgstr ""
 
-#: dialogs.c:689
+#: dialogs.c:773
 msgid "Penalty"
 msgstr ""
 
-#: dialogs.c:690
+#: dialogs.c:774
 msgid "Phone"
 msgstr ""
 
-#: dialogs.c:691
+#: dialogs.c:775
 msgid "Pop"
 msgstr ""
 
-#: dialogs.c:692
+#: dialogs.c:776
+msgid "Roar"
+msgstr ""
+
+#: dialogs.c:777
 msgid "Slap"
 msgstr ""
 
-#: dialogs.c:693
+#: dialogs.c:778
 msgid "Wood Thunk"
 msgstr ""
 
-#: dialogs.c:695
+#: dialogs.c:780
 msgid "User File"
 msgstr ""
 
-#: dialogs.c:717
+#: dialogs.c:803
 msgid "User WAV File:"
 msgstr ""
 
-#: dialogs.c:718
+#: dialogs.c:804
 msgid "Sound Program:"
 msgstr ""
 
-#: dialogs.c:719
+#: dialogs.c:805
 msgid "Try-Out Sound:"
 msgstr ""
 
-#: dialogs.c:720
+#: dialogs.c:806
 msgid "Play"
 msgstr "播放"
 
-#: dialogs.c:721
+#: dialogs.c:807
 msgid "Move:"
 msgstr ""
 
-#: dialogs.c:722
+#: dialogs.c:808
 msgid "Win:"
 msgstr ""
 
-#: dialogs.c:723
+#: dialogs.c:809
 msgid "Lose:"
 msgstr ""
 
-#: dialogs.c:724
+#: dialogs.c:810
 msgid "Draw:"
 msgstr ""
 
-#: dialogs.c:725
+#: dialogs.c:811
 msgid "Unfinished:"
 msgstr ""
 
-#: dialogs.c:726
+#: dialogs.c:812
 msgid "Alarm:"
 msgstr ""
 
-#: dialogs.c:727
+#: dialogs.c:813
 msgid "Challenge:"
 msgstr ""
 
-#: dialogs.c:729
+#: dialogs.c:815
 msgid "Sounds Directory:"
 msgstr ""
 
-#: dialogs.c:730
+#: dialogs.c:816
 msgid "Shout:"
 msgstr ""
 
-#: dialogs.c:731
+#: dialogs.c:817
 msgid "S-Shout:"
 msgstr ""
 
-#: dialogs.c:732
+#: dialogs.c:818
 msgid "Channel:"
 msgstr ""
 
-#: dialogs.c:733
+#: dialogs.c:819
 msgid "Channel 1:"
 msgstr ""
 
-#: dialogs.c:734
+#: dialogs.c:820
 msgid "Tell:"
 msgstr ""
 
-#: dialogs.c:735
+#: dialogs.c:821
 msgid "Kibitz:"
 msgstr ""
 
-#: dialogs.c:736
+#: dialogs.c:822
 msgid "Request:"
 msgstr ""
 
-#: dialogs.c:737
+#: dialogs.c:823
+msgid "Lion roar:"
+msgstr ""
+
+#: dialogs.c:824
 msgid "Seek:"
 msgstr ""
 
-#: dialogs.c:753
+#: dialogs.c:840
 msgid "Sound Options"
 msgstr "聲音"
 
-#: dialogs.c:774
+#: dialogs.c:861
 msgid "White Piece Color:"
 msgstr ""
 
 #. TRANSLATORS: R = single letter for the color red
-#: dialogs.c:777 dialogs.c:786 dialogs.c:792 dialogs.c:798 dialogs.c:804
-#: dialogs.c:810
+#: dialogs.c:864 dialogs.c:873 dialogs.c:879 dialogs.c:885 dialogs.c:891
+#: dialogs.c:897
 msgid "R"
 msgstr ""
 
 #. TRANSLATORS: G = single letter for the color green
-#: dialogs.c:779 dialogs.c:787 dialogs.c:793 dialogs.c:799 dialogs.c:805
-#: dialogs.c:811
+#: dialogs.c:866 dialogs.c:874 dialogs.c:880 dialogs.c:886 dialogs.c:892
+#: dialogs.c:898
 msgid "G"
 msgstr ""
 
 #. TRANSLATORS: B = single letter for the color blue
-#: dialogs.c:781 dialogs.c:788 dialogs.c:794 dialogs.c:800 dialogs.c:806
-#: dialogs.c:812
+#: dialogs.c:868 dialogs.c:875 dialogs.c:881 dialogs.c:887 dialogs.c:893
+#: dialogs.c:899
 msgid "B"
 msgstr ""
 
 #. TRANSLATORS: D = single letter to make a color darker
-#: dialogs.c:783 dialogs.c:789 dialogs.c:795 dialogs.c:801 dialogs.c:807
-#: dialogs.c:813
+#: dialogs.c:870 dialogs.c:876 dialogs.c:882 dialogs.c:888 dialogs.c:894
+#: dialogs.c:900
 msgid "D"
 msgstr ""
 
-#: dialogs.c:784
+#: dialogs.c:871
 msgid "Black Piece Color:"
 msgstr "黑子"
 
-#: dialogs.c:790
+#: dialogs.c:877
 msgid "Light Square Color:"
 msgstr "白格"
 
-#: dialogs.c:796
+#: dialogs.c:883
 msgid "Dark Square Color:"
 msgstr "黑格"
 
-#: dialogs.c:802
+#: dialogs.c:889
 msgid "Highlight Color:"
 msgstr "格子標記"
 
-#: dialogs.c:808
+#: dialogs.c:895
 msgid "Premove Highlight Color:"
 msgstr "預先走棋標記"
 
-#: dialogs.c:814
+#: dialogs.c:901
 msgid "Flip Pieces Shogi Style        (Colored buttons restore default)"
 msgstr ""
 
-#: dialogs.c:816
+#: dialogs.c:903
 msgid "Mono Mode"
 msgstr "黑白"
 
-#: dialogs.c:817
-msgid "Line Gap ( -1 = default for board size):"
+#: dialogs.c:904
+msgid "Line Gap (-1 = default for board size):"
 msgstr ""
 
-#: dialogs.c:818
+#: dialogs.c:905
 msgid "Use Board Textures"
 msgstr ""
 
-#: dialogs.c:819
+#: dialogs.c:906
 msgid "Light-Squares Texture File:"
 msgstr ""
 
-#: dialogs.c:820
+#: dialogs.c:907
 msgid "Dark-Squares Texture File:"
 msgstr ""
 
-#: dialogs.c:821
+#: dialogs.c:908
 msgid "Use external piece bitmaps with their own colors"
 msgstr ""
 
-#: dialogs.c:822
+#: dialogs.c:909
 msgid "Directory with Pieces Images:"
 msgstr ""
 
-#: dialogs.c:872
+#: dialogs.c:959
 msgid "Board Options"
 msgstr "棋盤選項"
 
-#: dialogs.c:925 menus.c:634
+#: dialogs.c:1012 menus.c:634
 msgid "ICS text menu"
 msgstr ""
 
-#: dialogs.c:947
+#: dialogs.c:1034
 msgid "clear"
 msgstr ""
 
-#: dialogs.c:948 dialogs.c:1036
+#: dialogs.c:1035 dialogs.c:1123
 msgid "save changes"
 msgstr ""
 
-#: dialogs.c:1051
+#: dialogs.c:1138
 #, fuzzy
 msgid "Edit book"
 msgstr "編輯(E)"
 
-#: dialogs.c:1051 menus.c:636
+#: dialogs.c:1138 menus.c:636
 msgid "Tags"
 msgstr "編輯標籤(T)"
 
-#: dialogs.c:1193
+#: dialogs.c:1280
 msgid "ICS input box"
 msgstr ""
 
-#: dialogs.c:1225
+#: dialogs.c:1312
 msgid "Type a move"
 msgstr ""
 
-#: dialogs.c:1251
+#: dialogs.c:1338
 #, fuzzy
 msgid "Engine has no options"
 msgstr "引擎1有自用庫"
 
-#: dialogs.c:1253
+#: dialogs.c:1340
 msgid "Engine Settings"
 msgstr ""
 
-#: dialogs.c:1278
+#: dialogs.c:1365
 msgid "Select engine from list:"
 msgstr ""
 
-#: dialogs.c:1281
+#: dialogs.c:1368
 msgid "or specify one below:"
 msgstr ""
 
-#: dialogs.c:1282
+#: dialogs.c:1369
 msgid "Nickname (optional):"
 msgstr ""
 
-#: dialogs.c:1283
+#: dialogs.c:1370
 msgid "Use nickname in PGN player tags of engine-engine games"
 msgstr ""
 
-#: dialogs.c:1284
+#: dialogs.c:1371
 msgid "Engine Directory:"
 msgstr ""
 
-#: dialogs.c:1285
+#: dialogs.c:1372
 msgid "Engine Command:"
 msgstr ""
 
-#: dialogs.c:1286
+#: dialogs.c:1373
 msgid "(Directory will be derived from engine path when empty)"
 msgstr ""
 
-#: dialogs.c:1287
+#: dialogs.c:1374
 msgid "UCI"
 msgstr ""
 
-#: dialogs.c:1288
+#: dialogs.c:1375
 msgid "WB protocol v1 (do not wait for engine features)"
 msgstr ""
 
-#: dialogs.c:1289
+#: dialogs.c:1376
 msgid "Must not use GUI book"
 msgstr ""
 
-#: dialogs.c:1290
+#: dialogs.c:1377
 msgid "Add this engine to the list"
 msgstr ""
 
-#: dialogs.c:1291
+#: dialogs.c:1378
 msgid "Force current variant with this engine"
 msgstr ""
 
-#: dialogs.c:1341
+#: dialogs.c:1428
 msgid "Load first engine"
 msgstr ""
 
-#: dialogs.c:1347
+#: dialogs.c:1434
 msgid "Load second engine"
 msgstr ""
 
-#: dialogs.c:1370
+#: dialogs.c:1457
 msgid "shuffle"
 msgstr ""
 
-#: dialogs.c:1371
+#: dialogs.c:1458
 msgid "Start-position number:"
 msgstr "啟動位置號碼(S)"
 
-#: dialogs.c:1372
+#: dialogs.c:1459
 #, fuzzy
 msgid "randomize"
 msgstr "隨機"
 
-#: dialogs.c:1373
+#: dialogs.c:1460
 msgid "pick fixed"
 msgstr ""
 
-#: dialogs.c:1390
+#: dialogs.c:1477
 msgid "New Shuffle Game"
 msgstr "洗牌遊戲(u)..."
 
-#: dialogs.c:1409
+#: dialogs.c:1496
 msgid "classical"
 msgstr ""
 
-#: dialogs.c:1410
+#: dialogs.c:1497
 msgid "incremental"
 msgstr ""
 
-#: dialogs.c:1411
+#: dialogs.c:1498
 msgid "fixed max"
 msgstr ""
 
-#: dialogs.c:1412
+#: dialogs.c:1499
 msgid "Moves per session:"
 msgstr ""
 
-#: dialogs.c:1413
+#: dialogs.c:1500
 msgid "Initial time (min):"
 msgstr ""
 
-#: dialogs.c:1414
+#: dialogs.c:1501
 msgid "Increment or max (sec/move):"
 msgstr ""
 
-#: dialogs.c:1415
+#: dialogs.c:1502
 #, fuzzy
 msgid "Time-Odds factors:"
 msgstr "時間倍數"
 
-#: dialogs.c:1416
+#: dialogs.c:1503
 #, fuzzy
 msgid "Engine #1"
 msgstr "引擎輸出"
 
-#: dialogs.c:1417
+#: dialogs.c:1504
 #, fuzzy
 msgid "Engine #2 / Human"
 msgstr "引擎1有自用庫"
 
-#: dialogs.c:1457 dialogs.c:1460 dialogs.c:1465 dialogs.c:1466
+#: dialogs.c:1544 dialogs.c:1547 dialogs.c:1552 dialogs.c:1553
 #: gtk/xoptions.c:194
 msgid "Unused"
 msgstr ""
 
-#: dialogs.c:1478
-msgid "Time Control"
-msgstr ""
-
-#: dialogs.c:1507
+#: dialogs.c:1594
 msgid "Error writing to chess program"
 msgstr "發送訊息給國際象棋程式時出錯"
 
-#: dialogs.c:1574
+#: dialogs.c:1662 xaw/xoptions.c:1276
 #, fuzzy
 msgid "Cancel"
 msgstr "取消(C)"
 
-#: dialogs.c:1579 dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:1667 dialogs.c:2061 dialogs.c:2065
 msgid "King"
 msgstr "王"
 
-#: dialogs.c:1582
+#: dialogs.c:1670
 msgid "Captain"
 msgstr ""
 
-#: dialogs.c:1583
+#: dialogs.c:1671
 msgid "Lieutenant"
 msgstr ""
 
-#: dialogs.c:1584
+#: dialogs.c:1672
 msgid "General"
 msgstr "一般選項(G)..."
 
-#: dialogs.c:1585
+#: dialogs.c:1673
 msgid "Warlord"
 msgstr ""
 
-#: dialogs.c:1587 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1675 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Knight"
 msgstr "馬"
 
-#: dialogs.c:1588 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1676 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Bishop"
 msgstr "象"
 
-#: dialogs.c:1589 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1677 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Rook"
 msgstr "車"
 
-#: dialogs.c:1593 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1681 dialogs.c:2062 dialogs.c:2066
 msgid "Archbishop"
 msgstr "國師"
 
-#: dialogs.c:1594 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1682 dialogs.c:2062 dialogs.c:2066
 msgid "Chancellor"
 msgstr "宰相"
 
-#: dialogs.c:1596 dialogs.c:1971 dialogs.c:1975 dialogs.c:1993
+#: dialogs.c:1684 dialogs.c:2061 dialogs.c:2065 dialogs.c:2083
 msgid "Queen"
 msgstr "后"
 
-#: dialogs.c:1600
+#: dialogs.c:1686
+msgid "Lion"
+msgstr ""
+
+#: dialogs.c:1690
 msgid "Defer"
 msgstr ""
 
-#: dialogs.c:1601 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1691 dialogs.c:2062 dialogs.c:2066
 msgid "Promote"
 msgstr "升變"
 
-#: dialogs.c:1616
+#: dialogs.c:1706
 msgid "Chat partner:"
 msgstr ""
 
-#: dialogs.c:1701
+#: dialogs.c:1791
 msgid "Chat box"
 msgstr ""
 
-#: dialogs.c:1742
+#: dialogs.c:1832
 msgid "factory"
 msgstr ""
 
-#: dialogs.c:1743
+#: dialogs.c:1833
 msgid "up"
 msgstr "向上"
 
-#: dialogs.c:1744
+#: dialogs.c:1834
 msgid "down"
 msgstr "向下"
 
-#: dialogs.c:1762
+#: dialogs.c:1852
 msgid "No tag selected"
 msgstr ""
 
-#: dialogs.c:1793
+#: dialogs.c:1883
 #, fuzzy
 msgid "Game-list options"
 msgstr "載入棋局選項"
 
-#: dialogs.c:1869 dialogs.c:1883
+#: dialogs.c:1959 dialogs.c:1973
 msgid "Error"
 msgstr "錯誤"
 
-#: dialogs.c:1906
+#: dialogs.c:1996
 msgid "Fatal Error"
 msgstr "嚴重錯誤"
 
-#: dialogs.c:1906
+#: dialogs.c:1996
 msgid "Exiting"
 msgstr "離開"
 
-#: dialogs.c:1917
+#: dialogs.c:2007
 msgid "Information"
 msgstr "資訊"
 
-#: dialogs.c:1924
+#: dialogs.c:2014
 msgid "Note"
 msgstr "註解"
 
-#: dialogs.c:1970 dialogs.c:2245 dialogs.c:2248
+#: dialogs.c:2060 dialogs.c:2340 dialogs.c:2343
 msgid "White"
 msgstr "紅方"
 
-#: dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Pawn"
 msgstr "兵"
 
-#: dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:2061 dialogs.c:2065
 msgid "Elephant"
 msgstr "象"
 
-#: dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:2061 dialogs.c:2065
 msgid "Cannon"
 msgstr "炮"
 
-#: dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:2062 dialogs.c:2066
 msgid "Demote"
 msgstr "降級"
 
-#: dialogs.c:1973 dialogs.c:1977
+#: dialogs.c:2063 dialogs.c:2067
 msgid "Empty square"
 msgstr "清空格子"
 
-#: dialogs.c:1973 dialogs.c:1977
+#: dialogs.c:2063 dialogs.c:2067
 msgid "Clear board"
 msgstr "清空棋盤"
 
-#: dialogs.c:1974 dialogs.c:2257 dialogs.c:2260
+#: dialogs.c:2064 dialogs.c:2352 dialogs.c:2355
 msgid "Black"
 msgstr "黑方"
 
-#: dialogs.c:2073 menus.c:787
+#: dialogs.c:2163 menus.c:787
 msgid "File"
 msgstr "檔案(F)"
 
-#: dialogs.c:2074 menus.c:788
+#: dialogs.c:2164 menus.c:788
 msgid "Edit"
 msgstr "編輯(E)"
 
-#: dialogs.c:2075 menus.c:789
+#: dialogs.c:2165 menus.c:789
 msgid "View"
 msgstr ""
 
-#: dialogs.c:2076 menus.c:790
+#: dialogs.c:2166 menus.c:790
 msgid "Mode"
 msgstr "模式(M)"
 
-#: dialogs.c:2077 menus.c:791
+#: dialogs.c:2167 menus.c:791
 msgid "Action"
 msgstr "行為(A)"
 
-#: dialogs.c:2078 menus.c:792
+#: dialogs.c:2168 menus.c:792
 msgid "Engine"
 msgstr ""
 
-#: dialogs.c:2079 menus.c:793
+#: dialogs.c:2169 menus.c:793
 msgid "Options"
 msgstr "選項(O)"
 
-#: dialogs.c:2080 menus.c:794
+#: dialogs.c:2170 menus.c:794
 msgid "Help"
 msgstr "說明(H)"
 
-#: dialogs.c:2090
+#: dialogs.c:2180
 msgid "<<"
 msgstr ""
 
-#: dialogs.c:2091
+#: dialogs.c:2181
 msgid "<"
 msgstr ""
 
-#: dialogs.c:2093
+#: dialogs.c:2183
 msgid ">"
 msgstr ""
 
-#: dialogs.c:2094
+#: dialogs.c:2184
 msgid ">>"
 msgstr ""
 
-#: dialogs.c:2364
+#: dialogs.c:2458
 msgid "Directories:"
 msgstr ""
 
-#: dialogs.c:2365
+#: dialogs.c:2459
 #, fuzzy
 msgid "Files:"
 msgstr "檔案(F)"
 
-#: dialogs.c:2366
+#: dialogs.c:2460
 msgid "by name"
 msgstr ""
 
-#: dialogs.c:2367
+#: dialogs.c:2461
 msgid "by type"
 msgstr ""
 
-#: dialogs.c:2370
+#: dialogs.c:2464
 #, fuzzy
 msgid "Filename:"
 msgstr "過濾器"
 
-#: dialogs.c:2371
+#: dialogs.c:2465
 msgid "New directory"
 msgstr ""
 
-#: dialogs.c:2372
+#: dialogs.c:2466
 #, fuzzy
 msgid "File type:"
 msgstr "過濾器"
 
-#: dialogs.c:2447
+#: dialogs.c:2541
 #, fuzzy
 msgid "Contents of"
 msgstr "編輯註解(C) *.*"
 
-#: dialogs.c:2473
+#: dialogs.c:2567
 msgid "  next page"
 msgstr ""
 
-#: dialogs.c:2490
+#: dialogs.c:2584
 msgid "FIRST TYPE DIRECTORY NAME HERE"
 msgstr ""
 
-#: dialogs.c:2491
+#: dialogs.c:2585
 msgid "TRY ANOTHER NAME"
 msgstr ""
 
-#: draw.c:293
+#: draw.c:310
 msgid ""
-"No default pieces installed\n"
-"Select your own -pieceImageDirectory"
+"No default pieces installed!\n"
+"Select your own using '-pieceImageDirectory'."
 msgstr ""
 
-#: engineoutput.c:107 menus.c:630
+#: engineoutput.c:110 menus.c:630
 #, fuzzy, c-format
 msgid "Engine Output"
 msgstr "引擎輸出"
 
-#: engineoutput.c:117
+#: engineoutput.c:120
 #, c-format
 msgid "%s (%d reversible ply)"
 msgid_plural "%s (%d reversible plies)"
 msgstr[0] ""
 msgstr[1] ""
 
-#: engineoutput.c:509 engineoutput.c:512 nengineoutput.c:81 nengineoutput.c:88
+#: engineoutput.c:542 engineoutput.c:545 nengineoutput.c:82 nengineoutput.c:90
 msgid "NPS"
 msgstr "NPS"
 
@@ -2181,50 +2261,50 @@ msgstr "NPS"
 msgid "Reading game file (%d)"
 msgstr "棋局檔案錯誤"
 
-#: gtk/xboard.c:844 xaw/xboard.c:1162
+#: gtk/xboard.c:867 xaw/xboard.c:1052
 #, c-format
 msgid "%s: can't cd to CHESSDIR: "
 msgstr ""
 
-#: gtk/xboard.c:853 xaw/xboard.c:1171
+#: gtk/xboard.c:876 xaw/xboard.c:1061
 #, c-format
 msgid "Failed to open file '%s'\n"
 msgstr ""
 
-#: gtk/xboard.c:868 xaw/xboard.c:1180
+#: gtk/xboard.c:891 xaw/xboard.c:1070
 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size"
 msgstr ""
 
-#: gtk/xboard.c:887 xaw/xboard.c:1212
+#: gtk/xboard.c:910 xaw/xboard.c:1102
 #, c-format
 msgid "%s: bad boardSize syntax %s\n"
 msgstr ""
 
-#: gtk/xboard.c:927 xaw/xboard.c:1249
+#: gtk/xboard.c:950 xaw/xboard.c:1139
 #, c-format
 msgid "%s: unrecognized boardSize name %s\n"
 msgstr ""
 
-#: gtk/xboard.c:968 xaw/xboard.c:1286
+#: gtk/xboard.c:991 xaw/xboard.c:1176
 #, c-format
 msgid "%s: too few colors available; trying monochrome mode\n"
 msgstr ""
 
-#: gtk/xboard.c:1258 xaw/xboard.c:1568
+#: gtk/xboard.c:1281 xaw/xboard.c:1458
 #, c-format
 msgid "Unable to create font set for %s.\n"
 msgstr ""
 
-#: gtk/xboard.c:1283 xaw/xboard.c:1591
+#: gtk/xboard.c:1306 xaw/xboard.c:1481
 #, c-format
 msgid "%s: no fonts match pattern %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1722 xaw/xboard.c:2081
+#: gtk/xboard.c:1745 xaw/xboard.c:1971
 msgid "Can't open temp file"
 msgstr ""
 
-#: gtk/xboard.c:2174
+#: gtk/xboard.c:2199
 #, fuzzy
 msgid "Failed to open file"
 msgstr "呼叫cmail失敗"
@@ -2280,12 +2360,13 @@ msgid "New Game"
 msgstr "洗牌遊戲(u)..."
 
 #: menus.c:583
-msgid "New Shuffle Game ..."
+#, fuzzy
+msgid "New Shuffle Game..."
 msgstr "洗牌遊戲(u)..."
 
 #: menus.c:584
 #, fuzzy
-msgid "New Variant ..."
+msgid "New Variant..."
 msgstr "變種"
 
 #: menus.c:586
@@ -2554,19 +2635,22 @@ msgid "Adjudicate Draw"
 msgstr "提請仲裁(D)"
 
 #: menus.c:684
-msgid "Load New 1st Engine ..."
+msgid "Load New 1st Engine..."
 msgstr ""
 
 #: menus.c:685
-msgid "Load New 2nd Engine ..."
-msgstr ""
+#, fuzzy
+msgid "Load New 2nd Engine..."
+msgstr "通用引擎設定(E)...   Alt+Shift+U"
 
 #: menus.c:687
-msgid "Engine #1 Settings ..."
+#, fuzzy
+msgid "Engine #1 Settings..."
 msgstr "引擎 #1 設定"
 
 #: menus.c:688
-msgid "Engine #2 Settings ..."
+#, fuzzy
+msgid "Engine #2 Settings..."
 msgstr "引擎 #2 設定"
 
 #: menus.c:690
@@ -2587,46 +2671,51 @@ msgid "Retract Move"
 msgstr "悔棋(R)   Ctrl+X"
 
 #: menus.c:700
-msgid "General ..."
+#, fuzzy
+msgid "General..."
 msgstr "一般選項(G)..."
 
 #: menus.c:702
 #, fuzzy
-msgid "Time Control ..."
+msgid "Time Control..."
 msgstr "時間設定(T)...   Alt+Shift+T"
 
 #: menus.c:703
 #, fuzzy
-msgid "Common Engine ..."
+msgid "Common Engine..."
 msgstr "通用引擎設定(E)...   Alt+Shift+U"
 
 #: menus.c:704
 #, fuzzy
-msgid "Adjudications ..."
+msgid "Adjudications..."
 msgstr "判決(j)...   Alt+Shift+J"
 
 #: menus.c:705
-msgid "ICS ..."
-msgstr "ICS選項..."
+msgid "ICS..."
+msgstr ""
 
 #: menus.c:706
-msgid "Match ..."
+msgid "Tournament..."
 msgstr ""
 
 #: menus.c:707
-msgid "Load Game ..."
+#, fuzzy
+msgid "Load Game..."
 msgstr "載入棋局選項(L)...   Alt+Shift+L"
 
 #: menus.c:708
-msgid "Save Game ..."
+#, fuzzy
+msgid "Save Game..."
 msgstr "儲存棋局選項(S)...   Alt+Shift+S"
 
 #: menus.c:709
-msgid "Game List ..."
+#, fuzzy
+msgid "Game List..."
 msgstr "遊戲列表..."
 
 #: menus.c:710
-msgid "Sounds ..."
+#, fuzzy
+msgid "Sounds..."
 msgstr "聲音選項(D)..."
 
 #: menus.c:713
@@ -2699,21 +2788,22 @@ msgstr ""
 msgid "e-Mail Bug Report"
 msgstr ""
 
-#: nengineoutput.c:78 nengineoutput.c:85
+#: nengineoutput.c:78 nengineoutput.c:86
 #, fuzzy
 msgid "engine name"
 msgstr "引擎輸出"
 
-#: nengineoutput.c:80 nengineoutput.c:87
+#. TRANSLATORS: noun, as in "the move Nf3"
+#: nengineoutput.c:81 nengineoutput.c:89
 #, fuzzy
 msgid "move"
 msgstr "著法"
 
-#: nengineoutput.c:153
+#: nengineoutput.c:155
 msgid "Engine output"
 msgstr "引擎輸出"
 
-#: nengineoutput.c:157
+#: nengineoutput.c:159
 msgid ""
 "Mismatch of STRIDE in nengineoutput.c\n"
 "Change and recompile!"
@@ -2798,7 +2888,7 @@ msgstr ""
 
 #: usystem.c:230
 #, c-format
-msgid "%s: can't parse foreground color in `%s'\n"
+msgid "%s: can't parse foreground color in '%s'\n"
 msgstr ""
 
 #: usystem.c:259
@@ -2806,54 +2896,25 @@ msgstr ""
 msgid "%s: can't parse color names; disabling colorization\n"
 msgstr ""
 
-#: usystem.c:371
+#: usystem.c:374
 #, c-format
 msgid "ERROR: Unknown user %s (in path %s)\n"
 msgstr ""
 
-#: usystem.c:556
+#: usystem.c:557
 msgid "Socket support is not configured in"
 msgstr ""
 
-#: usystem.c:645
+#: usystem.c:646
 msgid "internal rcmd not implemented for Unix"
 msgstr ""
 
-#: xaw/xboard.c:478
-#, c-format
-msgid "%s: Can't access XPM directory %s\n"
-msgstr ""
-
-#: xaw/xboard.c:499
-#, c-format
-msgid "Available `%s' sizes:\n"
-msgstr ""
-
-#: xaw/xboard.c:532
-#, c-format
-msgid "Error: No `%s' files!\n"
-msgstr ""
-
-#: xaw/xboard.c:545
-#, c-format
-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 ""
-
-#: xaw/xboard.c:1292
+#: xaw/xboard.c:1182
 #, c-format
 msgid "white pixel = 0x%lx, black pixel = 0x%lx\n"
 msgstr ""
 
-#: xaw/xengineoutput.c:115
-#, c-format
-msgid "Error %d loading icon image\n"
-msgstr ""
-
-#: xaw/xoptions.c:321 xaw/xoptions.c:1023
+#: xaw/xoptions.c:321 xaw/xoptions.c:1025
 msgid "browse"
 msgstr ""
 
@@ -2869,13 +2930,15 @@ msgstr ""
 msgid "Shift"
 msgstr ""
 
-#: xaw/xoptions.c:1270
+#: xaw/xoptions.c:1272
 msgid "OK"
 msgstr "確定"
 
-#: xaw/xoptions.c:1274
-msgid "cancel"
-msgstr "取消(C)"
+#~ msgid "ICS ..."
+#~ msgstr "ICS選項..."
+
+#~ msgid "cancel"
+#~ msgstr "取消(C)"
 
 #~ msgid "New Game        Ctrl+N"
 #~ msgstr "開新棋局(N)   Ctrl+N"
index ccc90d5..c44f4c6 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-01-05 12:51-0800\n"
+"POT-Creation-Date: 2014-01-19 22:19-0800\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,558 +18,581 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: args.h:820
+#: args.h:833
 #, c-format
 msgid "%s in settings file\n"
 msgstr ""
 
-#: args.h:830
+#: args.h:867
 #, c-format
 msgid "Bad integer value %s"
 msgstr ""
 
-#: args.h:923 args.h:1170
+#: args.h:968 args.h:1229
 #, c-format
 msgid "Unrecognized argument %s"
 msgstr ""
 
-#: args.h:954
+#: args.h:999
 #, c-format
 msgid "No value provided for argument %s"
 msgstr ""
 
-#: args.h:1014
+#: args.h:1059
 #, c-format
 msgid "Incomplete \\ escape in value for %s"
 msgstr ""
 
-#: args.h:1125
+#: args.h:1170
 #, c-format
 msgid "Failed to open indirection file %s"
 msgstr ""
 
-#: args.h:1142
+#: args.h:1187
 #, c-format
 msgid "Unrecognized boolean argument value %s"
 msgstr ""
 
 #. 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:744
+#: backend.c:800
 msgid "first"
 msgstr ""
 
 #. 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:747
+#: backend.c:803
 msgid "second"
 msgstr ""
 
-#: backend.c:827
+#: backend.c:885
 #, c-format
 msgid "protocol version %d not supported"
 msgstr "通訊協定版本 %d 不被支持"
 
-#: backend.c:933
+#: backend.c:991
 msgid "You did not specify the engine executable"
 msgstr ""
 
-#: backend.c:989
+#: backend.c:1049
 #, c-format
 msgid "bad timeControl option %s"
 msgstr "非法的\"timeControl\"(時間控制)選項 %s"
 
-#: backend.c:1004
+#: backend.c:1064
 #, c-format
 msgid "bad searchTime option %s"
 msgstr "非法的\"searchTime\"(搜尋時間)選項 %s"
 
-#: backend.c:1110
+#: backend.c:1170
 #, c-format
 msgid "Variant %s supported only in ICS mode"
 msgstr "變體 %s 只在ICS模式下支持"
 
-#: backend.c:1128
+#: backend.c:1188
 #, c-format
 msgid "Unknown variant name %s"
 msgstr "未知的變體名 %s"
 
-#: backend.c:1375
+#: backend.c:1439
 msgid "Starting chess program"
 msgstr "啟動國際象棋程式"
 
-#: backend.c:1398
+#: backend.c:1462
 msgid "Bad game file"
 msgstr "棋局檔案錯誤"
 
-#: backend.c:1405
+#: backend.c:1469
 msgid "Bad position file"
 msgstr "盤面檔案錯誤"
 
-#: backend.c:1419
+#: backend.c:1483
 msgid "Pick new game"
 msgstr ""
 
-#: backend.c:1488
+#: backend.c:1552
 msgid ""
-"You restarted an already completed tourney\n"
-"One more cycle will now be added to it\n"
-"Games commence in 10 sec"
+"You restarted an already completed tourney.\n"
+"One more cycle will now be added to it.\n"
+"Games commence in 10 sec."
 msgstr ""
 
-#: backend.c:1495
+#: backend.c:1559
 #, c-format
 msgid "All games in tourney '%s' are already played or playing"
 msgstr ""
 
-#: backend.c:1502
+#: backend.c:1566
 msgid "Can't have a match with no chess programs"
 msgstr "沒有象棋程式時無法進行比賽"
 
-#: backend.c:1539
+#: backend.c:1620
 #, c-format
 msgid "Could not open comm port %s"
 msgstr "無法打開通訊連接埠 %s"
 
-#: backend.c:1542
+#: backend.c:1623
 #, c-format
 msgid "Could not connect to host %s, port %s"
 msgstr "無法連接主機 %s 連接埠 %s"
 
-#: backend.c:1598
+#: backend.c:1679
 #, c-format
 msgid "Unknown initialMode %s"
 msgstr "未知的\"initialMode\"(初始模式)選項 %s"
 
-#: backend.c:1624
+#: backend.c:1705
 msgid "AnalyzeFile mode requires a game file"
 msgstr "\"AnalyzeFile\"(分析檔案)模式必須指定一個棋局檔案"
 
-#: backend.c:1651
+#: backend.c:1732
 msgid "Analysis mode requires a chess engine"
 msgstr "\"Analysis\"(分析)模式必須啟動國際象棋引擎"
 
-#: backend.c:1655
+#: backend.c:1736
 msgid "Analysis mode does not work with ICS mode"
 msgstr "\"Analysis\"(分析)模式無法在ICS模式下工作"
 
-#: backend.c:1666
+#: backend.c:1747
 msgid "MachineWhite mode requires a chess engine"
 msgstr "\"MachineWhite\"(電腦執紅)模式必須啟動國際象棋引擎"
 
-#: backend.c:1671
+#: backend.c:1752
 msgid "MachineWhite mode does not work with ICS mode"
 msgstr "\"MachineWhite\"(電腦執紅)模式無法在ICS模式下運行"
 
-#: backend.c:1678
+#: backend.c:1759
 msgid "MachineBlack mode requires a chess engine"
 msgstr "\"MachineBlack\"(電腦執黑)模式必須啟動國際象棋引擎"
 
-#: backend.c:1683
+#: backend.c:1764
 msgid "MachineBlack mode does not work with ICS mode"
 msgstr "\"MachineBlack\"(電腦執黑)模式無法在ICS模式下運行"
 
-#: backend.c:1690
+#: backend.c:1771
 msgid "TwoMachines mode requires a chess engine"
 msgstr "\"TwoMachines\"(分析)模式必須啟動國際象棋引擎"
 
-#: backend.c:1695
+#: backend.c:1776
 msgid "TwoMachines mode does not work with ICS mode"
 msgstr "\"TwoMachines\"(電腦對弈)模式無法在ICS模式下運行"
 
-#: backend.c:1706
+#: backend.c:1787
 msgid "Training mode requires a game file"
 msgstr "\"Training\"(訓練)模式必須指定一個棋局檔案"
 
-#: backend.c:1869 backend.c:1924 backend.c:1947 backend.c:2346
+#: backend.c:1950 backend.c:2005 backend.c:2028 backend.c:2430
 msgid "Error writing to ICS"
 msgstr "發送訊息給ICS時出錯"
 
-#: backend.c:1884
+#: backend.c:1965
 msgid "Error reading from keyboard"
 msgstr "讀取鍵盤時出錯"
 
-#: backend.c:1887
+#: backend.c:1968
 msgid "Got end of file from keyboard"
 msgstr "讀取鍵盤時遇到檔案尾"
 
-#: backend.c:2192
+#: backend.c:2276
 #, c-format
 msgid "Unknown wild type %d"
 msgstr ""
 
-#: backend.c:2263 usystem.c:329
+#: backend.c:2347 usystem.c:329
 msgid "Error writing to display"
 msgstr "發送訊息給顯示器時出錯"
 
-#: backend.c:3019
+#. TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers
+#: backend.c:3105
 #, c-format
 msgid "your opponent kibitzes: %s"
 msgstr ""
 
-#: backend.c:3548
+#: backend.c:3634
 msgid "Error gathering move list: two headers"
 msgstr "讀取著法時出錯,出現兩個開頭"
 
-#: backend.c:3595
+#: backend.c:3681
 msgid "Error gathering move list: nested"
 msgstr "讀取著法時出錯,巢狀錯誤"
 
-#: backend.c:3699 backend.c:4117 backend.c:4321 backend.c:4880 backend.c:4884
-#: backend.c:6900 backend.c:12101 backend.c:13816 backend.c:13893
-#: backend.c:13939 backend.c:13945 backend.c:13950 backend.c:13955
+#: backend.c:3785 backend.c:4203 backend.c:4407 backend.c:4966 backend.c:4970
+#: backend.c:7073 backend.c:12577 backend.c:14306 backend.c:14383
+#: backend.c:14429 backend.c:14435 backend.c:14440 backend.c:14445
 msgid "vs."
 msgstr ""
 
-#: backend.c:3827
+#: backend.c:3913
 msgid "Illegal move (rejected by ICS)"
 msgstr ""
 
-#: backend.c:4165
+#: backend.c:4251
 msgid "Connection closed by ICS"
 msgstr "連接被ICS關閉"
 
-#: backend.c:4167
+#: backend.c:4253
 msgid "Error reading from ICS"
 msgstr "讀取ICS訊息時出錯"
 
-#: backend.c:4244
+#: backend.c:4330
 #, c-format
 msgid ""
 "Failed to parse board string:\n"
 "\"%s\""
 msgstr ""
 
-#: backend.c:4253 backend.c:9756
+#: backend.c:4339 backend.c:10203
 msgid "Game too long; increase MAX_MOVES and recompile"
 msgstr "棋局太長,需要增加\"MAX_MOVES\"並重新編譯"
 
-#: backend.c:4372
+#: backend.c:4458
 msgid "Error gathering move list: extra board"
 msgstr "讀取著法時出錯,超出棋盤"
 
-#: backend.c:4804 backend.c:4826
+#: backend.c:4890 backend.c:4912
 #, c-format
 msgid "Couldn't parse move \"%s\" from ICS"
 msgstr "無法解析從ICS讀到的著法\"%s\""
 
-#: backend.c:5063
+#: backend.c:5161
 #, c-format
 msgid "say Internal error; bad moveType %d (%d,%d-%d,%d)"
 msgstr "say 內部錯誤,非法的\"moveType\"(著法類型) %d (%d,%d-%d,%d)"
 
-#: backend.c:5133
+#: backend.c:5232
 msgid "You cannot do this while you are playing or observing"
 msgstr ""
 
-#: backend.c:6029
+#: backend.c:6174
 msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!"
 msgstr ""
 
-#: backend.c:6491
+#: backend.c:6664
 msgid "You are playing Black"
 msgstr "你在執黑"
 
-#: backend.c:6500 backend.c:6527
+#: backend.c:6673 backend.c:6700
 msgid "You are playing White"
 msgstr "你在執紅"
 
-#: backend.c:6509 backend.c:6535 backend.c:6655 backend.c:6680 backend.c:6696
-#: backend.c:14592
+#: backend.c:6682 backend.c:6708 backend.c:6828 backend.c:6853 backend.c:6869
+#: backend.c:15113
 msgid "It is White's turn"
 msgstr "輪到紅方走棋"
 
-#: backend.c:6513 backend.c:6539 backend.c:6663 backend.c:6686 backend.c:6717
-#: backend.c:14584
+#: backend.c:6686 backend.c:6712 backend.c:6836 backend.c:6859 backend.c:6890
+#: backend.c:15105
 msgid "It is Black's turn"
 msgstr "輪到黑方走棋"
 
-#: backend.c:6552
+#: backend.c:6725
 msgid "Displayed position is not current"
 msgstr "顯示的盤面不是當前盤面"
 
-#: backend.c:6790
+#: backend.c:6963
 msgid "Illegal move"
 msgstr "著法錯誤"
 
-#: backend.c:6857
+#: backend.c:7030
 msgid "End of game"
 msgstr "棋局結束"
 
-#: backend.c:6860
+#: backend.c:7033
 msgid "Incorrect move"
 msgstr "著法錯誤"
 
-#: backend.c:7169 backend.c:7296
+#: backend.c:7423 backend.c:7569
 msgid "Pull pawn backwards to under-promote"
 msgstr ""
 
-#: backend.c:7527
+#: backend.c:7532
+msgid "only marked squares are legal"
+msgstr ""
+
+#: backend.c:7820
 msgid "Swiss tourney finished"
 msgstr ""
 
-#: backend.c:8103
+#: backend.c:8336
+msgid "could not load EGBB library"
+msgstr ""
+
+#: backend.c:8339
+msgid "wrong EGBB version"
+msgstr ""
+
+#: backend.c:8452
 msgid "Invalid pairing from pairing engine"
 msgstr ""
 
-#: backend.c:8236
+#: backend.c:8603
 #, c-format
 msgid "Illegal move \"%s\" from %s machine"
 msgstr "從%s機器讀到不合法著法\"%s\""
 
-#: backend.c:8457
+#: backend.c:8849
 msgid "Bad FEN received from engine"
 msgstr ""
 
-#: backend.c:8601 backend.c:13681 backend.c:13746
+#: backend.c:8950
+msgid "Engine did not send setup for non-standard variant"
+msgstr ""
+
+#: backend.c:9023 backend.c:14168 backend.c:14236
 #, c-format
 msgid "%s does not support analysis"
 msgstr "%s 不支持分析功能"
 
-#: backend.c:8667
+#: backend.c:9089
 #, c-format
 msgid "Illegal move \"%s\" (rejected by %s chess program)"
 msgstr "不合法著法\"%s\" (%s國際象棋程式拒絕接受該著法)"
 
-#: backend.c:8694
+#: backend.c:9116
 #, c-format
 msgid "Failed to start %s chess program %s on %s: %s\n"
 msgstr "無法啟動%s國際象棋程式 %s(在主機 %s 上),%s\n"
 
-#: backend.c:8715
+#: backend.c:9137
 #, c-format
 msgid "Hint: %s"
 msgstr "提示 %s"
 
-#: backend.c:8720
+#: backend.c:9142
 #, c-format
 msgid ""
 "Illegal hint move \"%s\"\n"
 "from %s chess program"
 msgstr ""
 
-#: backend.c:8895
+#: backend.c:9317
 msgid "Machine accepts your draw offer"
 msgstr "電腦同意和棋"
 
-#: backend.c:8898
+#: backend.c:9320
 msgid ""
-"Machine offers a draw\n"
-"Select Action / Draw to agree"
+"Machine offers a draw.\n"
+"Select Action / Draw to accept."
 msgstr ""
 
-#: backend.c:8977
+#. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone
+#: backend.c:9402
 msgid "failed writing PV"
 msgstr ""
 
-#: backend.c:9275
+#: backend.c:9701
 #, c-format
 msgid "Ambiguous move in ICS output: \"%s\""
 msgstr "ICS輸出不明確的著法\"%s\""
 
-#: backend.c:9285
+#: backend.c:9711
 #, c-format
 msgid "Illegal move in ICS output: \"%s\""
 msgstr "ICS輸出不明確的著法\"%s\""
 
-#: backend.c:9296
+#: backend.c:9722
 msgid "Gap in move list"
 msgstr "著法斷開"
 
-#: backend.c:9917 dialogs.c:460
+#: backend.c:10357
 #, c-format
 msgid "Variant %s not supported by %s"
 msgstr "變體 %s 不被 %s 所支持"
 
-#: backend.c:10038
+#: backend.c:10364
+#, c-format
+msgid ", but %s is"
+msgstr ""
+
+#: backend.c:10506
 #, c-format
 msgid "Startup failure on '%s'"
 msgstr "無法啟動'%s'"
 
-#: backend.c:10069
+#: backend.c:10537
 msgid "Waiting for first chess program"
 msgstr "等待第一個國際象棋程式"
 
-#: backend.c:10074 backend.c:13964
+#: backend.c:10542 backend.c:14454
 msgid "Waiting for second chess program"
 msgstr "等待第二個國際象棋程式"
 
-#: backend.c:10123
+#: backend.c:10591
 msgid "Could not write on tourney file"
 msgstr ""
 
-#: backend.c:10197
+#: backend.c:10665
 msgid ""
 "You cannot replace an engine while it is engaged!\n"
 "Terminate its game first."
 msgstr ""
 
-#: backend.c:10211
+#: backend.c:10679
 msgid "No engine with the name you gave is installed"
 msgstr ""
 
-#: backend.c:10213
+#: backend.c:10681
 msgid ""
 "First change an engine by editing the participants list\n"
 "of the Tournament Options dialog"
 msgstr ""
 
-#: backend.c:10214
+#: backend.c:10682
 msgid "You can only change one engine at the time"
 msgstr ""
 
-#: backend.c:10229 backend.c:10376
+#: backend.c:10697 backend.c:10845
 #, c-format
 msgid "No engine %s is installed"
 msgstr ""
 
-#: backend.c:10249
+#: backend.c:10717
 msgid ""
 "You must supply a tournament file,\n"
 "for storing the tourney progress"
 msgstr ""
 
-#: backend.c:10259
+#: backend.c:10727
 msgid "Not enough participants"
 msgstr ""
 
-#: backend.c:10460
+#: backend.c:10929
 msgid "Bad tournament file"
 msgstr ""
 
-#: backend.c:10472
+#: backend.c:10941
 msgid "Waiting for other game(s)"
 msgstr ""
 
-#: backend.c:10485
+#: backend.c:10954
 msgid "No pairing engine specified"
 msgstr ""
 
-#: backend.c:10962
+#: backend.c:11430
 #, c-format
 msgid "Match %s vs. %s: final score %d-%d-%d"
 msgstr "比賽 %s vs. %s: 最終比分 %d-%d-%d"
 
-#: backend.c:11424 backend.c:11455
+#: backend.c:11897 backend.c:11928
 #, c-format
 msgid "Illegal move: %d.%s%s"
 msgstr "不合法著法 %d.%s%s"
 
-#: backend.c:11444
+#: backend.c:11917
 #, c-format
 msgid "Ambiguous move: %d.%s%s"
 msgstr "不明確的著法 %d.%s%s"
 
-#: backend.c:11497 backend.c:12524 backend.c:12717 backend.c:13078
+#: backend.c:11971 backend.c:13010 backend.c:13203 backend.c:13567
 #, c-format
 msgid "Can't open \"%s\""
 msgstr "無法打開\"%s\""
 
-#: backend.c:11509 menus.c:116
+#: backend.c:11983 menus.c:116
 msgid "Cannot build game list"
 msgstr "無法建立棋局列表"
 
-#: backend.c:11594
+#: backend.c:12068
 msgid "No more games in this message"
 msgstr "這條訊息不包含更多的棋局"
 
-#: backend.c:11634
+#: backend.c:12108
 msgid "No game has been loaded yet"
 msgstr "尚未有棋局載入"
 
-#: backend.c:11638 backend.c:12505 ngamelist.c:129
+#: backend.c:12112 backend.c:12991 ngamelist.c:129
 msgid "Can't back up any further"
 msgstr "無法再後退了"
 
-#: backend.c:12077
+#: backend.c:12553
 msgid "Game number out of range"
 msgstr "棋局數量超出範圍"
 
-#: backend.c:12088
+#: backend.c:12564
 msgid "Can't seek on game file"
 msgstr "無法搜尋棋局檔案"
 
-#: backend.c:12146
+#: backend.c:12622
 msgid "Game not found in file"
 msgstr "檔案中沒有找到棋局"
 
-#: backend.c:12274 backend.c:12601
+#: backend.c:12751 backend.c:13087
 msgid "Bad FEN position in file"
 msgstr "檔案中的FEN盤面錯誤"
 
-#: backend.c:12426
+#: backend.c:12903
 msgid "No moves in game"
 msgstr "棋局中沒有著法"
 
-#: backend.c:12501
+#: backend.c:12987
 msgid "No position has been loaded yet"
 msgstr "尚未有盤面載入"
 
-#: backend.c:12562 backend.c:12573
+#: backend.c:13048 backend.c:13059
 msgid "Can't seek on position file"
 msgstr "無法搜尋盤面檔案"
 
-#: backend.c:12580 backend.c:12592
+#: backend.c:13066 backend.c:13078
 msgid "Position not found in file"
 msgstr "檔案中沒有找到盤面"
 
-#: backend.c:12632
+#: backend.c:13118
 msgid "Black to play"
 msgstr "輪到黑方走棋"
 
-#: backend.c:12635
+#: backend.c:13121
 msgid "White to play"
 msgstr "輪到紅方走棋"
 
-#: backend.c:12722 backend.c:13083
+#: backend.c:13208 backend.c:13572
 msgid "Waiting for access to save file"
 msgstr ""
 
-#: backend.c:12724
+#: backend.c:13210
 msgid "Saving game"
 msgstr ""
 
-#: backend.c:12725
+#: backend.c:13211
 msgid "Bad Seek"
 msgstr ""
 
-#: backend.c:13085
+#: backend.c:13574
 msgid "Saving position"
 msgstr ""
 
-#: backend.c:13211
+#: backend.c:13700
 msgid ""
 "You have edited the game history.\n"
 "Use Reload Same Game and make your move again."
 msgstr ""
 
-#: backend.c:13216
+#: backend.c:13705
 msgid ""
 "You have entered too many moves.\n"
 "Back up to the correct position and try again."
 msgstr ""
 
-#: backend.c:13221
+#: backend.c:13710
 msgid ""
 "Displayed position is not current.\n"
 "Step forward to the correct position and try again."
 msgstr ""
 
-#: backend.c:13268
+#: backend.c:13757
 msgid "You have not made a move yet"
 msgstr "你尚未走棋"
 
-#: backend.c:13289
+#: backend.c:13778
 msgid ""
 "The cmail message is not loaded.\n"
 "Use Reload CMail Message and make your move again."
 msgstr ""
 
-#: backend.c:13294
+#: backend.c:13783
 msgid "No unfinished games"
 msgstr "不存在未完成棋局"
 
-#: backend.c:13300
+#: backend.c:13789
 #, c-format
 msgid ""
 "You have already mailed a move.\n"
@@ -579,210 +602,212 @@ msgid ""
 "on the command line."
 msgstr ""
 
-#: backend.c:13315
+#: backend.c:13804
 msgid "Failed to invoke cmail"
 msgstr "呼叫cmail失敗"
 
-#: backend.c:13377
+#: backend.c:13866
 #, c-format
 msgid "Waiting for reply from opponent\n"
 msgstr "等待對手回應\n"
 
-#: backend.c:13399
+#: backend.c:13888
 #, c-format
 msgid "Still need to make move for game\n"
 msgstr "本棋局仍需走棋\n"
 
-#: backend.c:13403
+#: backend.c:13892
 #, c-format
 msgid "Still need to make moves for both games\n"
 msgstr "兩棋局皆仍需走棋\n"
 
-#: backend.c:13407
+#: backend.c:13896
 #, c-format
 msgid "Still need to make moves for all %d games\n"
 msgstr "所有 %d 棋局皆仍需走棋\n"
 
-#: backend.c:13414
+#: backend.c:13903
 #, c-format
 msgid "Still need to make a move for game %s\n"
 msgstr "棋局 %s 仍需走棋\n"
 
-#: backend.c:13420
+#: backend.c:13909
 #, c-format
 msgid "No unfinished games\n"
 msgstr "不存在未完成棋局\n"
 
-#: backend.c:13422
+#: backend.c:13911
 #, c-format
 msgid "Ready to send mail\n"
 msgstr "準備送信就緒\n"
 
-#: backend.c:13427
+#: backend.c:13916
 #, c-format
 msgid "Still need to make moves for games %s\n"
 msgstr "棋局 %s 仍需走棋\n"
 
-#: backend.c:13631
+#: backend.c:14118
 msgid "Edit comment"
 msgstr "編輯註解"
 
-#: backend.c:13633
+#: backend.c:14120
 #, c-format
 msgid "Edit comment on %d.%s%s"
 msgstr "編輯註解 %d.%s%s"
 
-#: backend.c:13688
+#: backend.c:14175
 #, c-format
 msgid "You are not observing a game"
 msgstr ""
 
-#: backend.c:13796
+#: backend.c:14286
 msgid "It is not White's turn"
 msgstr "沒有輪到紅方走棋"
 
-#: backend.c:13877
+#: backend.c:14367
 msgid "It is not Black's turn"
 msgstr "沒有輪到黑方走棋"
 
-#: backend.c:13985
+#: backend.c:14475
 #, c-format
 msgid "Starting %s chess program"
 msgstr ""
 
-#: backend.c:14013 backend.c:15127
+#: backend.c:14503 backend.c:15648
+#, fuzzy
 msgid ""
 "Wait until your turn,\n"
-"or select Move Now"
-msgstr ""
+"or select 'Move Now'."
+msgstr "等待對手走棋"
 
-#: backend.c:14147
+#: backend.c:14638
 msgid "Training mode off"
 msgstr "訓練模式已關閉"
 
-#: backend.c:14155
+#: backend.c:14646
 msgid "Training mode on"
 msgstr "訓練模式已打開"
 
-#: backend.c:14158
+#: backend.c:14649
 msgid "Already at end of game"
 msgstr "棋局已經結束"
 
-#: backend.c:14238
+#: backend.c:14729
 msgid "Warning: You are still playing a game"
 msgstr "注意:你正在進行棋局"
 
-#: backend.c:14241
+#: backend.c:14732
 msgid "Warning: You are still observing a game"
 msgstr "注意:你正在觀棋棋局"
 
-#: backend.c:14244
+#: backend.c:14735
 msgid "Warning: You are still examining a game"
 msgstr "注意:你正在研究棋局"
 
-#: backend.c:14311
+#: backend.c:14802
 msgid "Click clock to clear board"
 msgstr ""
 
-#: backend.c:14321
+#: backend.c:14812
 msgid "Close ICS engine analyze..."
 msgstr ""
 
-#: backend.c:14609
+#: backend.c:15130
 msgid "That square is occupied"
 msgstr "格子已有棋子"
 
-#: backend.c:14633 backend.c:14659
+#: backend.c:15154 backend.c:15180
 msgid "There is no pending offer on this move"
 msgstr "該著法沒有待定的提議"
 
-#: backend.c:14695 backend.c:14706
+#: backend.c:15216 backend.c:15227
 msgid "Your opponent is not out of time"
 msgstr "對手沒有超時"
 
-#: backend.c:14772
+#: backend.c:15293
 msgid "You must make your move before offering a draw"
 msgstr "必須走完棋才能提和"
 
-#: backend.c:15109
+#: backend.c:15630
 msgid "You are not examining a game"
 msgstr "沒有分析棋局"
 
-#: backend.c:15113
+#: backend.c:15634
 msgid "You can't revert while pausing"
 msgstr "暫停時不能復原棋局"
 
-#: backend.c:15167 backend.c:15174
+#: backend.c:15688 backend.c:15695
 msgid "It is your turn"
 msgstr "輪到你走棋"
 
-#: backend.c:15225 backend.c:15232 backend.c:15285 backend.c:15292
-msgid "Wait until your turn"
+#: backend.c:15746 backend.c:15753 backend.c:15806 backend.c:15813
+#, fuzzy
+msgid "Wait until your turn."
 msgstr "等待對手走棋"
 
-#: backend.c:15237
+#: backend.c:15758
 msgid "No hint available"
 msgstr "沒有可用的提示"
 
-#: backend.c:15253 ngamelist.c:355
+#: backend.c:15774 ngamelist.c:355
 #, fuzzy
 msgid "Game list not loaded or empty"
 msgstr "尚未有棋局載入"
 
-#: backend.c:15260
+#: backend.c:15781
 msgid "Book file exists! Try again for overwrite."
 msgstr ""
 
-#: backend.c:15738
+#: backend.c:16259
 #, c-format
 msgid "Error writing to %s chess program"
 msgstr "發送訊息到%s國際象棋程式時出錯"
 
-#: backend.c:15741 backend.c:15772
+#: backend.c:16262 backend.c:16293
 #, c-format
 msgid "%s program exits in draw position (%s)"
 msgstr ""
 
-#: backend.c:15767
+#: backend.c:16288
 #, c-format
 msgid "Error: %s chess program (%s) exited unexpectedly"
 msgstr "錯誤:%s國際象棋程式(%s)異常終止"
 
-#: backend.c:15785
+#: backend.c:16306
 #, c-format
 msgid "Error reading from %s chess program (%s)"
 msgstr "從%s國際象棋程式(%s)接收訊息時出錯"
 
-#: backend.c:16187
+#: backend.c:16730
 #, c-format
 msgid "%s engine has too many options\n"
 msgstr ""
 
-#: backend.c:16343
+#: backend.c:16886
 msgid "Displayed move is not current"
 msgstr "顯示的著法不是當前著法"
 
-#: backend.c:16352
+#: backend.c:16895
 msgid "Could not parse move"
 msgstr "無法解析著法"
 
-#: backend.c:16477 backend.c:16499
+#: backend.c:17020 backend.c:17042
 msgid "Both flags fell"
 msgstr "雙方都超時了"
 
-#: backend.c:16479
+#: backend.c:17022
 msgid "White's flag fell"
 msgstr "紅方超時"
 
-#: backend.c:16501
+#: backend.c:17044
 msgid "Black's flag fell"
 msgstr "黑方超時"
 
-#: backend.c:16632
+#: backend.c:17175
 msgid "Clock adjustment not allowed in auto-flag mode"
 msgstr ""
 
-#: backend.c:17467
+#: backend.c:18025
 msgid "Bad FEN position in clipboard"
 msgstr "剪貼簿的FEN盤面錯誤"
 
@@ -803,1369 +828,1423 @@ msgstr ""
 msgid "Could not create book"
 msgstr "無法解析著法"
 
-#: dialogs.c:259
+#: dialogs.c:283
 #, fuzzy
 msgid "Tournament file:          "
 msgstr "封盤(J)   F7"
 
-#: dialogs.c:260
-msgid "Sync after round"
+#: dialogs.c:284
+msgid "For concurrent playing of tourney with multiple XBoards:"
 msgstr ""
 
-#: dialogs.c:261
-msgid "    (for concurrent playing of a single"
+#: dialogs.c:285
+msgid "Sync after round"
 msgstr ""
 
-#: dialogs.c:262
+#: dialogs.c:286
 msgid "Sync after cycle"
 msgstr ""
 
-#: dialogs.c:263
-msgid "      tourney with multiple XBoards)"
-msgstr ""
-
-#: dialogs.c:264
+#: dialogs.c:287
 msgid "Tourney participants:"
 msgstr ""
 
-#: dialogs.c:265
+#: dialogs.c:288
 msgid "Select Engine:"
 msgstr ""
 
-#: dialogs.c:273
+#: dialogs.c:296
 msgid "Tourney type (0 = round-robin, 1 = gauntlet):"
 msgstr ""
 
-#: dialogs.c:274
+#: dialogs.c:297
 msgid "Number of tourney cycles (or Swiss rounds):"
 msgstr ""
 
-#: dialogs.c:275
+#: dialogs.c:298
 msgid "Default Number of Games in Match (or Pairing):"
 msgstr ""
 
-#: dialogs.c:276
+#: dialogs.c:299
 msgid "Pause between Match Games (msec):"
 msgstr ""
 
-#: dialogs.c:277
+#: dialogs.c:300
 msgid "Save Tourney Games on:"
 msgstr ""
 
-#: dialogs.c:278
+#: dialogs.c:301
 msgid "Game File with Opening Lines:"
 msgstr ""
 
-#: dialogs.c:279
+#: dialogs.c:302
 msgid "Game Number (-1 or -2 = Auto-Increment):"
 msgstr ""
 
-#: dialogs.c:280
+#: dialogs.c:303
 msgid "File with Start Positions:"
 msgstr ""
 
-#: dialogs.c:281
+#: dialogs.c:304
 msgid "Position Number (-1 or -2 = Auto-Increment):"
 msgstr ""
 
-#: dialogs.c:282
+#: dialogs.c:305
 msgid "Rewind Index after this many Games (0 = never):"
 msgstr ""
 
-#: dialogs.c:283
+#: dialogs.c:306
 msgid "Disable own engine books by default"
 msgstr ""
 
-#: dialogs.c:284
+#: dialogs.c:307 dialogs.c:1565
+msgid "Time Control"
+msgstr ""
+
+#: dialogs.c:308
+#, fuzzy
+msgid "Common Engine"
+msgstr "通用引擎設定(E)...   Alt+Shift+U"
+
+#: dialogs.c:309 dialogs.c:441
+msgid "General Options"
+msgstr "一般選項"
+
+#: dialogs.c:310
+msgid "Continue Later"
+msgstr ""
+
+#: dialogs.c:311
 msgid "Replace Engine"
 msgstr ""
 
-#: dialogs.c:285
+#: dialogs.c:312
 msgid "Upgrade Engine"
 msgstr ""
 
-#: dialogs.c:286
+#: dialogs.c:313
 msgid "Clone Tourney"
 msgstr ""
 
-#: dialogs.c:316
+#: dialogs.c:351
 msgid "First you must specify an existing tourney file to clone"
 msgstr ""
 
-#: dialogs.c:332 dialogs.c:1320
+#: dialogs.c:367 dialogs.c:1407
 msgid "# no engines are installed"
 msgstr ""
 
-#: dialogs.c:344
-msgid "Match Options"
+#: dialogs.c:375
+msgid "Internal error: PARTICIPANTS set wrong"
 msgstr ""
 
-#: dialogs.c:363
+#: dialogs.c:383
+#, fuzzy
+msgid "Tournament Options"
+msgstr "聲音"
+
+#: dialogs.c:402
 msgid "Absolute Analysis Scores"
 msgstr ""
 
-#: dialogs.c:364
+#: dialogs.c:403
 msgid "Almost Always Queen (Detour Under-Promote)"
 msgstr ""
 
-#: dialogs.c:365 menus.c:714
+#: dialogs.c:404 menus.c:714
 msgid "Animate Dragging"
 msgstr "動畫拖曳(D)"
 
-#: dialogs.c:366 menus.c:715
+#: dialogs.c:405 menus.c:715
 msgid "Animate Moving"
 msgstr "動畫走棋(A)"
 
-#: dialogs.c:367 menus.c:716
+#: dialogs.c:406 menus.c:716
 msgid "Auto Flag"
 msgstr "自動超時判負(F) Ctrl+Shift+F"
 
-#: dialogs.c:368 menus.c:717
+#: dialogs.c:407 menus.c:717
 msgid "Auto Flip View"
 msgstr "自動翻轉棋盤(V)"
 
-#: dialogs.c:369 menus.c:718
+#: dialogs.c:408 menus.c:718
 msgid "Blindfold"
 msgstr "盲棋(B)"
 
-#: dialogs.c:370
+#. 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 ""
 
-#: dialogs.c:371
+#: dialogs.c:411
 msgid "Enable Variation Trees"
 msgstr ""
 
-#: dialogs.c:372
+#: dialogs.c:412
+msgid "Headers in Engine Output Window"
+msgstr ""
+
+#: dialogs.c:413
 msgid "Hide Thinking from Human"
 msgstr "與人對弈時隱藏思考細節"
 
-#: dialogs.c:373 menus.c:723
+#: dialogs.c:414 menus.c:723
 msgid "Highlight Last Move"
 msgstr "標記上一著法(M)"
 
-#: dialogs.c:374
+#: dialogs.c:415
 msgid "Highlight with Arrow"
 msgstr "用箭頭突出移動"
 
-#: dialogs.c:375 menus.c:726
+#: dialogs.c:416 menus.c:726
 msgid "One-Click Moving"
 msgstr "單擊移動(M)"
 
-#: dialogs.c:376
+#: dialogs.c:417
 msgid "Periodic Updates (in Analysis Mode)"
 msgstr "定期更新(分析模式)"
 
-#: dialogs.c:378
+#: dialogs.c:419
 msgid "Play Move(s) of Clicked PV (Analysis)"
 msgstr ""
 
-#: dialogs.c:379 dialogs.c:514 menus.c:728
+#: dialogs.c:420 dialogs.c:597 menus.c:728
 msgid "Ponder Next Move"
 msgstr "同步思考(N)"
 
-#: dialogs.c:380
+#: dialogs.c:421
 msgid "Popup Exit Messages"
 msgstr "離開時提示(P)"
 
-#: dialogs.c:381 menus.c:730
+#: dialogs.c:422 menus.c:730
 msgid "Popup Move Errors"
 msgstr "提示錯誤著法(E)"
 
-#: dialogs.c:382
+#: dialogs.c:423
 #, fuzzy
 msgid "Scores in Move List"
 msgstr "取得著法列表(G)"
 
-#: dialogs.c:383
+#: dialogs.c:424
 msgid "Show Coordinates"
 msgstr "顯示坐標(C)"
 
-#: dialogs.c:384
+#: dialogs.c:425
 msgid "Show Target Squares"
 msgstr ""
 
-#: dialogs.c:385
+#: dialogs.c:426
 msgid "Sticky Windows"
 msgstr ""
 
-#: dialogs.c:386 menus.c:733
+#: dialogs.c:427 menus.c:733
 msgid "Test Legality"
 msgstr "檢查著法合理性(L) Cl+Sh+L"
 
-#: dialogs.c:387
+#: dialogs.c:428
 msgid "Top-Level Dialogs"
 msgstr ""
 
-#: dialogs.c:388
+#: dialogs.c:429
 msgid "Flash Moves (0 = no flashing):"
 msgstr ""
 
-#: dialogs.c:389
+#: dialogs.c:430
 msgid "Flash Rate (high = fast):"
 msgstr ""
 
-#: dialogs.c:390
+#: dialogs.c:431
 msgid "Animation Speed (high = slow):"
 msgstr ""
 
-#: dialogs.c:391
+#: dialogs.c:432
 #, fuzzy
 msgid "Zoom factor in Evaluation Graph:"
 msgstr "審局圖"
 
-#: dialogs.c:400
-msgid "General Options"
-msgstr "一般選項"
-
-#: dialogs.c:410
-msgid "normal"
+#: dialogs.c:452
+msgid "Normal"
 msgstr ""
 
-#: dialogs.c:411
-msgid "makruk"
+#: dialogs.c:453
+msgid "Makruk"
 msgstr ""
 
-#: dialogs.c:412
+#: dialogs.c:454
 msgid "FRC"
 msgstr ""
 
-#: dialogs.c:413
-msgid "shatranj"
+#: dialogs.c:455
+msgid "Shatranj"
 msgstr ""
 
-#: dialogs.c:414
-msgid "wild castle"
+#: dialogs.c:456
+msgid "Wild castle"
 msgstr ""
 
-#: dialogs.c:415
-msgid "knightmate"
-msgstr ""
+#: dialogs.c:457
+#, fuzzy
+msgid "Knightmate"
+msgstr "馬"
 
-#: dialogs.c:416
-msgid "no castle"
+#: dialogs.c:458
+msgid "No castle"
 msgstr ""
 
-#: dialogs.c:417
-msgid "cylinder *"
+#: dialogs.c:459
+msgid "Cylinder *"
 msgstr ""
 
-#: dialogs.c:418
+#: dialogs.c:460
 msgid "3-checks"
 msgstr ""
 
-#: dialogs.c:419
+#: dialogs.c:461
 msgid "berolina *"
 msgstr ""
 
-#: dialogs.c:420
+#: dialogs.c:462
 msgid "atomic"
 msgstr ""
 
-#: dialogs.c:421
+#: dialogs.c:463
 msgid "two kings"
 msgstr ""
 
-#: dialogs.c:422
+#: dialogs.c:464
+msgid " "
+msgstr ""
+
+#: dialogs.c:465
+msgid "Spartan"
+msgstr ""
+
+#: dialogs.c:466
 msgid "Board size ( -1 = default for selected variant):"
 msgstr ""
 
-#: dialogs.c:423
+#: dialogs.c:467
 msgid "Number of Board Ranks:"
 msgstr ""
 
-#: dialogs.c:424
+#: dialogs.c:468
 msgid "Number of Board Files:"
 msgstr ""
 
-#: dialogs.c:425
+#: dialogs.c:469
 msgid "Holdings Size:"
 msgstr ""
 
-#: dialogs.c:429
-msgid "fairy"
+#: dialogs.c:471
+msgid ""
+"Variants marked with * can only be played\n"
+"with legality testing off."
 msgstr ""
 
-#: dialogs.c:430
+#: dialogs.c:473
+msgid "ASEAN"
+msgstr ""
+
+#: dialogs.c:474
 msgid "Great Shatranj (10x8)"
 msgstr ""
 
-#: dialogs.c:431
+#: dialogs.c:475
 msgid "Seirawan"
 msgstr ""
 
-#: dialogs.c:432
-msgid "falcon (10x8)"
+#: dialogs.c:476
+msgid "Falcon (10x8)"
 msgstr ""
 
-#: dialogs.c:433
+#: dialogs.c:477
 msgid "Superchess"
 msgstr ""
 
-#: dialogs.c:434
+#: dialogs.c:478
 msgid "Capablanca (10x8)"
 msgstr ""
 
-#: dialogs.c:435
-msgid "crazyhouse"
+#: dialogs.c:479
+msgid "Crazyhouse"
 msgstr ""
 
-#: dialogs.c:436
+#: dialogs.c:480
 msgid "Gothic (10x8)"
 msgstr ""
 
-#: dialogs.c:437
-msgid "bughouse"
+#: dialogs.c:481
+msgid "Bughouse"
 msgstr ""
 
-#: dialogs.c:438
-msgid "janus (10x8)"
+#: dialogs.c:482
+msgid "Janus (10x8)"
 msgstr ""
 
-#: dialogs.c:439
-msgid "suicide"
+#: dialogs.c:483
+msgid "Suicide"
 msgstr ""
 
-#: dialogs.c:440
+#: dialogs.c:484
 msgid "CRC (10x8)"
 msgstr ""
 
-#: dialogs.c:441
+#: dialogs.c:485
 msgid "give-away"
 msgstr ""
 
-#: dialogs.c:442
+#: dialogs.c:486
 msgid "grand (10x10)"
 msgstr ""
 
-#: dialogs.c:443
+#: dialogs.c:487
 msgid "losers"
 msgstr ""
 
-#: dialogs.c:444
+#: dialogs.c:488
 msgid "shogi (9x9)"
 msgstr ""
 
-#: dialogs.c:445
-msgid "Spartan"
+#: dialogs.c:489
+msgid "fairy"
 msgstr ""
 
-#: dialogs.c:446
+#: dialogs.c:490
 msgid "xiangqi (9x10)"
 msgstr ""
 
-#: dialogs.c:447
-msgid " "
+#: dialogs.c:491
+msgid "mighty lion"
 msgstr ""
 
-#: dialogs.c:448
+#: dialogs.c:492
 msgid "courier (12x8)"
 msgstr ""
 
-#: dialogs.c:465
+#: dialogs.c:493
+msgid "chu chess (10x10)"
+msgstr ""
+
+#: dialogs.c:494
+msgid "chu shogi (12x12)"
+msgstr ""
+
+#: dialogs.c:526
 #, c-format
 msgid "Warning: second engine (%s) does not support this!"
 msgstr "警告: 第二個引擎(%s) 不支持此!"
 
-#: dialogs.c:488
+#: dialogs.c:554
 #, c-format
-msgid "Only bughouse is not available in viewer mode"
+msgid "Only bughouse is not available in viewer mode."
 msgstr ""
 
-#: dialogs.c:489
+#: dialogs.c:555
 #, c-format
 msgid ""
-"All variants not supported by first engine\n"
-"(currently %s) are disabled"
+"All variants not supported by the first engine\n"
+"(currently %s) are disabled."
 msgstr ""
 
-#: dialogs.c:490
+#: dialogs.c:572
 msgid "New Variant"
 msgstr "變種"
 
-#: dialogs.c:515
+#: dialogs.c:598
 msgid "Maximum Number of CPUs per Engine:"
 msgstr "最大CPU數"
 
-#: dialogs.c:516
+#: dialogs.c:599
 msgid "Polygot Directory:"
 msgstr ""
 
-#: dialogs.c:517
+#: dialogs.c:600
 msgid "Hash-Table Size (MB):"
 msgstr "雜湊表大小(MB)"
 
-#: dialogs.c:518
+#: dialogs.c:601
 msgid "Nalimov EGTB Path:"
 msgstr "EGTB 路徑"
 
-#: dialogs.c:519
+#: dialogs.c:602
 msgid "EGTB Cache Size (MB):"
 msgstr "EGTB 大小(MB)"
 
-#: dialogs.c:520
+#: dialogs.c:603
 msgid "Use GUI Book"
 msgstr ""
 
-#: dialogs.c:521
+#: dialogs.c:604
 msgid "Opening-Book Filename:"
 msgstr ""
 
-#: dialogs.c:522
+#: dialogs.c:605
 msgid "Book Depth (moves):"
 msgstr "庫著法深度"
 
-#: dialogs.c:523
+#: dialogs.c:606
 msgid "Book Variety (0) vs. Strength (100):"
 msgstr "庫變例"
 
-#: dialogs.c:524
+#: dialogs.c:607
 msgid "Engine #1 Has Own Book"
 msgstr "引擎1有自用庫"
 
-#: dialogs.c:525
+#: dialogs.c:608
 msgid "Engine #2 Has Own Book          "
 msgstr ""
 
-#: dialogs.c:534
+#: dialogs.c:617
 msgid "Common Engine Settings"
 msgstr "通用引擎設定"
 
-#: dialogs.c:540
+#: dialogs.c:623
 msgid "Detect all Mates"
 msgstr "檢測將殺(M)"
 
-#: dialogs.c:541
+#: dialogs.c:624
 msgid "Verify Engine Result Claims"
 msgstr "驗證引擎聲明(V)"
 
-#: dialogs.c:542
+#: dialogs.c:625
 msgid "Draw if Insufficient Mating Material"
 msgstr "子力不足時判和(I)"
 
-#: dialogs.c:543
+#: dialogs.c:626
 msgid "Adjudicate Trivial Draws (3-Move Delay)"
 msgstr "簡易和棋判決(T)"
 
-#: dialogs.c:544
+#: dialogs.c:627
 msgid "N-Move Rule:"
 msgstr ""
 
-#: dialogs.c:545
+#: dialogs.c:628
 msgid "N-fold Repeats:"
 msgstr ""
 
-#: dialogs.c:546
+#: dialogs.c:629
 msgid "Draw after N Moves Total:"
 msgstr "幾著後判和"
 
-#: dialogs.c:547
+#: dialogs.c:630
 msgid "Win / Loss Threshold:"
 msgstr "輸/贏判決門檻"
 
-#: dialogs.c:548
+#: dialogs.c:631
 msgid "Negate Score of Engine #1"
 msgstr "引擎 #1 是絕對分數"
 
-#: dialogs.c:549
+#: dialogs.c:632
 msgid "Negate Score of Engine #2"
 msgstr "引擎 #2 是絕對分數"
 
-#: dialogs.c:556
+#: dialogs.c:639
 #, fuzzy
 msgid "Adjudicate non-ICS Games"
 msgstr "裁決紅贏 (W)"
 
-#: dialogs.c:569
+#: dialogs.c:652
 msgid "Auto-Kibitz"
 msgstr "自動\"kibitz\"(A)"
 
-#: dialogs.c:570
+#: dialogs.c:653
 msgid "Auto-Comment"
 msgstr "自動註解(A)"
 
-#: dialogs.c:571
+#: dialogs.c:654
 msgid "Auto-Observe"
 msgstr "自動觀棋(O)"
 
-#: dialogs.c:572
+#: dialogs.c:655
 msgid "Auto-Raise Board"
 msgstr "自動改變棋盤大小(R)"
 
-#: dialogs.c:573
+#: dialogs.c:656
 msgid "Auto-Create Logon Script"
 msgstr ""
 
-#: dialogs.c:574
+#: dialogs.c:657
 msgid "Background Observe while Playing"
 msgstr "背景觀察(v)"
 
-#: dialogs.c:575
+#: dialogs.c:658
 msgid "Dual Board for Background-Observed Game"
 msgstr "雙棋盤(D)"
 
-#: dialogs.c:576
+#: dialogs.c:659
 msgid "Get Move List"
 msgstr "取得著法列表(G)"
 
-#: dialogs.c:577
+#: dialogs.c:660
 msgid "Quiet Play"
 msgstr "落子無聲(Q)"
 
-#: dialogs.c:578
+#: dialogs.c:661
 msgid "Seek Graph"
 msgstr "可選對手圖表(k)"
 
-#: dialogs.c:579
+#: dialogs.c:662
 msgid "Auto-Refresh Seek Graph"
 msgstr "自動刷新圖表(R)"
 
-#: dialogs.c:580
+#: dialogs.c:663
 msgid "Auto-InputBox PopUp"
 msgstr ""
 
-#: dialogs.c:581
+#: dialogs.c:664
+msgid "Quit after game"
+msgstr ""
+
+#: dialogs.c:665
 msgid "Premove"
 msgstr "預先走棋(P)"
 
-#: dialogs.c:582
+#: dialogs.c:666
 msgid "Premove for White"
 msgstr ""
 
-#: dialogs.c:583
+#: dialogs.c:667
 msgid "First White Move:"
 msgstr "紅方先走(W)"
 
-#: dialogs.c:584
+#: dialogs.c:668
 msgid "Premove for Black"
 msgstr ""
 
-#: dialogs.c:585
+#: dialogs.c:669
 msgid "First Black Move:"
 msgstr "黑方先走(B)"
 
-#: dialogs.c:587
+#: dialogs.c:671
 msgid "Alarm"
 msgstr "提示"
 
-#: dialogs.c:588
+#: dialogs.c:672
 msgid "Alarm Time (msec):"
 msgstr ""
 
-#: dialogs.c:590
+#: dialogs.c:674
 msgid "Colorize Messages"
 msgstr ""
 
-#: dialogs.c:591
+#: dialogs.c:675
 msgid "Shout Text Colors:"
 msgstr ""
 
-#: dialogs.c:592
+#: dialogs.c:676
 msgid "S-Shout Text Colors:"
 msgstr ""
 
-#: dialogs.c:593
+#: dialogs.c:677
 msgid "Channel #1 Text Colors:"
 msgstr ""
 
-#: dialogs.c:594
+#: dialogs.c:678
 msgid "Other Channel Text Colors:"
 msgstr ""
 
-#: dialogs.c:595
+#: dialogs.c:679
 msgid "Kibitz Text Colors:"
 msgstr ""
 
-#: dialogs.c:596
+#: dialogs.c:680
 msgid "Tell Text Colors:"
 msgstr ""
 
-#: dialogs.c:597
+#: dialogs.c:681
 msgid "Challenge Text Colors:"
 msgstr ""
 
-#: dialogs.c:598
+#: dialogs.c:682
 msgid "Request Text Colors:"
 msgstr ""
 
-#: dialogs.c:599
+#: dialogs.c:683
 msgid "Seek Text Colors:"
 msgstr ""
 
-#: dialogs.c:606
+#: dialogs.c:690
 msgid "ICS Options"
 msgstr "ICS設定"
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Exact position match"
 msgstr ""
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Shown position is subset"
 msgstr ""
 
-#: dialogs.c:611
+#: dialogs.c:695
 msgid "Same material with exactly same Pawn chain"
 msgstr ""
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Same material"
 msgstr ""
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Material range (top board half optional)"
 msgstr ""
 
-#: dialogs.c:612
+#: dialogs.c:696
 msgid "Material difference (optional stuff balanced)"
 msgstr ""
 
-#: dialogs.c:624
+#: dialogs.c:708
 msgid "Auto-Display Tags"
 msgstr ""
 
-#: dialogs.c:625
+#: dialogs.c:709
 msgid "Auto-Display Comment"
 msgstr ""
 
-#: dialogs.c:626
+#: dialogs.c:710
 msgid ""
 "Auto-Play speed of loaded games\n"
 "(0 = instant, -1 = off):"
 msgstr ""
 
-#: dialogs.c:627
+#: dialogs.c:711
 msgid "Seconds per Move:"
 msgstr ""
 
-#: dialogs.c:628
+#: dialogs.c:712
 msgid ""
 "\n"
 "options to use in game-viewer mode:"
 msgstr ""
 
-#: dialogs.c:630
+#: dialogs.c:714
 msgid ""
 "\n"
 "Thresholds for position filtering in game list:"
 msgstr ""
 
-#: dialogs.c:631
+#: dialogs.c:715
 msgid "Elo of strongest player at least:"
 msgstr ""
 
-#: dialogs.c:632
+#: dialogs.c:716
 msgid "Elo of weakest player at least:"
 msgstr ""
 
-#: dialogs.c:633
+#: dialogs.c:717
 #, fuzzy
 msgid "No games before year:"
 msgstr "尚未有棋局載入"
 
-#: dialogs.c:634
+#: dialogs.c:718
 msgid "Minimum nr consecutive positions:"
 msgstr ""
 
-#: dialogs.c:635
+#: dialogs.c:719
 msgid "Search mode:"
 msgstr ""
 
-#: dialogs.c:636
+#: dialogs.c:720
 msgid "Also match reversed colors"
 msgstr ""
 
-#: dialogs.c:637
+#: dialogs.c:721
 msgid "Also match left-right flipped position"
 msgstr ""
 
-#: dialogs.c:645
+#: dialogs.c:729
 msgid "Load Game Options"
 msgstr "載入棋局選項"
 
-#: dialogs.c:657
+#: dialogs.c:741
 msgid "Auto-Save Games"
 msgstr ""
 
-#: dialogs.c:658
+#: dialogs.c:742
 msgid "Own Games Only"
 msgstr ""
 
-#: dialogs.c:659
+#: dialogs.c:743
 msgid "Save Games on File:"
 msgstr ""
 
-#: dialogs.c:660
+#: dialogs.c:744
 msgid "Save Final Positions on File:"
 msgstr ""
 
-#: dialogs.c:661
+#: dialogs.c:745
 msgid "PGN Event Header:"
 msgstr ""
 
-#: dialogs.c:662
+#: dialogs.c:746
 msgid "Old Save Style (as opposed to PGN)"
 msgstr ""
 
-#: dialogs.c:663
+#: dialogs.c:747
 msgid "Include Number Tag in tourney PGN"
 msgstr ""
 
-#: dialogs.c:664
+#: dialogs.c:748
 msgid "Save Score/Depth Info in PGN"
 msgstr ""
 
-#: dialogs.c:665
+#: dialogs.c:749
 msgid "Save Out-of-Book Info in PGN           "
 msgstr ""
 
-#: dialogs.c:672
+#: dialogs.c:756
 msgid "Save Game Options"
 msgstr "儲存棋局選項"
 
-#: dialogs.c:681
+#: dialogs.c:765
 msgid "No Sound"
 msgstr "無聲"
 
-#: dialogs.c:682
+#: dialogs.c:766
 msgid "Default Beep"
 msgstr "預設聲音"
 
-#: dialogs.c:683
+#: dialogs.c:767
 msgid "Above WAV File"
 msgstr ""
 
-#: dialogs.c:684
+#: dialogs.c:768
 msgid "Car Horn"
 msgstr ""
 
-#: dialogs.c:685
+#: dialogs.c:769
 msgid "Cymbal"
 msgstr ""
 
-#: dialogs.c:686
+#: dialogs.c:770
 msgid "Ding"
 msgstr ""
 
-#: dialogs.c:687
+#: dialogs.c:771
 msgid "Gong"
 msgstr ""
 
-#: dialogs.c:688
+#: dialogs.c:772
 msgid "Laser"
 msgstr ""
 
-#: dialogs.c:689
+#: dialogs.c:773
 msgid "Penalty"
 msgstr ""
 
-#: dialogs.c:690
+#: dialogs.c:774
 msgid "Phone"
 msgstr ""
 
-#: dialogs.c:691
+#: dialogs.c:775
 msgid "Pop"
 msgstr ""
 
-#: dialogs.c:692
+#: dialogs.c:776
+msgid "Roar"
+msgstr ""
+
+#: dialogs.c:777
 msgid "Slap"
 msgstr ""
 
-#: dialogs.c:693
+#: dialogs.c:778
 msgid "Wood Thunk"
 msgstr ""
 
-#: dialogs.c:695
+#: dialogs.c:780
 msgid "User File"
 msgstr ""
 
-#: dialogs.c:717
+#: dialogs.c:803
 msgid "User WAV File:"
 msgstr ""
 
-#: dialogs.c:718
+#: dialogs.c:804
 msgid "Sound Program:"
 msgstr ""
 
-#: dialogs.c:719
+#: dialogs.c:805
 msgid "Try-Out Sound:"
 msgstr ""
 
-#: dialogs.c:720
+#: dialogs.c:806
 msgid "Play"
 msgstr "播放"
 
-#: dialogs.c:721
+#: dialogs.c:807
 msgid "Move:"
 msgstr ""
 
-#: dialogs.c:722
+#: dialogs.c:808
 msgid "Win:"
 msgstr ""
 
-#: dialogs.c:723
+#: dialogs.c:809
 msgid "Lose:"
 msgstr ""
 
-#: dialogs.c:724
+#: dialogs.c:810
 msgid "Draw:"
 msgstr ""
 
-#: dialogs.c:725
+#: dialogs.c:811
 msgid "Unfinished:"
 msgstr ""
 
-#: dialogs.c:726
+#: dialogs.c:812
 msgid "Alarm:"
 msgstr ""
 
-#: dialogs.c:727
+#: dialogs.c:813
 msgid "Challenge:"
 msgstr ""
 
-#: dialogs.c:729
+#: dialogs.c:815
 msgid "Sounds Directory:"
 msgstr ""
 
-#: dialogs.c:730
+#: dialogs.c:816
 msgid "Shout:"
 msgstr ""
 
-#: dialogs.c:731
+#: dialogs.c:817
 msgid "S-Shout:"
 msgstr ""
 
-#: dialogs.c:732
+#: dialogs.c:818
 msgid "Channel:"
 msgstr ""
 
-#: dialogs.c:733
+#: dialogs.c:819
 msgid "Channel 1:"
 msgstr ""
 
-#: dialogs.c:734
+#: dialogs.c:820
 msgid "Tell:"
 msgstr ""
 
-#: dialogs.c:735
+#: dialogs.c:821
 msgid "Kibitz:"
 msgstr ""
 
-#: dialogs.c:736
+#: dialogs.c:822
 msgid "Request:"
 msgstr ""
 
-#: dialogs.c:737
+#: dialogs.c:823
+msgid "Lion roar:"
+msgstr ""
+
+#: dialogs.c:824
 msgid "Seek:"
 msgstr ""
 
-#: dialogs.c:753
+#: dialogs.c:840
 msgid "Sound Options"
 msgstr "聲音"
 
-#: dialogs.c:774
+#: dialogs.c:861
 msgid "White Piece Color:"
 msgstr ""
 
 #. TRANSLATORS: R = single letter for the color red
-#: dialogs.c:777 dialogs.c:786 dialogs.c:792 dialogs.c:798 dialogs.c:804
-#: dialogs.c:810
+#: dialogs.c:864 dialogs.c:873 dialogs.c:879 dialogs.c:885 dialogs.c:891
+#: dialogs.c:897
 msgid "R"
 msgstr ""
 
 #. TRANSLATORS: G = single letter for the color green
-#: dialogs.c:779 dialogs.c:787 dialogs.c:793 dialogs.c:799 dialogs.c:805
-#: dialogs.c:811
+#: dialogs.c:866 dialogs.c:874 dialogs.c:880 dialogs.c:886 dialogs.c:892
+#: dialogs.c:898
 msgid "G"
 msgstr ""
 
 #. TRANSLATORS: B = single letter for the color blue
-#: dialogs.c:781 dialogs.c:788 dialogs.c:794 dialogs.c:800 dialogs.c:806
-#: dialogs.c:812
+#: dialogs.c:868 dialogs.c:875 dialogs.c:881 dialogs.c:887 dialogs.c:893
+#: dialogs.c:899
 msgid "B"
 msgstr ""
 
 #. TRANSLATORS: D = single letter to make a color darker
-#: dialogs.c:783 dialogs.c:789 dialogs.c:795 dialogs.c:801 dialogs.c:807
-#: dialogs.c:813
+#: dialogs.c:870 dialogs.c:876 dialogs.c:882 dialogs.c:888 dialogs.c:894
+#: dialogs.c:900
 msgid "D"
 msgstr ""
 
-#: dialogs.c:784
+#: dialogs.c:871
 msgid "Black Piece Color:"
 msgstr "黑子"
 
-#: dialogs.c:790
+#: dialogs.c:877
 msgid "Light Square Color:"
 msgstr "白格"
 
-#: dialogs.c:796
+#: dialogs.c:883
 msgid "Dark Square Color:"
 msgstr "黑格"
 
-#: dialogs.c:802
+#: dialogs.c:889
 msgid "Highlight Color:"
 msgstr "格子標記"
 
-#: dialogs.c:808
+#: dialogs.c:895
 msgid "Premove Highlight Color:"
 msgstr "預先走棋標記"
 
-#: dialogs.c:814
+#: dialogs.c:901
 msgid "Flip Pieces Shogi Style        (Colored buttons restore default)"
 msgstr ""
 
-#: dialogs.c:816
+#: dialogs.c:903
 msgid "Mono Mode"
 msgstr "黑白"
 
-#: dialogs.c:817
-msgid "Line Gap ( -1 = default for board size):"
+#: dialogs.c:904
+msgid "Line Gap (-1 = default for board size):"
 msgstr ""
 
-#: dialogs.c:818
+#: dialogs.c:905
 msgid "Use Board Textures"
 msgstr ""
 
-#: dialogs.c:819
+#: dialogs.c:906
 msgid "Light-Squares Texture File:"
 msgstr ""
 
-#: dialogs.c:820
+#: dialogs.c:907
 msgid "Dark-Squares Texture File:"
 msgstr ""
 
-#: dialogs.c:821
+#: dialogs.c:908
 msgid "Use external piece bitmaps with their own colors"
 msgstr ""
 
-#: dialogs.c:822
+#: dialogs.c:909
 msgid "Directory with Pieces Images:"
 msgstr ""
 
-#: dialogs.c:872
+#: dialogs.c:959
 msgid "Board Options"
 msgstr "棋盤選項"
 
-#: dialogs.c:925 menus.c:634
+#: dialogs.c:1012 menus.c:634
 msgid "ICS text menu"
 msgstr ""
 
-#: dialogs.c:947
+#: dialogs.c:1034
 msgid "clear"
 msgstr ""
 
-#: dialogs.c:948 dialogs.c:1036
+#: dialogs.c:1035 dialogs.c:1123
 msgid "save changes"
 msgstr ""
 
-#: dialogs.c:1051
+#: dialogs.c:1138
 #, fuzzy
 msgid "Edit book"
 msgstr "編輯(E)"
 
-#: dialogs.c:1051 menus.c:636
+#: dialogs.c:1138 menus.c:636
 msgid "Tags"
 msgstr "編輯標籤(T)"
 
-#: dialogs.c:1193
+#: dialogs.c:1280
 msgid "ICS input box"
 msgstr ""
 
-#: dialogs.c:1225
+#: dialogs.c:1312
 msgid "Type a move"
 msgstr ""
 
-#: dialogs.c:1251
+#: dialogs.c:1338
 msgid "Engine has no options"
 msgstr ""
 
-#: dialogs.c:1253
+#: dialogs.c:1340
 msgid "Engine Settings"
 msgstr ""
 
-#: dialogs.c:1278
+#: dialogs.c:1365
 msgid "Select engine from list:"
 msgstr ""
 
-#: dialogs.c:1281
+#: dialogs.c:1368
 msgid "or specify one below:"
 msgstr ""
 
-#: dialogs.c:1282
+#: dialogs.c:1369
 msgid "Nickname (optional):"
 msgstr ""
 
-#: dialogs.c:1283
+#: dialogs.c:1370
 msgid "Use nickname in PGN player tags of engine-engine games"
 msgstr ""
 
-#: dialogs.c:1284
+#: dialogs.c:1371
 msgid "Engine Directory:"
 msgstr ""
 
-#: dialogs.c:1285
+#: dialogs.c:1372
 msgid "Engine Command:"
 msgstr ""
 
-#: dialogs.c:1286
+#: dialogs.c:1373
 msgid "(Directory will be derived from engine path when empty)"
 msgstr ""
 
-#: dialogs.c:1287
+#: dialogs.c:1374
 msgid "UCI"
 msgstr ""
 
-#: dialogs.c:1288
+#: dialogs.c:1375
 msgid "WB protocol v1 (do not wait for engine features)"
 msgstr ""
 
-#: dialogs.c:1289
+#: dialogs.c:1376
 msgid "Must not use GUI book"
 msgstr ""
 
-#: dialogs.c:1290
+#: dialogs.c:1377
 msgid "Add this engine to the list"
 msgstr ""
 
-#: dialogs.c:1291
+#: dialogs.c:1378
 msgid "Force current variant with this engine"
 msgstr ""
 
-#: dialogs.c:1341
+#: dialogs.c:1428
 msgid "Load first engine"
 msgstr ""
 
-#: dialogs.c:1347
+#: dialogs.c:1434
 msgid "Load second engine"
 msgstr ""
 
-#: dialogs.c:1370
+#: dialogs.c:1457
 msgid "shuffle"
 msgstr ""
 
-#: dialogs.c:1371
+#: dialogs.c:1458
 msgid "Start-position number:"
 msgstr "啟動位置號碼(S)"
 
-#: dialogs.c:1372
+#: dialogs.c:1459
 #, fuzzy
 msgid "randomize"
 msgstr "隨機"
 
-#: dialogs.c:1373
+#: dialogs.c:1460
 msgid "pick fixed"
 msgstr ""
 
-#: dialogs.c:1390
+#: dialogs.c:1477
 msgid "New Shuffle Game"
 msgstr "洗牌遊戲(u)..."
 
-#: dialogs.c:1409
+#: dialogs.c:1496
 msgid "classical"
 msgstr ""
 
-#: dialogs.c:1410
+#: dialogs.c:1497
 msgid "incremental"
 msgstr ""
 
-#: dialogs.c:1411
+#: dialogs.c:1498
 msgid "fixed max"
 msgstr ""
 
-#: dialogs.c:1412
+#: dialogs.c:1499
 msgid "Moves per session:"
 msgstr ""
 
-#: dialogs.c:1413
+#: dialogs.c:1500
 msgid "Initial time (min):"
 msgstr ""
 
-#: dialogs.c:1414
+#: dialogs.c:1501
 msgid "Increment or max (sec/move):"
 msgstr ""
 
-#: dialogs.c:1415
+#: dialogs.c:1502
 #, fuzzy
 msgid "Time-Odds factors:"
 msgstr "時間倍數"
 
-#: dialogs.c:1416
+#: dialogs.c:1503
 #, fuzzy
 msgid "Engine #1"
 msgstr "引擎輸出"
 
-#: dialogs.c:1417
+#: dialogs.c:1504
 #, fuzzy
 msgid "Engine #2 / Human"
 msgstr "引擎1有自用庫"
 
-#: dialogs.c:1457 dialogs.c:1460 dialogs.c:1465 dialogs.c:1466
+#: dialogs.c:1544 dialogs.c:1547 dialogs.c:1552 dialogs.c:1553
 #: gtk/xoptions.c:194
 msgid "Unused"
 msgstr ""
 
-#: dialogs.c:1478
-msgid "Time Control"
-msgstr ""
-
-#: dialogs.c:1507
+#: dialogs.c:1594
 msgid "Error writing to chess program"
 msgstr "發送訊息給國際象棋程式時出錯"
 
-#: dialogs.c:1574
+#: dialogs.c:1662 xaw/xoptions.c:1276
 #, fuzzy
 msgid "Cancel"
 msgstr "取消(C)"
 
-#: dialogs.c:1579 dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:1667 dialogs.c:2061 dialogs.c:2065
 msgid "King"
 msgstr "王"
 
-#: dialogs.c:1582
+#: dialogs.c:1670
 msgid "Captain"
 msgstr ""
 
-#: dialogs.c:1583
+#: dialogs.c:1671
 msgid "Lieutenant"
 msgstr ""
 
-#: dialogs.c:1584
+#: dialogs.c:1672
 msgid "General"
 msgstr "一般選項(G)..."
 
-#: dialogs.c:1585
+#: dialogs.c:1673
 msgid "Warlord"
 msgstr ""
 
-#: dialogs.c:1587 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1675 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Knight"
 msgstr "馬"
 
-#: dialogs.c:1588 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1676 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Bishop"
 msgstr "象"
 
-#: dialogs.c:1589 dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:1677 dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Rook"
 msgstr "車"
 
-#: dialogs.c:1593 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1681 dialogs.c:2062 dialogs.c:2066
 msgid "Archbishop"
 msgstr "國師"
 
-#: dialogs.c:1594 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1682 dialogs.c:2062 dialogs.c:2066
 msgid "Chancellor"
 msgstr "宰相"
 
-#: dialogs.c:1596 dialogs.c:1971 dialogs.c:1975 dialogs.c:1993
+#: dialogs.c:1684 dialogs.c:2061 dialogs.c:2065 dialogs.c:2083
 msgid "Queen"
 msgstr "后"
 
-#: dialogs.c:1600
+#: dialogs.c:1686
+msgid "Lion"
+msgstr ""
+
+#: dialogs.c:1690
 msgid "Defer"
 msgstr ""
 
-#: dialogs.c:1601 dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:1691 dialogs.c:2062 dialogs.c:2066
 msgid "Promote"
 msgstr "升變"
 
-#: dialogs.c:1616
+#: dialogs.c:1706
 msgid "Chat partner:"
 msgstr ""
 
-#: dialogs.c:1701
+#: dialogs.c:1791
 msgid "Chat box"
 msgstr ""
 
-#: dialogs.c:1742
+#: dialogs.c:1832
 msgid "factory"
 msgstr ""
 
-#: dialogs.c:1743
+#: dialogs.c:1833
 msgid "up"
 msgstr "向上"
 
-#: dialogs.c:1744
+#: dialogs.c:1834
 msgid "down"
 msgstr "向下"
 
-#: dialogs.c:1762
+#: dialogs.c:1852
 msgid "No tag selected"
 msgstr ""
 
-#: dialogs.c:1793
+#: dialogs.c:1883
 #, fuzzy
 msgid "Game-list options"
 msgstr "載入棋局選項"
 
-#: dialogs.c:1869 dialogs.c:1883
+#: dialogs.c:1959 dialogs.c:1973
 msgid "Error"
 msgstr "錯誤"
 
-#: dialogs.c:1906
+#: dialogs.c:1996
 msgid "Fatal Error"
 msgstr "嚴重錯誤"
 
-#: dialogs.c:1906
+#: dialogs.c:1996
 msgid "Exiting"
 msgstr "離開"
 
-#: dialogs.c:1917
+#: dialogs.c:2007
 msgid "Information"
 msgstr "資訊"
 
-#: dialogs.c:1924
+#: dialogs.c:2014
 msgid "Note"
 msgstr "註解"
 
-#: dialogs.c:1970 dialogs.c:2245 dialogs.c:2248
+#: dialogs.c:2060 dialogs.c:2340 dialogs.c:2343
 msgid "White"
 msgstr "紅方"
 
-#: dialogs.c:1970 dialogs.c:1974 dialogs.c:1993
+#: dialogs.c:2060 dialogs.c:2064 dialogs.c:2083
 msgid "Pawn"
 msgstr "兵"
 
-#: dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:2061 dialogs.c:2065
 msgid "Elephant"
 msgstr "象"
 
-#: dialogs.c:1971 dialogs.c:1975
+#: dialogs.c:2061 dialogs.c:2065
 msgid "Cannon"
 msgstr "炮"
 
-#: dialogs.c:1972 dialogs.c:1976
+#: dialogs.c:2062 dialogs.c:2066
 msgid "Demote"
 msgstr "降級"
 
-#: dialogs.c:1973 dialogs.c:1977
+#: dialogs.c:2063 dialogs.c:2067
 msgid "Empty square"
 msgstr "清空格子"
 
-#: dialogs.c:1973 dialogs.c:1977
+#: dialogs.c:2063 dialogs.c:2067
 msgid "Clear board"
 msgstr "清空棋盤"
 
-#: dialogs.c:1974 dialogs.c:2257 dialogs.c:2260
+#: dialogs.c:2064 dialogs.c:2352 dialogs.c:2355
 msgid "Black"
 msgstr "黑方"
 
-#: dialogs.c:2073 menus.c:787
+#: dialogs.c:2163 menus.c:787
 msgid "File"
 msgstr "檔案(F)"
 
-#: dialogs.c:2074 menus.c:788
+#: dialogs.c:2164 menus.c:788
 msgid "Edit"
 msgstr "編輯(E)"
 
-#: dialogs.c:2075 menus.c:789
+#: dialogs.c:2165 menus.c:789
 msgid "View"
 msgstr ""
 
-#: dialogs.c:2076 menus.c:790
+#: dialogs.c:2166 menus.c:790
 msgid "Mode"
 msgstr "模式(M)"
 
-#: dialogs.c:2077 menus.c:791
+#: dialogs.c:2167 menus.c:791
 msgid "Action"
 msgstr "行為(A)"
 
-#: dialogs.c:2078 menus.c:792
+#: dialogs.c:2168 menus.c:792
 msgid "Engine"
 msgstr ""
 
-#: dialogs.c:2079 menus.c:793
+#: dialogs.c:2169 menus.c:793
 msgid "Options"
 msgstr "選項(O)"
 
-#: dialogs.c:2080 menus.c:794
+#: dialogs.c:2170 menus.c:794
 msgid "Help"
 msgstr "說明(H)"
 
-#: dialogs.c:2090
+#: dialogs.c:2180
 msgid "<<"
 msgstr ""
 
-#: dialogs.c:2091
+#: dialogs.c:2181
 msgid "<"
 msgstr ""
 
-#: dialogs.c:2093
+#: dialogs.c:2183
 msgid ">"
 msgstr ""
 
-#: dialogs.c:2094
+#: dialogs.c:2184
 msgid ">>"
 msgstr ""
 
-#: dialogs.c:2364
+#: dialogs.c:2458
 msgid "Directories:"
 msgstr ""
 
-#: dialogs.c:2365
+#: dialogs.c:2459
 #, fuzzy
 msgid "Files:"
 msgstr "檔案(F)"
 
-#: dialogs.c:2366
+#: dialogs.c:2460
 msgid "by name"
 msgstr ""
 
-#: dialogs.c:2367
+#: dialogs.c:2461
 msgid "by type"
 msgstr ""
 
-#: dialogs.c:2370
+#: dialogs.c:2464
 #, fuzzy
 msgid "Filename:"
 msgstr "過濾器"
 
-#: dialogs.c:2371
+#: dialogs.c:2465
 msgid "New directory"
 msgstr ""
 
-#: dialogs.c:2372
+#: dialogs.c:2466
 #, fuzzy
 msgid "File type:"
 msgstr "過濾器"
 
-#: dialogs.c:2447
+#: dialogs.c:2541
 #, fuzzy
 msgid "Contents of"
 msgstr "編輯註解(C) *.*"
 
-#: dialogs.c:2473
+#: dialogs.c:2567
 msgid "  next page"
 msgstr ""
 
-#: dialogs.c:2490
+#: dialogs.c:2584
 msgid "FIRST TYPE DIRECTORY NAME HERE"
 msgstr ""
 
-#: dialogs.c:2491
+#: dialogs.c:2585
 msgid "TRY ANOTHER NAME"
 msgstr ""
 
-#: draw.c:293
+#: draw.c:310
 msgid ""
-"No default pieces installed\n"
-"Select your own -pieceImageDirectory"
+"No default pieces installed!\n"
+"Select your own using '-pieceImageDirectory'."
 msgstr ""
 
-#: engineoutput.c:107 menus.c:630
+#: engineoutput.c:110 menus.c:630
 #, fuzzy, c-format
 msgid "Engine Output"
 msgstr "引擎輸出"
 
-#: engineoutput.c:117
+#: engineoutput.c:120
 #, c-format
 msgid "%s (%d reversible ply)"
 msgid_plural "%s (%d reversible plies)"
 msgstr[0] ""
 msgstr[1] ""
 
-#: engineoutput.c:509 engineoutput.c:512 nengineoutput.c:81 nengineoutput.c:88
+#: engineoutput.c:542 engineoutput.c:545 nengineoutput.c:82 nengineoutput.c:90
 msgid "NPS"
 msgstr "NPS"
 
@@ -2174,50 +2253,50 @@ msgstr "NPS"
 msgid "Reading game file (%d)"
 msgstr "棋局檔案錯誤"
 
-#: gtk/xboard.c:844 xaw/xboard.c:1162
+#: gtk/xboard.c:867 xaw/xboard.c:1052
 #, c-format
 msgid "%s: can't cd to CHESSDIR: "
 msgstr ""
 
-#: gtk/xboard.c:853 xaw/xboard.c:1171
+#: gtk/xboard.c:876 xaw/xboard.c:1061
 #, c-format
 msgid "Failed to open file '%s'\n"
 msgstr ""
 
-#: gtk/xboard.c:868 xaw/xboard.c:1180
+#: gtk/xboard.c:891 xaw/xboard.c:1070
 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size"
 msgstr ""
 
-#: gtk/xboard.c:887 xaw/xboard.c:1212
+#: gtk/xboard.c:910 xaw/xboard.c:1102
 #, c-format
 msgid "%s: bad boardSize syntax %s\n"
 msgstr ""
 
-#: gtk/xboard.c:927 xaw/xboard.c:1249
+#: gtk/xboard.c:950 xaw/xboard.c:1139
 #, c-format
 msgid "%s: unrecognized boardSize name %s\n"
 msgstr ""
 
-#: gtk/xboard.c:968 xaw/xboard.c:1286
+#: gtk/xboard.c:991 xaw/xboard.c:1176
 #, c-format
 msgid "%s: too few colors available; trying monochrome mode\n"
 msgstr ""
 
-#: gtk/xboard.c:1258 xaw/xboard.c:1568
+#: gtk/xboard.c:1281 xaw/xboard.c:1458
 #, c-format
 msgid "Unable to create font set for %s.\n"
 msgstr ""
 
-#: gtk/xboard.c:1283 xaw/xboard.c:1591
+#: gtk/xboard.c:1306 xaw/xboard.c:1481
 #, c-format
 msgid "%s: no fonts match pattern %s\n"
 msgstr ""
 
-#: gtk/xboard.c:1722 xaw/xboard.c:2081
+#: gtk/xboard.c:1745 xaw/xboard.c:1971
 msgid "Can't open temp file"
 msgstr ""
 
-#: gtk/xboard.c:2174
+#: gtk/xboard.c:2199
 #, fuzzy
 msgid "Failed to open file"
 msgstr "呼叫cmail失敗"
@@ -2273,12 +2352,13 @@ msgid "New Game"
 msgstr "洗牌遊戲(u)..."
 
 #: menus.c:583
-msgid "New Shuffle Game ..."
+#, fuzzy
+msgid "New Shuffle Game..."
 msgstr "洗牌遊戲(u)..."
 
 #: menus.c:584
 #, fuzzy
-msgid "New Variant ..."
+msgid "New Variant..."
 msgstr "變種"
 
 #: menus.c:586
@@ -2547,19 +2627,22 @@ msgid "Adjudicate Draw"
 msgstr "提請仲裁(D)"
 
 #: menus.c:684
-msgid "Load New 1st Engine ..."
+msgid "Load New 1st Engine..."
 msgstr ""
 
 #: menus.c:685
-msgid "Load New 2nd Engine ..."
-msgstr ""
+#, fuzzy
+msgid "Load New 2nd Engine..."
+msgstr "通用引擎設定(E)...   Alt+Shift+U"
 
 #: menus.c:687
-msgid "Engine #1 Settings ..."
+#, fuzzy
+msgid "Engine #1 Settings..."
 msgstr "引擎 #1 設定"
 
 #: menus.c:688
-msgid "Engine #2 Settings ..."
+#, fuzzy
+msgid "Engine #2 Settings..."
 msgstr "引擎 #2 設定"
 
 #: menus.c:690
@@ -2580,46 +2663,51 @@ msgid "Retract Move"
 msgstr "悔棋(R)   Ctrl+X"
 
 #: menus.c:700
-msgid "General ..."
+#, fuzzy
+msgid "General..."
 msgstr "一般選項(G)..."
 
 #: menus.c:702
 #, fuzzy
-msgid "Time Control ..."
+msgid "Time Control..."
 msgstr "時間設定(T)...   Alt+Shift+T"
 
 #: menus.c:703
 #, fuzzy
-msgid "Common Engine ..."
+msgid "Common Engine..."
 msgstr "通用引擎設定(E)...   Alt+Shift+U"
 
 #: menus.c:704
 #, fuzzy
-msgid "Adjudications ..."
+msgid "Adjudications..."
 msgstr "判決(j)...   Alt+Shift+J"
 
 #: menus.c:705
-msgid "ICS ..."
-msgstr "ICS選項..."
+msgid "ICS..."
+msgstr ""
 
 #: menus.c:706
-msgid "Match ..."
+msgid "Tournament..."
 msgstr ""
 
 #: menus.c:707
-msgid "Load Game ..."
+#, fuzzy
+msgid "Load Game..."
 msgstr "載入棋局選項(L)...   Alt+Shift+L"
 
 #: menus.c:708
-msgid "Save Game ..."
+#, fuzzy
+msgid "Save Game..."
 msgstr "儲存棋局選項(S)...   Alt+Shift+S"
 
 #: menus.c:709
-msgid "Game List ..."
+#, fuzzy
+msgid "Game List..."
 msgstr "遊戲列表..."
 
 #: menus.c:710
-msgid "Sounds ..."
+#, fuzzy
+msgid "Sounds..."
 msgstr "聲音選項(D)..."
 
 #: menus.c:713
@@ -2692,21 +2780,22 @@ msgstr ""
 msgid "e-Mail Bug Report"
 msgstr ""
 
-#: nengineoutput.c:78 nengineoutput.c:85
+#: nengineoutput.c:78 nengineoutput.c:86
 #, fuzzy
 msgid "engine name"
 msgstr "引擎輸出"
 
-#: nengineoutput.c:80 nengineoutput.c:87
+#. TRANSLATORS: noun, as in "the move Nf3"
+#: nengineoutput.c:81 nengineoutput.c:89
 #, fuzzy
 msgid "move"
 msgstr "著法"
 
-#: nengineoutput.c:153
+#: nengineoutput.c:155
 msgid "Engine output"
 msgstr "引擎輸出"
 
-#: nengineoutput.c:157
+#: nengineoutput.c:159
 msgid ""
 "Mismatch of STRIDE in nengineoutput.c\n"
 "Change and recompile!"
@@ -2791,7 +2880,7 @@ msgstr ""
 
 #: usystem.c:230
 #, c-format
-msgid "%s: can't parse foreground color in `%s'\n"
+msgid "%s: can't parse foreground color in '%s'\n"
 msgstr ""
 
 #: usystem.c:259
@@ -2799,54 +2888,25 @@ msgstr ""
 msgid "%s: can't parse color names; disabling colorization\n"
 msgstr ""
 
-#: usystem.c:371
+#: usystem.c:374
 #, c-format
 msgid "ERROR: Unknown user %s (in path %s)\n"
 msgstr ""
 
-#: usystem.c:556
+#: usystem.c:557
 msgid "Socket support is not configured in"
 msgstr ""
 
-#: usystem.c:645
+#: usystem.c:646
 msgid "internal rcmd not implemented for Unix"
 msgstr ""
 
-#: xaw/xboard.c:478
-#, c-format
-msgid "%s: Can't access XPM directory %s\n"
-msgstr ""
-
-#: xaw/xboard.c:499
-#, c-format
-msgid "Available `%s' sizes:\n"
-msgstr ""
-
-#: xaw/xboard.c:532
-#, c-format
-msgid "Error: No `%s' files!\n"
-msgstr ""
-
-#: xaw/xboard.c:545
-#, c-format
-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 ""
-
-#: xaw/xboard.c:1292
+#: xaw/xboard.c:1182
 #, c-format
 msgid "white pixel = 0x%lx, black pixel = 0x%lx\n"
 msgstr ""
 
-#: xaw/xengineoutput.c:115
-#, c-format
-msgid "Error %d loading icon image\n"
-msgstr ""
-
-#: xaw/xoptions.c:321 xaw/xoptions.c:1023
+#: xaw/xoptions.c:321 xaw/xoptions.c:1025
 msgid "browse"
 msgstr ""
 
@@ -2862,13 +2922,15 @@ msgstr ""
 msgid "Shift"
 msgstr ""
 
-#: xaw/xoptions.c:1270
+#: xaw/xoptions.c:1272
 msgid "OK"
 msgstr "確定"
 
-#: xaw/xoptions.c:1274
-msgid "cancel"
-msgstr "取消(C)"
+#~ msgid "ICS ..."
+#~ msgstr "ICS選項..."
+
+#~ msgid "cancel"
+#~ msgstr "取消(C)"
 
 #~ msgid "New Game        Ctrl+N"
 #~ msgstr "開新棋局(N)   Ctrl+N"
diff --git a/sounds/roar.wav b/sounds/roar.wav
new file mode 100644 (file)
index 0000000..16b0af7
Binary files /dev/null and b/sounds/roar.wav differ
diff --git a/svg/BlackClaw.svg b/svg/BlackClaw.svg
new file mode 100644 (file)
index 0000000..1dcffea
--- /dev/null
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="100"
+   height="100"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="WhiteClaw.svg">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <inkscape:perspective
+       id="perspective2828"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2850"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2872"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2894"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2918"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2940"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2962"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="4.8704322"
+     inkscape:cx="26.42854"
+     inkscape:cy="46.467809"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1280"
+     inkscape:window-height="726"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-952.36218)">
+    <g
+       id="g3788"
+       style="fill:#000000">
+      <path
+         sodipodi:nodetypes="cccccccccccccccccccc"
+         id="path2816"
+         d="m 49.667863,1012.1206 2.166994,9.0012 -0.333383,6.3344 -2.333687,8.3346 -4.167298,4.5007 -5.167449,2.5004 -5.334142,0.3334 -6.334292,-3.3339 -3.500529,-4.8341 -1.000152,-7.5011 -2.166995,-4.334 -5.334141,-4.1672 -2.500379,-6.001 2.000304,-6.1675 5.000756,-3.1672 5.500834,-0.8335 6.500984,0.3334 7.667828,1.0002 5.834217,3.0004 3.50053,5.0008 z"
+         style="fill:#000000;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="cccccccccccc"
+         id="path2818"
+         d="m 39.626874,999.80011 -1.847886,-3.07981 0.821283,-5.95429 2.874488,-5.33834 5.338336,-3.07981 5.338334,0.61596 3.901092,3.49045 0,5.74898 -2.669167,5.13301 -4.517054,3.28514 -4.517053,1.0266 -4.722373,-1.84789 z"
+         style="fill:#000000;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="cccccccccccc"
+         id="path2818-3"
+         d="m 70.11698,997.5416 1.847886,3.0798 -0.821283,5.9543 -2.874488,5.3383 -5.338336,3.0798 -5.748975,-0.2053 -3.490451,-3.9011 0,-5.749 2.258526,-5.54356 4.927695,-2.87454 4.517053,-1.0266 4.722373,1.8479 z"
+         style="fill:#000000;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="cccccccccccc"
+         id="path2818-3-2"
+         d="m 33.569916,981.32129 1.847886,3.07984 -0.821283,5.9543 -2.874488,5.33826 -5.338336,3.0798 -5.748975,-0.2053 -3.490451,-3.9011 0,-5.74896 2.258526,-5.5436 4.927695,-2.87454 4.517053,-1.0266 4.722373,1.8479 z"
+         style="fill:#000000;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="cccccccccccc"
+         id="path2818-3-6"
+         d="m 72.375506,1019.9215 2.463848,4.5171 -0.410642,4.7223 -4.106412,4.9277 -5.133015,2.0532 -5.748975,-0.2053 -3.490451,-3.9011 0,-5.749 2.669167,-4.7223 4.722375,-2.4639 4.722373,-0.8213 4.311732,1.6426 z"
+         style="fill:#000000;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         id="path2908"
+         d="m 34.083217,975.98293 -2.053206,-0.61597 0.821282,-4.51705 2.463847,-2.66917 4.106412,-0.41064 2.053206,0.61596 -3.285129,0.82129 -2.258527,2.46384 -1.847885,4.31174 z"
+         style="fill:#000000;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         id="path2908-4"
+         d="m 56.216861,980.17756 -1.915052,-0.96315 1.593184,-4.30582 2.88991,-2.20078 4.115337,0.30866 1.915052,0.96314 -3.37784,0.2383 -2.652056,2.03423 -2.568537,3.92535 z"
+         style="fill:#000000;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         id="path2908-4-6"
+         d="m 73.878161,994.50275 0.963152,1.91506 4.30582,-1.59319 2.200779,-2.88991 -0.308659,-4.11533 -0.96314,-1.91506 -0.238295,3.37784 -2.03423,2.65206 -3.92535,2.56854 z"
+         style="fill:#000000;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         id="path2908-4-6-3"
+         d="m 77.705679,1018.2026 0.792583,1.9916 4.428292,-1.2118 2.444276,-2.6871 0.05119,-4.1266 -0.792563,-1.9917 -0.531791,3.3443 -2.257627,2.4646 -4.134281,2.2167 z"
+         style="fill:#000000;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+  </g>
+</svg>
diff --git a/svg/BlackDolphin.svg b/svg/BlackDolphin.svg
new file mode 100644 (file)
index 0000000..b24af4a
--- /dev/null
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="100"
+   height="100"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="WhiteDolphin.svg">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <inkscape:perspective
+       id="perspective2826"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2834"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="4.5167464"
+     inkscape:cx="49.318911"
+     inkscape:cy="45.354981"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1280"
+     inkscape:window-height="726"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-952.36218)">
+    <g
+       id="g3632">
+      <path
+         sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
+         id="path2832"
+         d="m 25.422502,1009.2837 3.64721,-5.9885 4.085169,-6.56537 5.708527,-7.19404 4.800386,-5.25188 5.245237,-4.27474 5.082411,-3.5041 1.946123,-0.99064 1.6641,-2.73841 0.962415,-3.52748 -0.632865,-2.14233 -0.672599,-2.98178 -0.538857,-1.55972 1.891848,-0.73376 2.890098,0.70676 3.063572,2.96828 1.833675,3.65165 1.576843,3.8397 0.376031,2.33037 5.103703,2.56023 5.548553,3.53738 3.967814,3.8262 4.264383,4.47761 3.345595,4.71602 2.184518,4.04622 2.111695,4.21583 1.08172,4.303 0.394076,2.7853 -0.774149,3.9553 -1.327296,3.8618 0.358095,6.9663 0.220603,4.9517 -2.02898,1.0799 -1.768755,-2.6475 -3.591278,-8.7269 -2.55102,-1.9435 -2.810742,-3.6758 -2.991865,-3.2423 -0.142145,2.7315 c -1.121073,2.1006 -0.689228,2.1788 -1.581243,2.8704 l -2.69519,1.7911 -2.936977,0.2938 -3.51896,-1.444 2.889234,-3.0578 1.147291,-2.2168 0.26874,-3.0564 -1.420295,-3.2124 -5.299117,-2.2551 -6.091307,-0.9685 -7.726322,-0.423 -6.525511,1.0865 -5.838372,2.972 -5.798638,3.8114 -4.543551,5.0637 -4.138435,5.2015 5.420085,1.0098 4.07875,2.9434 3.376311,4.809 -1.331302,3.3423 -5.333223,-3.9007 -5.221783,-1.6086 -4.260732,0.3486 0.558749,-4.1561 -5.121869,4.8579 -3.891237,0.4048 -4.328943,0.8646 -5.5362864,2.5972 -0.4024811,-1.0225 2.2487192,-3.6566 4.5144665,-3.314 4.7424668,-2.0465 4.062579,-1.1241 3.564969,-4.871 3.145565,-5.7562 z"
+         style="fill:#000000;stroke:#000000;stroke-width:2.13330363999999983;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path2834"
+         d="m 73.483788,1000.6302 -4.875955,-0.5555 -3.848618,-1.30775 -4.184918,-2.79866 -3.765255,-3.75745 -3.088762,-4.90406 6.521615,3.04205 3.566594,-0.43998 3.552051,0.65635"
+         style="fill:none;stroke:#ffffff;stroke-width:2.13330363999999983;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path2842"
+         d="m 83.218266,1002.246 1.146534,1.7662"
+         style="fill:none;stroke:#ffffff;stroke-width:2.13330363999999983;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path2844"
+         d="m 58.132709,974.47627 2.933349,-0.28601 3.031842,-0.0454 3.111499,0.26395"
+         style="fill:none;stroke:#ffffff;stroke-width:2.13330363999999983;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="cc"
+         id="path2860"
+         d="m 73.834376,1008.1422 4.251769,3.5005"
+         style="fill:none;stroke:#ffffff;stroke-width:2.13330363999999983;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+  </g>
+</svg>
diff --git a/svg/BlackHCrown.svg b/svg/BlackHCrown.svg
new file mode 100644 (file)
index 0000000..6c28d67
--- /dev/null
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.0"
+   width="100"
+   height="100"
+   id="svg2833"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="BlackPrincess.svg">
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="640"
+     inkscape:window-height="487"
+     id="namedview19"
+     showgrid="false"
+     inkscape:zoom="2.36"
+     inkscape:cx="50"
+     inkscape:cy="50"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2833" />
+  <defs
+     id="defs2835">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 50 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="100 : 50 : 1"
+       inkscape:persp3d-origin="50 : 33.333333 : 1"
+       id="perspective21" />
+  </defs>
+  <metadata
+     id="metadata2838">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="matrix(0,1,-1,0,153.07625,-67.67229)"
+     id="layer1">
+    <g
+       transform="matrix(1.2596048,0,0,1.2596048,289.23085,230.95079)"
+       id="g785"
+       style="display:inline">
+      <path
+         d="m -156.47216,-94.874455 -4.26455,-25.678565 13.9998,24.343464"
+         inkscape:connector-curvature="0"
+         id="path759"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.58779967;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <path
+         d="m -147.53286,-95.88723 2.24615,-30.00621 9.5955,27.886232 z"
+         inkscape:connector-curvature="0"
+         id="path761"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.58779967;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <path
+         d="m -115.90261,-94.82073 3.71313,-24.84222 -13.39901,23.408891"
+         inkscape:connector-curvature="0"
+         id="path763"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.58779967;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <path
+         d="m -124.90445,-95.734359 -2.37837,-29.892061 -8.86156,28.106514 z"
+         inkscape:connector-curvature="0"
+         id="path765"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.58779967;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <path
+         d="m -119.72211,-75.003615 c 0,2.494743 -7.32288,4.517114 -16.3561,4.517114 -9.03322,0 -16.3561,-2.022371 -16.3561,-4.517114 l 2.32529,-6.475256 -0.0643,-6.631027 -5.81139,-6.453037 4.35812,-3.075207 4.1094,1.001045 5.74678,-2.877825 5.77127,1.347215 5.20349,-1.347215 5.2463,2.877825 4.86129,-1.001045 4.29553,3.075207 -5.81005,6.453037 0.0603,6.631027 z"
+         inkscape:connector-curvature="0"
+         id="path767"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.58779979;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <path
+         d="m -148.95013,-88.785387 c 2.99191,-1.065977 7.67325,-1.752122 12.93486,-1.752122 4.87905,0 9.25913,0.589996 12.25587,1.525744"
+         inkscape:connector-curvature="0"
+         id="path769"
+         style="color:#000000;fill:none;stroke:#ffffcc;stroke-width:1.58779979;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <path
+         d="m -35.496787,129.14731 a 3.776254,3.776254 0 1 1 -7.552508,0 3.776254,3.776254 0 1 1 7.552508,0 z"
+         transform="matrix(0.94504751,0,0,0.94166667,-124.72108,-244.63895)"
+         id="path771"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.68314004;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <path
+         d="m -35.496787,129.14731 a 3.776254,3.776254 0 1 1 -7.552508,0 3.776254,3.776254 0 1 1 7.552508,0 z"
+         transform="matrix(0.94504751,0,0,0.94166667,-73.5917,-244.56074)"
+         id="path773"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.68314004;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <path
+         d="m -35.496787,129.14731 a 3.776254,3.776254 0 1 1 -7.552508,0 3.776254,3.776254 0 1 1 7.552508,0 z"
+         transform="matrix(0.94504751,0,0,0.94166667,-89.629862,-250.59195)"
+         id="path775"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.68314004;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <path
+         d="m -35.496787,129.14731 a 3.776254,3.776254 0 1 1 -7.552508,0 3.776254,3.776254 0 1 1 7.552508,0 z"
+         transform="matrix(0.94504751,0,0,0.94166667,-108.61241,-250.61038)"
+         id="path777"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.68314004;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <path
+         d="m -147.82599,-82.093587 c 2.97713,-0.857995 7.16803,-1.392212 11.81072,-1.392212 4.27282,0 8.16296,0.452487 11.07644,1.19342"
+         inkscape:connector-curvature="0"
+         id="path781"
+         style="color:#000000;fill:none;stroke:#ffffcc;stroke-width:1.58779979;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <path
+         d="m -149.85434,-77.004684 a 1.007001,0.53496927 0 1 1 -2.014,0 1.007001,0.53496927 0 1 1 2.014,0 z"
+         transform="matrix(1,0,0,0.95588235,-0.03933598,-3.491672)"
+         id="path783"
+         style="color:#000000;fill:#ffffcc;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    </g>
+  </g>
+</svg>
diff --git a/svg/BlackHSword.svg b/svg/BlackHSword.svg
new file mode 100644 (file)
index 0000000..abb38d1
--- /dev/null
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="100"
+   height="100"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="BlackHSword.svg">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <inkscape:perspective
+       id="perspective2824"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2838"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6"
+     inkscape:cx="54.904244"
+     inkscape:cy="34.708552"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="792"
+     inkscape:window-height="655"
+     inkscape:window-x="62"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(366.71429,-981.93367)">
+    <g
+       id="g3599"
+       transform="matrix(1,0,0,1.1286567,0,-136.71042)">
+      <path
+         sodipodi:nodetypes="cccccc"
+         id="path3687"
+         d="m -270.42482,1041.7792 -10.32341,-9.3014 -54.35055,-0.1786 0,18.9597 53.89325,0 10.78071,-9.4797 z"
+         style="fill:#000000;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         transform="matrix(0,1,-1,0,0,0)"
+         y="335.26187"
+         x="1021.9576"
+         height="7.3214288"
+         width="39.642857"
+         id="rect3689"
+         style="fill:#000000;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         transform="matrix(0,1,-1,0,0,0)"
+         y="342.71426"
+         x="1036.7313"
+         height="19.202518"
+         width="9.0239458"
+         id="rect3693"
+         style="fill:#000000;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3701"
+         d="m -282.35544,1041.779 -52.24134,0"
+         style="fill:#ffffff;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3777"
+         d="m -343.5,1037.2908 0,7.8572"
+         style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3781"
+         d="m -334.21429,1033.1837 0,17.3214"
+         style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+  </g>
+</svg>
diff --git a/svg/BlackLeopard.svg b/svg/BlackLeopard.svg
new file mode 100644 (file)
index 0000000..91bb34e
--- /dev/null
@@ -0,0 +1,168 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="100"
+   height="100"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="BlackKnight.svg">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <inkscape:perspective
+       id="perspective2824"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2838"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6"
+     inkscape:cx="41.498447"
+     inkscape:cy="44.13901"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="792"
+     inkscape:window-height="655"
+     inkscape:window-x="62"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(366.71429,-981.93367)">
+    <g
+       id="g3645">
+      <path
+         sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccccccccccccccc"
+         id="path2844"
+         d="m -317.73295,1002.1086 10.04546,1.3788 7.87879,3.7424 1.57575,-3.7424 3.34849,-3.54549 3.15151,-1.18182 4.92424,-0.39393 2.36364,2.75754 0.39394,4.5304 -1.57576,3.7424 -1.57575,2.7575 -3.15152,1.1818 1.37879,2.9546 -0.98485,2.7576 -1.18182,1.3788 1.37879,5.909 0.5909,4.5303 -0.39393,5.3182 -1.57576,4.9242 -2.95454,5.5153 -3.9394,3.5453 -3.34848,0.197 -3.54545,2.1667 -0.98485,4.9243 -1.37879,6.6969 -3.74242,3.9394 -4.13636,1.5758 -4.33334,-0.197 -5.12121,-3.1515 -2.36364,-2.5606 0.39394,-2.9545 -1.77273,-3.5455 -1.77272,-4.1364 -0.78788,-2.3636 -4.13637,-3.9394 -4.33333,-2.7576 -4.13636,-5.909 0,-7.288 0.78788,-5.909 1.37879,-5.1212 -2.56061,-3.1516 -0.19697,-5.3181 -2.36363,-3.1516 -0.98485,-4.1363 1.57575,-4.92427 1.9697,-2.75757 1.77273,0.59091 2.95454,2.75758 3.15152,3.74245 0.98484,2.3636 2.56062,0.5909 4.13635,-2.7576 5.71213,-1.1818 4.92423,-0.3939 z"
+         style="fill:#000000;stroke:#000000;stroke-width:1.72730827;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         id="path2846"
+         d="m -301.7784,1022.9874 -5.75487,0.2656 -1.33604,0.7452 -4.51354,4.35 3.61418,-1.7986 4.00813,0.4627 2.09794,-0.8734 0.70238,-2.7576 1.18182,-0.3939 z"
+         style="fill:#ffffff;stroke:#ffffff;stroke-width:1.72730827;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="ccccccccccc"
+         id="path2848"
+         d="m -334.8693,1022.5934 5.71212,0.4627 2.40638,1.1818 1.92695,2.8858 -2.6461,0.085 -2.67208,0.042 -1.74673,-0.8994 -0.89937,-1.3529 -0.30845,-1.8154 1.43076,0.1543 -3.20348,-0.7452 z"
+         style="fill:#ffffff;stroke:#ffffff;stroke-width:1.72730827;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="cccccccccc"
+         id="path2850"
+         d="m -318.56357,1039.6016 3.23701,-1.0276 1.42154,0.9421 -1.37879,3.2538 -1.85822,2.3636 -2.08118,0.042 -2.18343,-2.2949 -1.53301,-3.3484 1.02759,-1.0276 3.34849,1.0963 z"
+         style="fill:#ffffff;stroke:#ffffff;stroke-width:1.72730827;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="ccccc"
+         id="path2854"
+         d="m -308.14094,1049.0989 -3.31497,9.2333 -1.79871,-9.7387 5.11368,1.1227 0,-0.6173 z"
+         style="fill:#ffffff;stroke:#000000;stroke-width:1.72730826999999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;fill-opacity:1" />
+      <path
+         sodipodi:nodetypes="ccccc"
+         id="path2856"
+         d="m -321.31192,1048.8758 -2.30413,8.7967 -1.91018,-2.9897 -0.7024,-4.4022 4.91671,-1.4048 z"
+         style="fill:#ffffff;stroke:#000000;stroke-width:1.72730826999999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;fill-opacity:1" />
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         id="path2858"
+         d="m -311.44668,1062.6898 c 1.06226,-0.731 1.71366,-1.5642 1.79872,-2.3469 l 0.92535,-4.4709 c -1.03934,0.8994 -1.92444,1.953 -2.96377,2.8524 l -1.20782,0.5054 c -0.78907,-0.7043 -2.74549,-0.6155 -2.06441,-1.6873 l -0.47943,3.1348 1.44752,2.2354 2.54384,-0.2229 z"
+         style="fill:#ffffff;stroke:#000000;stroke-width:1.72730826999999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;fill-opacity:1" />
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         id="path2860"
+         d="m -318.77729,1057.2768 -2.10717,1.559 -0.78788,0 -2.43236,-1.756 -0.0688,3.0921 1.86745,2.3041 2.36364,0.6336 1.71322,-1.9268 -0.54816,-3.906 z"
+         style="fill:#ffffff;stroke:#000000;stroke-width:1.72730826999999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;fill-opacity:1" />
+      <path
+         sodipodi:nodetypes="cccccccccc"
+         id="path2862"
+         d="m -296.85416,1009.0025 1.42154,-3.9989 3.27974,-3.4004 4.40207,-0.069 0.9421,2.9379 -1.05358,3.5881 -1.22455,2.2095 -2.64611,0.8993 -3.34848,-0.197 -1.77273,-1.9697 z"
+         style="fill:#ffffff;stroke:#ffffff;stroke-width:1.72730827;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="cccccccccc"
+         id="path2864"
+         d="m -342.74809,1000.3359 2.99729,2.672 1.77273,2.4232 0.54816,3.5714 -2.75758,1.5758 -2.40638,-1.6445 -2.05519,-3.2797 0,-2.3805 1.07034,-2.6293 0.83063,-0.3084 z"
+         style="fill:#ffffff;stroke:#ffffff;stroke-width:1.72730827;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path2866"
+         d="m -305.91476,1036.1843 12.40909,-9.2576 10.04545,-6.303 5.71212,-4.5303"
+         style="fill:none;stroke:#ffffff;stroke-width:1.72730827;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path2868"
+         d="m -305.71779,1038.9419 12.21212,-3.5455 8.66667,-0.9848 9.06059,0 2.16668,0.5909"
+         style="fill:none;stroke:#ffffff;stroke-width:1.72730827;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path2870"
+         d="m -304.92991,1042.4874 8.86363,-2.3637 8.86364,-0.7879 5.90908,0.5909 8.66667,1.7728"
+         style="fill:none;stroke:#ffffff;stroke-width:1.72730827;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path2872"
+         d="m -305.91476,1044.851 8.66666,0.5909 7.28788,3.3485"
+         style="fill:none;stroke:#ffffff;stroke-width:1.72730827;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path2874"
+         d="m -331.71779,1037.7601 -8.86364,-4.3333 -6.69696,-2.5607 -7.48485,-1.1818 -8.66667,-0.3939"
+         style="fill:none;stroke:#ffffff;stroke-width:1.72730827;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path2876"
+         d="m -332.11173,1040.9116 -12.01515,-1.7727 -7.87879,0.1969 -10.63636,3.3486 -7.87879,3.7424"
+         style="fill:none;stroke:#ffffff;stroke-width:1.72730827;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path2878"
+         d="m -332.3087,1044.0631 -6.30302,0.7879 -8.66667,3.1515 -7.48485,3.9394 c 0,0 -3.74243,3.3485 -4.53031,3.1515"
+         style="fill:none;stroke:#ffffff;stroke-width:1.72730827;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path2880"
+         d="m -328.17234,1046.4268 -5.71211,2.3636 -5.9091,3.5455 -4.13636,3.9394"
+         style="fill:none;stroke:#ffffff;stroke-width:1.72730827;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="ccccccccccccccccccccc"
+         id="path2852"
+         d="m -314.81361,1048.439 3.60519,0.8186 3.12699,-0.01 c 0.63924,-0.4931 1.12426,-0.1508 1.45505,-0.5481 l -1.25973,6.442 -0.0979,2.9254 -0.74514,3.3592 -2.24894,2.0504 -3.73913,0.2153 -4.55952,0.2636 -3.09631,-0.4736 -1.56653,-1.8231 -1.18941,-2.3543 -1.37714,-4.4627 -1.85392,-4.9183 1.96047,0.2397 4.5303,-1.3787 4.33334,-0.4275 -0.46267,0 3.18503,0.076 0,0.01 z"
+         style="fill:none;stroke:#ffffff;stroke-width:1.72730826999999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+  </g>
+</svg>
diff --git a/svg/BlackLion.svg b/svg/BlackLion.svg
new file mode 100644 (file)
index 0000000..1ed2cd8
--- /dev/null
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="100"
+   height="100"
+   id="svg3738"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="BlackQueen.svg">
+  <defs
+     id="defs3740">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective3746" />
+    <inkscape:perspective
+       id="perspective3800"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.3532769"
+     inkscape:cx="40.467173"
+     inkscape:cy="50.142845"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="716"
+     inkscape:window-height="487"
+     inkscape:window-x="3"
+     inkscape:window-y="71"
+     inkscape:window-maximized="0"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <sodipodi:guide
+       position="0.17142614,0.85712"
+       orientation="0,744.09448"
+       id="guide4498" />
+    <sodipodi:guide
+       position="744.26591,0.85712"
+       orientation="-1052.3622,0"
+       id="guide4500" />
+    <sodipodi:guide
+       position="744.26591,1053.2193"
+       orientation="0,-744.09448"
+       id="guide4502" />
+    <sodipodi:guide
+       position="0.17142614,1053.2193"
+       orientation="1052.3622,0"
+       id="guide4504" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3743">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0.17142614,-953.2193)">
+    <g
+       id="g4569"
+       transform="matrix(0.97053726,0,0,0.97053726,1.9949493,30.030726)">
+      <path
+         id="path3888"
+         d="m 18.200002,987.30504 2.742858,-6.85715 -1.828571,-4.11428 5.942856,-8.22857 9.142858,-6.4 12.342857,-0.45715 2.285714,-7.31428 7.771429,0 7.314286,4.11428 10.971427,1.82858 -1.371427,5.94285 11.885713,3.2 -1.371428,4.57143 6.857142,6.85714 -2.285713,2.28572 7.314286,10.97143 -2.742858,2.74285 4.571429,10.05711 -0.457144,6.4 0,11.4286 -6.4,-8.2286 0.457144,16.9143 -2.285715,3.2 -6.4,-5.9428 0,9.1428 -5.028571,3.6572 0.914286,-10.0572 -7.314286,12.3429 -4.114285,-5.0286 -4.571429,10.5143 -10.514286,1.3714 -10.057143,-1.3714 -8.685715,-6.8571 -4.571427,-2.2858 -10.971429,6.8572 -0.457144,-12.8 -2.285713,-7.7714 -3.2,2.7428 -5.0285719,-4.1143 0.9142856,-9.1428 -2.2857142,-4.1143 0.9142858,-5.4857 -5.0285716,-3.6572 1.3714287,-3.6571 15.5428566,-13.25716 z"
+         style="fill:#000000;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="ccccccc"
+         id="path3890"
+         d="m 36.94286,989.59075 -8.685715,-1.82857 3.657144,1.37143 -5.485715,4.57143 5.485715,-2.74286 3.857141,0.2 1.17143,-1.57143 z"
+         style="fill:#000000;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3892"
+         d="m 59.34286,988.21932 0,-6.4 -0.457144,-7.77143 -1.828571,-5.02857 -3.2,-2.28571 -6.857143,0.91428 -3.657142,4.11429 -1.828571,3.65714"
+         style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3894"
+         d="m 54.771431,984.10504 -0.914286,-4.57143 -2.742856,-3.65714 -3.2,0 -1.828573,4.11428 0,0 0.914286,0.45714 -0.914286,-0.45714"
+         style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3896"
+         d="m 12.714289,1003.7622 0,0 z"
+         style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="cc"
+         id="path3898"
+         d="M 11.471431,1004.3764 0.82857386,1002.8479"
+         style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3900"
+         d="m 6.3142883,1010.1622 2.2857142,-2.7429 2.2857135,-0.4571 0.457144,-2.7429 0,0"
+         style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="ccccccc"
+         id="path3902"
+         d="m 8.9220373,1018.1269 2.8308047,3.1321 5.565079,0.2674 6.824939,1.4358 5.028571,0.4571 0.457143,0 0,0.4572"
+         style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3904"
+         d="m 43.34286,1003.305 -0.457144,8.6858 -3.657142,6.4 -0.914285,7.3142 -5.485715,6.4 -4.114285,6.8572"
+         style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3906"
+         d="m 72.600003,997.36218 -3.200001,13.71432 -5.942857,10.9714 -6.857142,8.6857 -5.028572,13.7143"
+         style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="cccccc"
+         id="path3908"
+         d="m 66.557145,1040.7193 -0.357143,-7.2428 4.114287,-9.1429 4.571427,-10.0571 2.285715,-10.9715 -0.457142,-7.31425"
+         style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3910"
+         d="m 80.371431,996.44789 0,7.31431 0,5.4857 0.914285,7.7714 -4.571427,6.8572 -2.742858,5.4857 -1.371428,6.4"
+         style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="ccccc"
+         id="path3912"
+         d="m 72.14286,976.79075 6.857143,7.31429 8.228571,5.94285 -0.1,20.97141 3.185714,4.0572"
+         style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3914"
+         d="m 72.14286,971.30504 7.771429,0.91428 5.028571,2.74286 0,0"
+         style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="ccc"
+         id="path3916"
+         d="m 19.114289,986.99075 11.885713,-8.37143 4.571429,-2.74285"
+         style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path4508"
+         d="m 14.471431,1011.0764 c 8.571429,-1.7857 8.214286,-1.7857 8.214286,-1.7857"
+         style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path4510"
+         d="m 15.185717,1013.9336 c 11.785714,-0.3572 11.785714,-0.3572 11.785714,-0.3572"
+         style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path4512"
+         d="m 15.542859,1016.4336 c 11.071429,4.2857 11.071429,4.2857 11.071429,4.2857"
+         style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+  </g>
+</svg>
diff --git a/svg/BlackPromoBishop.svg b/svg/BlackPromoBishop.svg
new file mode 100644 (file)
index 0000000..df5dc67
--- /dev/null
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.0"
+   width="100"
+   height="100"
+   id="svg2833"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="BlackPromoBishop.svg">
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="640"
+     inkscape:window-height="487"
+     id="namedview15"
+     showgrid="false"
+     inkscape:zoom="2.36"
+     inkscape:cx="50"
+     inkscape:cy="115.63849"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2833" />
+  <defs
+     id="defs2835">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 50 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="100 : 50 : 1"
+       inkscape:persp3d-origin="50 : 33.333333 : 1"
+       id="perspective17" />
+  </defs>
+  <metadata
+     id="metadata2838">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="g2861">
+    <path
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path457"
+       d="m 55.21546,11.229857 a 5.2154485,5.2270692 0 0 1 -10.430897,0 5.2154485,5.2270692 0 1 1 10.430897,0 z" />
+    <path
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path459"
+       inkscape:connector-curvature="0"
+       d="M 35.907425,58.203367 C 33.709813,55.600983 27.938004,54.20094 27.834509,41.315188 27.742075,29.80588 42.868715,17.773397 50.193329,17.67821 57.523654,17.583 72.14423,29.820628 72.165806,41.315188 c 0.02622,13.95243 -5.611021,14.852859 -7.714863,16.888179 z" />
+    <path
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path461"
+       inkscape:connector-curvature="0"
+       d="m 69.315766,70.339665 c 0,2.158388 -8.648281,3.908094 -19.316459,3.908094 -10.66819,0 -19.316471,-1.749706 -19.316471,-3.908094 0.06829,-1.450802 2.759449,-10.112943 6.706186,-11.445443 6.931028,-2.340042 18.489497,-2.613508 25.675173,0 3.857302,1.402945 6.319871,10.132812 6.251571,11.445443 z" />
+    <path
+       style="color:#000000;fill:none;stroke:#ffffcc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path463"
+       inkscape:connector-curvature="0"
+       d="m 35.131354,67.737307 c 3.543362,-0.857773 8.870992,-1.403431 14.828539,-1.403431 6.002673,0 11.365849,0.553958 14.908744,1.422973" />
+    <path
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path469"
+       inkscape:connector-curvature="0"
+       d="m 9.7679649,84.066302 4.5239711,4.933705 c 2.082446,-1.380292 4.155818,-1.648242 6.836257,-1.648242 l 18.646284,0 c 3.294244,0 7.957334,-4.086424 10.338673,-5.67977 2.349142,1.682334 6.958135,5.67977 10.338673,5.67977 l 19.545817,0 c 2.265965,0 3.637121,0.21467 5.800123,1.648242 L 90.232026,84.16401 C 87.999867,82.458628 79.024912,80.473962 75.08046,80.634393 71.136008,80.794824 63.39618,81.896777 59.919196,80.772564 56.442212,79.648351 53.249061,77.010455 51.83357,75.578552 l -3.610572,0.09771 c -1.763613,1.563783 -4.048493,4.144826 -8.518834,5.096303 -4.470341,0.951476 -10.447841,-0.113862 -14.34174,-0.138171 -3.893912,-0.02443 -12.98049,0.959632 -15.5944591,3.431909 z" />
+    <path
+       style="color:#000000;fill:none;stroke:#ffffcc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path491"
+       inkscape:connector-curvature="0"
+       d="m 37.811507,58.504451 c 3.543376,-0.857773 6.021822,-1.403431 11.979356,-1.403431 6.002673,0 8.854713,0.456249 12.397621,1.325264" />
+  </g>
+</svg>
diff --git a/svg/BlackPromoDragon.svg b/svg/BlackPromoDragon.svg
new file mode 100644 (file)
index 0000000..e483ebd
--- /dev/null
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.0"
+   width="100"
+   height="100"
+   id="svg2833"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="BlackCrownedRook.svg">
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="640"
+     inkscape:window-height="487"
+     id="namedview14"
+     showgrid="false"
+     inkscape:zoom="2.36"
+     inkscape:cx="50"
+     inkscape:cy="50"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2833" />
+  <defs
+     id="defs2835">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 50 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="100 : 50 : 1"
+       inkscape:persp3d-origin="50 : 33.333333 : 1"
+       id="perspective16" />
+  </defs>
+  <metadata
+     id="metadata2838">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="g2837">
+    <path
+       style="color:#000000;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path1402"
+       inkscape:connector-curvature="0"
+       d="m 19.988303,23.445622 0,14.198833 8.215969,6.314278 0,24.361717 -6.811166,6.394709 0,8.26495 -6.811165,0 0,6.019891 70.836118,0 0,-6.019891 -6.811161,0 0,-9.423938 -6.811171,-6.3545 0,-23.283156 8.173399,-6.27406 0,-14.198833 -4.917138,0 L 50.144989,10.953295 24.599353,23.445622 z" />
+    <rect
+       style="color:#000000;fill:#ffffcc;fill-opacity:1;stroke:#ffffcc;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect1406"
+       y="35.693176"
+       x="23.309896"
+       height="1.2846808"
+       width="53.148762" />
+    <rect
+       style="color:#000000;fill:#ffffcc;fill-opacity:1;stroke:#ffffcc;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect1408"
+       y="42.138672"
+       x="30.139942"
+       height="1.2846808"
+       width="39.488659" />
+    <rect
+       style="color:#000000;fill:#ffffcc;fill-opacity:1;stroke:#ffffcc;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect1410"
+       y="66.474022"
+       x="30.106775"
+       height="1.2846808"
+       width="39.554974" />
+    <rect
+       style="color:#000000;fill:#ffffcc;fill-opacity:1;stroke:#ffffcc;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect1412"
+       y="81.930573"
+       x="23.309896"
+       height="1.2846808"
+       width="53.148762" />
+    <rect
+       style="color:#000000;fill:#ffffcc;fill-opacity:1;stroke:#ffffcc;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect1414"
+       y="72.905128"
+       x="24.669277"
+       height="1.2846808"
+       width="50.430004" />
+    <path
+       sodipodi:nodetypes="ccccc"
+       style="color:#000000;fill:none;stroke:#ffffcc;stroke-width:2;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path1482"
+       inkscape:connector-curvature="0"
+       d="m 30.88249,22.205315 4.08547,0 6.778405,0 16.328359,0 10.97547,0" />
+  </g>
+</svg>
diff --git a/svg/BlackPromoHSword.svg b/svg/BlackPromoHSword.svg
new file mode 100644 (file)
index 0000000..a506ead
--- /dev/null
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="100"
+   height="100"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="BlackHSword.svg">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <inkscape:perspective
+       id="perspective2824"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2838"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6"
+     inkscape:cx="54.904244"
+     inkscape:cy="34.708552"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="792"
+     inkscape:window-height="655"
+     inkscape:window-x="62"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(366.71429,-981.93367)">
+    <g
+       id="g2827">
+      <path
+         sodipodi:nodetypes="cccccc"
+         id="path3687"
+         d="m -270.42482,1039.1007 -10.32341,-10.4981 -54.35055,-0.2016 0,21.399 53.89325,0 10.78071,-10.6993 z"
+         style="fill:#000000;stroke:#000000;stroke-width:2.12476516;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         transform="matrix(0,1,-1,0,0,0)"
+         y="335.26187"
+         x="1016.7288"
+         height="7.3214288"
+         width="44.743176"
+         id="rect3689"
+         style="fill:#000000;stroke:#000000;stroke-width:2.12476516;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         transform="matrix(0,1,-1,0,0,0)"
+         y="342.71426"
+         x="1033.4033"
+         height="19.202518"
+         width="10.184937"
+         id="rect3693"
+         style="fill:#000000;stroke:#000000;stroke-width:2.12476516;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3777"
+         d="m -343.5,1034.0348 0,8.8681"
+         style="fill:none;stroke:#ffffff;stroke-width:2.12476516;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3781"
+         d="m -334.21429,1029.3993 0,19.5499"
+         style="fill:none;stroke:#ffffff;stroke-width:2.12476516;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+  </g>
+</svg>
diff --git a/svg/BlackPromoHorse.svg b/svg/BlackPromoHorse.svg
new file mode 100644 (file)
index 0000000..9ddda1d
--- /dev/null
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.0"
+   width="100"
+   height="100"
+   id="svg2833"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="BlackCrownedBishop.svg">
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="640"
+     inkscape:window-height="487"
+     id="namedview14"
+     showgrid="false"
+     inkscape:zoom="2.36"
+     inkscape:cx="50"
+     inkscape:cy="50"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2833" />
+  <defs
+     id="defs2835">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 50 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="100 : 50 : 1"
+       inkscape:persp3d-origin="50 : 33.333333 : 1"
+       id="perspective16" />
+  </defs>
+  <metadata
+     id="metadata2838">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="g2837">
+    <path
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path900"
+       inkscape:connector-curvature="0"
+       d="M 36.30595,59.417265 24.376483,48.033607 C 20.139397,43.990392 12.237729,46.016232 12.268826,40.407532 12.311717,32.670013 34.907175,27.788378 44.547031,18.103208 l 11.078999,0 c 10.065834,10.160662 32.354717,13.792369 32.370902,22.304324 0.01009,5.621984 -8.151701,3.891832 -12.055165,7.626075 L 64.042286,59.417265 z" />
+    <path
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path902"
+       inkscape:connector-curvature="0"
+       d="m 68.769536,71.07519 c 0,2.073311 -8.403716,3.754049 -18.770208,3.754049 -10.366505,0 -18.770221,-1.680738 -18.770221,-3.754049 0.06636,-1.393616 2.681415,-9.714324 6.516542,-10.994302 6.735026,-2.247804 17.966632,-2.510491 24.949104,0 3.748221,1.347646 6.141152,9.733411 6.074783,10.994302 z" />
+    <path
+       style="color:#000000;fill:none;stroke:#ffffcc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path904"
+       inkscape:connector-curvature="0"
+       d="m 35.551825,68.575408 c 3.44316,-0.823963 8.62013,-1.348112 14.409203,-1.348112 5.832924,0 11.044434,0.532122 14.48714,1.366884" />
+    <path
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path910"
+       inkscape:connector-curvature="0"
+       d="m 10.905688,84.260767 4.396038,4.739234 c 2.023556,-1.325884 4.038295,-1.583273 6.642934,-1.583273 l 18.118985,0 c 3.201087,0 7.732309,-3.925351 10.046306,-5.455892 2.282711,1.616022 6.761365,5.455892 10.046305,5.455892 l 18.993081,0 c 2.201886,0 3.534267,0.206209 5.636101,1.583273 l 4.308867,-4.645377 C 86.925269,82.716462 78.204117,80.810025 74.37121,80.964133 70.538303,81.11824 63.01735,82.176758 59.638692,81.096858 56.260033,80.016957 53.157182,77.483039 51.781719,76.107577 l -3.508468,0.09386 c -1.71374,1.502144 -3.934006,3.981451 -8.27793,4.895424 -4.343924,0.913972 -10.152387,-0.109374 -13.93617,-0.132725 -3.783796,-0.02347 -12.613414,0.921806 -15.153463,3.296634 z" />
+    <path
+       style="color:#000000;fill:none;stroke:#ffffcc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path912"
+       inkscape:connector-curvature="0"
+       d="m 38.156186,59.706481 c 3.443173,-0.823963 5.851531,-1.348112 11.640592,-1.348112 5.832923,0 8.60431,0.438265 12.047028,1.273026" />
+  </g>
+</svg>
diff --git a/svg/BlackPromoRook.svg b/svg/BlackPromoRook.svg
new file mode 100644 (file)
index 0000000..03a5919
--- /dev/null
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.0"
+   width="100"
+   height="100"
+   id="svg2833"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="BlackRook.svg">
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="783"
+     inkscape:window-height="647"
+     id="namedview13"
+     showgrid="false"
+     inkscape:zoom="2.36"
+     inkscape:cx="50"
+     inkscape:cy="50"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2833" />
+  <defs
+     id="defs2835">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 50 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="100 : 50 : 1"
+       inkscape:persp3d-origin="50 : 33.333333 : 1"
+       id="perspective15" />
+  </defs>
+  <metadata
+     id="metadata2838">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="g2833">
+    <path
+       sodipodi:nodetypes="ccccccccccccccccc"
+       d="m 19.830741,11.000003 1e-6,13.68421 8.259102,6.713817 0,34.381577 -6.846924,6.79933 0,9.57895 -6.846923,0 0,6.84211 71.208007,0 0,-6.84211 -6.84693,0 0,-9.57895 -6.84692,-6.75657 0,-34.467101 8.21631,-6.671053 0,-13.68421 -60.295723,0 z"
+       inkscape:connector-curvature="0"
+       id="path1039"
+       style="color:#000000;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.99999988;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    <rect
+       style="color:#000000;fill:#ffffcc;fill-opacity:1;stroke:#ffffcc;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect1074"
+       y="22.911417"
+       x="22.061972"
+       height="1.4222356"
+       width="55.633793" />
+    <rect
+       style="color:#000000;fill:#ffffcc;fill-opacity:1;stroke:#ffffcc;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect1076"
+       y="30.047054"
+       x="29.211357"
+       height="1.4222356"
+       width="41.334999" />
+    <rect
+       style="color:#000000;fill:#ffffcc;fill-opacity:1;stroke:#ffffcc;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect1078"
+       y="65.668564"
+       x="29.176641"
+       height="1.4222356"
+       width="41.404411" />
+    <rect
+       style="color:#000000;fill:#ffffcc;fill-opacity:1;stroke:#ffffcc;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect1080"
+       y="82.780083"
+       x="22.061972"
+       height="1.4222356"
+       width="55.633793" />
+    <rect
+       style="color:#000000;fill:#ffffcc;fill-opacity:1;stroke:#ffffcc;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect1082"
+       y="72.788261"
+       x="23.484905"
+       height="1.4222356"
+       width="52.787918" />
+  </g>
+</svg>
diff --git a/svg/BlackPromoSword.svg b/svg/BlackPromoSword.svg
new file mode 100644 (file)
index 0000000..f5a9e94
--- /dev/null
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="100"
+   height="100"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="BlackSword.svg">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <inkscape:perspective
+       id="perspective2824"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2838"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6"
+     inkscape:cx="54.904244"
+     inkscape:cy="56.199236"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="792"
+     inkscape:window-height="655"
+     inkscape:window-x="62"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(366.71429,-981.93367)">
+    <g
+       id="g2827">
+      <path
+         sodipodi:nodetypes="cccccc"
+         id="path3687"
+         d="m -316.71407,986.20383 -10.33918,10.32341 -0.19853,54.35056 21.07508,0 0,-53.89326 -10.53737,-10.78071 z"
+         style="fill:#000000;stroke:#000000;stroke-width:2.10862303;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         y="1051.0409"
+         x="-338.74722"
+         height="7.3214288"
+         width="44.065918"
+         id="rect3689"
+         style="fill:#000000;stroke:#000000;stroke-width:2.10862303;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         y="1058.4933"
+         x="-322.32513"
+         height="19.202518"
+         width="10.030772"
+         id="rect3693"
+         style="fill:#000000;stroke:#000000;stroke-width:2.10862303;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3777"
+         d="m -321.70324,1059.279 8.73379,0"
+         style="fill:none;stroke:#ffffff;stroke-width:2.10862303;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3781"
+         d="m -326.26863,1049.9933 19.25403,0"
+         style="fill:none;stroke:#ffffff;stroke-width:2.10862303;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+  </g>
+</svg>
diff --git a/svg/BlackSword.svg b/svg/BlackSword.svg
new file mode 100644 (file)
index 0000000..71887a1
--- /dev/null
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="100"
+   height="100"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="BlackSword.svg">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <inkscape:perspective
+       id="perspective2824"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2838"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6"
+     inkscape:cx="54.904244"
+     inkscape:cy="56.199236"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="792"
+     inkscape:window-height="655"
+     inkscape:window-x="62"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(366.71429,-981.93367)">
+    <g
+       id="g3839"
+       transform="matrix(1.1115727,0,0,1,35.336676,0)">
+      <path
+         sodipodi:nodetypes="cccccc"
+         id="path3687"
+         d="m -316.7141,986.20383 -9.3014,10.32341 -0.1786,54.35056 18.9597,0 0,-53.89326 -9.4797,-10.78071 z"
+         style="fill:#000000;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         y="1051.0409"
+         x="-336.53571"
+         height="7.3214288"
+         width="39.642857"
+         id="rect3689"
+         style="fill:#000000;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         y="1058.4933"
+         x="-321.76196"
+         height="19.202518"
+         width="9.0239458"
+         id="rect3693"
+         style="fill:#000000;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3701"
+         d="m -316.7143,998.13445 0,52.24135"
+         style="fill:#ffffff;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3777"
+         d="m -321.20249,1059.279 7.85715,0"
+         style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3781"
+         d="m -325.30963,1049.9933 17.32143,0"
+         style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+  </g>
+</svg>
diff --git a/svg/WhiteClaw.svg b/svg/WhiteClaw.svg
new file mode 100644 (file)
index 0000000..99c4a68
--- /dev/null
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="100"
+   height="100"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="New document 1">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <inkscape:perspective
+       id="perspective2828"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2850"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2872"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2894"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2918"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2940"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2962"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="4.8704322"
+     inkscape:cx="26.42854"
+     inkscape:cy="46.467809"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1280"
+     inkscape:window-height="726"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-952.36218)">
+    <g
+       id="g3788">
+      <path
+         sodipodi:nodetypes="cccccccccccccccccccc"
+         id="path2816"
+         d="m 49.667863,1012.1206 2.166994,9.0012 -0.333383,6.3344 -2.333687,8.3346 -4.167298,4.5007 -5.167449,2.5004 -5.334142,0.3334 -6.334292,-3.3339 -3.500529,-4.8341 -1.000152,-7.5011 -2.166995,-4.334 -5.334141,-4.1672 -2.500379,-6.001 2.000304,-6.1675 5.000756,-3.1672 5.500834,-0.8335 6.500984,0.3334 7.667828,1.0002 5.834217,3.0004 3.50053,5.0008 z"
+         style="fill:#ffffff;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="cccccccccccc"
+         id="path2818"
+         d="m 39.626874,999.80011 -1.847886,-3.07981 0.821283,-5.95429 2.874488,-5.33834 5.338336,-3.07981 5.338334,0.61596 3.901092,3.49045 0,5.74898 -2.669167,5.13301 -4.517054,3.28514 -4.517053,1.0266 -4.722373,-1.84789 z"
+         style="fill:#ffffff;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="cccccccccccc"
+         id="path2818-3"
+         d="m 70.11698,997.5416 1.847886,3.0798 -0.821283,5.9543 -2.874488,5.3383 -5.338336,3.0798 -5.748975,-0.2053 -3.490451,-3.9011 0,-5.749 2.258526,-5.54356 4.927695,-2.87454 4.517053,-1.0266 4.722373,1.8479 z"
+         style="fill:#ffffff;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="cccccccccccc"
+         id="path2818-3-2"
+         d="m 33.569916,981.32129 1.847886,3.07984 -0.821283,5.9543 -2.874488,5.33826 -5.338336,3.0798 -5.748975,-0.2053 -3.490451,-3.9011 0,-5.74896 2.258526,-5.5436 4.927695,-2.87454 4.517053,-1.0266 4.722373,1.8479 z"
+         style="fill:#ffffff;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="cccccccccccc"
+         id="path2818-3-6"
+         d="m 72.375506,1019.9215 2.463848,4.5171 -0.410642,4.7223 -4.106412,4.9277 -5.133015,2.0532 -5.748975,-0.2053 -3.490451,-3.9011 0,-5.749 2.669167,-4.7223 4.722375,-2.4639 4.722373,-0.8213 4.311732,1.6426 z"
+         style="fill:#ffffff;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         id="path2908"
+         d="m 34.083217,975.98293 -2.053206,-0.61597 0.821282,-4.51705 2.463847,-2.66917 4.106412,-0.41064 2.053206,0.61596 -3.285129,0.82129 -2.258527,2.46384 -1.847885,4.31174 z"
+         style="fill:#000000;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         id="path2908-4"
+         d="m 56.216861,980.17756 -1.915052,-0.96315 1.593184,-4.30582 2.88991,-2.20078 4.115337,0.30866 1.915052,0.96314 -3.37784,0.2383 -2.652056,2.03423 -2.568537,3.92535 z"
+         style="fill:#000000;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         id="path2908-4-6"
+         d="m 73.878161,994.50275 0.963152,1.91506 4.30582,-1.59319 2.200779,-2.88991 -0.308659,-4.11533 -0.96314,-1.91506 -0.238295,3.37784 -2.03423,2.65206 -3.92535,2.56854 z"
+         style="fill:#000000;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         id="path2908-4-6-3"
+         d="m 77.705679,1018.2026 0.792583,1.9916 4.428292,-1.2118 2.444276,-2.6871 0.05119,-4.1266 -0.792563,-1.9917 -0.531791,3.3443 -2.257627,2.4646 -4.134281,2.2167 z"
+         style="fill:#000000;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+  </g>
+</svg>
diff --git a/svg/WhiteDolphin.svg b/svg/WhiteDolphin.svg
new file mode 100644 (file)
index 0000000..c01d573
--- /dev/null
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="100"
+   height="100"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="WhiteDolphin.svg">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <inkscape:perspective
+       id="perspective2826"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2834"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="4.5167464"
+     inkscape:cx="49.318911"
+     inkscape:cy="45.354981"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1280"
+     inkscape:window-height="726"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-952.36218)">
+    <g
+       id="g2848"
+       transform="matrix(0.94718127,0,0,1,5.1441209,0)">
+      <path
+         sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
+         id="path2832"
+         d="m 21.409187,1009.2837 3.850594,-5.9885 4.312974,-6.56537 6.026858,-7.19404 5.068076,-5.25188 5.537733,-4.27474 5.365827,-3.5041 2.054647,-0.99064 1.756897,-2.73841 1.016083,-3.52748 -0.668156,-2.14233 -0.710106,-2.98178 -0.568906,-1.55972 1.997345,-0.73376 3.051262,0.70676 3.23441,2.96828 1.935928,3.65165 1.664774,3.8397 0.397,2.33037 5.388307,2.56023 5.857963,3.53738 4.189076,3.8262 4.502182,4.47761 3.532159,4.71602 2.306336,4.04622 2.229452,4.21583 1.142041,4.303 0.416051,2.7853 -0.817318,3.9553 -1.401312,3.8618 0.378064,6.9663 0.232905,4.9517 -2.142125,1.0799 -1.867388,-2.6475 -3.791542,-8.7269 -2.693276,-1.9435 -2.96748,-3.6758 -3.158704,-3.2423 -0.150072,2.7315 c -1.183588,2.1006 -0.727662,2.1788 -1.669419,2.8704 l -2.845485,1.7911 -3.100755,0.2938 -3.715192,-1.444 3.05035,-3.0578 1.211269,-2.2168 0.283726,-3.0564 -1.499497,-3.2124 -5.594617,-2.2551 -6.430984,-0.9685 -8.157173,-0.423 -6.889401,1.0865 -6.163943,2.972 -6.121994,3.8114 -4.796918,5.0637 -4.369212,5.2015 5.722332,1.0098 4.306198,2.9434 3.564587,4.809 -1.40554,3.3423 -5.630626,-3.9007 -5.512971,-1.6086 -5.433305,0.3486 0.122418,-3.7133 -4.005019,4.6365 -4.1082286,0.1834 -4.5703428,0.8646 -5.8450126,2.5972 -0.4249251,-1.0225 2.37411703,-3.6566 4.76621177,-3.314 5.0069263,-2.0465 4.289125,-1.1241 3.763766,-4.871 3.320975,-5.7562 z"
+         style="fill:#ffffff;stroke:#000000;stroke-width:2.19197774;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path2834"
+         d="m 72.150568,1000.6302 -5.147858,-0.5555 -4.063233,-1.30775 -4.418286,-2.79866 -3.975221,-3.75745 -3.261004,-4.90406 6.885287,3.04205 3.765482,-0.43998 3.750128,0.65635"
+         style="fill:none;stroke:#000000;stroke-width:2.19197774;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path2842"
+         d="m 82.427881,1002.246 1.21047,1.7662"
+         style="fill:none;stroke:#000000;stroke-width:2.19197774;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path2844"
+         d="m 53.83975,975.58326 5.434369,-0.72881 4.135888,-0.0454 3.051264,0.70675"
+         style="fill:none;stroke:#000000;stroke-width:2.19197774;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="cc"
+         id="path2860"
+         d="m 70.183263,1005.0426 7.527542,4.6075"
+         style="fill:none;stroke:#000000;stroke-width:2.19197774;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+  </g>
+</svg>
diff --git a/svg/WhiteHCrown.svg b/svg/WhiteHCrown.svg
new file mode 100644 (file)
index 0000000..07bc6c9
--- /dev/null
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.0"
+   width="100"
+   height="100"
+   id="svg2833"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="WhitePrincess.svg">
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="640"
+     inkscape:window-height="487"
+     id="namedview19"
+     showgrid="false"
+     inkscape:zoom="2.36"
+     inkscape:cx="50"
+     inkscape:cy="50"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2833" />
+  <defs
+     id="defs2835">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 50 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="100 : 50 : 1"
+       inkscape:persp3d-origin="50 : 33.333333 : 1"
+       id="perspective21" />
+  </defs>
+  <metadata
+     id="metadata2838">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="matrix(0,1,-1,0,153.16323,-67.585316)"
+     id="layer1">
+    <g
+       transform="matrix(1.2568021,0,0,1.2568021,127.4848,230.75324)"
+       id="g799"
+       style="display:inline">
+      <path
+         d="m -28.079531,-94.874455 -4.264552,-25.678565 13.999806,24.343464"
+         inkscape:connector-curvature="0"
+         id="path704"
+         style="color:#000000;fill:#ffffcc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5913403;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <path
+         d="m -19.140231,-95.88723 2.246154,-30.00621 9.5954992,27.886232 z"
+         inkscape:connector-curvature="0"
+         id="path706"
+         style="color:#000000;fill:#ffffcc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5913403;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <path
+         d="m 12.490017,-94.82073 3.713129,-24.84222 -13.3990081,23.408891"
+         inkscape:connector-curvature="0"
+         id="path710"
+         style="color:#000000;fill:#ffffcc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5913403;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <path
+         d="m 3.4881771,-95.734359 -2.37837,-29.892061 -8.8615575,28.106514 z"
+         inkscape:connector-curvature="0"
+         id="path712"
+         style="color:#000000;fill:#ffffcc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5913403;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <path
+         d="m 8.6705152,-75.003615 c 0,2.494743 -7.3228728,4.517114 -16.3560942,4.517114 -9.033223,0 -16.356097,-2.022371 -16.356097,-4.517114 l 2.325288,-6.475256 -0.06428,-6.631027 -5.811396,-6.453037 4.358127,-3.075207 4.109397,1.001045 5.74678,-2.877825 5.7712718,1.347215 5.203493,-1.347215 5.2462981,2.877825 4.8612915,-1.001045 4.2955236,3.075207 -5.8100516,6.453037 0.060254,6.631027 z"
+         inkscape:connector-curvature="0"
+         id="path714"
+         style="color:#000000;fill:#ffffcc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.59134054;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <path
+         d="m -21.892448,-88.229599 c 2.801739,-1.37734 8.142276,-2.30791 14.2698066,-2.30791 6.1644171,0 11.5323386,0.94181 14.3201283,2.33283"
+         inkscape:connector-curvature="0"
+         id="path716"
+         style="color:#000000;fill:#ffffcc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.59134054;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <path
+         d="m -35.496787,129.14731 a 3.776254,3.776254 0 1 1 -7.552508,0 3.776254,3.776254 0 1 1 7.552508,0 z"
+         transform="matrix(0.94504751,0,0,0.94166667,3.6715495,-244.63895)"
+         id="path718"
+         style="color:#000000;fill:#ffffcc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.68689334;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <path
+         d="m -35.496787,129.14731 a 3.776254,3.776254 0 1 1 -7.552508,0 3.776254,3.776254 0 1 1 7.552508,0 z"
+         transform="matrix(0.94504751,0,0,0.94166667,54.80093,-244.56074)"
+         id="path720"
+         style="color:#000000;fill:#ffffcc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.68689334;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <path
+         d="m -35.496787,129.14731 a 3.776254,3.776254 0 1 1 -7.552508,0 3.776254,3.776254 0 1 1 7.552508,0 z"
+         transform="matrix(0.94504751,0,0,0.94166667,38.762768,-250.59195)"
+         id="path722"
+         style="color:#000000;fill:#ffffcc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.68689334;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <path
+         d="m -35.496787,129.14731 a 3.776254,3.776254 0 1 1 -7.552508,0 3.776254,3.776254 0 1 1 7.552508,0 z"
+         transform="matrix(0.94504751,0,0,0.94166667,19.780217,-250.61038)"
+         id="path726"
+         style="color:#000000;fill:#ffffcc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.68689334;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <path
+         d="m -23.978738,-75.003615 c 0,-2.494728 7.322874,-4.517115 16.3560966,-4.517115 9.0332214,0 16.3560942,2.022387 16.3560942,4.517115"
+         inkscape:connector-curvature="0"
+         id="path728"
+         style="color:#000000;fill:#ffffcc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.59134054;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <path
+         d="m -21.669514,-81.284079 c 2.856168,-1.31876 8.078159,-2.20172 14.0468726,-2.20172 6.0282874,0 11.2948691,0.90067 14.1316836,2.24134"
+         inkscape:connector-curvature="0"
+         id="path730"
+         style="color:#000000;fill:none;stroke:#000000;stroke-width:1.59134054;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    </g>
+  </g>
+</svg>
diff --git a/svg/WhiteHSword.svg b/svg/WhiteHSword.svg
new file mode 100644 (file)
index 0000000..90df377
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="100"
+   height="100"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="WhiteHSword.svg">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <inkscape:perspective
+       id="perspective2824"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2838"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6"
+     inkscape:cx="53.102954"
+     inkscape:cy="37.188247"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="792"
+     inkscape:window-height="655"
+     inkscape:window-x="62"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(366.71429,-981.93367)">
+    <g
+       id="g3595"
+       transform="matrix(1,0,0,1.1243568,0,-132.14157)">
+      <path
+         sodipodi:nodetypes="cccccc"
+         id="path3687"
+         d="m -270.42482,1041.7792 -10.32341,-9.3014 -54.35055,-0.1786 0,18.9597 53.89325,0 10.78071,-9.4797 z"
+         style="fill:#ffffff;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         transform="matrix(0,1,-1,0,0,0)"
+         y="335.26187"
+         x="1021.9576"
+         height="7.3214288"
+         width="39.642857"
+         id="rect3689"
+         style="fill:#ffffff;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         transform="matrix(0,1,-1,0,0,0)"
+         y="342.71426"
+         x="1036.7313"
+         height="19.202518"
+         width="9.0239458"
+         id="rect3693"
+         style="fill:#ffffff;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3701"
+         d="m -282.35544,1041.779 -52.24134,0"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+  </g>
+</svg>
diff --git a/svg/WhiteLeopard.svg b/svg/WhiteLeopard.svg
new file mode 100644 (file)
index 0000000..62e318c
--- /dev/null
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="100"
+   height="100"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="WhiteKnight.svg">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <inkscape:perspective
+       id="perspective2824"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2838"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6"
+     inkscape:cx="48.583075"
+     inkscape:cy="56.642455"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="792"
+     inkscape:window-height="678"
+     inkscape:window-x="62"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(366.71429,-981.93367)">
+    <g
+       id="g2853"
+       transform="matrix(0.86365412,0,0,0.86365412,-43.631762,139.94886)">
+      <path
+         sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccccccccccccccc"
+         id="path2844"
+         d="m -315.51293,998.27067 11.63134,1.59646 9.12262,4.33327 1.82452,-4.33327 3.87712,-4.10518 3.64904,-1.36839 5.70164,-0.45613 2.73679,3.19292 0.45613,5.24555 -1.82453,4.3332 -1.82452,3.1929 -3.64905,1.3684 1.59646,3.421 -1.14033,3.1929 -1.36839,1.5965 1.59646,6.8419 0.68419,5.2455 -0.45613,6.1578 -1.82452,5.7016 -3.42098,6.3859 -4.56131,4.1051 -3.87711,0.2281 -4.10518,2.5087 -1.14033,5.7017 -1.59646,7.7542 -4.33324,4.5613 -4.78937,1.8245 -5.01745,-0.228 -5.9297,-3.6491 -2.73678,-2.9648 0.45613,-3.421 -2.05259,-4.1052 -2.05259,-4.7894 -0.91226,-2.7368 -4.78938,-4.5613 -5.01744,-3.1929 -4.78937,-6.8419 0,-8.4385 0.91226,-6.8419 1.59646,-5.9297 -2.96485,-3.6491 -0.22807,-6.1577 -2.73678,-3.6491 -1.14033,-4.7894 1.82452,-5.70161 2.28066,-3.19291 2.05259,0.68419 3.42098,3.19292 3.64905,4.33324 1.14032,2.73677 2.96486,0.6842 4.78937,-3.1929 6.6139,-1.36839 5.70163,-0.45614 z"
+         style="fill:#ffffff;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         id="path2846"
+         d="m -297.03962,1022.4456 -6.6634,0.3076 -1.54696,0.8628 -5.2261,5.0368 4.18476,-2.0826 4.64089,0.5358 2.42914,-1.0113 0.81327,-3.193 1.3684,-0.4561 z"
+         style="fill:#000000;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="ccccccccccc"
+         id="path2848"
+         d="m -335.35462,1021.9895 6.6139,0.5357 2.78628,1.3684 2.23116,3.3414 -3.06384,0.099 -3.09393,0.049 -2.02249,-1.0414 -1.04135,-1.5664 -0.35714,-2.102 1.65663,0.1786 -3.70922,-0.8628 z"
+         style="fill:#000000;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="cccccccccc"
+         id="path2850"
+         d="m -316.47468,1041.6827 3.74804,-1.1898 1.64595,1.0908 -1.59646,3.7675 -2.15158,2.7368 -2.40973,0.049 -2.52813,-2.6572 -1.77503,-3.8771 1.18982,-1.1898 3.87712,1.2694 z"
+         style="fill:#000000;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="ccccccccccccccccccccc"
+         id="path2852"
+         d="m -315.642,1050.9344 3.50928,0.9811 4.17435,0.9479 3.62065,-0.01 c 0.74016,-0.5709 1.30175,-0.1746 1.68476,-0.6346 l -1.66536,7.8725 -0.73369,2.7669 -0.86277,4.3031 -1.98369,1.547 -3.91591,0.4561 -5.89962,0.099 -2.96485,-0.9619 -1.81383,-1.9041 -1.17043,-2.726 -1.38779,-3.9267 -2.76688,-6.1082 2.26997,0.2775 5.24551,-1.5964 4.6603,-1.3878 0,-10e-5 0,10e-5 z"
+         style="fill:#000000;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="ccccc"
+         id="path2854"
+         d="m -304.76376,1053.2151 -3.3026,9.9767 -1.72553,-10.7405 5.38527,0.9429 -0.35714,-0.1791 z"
+         style="fill:#ffffff;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="ccccc"
+         id="path2856"
+         d="m -320.19263,1052.5997 -2.13217,10.0068 -2.21175,-3.4617 -0.81328,-5.0971 5.1572,-1.448 z"
+         style="fill:#ffffff;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         id="path2858"
+         d="m -308.23424,1068.4159 c 1.22995,-0.8464 1.98419,-1.8111 2.08268,-2.7174 l 1.07144,-5.1767 c -1.20342,1.0414 -2.22826,2.2613 -3.43167,3.3027 l -1.39849,0.5852 c -0.91365,-0.8155 -3.17893,-0.7127 -2.39033,-1.9537 l -0.55511,3.6297 1.67604,2.5883 2.94544,-0.2581 z"
+         style="fill:#ffffff;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         id="path2860"
+         d="m -316.72215,1062.1484 -2.43982,1.8051 -0.91227,0 -2.81636,-2.0332 -0.0796,3.5802 2.16226,2.6679 2.73679,0.7336 1.98369,-2.231 -0.6347,-4.5226 z"
+         style="fill:#ffffff;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="cccccccccc"
+         id="path2862"
+         d="m -291.33799,1006.253 1.64596,-4.6303 3.79752,-3.93723 5.09703,-0.0796 1.09083,3.40163 -1.21991,4.1546 -1.41788,2.5583 -3.06385,1.0413 -3.87711,-0.2281 -2.05259,-2.2806 z"
+         style="fill:#000000;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="cccccccccc"
+         id="path2864"
+         d="m -344.47724,996.21809 3.47048,3.09392 2.05259,2.80569 0.6347,4.1353 -3.19292,1.8245 -2.78628,-1.9041 -2.37964,-3.7975 0,-2.75624 1.23931,-3.04443 0.96176,-0.35714 z"
+         style="fill:#000000;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path2866"
+         d="m -301.829,1037.726 14.36813,-10.7191 11.63133,-7.2981 6.6139,-5.2455"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path2868"
+         d="m -301.60093,1040.9189 14.14006,-4.1052 10.03488,-1.1403 10.491,0 2.50873,0.6842"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path2870"
+         d="m -300.68867,1045.0241 10.26294,-2.7368 10.26295,-0.9123 6.84196,0.6842 10.03488,2.0526"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path2872"
+         d="m -301.829,1047.7609 10.03488,0.6842 8.43842,3.8771"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path2874"
+         d="m -331.70557,1039.5505 -10.26295,-5.0174 -7.75422,-2.9649 -8.66649,-1.3684 -10.03488,-0.4561"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path2876"
+         d="m -332.1617,1043.1996 -13.912,-2.0526 -9.12262,0.228 -12.31553,3.8772 -9.12262,4.3332"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path2878"
+         d="m -332.38977,1046.8486 -7.29809,0.9123 -10.03488,3.649 -8.66649,4.5613 c 0,0 -4.33325,3.8771 -5.24551,3.6491"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path2880"
+         d="m -327.6004,1049.5854 -6.61389,2.7368 -6.84197,4.1052 -4.78937,4.5613"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+  </g>
+</svg>
diff --git a/svg/WhiteLion.svg b/svg/WhiteLion.svg
new file mode 100644 (file)
index 0000000..e5af5af
--- /dev/null
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="100"
+   height="100"
+   id="svg3738"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="WhiteQueen.svg">
+  <defs
+     id="defs3740">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective3746" />
+    <inkscape:perspective
+       id="perspective3800"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8"
+     inkscape:cx="64.212367"
+     inkscape:cy="62.923419"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="716"
+     inkscape:window-height="487"
+     inkscape:window-x="3"
+     inkscape:window-y="71"
+     inkscape:window-maximized="0"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <sodipodi:guide
+       position="0.17142614,0.85712"
+       orientation="0,744.09448"
+       id="guide4498" />
+    <sodipodi:guide
+       position="744.26591,0.85712"
+       orientation="-1052.3622,0"
+       id="guide4500" />
+    <sodipodi:guide
+       position="744.26591,1053.2193"
+       orientation="0,-744.09448"
+       id="guide4502" />
+    <sodipodi:guide
+       position="0.17142614,1053.2193"
+       orientation="1052.3622,0"
+       id="guide4504" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3743">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0.17142614,-953.2193)">
+    <g
+       id="g4531"
+       transform="matrix(0.97053726,0,0,0.97053726,1.9949493,30.030726)">
+      <path
+         id="path3888"
+         d="m 18.200002,987.30504 2.742858,-6.85715 -1.828571,-4.11428 5.942856,-8.22857 9.142858,-6.4 12.342857,-0.45715 2.285714,-7.31428 7.771429,0 7.314286,4.11428 10.971427,1.82858 -1.371427,5.94285 11.885713,3.2 -1.371428,4.57143 6.857142,6.85714 -2.285713,2.28572 7.314286,10.97143 -2.742858,2.74285 4.571429,10.05711 -0.457144,6.4 0,11.4286 -6.4,-8.2286 0.457144,16.9143 -2.285715,3.2 -6.4,-5.9428 0,9.1428 -5.028571,3.6572 0.914286,-10.0572 -7.314286,12.3429 -4.114285,-5.0286 -4.571429,10.5143 -10.514286,1.3714 -10.057143,-1.3714 -8.685715,-6.8571 -4.571427,-2.2858 -10.971429,6.8572 -0.457144,-12.8 -2.285713,-7.7714 -3.2,2.7428 -5.0285719,-4.1143 0.9142856,-9.1428 -2.2857142,-4.1143 0.9142858,-5.4857 -5.0285716,-3.6572 1.3714287,-3.6571 15.5428566,-13.25716 z"
+         style="fill:#f9f9f9;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="ccccccc"
+         id="path3890"
+         d="m 36.94286,989.59075 -8.685715,-1.82857 3.657144,1.37143 -5.485715,4.57143 5.485715,-2.74286 3.857141,0.2 1.17143,-1.57143 z"
+         style="fill:#000000;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3892"
+         d="m 59.34286,988.21932 0,-6.4 -0.457144,-7.77143 -1.828571,-5.02857 -3.2,-2.28571 -6.857143,0.91428 -3.657142,4.11429 -1.828571,3.65714"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3894"
+         d="m 54.771431,984.10504 -0.914286,-4.57143 -2.742856,-3.65714 -3.2,0 -1.828573,4.11428 0,0 0.914286,0.45714 -0.914286,-0.45714"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3896"
+         d="m 12.714289,1003.7622 0,0 z"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="cc"
+         id="path3898"
+         d="M 11.471431,1004.3764 0.82857386,1002.8479"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3900"
+         d="m 6.3142883,1010.1622 2.2857142,-2.7429 2.2857135,-0.4571 0.457144,-2.7429 0,0"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3902"
+         d="m 6.3142883,1017.4765 3.2000006,-0.9143 3.6571421,4.1143 4.571429,0 6.4,2.2857 5.028571,0.4571 0.457143,0 0,0.4572"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3904"
+         d="m 43.34286,1003.305 -0.457144,8.6858 -3.657142,6.4 -0.914285,7.3142 -5.485715,6.4 -4.114285,6.8572"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3906"
+         d="m 72.600003,997.36218 -3.200001,13.71432 -5.942857,10.9714 -6.857142,8.6857 -5.028572,13.7143"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="cccccc"
+         id="path3908"
+         d="m 66.557145,1040.7193 -0.357143,-7.2428 4.114287,-9.1429 4.571427,-10.0571 2.285715,-10.9715 -0.457142,-7.31425"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3910"
+         d="m 80.371431,996.44789 0,7.31431 0,5.4857 0.914285,7.7714 -4.571427,6.8572 -2.742858,5.4857 -1.371428,6.4"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="ccccc"
+         id="path3912"
+         d="m 72.14286,976.79075 6.857143,7.31429 8.228571,5.94285 -0.1,20.97141 3.185714,4.0572"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3914"
+         d="m 72.14286,971.30504 7.771429,0.91428 5.028571,2.74286 0,0"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="ccc"
+         id="path3916"
+         d="m 19.114289,986.99075 11.885713,-8.37143 4.571429,-2.74285"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         transform="translate(-0.17142614,952.93361)"
+         id="path4508"
+         d="m 14.642857,58.142833 c 8.571429,-1.785714 8.214286,-1.785714 8.214286,-1.785714"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         transform="translate(-0.17142614,952.93361)"
+         id="path4510"
+         d="M 15.357143,60.999976 C 27.142857,60.642833 27.142857,60.642833 27.142857,60.642833"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path4512"
+         d="m 15.542859,1016.4336 c 11.071429,4.2857 11.071429,4.2857 11.071429,4.2857"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+  </g>
+</svg>
diff --git a/svg/WhitePromoBishop.svg b/svg/WhitePromoBishop.svg
new file mode 100644 (file)
index 0000000..ab93a93
--- /dev/null
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.0"
+   width="100"
+   height="100"
+   id="svg2833"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="WhiteBishop.svg">
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="640"
+     inkscape:window-height="487"
+     id="namedview14"
+     showgrid="false"
+     inkscape:zoom="2.36"
+     inkscape:cx="50"
+     inkscape:cy="50"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2833" />
+  <defs
+     id="defs2835">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 50 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="100 : 50 : 1"
+       inkscape:persp3d-origin="50 : 33.333333 : 1"
+       id="perspective16" />
+  </defs>
+  <metadata
+     id="metadata2838">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <path
+     d="m 55.192266,11.163944 a 5.1922815,5.1665922 0 0 1 -10.384563,0 5.1922815,5.1665922 0 1 1 10.384563,0 z"
+     id="path293"
+     style="color:#000000;fill:#ffffcc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+  <path
+     d="m 35.970027,57.593966 c -2.187845,-2.572277 -7.934014,-3.956125 -8.03705,-16.692787 -0.09202,-11.376145 14.967422,-23.269413 22.259497,-23.363498 7.29776,-0.09411 21.85339,12.00193 21.874874,23.363498 0.02609,13.791 -5.586093,14.681011 -7.680588,16.692787 z"
+     inkscape:connector-curvature="0"
+     id="path308"
+     style="color:#000000;fill:#ffffcc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+  <path
+     d="m 69.229975,69.589847 c 0,2.133412 -8.609865,3.862871 -19.230651,3.862871 -10.620805,0 -19.230675,-1.729459 -19.230675,-3.862871 0.06799,-1.434016 2.747191,-9.995935 6.676405,-11.313027 6.900236,-2.312959 18.407359,-2.583263 25.561118,0 3.840166,1.386714 6.291799,10.015582 6.223803,11.313027 z"
+     inkscape:connector-curvature="0"
+     id="path300"
+     style="color:#000000;fill:#ffffcc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+  <path
+     d="m 31.391915,68.632566 c 2.120178,-1.670363 9.65975,-2.90559 18.635579,-2.90559 8.899888,0 16.387721,1.214423 18.580588,2.863284"
+     inkscape:connector-curvature="0"
+     id="path306"
+     style="color:#000000;fill:#ffffcc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+  <path
+     d="M 9.2736066,84.219958 13.489016,89 c 2.073196,-1.364321 4.810436,-2.594882 7.478968,-2.594882 l 19.717294,0 c 3.267641,0 6.406491,-2.799742 9.042769,-4.165477 2.908216,1.229164 5.677226,4.165477 9.04275,4.165477 l 20.805133,0 c 2.255902,0 4.101743,1.177894 6.255133,2.594882 l 4.89533,-4.780042 c -2.222249,-1.685656 -6.15317,-4.317929 -9.518695,-4.317929 l -21.757004,0 C 57.150979,79.864738 55.8005,77.746132 53.082247,74.7964 l -6.300479,0 c -1.755773,1.545696 -4.81048,5.13672 -7.45631,5.105629 l -20.397194,0 c -3.535508,0 -7.052299,1.874259 -9.6546574,4.317929 z"
+     inkscape:connector-curvature="0"
+     id="path310"
+     style="color:#000000;fill:#ffffcc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+</svg>
diff --git a/svg/WhitePromoDragon.svg b/svg/WhitePromoDragon.svg
new file mode 100644 (file)
index 0000000..f2e21ad
--- /dev/null
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.0"
+   width="100"
+   height="100"
+   id="svg2833"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="WhiteCrownedRook.svg">
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="640"
+     inkscape:window-height="487"
+     id="namedview14"
+     showgrid="false"
+     inkscape:zoom="2.36"
+     inkscape:cx="50"
+     inkscape:cy="49.614407"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2833" />
+  <defs
+     id="defs2835">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 50 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="100 : 50 : 1"
+       inkscape:persp3d-origin="50 : 33.333333 : 1"
+       id="perspective16" />
+  </defs>
+  <metadata
+     id="metadata2838">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="g2837">
+    <path
+       style="color:#000000;fill:#ffffcc;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path1388"
+       inkscape:connector-curvature="0"
+       d="m 14.471992,82.594659 71.056004,0 0,6.405345 -71.056004,0 z" />
+    <path
+       style="color:#000000;fill:#ffffcc;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path1390"
+       inkscape:connector-curvature="0"
+       d="m 21.325261,73.610637 57.349453,0 0,8.977739 -57.349453,0 z" />
+    <path
+       style="color:#000000;fill:#ffffcc;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linejoin:bevel;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path1392"
+       inkscape:connector-curvature="0"
+       d="m 28.146837,67.225346 43.689703,0 6.932502,6.366507 -57.538095,0 z" />
+    <path
+       style="color:#000000;fill:#ffffcc;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path1394"
+       inkscape:connector-curvature="0"
+       d="m 28.155129,42.633261 43.689731,0 0,24.592098 -43.689745,0 z" />
+    <path
+       style="color:#000000;fill:#ffffcc;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path1396"
+       inkscape:connector-curvature="0"
+       d="m 19.929584,36.532611 60.140821,0 -8.412112,6.399601 -43.349862,0 z" />
+    <path
+       sodipodi:nodetypes="ccccccccc"
+       style="color:#000000;fill:#ffffcc;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path1398"
+       inkscape:connector-curvature="0"
+       d="m 19.924707,23.705264 0,12.822282 60.150575,0 0,-12.822282 -12.294795,0 -12.294794,0 -11.014087,0 -12.252105,0 -12.294794,0 z" />
+    <path
+       sodipodi:nodetypes="cccccccc"
+       style="color:#000000;fill:#ffffcc;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path1454"
+       inkscape:connector-curvature="0"
+       d="m 26.531069,23.858503 23.673572,-12.920244 23.673586,12.920244 -6.09774,-0.153239 -12.294794,0 -11.014087,0 -12.252105,0 -5.688432,0.153239 z" />
+  </g>
+</svg>
diff --git a/svg/WhitePromoHSword.svg b/svg/WhitePromoHSword.svg
new file mode 100644 (file)
index 0000000..09fe10a
--- /dev/null
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="100"
+   height="100"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="WhiteHSword.svg">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <inkscape:perspective
+       id="perspective2824"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2838"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6"
+     inkscape:cx="53.102954"
+     inkscape:cy="37.188247"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="792"
+     inkscape:window-height="655"
+     inkscape:window-x="62"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(366.71429,-981.93367)">
+    <g
+       id="g2823">
+      <path
+         sodipodi:nodetypes="cccccc"
+         id="path3687"
+         d="m -270.42482,1039.19 -10.32341,-10.4581 -54.35055,-0.2008 0,21.3174 53.89325,0 10.78071,-10.6585 z"
+         style="fill:#ffffff;stroke:#000000;stroke-width:2.12071395;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         transform="matrix(0,1,-1,0,0,0)"
+         y="335.26187"
+         x="1016.9034"
+         height="7.3214288"
+         width="44.572716"
+         id="rect3689"
+         style="fill:#ffffff;stroke:#000000;stroke-width:2.12071395;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         transform="matrix(0,1,-1,0,0,0)"
+         y="342.71426"
+         x="1033.5143"
+         height="19.202518"
+         width="10.146134"
+         id="rect3693"
+         style="fill:#ffffff;stroke:#000000;stroke-width:2.12071395;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+  </g>
+</svg>
diff --git a/svg/WhitePromoHorse.svg b/svg/WhitePromoHorse.svg
new file mode 100644 (file)
index 0000000..d678fe9
--- /dev/null
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.0"
+   width="100"
+   height="100"
+   id="svg2833"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="WhiteCrownedBishop.svg">
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="640"
+     inkscape:window-height="487"
+     id="namedview13"
+     showgrid="false"
+     inkscape:zoom="2.36"
+     inkscape:cx="50"
+     inkscape:cy="50"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2833" />
+  <defs
+     id="defs2835">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 50 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="100 : 50 : 1"
+       inkscape:persp3d-origin="50 : 33.333333 : 1"
+       id="perspective15" />
+  </defs>
+  <metadata
+     id="metadata2838">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <path
+     d="m 36.534832,58.968047 c -3.243443,-3.154945 -10.214715,-10.374074 -13.03495,-12.09609 -2.820236,-1.722015 -9.813947,-3.834791 -9.997463,-7.098474 1.572767,-7.2769 19.644618,-8.907618 31.169347,-21.564265 l 10.065462,-0.02979 c 12.744832,12.505359 30.015019,14.896149 31.391548,21.594106 -0.557894,3.635787 -4.567159,4.603962 -8.190134,7.098425 -3.622976,2.494463 -10.263803,8.270149 -14.131036,12.09614 z"
+     inkscape:connector-curvature="0"
+     id="path884"
+     style="color:#000000;fill:#ffffcc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+  <path
+     d="m 68.455849,70.439082 c 0,2.040073 -8.263263,3.693867 -18.456498,3.693867 -10.193248,0 -18.456512,-1.653794 -18.456512,-3.693867 0.06525,-1.371275 2.6366,-9.558591 6.407631,-10.81805 6.622461,-2.211769 17.666352,-2.470245 24.532126,0 3.685576,1.326042 6.038513,9.577372 5.973253,10.81805 z"
+     inkscape:connector-curvature="0"
+     id="path886"
+     style="color:#000000;fill:#ffffcc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+  <path
+     d="m 32.141016,69.523687 c 2.034814,-1.597278 9.270883,-2.77846 17.885376,-2.77846 8.541618,0 15.728019,1.161284 17.832608,2.738006"
+     inkscape:connector-curvature="0"
+     id="path888"
+     style="color:#000000;fill:#ffffcc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+  <path
+     d="m 10.913106,84.429095 4.045713,4.570906 c 1.989736,-1.304629 4.616785,-2.481355 7.177892,-2.481355 l 18.923549,0 c 3.136099,0 6.148589,-2.677244 8.678735,-3.983226 2.791146,1.175385 5.448685,3.983226 8.678723,3.983226 l 19.9676,0 c 2.165085,0 3.936616,1.126367 6.003322,2.481355 l 4.698258,-4.570906 c -2.132784,-1.6119 -5.905464,-4.129005 -9.135502,-4.129005 l -20.881146,0 c -2.207135,-0.03562 -3.503256,-2.061572 -6.112083,-4.882248 l -6.046837,0 c -1.685097,1.478063 -4.616835,4.911978 -7.156147,4.882248 l -19.576081,0 c -3.393181,0 -6.768399,1.792249 -9.265996,4.129005 z"
+     inkscape:connector-curvature="0"
+     id="path894"
+     style="color:#000000;fill:#ffffcc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+</svg>
diff --git a/svg/WhitePromoRook.svg b/svg/WhitePromoRook.svg
new file mode 100644 (file)
index 0000000..e75c0b3
--- /dev/null
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.0"
+   width="100"
+   height="100"
+   id="svg2833"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="WhiteRook.svg">
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="640"
+     inkscape:window-height="487"
+     id="namedview13"
+     showgrid="false"
+     inkscape:zoom="2.36"
+     inkscape:cx="50"
+     inkscape:cy="50"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2833" />
+  <defs
+     id="defs2835">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 50 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="100 : 50 : 1"
+       inkscape:persp3d-origin="50 : 33.333333 : 1"
+       id="perspective15" />
+  </defs>
+  <metadata
+     id="metadata2838">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="g2834">
+    <path
+       style="color:#000000;fill:#ffffcc;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect204"
+       inkscape:connector-curvature="0"
+       d="m 14.354056,82.157062 71.291888,0 0,6.842936 -71.291888,0 z" />
+    <path
+       style="color:#000000;fill:#ffffcc;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect206"
+       inkscape:connector-curvature="0"
+       d="m 21.230076,72.559283 57.539835,0 0,9.591067 -57.539835,0 z" />
+    <path
+       style="color:#000000;fill:#ffffcc;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linejoin:bevel;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect208"
+       inkscape:connector-curvature="0"
+       d="m 28.074297,65.737771 43.83474,0 6.955516,6.801444 -57.729105,0 z" />
+    <path
+       style="color:#000000;fill:#ffffcc;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect210"
+       inkscape:connector-curvature="0"
+       d="m 28.082617,31.497226 43.834767,0 0,34.240572 -43.834781,0 z" />
+    <path
+       style="color:#000000;fill:#ffffcc;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect212"
+       inkscape:connector-curvature="0"
+       d="m 19.829765,24.626866 60.340471,0 -8.440038,6.8368 -43.49377,0 z" />
+    <path
+       sodipodi:nodetypes="ccccccccc"
+       style="color:#000000;fill:#ffffcc;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect214"
+       inkscape:connector-curvature="0"
+       d="m 19.824872,10.923199 0,13.698256 60.350257,0 0,-13.698256 -12.33561,0 -12.335609,0 -11.050651,0 -12.292778,0 -12.335609,0 z" />
+  </g>
+</svg>
diff --git a/svg/WhitePromoSword.svg b/svg/WhitePromoSword.svg
new file mode 100644 (file)
index 0000000..cefeb40
--- /dev/null
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="100"
+   height="100"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="WhiteSword.svg">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <inkscape:perspective
+       id="perspective2824"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2838"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6"
+     inkscape:cx="35.248447"
+     inkscape:cy="51.239847"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="792"
+     inkscape:window-height="655"
+     inkscape:window-x="62"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(366.71429,-981.93367)">
+    <g
+       id="g2823">
+      <path
+         sodipodi:nodetypes="cccccc"
+         id="path3687"
+         d="m -316.26765,986.20384 -10.45897,10.32341 -0.20079,54.35055 21.31911,0 0,-53.89325 -10.65935,-10.78071 z"
+         style="fill:#ffffff;stroke:#000000;stroke-width:2.12079835;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         y="1051.0409"
+         x="-338.556"
+         height="7.3214288"
+         width="44.576263"
+         id="rect3689"
+         style="fill:#ffffff;stroke:#000000;stroke-width:2.12079835;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         y="1058.4933"
+         x="-321.94376"
+         height="19.202518"
+         width="10.146942"
+         id="rect3693"
+         style="fill:#ffffff;stroke:#000000;stroke-width:2.12079835;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+  </g>
+</svg>
diff --git a/svg/WhiteSword.svg b/svg/WhiteSword.svg
new file mode 100644 (file)
index 0000000..cdcc108
--- /dev/null
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="100"
+   height="100"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="WhiteSword.svg">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <inkscape:perspective
+       id="perspective2824"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2838"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6"
+     inkscape:cx="35.248447"
+     inkscape:cy="51.239847"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="792"
+     inkscape:window-height="655"
+     inkscape:window-x="62"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(366.71429,-981.93367)">
+    <g
+       id="g3595"
+       transform="matrix(1.1244463,0,0,1,39.257968,0)">
+      <path
+         sodipodi:nodetypes="cccccc"
+         id="path3687"
+         d="m -316.17839,986.20384 -9.30144,10.32341 -0.17857,54.35055 18.95966,0 0,-53.89325 -9.47965,-10.78071 z"
+         style="fill:#ffffff;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         y="1051.0409"
+         x="-336"
+         height="7.3214288"
+         width="39.642857"
+         id="rect3689"
+         style="fill:#ffffff;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         y="1058.4933"
+         x="-321.22629"
+         height="19.202518"
+         width="9.0239458"
+         id="rect3693"
+         style="fill:#ffffff;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path3701"
+         d="m -316.17857,998.13446 0,52.24134"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+  </g>
+</svg>
index 5fe4338..eb006b1 100644 (file)
--- a/usounds.c
+++ b/usounds.c
@@ -76,21 +76,22 @@ extern char *getenv();
 #include "frontend.h"
 
 
-void
+int
 PlaySoundFile (char *name)
 {
   if (*name == NULLCHAR) {
-    return;
+    return 0;
   } else if (strcmp(name, "$") == 0) {
     putc(BELLCHAR, stderr);
   } else {
     char buf[2048];
     char *prefix = "", *sep = "";
-    if(appData.soundProgram[0] == NULLCHAR) return;
+    if(appData.soundProgram[0] == NULLCHAR) return 1;
     if(!strchr(name, '/')) { prefix = appData.soundDirectory; sep = "/"; }
     snprintf(buf, sizeof(buf), "%s '%s%s%s' &", appData.soundProgram, prefix, sep, name);
     system(buf);
   }
+  return 1;
 }
 
 void
@@ -135,6 +136,12 @@ PlayTellSound ()
   PlaySoundFile(appData.soundTell);
 }
 
+int
+Roar ()
+{
+  return PlaySoundFile(appData.soundRoar);
+}
+
 void
 PlaySoundForColor (ColorClass cc)
 {
index af83b60..baba353 100644 (file)
--- a/usystem.c
+++ b/usystem.c
@@ -227,7 +227,7 @@ static int
 parse_cpair (ColorClass cc, char *str)
 {
     if ((textColors[(int)cc].fg=parse_color(str, 0)) == -2) {
-       fprintf(stderr, _("%s: can't parse foreground color in `%s'\n"),
+       fprintf(stderr, _("%s: can't parse foreground color in '%s'\n"),
                programName, str);
        return -1;
     }
@@ -263,6 +263,7 @@ ParseIcsTextColors ()
       }
     textColors[ColorNone].fg = textColors[ColorNone].bg = -1;
     textColors[ColorNone].attr = 0;
+    SetTextColor(cnames, textColors[ColorNormal].fg - 30, textColors[ColorNormal].bg - 40, -2); // kludge to announce background color to front-end 
 }
 
 static Boolean noEcho;
@@ -307,6 +308,8 @@ Colorize (ColorClass cc, int continuation)
     char buf[MSG_SIZ];
     int count, outCount, error;
 
+    SetTextColor(cnames, textColors[(int)cc].fg - 30, textColors[(int)cc].bg - 40, textColors[(int)cc].attr); // for GTK widget
+
     if (textColors[(int)cc].bg > 0) {
        if (textColors[(int)cc].fg > 0) {
          snprintf(buf, MSG_SIZ, "\033[0;%d;%d;%dm", textColors[(int)cc].attr,
@@ -358,6 +361,9 @@ ExpandPathName (char *path)
     }
 
     if (*s == '~') {
+       if(s[1] == '~') { // use ~~ for XBoard's private data directory
+         snprintf(d, 4*MSG_SIZ, DATADIR "%s", s+2);
+       } else
        if (*(s+1) == '/') {
          safeStrCpy(d, getpwuid(getuid())->pw_dir, 4*MSG_SIZ );
          strcat(d, s+1);
@@ -494,9 +500,12 @@ StartChildProcess (char *cmdLine, char *dir, ProcRef *pr)
 }
 
 // [HGM] kill: implement the 'hard killing' of AS's Winboard_x
+static int pid;
+
 static RETSIGTYPE
 AlarmCallBack (int n)
 {
+    kill(pid, SIGKILL); // kill forcefully
     return;
 }
 
@@ -507,22 +516,17 @@ DestroyChildProcess (ProcRef pr, int signalType)
 
     if (cp->kind != CPReal) return;
     cp->kind = CPNone;
-    if (signalType == 10) { // [HGM] kill: if it does not terminate in 3 sec, kill
-       signal(SIGALRM, AlarmCallBack);
-       alarm(3);
-       if(wait((int *) 0) == -1) { // process does not terminate on its own accord
-           kill(cp->pid, SIGKILL); // kill it forcefully
-           wait((int *) 0);        // and wait again
-       }
-    } else {
-       if (signalType) {
-           kill(cp->pid, signalType == 9 ? SIGKILL : SIGTERM); // [HGM] kill: use hard kill if so requested
-       }
-       /* Process is exiting either because of the kill or because of
-          a quit command sent by the backend; either way, wait for it to die.
-       */
-       wait((int *) 0);
+    if (signalType & 1) {
+           kill(cp->pid, signalType == 9 ? SIGKILL : SIGTERM); // [HGM] kill: for 9 hard-kill immediately
     }
+    signal(SIGALRM, AlarmCallBack);
+    pid = cp->pid;
+    if(signalType & 4) alarm(1 + appData.delayAfterQuit); // [HGM] kill: schedule hard kill if so requested
+    /* Process is exiting either because of the kill or because of
+       a quit command sent by the backend; either way, wait for it to die.
+    */
+    wait((int *) 0);
+    alarm(0); // cancel alarm if still pending
     close(cp->fdFrom);
     close(cp->fdTo);
 }
@@ -646,18 +650,20 @@ OpenRcmd (char *host, char *user, char *cmd, ProcRef *pr)
     return -1;
 }
 
+Boolean stdoutClosed = FALSE;
+
 int
 OutputToProcess (ProcRef pr, char *message, int count, int *outError)
 {
     static int line = 0;
     ChildProc *cp = (ChildProc *) pr;
-    int outCount;
+    int outCount = count;
 
     if (pr == NoProc)
     {
-        if (appData.noJoin || !appData.useInternalWrap)
-            outCount = fwrite(message, 1, count, stdout);
-        else
+        if (appData.noJoin || !appData.useInternalWrap) {
+            if(!stdoutClosed) outCount = fwrite(message, 1, count, stdout);
+        } else
         {
             int width = get_term_width();
             int len = wrap(NULL, message, count, width, &line);
@@ -675,6 +681,7 @@ OutputToProcess (ProcRef pr, char *message, int count, int *outError)
                 free(msg);
             }
         }
+        if(*message != '\033') ConsoleWrite(message, count);
     }
     else
       outCount = write(cp->fdTo, message, count);
index b776652..a0acd30 100644 (file)
--- a/usystem.h
+++ b/usystem.h
@@ -68,6 +68,7 @@ typedef struct {
 } ChildProc;
 
 extern char *oldICSInteractionTitle;
+extern Boolean stdoutClosed;
 
 char *ExpandPathName P((char *path));
 int  MySearchPath P((char *installDir, char *name, char *fullname));
diff --git a/winboard/bitmaps/ln33o.bmp b/winboard/bitmaps/ln33o.bmp
new file mode 100644 (file)
index 0000000..1e369b2
Binary files /dev/null and b/winboard/bitmaps/ln33o.bmp differ
diff --git a/winboard/bitmaps/ln33s.bmp b/winboard/bitmaps/ln33s.bmp
new file mode 100644 (file)
index 0000000..4f4b4fe
Binary files /dev/null and b/winboard/bitmaps/ln33s.bmp differ
diff --git a/winboard/bitmaps/ln33w.bmp b/winboard/bitmaps/ln33w.bmp
new file mode 100644 (file)
index 0000000..8498503
Binary files /dev/null and b/winboard/bitmaps/ln33w.bmp differ
diff --git a/winboard/bitmaps/ln49o.bmp b/winboard/bitmaps/ln49o.bmp
new file mode 100644 (file)
index 0000000..70f760e
Binary files /dev/null and b/winboard/bitmaps/ln49o.bmp differ
diff --git a/winboard/bitmaps/ln49s.bmp b/winboard/bitmaps/ln49s.bmp
new file mode 100644 (file)
index 0000000..b9ecc7b
Binary files /dev/null and b/winboard/bitmaps/ln49s.bmp differ
diff --git a/winboard/bitmaps/ln49w.bmp b/winboard/bitmaps/ln49w.bmp
new file mode 100644 (file)
index 0000000..16f45eb
Binary files /dev/null and b/winboard/bitmaps/ln49w.bmp differ
diff --git a/winboard/bitmaps/ln72o.bmp b/winboard/bitmaps/ln72o.bmp
new file mode 100644 (file)
index 0000000..cb23356
Binary files /dev/null and b/winboard/bitmaps/ln72o.bmp differ
diff --git a/winboard/bitmaps/ln72s.bmp b/winboard/bitmaps/ln72s.bmp
new file mode 100644 (file)
index 0000000..f0a88ce
Binary files /dev/null and b/winboard/bitmaps/ln72s.bmp differ
diff --git a/winboard/bitmaps/ln72w.bmp b/winboard/bitmaps/ln72w.bmp
new file mode 100644 (file)
index 0000000..e55a5e8
Binary files /dev/null and b/winboard/bitmaps/ln72w.bmp differ
index cdff89b..1b1bddd 100644 (file)
 #define PACKAGE_NAME "WinBoard"\r
 \r
 /* Define to the full name and version of this package. */\r
-#define PACKAGE_STRING "WinBoard 4.7.3"\r
+#define PACKAGE_STRING "WinBoard master-20140119"\r
 \r
 /* Define to the one symbol short name of this package. */\r
 #define PACKAGE_TARNAME "winboard"\r
 \r
 /* Define to the version of this package. */\r
-#define PACKAGE_VERSION "4.7.3"\r
+#define PACKAGE_VERSION "master-20140119"\r
 \r
 /* Define the Windows-specific FILE version info.  this *MUST* be four comma separated 16-bit integers */\r
-#define PACKAGE_FILEVERSION 4,7,2014,105\r
+/* remember to not start a number with 0 (octal), dates like 2014,0901 would lead to an error */\r
+#define PACKAGE_FILEVERSION 4,7,2014,119\r
 \r
 #define PTY_ITERATION\r
 \r
 \r
 #ifdef _MSC_VER\r
 #define snprintf _snprintf\r
+#define inline __inline\r
 #if _MSC_VER < 1500\r
 #define vsnprintf _vsnprintf\r
 #endif\r
index f9171a2..0d04e0f 100644 (file)
 #define BUILT_IN_SOUND_NAMES {\\r
   "Beepbeep", "Ching", "Click", "Cymbal", "Ding", "Drip", \\r
   "Gong", "Laser", "Move", "Penalty", "Phone", "Pop", "Pop2", \\r
-  "Slap", "Squeak", "Swish", "Thud", "Whipcrack", \\r
+  "Roar", "Slap", "Squeak", "Swish", "Thud", "Whipcrack", \\r
   "Alarm", "Challenge", "Channel", "Channel1", "Draw", "Kibitz", \\r
   "Lose", "Request", "Seek", "Shout", "SShout", "Tell", "Unfinished", \\r
   "Win", NULL \\r
 }\r
 \r
 #define SETTINGS_FILE         "winboard.ini"\r
-#define DEBUG_FILE            "winboard.debug"
+#define DEBUG_FILE            "winboard.debug"\r
 \r
 #define ICS_LOGON             "ics.ini"\r
 \r
index 7ad0f61..b442dc6 100644 (file)
 #define IDC_NFG_Edit                    1023\r
 #define IDC_EpDrawMoveCount             1023\r
 #define IDC_PolyglotDir                 1023\r
+#define OPT_TagsSave                    1023\r
 #define OPT_ConsoleText                 1024\r
 #define OPT_LightSquareColor            1024\r
 #define OPT_CommandInput                1025\r
 #define OPT_AutoCreate                  1352\r
 #define OPT_AutoFlag                    1353\r
 #define OPT_AlwaysQueen                 1354\r
-#define OPT_AutoComment                 1354\r
+#define OPT_AutoComment                 1458\r
 #define OPT_AnimateDragging             1355\r
 #define OPT_AutoObserve                 1355\r
 #define OPT_AnimateMoving               1356\r
 #define OPT_ExtraInfoInMoveHistory      1437\r
 #define OPT_HighlightMoveArrow          1438\r
 #define OPT_AutoLogo                   1439\r
+#define OPT_AutoTags                    1440\r
+#define OPT_Headers                     1441\r
+#define OPT_Variations                  1442\r
+#define OPT_AutoExtend                  1443\r
 #define IDC_BUTTON1                     1440\r
 #define IDC_BrowseForPolyglotDir        1440\r
 #define IDC_BrowseForEGTB               1441\r
 #define OPT_VariantMakruk               1529\r
 #define OPT_VariantSChess               1530\r
 #define OPT_VariantSpartan              1531\r
+#define OPT_VariantASEAN                1532\r
 #define OPT_VariantGrand                1534\r
+#define OPT_VariantLion                 1535\r
+#define OPT_EngineVariant               1560\r
 #define IDC_Files                       1550\r
 #define IDC_Ranks                       1551\r
 #define IDC_Holdings                    1552\r
 #define OPT_GameListFind                1981\r
 #define OPT_Grid                        1983\r
 #define IDM_LoadProg2                   1984\r
+#define OPT_Counts                      1985\r
+#define OPT_Ranget                      1986\r
+#define IDM_SaveSelected                1987\r
 \r
 \r
 // Next default values for new objects\r
index a2532a5..e46647d 100644 (file)
@@ -42,7 +42,6 @@
 \r
 /* Imports from winboard.c */\r
 extern HWND hwndMain;\r
-Boolean ParseFEN(Board b, int *stm, char *FEN);\r
 \r
 /* File globals */\r
 static char *copyTemp;\r
@@ -54,7 +53,7 @@ CopyFENToClipboard()
   char *fen = NULL;\r
 \r
   if(gameMode == EditPosition) EditPositionDone(TRUE); // [HGM] mak sure castling rights are set consistently\r
-  fen = PositionToFEN(currentMove, NULL);\r
+  fen = PositionToFEN(currentMove, NULL, 1);\r
   if (!fen) {\r
     DisplayError(_("Unable to convert position to FEN."), 0);\r
     return;\r
@@ -305,7 +304,7 @@ VOID PasteGameOrFENFromClipboard()
   }\r
 \r
   // [HGM] paste any: make still smarter, to allow pasting of games without tags, recognize FEN in stead\r
-  if(!ParseFEN(dummyBoard, &dummy, buf) ) {\r
+  if(!ParseFEN(dummyBoard, &dummy, buf, 0) ) {\r
       PasteGameFromString( buf );\r
   }\r
   else {\r
index 823d7dd..3b599e8 100644 (file)
@@ -26,6 +26,7 @@
 #include "config.h"\r
 \r
 #include <windows.h>   /* required for all Windows applications */\r
+#include <richedit.h>\r
 #include <stdio.h>\r
 #include <stdlib.h>\r
 #include <malloc.h>\r
@@ -43,6 +44,7 @@
 \r
 /* Module globals */\r
 static char *editTagsText, **resPtr;\r
+static HWND memo;\r
 BOOL editTagsUp = FALSE;\r
 BOOL canEditTags = FALSE;\r
 \r
@@ -56,7 +58,7 @@ EditTagsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
 {\r
   static HANDLE hwndText;\r
   static int sizeX, sizeY;\r
-  int len, newSizeX, newSizeY, flags;\r
+  int len, newSizeX, newSizeY;\r
   char *str;\r
   RECT rect;\r
   MINMAXINFO *mmi;\r
@@ -66,14 +68,15 @@ EditTagsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
   case WM_INITDIALOG: /* message: initialize dialog box */\r
     /* Initialize the dialog items */\r
     Translate(hDlg, DLG_EditTags);\r
-   hwndText = GetDlgItem(hDlg, OPT_TagsText);\r
+   hwndText = memo = GetDlgItem(hDlg, OPT_TagsText);\r
     SendMessage(hwndText, WM_SETFONT, \r
       (WPARAM)font[boardSize][EDITTAGS_FONT]->hf, MAKELPARAM(FALSE, 0));\r
     SetDlgItemText(hDlg, OPT_TagsText, editTagsText);\r
     EnableWindow(GetDlgItem(hDlg, OPT_TagsCancel), canEditTags);\r
-    EnableWindow(GetDlgItem(hDlg, OPT_EditTags), !canEditTags);\r
+    EnableWindow(GetDlgItem(hDlg, OPT_EditTags), !canEditTags || bookUp);\r
     SendMessage(hwndText, EM_SETREADONLY, !canEditTags, 0);\r
     if (bookUp) {\r
+      SetDlgItemText(hDlg, OPT_EditTags, _("&Play Move"));\r
       SetWindowText(hDlg, _("Edit Book"));\r
       SetFocus(hwndText);\r
     } else\r
@@ -86,10 +89,10 @@ EditTagsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
     }\r
     if (!editTagsDialog) {\r
       editTagsDialog = hDlg;\r
-      flags = SWP_NOZORDER;\r
       GetClientRect(hDlg, &rect);\r
       sizeX = rect.right;\r
       sizeY = rect.bottom;\r
+      SendDlgItemMessage( hDlg, OPT_TagsText, EM_SETEVENTMASK, 0, ENM_MOUSEEVENTS );\r
       if (wpTags.x != CW_USEDEFAULT && wpTags.y != CW_USEDEFAULT &&\r
          wpTags.width != CW_USEDEFAULT && wpTags.height != CW_USEDEFAULT) {\r
        WINDOWPLACEMENT wp;\r
@@ -118,6 +121,7 @@ EditTagsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
   case WM_COMMAND:\r
     switch (LOWORD(wParam)) {\r
     case IDOK:\r
+    case OPT_TagsSave:\r
       if (canEditTags) {\r
        char *p, *q;\r
        /* Read changed options from the dialog box */\r
@@ -133,13 +137,13 @@ EditTagsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
        }\r
        *p = NULLCHAR; err = 0;\r
         if(resPtr) *resPtr = strdup(str); else\r
-       if(bookUp) SaveToBook(str); else\r
+       if(bookUp) SaveToBook(str), DisplayBook(currentMove); else\r
        err = ReplaceTags(str, &gameInfo);\r
        if (err) DisplayError(_("Error replacing tags."), err);\r
 \r
        free(str);\r
       }\r
-      TagsPopDown();\r
+      if(LOWORD(wParam) == IDOK) TagsPopDown();\r
       return TRUE;\r
       \r
     case IDCANCEL:\r
@@ -148,6 +152,7 @@ EditTagsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
       return TRUE;\r
       \r
     case OPT_EditTags:\r
+      if(bookUp) addToBookFlag = !addToBookFlag; else\r
       EditTagsEvent();\r
       return TRUE;\r
 \r
@@ -156,6 +161,34 @@ EditTagsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
     }\r
     break;\r
 \r
+  case WM_NOTIFY: // [HGM] vari: cloned from whistory.c\r
+        if( wParam == OPT_TagsText ) {\r
+            MSGFILTER * lpMF = (MSGFILTER *) lParam;\r
+\r
+            if( lpMF->msg == WM_RBUTTONDOWN ) {\r
+                POINTL pt;\r
+                LRESULT index;\r
+\r
+                pt.x = LOWORD( lpMF->lParam );\r
+                pt.y = HIWORD( lpMF->lParam );\r
+\r
+                index = SendDlgItemMessage( hDlg, OPT_TagsText, EM_CHARFROMPOS, 0, (LPARAM) &pt );\r
+\r
+               hwndText = GetDlgItem(hDlg, OPT_TagsText); // cloned from above\r
+               len = GetWindowTextLength(hwndText);\r
+               str = (char *) malloc(len + 1);\r
+               GetWindowText(hwndText, str, len + 1);\r
+               if(bookUp) PlayBookMove(str, index);\r
+               free(str);\r
+\r
+                /* Zap the message for good: apparently, returning non-zero is not enough */\r
+                lpMF->msg = WM_USER;\r
+\r
+                return TRUE;\r
+            }\r
+        }\r
+        break;\r
+\r
   case WM_SIZE:\r
     newSizeX = LOWORD(lParam);\r
     newSizeY = HIWORD(lParam);\r
@@ -174,11 +207,17 @@ EditTagsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
   return FALSE;\r
 }\r
 \r
+VOID AddBookMove(char *text)\r
+{\r
+    SendMessage( memo, EM_SETSEL, 999999, 999999 ); // [HGM] multivar: choose insertion point\r
+    SendMessage( memo, EM_REPLACESEL, (WPARAM) FALSE, (LPARAM) text );\r
+}\r
+\r
 VOID TagsPopDown(void)\r
 {\r
   if (editTagsDialog) ShowWindow(editTagsDialog, SW_HIDE);\r
   CheckMenuItem(GetMenu(hwndMain), IDM_Tags, MF_UNCHECKED);\r
-  editTagsUp = bookUp = FALSE;\r
+  editTagsUp = bookUp = addToBookFlag = FALSE;\r
 }\r
 \r
 \r
index d3a673f..8cf4fc6 100644 (file)
@@ -225,7 +225,8 @@ void ResizeWindowControls( int mode )
     InvalidateRect( GetDlgItem(hDlg,IDC_EngineMemo2), NULL, FALSE );\r
 }\r
 \r
-static int currentPV, highTextStart[2], highTextEnd[2];\r
+static int currentPV;\r
+int highTextStart[2], highTextEnd[2];\r
 extern RECT boardRect;\r
 \r
 VOID\r
index 4fa6025..feda2ca 100644 (file)
@@ -95,7 +95,7 @@ static int GameListToListBox( HWND hDlg, BOOL boReset, char * pszFilter, struct
 \r
         if(nItem % 2000 == 0) {\r
           snprintf(buf, MSG_SIZ, _("Scanning through games (%d)"), nItem);\r
-          SetWindowText(hwndMain, buf);\r
+          SetWindowText(hwndMain, buf); DoEvents();\r
         }\r
 \r
       if(!narrow || lg->position >= 0) {\r
@@ -164,7 +164,7 @@ GameListDialog(HWND hDlg, UINT message,     WPARAM wParam, LPARAM lParam)
   int nItem;\r
   RECT rect;\r
   static int sizeX, sizeY;\r
-  int newSizeX, newSizeY, flags;\r
+  int newSizeX, newSizeY;\r
   MINMAXINFO *mmi;\r
   static BOOL filterHasFocus = FALSE;\r
   int count;\r
@@ -197,7 +197,6 @@ GameListDialog(HWND hDlg, UINT message,     WPARAM wParam, LPARAM lParam)
     /* Size and position the dialog */\r
     if (!gameListDialog) {\r
       gameListDialog = hDlg;\r
-      flags = SWP_NOZORDER;\r
       GetClientRect(hDlg, &rect);\r
       sizeX = rect.right;\r
       sizeY = rect.bottom;\r
@@ -407,6 +406,7 @@ VOID GameListPopUp(FILE *fp, char *filename)
     gameFileName = StrSave(filename);\r
   }\r
   CheckMenuItem(GetMenu(hwndMain), IDM_ShowGameList, MF_CHECKED);\r
+  EnableMenuItem(GetMenu(hwndMain), IDM_SaveSelected, MF_ENABLED);\r
   if (gameListDialog) {\r
     SendMessage(gameListDialog, WM_INITDIALOG, 0, 0);\r
     if (!gameListUp) ShowWindow(gameListDialog, SW_SHOW);\r
@@ -428,6 +428,7 @@ FILE *GameFile()
 VOID GameListPopDown(void)\r
 {\r
   CheckMenuItem(GetMenu(hwndMain), IDM_ShowGameList, MF_UNCHECKED);\r
+  EnableMenuItem(GetMenu(hwndMain), IDM_SaveSelected, MF_GRAYED);\r
   if (gameListDialog) ShowWindow(gameListDialog, SW_HIDE);\r
   gameListUp = FALSE;\r
 }\r
@@ -436,14 +437,22 @@ VOID GameListPopDown(void)
 VOID GameListHighlight(int index)\r
 {\r
   char buf[MSG_SIZ];\r
-  int i, res = 0;\r
+  int i, j, k, n, res = 0;\r
   if (gameListDialog == NULL) return;\r
-  for(i=0; res != LB_ERR; i++) {\r
+  for(i=64; ; i+=i) {\r
         res = SendDlgItemMessage( gameListDialog, OPT_GameListText, LB_GETTEXT, i, (LPARAM)buf );\r
-        if(index <= atoi( buf )) break;\r
+        if(res == LB_ERR || index < atoi( buf )) break;\r
   }\r
-  SendDlgItemMessage(gameListDialog, OPT_GameListText,\r
-    LB_SETCURSEL, i, 0);\r
+  j = i/2;\r
+  while(i-j > 1) {\r
+        n = (i + j) >> 1;\r
+        res = SendDlgItemMessage( gameListDialog, OPT_GameListText, LB_GETTEXT, n, (LPARAM)buf );\r
+        if(res == LB_ERR || index < (k = atoi( buf ))) i = n; else {\r
+            j = n;\r
+            if(index == k) break;\r
+        }\r
+  }\r
+  SendDlgItemMessage(gameListDialog, OPT_GameListText, LB_SETCURSEL, j, 0);\r
 }\r
 \r
 \r
index a07356a..4e43c62 100644 (file)
@@ -112,7 +112,6 @@ VOID NewVariantPopup(HWND hwnd);
 int FinishMove P((ChessMove moveType, int fromX, int fromY, int toX, int toY,\r
                   /*char*/int promoChar));\r
 void DisplayMove P((int moveNumber));\r
-Boolean ParseFEN P((Board board, int *blackPlaysFirst, char *fen));\r
 void ChatPopUp P((char *s));\r
 typedef struct {\r
   ChessSquare piece;  \r
@@ -190,6 +189,7 @@ Boolean alwaysOnTop = FALSE;
 RECT boardRect;\r
 COLORREF lightSquareColor, darkSquareColor, whitePieceColor, \r
   blackPieceColor, highlightSquareColor, premoveHighlightColor;\r
+COLORREF markerColor[8] = { 0x00FFFF, 0x0000FF, 0x00FF00, 0xFF0000, 0xFFFF00, 0xFF00FF, 0xFFFFFF, 0x000000 };\r
 HPALETTE hPal;\r
 ColorClass currentColorClass;\r
 \r
@@ -200,7 +200,7 @@ static HBITMAP pieceBitmap[3][(int) BlackPawn]; /* [HGM] nr of bitmaps referred
 static HBRUSH lightSquareBrush, darkSquareBrush,\r
   blackSquareBrush, /* [HGM] for band between board and holdings */\r
   explodeBrush,     /* [HGM] atomic */\r
-  markerBrush,      /* [HGM] markers */\r
+  markerBrush[8],   /* [HGM] markers */\r
   whitePieceBrush, blackPieceBrush, iconBkgndBrush /*, outlineBrush*/;\r
 static POINT gridEndpoints[(BOARD_RANKS + BOARD_FILES + 2) * 2];\r
 static DWORD gridVertexCounts[BOARD_RANKS + BOARD_FILES + 2];\r
@@ -226,8 +226,6 @@ static struct { int x; int y; int mode; } backTextureSquareInfo[BOARD_RANKS][BOA
 #define oldDialog 0 /* cygwin doesn't define _winmajor; mingw does */\r
 #else\r
 \r
-\r
-\r
 #if defined(_winmajor)\r
 #define oldDialog (_winmajor < 4)\r
 #else\r
@@ -262,7 +260,8 @@ int dialogItems[][42] = {
 { DLG_TimeControl, IDC_Babble, OPT_TCUseMoves, OPT_TCUseInc, OPT_TCUseFixed, \r
   OPT_TCtext1, OPT_TCtext2, OPT_TCitext1, OPT_TCitext2, OPT_TCftext, GPB_Factors,   IDC_Factor1, IDC_Factor2, IDOK, IDCANCEL }, \r
 { DLG_LoadOptions, OPT_Autostep, OPT_AStext1, OPT_Exact, OPT_Subset, OPT_Struct, OPT_Material, OPT_Range, OPT_Difference,\r
-  OPT_elo1t, OPT_elo2t, OPT_datet, OPT_Stretch, OPT_Stretcht, OPT_Reversed, OPT_SearchMode, OPT_Mirror, OPT_thresholds, IDOK, IDCANCEL }, \r
+  OPT_elo1t, OPT_elo2t, OPT_datet, OPT_Stretch, OPT_Stretcht, OPT_Reversed, OPT_SearchMode, OPT_Mirror, OPT_thresholds,\r
+  OPT_Ranget, IDOK, IDCANCEL }, \r
 { DLG_SaveOptions, OPT_Autosave, OPT_AVPrompt, OPT_AVToFile, OPT_AVBrowse,\r
   801, OPT_PGN, OPT_Old, OPT_OutOfBookInfo, IDOK, IDCANCEL }, \r
 { 1536, 1090, IDC_Directories, 1089, 1091, IDOK, IDCANCEL, 1038, IDC_IndexNr, 1037 }, \r
@@ -787,12 +786,14 @@ void ThawUI()
  *\r
 \*---------------------------------------------------------------------------*/\r
 \r
+static void HandleMessage P((MSG *message));\r
+static HANDLE hAccelMain, hAccelNoAlt, hAccelNoICS;\r
+\r
 int APIENTRY\r
 WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,\r
        LPSTR lpCmdLine, int nCmdShow)\r
 {\r
   MSG msg;\r
-  HANDLE hAccelMain, hAccelNoAlt, hAccelNoICS;\r
 //  INITCOMMONCONTROLSEX ex;\r
 \r
   debugFP = stderr;\r
@@ -824,6 +825,17 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    0,    /* lowest message to examine */\r
                    0))   /* highest message to examine */\r
     {\r
+       HandleMessage(&msg);\r
+    }\r
+\r
+\r
+  return (msg.wParam); /* Returns the value from PostQuitMessage */\r
+}\r
+\r
+static void\r
+HandleMessage (MSG *message)\r
+{\r
+    MSG msg = *message;\r
 \r
       if(msg.message == WM_CHAR && msg.wParam == '\t') {\r
        // [HGM] navigate: switch between all windows with tab\r
@@ -891,7 +903,7 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
          if(currentElement < 5 && IsIconic(hwndMain))    ShowWindow(hwndMain, SW_RESTORE); // all open together\r
          SetFocus(h);\r
 \r
-         continue; // this message now has been processed\r
+         return; // this message now has been processed\r
        }\r
       }\r
 \r
@@ -910,14 +922,24 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
            if(chatHandle[i] && IsDialogMessage(chatHandle[i], &msg)) {\r
                done = 1; break;\r
        }\r
-       if(done) continue; // [HGM] chat: end patch\r
+       if(done) return; // [HGM] chat: end patch\r
        TranslateMessage(&msg); /* Translates virtual key codes */\r
        DispatchMessage(&msg);  /* Dispatches message to window */\r
       }\r
-    }\r
-\r
+}\r
 \r
-  return (msg.wParam); /* Returns the value from PostQuitMessage */\r
+void\r
+DoEvents ()\r
+{ /* Dispatch pending messages */\r
+  MSG msg;\r
+  while (PeekMessage(&msg, /* message structure */\r
+                    NULL, /* handle of window receiving the message */\r
+                    0,    /* lowest message to examine */\r
+                    0,    /* highest message to examine */\r
+                    PM_REMOVE))\r
+    {\r
+       HandleMessage(&msg);\r
+    }\r
 }\r
 \r
 /*---------------------------------------------------------------------------*\\r
@@ -1229,6 +1251,7 @@ InitMenuChecks()
   (void) CheckMenuItem(hmenu, IDM_SaveSettingsOnExit,\r
                       MF_BYCOMMAND|(saveSettingsOnExit ?\r
                                     MF_CHECKED : MF_UNCHECKED));\r
+  EnableMenuItem(hmenu, IDM_SaveSelected, MF_GRAYED);\r
 }\r
 \r
 //---------------------------------------------------------------------------------------------------------\r
@@ -1812,6 +1835,8 @@ static void CreatePieceMaskFromFont( HDC hdc_window, HDC hdc, int index )
     COLORREF chroma = RGB(0xFF,0x00,0xFF);\r
     RECT rc;\r
     SIZE sz;\r
+\r
+\r
     POINT pt;\r
     int backColor = whitePieceColor; \r
     int foreColor = blackPieceColor;\r
@@ -2195,6 +2220,7 @@ InsertInPalette(COLORREF color)
 VOID\r
 InitDrawingColors()\r
 {\r
+  int i;\r
   if (pLogPal == NULL) {\r
     /* Allocate enough memory for a logical palette with\r
      * PALETTESIZE entries and set the size and version fields\r
@@ -2226,8 +2252,9 @@ InitDrawingColors()
   blackPieceBrush = CreateSolidBrush(blackPieceColor);\r
   iconBkgndBrush = CreateSolidBrush(GetSysColor(COLOR_BACKGROUND));\r
   explodeBrush = CreateSolidBrush(highlightSquareColor); // [HGM] atomic\r
-  markerBrush = CreateSolidBrush(premoveHighlightColor); // [HGM] markers\r
-  /* [AS] Force rendering of the font-based pieces */\r
+    for(i=0; i<8;i++) markerBrush[i] = CreateSolidBrush(markerColor[i]); // [HGM] markers\r
+\r
+   /* [AS] Force rendering of the font-based pieces */\r
   if( fontBitmapSquareSize > 0 ) {\r
     fontBitmapSquareSize = 0;\r
   }\r
@@ -2299,9 +2326,10 @@ InitDrawingSizes(BoardSize boardSize, int flags)
   { // correct board size to one where built-in pieces exist\r
     if((v == VariantCapablanca || v == VariantGothic || v == VariantGrand || v == VariantCapaRandom || v == VariantJanus || v == VariantSuper)\r
        && (boardSize < SizePetite || boardSize > SizeBulky) // Archbishop and Chancellor available in entire middle range\r
+\r
       || (v == VariantShogi && boardSize != SizeModerate)   // Japanese-style Shogi\r
       ||  v == VariantKnightmate || v == VariantSChess || v == VariantXiangqi || v == VariantSpartan\r
-      ||  v == VariantShatranj || v == VariantMakruk || v == VariantGreat || v == VariantFairy ) {\r
+      ||  v == VariantShatranj || v == VariantMakruk || v == VariantGreat || v == VariantFairy || v == VariantLion ) {\r
       if(boardSize < SizeMediocre) boardSize = SizePetite; else\r
       if(boardSize > SizeModerate) boardSize = SizeBulky;  else\r
                                    boardSize = SizeMiddling;\r
@@ -2657,6 +2685,9 @@ InitDrawingSizes(BoardSize boardSize, int flags)
     pieceBitmap[0][WhiteUnicorn] = DoLoadBitmap(hInst, "u", squareSize, "s");\r
     pieceBitmap[1][WhiteUnicorn] = DoLoadBitmap(hInst, "u", squareSize, "o");\r
     pieceBitmap[2][WhiteUnicorn] = DoLoadBitmap(hInst, "u", squareSize, "w");\r
+    pieceBitmap[0][WhiteLion] = DoLoadBitmap(hInst, "ln", squareSize, "s");\r
+    pieceBitmap[1][WhiteLion] = DoLoadBitmap(hInst, "ln", squareSize, "o");\r
+    pieceBitmap[2][WhiteLion] = DoLoadBitmap(hInst, "ln", squareSize, "w");\r
 \r
     if(gameInfo.variant == VariantShogi) { /* promoted Gold represemtations */\r
       pieceBitmap[0][WhiteCannon] = DoLoadBitmap(hInst, "wp", squareSize, "s");\r
@@ -3278,6 +3309,9 @@ BOOL HasHighlightInfo()
     }\r
 \r
     return result;\r
+\r
+\r
+\r
 }\r
 \r
 BOOL IsDrawArrowEnabled()\r
@@ -3469,6 +3503,7 @@ DrawBoardOnDC(HDC hdc, Board board, HDC tmphdc)
             DisplayHoldingsCount(hdc, x, y, flipView, (int) board[row][column]);\r
       else if( column == BOARD_RGHT) /* right align */\r
             DisplayHoldingsCount(hdc, x, y, !flipView, (int) board[row][column]);\r
+      else if( piece == DarkSquare) DisplayHoldingsCount(hdc, x, y, 0, 0);\r
       else\r
       if (appData.monoMode) {\r
         if (piece == EmptySquare) {\r
@@ -3651,7 +3686,7 @@ void DrawSeekDot(int x, int y, int color)
 {\r
        int square = color & 0x80;\r
        HBRUSH oldBrush = SelectObject(hdcSeek, \r
-                       color == 0 ? markerBrush : color == 1 ? darkSquareBrush : explodeBrush);\r
+                       color == 0 ? markerBrush[1] : color == 1 ? darkSquareBrush : explodeBrush);\r
        color &= 0x7F;\r
        if(square)\r
            Rectangle(hdcSeek, boardRect.left+x - squareSize/9, boardRect.top+y - squareSize/9,\r
@@ -3944,8 +3979,7 @@ HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board)
   for (row = 0; row < BOARD_HEIGHT; row++) {\r
     for (column = 0; column < BOARD_WIDTH; column++) {\r
        if (marker[row][column]) { // marker changes only occur with full repaint!\r
-           HBRUSH oldBrush = SelectObject(hdcmem, \r
-                       marker[row][column] == 2 ? markerBrush : explodeBrush);\r
+           HBRUSH oldBrush = SelectObject(hdcmem, markerBrush[marker[row][column]-1]);\r
            SquareToPos(row, column, &x, &y);\r
            Ellipse(hdcmem, x + squareSize/4, y + squareSize/4,\r
                          x + 3*squareSize/4, y + 3*squareSize/4);\r
@@ -3971,6 +4005,7 @@ HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board)
     else\r
     if(dragInfo.from.x == BOARD_RGHT+1 )\r
                  board[dragInfo.from.y][dragInfo.from.x-1]++;\r
+\r
     board[dragInfo.from.y][dragInfo.from.x] = dragged_piece;\r
     x = dragInfo.pos.x - squareSize / 2;\r
     y = dragInfo.pos.y - squareSize / 2;\r
@@ -4301,8 +4336,10 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       } else if (PtInRect((LPRECT) &blackRect, pt)) {\r
        ClockClick(!flipClock); break;\r
       }\r
+    if(dragging) { // [HGM] lion: don't destroy dragging info if we are already dragging\r
       dragInfo.start.x = dragInfo.start.y = -1;\r
       dragInfo.from = dragInfo.start;\r
+    }\r
     if(fromX == -1 && frozen) { // not sure where this is for\r
                fromX = fromY = -1; \r
       DrawPosition(forceFullRepaint || FALSE, NULL); /* [AS] */\r
@@ -4322,7 +4359,7 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
     if(PromoScroll(pt.x - boardRect.left, pt.y - boardRect.top)) break;\r
     MovePV(pt.x - boardRect.left, pt.y - boardRect.top, boardRect.bottom - boardRect.top);\r
     if ((appData.animateDragging || appData.highlightDragging)\r
-       && (wParam & MK_LBUTTON)\r
+       && (wParam & MK_LBUTTON || dragging == 2)\r
        && dragInfo.from.x >= 0) \r
     {\r
       BOOL full_repaint = FALSE;\r
@@ -4331,7 +4368,7 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
        dragInfo.pos = pt;\r
       }\r
       if (appData.highlightDragging) {\r
-       SetHighlights(fromX, fromY, x, y);\r
+       HoverEvent(highlightInfo.sq[1].x, highlightInfo.sq[1].y, x, y);\r
         if( IsDrawArrowEnabled() && (x < 0 || x >= BOARD_WIDTH || y < 0 || y >= BOARD_HEIGHT) ) {\r
             full_repaint = TRUE;\r
         }\r
@@ -4466,6 +4503,8 @@ ButtonProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
   return CallWindowProc(buttonDesc[i].wndproc, hwnd, message, wParam, lParam);\r
 }\r
 \r
+static int promoStyle;\r
+\r
 /* Process messages for Promotion dialog box */\r
 LRESULT CALLBACK\r
 Promotion(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
@@ -4473,6 +4512,7 @@ Promotion(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
   char promoChar;\r
 \r
   switch (message) {\r
+\r
   case WM_INITDIALOG: /* message: initialize dialog box */\r
     /* Center the dialog over the application window */\r
     CenterWindow(hDlg, GetWindow(hDlg, GW_OWNER));\r
@@ -4496,13 +4536,9 @@ Promotion(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
          PieceToChar(BlackMarshall) != '~')   ) ?\r
               SW_SHOW : SW_HIDE);\r
     /* [HGM] Hide B & R button in Shogi, use Q as promote, N as defer */\r
-    ShowWindow(GetDlgItem(hDlg, PB_Rook),\r
-       gameInfo.variant != VariantShogi ?\r
-              SW_SHOW : SW_HIDE);\r
-    ShowWindow(GetDlgItem(hDlg, PB_Bishop), \r
-       gameInfo.variant != VariantShogi ?\r
-              SW_SHOW : SW_HIDE);\r
-    if(gameInfo.variant == VariantShogi) {\r
+    ShowWindow(GetDlgItem(hDlg, PB_Rook),   !promoStyle ? SW_SHOW : SW_HIDE);\r
+    ShowWindow(GetDlgItem(hDlg, PB_Bishop), !promoStyle ? SW_SHOW : SW_HIDE);\r
+    if(promoStyle) {\r
         SetDlgItemText(hDlg, PB_Queen, "YES");\r
         SetDlgItemText(hDlg, PB_Knight, "NO");\r
         SetWindowText(hDlg, "Promote?");\r
@@ -4523,7 +4559,7 @@ Promotion(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
       promoChar = gameInfo.variant == VariantSuper ? PieceToChar(BlackSilver) : PieceToChar(BlackKing);\r
       break;\r
     case PB_Queen:\r
-      promoChar = gameInfo.variant == VariantShogi ? '+' : ToLower(PieceToChar(WhiteOnMove(currentMove) ? WhiteQueen : BlackQueen));\r
+      promoChar = promoStyle ? '+' : ToLower(PieceToChar(WhiteOnMove(currentMove) ? WhiteQueen : BlackQueen));\r
       break;\r
     case PB_Rook:\r
       promoChar = ToLower(PieceToChar(WhiteOnMove(currentMove) ? WhiteRook : BlackRook));\r
@@ -4540,7 +4576,8 @@ Promotion(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
       promoChar = ToLower(PieceToChar(WhiteOnMove(currentMove) ? WhiteAngel : BlackAngel));\r
       break;\r
     case PB_Knight:\r
-      promoChar = gameInfo.variant == VariantShogi ? '=' : PieceToChar(WhiteOnMove(currentMove) ? WhiteKnight : BlackKnight);\r
+      promoChar = gameInfo.variant == VariantShogi ? '=' : promoStyle ? NULLCHAR : \r
+                  ToLower(PieceToChar(WhiteOnMove(currentMove) ? WhiteKnight : BlackKnight));\r
       break;\r
     default:\r
       return FALSE;\r
@@ -4571,8 +4608,9 @@ PromotionPopup(HWND hwnd)
 }\r
 \r
 void\r
-PromotionPopUp()\r
+PromotionPopUp(char choice)\r
 {\r
+  promoStyle = (choice == '+');\r
   DrawPosition(TRUE, NULL);\r
   PromotionPopup(hwndMain);\r
 }\r
@@ -4710,7 +4748,7 @@ LRESULT CALLBACK
 WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)\r
 {\r
   FARPROC lpProc;\r
-  int wmId, wmEvent;\r
+  int wmId;\r
   char *defName;\r
   FILE *f;\r
   UINT number;\r
@@ -4789,6 +4827,7 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       nnew = RealizePalette(hdc);\r
       if (nnew > 0) {\r
        paletteChanged = TRUE;\r
+\r
         InvalidateRect(hwnd, &boardRect, FALSE);\r
       }\r
       ReleaseDC(hwnd, hdc);\r
@@ -4812,7 +4851,6 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 \r
   case WM_COMMAND: /* message: command from application menu */\r
     wmId    = LOWORD(wParam);\r
-    wmEvent = HIWORD(wParam);\r
 \r
     switch (wmId) {\r
     case IDM_NewGame:\r
@@ -4905,6 +4943,16 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       }\r
       break;\r
 \r
+    case IDM_SaveSelected:\r
+      f = OpenFileDialog(hwnd, "a", "",\r
+                        "pgn",\r
+                        GAME_FILT,\r
+                        _("Save Game to File"), NULL, fileTitle, NULL);\r
+      if (f != NULL) {\r
+       SaveSelected(f, 0, "");\r
+      }\r
+      break;\r
+\r
     case IDM_CreateBook:\r
       CreateBookEvent();\r
       break;\r
@@ -5131,6 +5179,7 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       break;\r
 \r
     case IDM_Rematch:\r
+\r
       RematchEvent();\r
       break;\r
 \r
@@ -5689,6 +5738,7 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
   default:     /* Passes it on if unprocessed */\r
     return (DefWindowProc(hwnd, message, wParam, lParam));\r
   }\r
+\r
   return 0;\r
 }\r
 \r
@@ -6288,6 +6338,7 @@ StartupDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
        SwapEngines(singleList); // temporarily swap first and second, to load a second 'first', ...\r
        ParseArgs(StringGet, &p);\r
        SwapEngines(singleList); // ... and then make it 'second'\r
+\r
        appData.noChessProgram = FALSE;\r
        appData.icsActive = FALSE;\r
       } else if (IsDlgButtonChecked(hDlg, OPT_ChessServer)) {\r
@@ -6378,7 +6429,7 @@ LRESULT CALLBACK
 CommentDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
 {\r
   static HANDLE hwndText = NULL;\r
-  int len, newSizeX, newSizeY, flags;\r
+  int len, newSizeX, newSizeY;\r
   static int sizeX, sizeY;\r
   char *str;\r
   RECT rect;\r
@@ -6406,7 +6457,6 @@ CommentDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
     /* Size and position the dialog */\r
     if (!commentDialog) {\r
       commentDialog = hDlg;\r
-      flags = SWP_NOZORDER;\r
       GetClientRect(hDlg, &rect);\r
       sizeX = rect.right;\r
       sizeY = rect.bottom;\r
@@ -6743,7 +6793,6 @@ ErrorPopDown()
 LRESULT CALLBACK\r
 ErrorDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
 {\r
-  HANDLE hwndText;\r
   RECT rChild;\r
 \r
   switch (message) {\r
@@ -6767,7 +6816,6 @@ ErrorDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
 \r
     errorDialog = hDlg;\r
     SetWindowText(hDlg, errorTitle);\r
-    hwndText = GetDlgItem(hDlg, OPT_ErrorText);\r
     SetDlgItemText(hDlg, OPT_ErrorText, errorMessage);\r
     return FALSE;\r
 \r
@@ -6793,7 +6841,6 @@ HWND gothicDialog = NULL;
 LRESULT CALLBACK\r
 GothicDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
 {\r
-  HANDLE hwndText;\r
   RECT rChild;\r
   int height = GetSystemMetrics(SM_CYCAPTION)+GetSystemMetrics(SM_CYFRAME);\r
 \r
@@ -6812,7 +6859,6 @@ GothicDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
     */\r
     gothicDialog = hDlg;\r
     SetWindowText(hDlg, errorTitle);\r
-    hwndText = GetDlgItem(hDlg, OPT_ErrorText);\r
     SetDlgItemText(hDlg, OPT_ErrorText, errorMessage);\r
     return FALSE;\r
 \r
@@ -6865,6 +6911,7 @@ GothicPopUp(char *title, VariantClass variant)
 static char *history[HISTORY_SIZE];\r
 int histIn = 0, histP = 0;\r
 \r
+\r
 VOID\r
 SaveInHistory(char *cmd)\r
 {\r
@@ -6877,6 +6924,7 @@ SaveInHistory(char *cmd)
   histIn = (histIn + 1) % HISTORY_SIZE;\r
   if (history[histIn] != NULL) {\r
     free(history[histIn]);\r
+\r
     history[histIn] = NULL;\r
   }\r
   histP = histIn;\r
@@ -7687,6 +7735,7 @@ DoWriteFile(HANDLE hFile, char *buf, int count, DWORD *outCount,
       else\r
        err = GetLastError();\r
     }\r
+\r
   }\r
   return err;\r
 }\r
@@ -8552,6 +8601,7 @@ HWND gameListOptionsDialog;
 \r
 // low-level front-end: clear text edit / list widget\r
 void\r
+\r
 GLT_ClearList()\r
 {\r
     SendDlgItemMessage( gameListOptionsDialog, IDC_GameListTags, LB_RESETCONTENT, 0, 0 );\r
@@ -8743,6 +8793,13 @@ EditCommentPopUp(int index, char *title, char *str)
 }\r
 \r
 \r
+int\r
+Roar()\r
+{\r
+  MyPlaySound(&sounds[(int)SoundRoar]);\r
+  return 1;\r
+}\r
+\r
 VOID\r
 RingBell()\r
 {\r
@@ -8900,6 +8957,7 @@ DisplayBlackClock(long timeRemaining, int highlight)
   HDC hdc;\r
   char *flag = blackFlag && gameMode == TwoMachinesPlay ? "(!)" : "";\r
 \r
+\r
   if(appData.noGUI) return;\r
   hdc = GetDC(hwndMain);\r
   if (!IsIconic(hwndMain)) {\r
@@ -9211,15 +9269,15 @@ DestroyChildProcess(ProcRef pr, int/*boolean*/ signal)
     /*!!if (signal) GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT, cp->pid);*/\r
 \r
     /* [AS] Special termination modes for misbehaving programs... */\r
-    if( signal == 9 ) { \r
+    if( signal & 8 ) { \r
         result = TerminateProcess( cp->hProcess, 0 );\r
 \r
         if ( appData.debugMode) {\r
             fprintf( debugFP, "Terminating process %lu, result=%d\n", cp->pid, result );\r
         }\r
     }\r
-    else if( signal == 10 ) {\r
-        DWORD dw = WaitForSingleObject( cp->hProcess, 3*1000 ); // Wait 3 seconds at most\r
+    else if( signal & 4 ) {\r
+        DWORD dw = WaitForSingleObject( cp->hProcess, appData.delayAfterQuit*1000 + 50 ); // Wait 3 seconds at most\r
 \r
         if( dw != WAIT_OBJECT_0 ) {\r
             result = TerminateProcess( cp->hProcess, 0 );\r
@@ -9918,16 +9976,23 @@ AnimateMove(board, fromX, fromY, toX, toY)
      int toY;\r
 {\r
   ChessSquare piece;\r
+  int x = toX, y = toY;\r
   POINT start, finish, mid;\r
   POINT frames[kFactor * 2 + 1];\r
   int nFrames, n;\r
 \r
+  if(killX >= 0 && IS_LION(board[fromY][fromX])) Roar();\r
+\r
   if (!appData.animate) return;\r
   if (doingSizing) return;\r
   if (fromY < 0 || fromX < 0) return;\r
   piece = board[fromY][fromX];\r
   if (piece >= EmptySquare) return;\r
 \r
+  if(killX >= 0) toX = killX, toY = killY; // [HGM] lion: first to kill square\r
+\r
+again:\r
+\r
   ScreenSquare(fromX, fromY, &start);\r
   ScreenSquare(toX, toY, &finish);\r
 \r
@@ -9966,6 +10031,9 @@ AnimateMove(board, fromX, fromY, toX, toY)
   }\r
   animInfo.pos = finish;\r
   DrawPosition(FALSE, NULL);\r
+\r
+  if(toX != x || toY != y) { fromX = toX; fromY = toY; toX = x; toY = y; goto again; } // second leg\r
+\r
   animInfo.piece = EmptySquare;\r
   Explode(board, fromX, fromY, toX, toY);\r
 }\r
@@ -10043,6 +10111,7 @@ int flock(int fid, int code)
     ov.OffsetHigh = 0;\r
     switch(code) {\r
       case 1: LockFileEx(hFile, LOCKFILE_EXCLUSIVE_LOCK, 0, 1024, 0, &ov); break;   // LOCK_SH\r
+\r
       case 2: LockFileEx(hFile, LOCKFILE_EXCLUSIVE_LOCK, 0, 1024, 0, &ov); break;   // LOCK_EX\r
       case 3: UnlockFileEx(hFile, 0, 1024, 0, &ov); break; // LOCK_UN\r
       default: return -1;\r
index b52ed5a..7c48808 100644 (file)
@@ -90,7 +90,7 @@ BEGIN
     PUSHBUTTON      "Cancel",IDCANCEL,195,190,40,14\r
 END\r
 \r
-DLG_LoadOptions DIALOG DISCARDABLE  10, 18, 170, 261\r
+DLG_LoadOptions DIALOG DISCARDABLE  10, 18, 170, 281\r
 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU\r
 CAPTION "Load Game Options"\r
 FONT 8, "MS Sans Serif"\r
@@ -108,25 +108,27 @@ BEGIN
     EDITTEXT        OPT_date,16,90,28,14,ES_AUTOHSCROLL\r
     LTEXT           "co&nsecutive positions",OPT_Stretcht,46,114,94,8,NOT WS_GROUP\r
     EDITTEXT        OPT_Stretch,16,110,28,14,ES_AUTOHSCROLL\r
+    LTEXT           "final piece count",OPT_Ranget,46,134,94,8,NOT WS_GROUP\r
+    EDITTEXT        OPT_Counts,16,130,28,14,ES_AUTOHSCROLL\r
     CONTROL         "Match exact &position",OPT_Exact,"Button",\r
-                    BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,6,136,159,10\r
+                    BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,6,156,159,10\r
     CONTROL         "Match if position is s&ubset",OPT_Subset,"Button",\r
-                    BS_AUTORADIOBUTTON | WS_TABSTOP,6,149,159,10\r
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,6,169,159,10\r
     CONTROL         "Match material with e&xact pawn structure",OPT_Struct,"Button",\r
-                    BS_AUTORADIOBUTTON | WS_TABSTOP,6,162,159,10\r
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,6,182,159,10\r
     CONTROL         "Match &material",OPT_Material,"Button",\r
-                    BS_AUTORADIOBUTTON | WS_TABSTOP,6,175,159,10\r
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,6,195,159,10\r
     CONTROL         "Material &range (upper board-half is optional)",OPT_Range,"Button",\r
-                    BS_AUTORADIOBUTTON | WS_TABSTOP,6,188,159,10\r
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,6,208,159,10\r
     CONTROL         "Material &difference (optional material balanced)",OPT_Difference,"Button",\r
-                    BS_AUTORADIOBUTTON | WS_TABSTOP,6,201,159,10\r
-    GROUPBOX        "Search Mode: ",OPT_SearchMode,3,126,164,87,WS_GROUP\r
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,6,221,159,10\r
+    GROUPBOX        "Search Mode: ",OPT_SearchMode,3,146,164,87,WS_GROUP\r
     CONTROL         "Also match reversed &colors",OPT_Reversed,"Button",\r
-                    BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,4,214,160,10\r
+                    BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,4,234,160,10\r
     CONTROL         "Also match &left-right mirror image",OPT_Mirror,"Button",\r
-                    BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,4,227,160,10\r
-    PUSHBUTTON      "OK",IDOK,56,242,50,14,WS_GROUP\r
-    PUSHBUTTON      "Cancel",IDCANCEL,112,242,50,14\r
+                    BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,4,247,160,10\r
+    PUSHBUTTON      "OK",IDOK,56,262,50,14,WS_GROUP\r
+    PUSHBUTTON      "Cancel",IDCANCEL,112,262,50,14\r
 END\r
 \r
 DLG_SaveOptions DIALOG DISCARDABLE  6, 17, 218, 119\r
@@ -275,16 +277,17 @@ BEGIN
     EDITTEXT        IDC_GameListFilter,201,136,78,14,ES_AUTOHSCROLL\r
 END\r
 \r
-DLG_EditTags DIALOG DISCARDABLE  6, 18, 167, 140\r
+DLG_EditTags DIALOG DISCARDABLE  6, 18, 223, 140\r
 STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME\r
 CAPTION "Edit Tags"\r
 FONT 8, "MS Sans Serif"\r
 BEGIN\r
-    PUSHBUTTON      "OK",IDOK,58,122,50,14\r
-    PUSHBUTTON      "Cancel",OPT_TagsCancel,114,122,50,14\r
+    PUSHBUTTON      "OK",IDOK,114,122,50,14\r
+    PUSHBUTTON      "Cancel",OPT_TagsCancel,170,122,50,14\r
+    PUSHBUTTON      "Save",OPT_TagsSave,58,122,50,14\r
     CONTROL         "",OPT_TagsText,"RICHEDIT",ES_MULTILINE | ES_AUTOVSCROLL | \r
                     ES_AUTOHSCROLL | ES_WANTRETURN | WS_BORDER | WS_VSCROLL | \r
-                    WS_HSCROLL | WS_TABSTOP,2,2,162,115\r
+                    WS_HSCROLL | WS_TABSTOP,2,2,218,115\r
     PUSHBUTTON      "&Edit",OPT_EditTags,2,122,50,14\r
 END\r
 \r
@@ -444,7 +447,7 @@ BEGIN
     PUSHBUTTON      "Cancel",IDCANCEL,208,86,50,14\r
 END\r
 \r
-DLG_GeneralOptions DIALOG DISCARDABLE  0, 0, 300, 197\r
+DLG_GeneralOptions DIALOG DISCARDABLE  0, 0, 300, 225\r
 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
 CAPTION "General Options"\r
 FONT 8, "MS Sans Serif"\r
@@ -497,8 +500,18 @@ BEGIN
                     "Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,160,151,10\r
     CONTROL         "One-Click Move",OPT_SmartMove,\r
                     "Button",BS_AUTOCHECKBOX | WS_TABSTOP,156,160,151,10\r
-    DEFPUSHBUTTON   "OK",IDOK,180,178,50,14\r
-    PUSHBUTTON      "Cancel",IDCANCEL,236,178,50,14\r
+    CONTROL         "auto-Display Tags",OPT_AutoTags,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,174,151,10\r
+    CONTROL         "auto-Display Comment",OPT_AutoComment,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,156,174,151,10\r
+    CONTROL         "Headers in Engine Output",OPT_Headers,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,188,151,10\r
+    CONTROL         "Enable Variation Trees",OPT_Variations,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,156,188,151,10\r
+    CONTROL         "Play Analysis PV on Click",OPT_AutoExtend,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,202,151,10\r
+    DEFPUSHBUTTON   "OK",IDOK,180,206,50,14\r
+    PUSHBUTTON      "Cancel",IDCANCEL,236,206,50,14\r
 END\r
 \r
 DLG_IcsOptions DIALOGEX 0, 0, 302, 268\r
@@ -708,6 +721,8 @@ BEGIN
                     70,10\r
     CONTROL         "&atomic",OPT_VariantAtomic,"Button",BS_AUTORADIOBUTTON,\r
                     9,104,70,10\r
+    CONTROL         "&Mighty Lion",OPT_VariantLion,"Button",BS_AUTORADIOBUTTON,\r
+                    9,114,70,10\r
     CONTROL         "cra&zyhouse",OPT_VariantCrazyhouse,"Button",BS_AUTORADIOBUTTON,80,14,\r
                     70,10\r
     CONTROL         "&bughouse",OPT_VariantBughouse,"Button",BS_AUTORADIOBUTTON,80,24,70,\r
@@ -728,6 +743,8 @@ BEGIN
                     94,70,10\r
     CONTROL         "&makruk",OPT_VariantMakruk,"Button",BS_AUTORADIOBUTTON,80,\r
                     104,70,10\r
+    CONTROL         "&ASEAN",OPT_VariantASEAN,"Button",BS_AUTORADIOBUTTON,80,\r
+                    114,70,10\r
     CONTROL         "&gothic",OPT_VariantGothic,"Button",BS_AUTORADIOBUTTON,154,14,\r
                     70,10\r
     CONTROL         "&capablanca",OPT_VariantCapablanca,"Button",BS_AUTORADIOBUTTON,154,\r
@@ -750,16 +767,25 @@ BEGIN
                     10\r
     CONTROL         "&xiangqi",OPT_VariantXiangqi,"Button",BS_AUTORADIOBUTTON,154,114,70,\r
                     10\r
-    GROUPBOX        "Variant",GPB_Variant,4,4,215,125\r
-    LTEXT           "Board size:",GPB_Board,10,165,40,8,WS_TABSTOP\r
-    LTEXT           "ranks",IDC_Height,77,165,38,8\r
-    EDITTEXT        IDC_Ranks,60,161,14,14,ES_AUTOHSCROLL\r
-    LTEXT           "files",IDC_Width,133,165,80,8\r
-    EDITTEXT        IDC_Files,116,161,14,14,ES_AUTOHSCROLL\r
-    LTEXT           "Holdings with room for:",IDC_Hand,10,183,90,8\r
-    EDITTEXT        IDC_Holdings,93,179,14,14,ES_AUTOHSCROLL\r
-    LTEXT           "pieces",IDC_Pieces,110,183,100,8\r
-    LTEXT           "('-1' means defaults for selected variant)",IDC_Def,10,201,210,8\r
+    CONTROL         "",OPT_EngineVariant+0,"Button",BS_AUTORADIOBUTTON,9,134,70,10\r
+    CONTROL         "",OPT_EngineVariant+1,"Button",BS_AUTORADIOBUTTON,80,134,70,10\r
+    CONTROL         "",OPT_EngineVariant+2,"Button",BS_AUTORADIOBUTTON,154,134,70,10\r
+    CONTROL         "",OPT_EngineVariant+3,"Button",BS_AUTORADIOBUTTON,9,144,70,10\r
+    CONTROL         "",OPT_EngineVariant+4,"Button",BS_AUTORADIOBUTTON,80,144,70,10\r
+    CONTROL         "",OPT_EngineVariant+5,"Button",BS_AUTORADIOBUTTON,154,144,70,10\r
+    CONTROL         "",OPT_EngineVariant+6,"Button",BS_AUTORADIOBUTTON,9,154,70,10\r
+    CONTROL         "",OPT_EngineVariant+7,"Button",BS_AUTORADIOBUTTON,80,154,70,10\r
+    CONTROL         "",OPT_EngineVariant+8,"Button",BS_AUTORADIOBUTTON,154,154,70,10\r
+    GROUPBOX        "Variant",GPB_Variant,4,4,215,165\r
+    LTEXT           "Board size:",GPB_Board,10,183,40,8,WS_TABSTOP\r
+    LTEXT           "ranks",IDC_Height,77,183,38,8\r
+    EDITTEXT        IDC_Ranks,60,179,14,14,ES_AUTOHSCROLL\r
+    LTEXT           "files",IDC_Width,133,183,80,8\r
+    EDITTEXT        IDC_Files,116,179,14,14,ES_AUTOHSCROLL\r
+    LTEXT           "Holdings with room for:",IDC_Hand,10,201,90,8\r
+    EDITTEXT        IDC_Holdings,93,197,14,14,ES_AUTOHSCROLL\r
+    LTEXT           "pieces",IDC_Pieces,110,201,100,8\r
+    LTEXT           "('-1' means defaults for selected variant)",IDC_Def,10,217,210,8\r
     DEFPUSHBUTTON   "OK",IDOK,114,232,50,14\r
     PUSHBUTTON      "Cancel",IDCANCEL,170,232,50,14\r
 END\r
@@ -975,6 +1001,8 @@ BEGIN
     PUSHBUTTON      "...",IDC_BrowseForEGTB,226,40,17,14\r
     LTEXT           "EGTB Size (MB):",IDC_Cache,2,62,78,8\r
     EDITTEXT        IDC_SizeOfEGTB,82,58,40,14,ES_AUTOHSCROLL\r
+    CONTROL         "Ponder Next Move",OPT_PonderNextMove,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,136,62,100,10\r
     CONTROL         "Use Book:",IDC_UseBook,"Button",BS_AUTOCHECKBOX | \r
                     WS_TABSTOP,2,80,78,10\r
     EDITTEXT        IDC_BookFile,82,76,140,14,ES_AUTOHSCROLL\r
@@ -1166,6 +1194,7 @@ BEGIN
         MENUITEM "S&ave Position...\tCtrl+Shift+S",IDM_SavePosition\r
         MENUITEM SEPARATOR\r
         MENUITEM "Save as &Diagram...",         IDM_SaveDiagram\r
+        MENUITEM "Save Selected Games...",      IDM_SaveSelected\r
         MENUITEM "Save Games to &Book",         IDM_CreateBook\r
         MENUITEM SEPARATOR\r
         MENUITEM "&Quit",                       IDM_Exit\r
@@ -1900,6 +1929,7 @@ V72O                    BITMAP  MOVEABLE PURE   "bitmaps/v72o.bmp"
 S72O                    BITMAP  MOVEABLE PURE   "bitmaps/s72o.bmp"\r
 L72O                    BITMAP  MOVEABLE PURE   "bitmaps/l72o.bmp"\r
 DK72O                   BITMAP  MOVEABLE PURE   "bitmaps/dk72o.bmp"\r
+LN72O                   BITMAP  MOVEABLE PURE   "bitmaps/ln72o.bmp"\r
 WP72O                   BITMAP  MOVEABLE PURE   "bitmaps/wp72o.bmp"\r
 WN72O                   BITMAP  MOVEABLE PURE   "bitmaps/wn72o.bmp"\r
 WL72O                   BITMAP  MOVEABLE PURE   "bitmaps/wl72o.bmp"\r
@@ -1920,6 +1950,7 @@ V72S                    BITMAP  MOVEABLE PURE   "bitmaps/v72s.bmp"
 S72S                    BITMAP  MOVEABLE PURE   "bitmaps/s72s.bmp"\r
 L72S                    BITMAP  MOVEABLE PURE   "bitmaps/l72s.bmp"\r
 DK72S                   BITMAP  MOVEABLE PURE   "bitmaps/dk72s.bmp"\r
+LN72S                   BITMAP  MOVEABLE PURE   "bitmaps/ln72s.bmp"\r
 WP72S                   BITMAP  MOVEABLE PURE   "bitmaps/wp72s.bmp"\r
 WN72S                   BITMAP  MOVEABLE PURE   "bitmaps/wn72s.bmp"\r
 WL72S                   BITMAP  MOVEABLE PURE   "bitmaps/wl72s.bmp"\r
@@ -1940,6 +1971,7 @@ V72W                    BITMAP  MOVEABLE PURE   "bitmaps/v72w.bmp"
 S72W                    BITMAP  MOVEABLE PURE   "bitmaps/s72w.bmp"\r
 L72W                    BITMAP  MOVEABLE PURE   "bitmaps/l72w.bmp"\r
 DK72W                   BITMAP  MOVEABLE PURE   "bitmaps/dk72w.bmp"\r
+LN72W                   BITMAP  MOVEABLE PURE   "bitmaps/ln72w.bmp"\r
 E49O                    BITMAP  MOVEABLE PURE   "bitmaps/e49o.bmp"\r
 A49O                    BITMAP  MOVEABLE PURE   "bitmaps/a49o.bmp"\r
 AA49O                   BITMAP  MOVEABLE PURE   "bitmaps/as49o.bmp"\r
@@ -1956,6 +1988,7 @@ V49O                    BITMAP  MOVEABLE PURE   "bitmaps/v49o.bmp"
 S49O                    BITMAP  MOVEABLE PURE   "bitmaps/s49o.bmp"\r
 L49O                    BITMAP  MOVEABLE PURE   "bitmaps/l49o.bmp"\r
 DK49O                   BITMAP  MOVEABLE PURE   "bitmaps/dk49o.bmp"\r
+LN49O                   BITMAP  MOVEABLE PURE   "bitmaps/ln49o.bmp"\r
 WP49O                   BITMAP  MOVEABLE PURE   "bitmaps/wp49o.bmp"\r
 WN49O                   BITMAP  MOVEABLE PURE   "bitmaps/wn49o.bmp"\r
 WL49O                   BITMAP  MOVEABLE PURE   "bitmaps/wl49o.bmp"\r
@@ -1976,6 +2009,7 @@ V49S                    BITMAP  MOVEABLE PURE   "bitmaps/v49s.bmp"
 S49S                    BITMAP  MOVEABLE PURE   "bitmaps/s49s.bmp"\r
 L49S                    BITMAP  MOVEABLE PURE   "bitmaps/l49s.bmp"\r
 DK49S                   BITMAP  MOVEABLE PURE   "bitmaps/dk49s.bmp"\r
+LN49S                   BITMAP  MOVEABLE PURE   "bitmaps/ln49s.bmp"\r
 WP49S                   BITMAP  MOVEABLE PURE   "bitmaps/wp49s.bmp"\r
 WN49S                   BITMAP  MOVEABLE PURE   "bitmaps/wn49s.bmp"\r
 WL49S                   BITMAP  MOVEABLE PURE   "bitmaps/wl49s.bmp"\r
@@ -1996,6 +2030,7 @@ V49W                    BITMAP  MOVEABLE PURE   "bitmaps/v49w.bmp"
 S49W                    BITMAP  MOVEABLE PURE   "bitmaps/s49w.bmp"\r
 L49W                    BITMAP  MOVEABLE PURE   "bitmaps/l49w.bmp"\r
 DK49W                   BITMAP  MOVEABLE PURE   "bitmaps/dk49w.bmp"\r
+LN49W                   BITMAP  MOVEABLE PURE   "bitmaps/ln49w.bmp"\r
 A33O                    BITMAP  MOVEABLE PURE   "bitmaps/a33o.bmp"\r
 AA33O                   BITMAP  MOVEABLE PURE   "bitmaps/as33o.bmp"\r
 C33O                    BITMAP  MOVEABLE PURE   "bitmaps/c33o.bmp"\r
@@ -2010,6 +2045,7 @@ W33O                    BITMAP  MOVEABLE PURE   "bitmaps/w33o.bmp"
 M33O                    BITMAP  MOVEABLE PURE   "bitmaps/m33o.bmp"\r
 O33O                    BITMAP  MOVEABLE PURE   "bitmaps/o33o.bmp"\r
 DK33O                   BITMAP  MOVEABLE PURE   "bitmaps/dk33o.bmp"\r
+LN33O                   BITMAP  MOVEABLE PURE   "bitmaps/ln33o.bmp"\r
 WP33O                   BITMAP  MOVEABLE PURE   "bitmaps/wp33o.bmp"\r
 WN33O                   BITMAP  MOVEABLE PURE   "bitmaps/wn33o.bmp"\r
 WL33O                   BITMAP  MOVEABLE PURE   "bitmaps/wl33o.bmp"\r
@@ -2028,6 +2064,7 @@ W33W                    BITMAP  MOVEABLE PURE   "bitmaps/w33w.bmp"
 M33W                    BITMAP  MOVEABLE PURE   "bitmaps/m33w.bmp"\r
 O33W                    BITMAP  MOVEABLE PURE   "bitmaps/o33w.bmp"\r
 DK33W                   BITMAP  MOVEABLE PURE   "bitmaps/dk33w.bmp"\r
+LN33W                   BITMAP  MOVEABLE PURE   "bitmaps/ln33w.bmp"\r
 A33S                    BITMAP  MOVEABLE PURE   "bitmaps/a33s.bmp"\r
 AA33S                   BITMAP  MOVEABLE PURE   "bitmaps/as33s.bmp"\r
 C33S                    BITMAP  MOVEABLE PURE   "bitmaps/c33s.bmp"\r
@@ -2042,6 +2079,7 @@ W33S                    BITMAP  MOVEABLE PURE   "bitmaps/w33s.bmp"
 M33S                    BITMAP  MOVEABLE PURE   "bitmaps/m33s.bmp"\r
 O33S                    BITMAP  MOVEABLE PURE   "bitmaps/o33s.bmp"\r
 DK33S                   BITMAP  MOVEABLE PURE   "bitmaps/dk33s.bmp"\r
+LN33S                   BITMAP  MOVEABLE PURE   "bitmaps/ln33s.bmp"\r
 WP33S                   BITMAP  MOVEABLE PURE   "bitmaps/wp33s.bmp"\r
 WN33S                   BITMAP  MOVEABLE PURE   "bitmaps/wn33s.bmp"\r
 WL33S                   BITMAP  MOVEABLE PURE   "bitmaps/wl33s.bmp"\r
@@ -2208,6 +2246,7 @@ SSHOUT                  WAVE    DISCARDABLE     "sounds/sshout.wav"
 TELL                    WAVE    DISCARDABLE     "sounds/tell.wav"\r
 UNFINISHED              WAVE    DISCARDABLE     "sounds/unfinished.wav"\r
 WIN                     WAVE    DISCARDABLE     "sounds/win.wav"\r
+ROAR                    WAVE    DISCARDABLE     "sounds/roar.wav"\r
 \r
 /////////////////////////////////////////////////////////////////////////////\r
 //\r
index 84733de..77e6eea 100644 (file)
@@ -210,6 +210,11 @@ GeneralOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
     CHECK_BOX(OPT_HighlightMoveArrow, appData.highlightMoveWithArrow);\r
     CHECK_BOX(OPT_AutoLogo, appData.autoLogo); // [HGM] logo\r
     CHECK_BOX(OPT_SmartMove, appData.oneClick); // [HGM] one-click\r
+    CHECK_BOX(OPT_AutoTags, appData.autoDisplayTags); // [HGM]\r
+    CHECK_BOX(OPT_AutoComment, appData.autoDisplayComment); // [HGM]\r
+    CHECK_BOX(OPT_Headers, appData.headers); // [HGM]\r
+    CHECK_BOX(OPT_Variations, appData.variations); // [HGM]\r
+    CHECK_BOX(OPT_AutoExtend, appData.autoExtend); // [HGM]\r
 \r
 #undef CHECK_BOX\r
 \r
@@ -259,6 +264,11 @@ GeneralOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
       appData.highlightMoveWithArrow=IS_CHECKED(OPT_HighlightMoveArrow);\r
       appData.autoLogo             =IS_CHECKED(OPT_AutoLogo); // [HGM] logo\r
       appData.oneClick             =IS_CHECKED(OPT_SmartMove); // [HGM] one-click\r
+      appData.autoDisplayTags      =IS_CHECKED(OPT_AutoTags); // [HGM]\r
+      appData.autoDisplayComment   =IS_CHECKED(OPT_AutoComment); // [HGM]\r
+      appData.headers              =IS_CHECKED(OPT_Headers); // [HGM]\r
+      appData.variations           =IS_CHECKED(OPT_Variations); // [HGM]\r
+      appData.autoExtend           =IS_CHECKED(OPT_AutoExtend); // [HGM]\r
 \r
 #undef IS_CHECKED\r
 \r
@@ -430,7 +440,7 @@ PaintSampleSquare(
   /*\r
    * clean up\r
    */\r
-  SelectObject(hdcMem, oldBrushPiece);\r
+  SelectObject(hdcMem, oldBrushSquare);\r
   SelectObject(hdcMem, oldPen);\r
   DeleteObject(brushPiece);\r
   DeleteObject(brushPieceDetail);\r
@@ -695,6 +705,7 @@ BoardOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
       }\r
       DeleteObject(pieces[0]);\r
       DeleteObject(pieces[1]);\r
+\r
       DeleteObject(pieces[2]);\r
       return TRUE;\r
 \r
@@ -838,6 +849,7 @@ int radioButton[] = {
     -1,\r
     -1,\r
     OPT_VariantShogi,\r
+    -1, // Chu\r
     OPT_VariantXiangqi,\r
     OPT_VariantCourier,\r
     OPT_VariantGothic,\r
@@ -853,9 +865,11 @@ int radioButton[] = {
     OPT_VariantGreat,\r
     -1, // Twilight,\r
     OPT_VariantMakruk,\r
+    OPT_VariantASEAN,\r
     OPT_VariantSChess,\r
     OPT_VariantGrand,\r
     OPT_VariantSpartan, // Spartan\r
+    OPT_VariantLion,\r
     -2 // sentinel\r
 };\r
 \r
@@ -863,23 +877,40 @@ VariantClass
 VariantWhichRadio(HWND hDlg)\r
 {\r
   int i=0, j;\r
+  *engineVariant = NULLCHAR;\r
   while((j = radioButton[i++]) != -2) {\r
        if(j == -1) continue; // no menu button\r
        if(IsDlgButtonChecked(hDlg, j) &&\r
           (appData.noChessProgram || strstr(first.variants, VariantName(i-1)))) return (VariantClass) i-1;\r
   }\r
+  for(i=0; i<9; i++) { // check for engine-defined variants\r
+    if(IsDlgButtonChecked(hDlg, OPT_EngineVariant+i) ) {\r
+       GetDlgItemText(hDlg, OPT_EngineVariant+i, engineVariant, MSG_SIZ); // remember name, so we can resolve it later\r
+       return VariantUnknown;\r
+    }\r
+  }\r
   return gameInfo.variant; // If no button checked, keep old\r
 }\r
 \r
 void\r
 VariantShowRadio(HWND hDlg)\r
 {\r
+  char c = *engineVariant;\r
   int i=0, j;\r
   CheckDlgButton(hDlg, radioButton[gameInfo.variant], TRUE);\r
+  *engineVariant = NULLCHAR; // [HGM] kludge to prevent VariantName will always return engineVariant\r
   while((j = radioButton[i++]) != -2) {\r
        if(j == -1) continue; // no menu button\r
        EnableWindow(GetDlgItem(hDlg, j), appData.noChessProgram || strstr(first.variants, VariantName(i-1)));\r
   }\r
+  *engineVariant = c;\r
+  for(i=0; i<9; i++) { // initialize engine-defined variants\r
+    char *v = EngineDefinedVariant(&first, i); // get name of #i\r
+    if(v) { // there is such a variant\r
+       EnableWindow(GetDlgItem(hDlg, OPT_EngineVariant+i), TRUE);     // and enable the button\r
+       SetDlgItemText(hDlg, OPT_EngineVariant+i, v);                  // put its name on button\r
+    } else EnableWindow(GetDlgItem(hDlg, OPT_EngineVariant+i), FALSE); // no such variant; disable button\r
+  }\r
 }\r
 \r
 LRESULT CALLBACK\r
@@ -1397,6 +1428,9 @@ IcsOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
       UpdateSampleText(hDlg, OPT_SampleSeek, &mca[ColorSeek]);\r
       break;\r
 \r
+\r
+\r
+\r
     case OPT_ChooseNormalColor:\r
       ColorizeTextPopup(hDlg, ColorNormal);\r
       UpdateSampleText(hDlg, OPT_SampleNormal, &mca[ColorNormal]);\r
@@ -1775,6 +1809,7 @@ FontsOptionsPopup(HWND hwnd)
 SoundComboData soundComboData[] = {\r
   {N_("Move"), NULL},\r
   {N_("Bell"), NULL},\r
+  {N_("Roar"), NULL},\r
   {N_("ICS Alarm"), NULL},\r
   {N_("ICS Win"), NULL},\r
   {N_("ICS Loss"), NULL},\r
@@ -2500,6 +2535,7 @@ LoadOptions(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
     SetDlgItemInt(hDlg, OPT_Stretch, appData.stretch, FALSE);\r
     CheckDlgButton(hDlg, OPT_Reversed, appData.ignoreColors);\r
     CheckDlgButton(hDlg, OPT_Mirror, appData.findMirror);\r
+    SetDlgItemText(hDlg, OPT_Counts,  "");\r
     switch (appData.searchMode) {\r
     case 1:\r
       CheckDlgButton(hDlg, OPT_Exact, TRUE);\r
@@ -2544,6 +2580,10 @@ LoadOptions(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
       appData.searchMode = LoadOptionsWhichRadio(hDlg);\r
       appData.ignoreColors = IsDlgButtonChecked(hDlg, OPT_Reversed);\r
       appData.findMirror   = IsDlgButtonChecked(hDlg, OPT_Mirror);\r
+      GetDlgItemText(hDlg, OPT_Counts, buf, MSG_SIZ);\r
+      appData.minPieces = appData.maxPieces = 0;\r
+      sscanf(buf, "%d-%d", &appData.minPieces, &appData.maxPieces);\r
+      if(appData.maxPieces < appData.minPieces) appData.maxPieces = appData.minPieces;\r
       EndDialog(hDlg, TRUE);\r
       return TRUE;\r
 \r
@@ -3003,6 +3043,13 @@ BOOL BrowseForFolder( const char * title, char * path )
     return result;\r
 }\r
 \r
+int\r
+IsMultiFormat(char *s)\r
+{\r
+  char *p = strchr(s, ':');\r
+  return p && p != s+1;\r
+}\r
+\r
 LRESULT CALLBACK UciOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
 {\r
   char buf[MAX_PATH];\r
@@ -3018,7 +3065,10 @@ LRESULT CALLBACK UciOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM
     /* Initialize the dialog items */\r
     SetDlgItemText( hDlg, IDC_PolyglotDir, appData.polyglotDir );\r
     SetDlgItemInt( hDlg, IDC_HashSize, appData.defaultHashSize, TRUE );\r
+    if(appData.defaultPathEGTB[0])\r
     SetDlgItemText( hDlg, IDC_PathToEGTB, appData.defaultPathEGTB );\r
+    else\r
+    SetDlgItemText( hDlg, IDC_PathToEGTB, appData.egtFormats );\r
     SetDlgItemInt( hDlg, IDC_SizeOfEGTB, appData.defaultCacheSizeEGTB, TRUE );\r
     CheckDlgButton( hDlg, IDC_UseBook, (BOOL) appData.usePolyglotBook );\r
     SetDlgItemText( hDlg, IDC_BookFile, appData.polyglotBook );\r
@@ -3032,6 +3082,8 @@ LRESULT CALLBACK UciOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM
     SetDlgItemInt( hDlg, IDC_Games, appData.defaultMatchGames, TRUE );\r
 \r
     SendDlgItemMessage( hDlg, IDC_PolyglotDir, EM_SETSEL, 0, -1 );\r
+    // [HGM] Yet another ponder duplicate\r
+    CheckDlgButton( hDlg, OPT_PonderNextMove, (BOOL) appData.ponderNextMove );\r
 \r
     return TRUE;\r
 \r
@@ -3043,14 +3095,19 @@ LRESULT CALLBACK UciOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM
       appData.defaultHashSize = GetDlgItemInt(hDlg, IDC_HashSize, NULL, FALSE );\r
       appData.defaultCacheSizeEGTB = GetDlgItemInt(hDlg, IDC_SizeOfEGTB, NULL, FALSE );\r
       GetDlgItemText( hDlg, IDC_PathToEGTB, buf, sizeof(buf) );\r
-      appData.defaultPathEGTB = strdup(buf);\r
+      if(IsMultiFormat(buf)) {\r
+        ASSIGN(appData.egtFormats, buf);\r
+      } else {\r
+        ASSIGN(appData.defaultPathEGTB, buf);\r
+      }\r
       GetDlgItemText( hDlg, IDC_BookFile, buf, sizeof(buf) );\r
       appData.polyglotBook = strdup(buf);\r
       appData.usePolyglotBook = (Boolean) IsDlgButtonChecked( hDlg, IDC_UseBook );\r
-      // [HGM] smp: get nr of cores:\r
+      // [HGM] smp: get nr of cores and ponder:\r
       oldCores = appData.smpCores;\r
       appData.smpCores = GetDlgItemInt(hDlg, IDC_Cores, NULL, FALSE );\r
       if(appData.smpCores != oldCores) NewSettingEvent(FALSE, &(first.maxCores), "cores", appData.smpCores);\r
+      PonderNextMoveEvent((Boolean) IsDlgButtonChecked( hDlg, OPT_PonderNextMove ));\r
       // [HGM] book: read tick boxes for own book use\r
       appData.firstHasOwnBookUCI  = (Boolean) IsDlgButtonChecked( hDlg, IDC_OwnBook1 );\r
       appData.secondHasOwnBookUCI = (Boolean) IsDlgButtonChecked( hDlg, IDC_OwnBook2 );\r
@@ -3085,6 +3142,7 @@ LRESULT CALLBACK UciOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM
           ofn.hwndOwner = hDlg;\r
           ofn.hInstance = hInst;\r
           ofn.lpstrFilter = filter;\r
+\r
           ofn.lpstrFile = buf;\r
           ofn.nMaxFile = sizeof(buf);\r
           ofn.lpstrTitle = _("Choose Book");\r
index f32fc94..215ea18 100644 (file)
@@ -120,7 +120,7 @@ void
 LayoutOptions(int firstOption, int endOption, char *groupName, Option *optionList)\r
 {\r
     int i, b = strlen(groupName), stop, prefix, right, nextOption, firstButton = buttons;\r
-    Control lastType, nextType;\r
+    Control lastType, nextType=Label;\r
 \r
     nextOption = firstOption;\r
     while(nextOption < endOption) {\r
@@ -380,7 +380,6 @@ int
 GetOptionValues(HWND hDlg, ChessProgramState *cps, Option *optionList)\r
 // read out all controls, and if value is altered, remember it and send it to the engine\r
 {\r
-    HANDLE hwndCombo;\r
     int i, k, new=0, changed=0, len;\r
     char **choices, newText[MSG_SIZ], buf[MSG_SIZ], *text;\r
     BOOL success;\r
@@ -424,7 +423,6 @@ GetOptionValues(HWND hDlg, ChessProgramState *cps, Option *optionList)
                break;\r
            case ComboBox:\r
                choices = (char**) optionList[j].textValue;\r
-               hwndCombo = GetDlgItem(hDlg, 2001+2*i);\r
                success = GetDlgItemText( hDlg, 2001+2*i, newText, MSG_SIZ );\r
                if(!success) break;\r
                new = -1;\r
@@ -495,7 +493,7 @@ LRESULT CALLBACK SettingsProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lPa
                if(j == -2) {\r
                          char filter[] =\r
                                "All files\0*.*\0Game files\0*.pgn;*.gam\0Position files\0*.fen;*.epd;*.pos\0"\r
-                               "EXE files\0*.exe\0Tournament files (*.trn)\0*.trn\0"\r
+                               "EXE files\0*.exe;*.jar\0Tournament files (*.trn)\0*.trn\0"\r
                                "BIN Files\0*.bin\0LOG Files\0*.log\0INI Files\0*.ini\0"\r
                                "Image files\0*.bmp\0\0";\r
                          OPENFILENAME ofn;\r
@@ -577,8 +575,8 @@ void AddOption(int x, int y, Control type, int i)
     int extra, num = ES_NUMBER;\r
 \r
     switch(type) {\r
-       case Slider+100:\r
-           num = 0; // needs text control for accepting negative numbers\r
+//     case Slider+100:\r
+//         num = 0; // needs text control for accepting negative numbers\r
        case Slider:\r
        case Spin:\r
            AddControl(x, y+1, 95, 9, 0x0082, SS_ENDELLIPSIS | WS_VISIBLE | WS_CHILD, i);\r
@@ -712,7 +710,7 @@ Option installOptions[] = {
   {   0,  0,    0, NULL, NULL, NULL, NULL, Label, N_("or specify one below:") },\r
   {   0,  0,    0, NULL, (void*) &nickName, NULL, NULL, TextBox, N_("Nickname (optional):") },\r
   {   0,  0,    0, NULL, (void*) &useNick, NULL, NULL, CheckBox, N_("Use nickname in PGN tag") },\r
-  {   0,  0, 32+3, NULL, (void*) &engineName, NULL, NULL, FileName, N_("Engine (*.exe):") },\r
+  {   0,  0, 32+3, NULL, (void*) &engineName, NULL, NULL, FileName, N_("Engine (.exe or .jar):") },\r
   {   0,  0,    0, NULL, (void*) &params, NULL, NULL, TextBox, N_("command-line parameters:") },\r
   {   0,  0,    0, NULL, (void*) &wbOptions, NULL, NULL, TextBox, N_("Special WinBoard options:") },\r
   {   0,  0,    0, NULL, (void*) &engineDir, NULL, NULL, PathName, N_("directory:") },\r
@@ -888,8 +886,7 @@ int MatchOK()
 \r
 void PseudoOK(HWND hDlg)\r
 {\r
-    void (*saveOK)();\r
-    saveOK = okFunc; okFunc = 0;\r
+    okFunc = 0;\r
     GetOptionValues(hDlg, activeCps, activeList);\r
     EndDialog( hDlg, 0 );\r
     comboCallback = NULL; activeCps = NULL;\r
index 5492e80..683aa15 100644 (file)
@@ -64,14 +64,22 @@ static void AddSnapRectangle( SnapData * sd, RECT * rc )
     AddSnapPoint( sd->y_grid, &sd->y_grid_len, rc->bottom );\r
 }\r
 \r
+static RECT activeRect, mainRect;\r
+static int side, loc; // code for edge we were dragging, and its latest coordinate\r
+\r
 static void AddSnapWindow( HWND hWndCaller, SnapData * sd, HWND hWndSnapWindow )\r
 {\r
-    if( hWndSnapWindow != NULL && hWndCaller != hWndSnapWindow && IsWindowVisible(hWndSnapWindow) ) {\r
+    if( hWndSnapWindow != NULL && IsWindowVisible(hWndSnapWindow) ) {\r
         RECT rc;\r
 \r
         GetWindowRect( hWndSnapWindow, &rc );\r
+       if(hWndSnapWindow == hwndMain) mainRect = rc;\r
 \r
-        AddSnapRectangle( sd, &rc );\r
+       if(hWndCaller != hWndSnapWindow) {\r
+            AddSnapRectangle( sd, &rc );\r
+       } else {\r
+           activeRect = rc; // [HGM] glue: remember original geometry of dragged window\r
+       }\r
     }\r
 }\r
 \r
@@ -101,6 +109,7 @@ LRESULT OnEnterSizeMove( SnapData * snapData, HWND hWnd, WPARAM wParam, LPARAM l
 \r
     snapData->x_grid_len = 0;\r
     snapData->y_grid_len = 0;\r
+    side = 0;\r
 \r
     /* Add desktop area */\r
     if( SystemParametersInfo( SPI_GETWORKAREA, 0, &rc, 0 ) ) {\r
@@ -157,7 +166,7 @@ LRESULT OnSizing( SnapData * snapData, HWND hWnd, WPARAM wParam, LPARAM lParam )
     switch( wParam ) {\r
     case WMSZ_BOTTOM:\r
         AdjustToSnapPoint( snapData->y_grid, snapData->y_grid_len, lprc->bottom, &snap_size_y, &delta_y );\r
-        lprc->bottom += delta_y;\r
+        lprc->bottom += delta_y; side = 4; loc = lprc->bottom;\r
         break;\r
     case WMSZ_BOTTOMLEFT:\r
         AdjustToSnapPoint( snapData->y_grid, snapData->y_grid_len, lprc->bottom, &snap_size_y, &delta_y );\r
@@ -173,15 +182,15 @@ LRESULT OnSizing( SnapData * snapData, HWND hWnd, WPARAM wParam, LPARAM lParam )
         break;\r
     case WMSZ_LEFT:\r
         AdjustToSnapPoint( snapData->x_grid, snapData->x_grid_len, lprc->left, &snap_size_x, &delta_x );\r
-        lprc->left += delta_x;\r
+        lprc->left += delta_x; side = 1; loc = lprc->left;\r
         break;\r
     case WMSZ_RIGHT:\r
         AdjustToSnapPoint( snapData->x_grid, snapData->x_grid_len, lprc->right, &snap_size_x, &delta_x );\r
-        lprc->right += delta_x;\r
+        lprc->right += delta_x; side = 2; loc = lprc->right;\r
         break;\r
     case WMSZ_TOP:\r
         AdjustToSnapPoint( snapData->y_grid, snapData->y_grid_len, lprc->top, &snap_size_y, &delta_y );\r
-        lprc->top += delta_y;\r
+        lprc->top += delta_y; side = 3; loc = lprc->top;\r
         break;\r
     case WMSZ_TOPLEFT:\r
         AdjustToSnapPoint( snapData->y_grid, snapData->y_grid_len, lprc->top, &snap_size_y, &delta_y );\r
@@ -202,7 +211,60 @@ LRESULT OnSizing( SnapData * snapData, HWND hWnd, WPARAM wParam, LPARAM lParam )
     return TRUE;\r
 }\r
 \r
+static int Adjust( LONG *data, int new, int old , int vertical)\r
+{\r
+    // protect edges that also touch main window\r
+    if(!vertical && (old == mainRect.left || old == mainRect.right))  return 0;\r
+    if( vertical && (old == mainRect.top  || old == mainRect.bottom)) return 0;\r
+    // if the coordinate was the same as the old, now make it the same as the new edge position\r
+    if(*data == old) { *data = new; return 1; }\r
+    return 0;\r
+}\r
+\r
+static void KeepTouching( int side, int new, int old, HWND hWnd )\r
+{   // if the mentioned window was touching on the moved edge, move its touching edge too\r
+    if( IsWindowVisible(hWnd) ) {\r
+        RECT rc;\r
+       int i = 0;\r
+\r
+        GetWindowRect( hWnd, &rc );\r
+\r
+       switch(side) { // figure out which edge we might need to drag along (if any)\r
+         case 1: i = Adjust(&rc.right,  new, old, 0); break;\r
+         case 2: i = Adjust(&rc.left,   new, old, 0); break;\r
+         case 3: i = Adjust(&rc.bottom, new, old, 1); break;\r
+         case 4: i = Adjust(&rc.top,    new, old, 1); break;\r
+       }\r
+\r
+       if(i) { // the correct edge was touching, and is adjusted\r
+           SetWindowPos(hWnd, HWND_TOP, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, SWP_NOZORDER );\r
+       }\r
+    }\r
+}\r
+\r
 LRESULT OnExitSizeMove( SnapData * snapData, HWND hWnd, WPARAM wParam, LPARAM lParam )\r
 {\r
+    if(side && hWnd != hwndMain) { // [HGM] glue: we have been sizing, by dragging an edge\r
+       int *grid = (side > 2 ? snapData->y_grid : snapData->x_grid);\r
+       int i, pos = -1, len = (side > 2 ? snapData->y_grid_len : snapData->x_grid_len);\r
+\r
+       switch(side) {\r
+         case 1: pos = activeRect.left; break;\r
+         case 2: pos = activeRect.right; break;\r
+         case 3: pos = activeRect.top; break;\r
+         case 4: pos = activeRect.bottom; break;\r
+       }\r
+\r
+       for(i=0; i<len; i++) {\r
+           if(grid[i] == pos) break; // the dragged side originally touched another auxiliary window\r
+       }\r
+\r
+       if(i < len) { // we were touching another sticky window: figure out how, and adapt it if needed\r
+               KeepTouching(side, loc, pos, moveHistoryDialog);\r
+               KeepTouching(side, loc, pos, evalGraphDialog);\r
+               KeepTouching(side, loc, pos, engineOutputDialog);\r
+               KeepTouching(side, loc, pos, gameListDialog);\r
+       }\r
+    }\r
     return 0;\r
 }\r
index 0d96b7f..f1d9747 100644 (file)
@@ -183,13 +183,6 @@ extern char *getenv();
 // [HGM] bitmaps: put before incuding the bitmaps / pixmaps, to know how many piece types there are.
 #include "common.h"
 
-#if HAVE_LIBXPM
-#include <X11/xpm.h>
-#define IMAGE_EXT "xpm"
-#else
-#define IMAGE_EXT "xim"
-#endif
-
 #include "bitmaps/icon_white.bm"
 #include "bitmaps/icon_black.bm"
 #include "bitmaps/checkmark.bm"
@@ -431,128 +424,6 @@ String xboardResources[] = {
 /* Max possible square size */
 #define MAXSQSIZE 256
 
-static int xpm_avail[MAXSQSIZE];
-
-#ifdef HAVE_DIR_STRUCT
-
-/* Extract piece size from filename */
-static int
-xpm_getsize (char *name, int len, char *ext)
-{
-    char *p, *d;
-    char buf[10];
-
-    if (len < 4)
-      return 0;
-
-    if ((p=strchr(name, '.')) == NULL ||
-       StrCaseCmp(p+1, ext) != 0)
-      return 0;
-
-    p = name + 3;
-    d = buf;
-
-    while (*p && isdigit(*p))
-      *(d++) = *(p++);
-
-    *d = 0;
-    return atoi(buf);
-}
-
-/* Setup xpm_avail */
-static int
-xpm_getavail (char *dirname, char *ext)
-{
-    DIR *dir;
-    struct dirent *ent;
-    int  i;
-
-    for (i=0; i<MAXSQSIZE; ++i)
-      xpm_avail[i] = 0;
-
-    if (appData.debugMode)
-      fprintf(stderr, "XPM dir:%s:ext:%s:\n", dirname, ext);
-
-    dir = opendir(dirname);
-    if (!dir)
-      {
-         fprintf(stderr, _("%s: Can't access XPM directory %s\n"),
-                 programName, dirname);
-         exit(1);
-      }
-
-    while ((ent=readdir(dir)) != NULL) {
-       i = xpm_getsize(ent->d_name, NAMLEN(ent), ext);
-       if (i > 0 && i < MAXSQSIZE)
-         xpm_avail[i] = 1;
-    }
-
-    closedir(dir);
-
-    return 0;
-}
-
-void
-xpm_print_avail (FILE *fp, char *ext)
-{
-    int i;
-
-    fprintf(fp, _("Available `%s' sizes:\n"), ext);
-    for (i=1; i<MAXSQSIZE; ++i) {
-       if (xpm_avail[i])
-         printf("%d\n", i);
-    }
-}
-
-/* Return XPM piecesize closest to size */
-int
-xpm_closest_to (char *dirname, int size, char *ext)
-{
-    int i;
-    int sm_diff = MAXSQSIZE;
-    int sm_index = 0;
-    int diff;
-
-    xpm_getavail(dirname, ext);
-
-    if (appData.debugMode)
-      xpm_print_avail(stderr, ext);
-
-    for (i=1; i<MAXSQSIZE; ++i) {
-       if (xpm_avail[i]) {
-           diff = size - i;
-           diff = (diff<0) ? -diff : diff;
-           if (diff < sm_diff) {
-               sm_diff = diff;
-               sm_index = i;
-           }
-       }
-    }
-
-    if (!sm_index) {
-       fprintf(stderr, _("Error: No `%s' files!\n"), ext);
-       exit(1);
-    }
-
-    return sm_index;
-}
-#else  /* !HAVE_DIR_STRUCT */
-/* If we are on a system without a DIR struct, we can't
-   read the directory, so we can't collect a list of
-   filenames, etc., so we can't do any size-fitting. */
-int
-xpm_closest_to (char *dirname, int size, char *ext)
-{
-    fprintf(stderr, _("\
-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"), PACKAGE_BUGREPORT););
-    return size;
-}
-#endif /* HAVE_DIR_STRUCT */
-
-
 /* Arrange to catch delete-window events */
 Atom wm_delete_window;
 void
@@ -626,7 +497,8 @@ ParseFont (char *name, int number)
   if(sscanf(name, "size%d:", &size)) {
     // [HGM] font: font is meant for specific boardSize (likely from settings file);
     //       defer processing it until we know if it matches our board size
-    if(size >= 0 && size<MAX_SIZE) { // for now, fixed limit
+    if(strstr(name, "-*-") &&        // only pay attention to things that look like X-fonts
+       size >= 0 && size<MAX_SIZE) { // for now, fixed limit
        fontTable[number][size] = strdup(strchr(name, ':')+1);
        fontValid[number][size] = True;
     }
@@ -667,6 +539,12 @@ ParseColor (int n, char *name)
   if(colorVariable[n]) *(char**)colorVariable[n] = strdup(name);
 }
 
+char *
+Col2Text (int n)
+{
+    return *(char**)colorVariable[n];
+}
+
 void
 ParseTextAttribs (ColorClass cc, char *s)
 {
@@ -769,6 +647,12 @@ GetActualPlacement (Widget wg, WindowPlacement *wp)
 }
 
 void
+GetPlacement (DialogClass dlg, WindowPlacement *wp)
+{ // wrapper to shield back-end from widget type
+  if(shellUp[dlg]) GetActualPlacement(shells[dlg], wp);
+}
+
+void
 GetWindowCoords ()
 { // wrapper to shield use of window handles from back-end (make addressible by number?)
   // In XBoard this will have to wait until awareness of window parameters is implemented
@@ -950,6 +834,8 @@ PrintArg (ArgType t)
     case ArgTwo:
     case ArgNone:
     case ArgCommSettings:
+    case ArgMaster:
+    case ArgInstall:
       break;
   }
   return p;
@@ -959,17 +845,18 @@ char *
 GenerateGlobalTranslationTable (void)
 {
   /* go through all menu items and extract the keyboard shortcuts, so that X11 can load them */
-  char *output;
+  char *output[2];
 
-  int i,j;
+  int i,j,n=0;
   MenuItem *mi;
 
-  output = strdup("");
+  output[0] = strdup(""); // build keystrokes with and wo mod keys separately
+  output[1] = strdup(""); // so the more specific can preceed the other
 
   /* loop over all menu entries */
-  for( i=0; menuBar[i].mi ; i++)
+  for( i=0; menuBar[i-n].mi || !n++; i++)
     {
-      mi = menuBar[i].mi;
+      mi = menuBar[i+n].mi; // kludge to access 'noMenu' behind sentinel
       for(j=0; mi[j].proc; j++)
        {
          if (mi[j].accel)
@@ -1034,17 +921,16 @@ GenerateGlobalTranslationTable (void)
                mods[strlen(mods)-1]='\0';
 
              /* get the name for the callback, we can use MenuItem() here that will call KeyBindingProc */
-             size_t namesize = snprintf(NULL, 0, "%s.%s", menuBar[i].ref, mi[j].ref);
-             char *name = malloc(namesize+1);
-             snprintf(name, namesize+1, "%s.%s", menuBar[i].ref, mi[j].ref);
+             char *name = malloc(MSG_SIZ);
+             if(n) snprintf(name, MSG_SIZ, "%s", mi[j].ref);
+             else  snprintf(name, MSG_SIZ, "%s.%s", menuBar[i].ref, mi[j].ref);
 
-             size_t buffersize = snprintf(NULL, 0, ":%s<Key>%s: MenuItem(%s) \n ", mods, key, name);
-             char *buffer = malloc(buffersize+1);
-             snprintf(buffer, buffersize+1, ":%s<Key>%s: MenuItem(%s) \n ", mods, key, name);
+             char *buffer = malloc(MSG_SIZ);
+             snprintf(buffer, MSG_SIZ, ":%s<Key>%s: MenuItem(%s) \n ", mods, key, name);
 
              /* add string to the output */
-             output = realloc(output, strlen(output) + strlen(buffer)+1);
-             strncat(output, buffer, strlen(buffer));
+             output[shift|alt|ctrl] = realloc(output[shift|alt|ctrl], strlen(output[shift|alt|ctrl]) + strlen(buffer)+1);
+             strncat(output[shift|alt|ctrl], buffer, strlen(buffer));
 
              /* clean up */
              free(key);
@@ -1054,7 +940,10 @@ GenerateGlobalTranslationTable (void)
            }
        }
     }
-  return output;
+  output[1] = realloc(output[1], strlen(output[1]) + strlen(output[0])+1);
+  strncat(output[1], output[0], strlen(output[0]));
+  free(output[0]);
+  return output[1];
 }
 
 
@@ -1102,6 +991,9 @@ main (int argc, char **argv)
     char *p;
     int forceMono = False;
 
+    extern Option chatOptions[]; // FIXME: adapt Chat window, removing ICS pane and Hide button
+    chatOptions[6].type = chatOptions[10].type = Skip;
+
     srandom(time(0)); // [HGM] book: make random truly random
 
     setbuf(stdout, NULL);
@@ -1109,7 +1001,7 @@ main (int argc, char **argv)
     debugFP = stderr;
 
     if(argc > 1 && (!strcmp(argv[1], "-v" ) || !strcmp(argv[1], "--version" ))) {
-       printf("%s version %s\n", PACKAGE_NAME, PACKAGE_VERSION);
+      printf("%s version %s\n\n  configure options: %s\n", PACKAGE_NAME, PACKAGE_VERSION, CONFIGURE_OPTIONS);
        exit(0);
     }
 
@@ -1118,6 +1010,23 @@ main (int argc, char **argv)
        exit(0);
     }
 
+    if(argc > 1 && !strcmp(argv[1], "--show-config")) { // [HGM] install: called to print config info
+       typedef struct {char *name, *value; } Config;
+       static Config configList[] = {
+         { "Datadir", DATADIR },
+         { "Sysconfdir", SYSCONFDIR },
+         { NULL }
+       };
+       int i;
+
+       for(i=0; configList[i].name; i++) {
+           if(argc > 2 && strcmp(argv[2], configList[i].name)) continue;
+           if(argc > 2) printf("%s", configList[i].value);
+           else printf("%-12s: %s\n", configList[i].name, configList[i].value);
+       }
+       exit(0);
+    }
+
     programName = strrchr(argv[0], '/');
     if (programName == NULL)
       programName = argv[0];
@@ -1214,6 +1123,8 @@ main (int argc, char **argv)
                    programName, appData.boardSize);
            exit(2);
        }
+       if(BOARD_WIDTH > 8)
+           squareSize = (squareSize*8 + BOARD_WIDTH/2)/BOARD_WIDTH; // scale height
        if (i < 7) {
            /* Find some defaults; use the nearest known size */
            SizeDefaults *szd, *nearest;
@@ -1237,8 +1148,8 @@ main (int argc, char **argv)
     } else {
         SizeDefaults *szd = sizeDefaults;
         if (*appData.boardSize == NULLCHAR) {
-           while (DisplayWidth(xDisplay, xScreen) < szd->minScreenSize ||
-                  DisplayHeight(xDisplay, xScreen) < szd->minScreenSize) {
+           while (DisplayWidth(xDisplay, xScreen)  < (szd->minScreenSize*BOARD_WIDTH  + 4)/8 ||
+                  DisplayHeight(xDisplay, xScreen) < (szd->minScreenSize*BOARD_HEIGHT + 4)/8) {
              szd++;
            }
            if (szd->name == NULL) szd--;
@@ -1417,6 +1328,9 @@ main (int argc, char **argv)
       EngineOutputPopUp();
     }
 
+    gameInfo.boardWidth = 0; // [HGM] pieces: kludge to ensure InitPosition() calls InitDrawingSizes()
+    InitPosition(TRUE);
+
     InitBackEnd2();
 
     if (errorExitStatus == -1) {
@@ -1437,8 +1351,6 @@ main (int argc, char **argv)
        }
     }
 
-    gameInfo.boardWidth = 0; // [HGM] pieces: kludge to ensure InitPosition() calls InitDrawingSizes()
-    InitPosition(TRUE);
     UpdateLogos(TRUE);
 //    XtSetKeyboardFocus(shellWidget, formWidget);
     XSetInputFocus(xDisplay, XtWindow(formWidget), RevertToPointerRoot, CurrentTime);
@@ -1448,6 +1360,13 @@ main (int argc, char **argv)
     return 0;
 }
 
+void
+DoEvents ()
+{
+    XtInputMask m;
+    while((m = XtAppPending(appContext))) XtAppProcessEvent(appContext, m);
+}
+
 RETSIGTYPE
 TermSizeSigHandler (int sig)
 {
index 95fec39..bcfafb2 100644 (file)
@@ -119,7 +119,7 @@ typedef struct {
 #define BORDER_X_OFFSET 3
 #define BORDER_Y_OFFSET 27
 #define FIRST_CHESS_PROGRAM    "fairymax"
-#define SECOND_CHESS_PROGRAM   "fairymax"
+#define SECOND_CHESS_PROGRAM   ""
 #define FIRST_DIRECTORY         "."
 #define SECOND_DIRECTORY        "."
 #define SOUND_BELL              ""
index 4f54902..d39c604 100644 (file)
@@ -85,16 +85,40 @@ extern char *getenv();
 # define N_(s)  s
 #endif
 
-#include <X11/xpm.h>
+// [HGM] bitmaps of some ICONS used in the engine-outut window
+
+static unsigned char CLEAR_14[28];
+
+static unsigned char WHITE_14[] = {
+0xe0, 0x01, 0x18, 0x06, 0x04, 0x08, 0x02, 0x10, 0x02, 0x10, 0x01, 0x20, 0x01, 0x20,
+0x01, 0x20, 0x01, 0x20, 0x02, 0x10, 0x02, 0x10, 0x04, 0x08, 0x18, 0x06, 0xe0, 0x01
+};
+
+static unsigned char BLACK_14[] = {
+0xe0, 0x01, 0xf8, 0x07, 0xfc, 0x0f, 0xfe, 0x1f, 0xfe, 0x1f, 0xff, 0x3f, 0xff, 0x3f,
+0xff, 0x3f, 0xff, 0x3f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfc, 0x0f, 0xf8, 0x07, 0xe0, 0x01
+};
+
+static unsigned char ANALYZE_14[] = {
+0x80, 0x03, 0x60, 0x0c, 0x10, 0x10, 0x90, 0x10, 0xc8, 0x20, 0x08, 0x20, 0x08, 0x20,
+0x10, 0x10, 0x10, 0x10, 0x68, 0x0c, 0x94, 0x03, 0x0a, 0x00, 0x07, 0x00, 0x00, 0x00
+};
+
+static unsigned char THINK_14[] = {
+0xe0, 0x00, 0x18, 0x03, 0x44, 0x04, 0x42, 0x08, 0x42, 0x08, 0x41, 0x10, 0xe1, 0x13,
+0x41, 0x10, 0x02, 0x08, 0x02, 0x08, 0x04, 0x04, 0x18, 0x03, 0xe0, 0x00, 0x00, 0x00
+};
+
+static unsigned char PONDER_14[] = {
+0x30, 0x03, 0x8c, 0x0c, 0x02, 0x10, 0x01, 0x08, 0x01, 0x10, 0x06, 0x20, 0x04, 0x20,
+0x02, 0x10, 0x04, 0x0c, 0xc8, 0x04, 0x34, 0x03, 0x0e, 0x00, 0x01, 0x00, 0x00, 0x00
+};
+
+static unsigned char UNKNOWN_14[] = {
+0xe0, 0x01, 0x58, 0x07, 0xac, 0x0a, 0x56, 0x15, 0xaa, 0x1a, 0x55, 0x35, 0xab, 0x2a,
+0x55, 0x35, 0xab, 0x2a, 0x56, 0x15, 0xaa, 0x1a, 0x54, 0x0d, 0xb8, 0x06, 0xe0, 0x01
+};
 
-// [HGM] pixmaps of some ICONS used in the engine-outut window
-#include "pixmaps/WHITE_14.xpm"
-#include "pixmaps/BLACK_14.xpm"
-#include "pixmaps/CLEAR_14.xpm"
-#include "pixmaps/UNKNOWN_14.xpm"
-#include "pixmaps/THINKING_14.xpm"
-#include "pixmaps/PONDER_14.xpm"
-#include "pixmaps/ANALYZING_14.xpm"
 
 
 /* Module variables */
@@ -104,17 +128,9 @@ static Widget memoWidget;
 
 
 static void
-ReadIcon (char *pixData[], int iconNr, Widget w)
+ReadIcon (unsigned char pixData[], int iconNr, Widget w)
 {
-    int r;
-
-       if ((r=XpmCreatePixmapFromData(xDisplay, XtWindow(w),
-                                      pixData,
-                                      &(icons[iconNr]),
-                                      NULL, NULL /*&attr*/)) != 0) {
-         fprintf(stderr, _("Error %d loading icon image\n"), r);
-         exit(1);
-       }
+    icons[iconNr] = XCreateBitmapFromData(xDisplay, XtWindow(w), (char*) pixData, 14, 14);
 }
 
 void
index 91baa04..e855beb 100644 (file)
@@ -266,6 +266,39 @@ SelectedListBoxItem (Option *opt)
 }
 
 void
+SetTextColor (char **cnames, int fg, int bg, int attr)
+{ // this is not possible in Xaw
+}
+
+void
+AppendColorized (Option *opt, char *message, int count)
+{
+  if(!opt->handle) return;
+  AppendText(opt, message);
+}
+
+void
+Show (Option *opt, int hide)
+{
+    static Dimension h;
+    Arg args[16];
+    Dimension v;
+    int j=0;
+return; // FIXME: it would be nice if the Chat window did have an ICS pane we could hide behind
+printf("Show(%d) %x\n", hide, opt->handle);
+    if(!opt->handle) return;
+    if(hide) { // make sure original size is saved
+      XtSetArg(args[j], XtNheight, &v); j++;
+      XtGetValues(opt->handle, args, j);
+      if(v != 1) h = v;
+    }
+printf("h = %d\n",h);
+    j = 0;
+    XtSetArg(args[j], XtNheight, hide ? 1 : h); j++;
+    XtSetValues(opt->handle, args, j);
+}
+
+void
 HighlightText (Option *opt, int start, int end, Boolean on)
 {
     if(on)
@@ -292,13 +325,21 @@ SetIconName (DialogClass dlg, char *name)
 }
 
 static void
+LabelCallback (Widget ww, XtPointer client_data, XEvent *event, Boolean *b)
+{   // called on ButtonPress in label widgets with attached user handler (clocks!)
+    int s, data = (intptr_t) client_data;
+    Option *opt = dialogOptions[data >> 8] + (s = data & 255);
+
+    if(((XButtonEvent*)event)->button != Button1) s = -s;
+    ((ButtonCallback*) opt->target) (s);
+}
+
+static void
 CheckCallback (Widget ww, XtPointer client_data, XEvent *event, Boolean *b)
 {
     int s, data = (intptr_t) client_data;
     Option *opt = dialogOptions[data >> 8] + (data & 255);
 
-    if(opt->type == Label) { ((ButtonCallback*) opt->target)(data&255); return; }
-
     GetWidgetState(opt, &s);
     SetWidgetState(opt, !s);
 }
@@ -333,7 +374,7 @@ SpinCallback (Widget w, XtPointer client_data, XtPointer call_data)
        if(--j < opt->min) return;
     } else return;
     snprintf(buf, MSG_SIZ,  "%d", j);
-    SetWidgetText(opt, buf, TransientDlg);
+    SetWidgetText(opt, buf, shellUp[TransientDlg] ? TransientDlg : MasterDlg);
 }
 
 static void
@@ -626,7 +667,8 @@ GenericPopDown (Widget w, XEvent *event, String *prms, Cardinal *nprms)
 {   // to cause popdown through a translation (Delete Window button!)
     int dlg = atoi(prms[0]);
     Widget sh = shells[dlg];
-    if(shellUp[BrowserDlg] && dlg != BrowserDlg || dialogError) return; // prevent closing dialog when it has an open file-browse daughter
+    if(shellUp[BrowserDlg] && dlg != BrowserDlg || dialogError || dlg == MasterDlg && shellUp[TransientDlg])
+       return; // prevent closing dialog when it has an open file-browse or transient daughter
     shells[dlg] = w;
     PopDown(dlg);
     shells[dlg] = sh; // restore
@@ -920,6 +962,7 @@ GenericPopUp (Option *option, char *title, DialogClass dlgNr, DialogClass parent
        shellUp[dlgNr] = True;
        return 0;
     }
+    if(dlgNr == TransientDlg && parent == BoardWindow && shellUp[MasterDlg]) parent = MasterDlg; // MasterDlg can always take role of main window
 
     dialogOptions[dlgNr] = option; // make available to callback
     // post currentOption globally, so Spin and Combo callbacks can already use it
@@ -964,7 +1007,7 @@ GenericPopUp (Option *option, char *title, DialogClass dlgNr, DialogClass parent
     for(h=0; h<height || c == width-1; h++) {
        i = h + c*height;
        if(option[i].type == EndMark) break;
-       if(option[i].type == -1) continue;
+       if(option[i].type == Skip) continue;
        lastrow = forelast;
        forelast = last;
        switch(option[i].type) {
@@ -1075,7 +1118,7 @@ GenericPopUp (Option *option, char *title, DialogClass dlgNr, DialogClass parent
            XtSetArg(args[j], XtNlabel, _(msg));  j++;
            option[i].handle = (void*) (last = XtCreateManagedWidget("label", labelWidgetClass, form, args, j));
            if(option[i].target) // allow user to specify event handler for button presses
-               XtAddEventHandler(last, ButtonPressMask, False, CheckCallback, (XtPointer)(intptr_t) i + 256*dlgNr);
+               XtAddEventHandler(last, ButtonPressMask, False, LabelCallback, (XtPointer)(intptr_t) i + 256*dlgNr);
            break;
          case SaveButton:
          case Button:
@@ -1086,7 +1129,7 @@ GenericPopUp (Option *option, char *title, DialogClass dlgNr, DialogClass parent
            j = SetPositionAndSize(args, last, lastrow, 3 /* border */,
                                   option[i].max /* w */, shrink ? textHeight : 0 /* h */, option[i].min & 0xE | chain /* chain */);
            XtSetArg(args[j], XtNlabel, _(option[i].name));  j++;
-           if(option[i].textValue) { // special for buttons of New Variant dialog
+           if(option[i].textValue && *option[i].textValue == '#') { // special for buttons of New Variant dialog
                XtSetArg(args[j], XtNsensitive, option[i].value >= 0 && (appData.noChessProgram
                                         || strstr(first.variants, VariantName(option[i].value)))); j++;
                XtSetArg(args[j], XtNborderWidth, (gameInfo.variant == option[i].value)+1); j++;
@@ -1188,6 +1231,7 @@ GenericPopUp (Option *option, char *title, DialogClass dlgNr, DialogClass parent
            last = form; lastrow = oldLastRow; form = oldForm; forelast = oldForeLast;
            break;
          case Break:
+           if(c) break;
            width++;
            height = i+1;
            stack = !(option[i].min & SAME_ROW);
@@ -1271,7 +1315,7 @@ GenericPopUp (Option *option, char *title, DialogClass dlgNr, DialogClass parent
     XtAddCallback(b_ok, XtNcallback, GenericCallback, (XtPointer)(intptr_t) (30001 + (dlgNr<<16)));
     if(!(option[i].min & NO_CANCEL)) {
       XtSetArg(args[1], XtNfromHoriz, b_ok); // overwrites!
-      b_cancel = XtCreateManagedWidget(_("cancel"), commandWidgetClass, form, args, j);
+      b_cancel = XtCreateManagedWidget(_("Cancel"), commandWidgetClass, form, args, j);
       XtAddCallback(b_cancel, XtNcallback, GenericCallback, (XtPointer)(intptr_t) (30000 + (dlgNr<<16)));
     }
   }
@@ -1342,6 +1386,11 @@ void
 SetInsertPos (Option *opt, int pos)
 {
     Arg args[16];
+    if(pos == 999999) { // this kludge to indicate end in GTK is fatal in Xaw
+      char *s;
+      GetWidgetText(opt, &s);
+      pos = strlen(s) - 1;
+    }
     XtSetArg(args[0], XtNinsertPosition, pos);
     XtSetValues(opt->handle, args, 1);
 //    SetFocus(opt->handle, shells[InputBoxDlg], NULL, False); // No idea why this does not work, and the following is needed:
@@ -1353,6 +1402,8 @@ TypeInProc (Widget w, XEvent *event, String *prms, Cardinal *nprms)
 {   // can be used as handler for any text edit in any dialog (from GenericPopUp, that is)
     int n = prms[0][0] - '0';
     Widget sh = XtParent(XtParent(XtParent(w))); // popup shell
+    extern int hidden;
+    hidden = 0;
 
     if(n<2) { // Enter or Esc typed from primed text widget: treat as if dialog OK or cancel button hit.
        int dlgNr; // figure out what the dialog number is by comparing shells (because we must pass it :( )
@@ -1362,7 +1413,7 @@ TypeInProc (Widget w, XEvent *event, String *prms, Cardinal *nprms)
 }
 
 void
-HardSetFocus (Option *opt)
+HardSetFocus (Option *opt, DialogClass dlg)
 {
     XSetInputFocus(xDisplay, XtWindow(opt->handle), RevertToPointerRoot, CurrentTime);
 }
index 38186c2..8ac0122 100644 (file)
@@ -43,6 +43,7 @@
 -soundTell phone.wav
 -soundChallenge gong.wav
 -soundMove woodthunk.wav
+-soundRoar roar.wav
 -soundIcsAlarm penalty.wav
 -pasteSelection false
 -keepLineBreaksICS false
@@ -58,6 +59,7 @@
 -defaultTourneyName "Tourney_%y%M%d_%h%m.trn"
 -variations true
 -appendPV true
+-memoHeaders true
 ;
 ; PGN format & Game List
 ;
@@ -68,7 +70,6 @@
 ; Engines & adjudicatons in engine-engine games
 ;
 -firstChessProgram fairymax
--secondChessProgram fairymax
 -firstChessProgramNames {fairymax
 "Fruit 2.1" -fcp fruit -fUCI
 "Crafty" -fcp crafty
@@ -76,7 +77,7 @@
 }
 -niceEngines 0
 -polyglotDir ""
--adapterCommand 'polyglot -noini -ec "%fcp" -ed "%fd" -uci NalimovCache=%defaultCacheSizeEGTB'
+-adapterCommand 'polyglot -noini -ec "%fcp" -ed "%fd" -uci NalimovCache=%defaultCacheSizeEGTB -pg ShowTbHits=true'
 -defaultPathEGTB "/egtb"
 -egtFormats ""
 -testClaims true
@@ -117,6 +118,8 @@ Match (name);match $name;
 Tell (name);tell $name $input;
 Play (name);play $name;
 Message (name);message $name $input;
+Copy;$copy;
+Open Chat Box (name);$chat;
 }
 ;
 ; Save user settings.
index d59246f..56fa338 100644 (file)
@@ -335,9 +335,14 @@ FEN (Forsythe-Edwards notation) format unless the @code{oldSaveStyle}
 option is true, in which case they are saved in an older,
 human-readable format that is specific to XBoard. Both formats
 can be read back by the @samp{Load Position} command.
+@item Save Selected Games
+@cindex Save Selected Games
+Will cause all games selected for display in the current Game List
+to be appended to a file of the user's choice.
 @item Save Games as Book
 @cindex Save Games as Book, Menu Item
-Creates an opening book from the currently loaded game file.
+Creates an opening book from the currently loaded game file,
+incorporating only the games currently selected in the Game List.
 The book will be saved on the file specified in the @samp{Common Engine}
 options dialog.
 The value of @samp{Book Depth} specified in that same dialog will 
@@ -346,7 +351,7 @@ the internal book buffer.
 This command can take a long time to process,
 and the size of the buffer is currently limited.
 At the end the buffer will be saved as a Polyglot book,
-but the buffer will ot be cleared,
+but the buffer will not be cleared,
 so that you can continue adding games from other game files.
 @item Mail Move
 @itemx Reload CMail Message
@@ -1759,44 +1764,29 @@ Not available if the last position was loaded from a pipe.
 Currently no keystroke is assigned to this ReloadPositionProc.
 @end table
 
-You can add or remove shortcut keys using the X resources
-@code{form.translations}. Here is an example of what would go in your
-@file{.Xresources} file:
+In the Xaw build of XBoard you can add or remove shortcut keys
+using the X resources @code{paneA.translations}.
+Here is an example of what could go into your
+@file{.Xdefaults} file:
 
 @example
-XBoard*form.translations: \
-  Shift<Key>?: AboutGameProc() \n\
-  <Key>y: AcceptProc() \n\
-  <Key>n: DeclineProc() \n\
-  <Key>i: NothingProc()
+XBoard*paneA.translations: \
+  Shift<Key>?: MenuItem(Help.About) \n\
+  Ctrl<Key>y: MenuItem(Action.Accept) \n\
+  Ctrl<Key>n: MenuItem(Action.Decline) \n\
+  Ctrl<Key>i: MenuItem(Nothing)
 @end example
 @noindent
-Binding a key to @code{NothingProc} makes it do nothing, thus removing
-it as a shortcut key. The XBoard commands that can be bound to keys
+So the key should always be bound to the action 'MenuItem',
+with the (hierarchical) name of the menu item as argument.
+There are a few actions available for which no menu item exists:
+Binding a key to @code{Nothing} makes it do nothing, thus removing
+it as a shortcut key. Other such functions that can be bound to keys
 are:
 
 @example
-AbortProc, AboutGameProc, AboutProc, AcceptProc, AdjournProc,
-AlwaysQueenProc, AnalysisModeProc, AnalyzeFileProc,
-AnimateDraggingProc, AnimateMovingProc, AutobsProc, AutoflagProc,
-AutoflipProc, AutoraiseProc, AutosaveProc, BackwardProc,
-BlindfoldProc, BookProc, CallFlagProc, CopyGameProc, CopyPositionProc,
-DebugProc, DeclineProc, DrawProc, EditCommentProc, EditGameProc,
-EditPositionProc, EditTagsProc, EnterKeyProc, FlashMovesProc,
-FlipViewProc, ForwardProc, GetMoveListProc, HighlightLastMoveProc,
-HintProc, IcsAlarmProc, IcsClientProc, IcsInputBoxProc,
-InfoProc, LoadGameProc, LoadNextGameProc, LoadNextPositionProc,
-LoadPositionProc, LoadPrevGameProc, LoadPrevPositionProc,
-LoadSelectedProc, MachineBlackProc, MachineWhiteProc, MailMoveProc,
-ManProc, MoveNowProc, MoveSoundProc, NothingProc, OldSaveStyleProc,
-PasteGameProc, PastePositionProc, PauseProc, PeriodicUpdatesProc,
-PonderNextMoveProc, PopupExitMessageProc, PopupMoveErrorsProc,
-PremoveProc, QuietPlayProc, QuitProc, ReloadCmailMsgProc,
-ReloadGameProc, ReloadPositionProc, RematchProc, ResetProc,
-ResignProc, RetractMoveProc, RevertProc, SaveGameProc,
-SavePositionProc, ShowCoordsProc, ShowGameListProc, ShowThinkingProc,
-StopExaminingProc, StopObservingProc, TestLegalityProc, ToEndProc,
-ToStartProc, TrainingProc, TruncateGameProc, and TwoMachinesProc.
+AboutGame, DebugProc (switches the -debug option on or off),
+LoadNextGame, LoadPrevGame, ReloadGame, ReloadPosition.
 @end example
 
 @node Options
@@ -3112,7 +3102,8 @@ Default: true.
 The font used for the clocks. If the option value is a pattern
 that does not specify the font size, XBoard tries to choose an
 appropriate font for the board size being used.
-Default: -*-helvetica-bold-r-normal--*-*-*-*-*-*-*-*.
+Default Xaw: -*-helvetica-bold-r-normal--*-*-*-*-*-*-*-*.
+Default GTK: Sans Bold %d.
 @item -coordFont font
 @cindex coordFont, option
 @cindex Font, coordinates
@@ -3120,15 +3111,56 @@ The font used for rank and file coordinate labels if @code{showCoords}
 is true. If the option value is a pattern that does not specify
 the font size, XBoard tries to choose an appropriate font for
 the board size being used.
-Default: -*-helvetica-bold-r-normal--*-*-*-*-*-*-*-*.
+Default Xaw: -*-helvetica-bold-r-normal--*-*-*-*-*-*-*-*.
+Default GTK: Sans Bold %d.
 @item -messageFont font
 @cindex messageFont, option
 @cindex Font, message
-The font used for popup dialogs, menus, comments, etc.
+The font used for popup dialogs, menus, etc.
 If the option value is a pattern that does not specify
 the font size, XBoard tries to choose an appropriate font for
 the board size being used.
-Default: -*-helvetica-medium-r-normal--*-*-*-*-*-*-*-*.
+Default Xaw: -*-helvetica-medium-r-normal--*-*-*-*-*-*-*-*.
+Default GTK: Sans Bold %d.
+@cindex tagsFont, option
+@cindex Font, tags
+The font used in the Edit Tags dialog.
+If the option value contains %d, XBoard will replace it by
+an appropriate font for the board size being used.
+(Only used in GTK build.)
+Default: Sans Normal %d.
+@cindex commentFont, option
+@cindex Font, comment
+The font used in the Edit Comment dialog.
+If the option value contains %d, XBoard will replace it by
+an appropriate font for the board size being used.
+(Only used in GTK build.)
+Default: Sans Normal %d.
+@cindex icsFont, option
+@cindex Font, ics
+The font used to display ICS output in the ICS  Chat window.
+As ICS output often contains tables aligned by spaces,
+a mono-space font is recommended here.
+If the option value contains %d, XBoard will replace it by
+an appropriate font for the board size being used.
+(Only used in GTK build.)
+Default: Monospace Normal %d.
+@cindex moveHistoryFont, option
+@cindex Font, moveHistory
+The font used in Move History and Engine Output windows.
+As these windows display mainly moves,
+one could use a figurine font here.
+If the option value contains %d, XBoard will replace it by
+an appropriate font for the board size being used.
+(Only used in GTK build.)
+Default: Sans Normal %d.
+@cindex gameListFont, option
+@cindex Font, gameList
+The font used in the listbox of the Game List window.
+If the option value contains %d, XBoard will replace it by
+an appropriate font for the board size being used.
+(Only used in GTK build.)
+Default: Sans Bold %d.
 @item -fontSizeTolerance tol
 @cindex fontSizeTolerance, option
 In the font selection algorithm, a nonscalable font will be preferred
@@ -3289,6 +3321,14 @@ Default: False.
 When true, scores will always be printed from the white point-of-view, 
 rather than the side-to-move point-of-view.
 Default: False.
+@item -memoHeaders true|false
+@cindex memoHeaders, option
+When true, column headers will be displayed in the Engine Output window
+for the depth, score, time and nodes data.
+Right-clicking on these headers will hide or show the corresponding data.
+(Not intended for dynamic use, as already printed data of the current search
+will not be affected!)
+Defaul: False.
 @end table
 
 @node Adjudication Options
@@ -3429,6 +3469,7 @@ cylinder      Pieces wrap around the board edge
 knightmate    King moves as Knight, and vice versa 
 super         Superchess (shuffle variant with 4 exo-pieces)
 makruk        Thai Chess (shatranj-like, P promotes on 6th rank)
+asean         ASEAN Chess (a modernized version of Makruk)
 spartan       Spartan Chess (black has unorthodox pieces)
 fairy         A catchall variant in which all piece types 
               known to XBoard can participate (8x8)
@@ -3562,7 +3603,14 @@ Default is the login name on your local computer.
 @itemx -delayAfterQuit number
 @cindex delayBeforeQuit, option
 @cindex delayAfterQuit, option
-These options specify how long XBoard has to wait before sending a termination signal to rogue engine processes, that do not want to react to the 'quit' command. The second one determines the pause after killing the engine, to make sure it dies.
+These options order pauses before and after sending the "quit" command to an engine that must be terminated.
+The pause between quit and the previous command is specified in milliseconds.
+The pause after quit is used to schedule a kill signal to be sent to the engine process after the
+number of specified seconds plus one.
+This signal is a different one as the terminiation signal described in the protocol specs
+which engines can suppress or ignore, and which is sent directly after the "quit" command.
+Setting @code{delayAfterQuit} to -1 will suppress sending of the kill signal.
+Default: 0
 @item -searchMode n
 @cindex searchMode, option
 The integer n encodes the mode for the @samp{find position} function.
@@ -4146,7 +4194,6 @@ Here are some other programs you can use with XBoard
 * Fairy-Max::        The Fairy-Max chess engine.
 * HoiChess::         The HoiChess chess engine.
 * Crafty::           The Crafty chess engine.
-* zic2xpm::          The program used to import chess sets from ZIICS.
 @end menu
 
 @node GNU Chess
@@ -4203,45 +4250,6 @@ To use Crafty with XBoard, give the -fcp and -fd options as follows, where
 <crafty's directory> is the directory in which you installed Crafty
 and placed its book and other support files.
 
-@node zic2xpm
-@section zic2xpm
-
-The ``zic2xpm'' program is used to import chess sets from the ZIICS(*)
-program into XBoard. ``zic2xpm'' is part of the XBoard distribution.
-ZIICS is available from:
-
-ftp://ftp.freechess.org/pub/chess/DOS/ziics131.exe
-
-To import ZIICS pieces, do this:
-@table @asis
-@item 1. Unzip ziics131.exe into a directory:
-
-@example
-unzip -L ziics131.exe -d ~/ziics
-@end example
-@item 2. Use zic2xpm to convert a set of pieces to XBoard format.
-
-For example, let's say you want to use the
-FRITZ4 set. These files are named ``fritz4.*'' in the ZIICS distribution.
-
-@example
-mkdir ~/fritz4
-cd ~/fritz4
-zic2xpm ~/ziics/fritz4.*
-@end example
-@item 3. Give XBoard the ``-pixmap'' option when starting up, e.g.:
-
-@example
-xboard -pixmap ~/fritz4
-@end example
-@end table
-
-(*) ZIICS is a separate copyrighted work of Andy McFarland.
-The ``ZIICS pieces'' are copyrighted works of their respective
-creators. Files produced by ``zic2xpm'' are for PERSONAL USE ONLY
-and may NOT be redistributed without explicit permission from
-the original creator(s) of the pieces.
-
 @ifnottex
 @node Copyright
 @unnumbered Copyright
index babb9f0..1616749 100644 (file)
--- a/xboard2.h
+++ b/xboard2.h
@@ -28,4 +28,4 @@ extern int searchTime;
 extern int squareSize, lineGap, defaultLineGap;
 extern int startedFromPositionFile;
 extern char *icsTextMenuString;
-
+extern int hi2X, hi2Y;
diff --git a/zic2xpm.c b/zic2xpm.c
deleted file mode 100644 (file)
index 2fdd078..0000000
--- a/zic2xpm.c
+++ /dev/null
@@ -1,597 +0,0 @@
-/*
-       zic2xpm.c
-
-       Program to convert pieces from ZIICS format to XPM & XIM format.
-       (C version)  By Frank McIngvale <frankm@hiwaay.net>.
-
-       Copyright (C) 1996, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
-
-       NOTICE: The piece images distributed with ZIICS are
-           copyrighted works of their original creators.  Images
-            converted with zic2xpm may not be redistributed without
-           the permission of the copyright holders.  Do not contact
-           the authors of zic2xpm or of ZIICS itself to request
-           permission.
-
-       NOTICE:  The format of the ZIICS piece file was gleaned from
-           SHOWSETS.PAS, a part of ZIICS.  Thanks to Andy McFarland
-           (Zek on ICC) for making this source available!  ZIICS is a
-           completely separate and copyrighted work of Andy
-           McFarland.  Use and distribution of ZIICS falls under the
-           ZIICS license, NOT the GNU General Public License.
-
-       NOTICE: The format of the VGA imageblocks was determined
-            by experimentation, and without access to any
-            of Borland Inc.'s BGI library source code.
-
-
-           GNU XBoard is free software: you can redistribute it
-           and/or modify it under the terms of the GNU General Public
-           License as published by the Free Software Foundation,
-           either version 3 of the License, or (at your option) any
-           later version.
-
-           GNU XBoard is distributed in the hope that it will be
-           useful, but WITHOUT ANY WARRANTY; without even the implied
-           warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-           PURPOSE. See the GNU General Public License for more
-           details.
-
-           You should have received a copy of the GNU General Public
-           License along with this program. If not, see
-           http://www.gnu.org/licenses/.
-
-
-       ** If you find a bug in zic2xpm.c, please report it to me,
-          Frank McIngvale (frankm@hiwaay.net) so that I may fix it. **
-*/
-
-/*
-       Usage: zic2xpm file1 [file2 ...]
-
-       We split the ZIICS file(s) into 24 XPM & 24 XIM files with names:
-
-       <piece><type><size>.(xpm|xim).
-
-       Where:
-               piece = p, n, b, r, q, k
-               type = ll, ld, dl, dd
-               size = Piece size.
-
-       Plus 4 files for the light & dark squares.
-
-       This means that you can extract multiple SIZES in one directory
-       without name clashes. Extracting two sets of the SAME
-       size in a directory will cause the second to overwrite
-       the first.
-*/
-
-/*
-   Technical note: Yes, this file is huge. I made it by cramming
-                   `zic2xpm' and `zic2xim' together. This should
-                   be less confusing to use, though.
-*/
-
-#include "config.h"
-#include <stdio.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#endif
-
-#ifndef SEEK_SET
-#define SEEK_SET 0
-#endif
-
-/*
-   XIM file format:
-
-   width       byte
-   height      byte
-
-   Data (1 byte per pixel, row major)
-*/
-
-/*
-   Map colors from ZIICS -> XIM :
-
-   0   0       Dark piece
-   2   1       Dark square
-   15  2       Light piece
-   14  3       Light square
-*/
-
-typedef struct {
-  int zval;            /* ZIICS value */
-  int xval;            /* XIM value */
-} z2xim;
-
-/* Associate VGA color with XPM color/sym */
-
-typedef struct {
-  int cval;            /* VGA pixel value */
-  char xchar;  /* XPM character for this color */
-  char *csym;  /* Symbolic name */
-  char *cdefault; /* Default color */
-} z2xpm;
-
-#define NR_ZIICS_COLORS 4
-#define BUFLEN 100
-
-/* SHOWSETS.PAS (from ZIICS) states that images may only
-   use color numbers 0, 2, 14, and 15 */
-
-z2xim z2xim_tab[NR_ZIICS_COLORS] = {
-  { 0, 0 },
-  { 2, 1 },
-  { 15, 2 },
-  { 14, 3 } };
-
-z2xpm z2xpm_tab[NR_ZIICS_COLORS] = {
-  { 15, 'X', "light_piece", "white" },
-  { 0, ' ', "dark_piece", "black" },
-  { 14, '*', "light_square", "gray" },
-  { 2, '.', "dark_square", "green" } };
-
-void
-fatal (char *str)
-{
-  printf("Fatal error: %s\n", str );
-  exit(1);
-}
-
-z2xim *
-lookup_xim_color (int color)
-{
-  int i;
-
-  for( i=0; i<NR_ZIICS_COLORS; ++i )
-       {
-         if ( z2xim_tab[i].zval == color )
-               return (z2xim_tab + i);
-       }
-
-  fatal("Illegal color in image.");
-
-  /* NOT REACHED */
-  return NULL;                                 /* Make compiler happy */
-}
-
-z2xpm *
-lookup_xpm_color (int color)
-{
-  int i;
-
-  for( i=0; i<NR_ZIICS_COLORS; ++i )
-       {
-         if ( z2xpm_tab[i].cval == color )
-               return (z2xpm_tab + i);
-       }
-
-  fatal("Illegal color in image.");
-
-  /* NOT REACHED */
-  return NULL;                                 /* Make compiler happy */
-}
-
-char *src_name;
-
-int
-up8 (int i)
-{
-  int r;
-
-  r = i % 8;
-  if ( r == 0 )
-       return i;
-
-  return i + 8 - r;
-}
-
-unsigned int
-vga_imagesize (int w, int h)
-{
-  int w8;
-  unsigned int s;
-
-  w8 = up8( w );
-
-  s = 4 + w8/2 * h + 2;
-
-  return s;
-}
-
-unsigned char *
-decode_byte (unsigned char *dest, unsigned char *b, int w)
-{
-  int i, j;
-  unsigned char byte, bit;
-
-  for( i=7; w > 0; --i, --w )
-       {
-         byte = 0;
-
-         /* 1 bit from each plane */
-         for( j=0; j<4; ++j )
-               {
-                 bit = b[j];
-                 bit &= (1 << i);
-                 bit >>= i;
-                 bit <<= 3-j;
-                 byte |= bit;
-               }
-
-         *(dest++) = byte;
-       }
-
-  return dest;
-}
-
-/*
-   W is width of image in PIXELS.
-   SRC is in packed pixel format.
-   DEST is filled with 1 BYTE per PIXEL.
-*/
-unsigned char *
-decode_line (unsigned char *dest, unsigned char *src, int w)
-{
-  unsigned int w8;
-  unsigned int bpp;
-  unsigned char b[4];
-  int i;
-  unsigned char *p;
-
-  p = src;
-  w8 = up8( w );
-
-  /* 4 planes, bpp BYTES per plane */
-  /* Planes are MSB -> LSB */
-  bpp = w8 >> 3;
-
-  while( w > 0 )
-       {
-         for( i=0; i<4; ++i )
-               b[i] = p[i*bpp];
-
-         if ( w > 8 )
-               dest = decode_byte( dest, b, 8 );
-         else
-               dest = decode_byte( dest, b, w );
-
-         w -= 8;
-         ++p;
-       }
-
-  return (src + bpp * 4);
-}
-
-int
-write_xim_header (FILE *fp, int w, int h)
-{
-  fputc( w, fp );
-  fputc( h, fp );
-
-  return 0;
-}
-
-int
-write_xpm_header (FILE *fp, int w, int h)
-{
-  int i;
-  z2xpm *cv;
-
-  fprintf(fp, "/* XPM */\n");
-  fprintf(fp, "/* This file was automatically generated from the file %s\n",
-         src_name );
-  fprintf(fp, "using the program ``zic2xpm''.\n");
-  fprintf(fp, "\n    %s\n    %s\n    %s\n    %s\n    %s\n    %s */\n",
-         "NOTICE: The piece images distributed with ZIICS are",
-         "    copyrighted works of their original creators.  Images",
-          "    converted with zic2xpm may not be redistributed without",
-         "    the permission of the copyright holders.  Do not contact",
-         "    the authors of zic2xpm or of ZIICS itself to request",
-         "    permission.");
-  fprintf( fp, "static char * image_name[] = {\n" );
-  fprintf( fp, "\"%d %d %d 1\",\n", h, w, NR_ZIICS_COLORS );
-
-  cv = z2xpm_tab;
-
-  for( i=0; i<NR_ZIICS_COLORS; ++i, ++cv )
-       {
-         fprintf( fp, "\"%c\tc %s s %s\",\n", cv->xchar,
-                         cv->cdefault, cv->csym );
-       }
-
-  return 0;
-}
-
-void
-create_piece_xim (char *outname, FILE *fpin, int W, int H)
-{
-  FILE *fpout;
-  int w, h, i, j, c;
-  unsigned char *lump, *p, *line;
-  long size;
-  z2xim *ent;
-
-  fpout = fopen( outname, "wb" );
-  if ( !fpout )
-       fatal( "Can't create output file.");
-
-  /* Header is two ints -- Width then Height, x86 format */
-  c = fgetc( fpin );
-  w = (fgetc(fpin) << 8) | c;
-
-  c = fgetc( fpin );
-  h = (fgetc(fpin) << 8) | c;
-
-  ++w; ++h;
-
-  if ( w != W || h != H )
-       fatal( "Bad header." );
-
-  size = vga_imagesize( w, h ) - 4;
-  lump = (unsigned char*)malloc( size );
-  line = (unsigned char*)malloc( w );
-
-  if ( !lump || !line )
-       fatal( "Out of memory." );
-
-  fread( lump, 1, size, fpin );
-
-  /* Write XIM header */
-  write_xim_header( fpout, w, h );
-
-  p = lump;
-
-  /* Write XIM data */
-  for( i=0; i<h; ++i )
-       {
-         p = decode_line( line, p, w );
-
-         for( j=0; j<w; ++j )
-               {
-                 ent = lookup_xim_color( line[j] );
-                 fputc( ent->xval, fpout );
-               }
-       }
-
-  free( lump );
-  free( line );
-  fclose( fpout );
-}
-
-void
-create_piece_xpm (char *outname, FILE *fpin, int W, int H)
-{
-  FILE *fpout;
-  int w, h, i, j, c;
-  unsigned char *lump, *p, *line;
-  long size;
-  z2xpm *cv;
-
-  fpout = fopen( outname, "wb" );
-  if ( !fpout )
-       fatal( "Can't create output file.");
-
-  /* Header is two ints -- Width then Height, x86 format */
-  c = fgetc( fpin );
-  w = (fgetc(fpin) << 8) | c;
-
-  c = fgetc( fpin );
-  h = (fgetc(fpin) << 8) | c;
-
-  ++w; ++h;
-
-  if ( w != W || h != H )
-       fatal( "Bad header." );
-
-  size = vga_imagesize( w, h ) - 4;
-  lump = (unsigned char*)malloc( size );
-  line = (unsigned char*)malloc( w );
-
-  if ( !lump || !line )
-       fatal( "Out of memory." );
-
-  fread( lump, 1, size, fpin );
-
-  /* Write XPM header */
-  write_xpm_header( fpout, w, h );
-
-  p = lump;
-
-  /* Write XPM data */
-  for( i=0; i<h; ++i )
-       {
-         p = decode_line( line, p, w );
-
-         fprintf( fpout, "\"" );
-         for( j=0; j<w; ++j )
-               {
-                 cv = lookup_xpm_color( line[j] );
-                 fprintf( fpout, "%c", cv->xchar );
-               }
-         fprintf( fpout, "\",\n" );
-       }
-
-  fprintf( fpout, "};\n" );
-
-  free( lump );
-  free( line );
-  fclose( fpout );
-}
-
-/* The order of the pieces in the ZIICS piece file (from SHOWSETS.PAS) */
-char *pieces = "prkqbn";
-char *pname[] = { "Pawn", "Rook", "King", "Queen", "Bishop", "Knight" };
-
-/* The suborder - Light/Light, Light/Dark, etc. */
-char *prefixes[] = { "ll", "ld", "dl", "dd" };
-
-int
-process_file_xim (char *filename)
-{
-  int w, h, piece, kind, c;
-  int nr_pieces = 6;
-  int nr_kinds = 4;
-  FILE *fp;
-  char buf[BUFLEN];
-
-  src_name = filename;
-
-  fp = fopen( filename, "rb" );
-  if ( !fp )
-       fatal( "Can't open input file." );
-
-  /* Header is two ints -- Width then Height, x86 format */
-  c = fgetc( fp );
-  w = (fgetc(fp) << 8) | c;
-
-  c = fgetc( fp );
-  h = (fgetc(fp) << 8) | c;
-
-  ++w; ++h;
-
-  if ( w != h )
-       {
-         printf("ERROR: Can only convert square pieces.\n");
-         printf("       (This set is %dx%d)\n", w, h );
-         exit(1);
-       }
-
-  printf("Creating XIM files...\n");
-  printf("File: %s, W=%d, H=%d\n", filename, w, h );
-  fseek( fp, 0, SEEK_SET );
-
-  /* Write .XIM files */
-  for( piece = 0; piece < nr_pieces; ++piece )
-       {
-         printf("%s ", pname[piece] );
-
-         for( kind = 0; kind < nr_kinds; ++kind )
-               {
-                 printf( "." );
-                 /* Form output filename -- <piece><kind><size>.xim */
-                 snprintf(buf, BUFLEN, "%c%s%d.xim", pieces[piece], prefixes[kind], w);
-                 create_piece_xim( buf, fp, w, h );
-               }
-         printf("\n");
-       }
-
-  /* Write the light & dark squares */
-  snprintf( buf, BUFLEN, "lsq%d.xim", w );
-  printf("Light Square" );
-  create_piece_xim( buf, fp, w, h );
-
-  snprintf( buf, BUFLEN, "dsq%d.xim", w );
-  printf("\nDark Square" );
-  create_piece_xim( buf, fp, w, h );
-  printf("\n");
-
-  printf("Successfully converted!!\n" );
-
-  fclose( fp );
-
-  return 0;
-}
-
-int
-process_file_xpm (char *filename)
-{
-  int w, h, piece, kind, c;
-  int nr_pieces = 6;
-  int nr_kinds = 4;
-  FILE *fp;
-  char buf[BUFLEN];
-
-  src_name = filename;
-
-  fp = fopen( filename, "rb" );
-  if ( !fp )
-       fatal( "Can't open input file." );
-
-  /* Header is two ints -- Width then Height, x86 format */
-  c = fgetc( fp );
-  w = (fgetc(fp) << 8) | c;
-
-  c = fgetc( fp );
-  h = (fgetc(fp) << 8) | c;
-
-  ++w; ++h;
-
-  if ( w != h )
-       {
-         printf("ERROR: Can only convert square pieces.\n");
-         printf("       (This set is %dx%d)\n", w, h );
-         exit(1);
-       }
-
-  printf("Creating XPM files...\n");
-  printf("File: %s, W=%d, H=%d\n", filename, w, h );
-  fseek( fp, 0, SEEK_SET );
-
-  /* Write .XPM files */
-  for( piece = 0; piece < nr_pieces; ++piece )
-       {
-         printf("%s ", pname[piece] );
-
-         for( kind = 0; kind < nr_kinds; ++kind )
-               {
-                 printf( "." );
-                 /* Form output filename -- <piece><kind><size>.xpm */
-                 snprintf(buf, BUFLEN, "%c%s%d.xpm", pieces[piece], prefixes[kind], w);
-                 create_piece_xpm( buf, fp, w, h );
-               }
-         printf("\n");
-       }
-
-  /* Write the light & dark squares */
-  snprintf( buf, BUFLEN, "lsq%d.xpm", w );
-  printf("Light Square" );
-  create_piece_xpm( buf, fp, w, h );
-
-  snprintf( buf, BUFLEN, "dsq%d.xpm", w );
-  printf("\nDark Square" );
-  create_piece_xpm( buf, fp, w, h );
-  printf("\n");
-
-  printf("Successfully converted!!\n" );
-
-  fclose( fp );
-
-  return 0;
-}
-
-int
-main (int argc, char **argv)
-{
-  int i;
-
-  if ( argc < 2 )
-       {
-         printf("ZIC2XPM 2.01 - by Frank McIngvale (frankm@hiwaay.net)\n");
-         printf("Copyright (C) 1996 Free Software Foundation, Inc.\n\n");
-         printf("Usage: zic2xpm file1 [file2 ...]\n\n");
-         printf("  Splits each file (ZIICS piece files) into 26 XPM & XIM files\n");
-         printf("  suitable for use in XBoard 3.5 or later.\n");
-         printf("\n* ZIICS is a copyrighted work of Andy McFarland (Zek on ICC) *\n");
-         return 1;
-       }
-
-
-  setbuf( stdout, NULL );
-
-  for( i=1; i<argc; ++i )
-       {
-         process_file_xpm( argv[i] );
-         process_file_xim( argv[i] );
-       }
-
-  fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n%s\n",
-         "NOTICE: The piece images distributed with ZIICS are",
-         "    copyrighted works of their original creators.  Images",
-          "    converted with zic2xpm may not be redistributed without",
-         "    the permission of the copyright holders.  Do not contact",
-         "    the authors of zic2xpm or of ZIICS itself to request",
-         "    permission.");
-  return 0;
-}
diff --git a/zic2xpm.man b/zic2xpm.man
deleted file mode 100644 (file)
index 8f8977d..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-.\" Copyright (C) 1996, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
-.\" See section COPYING below.
-.TH zic2xpm 6 "11 Apr 1996" "zic2xpm 2.0" "Games"
-.SH NAME
-zic2xpm \- Tool to convert ZIICS chess pieces into XBoard (XPM/XIM) pieces.
-.SH SYNOPSIS
-zic2xpm
-.B file1 [file2 ...]
-.SH DESCRIPTION
-.B zic2xpm
-converts one or more ZIICS piece files into a format that can
-be used by XBoard.
-If you give more than one filename, be aware that multiple sets
-of the same size cannot exist in one directory. Multiple sets
-of different sizes can exist in a single directory.
-.SH EXAMPLE
-If you wanted to make a directory containing the sets SET2.V32,
-SET2.V40, SET2.V50, and SET2.V56, all of which are located in
-~/ziics, you could do:
-
-.nf
-      mkdir Sets
-      cd Sets
-      zic2xpm ~/ziics/SET2.*
-.fi
-
-You would then run XBoard like this:
-
-.nf
-     xboard -pixmap Sets
-.fi
-.SH BUGS
-Please report any bugs to
-.B frankm@hiwaay.net
-.SH "SEE ALSO"
-.BR
-.BR xboard ( 6 ).
-.SH AUTHOR
-Frank McIngvale (frankm@hiwaay.net)
-.SH COPYING
-Copyright (C) 1996,2009 Free Software Foundation, Inc.
-.PP
-NOTICE: The piece images distributed with ZIICS are
-copyrighted works of their original creators.  Images 
-converted with zic2xpm may not be redistributed without
-the permission of the copyright holders.  Do not contact
-the authors of zic2xpm or of ZIICS itself to request
-permission. 
-.PP
-NOTICE:  The format of the ZIICS piece file was gleaned from
-SHOWSETS.PAS, a part of ZIICS.  Thanks to Andy McFarland
-(Zek on ICC) for making this source available!  ZIICS is a 
-completely separate and copyrighted work of Andy
-McFarland.  Use and distribution of ZIICS falls under the
-ZIICS license, NOT the GNU General Public License.
-.PP
-NOTICE: The format of the VGA imageblocks was determined
-by experimentation, and without access to any
-of Borland Inc.'s BGI library source code.
-.PP
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3 of the License, or
-(at your option) any later version.  However, the above notices
-MUST BE RETAINED in any copy that you redistribute or modify.
-.PP
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-.PP
-You should have received a copy of the GNU General Public License
-along with this program; if not, see http://www.gnu.org/licenses/.