added JAWS support; help files for Vista; bugfixes for winboard.c
authorH.G. Muller <h.g.muller@hccnet.nl>
Fri, 10 Jul 2009 05:08:15 +0000 (22:08 -0700)
committerArun Persaud <arun@nubati.net>
Fri, 10 Jul 2009 05:08:15 +0000 (22:08 -0700)
* JAWS support
* help files should now work under Vista (the user has to have either a program to view old windows help files or to view html-files installed)
* I fixed the tabbing between all windows that were added according to Tim's sugestions.
* I added typing in of a move number in the move type-in dialog as a shortcut to going to that position by use of the < and > buttons. Mainly intended to ease life for the blind, but I think it can be generally useful. (Although the move-history dialog provides that functionality too, this is quicker if you don't happen to have it open.)
* I added typing of a FEN in the move type-in dialog in Edit Position mode. (Which could not be used without mouse at all, and is defective in crazyhouse even with mouse, as there was no way to populate holdings.)

winboard/help.c [new file with mode: 0644]
winboard/jaws.c [new file with mode: 0644]
winboard/jaws.h [new file with mode: 0644]
winboard/jaws.rc [new file with mode: 0644]
winboard/winboard.c

diff --git a/winboard/help.c b/winboard/help.c
new file mode 100644 (file)
index 0000000..a8cebd6
--- /dev/null
@@ -0,0 +1,96 @@
+/*\r
+ * help.h\r
+ *\r
+ * Copyright 2009 Free Software Foundation, Inc.\r
+ * ------------------------------------------------------------------------\r
+ *\r
+ * GNU XBoard is free software: you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation, either version 3 of the License, or (at\r
+ * your option) any later version.\r
+ *\r
+ * GNU XBoard is distributed in the hope that it will be useful, but\r
+ * WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *\r
+ *\r
+ *------------------------------------------------------------------------\r
+ ** See the file ChangeLog for a revision history.  */\r
+\r
+/* Windows html help function to avoid having to link with the htmlhlp.lib  */\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+\r
+FILE *debugFP;\r
+\r
+HWND WINAPI\r
+HtmlHelp( HWND hwnd, LPCSTR helpFile, UINT action, DWORD_PTR data )\r
+{\r
+       PROCESS_INFORMATION helpProcInfo;\r
+       STARTUPINFO siStartInfo;\r
+       char buf[100];\r
+       static int status = 0;\r
+       FILE *f;\r
+\r
+       if(status < 0) return NULL;\r
+\r
+       if(!status) {\r
+               f = fopen(helpFile, "r");\r
+               if(f == NULL) {\r
+                       status = -1;\r
+                       return NULL;\r
+               }\r
+               status = 1;\r
+               fclose(f);\r
+       }\r
+\r
+       siStartInfo.cb = sizeof(STARTUPINFO);\r
+       siStartInfo.lpReserved = NULL;\r
+       siStartInfo.lpDesktop = NULL;\r
+       siStartInfo.lpTitle = NULL;\r
+       siStartInfo.dwFlags = STARTF_USESTDHANDLES;\r
+       siStartInfo.cbReserved2 = 0;\r
+       siStartInfo.lpReserved2 = NULL;\r
+       siStartInfo.hStdInput = NULL;\r
+       siStartInfo.hStdOutput = NULL;\r
+       siStartInfo.hStdError = debugFP;\r
+\r
+       sprintf(buf, "Hh.exe %s", helpFile);\r
+\r
+       // ignore the other parameters; just start the viewer with the help file\r
+       return CreateProcess(NULL,\r
+                          buf,            /* command line */\r
+                          NULL,           /* process security attributes */\r
+                          NULL,           /* primary thread security attrs */\r
+                          FALSE,          /* handles are inherited */\r
+                          DETACHED_PROCESS|CREATE_NEW_PROCESS_GROUP,\r
+                          NULL,           /* use parent's environment */\r
+                          NULL,\r
+                          &siStartInfo,   /* STARTUPINFO pointer */\r
+                          &helpProcInfo); /* receives PROCESS_INFORMATION */\r
+}\r
+\r
+//HWND WINAPI\r
+int\r
+MyHelp(HWND hwnd, LPSTR helpFile, UINT action, DWORD_PTR data)\r
+{\r
+       static int status = 0;\r
+       FILE *f;\r
+\r
+       if(status < 0) return NULL;\r
+\r
+       if(!status) {\r
+               f = fopen(helpFile, "r");\r
+               if(f == NULL) {\r
+                       status = -1;\r
+                       return NULL;\r
+               }\r
+               status = 1;\r
+               fclose(f);\r
+       }\r
+       return WinHelp(hwnd, helpFile, action, data);\r
+}\r
diff --git a/winboard/jaws.c b/winboard/jaws.c
new file mode 100644 (file)
index 0000000..a8555a0
--- /dev/null
@@ -0,0 +1,1261 @@
+/*\r
+ * JAWS.c -- Code for Windows front end to XBoard to use it with JAWS\r
+ * $Id: winboard.c,v 2.3 2003/11/25 05:25:20 mann Exp $\r
+ *\r
+ * Copyright 1991 by Digital Equipment Corporation, Maynard,\r
+ * Massachusetts.  Enhancements Copyright\r
+ * 1992-2001,2002,2003,2004,2005,2006,2007,2008,2009 Free Software\r
+ * Foundation, Inc.\r
+ *\r
+ * XBoard borrows its colors and the bitmaps.xchess bitmap set from XChess,\r
+ * which was written and is copyrighted by Wayne Christopher.\r
+ *\r
+ * The following terms apply to Digital Equipment Corporation's copyright\r
+ * interest in XBoard:\r
+ * ------------------------------------------------------------------------\r
+ * All Rights Reserved\r
+ *\r
+ * Permission to use, copy, modify, and distribute this software and its\r
+ * documentation for any purpose and without fee is hereby granted,\r
+ * provided that the above copyright notice appear in all copies and that\r
+ * both that copyright notice and this permission notice appear in\r
+ * supporting documentation, and that the name of Digital not be\r
+ * used in advertising or publicity pertaining to distribution of the\r
+ * software without specific, written prior permission.\r
+ *\r
+ * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING\r
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL\r
+ * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR\r
+ * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,\r
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\r
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS\r
+ * SOFTWARE.\r
+ * ------------------------------------------------------------------------\r
+ *\r
+ * The following terms apply to the enhanced version of XBoard\r
+ * distributed by the Free Software Foundation:\r
+ * ------------------------------------------------------------------------\r
+ *\r
+ * GNU XBoard is free software: you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation, either version 3 of the License, or (at\r
+ * your option) any later version.\r
+ *\r
+ * GNU XBoard is distributed in the hope that it will be useful, but\r
+ * WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *\r
+ *\r
+ *------------------------------------------------------------------------\r
+ ** See the file ChangeLog for a revision history.  */\r
+\r
+// This file collects all patches for the JAWS version, so they can all be included in winboard.c\r
+// in one big swoop. At the bottom of this file you can read instructions for how to patch\r
+// WinBoard to work with JAWS with the aid of this file. Note that the code in this file\r
+// is for WinBoard 4.3 and later; for older WB versions you would have to throw out the\r
+// piece names for all pieces from Guard to Unicorn, #define ONE as '1', AAA as 'a',\r
+// BOARD_LEFT as 0, BOARD_RGHT and BOARD_HEIGHT as 8, and set holdingssizes to 0.\r
+// You will need to build with jaws.rc in stead of winboard.rc.\r
+\r
+// from common.h, but 'extern' added to it, so the actual declaraton can remain in backend.c\r
+\r
+extern long whiteTimeRemaining, blackTimeRemaining, timeControl, timeIncrement;\r
+\r
+#if 0\r
+// from moves.h, but no longer needed, as the new routines are all moved to winboard.c\r
+\r
+extern char* PieceToName P((ChessSquare p, int i));\r
+extern char* SquareToChar P((int Xpos)); \r
+extern char* SquareToNum P((int Ypos));\r
+extern int CoordToNum P((char c));\r
+\r
+#endif\r
+\r
+// from moves.c, added WinBoard_F piece types and ranks / files\r
+\r
+char *squareToChar[] = { "ay", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l" };\r
+\r
+char *squareToNum[] = {"naught", "1", "2", "3", "4", "5", "6", "7", "8", "9" };\r
+\r
+char *ordinals[] = {"zeroth", "first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "nineth"};\r
+\r
+char *pieceToName[] = {\r
+               "White Pawn", "White Knight", "White Bishop", "White Rook", "White Queen", \r
+               "White Guard", "White Elephant", "White Arch Bishop", "White Chancellor",\r
+               "White General", "White Man", "White Cannon", "White Night Rider",\r
+               "White Crowned Bishop", "White Crowned Rook", "White Grass Hopper", "White Veteran",\r
+               "White Falcon", "White Amazon", "White Snake", "White Unicorn",\r
+               "White King",\r
+               "Black Pawn", "Black Knight", "Black Bishop", "Black Rook", "Black Queen",\r
+               "Black Guard", "Black Elephant", "Black Arch Bishop", "Black Chancellor",\r
+               "Black General", "Black Man", "Black Cannon", "Black Night Rider",\r
+               "Black Crowned Bishop", "Black Crowned Rook", "Black Grass Hopper", "Black Veteran",\r
+               "Black Falcon", "Black Amazon", "Black Snake", "Black Unicorn",\r
+               "Black King",\r
+               "Empty"\r
+       };\r
+\r
+int CoordToNum(c)\r
+               char c;\r
+{\r
+       if(isdigit(c)) return c - ONE;\r
+       if(c >= 'a') return c - AAA;\r
+       return 0;\r
+}\r
+\r
+char* PieceToName(p, i)\r
+       ChessSquare p;\r
+       int i;\r
+{\r
+       if(i) return pieceToName[(int) p];\r
+               return pieceToName[(int) p]+6;\r
+}\r
+\r
+char* SquareToChar(x)\r
+                       int x;\r
+{\r
+               return squareToChar[x - BOARD_LEFT];\r
+}\r
+\r
+char* SquareToNum(y)\r
+                       int y;\r
+{\r
+               return squareToNum[y + (gameInfo.boardHeight < 10)];\r
+}\r
+\r
+\r
+// from winboard.c: all new routines\r
+\r
+#include "jfwapi.h"\r
+#include "jaws.h"\r
+\r
+typedef JFWAPI BOOL (WINAPI *PSAYSTRING)(LPCTSTR lpszStrinToSpeak, BOOL bInterrupt);\r
+\r
+PSAYSTRING RealSayString;\r
+\r
+VOID SayString(char *mess, BOOL flag)\r
+{ // for debug file\r
+       char buf[MSG_SIZ], *p;\r
+       if(appData.debugMode) fprintf(debugFP, "SAY '%s'\n", mess);\r
+       strcpy(buf, mess);\r
+       if(p = StrCaseStr(buf, "Xboard adjudication:")) {\r
+               int i;\r
+               for(i=19; i>1; i--) p[i] = p[i-1];\r
+               p[1] = ' ';\r
+       }\r
+       RealSayString(buf, flag);\r
+}\r
+\r
+//static int fromX = 0, fromY = 0;\r
+static int oldFromX, oldFromY;\r
+static int timeflag;\r
+static int suppressClocks = 0;\r
+\r
+BOOL\r
+InitJAWS()\r
+{      // to be called at beginning of WinMain, after InitApplication and InitInstance\r
+       HINSTANCE hApi = LoadLibrary("jfwapi32.dll");\r
+       if(!hApi) {\r
+               DisplayInformation("Missing jfwapi32.dll");        \r
+               return (FALSE);\r
+       }\r
+\r
+       RealSayString = (PSAYSTRING)GetProcAddress(hApi, "JFWSayString");\r
+       if(!RealSayString) {\r
+               DisplayInformation("SayString returned a null pointer");\r
+               return (FALSE);\r
+       }\r
+\r
+       {\r
+               // [HGM] kludge to reduce need for modification of winboard.c: mak tinyLayout menu identical\r
+               // to standard layout, so that code for switching between them does not have to be deleted\r
+               HMENU hmenu = GetMenu(hwndMain);\r
+               int i;\r
+\r
+               menuBarText[0][5] = "&JAWS";\r
+               for(i=0; i<7; i++) menuBarText[1][i] = menuBarText[0][i];\r
+               for (i=0; menuBarText[tinyLayout][i]; i++) {\r
+                       ModifyMenu(hmenu, i, MF_STRING|MF_BYPOSITION|MF_POPUP, \r
+                                       (UINT)GetSubMenu(hmenu, i), menuBarText[tinyLayout][i]);\r
+               }\r
+               DrawMenuBar(hwndMain);\r
+       }\r
+\r
+       /* initialize cursor position */\r
+       fromX = fromY = 0;\r
+       SetHighlights(fromX, fromY, -1, -1);\r
+       DrawPosition(FALSE, NULL);\r
+       oldFromX = oldFromY = -1;\r
+\r
+       if(hwndConsole) SetFocus(hwndConsole);\r
+       return TRUE;\r
+}\r
+\r
+VOID\r
+KeyboardEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)\r
+{\r
+       ChessSquare currentPiece;\r
+       char *piece, *xchar, *ynum ;\r
+       int n;\r
+\r
+       if(fromX == -1 || fromY == -1) {\r
+               fromX = BOARD_LEFT; fromY = 0;\r
+        }\r
+       switch(wParam) {\r
+       case VK_LEFT:\r
+               if(fromX == BOARD_RGHT+1) fromX -= 2; else\r
+               if(fromX == BOARD_LEFT) { if(fromY >= BOARD_HEIGHT - gameInfo.holdingsSize) fromX -= 2; } else\r
+               if(fromX > BOARD_LEFT) fromX--;\r
+               break;\r
+       case VK_RIGHT:\r
+               if(fromX == BOARD_LEFT-2) fromX += 2; else\r
+               if(fromX == BOARD_RGHT-1) { if(fromY < gameInfo.holdingsSize) fromX += 2; } else\r
+               if(fromX < BOARD_RGHT-1) fromX++;\r
+               break;\r
+       case VK_UP:\r
+               if(fromX == BOARD_RGHT+1) { if(fromY < gameInfo.holdingsSize - 1) fromY++; } else\r
+               if(fromY < BOARD_HEIGHT-1) fromY++;\r
+               break;\r
+       case VK_DOWN:\r
+               if(fromX == BOARD_LEFT-2) { if(fromY > BOARD_HEIGHT - gameInfo.holdingsSize) fromY--; } else\r
+               if(fromY > 0) fromY--;\r
+               break;\r
+       }\r
+       SetHighlights(fromX, fromY, -1, -1);\r
+       DrawPosition(FALSE, NULL);\r
+       currentPiece = boards[currentMove][fromY][fromX];\r
+       piece = PieceToName(currentPiece,1);\r
+       if(currentPiece != EmptySquare) MessageBeep(currentPiece < (int)BlackPawn ? MB_OK : MB_ICONEXCLAMATION);\r
+       if(fromX == BOARD_LEFT - 2) {\r
+               SayString("black holdings", FALSE);\r
+               if(currentPiece != EmptySquare) {\r
+                       char buf[MSG_SIZ];\r
+                       n = boards[currentMove][fromY][1];\r
+                       sprintf(buf, "%d %s%s", n, piece+6, n == 1 ? "" : "s");\r
+                       SayString(buf, TRUE);\r
+               }\r
+       } else\r
+       if(fromX == BOARD_RGHT + 1) {\r
+               SayString("white holdings", FALSE);\r
+               if(currentPiece != EmptySquare) {\r
+                       char buf[MSG_SIZ];\r
+                       n = boards[currentMove][fromY][BOARD_WIDTH-2];\r
+                       sprintf(buf, "%d %s%s", n, piece+6, n == 1 ? "" : "s");\r
+                       SayString(buf, TRUE);\r
+               }\r
+       } else\r
+       if(fromX >= BOARD_LEFT && fromX < BOARD_RGHT) {\r
+               char buf[MSG_SIZ];\r
+               xchar = SquareToChar(fromX);\r
+               ynum = SquareToNum(fromY);\r
+               if(currentPiece != EmptySquare) {\r
+//                     SayString(piece[0] == 'W' ? "white" : "black", TRUE);\r
+                       sprintf(buf, "%s %s %s", piece, xchar, ynum);\r
+               } else sprintf(buf, "%s %s", xchar, ynum);\r
+               SayString(buf, TRUE);\r
+       }\r
+       return;\r
+}\r
+\r
+extern char castlingRights[MAX_MOVES][BOARD_SIZE];\r
+int PosFlags(int nr);\r
+\r
+typedef struct {\r
+    int rf, ff, rt, ft;\r
+    int onlyCaptures;\r
+    int count;\r
+} ReadClosure;\r
+\r
+extern void ReadCallback P((Board board, int flags, ChessMove kind,\r
+                               int rf, int ff, int rt, int ft,\r
+                               VOIDSTAR closure));\r
+\r
+void ReadCallback(board, flags, kind, rf, ff, rt, ft, closure)\r
+     Board board;\r
+     int flags;\r
+     ChessMove kind;\r
+     int rf, ff, rt, ft;\r
+     VOIDSTAR closure;\r
+{\r
+    register ReadClosure *cl = (ReadClosure *) closure;\r
+    ChessSquare possiblepiece;\r
+    char *piece, *xchar, *ynum ;\r
+\r
+//if(appData.debugMode) fprintf(debugFP, "%c%c%c%c\n", ff+AAA, rf+ONE, ft+AAA, rt+ONE);\r
+    if(cl->ff == ff && cl->rf == rf) {\r
+       possiblepiece = board[rt][ft];\r
+       if(possiblepiece != EmptySquare) {\r
+               piece = PieceToName(possiblepiece,1);\r
+               xchar = SquareToChar(ft);\r
+               ynum  = SquareToNum(rt);\r
+               SayString(xchar , FALSE);\r
+               SayString(ynum, FALSE);\r
+               SayString(piece, FALSE);\r
+               cl->count++;\r
+       }\r
+    }\r
+    if(cl->ft == ft && cl->rt == rt) {\r
+       possiblepiece = board[rf][ff];\r
+               piece = PieceToName(possiblepiece,1);\r
+               xchar = SquareToChar(ff);\r
+               ynum  = SquareToNum(rf);\r
+               SayString(xchar , FALSE);\r
+               SayString(ynum, FALSE);\r
+               SayString(piece, FALSE);\r
+               cl->count++;\r
+    }\r
+}\r
+\r
+VOID\r
+PossibleAttackMove()\r
+{\r
+       ReadClosure cl;\r
+       ChessSquare piece, victim;\r
+       int removedSelectedPiece = 0, swapColor;\r
+\r
+//if(appData.debugMode) fprintf(debugFP, "PossibleAttackMove %d %d %d %d\n", fromX, fromY, oldFromX, oldFromY);\r
+       if(fromY < 0 || fromY >= BOARD_HEIGHT) return;\r
+       if(fromX < BOARD_LEFT || fromX >= BOARD_RGHT) { SayString("holdings",FALSE); return; }\r
+\r
+       piece = boards[currentMove][fromY][fromX];\r
+       if(piece == EmptySquare) { // if square is empty, try to substitute selected piece\r
+           if(oldFromX >= 0 && oldFromY >= 0) {\r
+               piece = boards[currentMove][oldFromY][oldFromX];\r
+               boards[currentMove][oldFromY][oldFromX] = EmptySquare;\r
+               removedSelectedPiece = 1;\r
+               SayString("Your", FALSE);\r
+               SayString(PieceToName(piece, 0), FALSE);\r
+               SayString("would have", FALSE);\r
+           } else { SayString("You must select a piece first", FALSE); return; }\r
+       }\r
+\r
+       victim = boards[currentMove][fromY][fromX];\r
+       boards[currentMove][fromY][fromX] = piece; // make sure piece is actally there\r
+       SayString("possible captures from here are", FALSE);\r
+\r
+       swapColor = piece <  (int)BlackPawn && !WhiteOnMove(currentMove) ||\r
+                   piece >= (int)BlackPawn &&  WhiteOnMove(currentMove);\r
+       cl.count = 0; cl.rf = fromY; cl.ff = fromX; cl.rt = cl.ft = -1;\r
+       GenLegal(boards[currentMove], PosFlags(currentMove + swapColor), EP_NONE, \r
+                                               castlingRights[currentMove], ReadCallback, (VOIDSTAR) &cl);\r
+       if(cl.count == 0) SayString("None", FALSE);\r
+       boards[currentMove][fromY][fromX] = victim; // repair\r
+\r
+       if( removedSelectedPiece ) boards[currentMove][oldFromY][oldFromX] = piece;\r
+}\r
+\r
+\r
+VOID\r
+PossibleAttacked()\r
+{\r
+       ReadClosure cl;\r
+       ChessSquare piece = EmptySquare, victim;\r
+\r
+       if(fromY < 0 || fromY >= BOARD_HEIGHT) return;\r
+       if(fromX < BOARD_LEFT || fromX >= BOARD_RGHT) { SayString("holdings",FALSE); return; }\r
+\r
+       if(oldFromX >= 0 && oldFromY >= 0) { // if piece is selected, remove it\r
+               piece = boards[currentMove][oldFromY][oldFromX];\r
+               boards[currentMove][oldFromY][oldFromX] = EmptySquare;\r
+       }\r
+\r
+       SayString("Pieces that can capture you are", FALSE);\r
+\r
+       victim = boards[currentMove][fromY][fromX]; // put dummy piece on target square, to activate Pawn captures\r
+       boards[currentMove][fromY][fromX] = WhiteOnMove(currentMove) ? WhiteQueen : BlackQueen;\r
+       cl.count = 0; cl.rt = fromY; cl.ft = fromX; cl.rf = cl.ff = -1;\r
+       GenLegal(boards[currentMove], PosFlags(currentMove+1), EP_NONE, \r
+                                               castlingRights[currentMove], ReadCallback, (VOIDSTAR) &cl);\r
+       if(cl.count == 0) SayString("None", FALSE);\r
+\r
+       SayString("You are defended by", FALSE);\r
+\r
+       boards[currentMove][fromY][fromX] = WhiteOnMove(currentMove) ? BlackQueen : WhiteQueen;\r
+       cl.count = 0; cl.rt = fromY; cl.ft = fromX; cl.rf = cl.ff = -1;\r
+       GenLegal(boards[currentMove], PosFlags(currentMove), EP_NONE, \r
+                                               castlingRights[currentMove], ReadCallback, (VOIDSTAR) &cl);\r
+       if(cl.count == 0) SayString("None", FALSE);\r
+       boards[currentMove][fromY][fromX] = victim; // put back original occupant\r
+\r
+       if(oldFromX >= 0 && oldFromY >= 0) { // put back possibl selected piece\r
+               boards[currentMove][oldFromY][oldFromX] = piece;\r
+       }\r
+}\r
+\r
+VOID\r
+ReadRow()\r
+{\r
+       ChessSquare currentpiece; \r
+       char *piece, *xchar, *ynum ;\r
+       int xPos, count=0;\r
+       ynum = SquareToNum(fromY);\r
+       \r
+       if(fromY < 0) return;\r
+\r
+       for (xPos=BOARD_LEFT; xPos<BOARD_RGHT; xPos++) {\r
+               currentpiece = boards[currentMove][fromY][xPos];        \r
+               if(currentpiece != EmptySquare) {\r
+                       piece = PieceToName(currentpiece,1);\r
+                       xchar = SquareToChar(xPos);\r
+                       SayString(xchar , FALSE);\r
+                       SayString(ynum, FALSE);\r
+                       SayString(piece, FALSE);\r
+                       count++;\r
+               }\r
+       }\r
+       if(count == 0) {\r
+               SayString("rank", FALSE);\r
+               SayString(ynum, FALSE);\r
+               SayString("empty", FALSE);\r
+       }\r
+}\r
+\r
+VOID\r
+ReadColumn()\r
+{\r
+       ChessSquare currentpiece; \r
+       char *piece, *xchar, *ynum ;\r
+       int yPos, count=0;\r
+       xchar = SquareToChar(fromX);\r
+       \r
+       if(fromX < 0) return;\r
+\r
+       for (yPos=0; yPos<BOARD_HEIGHT; yPos++) {\r
+               currentpiece = boards[currentMove][yPos][fromX];        \r
+               if(currentpiece != EmptySquare) {\r
+                       piece = PieceToName(currentpiece,1);\r
+                       ynum = SquareToNum(yPos);\r
+                       SayString(xchar , FALSE);\r
+                       SayString(ynum, FALSE);\r
+                       SayString(piece, FALSE);\r
+                       count++;\r
+               }\r
+       }\r
+       if(count == 0) {\r
+               SayString(xchar, FALSE);\r
+               SayString("file empty", FALSE);\r
+       }\r
+}\r
+\r
+VOID\r
+SayUpperDiagnols()\r
+{\r
+       ChessSquare currentpiece; \r
+       char *piece, *xchar, *ynum ;\r
+       int yPos, xPos;\r
+       \r
+       if(fromX < 0 || fromY < 0) return;\r
+\r
+       if(fromX < BOARD_RGHT-1 && fromY < BOARD_HEIGHT-1) {\r
+               SayString("The diagnol squares to your upper right contain", FALSE);\r
+               yPos = fromY+1;\r
+               xPos = fromX+1;\r
+               while(yPos<BOARD_HEIGHT && xPos<BOARD_RGHT) {\r
+                       currentpiece = boards[currentMove][yPos][xPos]; \r
+                       piece = PieceToName(currentpiece,1);\r
+                       xchar = SquareToChar(xPos);\r
+                       ynum = SquareToNum(yPos);\r
+                       SayString(xchar , FALSE);\r
+                       SayString(ynum, FALSE);\r
+                       SayString(piece, FALSE);\r
+                       yPos++;\r
+                       xPos++;\r
+               }\r
+       }\r
+       else SayString("There is no squares to your upper right", FALSE);\r
+\r
+       if(fromX > BOARD_LEFT && fromY < BOARD_HEIGHT-1) {\r
+               SayString("The diagnol squares to your upper left contain", FALSE);\r
+               yPos = fromY+1;\r
+               xPos = fromX-1;\r
+               while(yPos<BOARD_HEIGHT && xPos>=BOARD_LEFT) {\r
+                       currentpiece = boards[currentMove][yPos][xPos]; \r
+                       piece = PieceToName(currentpiece,1);\r
+                       xchar = SquareToChar(xPos);\r
+                       ynum = SquareToNum(yPos);\r
+                       SayString(xchar , FALSE);\r
+                       SayString(ynum, FALSE);\r
+                       SayString(piece, FALSE);\r
+                       yPos++;\r
+                       xPos--;\r
+               }\r
+       }\r
+       else SayString("There is no squares to your upper left", FALSE);\r
+}\r
+\r
+VOID\r
+SayLowerDiagnols()\r
+{\r
+       ChessSquare currentpiece; \r
+       char *piece, *xchar, *ynum ;\r
+       int yPos, xPos;\r
+       \r
+       if(fromX < 0 || fromY < 0) return;\r
+\r
+       if(fromX < BOARD_RGHT-1 && fromY > 0) {\r
+               SayString("The diagnol squares to your lower right contain", FALSE);\r
+               yPos = fromY-1;\r
+               xPos = fromX+1;\r
+               while(yPos>=0 && xPos<BOARD_RGHT) {\r
+                       currentpiece = boards[currentMove][yPos][xPos]; \r
+                       piece = PieceToName(currentpiece,1);\r
+                       xchar = SquareToChar(xPos);\r
+                       ynum = SquareToNum(yPos);\r
+                       SayString(xchar , FALSE);\r
+                       SayString(ynum, FALSE);\r
+                       SayString(piece, FALSE);\r
+                       yPos--;\r
+                       xPos++;\r
+               }\r
+       }\r
+       else SayString("There is no squares to your lower right", FALSE);\r
+\r
+       if(fromX > BOARD_LEFT && fromY > 0) {\r
+               SayString("The diagnol squares to your lower left contain", FALSE);\r
+               yPos = fromY-1;\r
+               xPos = fromX-1;\r
+               while(yPos>=0 && xPos>=BOARD_LEFT) {\r
+                       currentpiece = boards[currentMove][yPos][xPos]; \r
+                       piece = PieceToName(currentpiece,1);\r
+                       xchar = SquareToChar(xPos);\r
+                       ynum = SquareToNum(yPos);\r
+                       SayString(xchar , FALSE);\r
+                       SayString(ynum, FALSE);\r
+                       SayString(piece, FALSE);\r
+                       yPos--;\r
+                       xPos--;\r
+               }\r
+       }\r
+       else SayString("There is no squares to your lower left", FALSE);\r
+}\r
+\r
+VOID\r
+SayKnightMoves()\r
+{\r
+       ChessSquare currentpiece, oldpiece; \r
+       char *piece, *xchar, *ynum ;\r
+\r
+       oldpiece = boards[currentMove][fromY][fromX];\r
+       if(oldpiece == WhiteKnight || oldpiece == BlackKnight) \r
+               SayString("The possible squares a Knight could move to are", FALSE);\r
+       else\r
+               SayString("The squares a Knight could possibly attack from are", FALSE);\r
+\r
+       if (fromY+2 < BOARD_HEIGHT && fromX-1 >= BOARD_LEFT) {\r
+               currentpiece = boards[currentMove][fromY+2][fromX-1];\r
+               if(((oldpiece == WhiteKnight) && (currentpiece > WhiteKing))\r
+                       || ((oldpiece == BlackKnight) && (currentpiece < BlackPawn || currentpiece == EmptySquare))\r
+                       || (oldpiece == EmptySquare) && (currentpiece == WhiteKnight || currentpiece == BlackKnight))\r
+               {\r
+                       piece = PieceToName(currentpiece,1);\r
+                       xchar = SquareToChar(fromX-1);\r
+                       ynum = SquareToNum(fromY+2);\r
+                       SayString(xchar , FALSE);\r
+                       SayString(ynum, FALSE);\r
+                       SayString(piece, FALSE);\r
+               }\r
+       }\r
+\r
+       if (fromY+2 < BOARD_HEIGHT && fromX+1 < BOARD_RGHT) {\r
+               currentpiece = boards[currentMove][fromY+2][fromX+1];\r
+               if(((oldpiece == WhiteKnight) && (currentpiece > WhiteKing))\r
+                       || ((oldpiece == BlackKnight) && (currentpiece < BlackPawn || currentpiece == EmptySquare))\r
+                       || (oldpiece == EmptySquare) && (currentpiece == WhiteKnight || currentpiece == BlackKnight))\r
+               {\r
+                       piece = PieceToName(currentpiece,1);\r
+                       xchar = SquareToChar(fromX+1);\r
+                       ynum = SquareToNum(fromY+2);\r
+                       SayString(xchar , FALSE);\r
+                       SayString(ynum, FALSE);\r
+                       SayString(piece, FALSE);\r
+               }\r
+       }\r
+       \r
+       if (fromY+1 < BOARD_HEIGHT && fromX+2 < BOARD_RGHT) {\r
+               currentpiece = boards[currentMove][fromY+1][fromX+2];\r
+               if(((oldpiece == WhiteKnight) && (currentpiece > WhiteKing))\r
+                       || ((oldpiece == BlackKnight) && (currentpiece < BlackPawn || currentpiece == EmptySquare))\r
+                       || (oldpiece == EmptySquare) && (currentpiece == WhiteKnight || currentpiece == BlackKnight))\r
+               {\r
+                       piece = PieceToName(currentpiece,1);\r
+                       xchar = SquareToChar(fromX+2);\r
+                       ynum = SquareToNum(fromY+1);\r
+                       SayString(xchar , FALSE);\r
+                       SayString(ynum, FALSE);\r
+                       SayString(piece, FALSE);\r
+               }\r
+       }\r
+       \r
+       if (fromY-1 >= 0 && fromX+2 < BOARD_RGHT) {\r
+               currentpiece = boards[currentMove][fromY-1][fromX+2];\r
+               if(((oldpiece == WhiteKnight) && (currentpiece > WhiteKing))\r
+                       || ((oldpiece == BlackKnight) && (currentpiece < BlackPawn || currentpiece == EmptySquare))\r
+                       || (oldpiece == EmptySquare) && (currentpiece == WhiteKnight || currentpiece == BlackKnight))\r
+               {\r
+                       piece = PieceToName(currentpiece,1);\r
+                       xchar = SquareToChar(fromX+2);\r
+                       ynum = SquareToNum(fromY-1);\r
+                       SayString(xchar , FALSE);\r
+                       SayString(ynum, FALSE);\r
+                       SayString(piece, FALSE);\r
+               }\r
+       }\r
+       \r
+       if (fromY-2 >= 0 && fromX+1 < BOARD_RGHT) {\r
+               currentpiece = boards[currentMove][fromY-2][fromX+1];\r
+               if(((oldpiece == WhiteKnight) && (currentpiece > WhiteKing))\r
+                       || ((oldpiece == BlackKnight) && (currentpiece < BlackPawn || currentpiece == EmptySquare))\r
+                       || (oldpiece == EmptySquare) && (currentpiece == WhiteKnight || currentpiece == BlackKnight))\r
+               {\r
+                       piece = PieceToName(currentpiece,1);\r
+                       xchar = SquareToChar(fromX+1);\r
+                       ynum = SquareToNum(fromY-2);\r
+                       SayString(xchar , FALSE);\r
+                       SayString(ynum, FALSE);\r
+                       SayString(piece, FALSE);\r
+               }\r
+       }\r
+       \r
+       if (fromY-2 >= 0 && fromX-1 >= BOARD_LEFT) {\r
+               currentpiece = boards[currentMove][fromY-2][fromX-1];\r
+               if(((oldpiece == WhiteKnight) && (currentpiece > WhiteKing))\r
+                       || ((oldpiece == BlackKnight) && (currentpiece < BlackPawn || currentpiece == EmptySquare))\r
+                       || (oldpiece == EmptySquare) && (currentpiece == WhiteKnight || currentpiece == BlackKnight))\r
+               {\r
+                       piece = PieceToName(currentpiece,1);\r
+                       xchar = SquareToChar(fromX-1);\r
+                       ynum = SquareToNum(fromY-2);\r
+                       SayString(xchar , FALSE);\r
+                       SayString(ynum, FALSE);\r
+                       SayString(piece, FALSE);\r
+               }\r
+       }\r
+       \r
+       if (fromY-1 >= 0 && fromX-2 >= BOARD_LEFT) {\r
+               currentpiece = boards[currentMove][fromY-1][fromX-2];\r
+               if(((oldpiece == WhiteKnight) && (currentpiece > WhiteKing))\r
+                       || ((oldpiece == BlackKnight) && (currentpiece < BlackPawn || currentpiece == EmptySquare))\r
+                       || (oldpiece == EmptySquare) && (currentpiece == WhiteKnight || currentpiece == BlackKnight))\r
+               {\r
+                       piece = PieceToName(currentpiece,1);\r
+                       xchar = SquareToChar(fromX-2);\r
+                       ynum = SquareToNum(fromY-1);\r
+                       SayString(xchar , FALSE);\r
+                       SayString(ynum, FALSE);\r
+                       SayString(piece, FALSE);\r
+               }\r
+       }\r
+       \r
+       if (fromY+1 < BOARD_HEIGHT && fromX-2 >= BOARD_LEFT) {\r
+               currentpiece = boards[currentMove][fromY+1][fromX-2];\r
+               if(((oldpiece == WhiteKnight) && (currentpiece > WhiteKing))\r
+                       || ((oldpiece == BlackKnight) && (currentpiece < BlackPawn || currentpiece == EmptySquare))\r
+                       || (oldpiece == EmptySquare) && (currentpiece == WhiteKnight || currentpiece == BlackKnight))\r
+               {\r
+                       piece = PieceToName(currentpiece,1);\r
+                       xchar = SquareToChar(fromX-2);\r
+                       ynum = SquareToNum(fromY+1);\r
+                       SayString(xchar , FALSE);\r
+                       SayString(ynum, FALSE);\r
+                       SayString(piece, FALSE);\r
+               }\r
+       }\r
+}\r
+\r
+VOID\r
+SayPieces(ChessSquare p)\r
+{\r
+       ChessSquare currentpiece;  \r
+       char *piece, *xchar, *ynum ;\r
+       int yPos, xPos, count = 0;\r
+       char buf[50];\r
+\r
+       if(p == WhitePlay)   SayString("White pieces", FALSE); else\r
+       if(p == BlackPlay)   SayString("Black pieces", FALSE); else\r
+       if(p == EmptySquare) SayString("Pieces", FALSE); else {\r
+               sprintf(buf, "%ss", PieceToName(p,1));\r
+               SayString(buf, FALSE);\r
+       }\r
+       SayString("are located", FALSE);\r
+       for(yPos=0; yPos<BOARD_HEIGHT; yPos++) {\r
+               for(xPos=BOARD_LEFT; xPos<BOARD_RGHT; xPos++) {\r
+                       currentpiece = boards[currentMove][yPos][xPos]; \r
+                       if(p == BlackPlay && currentpiece >= BlackPawn && currentpiece <= BlackKing ||\r
+                          p == WhitePlay && currentpiece >= WhitePawn && currentpiece <= WhiteKing   )\r
+                               piece = PieceToName(currentpiece,0);\r
+                       else if(p == EmptySquare && currentpiece != EmptySquare)\r
+                               piece = PieceToName(currentpiece,1);\r
+                       else if(p == currentpiece)\r
+                               piece = NULL;\r
+                       else continue;\r
+                               \r
+                               if(count == 0) SayString("at", FALSE);\r
+                               xchar = SquareToChar(xPos);\r
+                               ynum = SquareToNum(yPos);\r
+                               SayString(xchar , FALSE);\r
+                               SayString(ynum, FALSE);\r
+                               if(piece) SayString(piece, FALSE);\r
+                               count++;\r
+               }\r
+       }\r
+       if(count == 0) SayString("nowhere", FALSE);\r
+}\r
+\r
+VOID\r
+SayCurrentPos()\r
+{\r
+       ChessSquare currentpiece;\r
+       char *piece, *xchar, *ynum ;\r
+       if(fromX <  BOARD_LEFT) { SayString("You strayed into the white holdings", FALSE); return; }\r
+       if(fromX >= BOARD_RGHT) { SayString("You strayed into the black holdings", FALSE); return; }\r
+       currentpiece = boards[currentMove][fromY][fromX];       \r
+       piece = PieceToName(currentpiece,1);\r
+       ynum = SquareToNum(fromY);\r
+       xchar = SquareToChar(fromX);\r
+       SayString("Your current position is", FALSE);\r
+       SayString(xchar, FALSE);\r
+       SayString(ynum, FALSE);\r
+       SayString(piece, FALSE);\r
+       if((fromX-BOARD_LEFT) ^ fromY)\r
+               SayString("on a dark square",FALSE);\r
+       else \r
+               SayString("on a light square",FALSE);\r
+\r
+       PossibleAttacked();\r
+       return;\r
+}\r
+\r
+VOID\r
+SayAllBoard()\r
+{\r
+       int Xpos, Ypos;\r
+       ChessSquare currentpiece;\r
+       char *piece, *xchar, *ynum ;\r
+       \r
+       if(gameInfo.holdingsWidth) {\r
+               int first = 0;\r
+               for(Ypos=0; Ypos<gameInfo.holdingsSize; Ypos++) {\r
+                       int n = boards[currentMove][Ypos][BOARD_WIDTH-2];\r
+                       if(n) {  char buf[MSG_SIZ];\r
+                               if(!first++) SayString("white holds", FALSE);\r
+                               currentpiece = boards[currentMove][Ypos][BOARD_WIDTH-1];        \r
+                               piece = PieceToName(currentpiece,0);\r
+                               sprintf(buf, "%d %s%s", n, piece, (n==1 ? "" : "s") );\r
+                               SayString(buf, FALSE);\r
+                       }\r
+               }\r
+               first = 0;\r
+               for(Ypos=BOARD_HEIGHT-1; Ypos>=BOARD_HEIGHT - gameInfo.holdingsSize; Ypos--) {\r
+                       int n = boards[currentMove][Ypos][1];\r
+                       if(n) {  char buf[MSG_SIZ];\r
+                               if(!first++) SayString("black holds", FALSE);\r
+                               currentpiece = boards[currentMove][Ypos][0];    \r
+                               piece = PieceToName(currentpiece,0);\r
+                               sprintf(buf, "%d %s%s", n, piece, (n==1 ? "" : "s") );\r
+                               SayString(buf, FALSE);\r
+                       }\r
+               }\r
+       }\r
+\r
+       for(Ypos=BOARD_HEIGHT-1; Ypos>=0; Ypos--) {\r
+               ynum = ordinals[Ypos + (gameInfo.boardHeight < 10)];\r
+               SayString(ynum, FALSE);\r
+               SayString("rank", FALSE);\r
+               for(Xpos=BOARD_LEFT; Xpos<BOARD_RGHT; Xpos++) {\r
+                       currentpiece = boards[currentMove][Ypos][Xpos]; \r
+                       if(currentpiece != EmptySquare) {\r
+                               int count = 0, oldX = Xpos;\r
+                               char buf[50];\r
+                               piece = PieceToName(currentpiece,1);\r
+                               while(Xpos < BOARD_RGHT && boards[currentMove][Ypos][Xpos] == currentpiece)\r
+                                       Xpos++, count++;\r
+                               if(count > 1) { \r
+                                       sprintf(buf, "%d %ss", count, piece);\r
+                               } else  sprintf(buf, "%s", piece);\r
+                               Xpos--;\r
+                               SayString(buf, FALSE);\r
+                       } else {\r
+                               int count = 0, oldX = Xpos;\r
+                               while(Xpos < BOARD_RGHT && boards[currentMove][Ypos][Xpos] == EmptySquare)\r
+                                       Xpos++, count++;\r
+                               if(Xpos == BOARD_RGHT && oldX == BOARD_LEFT)\r
+                                       SayString("all", FALSE);\r
+                               else{\r
+                                   if(count > 1) { \r
+                                       char buf[10];\r
+                                       sprintf(buf, "%d", count);\r
+                                       SayString(buf, FALSE);\r
+                                   }\r
+                                   Xpos--;\r
+                               }\r
+                               SayString("empty", FALSE);\r
+                       }\r
+               }\r
+       }\r
+       \r
+}\r
+\r
+VOID\r
+SayWhosTurn()\r
+{\r
+       if(gameMode == MachinePlaysBlack || gameMode == IcsPlayingBlack) {\r
+               if(WhiteOnMove(currentMove))\r
+                       SayString("It is your turn", FALSE);\r
+               else    SayString("It is your opponents turn", FALSE);\r
+       } else if(gameMode == MachinePlaysWhite || gameMode == IcsPlayingWhite) {\r
+               if(WhiteOnMove(currentMove))\r
+                       SayString("It is your opponents turn", FALSE);\r
+               else    SayString("It is your turn", FALSE);\r
+       } else {\r
+               if(WhiteOnMove(currentMove)) \r
+                       SayString("White is on move here", FALSE);\r
+               else    SayString("Black is on move here", FALSE);\r
+       }\r
+}\r
+       \r
+\r
+VOID\r
+SayMachineMove(int evenIfDuplicate)\r
+{\r
+       int len, xPos, yPos, moveNr, secondSpace = 0, castle = 0, n;\r
+       ChessSquare currentpiece;\r
+       char *piece, *xchar, *ynum, *p;\r
+       char c, buf[MSG_SIZ], comment[MSG_SIZ];\r
+       static char disambiguation[2];\r
+       static int previousMove = 0;\r
+\r
+       if(appData.debugMode) fprintf(debugFP, "Message = '%s'\n", messageText);\r
+       if(gameMode == BeginningOfGame) return;\r
+       if(messageText[0] == '[') return;\r
+       comment[0]= 0;\r
+           if(isdigit(messageText[0])) { // message is move, possibly with thinking output\r
+               int dotCount = 0, spaceCount = 0;\r
+               sscanf(messageText, "%d", &moveNr);\r
+               len = 0;\r
+               // [HGM] show: better extraction of move\r
+               while (messageText[len] != NULLCHAR) {\r
+                   if(messageText[len] == '.' && spaceCount == 0) dotCount++;\r
+                   if(messageText[len] == ' ') { if(++spaceCount == 2) secondSpace = len; }\r
+                   if(messageText[len] == '{') { // we detected a comment\r
+                       if(isalpha(messageText[len+1]) ) sscanf(messageText+len, "{%[^}]}", comment);\r
+                       break;\r
+                   }\r
+                   if(messageText[len] == '[') { // we detected thinking output\r
+                       int depth; float score=0; char c, lastMover = (dotCount == 3 ? 'B' : 'W');\r
+                       if(sscanf(messageText+len+1, "%d]%c%f", &depth, &c, &score) > 1) {\r
+                           if(c == ' ') { // if not explicitly specified, figure out source of thinking output\r
+                               switch(gameMode) {\r
+                                 case MachinePlaysWhite:\r
+                                 case IcsPlayingWhite:\r
+                                   c = 'W'; break;\r
+                                 case IcsPlayingBlack:\r
+                                 case MachinePlaysBlack:\r
+                                   c = 'B'; \r
+                                 default:\r
+                                   break;\r
+                               }\r
+                           }\r
+                           if(c != lastMover) return; // line is thinking output of future move, ignore.\r
+                           if(2*moveNr - (dotCount < 2) == previousMove)\r
+                               return; // do not repeat same move; likely ponder output\r
+                           sprintf(buf, "score %s %d at %d ply", \r
+                                       score > 0 ? "plus" : score < 0 ? "minus" : "",\r
+                                       (int) (fabs(score)*100+0.5),\r
+                                       depth );\r
+                           SayString(buf, FALSE); // move + thinking output describing it; say it.\r
+                       }\r
+                       while(messageText[len-1] == ' ') len--; // position just behind move;\r
+                       break;\r
+                   }\r
+                   if(messageText[len] == '(') { // ICS time printed behind move\r
+                       while(messageText[len+1] && messageText[len] != ')') len++; // skip it\r
+                   }\r
+                   len++;\r
+               }\r
+               if(secondSpace) len = secondSpace; // position behind move\r
+               if(messageText[len-1] == '+' || messageText[len-1] == '#') {  /* you are in checkmate */\r
+                       len--; // strip off check or mate indicator\r
+               }\r
+               if(messageText[len-2] == '=') {  /* promotion */\r
+                       len-=2; // strip off promotion piece\r
+                       SayString("promotion", FALSE);\r
+               }\r
+\r
+               n = 2*moveNr - (dotCount < 2);\r
+\r
+               if(previousMove != 2*moveNr + (dotCount > 1) || evenIfDuplicate) { \r
+                   char number[20];\r
+                   previousMove = 2*moveNr + (dotCount > 1); // remember move nr of move last spoken\r
+                   sprintf(number, "%d", moveNr);\r
+\r
+                   yPos = CoordToNum(messageText[len-1]);  /* turn char coords to ints */\r
+                   xPos = CoordToNum(messageText[len-2]);\r
+                   if(xPos < 0 || xPos > 11) return; // prevent crashes if no coord string available to speak\r
+                   if(yPos < 0 || yPos > 9)  return;\r
+                   currentpiece = boards[n][yPos][xPos];       \r
+                   piece = PieceToName(currentpiece,0);\r
+                   ynum = SquareToNum(yPos);\r
+                   xchar = SquareToChar(xPos);\r
+                   c = messageText[len-3];\r
+                   if(c == 'x') c = messageText[len-4];\r
+                   if(!isdigit(c) && c < 'a' && c != '@') c = 0;\r
+                   disambiguation[0] = c;\r
+                   SayString(WhiteOnMove(n) ? "Black" : "White", FALSE);\r
+                   SayString("move", FALSE);\r
+                   SayString(number, FALSE);\r
+//                 if(c==0 || c=='@') SayString("a", FALSE);\r
+                   // intercept castling moves\r
+                   p = StrStr(messageText, "O-O-O");\r
+                   if(p && p-messageText < len) {\r
+                       SayString("queen side castling",FALSE);\r
+                       castle = 1;\r
+                   } else {\r
+                       p = StrStr(messageText, "O-O");\r
+                       if(p && p-messageText < len) {\r
+                           SayString("king side castling",FALSE);\r
+                           castle = 1;\r
+                       }\r
+                   }\r
+                   if(!castle) {\r
+                       SayString(piece, FALSE);\r
+                       if(c == '@') SayString("dropped on", FALSE); else\r
+                       if(c) SayString(disambiguation, FALSE);\r
+                       SayString("to", FALSE);\r
+                       SayString(xchar, FALSE);\r
+                       SayString(ynum, FALSE);\r
+                       if(messageText[len-3] == 'x') {\r
+                               currentpiece = boards[n-1][yPos][xPos];\r
+                               if(currentpiece != EmptySquare) {\r
+                                       piece = PieceToName(currentpiece,0);\r
+                                       SayString("Capturing a",FALSE);\r
+                                       SayString(piece, FALSE);\r
+                               } else SayString("Capturing onn passann",FALSE);\r
+                       }\r
+                       if(messageText[len] == '+') SayString("check", FALSE); else\r
+                       if(messageText[len] == '#') {\r
+                               SayString("finishing off", FALSE);\r
+                               SayString(WhiteOnMove(n) ? "White" : "Black", FALSE);\r
+                       }\r
+                   }\r
+               }\r
+\r
+               /* say comment after move, possibly with result */\r
+               p = NULL;\r
+               if(StrStr(messageText, " 1-0")) p = "white wins"; else\r
+               if(StrStr(messageText, " 0-1")) p = "black wins"; else\r
+               if(StrStr(messageText, " 1/2-1/2")) p = "game ends in a draw";\r
+               if(comment[0]) {\r
+                   if(p) {\r
+                       if(!StrCaseStr(comment, "draw") && \r
+                          !StrCaseStr(comment, "white") && \r
+                          !StrCaseStr(comment, "black") ) {\r
+                               SayString(p, FALSE);\r
+                               SayString("due to", FALSE);\r
+                       }\r
+                   }\r
+                   SayString(comment, FALSE); // alphabetic comment (usually game end)\r
+               } else if(p) SayString(p, FALSE);\r
+\r
+           } else {\r
+               /* starts not with digit */\r
+               if(StrCaseStr(messageText, "illegal")) PlayIcsUnfinishedSound();\r
+               SayString(messageText, FALSE);\r
+           }\r
+\r
+}\r
+\r
+VOID\r
+SayClockTime()\r
+{\r
+       char buf1[50], buf2[50];\r
+       char *str1, *str2;\r
+       static long int lastWhiteTime, lastBlackTime;\r
+\r
+       suppressClocks = 1; // if user is using alt+T command, no reason to display them\r
+       if(abs(lastWhiteTime - whiteTimeRemaining) < 1000 && abs(lastBlackTime - blackTimeRemaining) < 1000)\r
+               suppressClocks = 0; // back on after two requests in rapid succession\r
+       sprintf(buf1, "%s", TimeString(whiteTimeRemaining));\r
+       str1 = buf1;\r
+       SayString("White's remaining time is", FALSE);\r
+       SayString(str1, FALSE);\r
+       sprintf(buf2, "%s", TimeString(blackTimeRemaining));\r
+       str2 = buf2;\r
+       SayString("Black's remaining time is", FALSE);\r
+       SayString(str2, FALSE);\r
+       lastWhiteTime = whiteTimeRemaining;\r
+       lastBlackTime = blackTimeRemaining;\r
+}\r
+\r
+VOID\r
+Toggle(Boolean *b, char *mess)\r
+{\r
+       *b = !*b;\r
+       SayString(mess, FALSE);\r
+       SayString("is now", FALSE);\r
+       SayString(*b ? "on" : "off", FALSE);\r
+}\r
+\r
+/* handles keyboard moves in a click-click fashion */\r
+VOID\r
+KeyboardMove(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)\r
+{\r
+       ChessSquare currentpiece;\r
+       char *piece;\r
+       \r
+       static BOOLEAN sameAgain = FALSE;\r
+       switch (message) {\r
+       case WM_KEYDOWN:\r
+               sameAgain = FALSE;\r
+               if(oldFromX == fromX && oldFromY == fromY) {\r
+                       sameAgain = TRUE;\r
+                       /* click on same square */\r
+                       break;\r
+               }\r
+               else if(oldFromX != -1) {\r
+                       \r
+                       ChessSquare pdown, pup;\r
+      pdown = boards[currentMove][oldFromY][oldFromX];\r
+      pup = boards[currentMove][fromY][fromX];\r
+               \r
+               if (gameMode == EditPosition ||\r
+                       !((WhitePawn <= pdown && pdown <= WhiteKing &&\r
+                                WhitePawn <= pup && pup <= WhiteKing) ||\r
+                               (BlackPawn <= pdown && pdown <= BlackKing &&\r
+                                BlackPawn <= pup && pup <= BlackKing))) {\r
+                       /* EditPosition, empty square, or different color piece;\r
+                       click-click move is possible */\r
+               \r
+                       if (IsPromotion(oldFromX, oldFromY, fromX, fromY)) {\r
+                               if (appData.alwaysPromoteToQueen) {\r
+                                       UserMoveEvent(oldFromX, oldFromY, fromX, fromY, 'q');\r
+                               }\r
+                               else {\r
+                                       toX = fromX; toY = fromY; fromX = oldFromX; fromY = oldFromY;\r
+                                       PromotionPopup(hwnd);\r
+                                       fromX = toX; fromY = toY;\r
+                               }       \r
+                       }\r
+                       else {\r
+                               UserMoveEvent(oldFromX, oldFromY, fromX, fromY, NULLCHAR);\r
+                       }\r
+               oldFromX = oldFromY = -1;\r
+               break;\r
+               }\r
+               \r
+               }\r
+               /* First downclick, or restart on a square with same color piece */\r
+               if (OKToStartUserMove(fromX, fromY)) {\r
+               oldFromX = fromX;\r
+               oldFromY = fromY;\r
+               currentpiece = boards[currentMove][fromY][fromX];       \r
+               piece = PieceToName(currentpiece,1);\r
+               SayString(piece, FALSE);\r
+               SayString("selected", FALSE);\r
+               }\r
+               else {\r
+               oldFromX = oldFromY = -1;\r
+               }\r
+               break;\r
+\r
+       case WM_KEYUP:\r
+               if (oldFromX == fromX && oldFromY == fromY) {\r
+      /* Upclick on same square */\r
+      if (sameAgain) {\r
+       /* Clicked same square twice: abort click-click move */\r
+                       oldFromX = oldFromY = -1;\r
+                       currentpiece = boards[currentMove][fromY][fromX];       \r
+                       piece = PieceToName(currentpiece,0);\r
+                       SayString(piece, FALSE);\r
+                       SayString("unselected", FALSE);\r
+                       }\r
+               }\r
+       }\r
+}\r
+\r
+int\r
+NiceTime(int x)\r
+{      // return TRUE for times we want to announce\r
+       if(x<0) return 0;\r
+       x = (x+50)/100;   // tenth of seconds\r
+       if(x <= 100) return (x%10 == 0);\r
+       if(x <= 600) return (x%100 == 0);\r
+       if(x <= 6000) return (x%600 == 0);\r
+       return (x%3000 == 0);\r
+}\r
+\r
+#define JAWS_ALT_INTERCEPT \\r
+           if(isalpha((char)wParam)) {\\r
+               /* capitals of any ind are intercepted and distinguished by left and right shift */\\r
+               int mine = GetKeyState(VK_RSHIFT) < 0;\\r
+               if(mine || GetKeyState(VK_LSHIFT) < 0) {\\r
+\\r
+                   if(gameMode == IcsPlayingWhite || gameMode == MachinePlaysBlack) mine = !mine;\\r
+\\r
+                   if(ToLower((char)wParam) == 'x') {\\r
+                       SayPieces(mine ? WhitePlay : BlackPlay);\\r
+                       break;\\r
+                   } else\\r
+                   if(CharToPiece((char)wParam) != EmptySquare) {\\r
+                       SayPieces(CharToPiece(mine ? ToUpper((char)wParam) : ToLower((char)wParam)));\\r
+                       break;\\r
+                   }\\r
+               }\\r
+           }\\r
+           if ((char)wParam == 022 && gameMode == EditPosition) { /* <Ctl R>. Pop up piece menu */\\r
+               POINT pt; int x, y;\\r
+               SquareToPos(fromY, fromX, &x, &y);\\r
+               pt.x = x; pt.y = y;\\r
+               if(gameInfo.variant != VariantShogi)\\r
+                   MenuPopup(hwnd, pt, LoadMenu(hInst, "PieceMenu"), -1);\\r
+               else\\r
+                   MenuPopup(hwnd, pt, LoadMenu(hInst, "ShogiPieceMenu"), -1);\\r
+               break;\\r
+           }\\r
+\r
+#define JAWS_REPLAY \\r
+    case '\020': /* ctrl P */\\r
+      { char buf[MSG_SIZ];\\r
+       if(GetWindowText(hwnd, buf, MSG_SIZ-1))\\r
+               SayString(buf, FALSE);\\r
+      }\\r
+      return 0;\\r
+\r
+#define JAWS_KB_NAVIGATION \\r
+\\r
+       case WM_KEYDOWN:\\r
+               switch (wParam) {\\r
+               case VK_LEFT:\\r
+               case VK_RIGHT:\\r
+               case VK_UP:\\r
+               case VK_DOWN:\\r
+                       KeyboardEvent(hwnd, message, wParam, lParam);\\r
+                       break;\\r
+               case VK_SPACE:\\r
+                       KeyboardMove(hwnd, message, wParam, lParam);\\r
+                       break;\\r
+               }\\r
+               break;\\r
+       case WM_KEYUP:\\r
+               switch (wParam) {\\r
+               case VK_SPACE:\\r
+                       KeyboardMove(hwnd, message, wParam, lParam);\\r
+                       break;\\r
+               }\\r
+               break;\\r
+\r
+#define JAWS_MENU_ITEMS \\r
+               case IDM_PossibleAttackMove:  /*What can I possible attack from here */\\r
+                       PossibleAttackMove();\\r
+                       break;\\r
+\\r
+               case IDM_PossibleAttacked:  /*what can possible attack this square*/\\r
+                       PossibleAttacked();\\r
+                       break;\\r
+\\r
+               case IDM_ReadRow:   /* Read the current row of pieces */\\r
+                       ReadRow();\\r
+                       break;\\r
+\\r
+               case IDM_ReadColumn:   /* Read the current column of pieces */\\r
+                       ReadColumn();\\r
+                       break;\\r
+\\r
+               case IDM_SayCurrentPos: /* Say current position including color */\\r
+                       SayCurrentPos();\\r
+                       break;\\r
+\\r
+               case IDM_SayAllBoard:  /* Say the whole board from bottom to top */\\r
+                       SayAllBoard();\\r
+                       break;\\r
+\\r
+               case IDM_SayMachineMove:  /* Say the last move made */\\r
+                       timeflag = 1;\\r
+                       SayMachineMove(1);\\r
+                       break;\\r
+\\r
+               case IDM_SayUpperDiagnols:  /* Says the diagnol positions above you */\\r
+                       SayUpperDiagnols();\\r
+                       break;\\r
+\\r
+               case IDM_SayLowerDiagnols:  /* Say the diagnol positions below you */\\r
+                       SayLowerDiagnols();\\r
+                       break;\\r
+\\r
+               case IDM_SayBlackPieces: /*Say the opponents pieces */\\r
+                       SayPieces(BlackPlay);\\r
+                       break;\\r
+\\r
+               case IDM_SayWhitePieces: /*Say the opponents pieces */\\r
+                       SayPieces(WhitePlay);\\r
+                       break;\\r
+\\r
+               case IDM_SayClockTime:  /*Say the clock time */\\r
+                       SayClockTime();\\r
+                       break;\\r
+\\r
+               case IDM_SayWhosTurn:   /* Say whos turn it its */\\r
+                       SayWhosTurn();\\r
+                       break;\\r
+\\r
+               case IDM_SayKnightMoves:  /* Say Knights (L-shaped) move */\\r
+                       SayKnightMoves();\\r
+                       break;\\r
+\\r
+               case OPT_PonderNextMove:  /* Toggle option setting */\\r
+                       Toggle(&appData.ponderNextMove, "ponder");\\r
+                       break;\\r
+\\r
+               case OPT_AnimateMoving:  /* Toggle option setting */\\r
+                       Toggle(&appData.animate, "animate moving");\\r
+                       break;\\r
+\\r
+               case OPT_AutoFlag:  /* Toggle option setting */\\r
+                       Toggle(&appData.autoCallFlag, "auto flag");\\r
+                       break;\\r
+\\r
+               case OPT_AlwaysQueen:  /* Toggle option setting */\\r
+                       Toggle(&appData.alwaysPromoteToQueen, "always promote to queen");\\r
+                       break;\\r
+\\r
+               case OPT_TestLegality:  /* Toggle option setting */\\r
+                       Toggle(&appData.testLegality, "legality testing");\\r
+                       break;\\r
+\\r
+               case OPT_HideThinkFromHuman:  /* Toggle option setting */\\r
+                       Toggle(&appData.hideThinkingFromHuman, "hide thinking");\\r
+                       ShowThinkingEvent();\\r
+                       break;\\r
+\\r
+               case OPT_SaveExtPGN:  /* Toggle option setting */\\r
+                       Toggle(&appData.saveExtendedInfoInPGN, "extended P G N info");\\r
+                       break;\\r
+\\r
+               case OPT_ExtraInfoInMoveHistory:  /* Toggle option setting */\\r
+                       Toggle(&appData.showEvalInMoveHistory, "extra info in move histoty");\\r
+                       break;\\r
+\\r
+\r
+\r
+#define JAWS_INIT if (!InitJAWS()) return (FALSE);\r
+\r
+#define JAWS_DELETE(X)\r
+\r
+#define JAWS_SILENCE if(suppressClocks) return;\r
+\r
+#define SAY(S) SayString((S), FALSE)\r
+\r
+#define SAYMACHINEMOVE() SayMachineMove(0)\r
+\r
+// After inclusion of this file somewhere early in winboard.c, the remaining part of the patch\r
+// is scattered over winboard.c for actually calling the routines.\r
+//\r
+// * move fromX, fromY declaration to front, before incusion of this file. (Can be permanent change in winboard.c.)\r
+// * call InitJAWS(), after calling InitIntance(). (Using JAWS_INIT macro)\r
+// * add keyboard cases in main switch of WndProc, though JAWS_KB_NAVIGATION above, e.g. before WM_CHAR case.\r
+// * change the WM_CHAR case of same switch from "if(appData.icsActive)" to "if(appData.icsActive JAWS_IF_TAB)"\r
+// * add new menu cases in WM_COMMAND case of WndProc, e.g. before IDM_Forward. (throug macro defined above)\r
+// * add SAYMACHINEMOVE(); at the end of DisplayMessage();\r
+// * add SAY("board"); in WM_CHAR case of ConsoleTextSubclass, just before "SetFocus(buttondesc..."\r
diff --git a/winboard/jaws.h b/winboard/jaws.h
new file mode 100644 (file)
index 0000000..752f705
--- /dev/null
@@ -0,0 +1,18 @@
+#define IDM_PossibleAttackMove          1800\r
+#define IDM_PossibleAttacked            1801\r
+#define IDM_SayMachineMove              1802\r
+#define IDM_ReadRow                     1803\r
+#define IDM_ReadColumn                  1804\r
+#define IDM_SayCurrentPos               1805\r
+#define IDM_SayAllBoard                 1806\r
+#define IDM_SayUpperDiagnols            1807\r
+#define IDM_SayLowerDiagnols            1808\r
+#define IDM_SayClockTime                1810\r
+#define IDM_SayWhosTurn                 1811\r
+#define IDM_SayKnightMoves              1812\r
+#define ID_SHITTY_HI                    1813\r
+#define IDC_SPECIFY_ENG_STATIC          1814\r
+#define IDC_SPECIFY_SERVER_STATIC       1815\r
+#define IDM_SayWhitePieces              1816\r
+#define IDM_SayBlackPieces              1817\r
+\r
diff --git a/winboard/jaws.rc b/winboard/jaws.rc
new file mode 100644 (file)
index 0000000..14e513e
--- /dev/null
@@ -0,0 +1,2116 @@
+//Microsoft Developer Studio generated resource script.\r
+//\r
+#include "resource.h"\r
+#include "jaws.h"\r
+\r
+#define APSTUDIO_READONLY_SYMBOLS\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Generated from the TEXTINCLUDE 2 resource.\r
+//\r
+#define APSTUDIO_HIDDEN_SYMBOLS\r
+#include "windows.h"\r
+#undef APSTUDIO_HIDDEN_SYMBOLS\r
+#include "dlgs.h"\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+#undef APSTUDIO_READONLY_SYMBOLS\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// English (U.S.) resources\r
+\r
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r
+#ifdef _WIN32\r
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\r
+#pragma code_page(1252)\r
+#endif //_WIN32\r
+\r
+// moved to "res" subdir to make testing easier-- don't want it in the root\r
+MANIFEST_RESOURCE_ID    24      MOVEABLE PURE   "res\\winboard.exe.manifest"\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Dialog\r
+//\r
+\r
+ABOUTBOX DIALOG DISCARDABLE  22, 17, 180, 108\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "About WinBoard"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    DEFPUSHBUTTON   "OK",IDOK,126,89,50,14,WS_GROUP\r
+    ICON            "icon_white",IDC_STATIC,3,6,20,20\r
+    LTEXT           "Chessboard for Windows",400,25,15,121,8\r
+    LTEXT           "Copyright 1991 Digital Equipment Corporation",201,6,34,\r
+                    149,8\r
+    LTEXT           "Enhancements Copyright 1992-2009   Free Software Foundation",\r
+                    OPT_TCtext1,6,45,121,17\r
+    CONTROL         "",OPT_TCTime,"Static",SS_BLACKRECT,4,28,159,1\r
+    LTEXT           "WinBoard 0.0.0",ABOUTBOX_Version,25,5,160,8\r
+    LTEXT           "Enhancements Copyright 2005\r\nAlessandro Scotti",\r
+                    IDC_STATIC,6,65,120,24\r
+    LTEXT           "Auditory/Keyboard Enhancements  By:  Ed Rodriguez (sort of)",\r
+                    IDC_STATIC,6,85,120,16\r
+END\r
+\r
+DLG_TimeControl DIALOG DISCARDABLE  6, 18, 263, 172\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Time Control"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    LTEXT           "Use arrow keys to specify which clock setting type, then press tab to alter values.",\r
+                    IDC_STATIC,9,9,231,20\r
+    CONTROL         "Conventional chess clock",OPT_TCUseMoves,"Button",\r
+                    BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,7,36,113,10\r
+    CONTROL         "Incremental clock",OPT_TCUseInc,"Button",\r
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,7,73,107,10\r
+    LTEXT           "Number of moves:",OPT_TCtext1,15,52,58,8,NOT WS_GROUP\r
+    EDITTEXT        OPT_TCMoves,77,52,22,12,ES_AUTOHSCROLL | WS_GROUP\r
+    LTEXT           "Within number of minutes:",OPT_TCtext2,113,54,81,8,NOT \r
+                    WS_GROUP\r
+    EDITTEXT        OPT_TCTime,197,52,32,12,ES_AUTOHSCROLL\r
+    LTEXT           "Initial number of minutes:",405,15,89,106,8,NOT \r
+                    WS_GROUP\r
+    EDITTEXT        OPT_TCTime2,127,87,32,12,ES_AUTOHSCROLL | WS_GROUP\r
+    LTEXT           "Plus number of seconds per move:",406,15,105,109,8,NOT \r
+                    WS_GROUP\r
+    EDITTEXT        OPT_TCInc,127,103,32,12,ES_AUTOHSCROLL\r
+    LTEXT           "",408,185,108,67,8,NOT WS_GROUP\r
+    LTEXT           "Time-Odds Factors:",IDC_STATIC,6,118,150,8,NOT WS_GROUP\r
+    EDITTEXT        OPT_TCOdds1,47,131,26,12,ES_AUTOHSCROLL | WS_GROUP\r
+    LTEXT           "Engine #1:",IDC_STATIC,6,133,41,8,NOT WS_GROUP\r
+    EDITTEXT        OPT_TCOdds2,124,131,26,12,ES_AUTOHSCROLL\r
+    LTEXT           "Engine #2:",IDC_STATIC,83,133,41,8,NOT WS_GROUP\r
+    PUSHBUTTON      "OK",IDOK,29,150,40,14,WS_GROUP\r
+    PUSHBUTTON      "Cancel",IDCANCEL,85,150,40,14\r
+END\r
+\r
+DLG_LoadOptions DIALOG DISCARDABLE  10, 18, 136, 55\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Load Game Options"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    CONTROL         "Load games with automatic stepping",OPT_Autostep,"Button",\r
+                    BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,4,4,130,10\r
+    EDITTEXT        OPT_ASTimeDelay,16,16,28,14,ES_AUTOHSCROLL\r
+    LTEXT           "seconds per move",OPT_AStext1,46,20,60,8,NOT WS_GROUP\r
+    PUSHBUTTON      "OK",IDOK,26,36,50,14,WS_GROUP\r
+    PUSHBUTTON      "Cancel",IDCANCEL,82,36,50,14\r
+END\r
+\r
+DLG_SaveOptions DIALOG DISCARDABLE  6, 17, 178, 119\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Save Game Options"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    CONTROL         "Save games automatically",OPT_Autosave,"Button",\r
+                    BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,4,4,97,10\r
+    CONTROL         "Prompt for filename",OPT_AVPrompt,"Button",\r
+                    BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,16,18,75,10\r
+    CONTROL         "To file:",OPT_AVToFile,"Button",BS_AUTORADIOBUTTON,16,\r
+                    32,36,10\r
+    EDITTEXT        OPT_AVFilename,54,30,97,14,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "...",OPT_AVBrowse,156,30,18,14\r
+    GROUPBOX        "Save As: ",801,4,48,170,28,WS_GROUP\r
+    CONTROL         "PGN",OPT_PGN,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,\r
+                    60,39,10\r
+    CONTROL         "Old",OPT_Old,"Button",BS_AUTORADIOBUTTON,54,60,114,10\r
+    CONTROL         "Save out of book info in PGN",OPT_OutOfBookInfo,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,4,82,109,10\r
+    PUSHBUTTON      "OK",IDOK,68,100,50,14,WS_GROUP\r
+    PUSHBUTTON      "Cancel",IDCANCEL,124,100,50,14\r
+END\r
+\r
+1536 DIALOG DISCARDABLE  36, 24, 264, 134\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Open"\r
+FONT 8, "Helv"\r
+BEGIN\r
+    LTEXT           "File &Name:",1090,6,6,76,9\r
+    EDITTEXT        1152,6,16,90,12,ES_AUTOHSCROLL | ES_OEMCONVERT\r
+    LISTBOX         1120,6,32,90,68,LBS_SORT | LBS_OWNERDRAWFIXED | \r
+                    LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL | \r
+                    WS_TABSTOP\r
+    LTEXT           "&Directories:",-1,110,6,92,9\r
+    LTEXT           "",1088,110,18,92,9,SS_NOPREFIX | NOT WS_GROUP\r
+    LISTBOX         1121,110,32,92,68,LBS_SORT | LBS_OWNERDRAWFIXED | \r
+                    LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL | \r
+                    WS_TABSTOP\r
+    LTEXT           "List Files of &Type:",1089,6,104,90,9\r
+    COMBOBOX        1136,6,114,90,36,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | \r
+                    WS_BORDER | WS_VSCROLL | WS_TABSTOP\r
+    LTEXT           "Dri&ves:",1091,110,104,92,9\r
+    COMBOBOX        1137,110,114,92,68,CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | \r
+                    CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | \r
+                    WS_VSCROLL | WS_TABSTOP\r
+    DEFPUSHBUTTON   "OK",IDOK,208,6,50,14,WS_GROUP\r
+    PUSHBUTTON      "Cancel",IDCANCEL,208,24,50,14,WS_GROUP\r
+    PUSHBUTTON      "&Help",1038,208,46,50,14,NOT WS_VISIBLE | WS_GROUP\r
+    LTEXT           "&Index number:",-1,208,74,48,8\r
+    EDITTEXT        OPT_IndexNumberOld,208,84,50,12,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "Net&work...",1037,208,113,50,14,WS_GROUP\r
+END\r
+\r
+DLG_CommPort DIALOG DISCARDABLE  25, 30, 220, 79\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Communication Port Settings"\r
+FONT 8, "Helv"\r
+BEGIN\r
+    PUSHBUTTON      "OK",IDOK,106,60,50,14\r
+    PUSHBUTTON      "Cancel",IDCANCEL,164,60,50,14\r
+    RTEXT           "&Port:",-1,4,6,40,10\r
+    COMBOBOX        OPT_Port,49,4,55,60,CBS_DROPDOWN | WS_VSCROLL | \r
+                    WS_TABSTOP\r
+    RTEXT           "Data &Rate:",-1,114,6,40,10,NOT WS_GROUP\r
+    COMBOBOX        OPT_DataRate,159,4,55,100,CBS_DROPDOWN | WS_VSCROLL | \r
+                    WS_TABSTOP\r
+    RTEXT           "Data &Bits:",-1,4,25,40,10,NOT WS_GROUP\r
+    COMBOBOX        OPT_Bits,49,22,55,60,CBS_DROPDOWNLIST | CBS_HASSTRINGS | \r
+                    WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "P&arity:",-1,114,24,40,10,NOT WS_GROUP\r
+    COMBOBOX        OPT_Parity,159,22,55,60,CBS_DROPDOWNLIST | \r
+                    CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "&Stop Bits:",-1,4,42,40,10,NOT WS_GROUP\r
+    COMBOBOX        OPT_StopBits,49,40,55,60,CBS_DROPDOWNLIST | \r
+                    CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "F&low:",-1,114,42,40,10,NOT WS_GROUP\r
+    COMBOBOX        OPT_Flow,159,40,55,60,CBS_DROPDOWNLIST | CBS_HASSTRINGS | \r
+                    WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "Help",OPT_SerialHelp,4,60,50,14,NOT WS_VISIBLE\r
+END\r
+\r
+DLG_EditComment DIALOG DISCARDABLE  6, 18, 302, 102\r
+STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME\r
+CAPTION "Edit Comment"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    PUSHBUTTON      "OK",IDOK,194,84,50,14\r
+    PUSHBUTTON      "Cancel",OPT_CancelComment,250,84,50,14\r
+    CONTROL         "",OPT_CommentText,"RICHEDIT",ES_MULTILINE | \r
+                    ES_AUTOHSCROLL | ES_WANTRETURN | WS_BORDER | WS_VSCROLL | \r
+                    WS_HSCROLL | WS_TABSTOP,2,2,298,78\r
+    PUSHBUTTON      "&Clear",OPT_ClearComment,2,84,50,14\r
+    PUSHBUTTON      "&Edit",OPT_EditComment,58,84,50,14\r
+END\r
+\r
+DLG_PromotionKing DIALOG DISCARDABLE  98, 90, 183, 41\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Promote to:"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    PUSHBUTTON      "Chance&llor",PB_Chancellor,49,4,40,14,NOT WS_TABSTOP\r
+    PUSHBUTTON      "&Archbishop",PB_Archbishop,94,4,40,14,NOT WS_TABSTOP\r
+    PUSHBUTTON      "&Queen",PB_Queen,4,23,40,14,WS_GROUP\r
+    PUSHBUTTON      "&Rook",PB_Rook,49,23,40,14,NOT WS_TABSTOP\r
+    PUSHBUTTON      "&Bishop",PB_Bishop,94,23,40,14,NOT WS_TABSTOP\r
+    PUSHBUTTON      "K&night",PB_Knight,139,23,40,14,NOT WS_TABSTOP\r
+    PUSHBUTTON      "&King",PB_King,4,4,40,14,NOT WS_TABSTOP\r
+    PUSHBUTTON      "&Cancel",IDCANCEL,139,4,40,14,WS_GROUP\r
+    LTEXT           "      YES",IDC_Yes,6,25,36,10\r
+    LTEXT           "       NO",IDC_No,141,25,36,10\r
+    LTEXT           "C&entaur",IDC_Centaur,12,6,25,10\r
+END\r
+\r
+ABOUTBOX2 DIALOG DISCARDABLE  22, 17, 281, 223\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "About WinBoard"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    RTEXT           "Chessboard for Windows",DLG_TimeControl,196,154,80,8\r
+    LTEXT           "Copyright 1991 Digital Equipment Corporation",201,4,168,\r
+                    151,8\r
+    LTEXT           "Enhancements Copyright 1992-2003   Free Software Foundation",\r
+                    OPT_TCtext1,4,179,126,17\r
+    CONTROL         "",OPT_TCTime,"Static",SS_BLACKRECT,4,164,272,1\r
+    LTEXT           "WinBoard 0.0.0",ABOUTBOX_Version,4,154,64,8\r
+    CONTROL         "galactic",IDC_STATIC,"Static",SS_BITMAP,4,4,15,13\r
+    DEFPUSHBUTTON   "OK",IDOK,226,204,50,14\r
+    LTEXT           "Enhancements Copyright 2005\r\nAlessandro Scotti",\r
+                    IDC_STATIC,4,199,183,20\r
+    LTEXT           "(unofficial version ""X"")",IDC_STATIC,68,154,71,8\r
+END\r
+\r
+DLG_GameList DIALOG DISCARDABLE  6, 18, 259, 153\r
+STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME\r
+CAPTION "Game List"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    LISTBOX         OPT_GameListText,2,2,254,130,LBS_NOINTEGRALHEIGHT | \r
+                    WS_VSCROLL | WS_HSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "&Load",OPT_GameListLoad,2,135,32,15\r
+    PUSHBUTTON      "&<",OPT_GameListPrev,38,135,22,15\r
+    PUSHBUTTON      "&>",OPT_GameListNext,64,135,24,15\r
+    PUSHBUTTON      "&Close",OPT_GameListClose,92,135,32,15\r
+    PUSHBUTTON      "Filter",IDC_GameListDoFilter,144,136,30,14\r
+    EDITTEXT        IDC_GameListFilter,178,136,78,14,ES_AUTOHSCROLL\r
+END\r
+\r
+DLG_EditTags DIALOG DISCARDABLE  6, 18, 167, 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
+    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
+    PUSHBUTTON      "&Edit",OPT_EditTags,2,122,50,14\r
+END\r
+\r
+WBCONSOLE DIALOG DISCARDABLE  0, 0, 335, 133\r
+STYLE WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CAPTION | WS_SYSMENU | \r
+    WS_THICKFRAME\r
+CAPTION "I C S"\r
+CLASS "WBConsole"\r
+FONT 8, "Courier New"\r
+BEGIN\r
+    CONTROL         "",OPT_ConsoleText,"RICHEDIT",ES_MULTILINE | \r
+                    ES_AUTOVSCROLL | ES_NOHIDESEL | ES_READONLY | ES_NUMBER | \r
+                    WS_BORDER | WS_VSCROLL | WS_TABSTOP,0,0,335,119\r
+    CONTROL         "",OPT_ConsoleInput,"RICHEDIT",ES_MULTILINE | \r
+                    ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_NOHIDESEL | \r
+                    ES_NUMBER | WS_BORDER | WS_TABSTOP,0,120,335,13,\r
+                    WS_EX_TRANSPARENT\r
+END\r
+\r
+DLG_Analysis DIALOG DISCARDABLE  0, 0, 294, 62\r
+STYLE WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | \r
+    WS_THICKFRAME\r
+CAPTION "Dialog"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    CONTROL         "",OPT_AnalysisText,"RICHEDIT",ES_MULTILINE | \r
+                    ES_READONLY | ES_WANTRETURN | WS_BORDER | WS_VSCROLL | \r
+                    WS_HSCROLL | WS_TABSTOP,4,4,286,54\r
+END\r
+\r
+DLG_Error DIALOG DISCARDABLE  0, 0, 220, 66\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Error"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    ICON            32515,IDC_STATIC,4,4,21,20\r
+    LTEXT           "Sorry Charlie",OPT_ErrorText,28,4,188,36\r
+    DEFPUSHBUTTON   "OK",IDOK,84,48,50,14\r
+END\r
+\r
+DLG_Colorize DIALOGEX 0, 0, 174, 61\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "I C S Interaction Colors"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    DEFPUSHBUTTON   "OK",IDOK,64,42,50,14,WS_GROUP\r
+    PUSHBUTTON      "Cancel",IDCANCEL,120,42,50,14\r
+    PUSHBUTTON      "&Color...",OPT_ChooseColor,119,4,51,14,WS_GROUP\r
+    CONTROL         "&Bold",OPT_Bold,"Button",BS_AUTOCHECKBOX | WS_GROUP | \r
+                    WS_TABSTOP,4,24,30,10\r
+    CONTROL         "&Italic",OPT_Italic,"Button",BS_AUTOCHECKBOX,40,24,30,\r
+                    10\r
+    CONTROL         "&Underline",OPT_Underline,"Button",BS_AUTOCHECKBOX,76,\r
+                    24,45,10\r
+    CONTROL         "&Strikeout",OPT_Strikeout,"Button",BS_AUTOCHECKBOX,128,\r
+                    24,42,10\r
+    CONTROL         "",OPT_Sample,"RICHEDIT",ES_CENTER | ES_MULTILINE | \r
+                    ES_READONLY | WS_GROUP,4,4,106,15,WS_EX_CLIENTEDGE\r
+END\r
+\r
+DLG_Question DIALOG DISCARDABLE  0, 0, 187, 77\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Question"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    EDITTEXT        OPT_QuestionInput,4,36,179,14,ES_AUTOHSCROLL\r
+    DEFPUSHBUTTON   "OK",IDOK,78,58,50,14,WS_GROUP\r
+    PUSHBUTTON      "Cancel",IDCANCEL,134,58,50,14\r
+    LTEXT           "Enter a chess engine command or just type something stupid that will completely screw things up.",\r
+                    OPT_QuestionText,30,2,153,28\r
+    ICON            32514,IDC_STATIC,4,4,20,20\r
+END\r
+\r
+DLG_Startup DIALOG DISCARDABLE  0, 0, 276, 159\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "WinBoard Startup"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    GROUPBOX        "What would you like to do?",IDC_STATIC,4,4,211,56\r
+    CONTROL         "&Play against a chess engine or match two engines",\r
+                    OPT_ChessEngine,"Button",BS_AUTORADIOBUTTON | WS_GROUP | \r
+                    WS_TABSTOP,8,17,193,10\r
+    CONTROL         "&Use an Internet Chess Server",OPT_ChessServer,"Button",\r
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,8,30,193,10\r
+    CONTROL         "Just &view or edit game files",OPT_View,"Button",\r
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,8,43,193,10\r
+    LTEXT           "Specify Chess &Engines:",IDC_SPECIFY_ENG_STATIC,11,63,\r
+                    102,10\r
+    COMBOBOX        OPT_ChessEngineName,17,74,194,129,CBS_DROPDOWN | \r
+                    CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        OPT_SecondChessEngineName,17,92,194,129,CBS_DROPDOWN | \r
+                    CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP\r
+    LTEXT           "Specify Chess &Server:",IDC_SPECIFY_SERVER_STATIC,11,\r
+                    108,102,10\r
+    COMBOBOX        OPT_ChessServerName,17,122,194,129,CBS_DROPDOWN | \r
+                    CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "&Additional options",OPT_AnyAdditional,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,11,142,71,10\r
+    EDITTEXT        OPT_AdditionalOptions,85,142,187,13,ES_AUTOHSCROLL\r
+    DEFPUSHBUTTON   "OK",IDOK,222,4,50,14\r
+    PUSHBUTTON      "Cancel",IDCANCEL,222,21,50,14\r
+    PUSHBUTTON      "&Help",IDM_HELPCONTENTS,222,38,50,14\r
+END\r
+\r
+DLG_IndexNumber DIALOG DISCARDABLE  0, 0, 236, 18\r
+STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_CLIPSIBLINGS\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    LTEXT           "Inde&x number:",IDC_STATIC,5,2,46,8\r
+    EDITTEXT        OPT_IndexNumber,54,0,155,13,ES_AUTOHSCROLL\r
+END\r
+\r
+DLG_TypeInMove DIALOG DISCARDABLE  0, 0, 206, 23\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Type in a move"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    DEFPUSHBUTTON   "OK",IDOK,96,4,50,14\r
+    PUSHBUTTON      "Cancel",IDCANCEL,152,4,50,14\r
+    EDITTEXT        OPT_Move,4,4,86,13,ES_AUTOHSCROLL\r
+END\r
+\r
+DLG_TypeInName DIALOG DISCARDABLE  0, 0, 206, 23\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Type in your name"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    DEFPUSHBUTTON   "OK",IDOK,96,4,50,14\r
+    PUSHBUTTON      "Cancel",IDCANCEL,152,4,50,14\r
+    EDITTEXT        OPT_Name,4,4,86,13,ES_AUTOHSCROLL\r
+END\r
+\r
+DLG_Sound DIALOG DISCARDABLE  0, 0, 242, 105\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Sounds"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    DEFPUSHBUTTON   "OK",IDOK,132,86,50,14\r
+    PUSHBUTTON      "Cancel",IDCANCEL,188,86,50,14\r
+    LTEXT           "Event:",IDC_STATIC,4,7,26,9\r
+    COMBOBOX        CBO_Sounds,30,4,208,110,CBS_DROPDOWNLIST | WS_VSCROLL | \r
+                    WS_TABSTOP\r
+    CONTROL         "No sound",OPT_NoSound,"Button",BS_AUTORADIOBUTTON | \r
+                    WS_GROUP | WS_TABSTOP,12,22,47,10\r
+    CONTROL         "Default beep",OPT_DefaultBeep,"Button",\r
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,12,36,57,10\r
+    CONTROL         "Built-in sound:",OPT_BuiltInSound,"Button",\r
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,12,51,60,10\r
+    COMBOBOX        OPT_BuiltInSoundName,76,48,103,109,CBS_DROPDOWNLIST | \r
+                    CBS_SORT | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "Play",OPT_PlaySound,188,47,50,14\r
+    CONTROL         "WAV file:",OPT_WavFile,"Button",BS_AUTORADIOBUTTON | \r
+                    WS_TABSTOP,12,66,45,10\r
+    EDITTEXT        OPT_WavFileName,76,65,103,12,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "Browse...",OPT_BrowseSound,188,64,50,14\r
+    PUSHBUTTON      "Defaults",OPT_DefaultSounds,6,86,50,14\r
+END\r
+\r
+DLG_GeneralOptions DIALOG DISCARDABLE  0, 0, 250, 183\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "General Options"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    DEFPUSHBUTTON   "OK",IDOK,110,164,50,14\r
+    PUSHBUTTON      "Cancel",IDCANCEL,166,164,50,14\r
+    CONTROL         "Always on &Top",OPT_AlwaysOnTop,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,4,6,126,10\r
+    CONTROL         "Highlight Last &Move",OPT_HighlightLastMove,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,131,6,126,10\r
+    CONTROL         "Always &Queen            Ctrl+Shift+Q",OPT_AlwaysQueen,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,4,20,126,10\r
+    CONTROL         "Periodic &Updates",OPT_PeriodicUpdates,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,131,20,126,10\r
+    CONTROL         "Animate &Dragging",OPT_AnimateDragging,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,4,34,126,10\r
+    CONTROL         "Ponder &Next Move  Ctrl+Shift+P",OPT_PonderNextMove,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,131,34,126,10\r
+    CONTROL         "&Animate Moving         Ctrl+Shift+A",OPT_AnimateMoving,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,4,48,126,10\r
+    CONTROL         "&Popup Exit Message",OPT_PopupExitMessage,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,131,48,126,10\r
+    CONTROL         "Auto &Flag                   Ctrl+Shift+F",OPT_AutoFlag,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,4,62,126,10\r
+    CONTROL         "Popup Move &Errors",OPT_PopupMoveErrors,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,131,62,126,10\r
+    CONTROL         "Auto Flip &View",OPT_AutoFlipView,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,4,76,126,10\r
+    CONTROL         "Show Butt&on Bar",OPT_ShowButtonBar,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,131,76,126,10\r
+    CONTROL         "Auto &Raise Board",OPT_AutoRaiseBoard,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,4,90,71,10\r
+    CONTROL         "Show &Coordinates",OPT_ShowCoordinates,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,131,90,126,10\r
+    CONTROL         "&Blindfold",OPT_Blindfold,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,4,104,126,10\r
+    CONTROL         "&Send Engine Think",OPT_ShowThinking,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,131,104,126,10\r
+    CONTROL         "Highlight Dra&gging",OPT_HighlightDragging,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,4,118,126,10\r
+    CONTROL         "Test &Legality            Ctrl+Shift+L",OPT_TestLegality,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,131,118,126,10\r
+    CONTROL         "E&xtended PGN Info    Ctrl+Shift+X",OPT_SaveExtPGN,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,4,132,126,10\r
+    CONTROL         "&Hide Thinking          Ctrl+Shift+H",OPT_HideThinkFromHuman,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,131,132,126,10\r
+    CONTROL         "&Info in Move History   Ctrl+Shift+I",OPT_ExtraInfoInMoveHistory,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,146,126,10\r
+    CONTROL         "Highlight with Arro&w",OPT_HighlightMoveArrow,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,131,145,126,10\r
+END\r
+\r
+DLG_IcsOptions DIALOGEX 0, 0, 302, 255\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "ICS Options"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    DEFPUSHBUTTON   "OK",IDOK,194,237,50,15\r
+    PUSHBUTTON      "Cancel",IDCANCEL,248,237,50,15\r
+    CONTROL         "&Auto Comment",OPT_AutoComment,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,10,12,63,8\r
+    CONTROL         "Auto &Observe",OPT_AutoObserve,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,10,25,63,8\r
+    CONTROL         "&Get Move List",OPT_GetMoveList,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,10,38,63,8\r
+    CONTROL         "&Local Line Editing",OPT_LocalLineEditing,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,10,51,84,8\r
+    CONTROL         "&Quiet Play",OPT_QuietPlay,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,10,64,63,8\r
+    CONTROL         "&Premove",OPT_Premove,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,160,12,46,10\r
+    CONTROL         "&White first move",OPT_PremoveWhite,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,160,26,67,10\r
+    EDITTEXT        OPT_PremoveWhiteText,236,22,25,14,ES_AUTOHSCROLL\r
+    CONTROL         "&Black first move",OPT_PremoveBlack,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,160,40,66,10\r
+    EDITTEXT        OPT_PremoveBlackText,236,38,25,14,ES_AUTOHSCROLL\r
+    CONTROL         "&Sound alarm at",OPT_IcsAlarm,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,160,72,63,10\r
+    EDITTEXT        OPT_IcsAlarmTime,236,68,26,14,ES_AUTOHSCROLL\r
+    LTEXT           "seconds",IDC_STATIC,264,72,28,8\r
+    PUSHBUTTON      "Choose...",OPT_ChooseShoutColor,97,101,45,15\r
+    PUSHBUTTON      "Choose...",OPT_ChooseSShoutColor,97,121,45,15\r
+    PUSHBUTTON      "Choose...",OPT_ChooseChannel1Color,97,141,45,15\r
+    PUSHBUTTON      "Choose...",OPT_ChooseChannelColor,97,161,45,15\r
+    PUSHBUTTON      "Choose...",OPT_ChooseKibitzColor,97,181,45,15\r
+    PUSHBUTTON      "Choose...",OPT_ChooseTellColor,246,101,45,15\r
+    PUSHBUTTON      "Choose...",OPT_ChooseChallengeColor,246,121,45,15\r
+    PUSHBUTTON      "Choose...",OPT_ChooseRequestColor,246,141,45,15\r
+    PUSHBUTTON      "Choose...",OPT_ChooseSeekColor,246,161,45,15\r
+    PUSHBUTTON      "Choose...",OPT_ChooseNormalColor,246,181,45,15\r
+    PUSHBUTTON      "Background...",OPT_ChooseBackgroundColor,10,208,50,16\r
+    PUSHBUTTON      "&Defaults...",OPT_DefaultColors,68,208,50,16\r
+    CONTROL         "Do &not colorize messages",OPT_DontColorize,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,192,212,97,10\r
+    CONTROL         "",OPT_SampleShout,"RICHEDIT",ES_CENTER | ES_MULTILINE | \r
+                    ES_READONLY | WS_DISABLED | WS_GROUP,10,101,75,15,\r
+                    WS_EX_CLIENTEDGE\r
+    CONTROL         "",OPT_SampleSShout,"RICHEDIT",ES_CENTER | ES_MULTILINE | \r
+                    ES_READONLY | WS_DISABLED | WS_GROUP,10,121,75,15,\r
+                    WS_EX_CLIENTEDGE\r
+    CONTROL         "",OPT_SampleChannel1,"RICHEDIT",ES_CENTER | \r
+                    ES_MULTILINE | ES_READONLY | WS_DISABLED | WS_GROUP,10,\r
+                    141,75,15,WS_EX_CLIENTEDGE\r
+    CONTROL         "",OPT_SampleChannel,"RICHEDIT",ES_CENTER | ES_MULTILINE | \r
+                    ES_READONLY | WS_DISABLED | WS_GROUP,10,161,75,15,\r
+                    WS_EX_CLIENTEDGE\r
+    CONTROL         "",OPT_SampleKibitz,"RICHEDIT",ES_CENTER | ES_MULTILINE | \r
+                    ES_READONLY | WS_GROUP,10,181,75,15,WS_EX_CLIENTEDGE\r
+    CONTROL         "",OPT_SampleTell,"RICHEDIT",ES_CENTER | ES_MULTILINE | \r
+                    ES_READONLY | WS_DISABLED | WS_GROUP,159,101,75,15,\r
+                    WS_EX_CLIENTEDGE\r
+    CONTROL         "",OPT_SampleChallenge,"RICHEDIT",ES_CENTER | \r
+                    ES_MULTILINE | ES_READONLY | WS_DISABLED | WS_GROUP,159,\r
+                    121,75,15,WS_EX_CLIENTEDGE\r
+    CONTROL         "",OPT_SampleRequest,"RICHEDIT",ES_CENTER | ES_MULTILINE | \r
+                    ES_READONLY | WS_DISABLED | WS_GROUP,159,141,75,15,\r
+                    WS_EX_CLIENTEDGE\r
+    CONTROL         "",OPT_SampleSeek,"RICHEDIT",ES_CENTER | ES_MULTILINE | \r
+                    ES_READONLY | WS_DISABLED | WS_GROUP,159,161,75,15,\r
+                    WS_EX_CLIENTEDGE\r
+    CONTROL         "",OPT_SampleNormal,"RICHEDIT",ES_CENTER | ES_MULTILINE | \r
+                    ES_READONLY | WS_DISABLED | WS_GROUP,159,181,75,15,\r
+                    WS_EX_CLIENTEDGE\r
+    GROUPBOX        "Interaction Colors",IDC_STATIC,4,90,294,140\r
+    GROUPBOX        "Premove",IDC_STATIC,154,0,144,56\r
+    GROUPBOX        "General",IDC_STATIC,4,0,146,88\r
+    GROUPBOX        "Alarm",IDC_STATIC,154,58,144,30\r
+END\r
+\r
+DLG_BoardOptions DIALOG DISCARDABLE  0, 0, 194, 250\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Board Options"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    DEFPUSHBUTTON   "OK",IDOK,84,232,50,14\r
+    PUSHBUTTON      "Cancel",IDCANCEL,140,232,50,14\r
+    CONTROL         "&Tiny",OPT_SizeTiny,"Button",BS_AUTORADIOBUTTON | \r
+                    WS_GROUP | WS_TABSTOP,9,14,50,10\r
+    CONTROL         "T&eeny",OPT_SizeTeeny,"Button",BS_AUTORADIOBUTTON,9,24,\r
+                    50,10\r
+    CONTROL         "&Dinky",OPT_SizeDinky,"Button",BS_AUTORADIOBUTTON,9,34,\r
+                    50,10\r
+    CONTROL         "&Petite",OPT_SizePetite,"Button",BS_AUTORADIOBUTTON,9,\r
+                    44,50,10\r
+    CONTROL         "Sl&im",OPT_SizeSlim,"Button",BS_AUTORADIOBUTTON,9,54,50,\r
+                    10\r
+    CONTROL         "&Small",OPT_SizeSmall,"Button",BS_AUTORADIOBUTTON,9,64,\r
+                    50,10\r
+    CONTROL         "Medi&ocre",OPT_SizeMediocre,"Button",BS_AUTORADIOBUTTON,\r
+                    70,14,50,10\r
+    CONTROL         "&Middling",OPT_SizeMiddling,"Button",BS_AUTORADIOBUTTON,\r
+                    70,24,50,10\r
+    CONTROL         "&Average",OPT_SizeAverage,"Button",BS_AUTORADIOBUTTON,\r
+                    70,34,50,10\r
+    CONTROL         "Mode&rate",OPT_SizeModerate,"Button",BS_AUTORADIOBUTTON,\r
+                    70,44,50,10\r
+    CONTROL         "Medi&um",OPT_SizeMedium,"Button",BS_AUTORADIOBUTTON,70,\r
+                    54,50,10\r
+    CONTROL         "Bul&ky",OPT_SizeBulky,"Button",BS_AUTORADIOBUTTON,70,64,\r
+                    50,10\r
+    CONTROL         "&Large",OPT_SizeLarge,"Button",BS_AUTORADIOBUTTON,134,\r
+                    14,50,10\r
+    CONTROL         "&Big",OPT_SizeBig,"Button",BS_AUTORADIOBUTTON,134,24,50,\r
+                    10\r
+    CONTROL         "&Huge",OPT_SizeHuge,"Button",BS_AUTORADIOBUTTON,134,34,\r
+                    50,10\r
+    CONTROL         "&Giant",OPT_SizeGiant,"Button",BS_AUTORADIOBUTTON,134,\r
+                    44,50,10\r
+    CONTROL         "&Colossal",OPT_SizeColossal,"Button",BS_AUTORADIOBUTTON,\r
+                    134,54,50,10\r
+    CONTROL         "Tita&nic",OPT_SizeTitanic,"Button",BS_AUTORADIOBUTTON,\r
+                    134,64,50,10\r
+    PUSHBUTTON      "...",OPT_ChooseLightSquareColor,110,94,20,15\r
+    PUSHBUTTON      "...",OPT_ChooseDarkSquareColor,110,112,20,15\r
+    PUSHBUTTON      "...",OPT_ChooseWhitePieceColor,110,130,20,15\r
+    PUSHBUTTON      "...",OPT_ChooseBlackPieceColor,110,148,20,15\r
+    PUSHBUTTON      "...",OPT_ChooseHighlightSquareColor,110,166,20,15\r
+    PUSHBUTTON      "...",OPT_ChoosePremoveHighlightColor,110,184,20,15\r
+    CONTROL         "Monochrome",OPT_Monochrome,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,10,210,64,10\r
+    CONTROL         "All White",OPT_AllWhite,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,140,180,53,10\r
+    CONTROL         "Flip Black",OPT_UpsideDown,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,140,192,53,10\r
+    PUSHBUTTON      "Defaults",OPT_DefaultBoardColors,80,206,50,15\r
+    EDITTEXT        OPT_DarkSquareColor,80,112,25,15,ES_READONLY | \r
+                    WS_DISABLED | NOT WS_BORDER | NOT WS_TABSTOP\r
+    EDITTEXT        OPT_LightSquareColor,80,94,25,15,ES_READONLY | \r
+                    WS_DISABLED | NOT WS_BORDER | NOT WS_TABSTOP\r
+    EDITTEXT        OPT_WhitePieceColor,80,130,25,15,ES_READONLY | \r
+                    WS_DISABLED | NOT WS_BORDER | NOT WS_TABSTOP\r
+    EDITTEXT        OPT_BlackPieceColor,80,148,25,15,ES_READONLY | \r
+                    WS_DISABLED | NOT WS_BORDER | NOT WS_TABSTOP\r
+    EDITTEXT        OPT_HighlightSquareColor,80,166,25,15,ES_READONLY | \r
+                    WS_DISABLED | NOT WS_BORDER | NOT WS_TABSTOP\r
+    GROUPBOX        "Colors",IDC_STATIC,4,84,185,142\r
+    EDITTEXT        OPT_PremoveHighlightColor,80,184,25,15,ES_READONLY | \r
+                    WS_DISABLED | NOT WS_BORDER | NOT WS_TABSTOP\r
+    LTEXT           "Light Squares",IDC_STATIC,10,98,60,10\r
+    LTEXT           "Dark Squares",IDC_STATIC,10,116,60,10\r
+    LTEXT           "White Pieces",IDC_STATIC,10,134,60,10\r
+    LTEXT           "Black Pieces",IDC_STATIC,10,152,60,10\r
+    LTEXT           "Square Highlights",IDC_STATIC,10,170,60,10\r
+    LTEXT           "Premove Highlights",IDC_STATIC,10,188,70,10\r
+    GROUPBOX        "Size",IDC_STATIC,4,4,185,75\r
+    EDITTEXT        OPT_SampleLightSquare,144,96,39,36,ES_READONLY | \r
+                    WS_DISABLED | NOT WS_BORDER | NOT WS_TABSTOP\r
+    EDITTEXT        OPT_SampleDarkSquare,144,138,39,36,ES_READONLY | \r
+                    WS_DISABLED | NOT WS_BORDER | NOT WS_TABSTOP\r
+END\r
+\r
+DLG_NewVariant DIALOG DISCARDABLE  0, 0, 194, 250\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Variants"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    DEFPUSHBUTTON   "OK",IDOK,84,232,50,14\r
+    PUSHBUTTON      "Cancel",IDCANCEL,140,232,50,14\r
+    CONTROL         "&normal",OPT_VariantNormal,"Button",BS_AUTORADIOBUTTON | \r
+                    WS_GROUP | WS_TABSTOP,9,14,50,10\r
+    CONTROL         "&FRC",OPT_VariantFRC,"Button",BS_AUTORADIOBUTTON,9,\r
+                    24,50,10\r
+    CONTROL         "&wildcastle",OPT_VariantWildcastle,"Button",BS_AUTORADIOBUTTON,9,34,\r
+                    50,10\r
+    CONTROL         "&nocastle",OPT_VariantNocastle,"Button",BS_AUTORADIOBUTTON,9,\r
+                    44,50,10\r
+    CONTROL         "&losers",OPT_VariantLosers,"Button",BS_AUTORADIOBUTTON,\r
+                    9,54,50,10\r
+    CONTROL         "&giveaway",OPT_VariantGiveaway,"Button",BS_AUTORADIOBUTTON,\r
+                    9,64,50,10\r
+    CONTROL         "s&uicide",OPT_VariantSuicide,"Button",BS_AUTORADIOBUTTON,\r
+                    9,74,50,10\r
+    CONTROL         "&3Check",OPT_Variant3Check,"Button",BS_AUTORADIOBUTTON,9,84,\r
+                    50,10\r
+    CONTROL         "&twokings",OPT_VariantTwoKings,"Button",BS_AUTORADIOBUTTON,9,94,\r
+                    50,10\r
+    CONTROL         "&atomic",OPT_VariantAtomic,"Button",BS_AUTORADIOBUTTON,\r
+                    9,104,50,10\r
+    CONTROL         "cra&zyhouse",OPT_VariantCrazyhouse,"Button",BS_AUTORADIOBUTTON,70,14,\r
+                    50,10\r
+    CONTROL         "&bughouse",OPT_VariantBughouse,"Button",BS_AUTORADIOBUTTON,70,24,50,\r
+                    10\r
+    CONTROL         "&Twilight",OPT_VariantBughouse,"Button",BS_AUTORADIOBUTTON,70,34,50,\r
+                    10\r
+    CONTROL         "&shogi",OPT_VariantShogi,"Button",BS_AUTORADIOBUTTON,70,\r
+                    44,50,10\r
+    CONTROL         "su&per",OPT_VariantSuper,"Button",BS_AUTORADIOBUTTON,70,\r
+                    54,50,10\r
+    CONTROL         "&knightmate",OPT_VariantKnightmate,"Button",BS_AUTORADIOBUTTON,\r
+                    70,64,50,10\r
+    CONTROL         "&Berolina",OPT_VariantBerolina,"Button",BS_AUTORADIOBUTTON,70,74,\r
+                    50,10\r
+    CONTROL         "c&ylinder",OPT_VariantCylinder,"Button",BS_AUTORADIOBUTTON,70,\r
+                    84,50,10\r
+    CONTROL         "&fairy",OPT_VariantFairy,"Button",BS_AUTORADIOBUTTON,70,\r
+                    94,50,10\r
+    CONTROL         "&gothic",OPT_VariantGothic,"Button",BS_AUTORADIOBUTTON,134,14,\r
+                    50,10\r
+    CONTROL         "&capablanca",OPT_VariantCapablanca,"Button",BS_AUTORADIOBUTTON,134,\r
+                    24,50,10\r
+    CONTROL         "&Janus",OPT_VariantJanus,"Button",BS_AUTORADIOBUTTON,134,34,\r
+                    50,10\r
+    CONTROL         "&CRC",OPT_VariantCRC,"Button",BS_AUTORADIOBUTTON,134,44,\r
+                    50,10\r
+    CONTROL         "&Falcon",OPT_VariantFalcon,"Button",BS_AUTORADIOBUTTON,134,\r
+                    54,50,10\r
+    CONTROL         "cou&rier",OPT_VariantCourier,"Button",BS_AUTORADIOBUTTON,134,64,\r
+                    50,10\r
+    CONTROL         "&Great",OPT_VariantGreat,"Button",BS_AUTORADIOBUTTON,134,74,\r
+                    50,10\r
+    CONTROL         "&Shatranj",OPT_VariantShatranj,"Button",BS_AUTORADIOBUTTON,134,\r
+                    84,50,10\r
+    CONTROL         "&xiangqi",OPT_VariantXiangqi,"Button",BS_AUTORADIOBUTTON,134,94,50,\r
+                    10\r
+    GROUPBOX        "Variant",IDC_STATIC,4,4,185,115\r
+    LTEXT           "Board size:",IDC_STATIC,10,135,40,8\r
+    EDITTEXT        IDC_Ranks,60,131,14,14,ES_AUTOHSCROLL\r
+    LTEXT           "ranks",IDC_STATIC,77,135,22,8\r
+    EDITTEXT        IDC_Files,116,131,14,14,ES_AUTOHSCROLL\r
+    LTEXT           "files",IDC_STATIC,133,135,37,8\r
+    LTEXT           "Holdings with room for:",IDC_STATIC,10,153,90,8\r
+    EDITTEXT        IDC_Holdings,93,149,14,14,ES_AUTOHSCROLL\r
+    LTEXT           "pieces",IDC_STATIC,110,153,22,8\r
+    LTEXT           "('-1' means defaults for selected variant)",IDC_STATIC,10,171,150,8\r
+END\r
+\r
+DLG_Fonts DIALOG DISCARDABLE  0, 0, 266, 226\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Fonts"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    DEFPUSHBUTTON   "OK",IDOK,156,208,50,14\r
+    PUSHBUTTON      "Cancel",IDCANCEL,212,208,50,14\r
+    PUSHBUTTON      "Choose...",OPT_ChooseClockFont,212,15,45,15\r
+    PUSHBUTTON      "Choose...",OPT_ChooseMessageFont,212,39,45,15\r
+    PUSHBUTTON      "Choose...",OPT_ChooseCoordFont,212,63,45,15\r
+    PUSHBUTTON      "Choose...",OPT_ChooseTagFont,212,101,45,15\r
+    PUSHBUTTON      "Choose...",OPT_ChooseCommentsFont,212,125,45,15\r
+    PUSHBUTTON      "Choose...",OPT_ChooseConsoleFont,212,149,45,15\r
+    PUSHBUTTON      "Choose...",OPT_ChooseMoveHistoryFont,212,174,45,15\r
+    PUSHBUTTON      "&Defaults",OPT_DefaultFonts,3,208,50,15\r
+    CONTROL         "",OPT_SampleCoordFont,"RICHEDIT",ES_READONLY | \r
+                    WS_DISABLED | WS_BORDER,67,59,140,20\r
+    CONTROL         "",OPT_SampleTagFont,"RICHEDIT",ES_READONLY | \r
+                    WS_DISABLED | WS_BORDER,67,97,140,20\r
+    CONTROL         "",OPT_SampleCommentsFont,"RICHEDIT",ES_READONLY | \r
+                    WS_DISABLED | WS_BORDER,67,121,140,20\r
+    CONTROL         "",OPT_SampleConsoleFont,"RICHEDIT",ES_READONLY | \r
+                    WS_DISABLED | WS_BORDER,67,145,140,20\r
+    LTEXT           "Clocks",OPT_ClockFont,13,16,45,10,NOT WS_GROUP\r
+    LTEXT           "Messages",OPT_MessageFont,13,40,45,10,NOT WS_GROUP\r
+    LTEXT           "Coordinates",OPT_CoordFont,13,64,45,10,NOT WS_GROUP\r
+    LTEXT           "Tags",OPT_EditTagsFont,13,102,45,10,NOT WS_GROUP\r
+    LTEXT           "Comments",OPT_CommentsFont,13,126,45,10,NOT WS_GROUP\r
+    LTEXT           "I C S Interaction",OPT_MessageFont5,13,150,50,10,NOT \r
+                    WS_GROUP\r
+    CONTROL         "",OPT_SampleClockFont,"RICHEDIT",ES_READONLY | \r
+                    WS_DISABLED | WS_BORDER,67,11,140,20\r
+    CONTROL         "",OPT_SampleMessageFont,"RICHEDIT",ES_READONLY | \r
+                    WS_DISABLED | WS_BORDER,67,35,140,20\r
+    GROUPBOX        "Current Board Size",IDC_STATIC,3,1,259,83\r
+    GROUPBOX        "All Board Sizes",IDC_STATIC,3,87,259,109\r
+    CONTROL         "",OPT_SampleMoveHistoryFont,"RICHEDIT",ES_READONLY | \r
+                    WS_DISABLED | WS_BORDER,67,170,140,20\r
+    LTEXT           "Move History, Engine Output",OPT_MessageFont6,13,171,50,20,NOT \r
+                    WS_GROUP\r
+END\r
+\r
+DLG_NewGameFRC DIALOG DISCARDABLE  0, 0, 176, 47\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "New Shuffle Game"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    LTEXT           "&Start Position Number:",IDC_NFG_Label,4,7,71,8\r
+    EDITTEXT        IDC_NFG_Edit,76,4,42,14,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "Random",IDC_NFG_Random,122,4,50,14\r
+    DEFPUSHBUTTON   "OK",IDOK,64,28,50,14\r
+    PUSHBUTTON      "Cancel",IDCANCEL,122,28,50,14\r
+END\r
+\r
+DLG_GameListOptions DIALOG DISCARDABLE  0, 0, 206, 140\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Game List Options"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    LTEXT           "PGN &Tags:",IDC_GLT,2,2,36,8\r
+    LISTBOX         IDC_GameListTags,2,12,158,102,LBS_USETABSTOPS | \r
+                    LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "&Up",IDC_GLT_Up,164,12,38,14\r
+    PUSHBUTTON      "&Down",IDC_GLT_Down,164,30,38,14\r
+    PUSHBUTTON      "Default",IDC_GLT_Restore,164,82,38,14\r
+    PUSHBUTTON      "Factory",IDC_GLT_Default,164,100,38,14\r
+    DEFPUSHBUTTON   "OK",IDOK,96,122,50,14\r
+    PUSHBUTTON      "Cancel",IDCANCEL,152,122,50,14\r
+    LTEXT           "Restore to:",IDC_GLT_RestoreTo,164,70,36,8\r
+END\r
+\r
+DLG_MoveHistory DIALOGEX 0, 0, 225, 130\r
+STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME\r
+EXSTYLE WS_EX_TOOLWINDOW\r
+CAPTION "Move History"\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    CONTROL         "",IDC_MoveHistory,"RICHEDIT",ES_MULTILINE | ES_READONLY | \r
+                    WS_BORDER | WS_VSCROLL | WS_TABSTOP,2,2,222,128\r
+END\r
+\r
+DLG_EvalGraph DIALOGEX 0, 0, 216, 75\r
+STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME\r
+EXSTYLE WS_EX_TOOLWINDOW\r
+CAPTION "Evaluation Graph"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+END\r
+\r
+DLG_EngineOutput DIALOGEX 0, 0, 266, 167\r
+STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME\r
+EXSTYLE WS_EX_TOOLWINDOW\r
+CAPTION "Engine output"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    LTEXT           "Engine #1",IDC_EngineLabel1,14,2,84,8\r
+    RTEXT           "NPS",IDC_Engine1_NPS,206,2,57,8\r
+    CONTROL         "",IDC_EngineMemo1,"RICHEDIT",ES_MULTILINE | \r
+                    ES_AUTOVSCROLL | ES_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | \r
+                    WS_HSCROLL | WS_TABSTOP,0,10,262,72\r
+    LTEXT           "Engine #2",IDC_EngineLabel2,15,84,103,8\r
+    RTEXT           "NPS",IDC_Engine2_NPS,210,84,55,8\r
+    CONTROL         "",IDC_EngineMemo2,"RICHEDIT",ES_MULTILINE | \r
+                    ES_AUTOVSCROLL | ES_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | \r
+                    WS_HSCROLL | WS_TABSTOP,2,92,262,74\r
+    ICON            IDI_UNKNOWN_14,IDC_Color1,2,4,20,20,SS_REALSIZEIMAGE\r
+    ICON            IDI_UNKNOWN_14,IDC_Color2,4,84,20,20\r
+    LTEXT           "Static",IDC_StateData1,120,2,83,8\r
+    ICON            IDI_TRANS_14,IDC_StateIcon1,98,0,21,20\r
+    LTEXT           "Static",IDC_StateData2,186,84,19,8\r
+    ICON            IDI_TRANS_14,IDC_StateIcon2,164,84,20,20\r
+END\r
+\r
+DLG_EnginePlayOptions DIALOG DISCARDABLE  0, 0, 208, 202\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Adjudications"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    CONTROL         "Ponder Next Move",IDC_EpPonder,"Button",BS_AUTOCHECKBOX |\r
+                    WS_TABSTOP,4,4,75,10\r
+    CONTROL         "Enable and Show Thinking (recommended)",\r
+                    IDC_EpShowThinking,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+                    4,16,152,10\r
+    CONTROL         "Hide Thinking when Playing against Human",\r
+                    IDC_EpHideThinkingHuman,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,4,28,153,10\r
+    CONTROL         "Periodic Updates (for Analysis Mode)",\r
+                    IDC_EpPeriodicUpdates,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,4,40,131,10\r
+    GROUPBOX        "Engine-engine matches",IDC_STATIC,4,56,200,98\r
+    LTEXT           "Adjudicate draw after:",IDC_STATIC,10,72,70,8\r
+    EDITTEXT        IDC_EpDrawMoveCount,116,68,40,14,ES_AUTOHSCROLL\r
+    LTEXT           "moves",IDC_STATIC,158,72,22,8\r
+    LTEXT           "Win/loss adjudication threshold:",IDC_STATIC,10,90,102,\r
+                    8\r
+    EDITTEXT        IDC_EpAdjudicationThreshold,116,86,40,14,ES_AUTOHSCROLL\r
+    LTEXT           "centipawns",IDC_STATIC,158,90,37,8\r
+    CONTROL         "&Verify Engine Claims",IDC_TestClaims,"Button",BS_AUTOCHECKBOX |\r
+                    WS_TABSTOP,10,108,100,10\r
+    CONTROL         "Detect &Mates",\r
+                    IDC_DetectMates,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+                    10,118,100,10\r
+    CONTROL         "Draw if &Insufficient Material",\r
+                    IDC_MaterialDraws,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,10,128,100,10\r
+    CONTROL         "Adjudicate &Trivial Draws",\r
+                    IDC_TrivialDraws,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,10,138,100,10\r
+    GROUPBOX        "Apply",IDC_STATIC,115,102,81,47\r
+    EDITTEXT        IDC_RuleMoves,120,113,20,14,ES_AUTOHSCROLL\r
+    LTEXT           "-move rule",IDC_STATIC,142,117,35,8\r
+    EDITTEXT        IDC_DrawRepeats,120,130,20,14,ES_AUTOHSCROLL\r
+    LTEXT           "-fold repeats",IDC_STATIC,142,134,50,8\r
+    CONTROL         "Engine #1 Score is Absolute",\r
+                    IDC_ScoreAbs1,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,10,156,120,10\r
+    CONTROL         "Engine #2 Score is Absolute",\r
+                    IDC_ScoreAbs2,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,10,168,120,10\r
+    DEFPUSHBUTTON   "OK",IDOK,98,185,50,14\r
+    PUSHBUTTON      "Cancel",IDCANCEL,154,185,50,14\r
+END\r
+\r
+DLG_OptionsUCI DIALOG DISCARDABLE  0, 0, 228, 124\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Engine Settings"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    LTEXT           "Polyglot Directory:",IDC_STATIC,2,8,58,8\r
+    EDITTEXT        IDC_PolyglotDir,62,4,140,14,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "...",IDC_BrowseForPolyglotDir,206,4,17,14\r
+    LTEXT           "Hash Size (MB):",IDC_STATIC,2,26,52,8\r
+    EDITTEXT        IDC_HashSize,62,22,40,14,ES_AUTOHSCROLL\r
+    LTEXT           "EGTB Path:",IDC_STATIC,2,44,39,8\r
+    EDITTEXT        IDC_PathToEGTB,62,40,140,14,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "...",IDC_BrowseForEGTB,206,40,17,14\r
+    LTEXT           "EGTB Size (MB):",IDC_STATIC,2,62,54,8\r
+    EDITTEXT        IDC_SizeOfEGTB,62,58,40,14,ES_AUTOHSCROLL\r
+    CONTROL         "Use Book:",IDC_UseBook,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,2,80,49,10\r
+    EDITTEXT        IDC_BookFile,62,76,140,14,ES_AUTOHSCROLL\r
+    PUSHBUTTON      "...",IDC_BrowseForBook,206,76,17,14\r
+    LTEXT           "Max nr of CPUs:",IDC_STATIC,106,26,52,8\r
+    EDITTEXT        IDC_Cores,162,22,40,14,ES_AUTOHSCROLL\r
+    CONTROL         "First has Own Book",IDC_OwnBook1,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,2,94,100,10\r
+    CONTROL         "Second has Own Book",IDC_OwnBook2,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,2,107,100,10\r
+    DEFPUSHBUTTON   "OK",IDOK,118,106,50,14\r
+    PUSHBUTTON      "Cancel",IDCANCEL,174,106,50,14\r
+END\r
+\r
+DLG_Null DIALOG DISCARDABLE  0, 0, 186, 50\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Null"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+END\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// DESIGNINFO\r
+//\r
+\r
+#ifdef APSTUDIO_INVOKED\r
+GUIDELINES DESIGNINFO DISCARDABLE \r
+BEGIN\r
+    DLG_GameList, DIALOG\r
+    BEGIN\r
+        RIGHTMARGIN, 258\r
+    END\r
+\r
+    DLG_Colorize, DIALOG\r
+    BEGIN\r
+        BOTTOMMARGIN, 32\r
+    END\r
+\r
+    DLG_GeneralOptions, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 213\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 176\r
+    END\r
+\r
+    DLG_IcsOptions, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 295\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 248\r
+    END\r
+\r
+    DLG_BoardOptions, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 187\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 243\r
+    END\r
+\r
+    DLG_Fonts, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 259\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 219\r
+    END\r
+\r
+    DLG_NewGameFRC, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 169\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 40\r
+    END\r
+\r
+    DLG_GameListOptions, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 199\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 133\r
+    END\r
+\r
+    DLG_MoveHistory, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 218\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 123\r
+    END\r
+\r
+    DLG_EvalGraph, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 209\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 68\r
+    END\r
+\r
+    DLG_EngineOutput, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 259\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 160\r
+    END\r
+\r
+    DLG_EnginePlayOptions, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 201\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 122\r
+    END\r
+\r
+    DLG_OptionsUCI, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 221\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 117\r
+    END\r
+\r
+    DLG_Null, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 179\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 43\r
+    END\r
+END\r
+#endif    // APSTUDIO_INVOKED\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Icon\r
+//\r
+\r
+// Icon with lowest ID value placed first to ensure application icon\r
+// remains consistent on all systems.\r
+IDI_WHITE_14            ICON    DISCARDABLE     "bitmaps/white_14.ico"\r
+ICON_BLACK              ICON    DISCARDABLE     "bitmaps/icon_ob.ico"\r
+ICON_BOARD              ICON    DISCARDABLE     "bitmaps/board.ico"\r
+ICON_WHITE              ICON    DISCARDABLE     "bitmaps/icon_whi.ico"\r
+IDI_BLACK_14            ICON    DISCARDABLE     "bitmaps/black_14.ico"\r
+IDI_PONDER_14           ICON    DISCARDABLE     "bitmaps/ponder_14.ico"\r
+IDI_TRANS_14            ICON    DISCARDABLE     "bitmaps/trans_14.ico"\r
+IDI_CLOCK_14            ICON    DISCARDABLE     "bitmaps/clock_14.ico"\r
+IDI_UNKNOWN_14          ICON    DISCARDABLE     "bitmaps/unknown_14.ico"\r
+IDI_BALOON_14           ICON    DISCARDABLE     "bitmaps/baloon_14.ico"\r
+IDI_ANALYZE_14          ICON    DISCARDABLE     "bitmaps/analyze_14.ico"\r
+IDI_ANALYZE2_14         ICON    DISCARDABLE     "bitmaps/analyze2_14.ico"\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Menu\r
+//\r
+\r
+WINBOARD MENU DISCARDABLE \r
+BEGIN\r
+    POPUP "&File"\r
+    BEGIN\r
+        MENUITEM "New &Game\tCtrl-N",           IDM_NewGame\r
+        MENUITEM "New Shuffle Game...",         IDM_NewGameFRC\r
+        MENUITEM "New Variant...\tAlt+Ctrl+V",  IDM_NewVariant\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "&Load Game...\tCtrl-O",       IDM_LoadGame\r
+        MENUITEM "Load &Next Game\tAlt+PgDn",   IDM_LoadNextGame\r
+        MENUITEM "Load &Previous Game\tAlt+PgUp", IDM_LoadPrevGame\r
+        MENUITEM "&Reload Same Game",           IDM_ReloadGame\r
+        MENUITEM "&Save Game...\tCtrl-S",       IDM_SaveGame\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "&Copy Game To Clipboard\tAlt+C", IDM_CopyGame\r
+        MENUITEM "Paste Game &From Clipboard\tAlt+V", IDM_PasteGame\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Copy Game List to Clipboard", IDM_CopyGameListToClipboard\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "L&oad Position...",           IDM_LoadPosition\r
+        MENUITEM "Load N&ext Position\tAlt+Shift+PgDn", IDM_LoadNextPosition\r
+        MENUITEM "Load Pre&vious Position\tAlt+Shift+PgUp", \r
+                                                IDM_LoadPrevPosition\r
+        MENUITEM "Reload Sa&me Position",       IDM_ReloadPosition\r
+        MENUITEM "S&ave Position...\tCtrl+Shift+S",IDM_SavePosition\r
+        MENUITEM "Save &Diagram...",            IDM_SaveDiagram\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Cop&y Position To Clipboard\tAlt+Shift+C", \r
+                                                IDM_CopyPosition\r
+        MENUITEM "Pas&te Position From Clipboard\tAlt+Shift+V", \r
+                                                IDM_PasteAny\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "E&xit",                       IDM_Exit\r
+    END\r
+    POPUP "&Mode"\r
+    BEGIN\r
+        MENUITEM "Machine &White\tCtrl+W",      IDM_MachineWhite\r
+        MENUITEM "Machine &Black\tCtrl+B",      IDM_MachineBlack\r
+        MENUITEM "Two &Machines\tCtrl+T",       IDM_TwoMachines\r
+        MENUITEM "Machine Bot&h",               IDM_MachineBoth\r
+        MENUITEM "&Analysis Mode\tCtrl+A",      IDM_AnalysisMode\r
+        MENUITEM "Analyze &File\tCtrl+F",       IDM_AnalyzeFile\r
+        MENUITEM "&ICS Client",                 IDM_IcsClient\r
+        MENUITEM "Edit &Game\tCtrl+E",          IDM_EditGame\r
+        MENUITEM "&Edit Position\tShift+Ctrl+E",IDM_EditPosition\r
+        MENUITEM "Trai&ning",                   IDM_Training, GRAYED\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Show Engine &Output\tAlt+Ctrl+O",IDM_ShowEngineOutput\r
+        MENUITEM "Show Evaluation Graph\tAlt+Ctrl+E",IDM_ShowEvalGraph\r
+        MENUITEM "Show Game &List\tAlt+Ctrl+G",  IDM_ShowGameList\r
+        MENUITEM "Show Move History\tAlt+Ctrl+H",IDM_ShowMoveHistory\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Edit &Tags...",               IDM_EditTags\r
+        MENUITEM "Edit &Comment...",            IDM_EditComment\r
+        MENUITEM "Enter &Username...",          IDM_TypeInName\r
+        MENUITEM "&Pause\tPause",               IDM_Pause\r
+    END\r
+    POPUP "&Action"\r
+    BEGIN\r
+        MENUITEM "&Accept\tF3",                 IDM_Accept\r
+        MENUITEM "D&ecline\tF4",                IDM_Decline\r
+        MENUITEM "Re&match\tF12",               IDM_Rematch\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Call &Flag\tF5",              IDM_CallFlag\r
+        MENUITEM "&Draw\tF6",                   IDM_Draw\r
+        MENUITEM "Ad&journ\tF7",                IDM_Adjourn\r
+        MENUITEM "A&bort\tF8",                  IDM_Abort\r
+        MENUITEM "&Resign\tF9",                 IDM_Resign\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Stop &Observing\tF10",        IDM_StopObserving\r
+        MENUITEM "Stop E&xamining\tF11",        IDM_StopExamining\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Adjudicate to &White",        IDM_UserAdjudication_White\r
+        MENUITEM "Adjudicate to &Black",        IDM_UserAdjudication_Black\r
+        MENUITEM "Adjudicate &Draw",            IDM_UserAdjudication_Draw\r
+    END\r
+    POPUP "&Step"\r
+    BEGIN\r
+        MENUITEM "T&ype In Move...\tAlt+I",     IDM_TypeInMove\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "&Backward\tAlt+Left",         IDM_Backward\r
+        MENUITEM "&Forward\tAlt+Right",         IDM_Forward\r
+        MENUITEM "Back to &Start\tAlt+Home",    IDM_ToStart\r
+        MENUITEM "Forward to &End\tAlt+End",    IDM_ToEnd\r
+        MENUITEM "Re&vert",                     IDM_Revert\r
+        MENUITEM "&Truncate Game",              IDM_TruncateGame\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "&Move Now\tCtrl+M",           IDM_MoveNow\r
+        MENUITEM "&Retract Move\tCtrl+X",       IDM_RetractMove\r
+    END\r
+    POPUP "&Options"\r
+    BEGIN\r
+        MENUITEM "Flip &View\tF2",              IDM_FlipView\r
+        MENUITEM "Swap &Clocks",                IDM_FlipClock\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "&General...",                 IDM_GeneralOptions\r
+        MENUITEM "&Board...",                   IDM_BoardOptions\r
+        MENUITEM "Adjudications...\tAlt+Ctrl+J",IDM_EnginePlayOptions\r
+        MENUITEM "Engine Settings...\tAlt+Ctrl+U",IDM_OptionsUCI\r
+        MENUITEM "&ICS...",                     IDM_IcsOptions, GRAYED\r
+        MENUITEM "&Fonts...",                   IDM_Fonts\r
+        MENUITEM "Soun&ds...",                  IDM_Sounds\r
+        MENUITEM "Game List...\tAlt+Ctrl+G",    IDM_GameListOptions\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Comm&unications...",          IDM_CommPort\r
+        MENUITEM "&Load Game...\tAlt+Ctrl+L",   IDM_LoadOptions\r
+        MENUITEM "&Save Game...\tAlt+Ctrl+S",   IDM_SaveOptions\r
+        MENUITEM "&Time Control...\tAlt+Ctrl+T",IDM_TimeControl\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Save Settings &Now",          IDM_SaveSettings\r
+        MENUITEM "Save Settings on E&xit",      IDM_SaveSettingsOnExit\r
+    END\r
+    POPUP "&JAWS"\r
+    BEGIN\r
+        MENUITEM "Say Clock &Time\tAlt+T",      IDM_SayClockTime\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Say Last &Move\tAlt+M",       IDM_SayMachineMove\r
+        MENUITEM "Say W&ho's Turn\tAlt+X",      IDM_SayWhosTurn\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Say Complete &Position\tAlt+P",IDM_SayAllBoard\r
+        MENUITEM "Say &White Pieces\tAlt+W",    IDM_SayWhitePieces\r
+        MENUITEM "Say &Black Pieces\tAlt+B",    IDM_SayBlackPieces\r
+        MENUITEM "Say Board &Rank\tAlt+R",      IDM_ReadRow\r
+        MENUITEM "Say Board &File\tAlt+F",      IDM_ReadColumn\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Say &Upper Diagnols\tAlt+U",  IDM_SayUpperDiagnols\r
+        MENUITEM "Say &Lower Diagnols\tAlt+L",  IDM_SayLowerDiagnols\r
+        MENUITEM "Say K&night Moves\tAlt+N",    IDM_SayKnightMoves\r
+        MENUITEM "Say Current &Square\tAlt+S",  IDM_SayCurrentPos\r
+        MENUITEM "Say &Attacks\tAlt+A",         IDM_PossibleAttackMove\r
+        MENUITEM "Say Attacke&d\tAlt+D",        IDM_PossibleAttacked\r
+    END\r
+    POPUP "&Help"\r
+    BEGIN\r
+        MENUITEM "Help &Contents\tF1",          IDM_HELPCONTENTS\r
+        MENUITEM "Help &Index",                 IDM_HELPSEARCH\r
+        MENUITEM "How to &Use Help",            IDM_HELPHELP\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "&Hint...",                    IDM_Hint\r
+        MENUITEM "&Book...",                    IDM_Book\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "&About WinBoard",             IDM_ABOUT\r
+    END\r
+END\r
+\r
+PIECEMENU MENU DISCARDABLE \r
+BEGIN\r
+    POPUP ""\r
+    BEGIN\r
+        MENUITEM "White",                       EP_White\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Promote",                     EP_Promote\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Pawn",                        EP_WhitePawn\r
+        MENUITEM "Knight",                      EP_WhiteKnight\r
+        MENUITEM "Bishop",                      EP_WhiteBishop\r
+        MENUITEM "Rook",                        EP_WhiteRook\r
+        MENUITEM "Queen",                       EP_WhiteQueen\r
+        MENUITEM "King",                        EP_WhiteKing\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Archbishop",                  EP_WhiteCardinal\r
+        MENUITEM "Chancellor",                  EP_WhiteMarshall\r
+        MENUITEM "Elephant",                    EP_WhiteAlfil\r
+        MENUITEM "Cannon",                      EP_WhiteCannon\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Empty Square",                EP_EmptySquare\r
+        MENUITEM "Black",                       EP_Black, MENUBARBREAK\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Demote",                      EP_Demote\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Pawn",                        EP_BlackPawn\r
+        MENUITEM "Knight",                      EP_BlackKnight\r
+        MENUITEM "Bishop",                      EP_BlackBishop\r
+        MENUITEM "Rook",                        EP_BlackRook\r
+        MENUITEM "Queen",                       EP_BlackQueen\r
+        MENUITEM "King",                        EP_BlackKing\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Archbishop",                  EP_BlackCardinal\r
+        MENUITEM "Chancellor",                  EP_BlackMarshall\r
+        MENUITEM "Elephant",                    EP_BlackAlfil\r
+        MENUITEM "Cannon",                      EP_BlackCannon\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Clear Board    ",             EP_ClearBoard\r
+    END\r
+END\r
+\r
+SHOGIPIECEMENU MENU DISCARDABLE \r
+BEGIN\r
+    POPUP ""\r
+    BEGIN\r
+        MENUITEM "White",                       EP_White\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Pawn",                        EP_WhitePawn\r
+        MENUITEM "Knight",                      EP_WhiteKnight\r
+        MENUITEM "Bishop",                      EP_WhiteBishop\r
+        MENUITEM "Rook",                        EP_WhiteRook\r
+        MENUITEM "Lance",                       EP_WhiteQueen\r
+        MENUITEM "Silver",                      EP_WhiteFerz\r
+        MENUITEM "Gold",                        EP_WhiteWazir\r
+        MENUITEM "King",                        EP_WhiteKing\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Promote",                     EP_Promote\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Empty Square",                EP_EmptySquare\r
+        MENUITEM "Black",                       EP_Black, MENUBARBREAK\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Pawn",                        EP_BlackPawn\r
+        MENUITEM "Knight",                      EP_BlackKnight\r
+        MENUITEM "Bishop",                      EP_BlackBishop\r
+        MENUITEM "Rook",                        EP_BlackRook\r
+        MENUITEM "Lance",                       EP_BlackQueen\r
+        MENUITEM "Silver",                      EP_BlackFerz\r
+        MENUITEM "Gold",                        EP_BlackWazir\r
+        MENUITEM "King",                        EP_BlackKing\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Demote",                      EP_Demote\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Clear Board    ",             EP_ClearBoard\r
+    END\r
+END\r
+\r
+WHITEPIECEMENU MENU DISCARDABLE \r
+BEGIN\r
+    POPUP ""\r
+    BEGIN\r
+        MENUITEM "White",                       EP_White\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Pawn",                        EP_WhitePawn\r
+        MENUITEM "Knight",                      EP_WhiteKnight\r
+        MENUITEM "Bishop",                      EP_WhiteBishop\r
+        MENUITEM "Rook",                        EP_WhiteRook\r
+        MENUITEM "Queen",                       EP_WhiteQueen\r
+        MENUITEM "King",                        EP_WhiteKing\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Empty Square",                EP_EmptySquare\r
+        MENUITEM "Clear Board",                 EP_ClearBoard\r
+    END\r
+END\r
+\r
+BLACKPIECEMENU MENU DISCARDABLE \r
+BEGIN\r
+    POPUP ""\r
+    BEGIN\r
+        MENUITEM "Black",                       EP_Black\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Pawn",                        EP_BlackPawn\r
+        MENUITEM "Knight",                      EP_BlackKnight\r
+        MENUITEM "Bishop",                      EP_BlackBishop\r
+        MENUITEM "Rook",                        EP_BlackRook\r
+        MENUITEM "Queen",                       EP_BlackQueen\r
+        MENUITEM "King",                        EP_BlackKing\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Empty Square",                EP_EmptySquare\r
+        MENUITEM "Clear Board",                 EP_ClearBoard\r
+    END\r
+END\r
+\r
+DROPPIECEMENU MENU DISCARDABLE \r
+BEGIN\r
+    POPUP ""\r
+    BEGIN\r
+        MENUITEM "Drop",                        0, INACTIVE\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Pawn",                        DP_Pawn\r
+        MENUITEM "Knight",                      DP_Knight\r
+        MENUITEM "Bishop",                      DP_Bishop\r
+        MENUITEM "Rook",                        DP_Rook\r
+        MENUITEM "Queen",                       DP_Queen\r
+    END\r
+END\r
+\r
+TEXTMENU MENU DISCARDABLE \r
+BEGIN\r
+    POPUP ""\r
+    BEGIN\r
+        MENUITEM "Cop&y and Paste",             IDM_QuickPaste\r
+        MENUITEM "&Copy",                       IDM_Copy\r
+        MENUITEM "&Paste",                      IDM_Paste\r
+    END\r
+END\r
+\r
+INPUTMENU MENU DISCARDABLE \r
+BEGIN\r
+    POPUP ""\r
+    BEGIN\r
+        MENUITEM "&Undo",                       IDM_Undo\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Cu&t",                        IDM_Cut\r
+        MENUITEM "&Copy",                       IDM_Copy\r
+        MENUITEM "&Paste",                      IDM_Paste\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "Select &All",                 IDM_SelectAll\r
+    END\r
+END\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Accelerator\r
+//\r
+\r
+WINBOARD ACCELERATORS MOVEABLE PURE \r
+BEGIN\r
+    "1",            IDM_DirectCommand1,     VIRTKEY, ALT, NOINVERT\r
+    "2",            IDM_DirectCommand2,     VIRTKEY, ALT, NOINVERT\r
+    "B",            IDM_Book,               VIRTKEY, CONTROL, NOINVERT\r
+    "C",            IDM_CopyGame,           VIRTKEY, ALT, NOINVERT\r
+    "C",            IDM_CopyPosition,       VIRTKEY, SHIFT, ALT, NOINVERT\r
+    "I",            IDM_TypeInMove,         VIRTKEY, ALT, NOINVERT\r
+    "N",            IDM_NewGame,            VIRTKEY, CONTROL, NOINVERT\r
+    "O",            IDM_LoadGame,           VIRTKEY, CONTROL, NOINVERT\r
+    "O",            IDM_LoadPosition,       VIRTKEY, SHIFT, CONTROL, NOINVERT\r
+    "S",            IDM_SaveGame,           VIRTKEY, CONTROL, NOINVERT\r
+    "S",            IDM_SavePosition,       VIRTKEY, SHIFT, CONTROL, NOINVERT\r
+    "V",            IDM_PasteGame,          VIRTKEY, ALT, NOINVERT\r
+    "V",            IDM_PastePosition,      VIRTKEY, SHIFT, ALT, NOINVERT\r
+    "A",            IDM_PossibleAttackMove, VIRTKEY, ALT, NOINVERT\r
+    "D",            IDM_PossibleAttacked,   VIRTKEY, ALT, NOINVERT\r
+    "P",            IDM_SayAllBoard,        VIRTKEY, ALT, NOINVERT\r
+    "L",            IDM_SayLowerDiagnols,   VIRTKEY, ALT, NOINVERT\r
+    "N",            IDM_SayKnightMoves,     VIRTKEY, ALT, NOINVERT\r
+    "S",            IDM_SayCurrentPos,      VIRTKEY, ALT, NOINVERT\r
+    "R",            IDM_ReadRow,            VIRTKEY, ALT, NOINVERT\r
+    "B",            IDM_SayBlackPieces,     VIRTKEY, ALT, NOINVERT\r
+    "W",            IDM_SayWhitePieces,     VIRTKEY, ALT, NOINVERT\r
+    "T",            IDM_SayClockTime,       VIRTKEY, ALT, NOINVERT\r
+    "U",            IDM_SayUpperDiagnols,   VIRTKEY, ALT, NOINVERT\r
+    "X",            IDM_SayWhosTurn,        VIRTKEY, ALT, NOINVERT\r
+    "M",            IDM_SayMachineMove,     VIRTKEY, ALT, NOINVERT\r
+    "F",            IDM_ReadColumn,         VIRTKEY, ALT, NOINVERT\r
+    "O",            IDM_ShowEngineOutput,   VIRTKEY, ALT, CONTROL, NOINVERT\r
+    "H",            IDM_ShowMoveHistory,    VIRTKEY, ALT, CONTROL, NOINVERT\r
+    "E",            IDM_ShowEvalGraph,      VIRTKEY, ALT, CONTROL, NOINVERT\r
+    "G",            IDM_ShowGameList,       VIRTKEY, ALT, CONTROL, NOINVERT\r
+    "B",            IDM_BoardOptions,       VIRTKEY, ALT, CONTROL, NOINVERT\r
+    "T",            IDM_TimeControl,        VIRTKEY, ALT, CONTROL, NOINVERT\r
+    "L",            IDM_LoadOptions,        VIRTKEY, ALT, CONTROL, NOINVERT\r
+    "S",            IDM_SaveOptions,        VIRTKEY, ALT, CONTROL, NOINVERT\r
+    "J",            IDM_EnginePlayOptions,  VIRTKEY, ALT, CONTROL, NOINVERT\r
+    "U",            IDM_OptionsUCI,         VIRTKEY, ALT, CONTROL, NOINVERT\r
+    "V",            IDM_NewVariant,         VIRTKEY, ALT, CONTROL, NOINVERT\r
+    "P",            OPT_PonderNextMove,     VIRTKEY, SHIFT, CONTROL, NOINVERT\r
+    "X",            OPT_SaveExtPGN,         VIRTKEY, SHIFT, CONTROL, NOINVERT\r
+    "L",            OPT_TestLegality,       VIRTKEY, SHIFT, CONTROL, NOINVERT\r
+    "A",            OPT_AnimateMoving,      VIRTKEY, SHIFT, CONTROL, NOINVERT\r
+    "Q",            OPT_AlwaysQueen,        VIRTKEY, SHIFT, CONTROL, NOINVERT\r
+    "F",            OPT_AutoFlag,           VIRTKEY, SHIFT, CONTROL, NOINVERT\r
+    "H",            OPT_HideThinkFromHuman, VIRTKEY, SHIFT, CONTROL, NOINVERT\r
+    "I",            OPT_ExtraInfoInMoveHistory, VIRTKEY, SHIFT, CONTROL, NOINVERT\r
+    "W",            IDM_MachineWhite,       VIRTKEY, CONTROL, NOINVERT\r
+    "B",            IDM_MachineBlack,       VIRTKEY, CONTROL, NOINVERT\r
+    "T",            IDM_TwoMachines,        VIRTKEY, CONTROL, NOINVERT\r
+    "E",            IDM_EditGame,           VIRTKEY, CONTROL, NOINVERT\r
+    "E",            IDM_EditPosition,       VIRTKEY, SHIFT, CONTROL, NOINVERT\r
+    "F",            IDM_AnalyzeFile,        VIRTKEY, CONTROL, NOINVERT\r
+    "M",            IDM_MoveNow,            VIRTKEY, CONTROL, NOINVERT\r
+    "X",            IDM_RetractMove,        VIRTKEY, CONTROL, NOINVERT\r
+    VK_DOWN,        IDM_ToEnd,              VIRTKEY, ALT, NOINVERT\r
+    VK_END,         IDM_ToEnd,              VIRTKEY, ALT, NOINVERT\r
+    VK_F1,          IDM_HELPCONTENTS,       VIRTKEY, NOINVERT\r
+    VK_F10,         IDM_StopObserving,      VIRTKEY, NOINVERT\r
+    VK_F11,         IDM_StopExamining,      VIRTKEY, NOINVERT\r
+    VK_F12,         IDM_Rematch,            VIRTKEY, NOINVERT\r
+    VK_F12,         IDM_Debug,              VIRTKEY, CONTROL, ALT, NOINVERT\r
+    VK_F2,          IDM_FlipView,           VIRTKEY, NOINVERT\r
+    VK_F3,          IDM_Accept,             VIRTKEY, NOINVERT\r
+    VK_F4,          IDM_Decline,            VIRTKEY, NOINVERT\r
+    VK_F4,          IDM_Minimize,           VIRTKEY, CONTROL, NOINVERT\r
+    VK_F5,          IDM_CallFlag,           VIRTKEY, NOINVERT\r
+    VK_F6,          IDM_Draw,               VIRTKEY, NOINVERT\r
+    VK_F7,          IDM_Adjourn,            VIRTKEY, NOINVERT\r
+    VK_F8,          IDM_Abort,              VIRTKEY, NOINVERT\r
+    VK_F9,          IDM_Resign,             VIRTKEY, NOINVERT\r
+    VK_HOME,        IDM_ToStart,            VIRTKEY, ALT, NOINVERT\r
+    VK_INSERT,      IDM_MoveNow,            VIRTKEY, ALT, NOINVERT\r
+    VK_NEXT,        IDM_LoadNextGame,       VIRTKEY, ALT, NOINVERT\r
+    VK_NEXT,        IDM_LoadNextPosition,   VIRTKEY, SHIFT, ALT, NOINVERT\r
+    VK_PAUSE,       IDM_Pause,              VIRTKEY, NOINVERT\r
+    VK_PAUSE,       IDM_Pause,              VIRTKEY, ALT, NOINVERT\r
+    VK_PRIOR,       IDM_LoadPrevGame,       VIRTKEY, ALT, NOINVERT\r
+    VK_PRIOR,       IDM_LoadPrevPosition,   VIRTKEY, SHIFT, ALT, NOINVERT\r
+    VK_LEFT,        IDM_Backward,           VIRTKEY, ALT, NOINVERT\r
+    VK_RIGHT,       IDM_Forward,            VIRTKEY, ALT, NOINVERT\r
+END\r
+\r
+NO_ALT ACCELERATORS MOVEABLE PURE \r
+BEGIN\r
+    VK_DELETE,      IDM_RetractMove,        VIRTKEY, NOINVERT\r
+    VK_END,         IDM_TruncateGame,       VIRTKEY, NOINVERT\r
+    VK_HOME,        IDM_Revert,             VIRTKEY, NOINVERT\r
+    VK_INSERT,      IDM_MoveNow,            VIRTKEY, NOINVERT\r
+    VK_NEXT,        IDM_LoadNextGame,       VIRTKEY, NOINVERT\r
+    VK_NEXT,        IDM_LoadNextPosition,   VIRTKEY, SHIFT, NOINVERT\r
+    VK_PRIOR,       IDM_LoadPrevGame,       VIRTKEY, NOINVERT\r
+    VK_PRIOR,       IDM_LoadPrevPosition,   VIRTKEY, SHIFT, NOINVERT\r
+END\r
+\r
+NO_ICS ACCELERATORS DISCARDABLE \r
+BEGIN\r
+    "A",            IDM_AnalysisMode,       VIRTKEY, CONTROL, NOINVERT\r
+    "V",            IDM_PasteAny,           VIRTKEY, CONTROL, NOINVERT\r
+END\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Bitmap\r
+//\r
+\r
+P21O                    BITMAP  MOVEABLE PURE   "bitmaps/p21o.bmp"\r
+N21O                    BITMAP  MOVEABLE PURE   "bitmaps/n21o.bmp"\r
+B21O                    BITMAP  MOVEABLE PURE   "bitmaps/b21o.bmp"\r
+R21O                    BITMAP  MOVEABLE PURE   "bitmaps/r21o.bmp"\r
+K21O                    BITMAP  MOVEABLE PURE   "bitmaps/k21o.bmp"\r
+Q21O                    BITMAP  MOVEABLE PURE   "bitmaps/q21o.bmp"\r
+P21S                    BITMAP  MOVEABLE PURE   "bitmaps/p21s.bmp"\r
+N21S                    BITMAP  MOVEABLE PURE   "bitmaps/n21s.bmp"\r
+B21S                    BITMAP  MOVEABLE PURE   "bitmaps/b21s.bmp"\r
+R21S                    BITMAP  MOVEABLE PURE   "bitmaps/r21s.bmp"\r
+Q21S                    BITMAP  MOVEABLE PURE   "bitmaps/q21s.bmp"\r
+K21S                    BITMAP  MOVEABLE PURE   "bitmaps/k21s.bmp"\r
+P21W                    BITMAP  MOVEABLE PURE   "bitmaps/p21w.bmp"\r
+N21W                    BITMAP  MOVEABLE PURE   "bitmaps/n21w.bmp"\r
+B21W                    BITMAP  MOVEABLE PURE   "bitmaps/b21w.bmp"\r
+R21W                    BITMAP  MOVEABLE PURE   "bitmaps/r21w.bmp"\r
+Q21W                    BITMAP  MOVEABLE PURE   "bitmaps/q21w.bmp"\r
+K21W                    BITMAP  MOVEABLE PURE   "bitmaps/k21w.bmp"\r
+P25O                    BITMAP  MOVEABLE PURE   "bitmaps/p25o.bmp"\r
+N25O                    BITMAP  MOVEABLE PURE   "bitmaps/n25o.bmp"\r
+B25O                    BITMAP  MOVEABLE PURE   "bitmaps/b25o.bmp"\r
+R25O                    BITMAP  MOVEABLE PURE   "bitmaps/r25o.bmp"\r
+Q25O                    BITMAP  MOVEABLE PURE   "bitmaps/q25o.bmp"\r
+K25O                    BITMAP  MOVEABLE PURE   "bitmaps/k25o.bmp"\r
+P25S                    BITMAP  MOVEABLE PURE   "bitmaps/p25s.bmp"\r
+N25S                    BITMAP  MOVEABLE PURE   "bitmaps/n25s.bmp"\r
+B25S                    BITMAP  MOVEABLE PURE   "bitmaps/b25s.bmp"\r
+R25S                    BITMAP  MOVEABLE PURE   "bitmaps/r25s.bmp"\r
+Q25S                    BITMAP  MOVEABLE PURE   "bitmaps/q25s.bmp"\r
+K25S                    BITMAP  MOVEABLE PURE   "bitmaps/k25s.bmp"\r
+P25W                    BITMAP  MOVEABLE PURE   "bitmaps/p25w.bmp"\r
+N25W                    BITMAP  MOVEABLE PURE   "bitmaps/n25w.bmp"\r
+B25W                    BITMAP  MOVEABLE PURE   "bitmaps/b25w.bmp"\r
+R25W                    BITMAP  MOVEABLE PURE   "bitmaps/r25w.bmp"\r
+Q25W                    BITMAP  MOVEABLE PURE   "bitmaps/q25w.bmp"\r
+K25W                    BITMAP  MOVEABLE PURE   "bitmaps/k25w.bmp"\r
+P29O                    BITMAP  MOVEABLE PURE   "bitmaps/p29o.bmp"\r
+N29O                    BITMAP  MOVEABLE PURE   "bitmaps/n29o.bmp"\r
+B29O                    BITMAP  MOVEABLE PURE   "bitmaps/b29o.bmp"\r
+R29O                    BITMAP  MOVEABLE PURE   "bitmaps/r29o.bmp"\r
+Q29O                    BITMAP  MOVEABLE PURE   "bitmaps/q29o.bmp"\r
+K29O                    BITMAP  MOVEABLE PURE   "bitmaps/k29o.bmp"\r
+P29S                    BITMAP  MOVEABLE PURE   "bitmaps/p29s.bmp"\r
+N29S                    BITMAP  MOVEABLE PURE   "bitmaps/n29s.bmp"\r
+B29S                    BITMAP  MOVEABLE PURE   "bitmaps/b29s.bmp"\r
+R29S                    BITMAP  MOVEABLE PURE   "bitmaps/r29s.bmp"\r
+Q29S                    BITMAP  MOVEABLE PURE   "bitmaps/q29s.bmp"\r
+K29S                    BITMAP  MOVEABLE PURE   "bitmaps/k29s.bmp"\r
+P29W                    BITMAP  MOVEABLE PURE   "bitmaps/p29w.bmp"\r
+N29W                    BITMAP  MOVEABLE PURE   "bitmaps/n29w.bmp"\r
+B29W                    BITMAP  MOVEABLE PURE   "bitmaps/b29w.bmp"\r
+R29W                    BITMAP  MOVEABLE PURE   "bitmaps/r29w.bmp"\r
+Q29W                    BITMAP  MOVEABLE PURE   "bitmaps/q29w.bmp"\r
+K29W                    BITMAP  MOVEABLE PURE   "bitmaps/k29w.bmp"\r
+P33O                    BITMAP  MOVEABLE PURE   "bitmaps/p33o.bmp"\r
+N33O                    BITMAP  MOVEABLE PURE   "bitmaps/n33o.bmp"\r
+B33O                    BITMAP  MOVEABLE PURE   "bitmaps/b33o.bmp"\r
+R33O                    BITMAP  MOVEABLE PURE   "bitmaps/r33o.bmp"\r
+Q33O                    BITMAP  MOVEABLE PURE   "bitmaps/q33o.bmp"\r
+K33O                    BITMAP  MOVEABLE PURE   "bitmaps/k33o.bmp"\r
+P33S                    BITMAP  MOVEABLE PURE   "bitmaps/p33s.bmp"\r
+N33S                    BITMAP  MOVEABLE PURE   "bitmaps/n33s.bmp"\r
+B33S                    BITMAP  MOVEABLE PURE   "bitmaps/b33s.bmp"\r
+R33S                    BITMAP  MOVEABLE PURE   "bitmaps/r33s.bmp"\r
+Q33S                    BITMAP  MOVEABLE PURE   "bitmaps/q33s.bmp"\r
+K33S                    BITMAP  MOVEABLE PURE   "bitmaps/k33s.bmp"\r
+P33W                    BITMAP  MOVEABLE PURE   "bitmaps/p33w.bmp"\r
+N33W                    BITMAP  MOVEABLE PURE   "bitmaps/n33w.bmp"\r
+B33W                    BITMAP  MOVEABLE PURE   "bitmaps/b33w.bmp"\r
+R33W                    BITMAP  MOVEABLE PURE   "bitmaps/r33w.bmp"\r
+Q33W                    BITMAP  MOVEABLE PURE   "bitmaps/q33w.bmp"\r
+K33W                    BITMAP  MOVEABLE PURE   "bitmaps/k33w.bmp"\r
+P37O                    BITMAP  MOVEABLE PURE   "bitmaps/p37o.bmp"\r
+N37O                    BITMAP  MOVEABLE PURE   "bitmaps/n37o.bmp"\r
+B37O                    BITMAP  MOVEABLE PURE   "bitmaps/b37o.bmp"\r
+R37O                    BITMAP  MOVEABLE PURE   "bitmaps/r37o.bmp"\r
+Q37O                    BITMAP  MOVEABLE PURE   "bitmaps/q37o.bmp"\r
+K37O                    BITMAP  MOVEABLE PURE   "bitmaps/k37o.bmp"\r
+P37S                    BITMAP  MOVEABLE PURE   "bitmaps/p37s.bmp"\r
+N37S                    BITMAP  MOVEABLE PURE   "bitmaps/n37s.bmp"\r
+B37S                    BITMAP  MOVEABLE PURE   "bitmaps/b37s.bmp"\r
+R37S                    BITMAP  MOVEABLE PURE   "bitmaps/r37s.bmp"\r
+Q37S                    BITMAP  MOVEABLE PURE   "bitmaps/q37s.bmp"\r
+K37S                    BITMAP  MOVEABLE PURE   "bitmaps/k37s.bmp"\r
+P37W                    BITMAP  MOVEABLE PURE   "bitmaps/p37w.bmp"\r
+N37W                    BITMAP  MOVEABLE PURE   "bitmaps/n37w.bmp"\r
+B37W                    BITMAP  MOVEABLE PURE   "bitmaps/b37w.bmp"\r
+R37W                    BITMAP  MOVEABLE PURE   "bitmaps/r37w.bmp"\r
+Q37W                    BITMAP  MOVEABLE PURE   "bitmaps/q37w.bmp"\r
+K37W                    BITMAP  MOVEABLE PURE   "bitmaps/k37w.bmp"\r
+P40O                    BITMAP  MOVEABLE PURE   "bitmaps/p40o.bmp"\r
+N40O                    BITMAP  MOVEABLE PURE   "bitmaps/n40o.bmp"\r
+B40O                    BITMAP  MOVEABLE PURE   "bitmaps/b40o.bmp"\r
+R40O                    BITMAP  MOVEABLE PURE   "bitmaps/r40o.bmp"\r
+Q40O                    BITMAP  MOVEABLE PURE   "bitmaps/q40o.bmp"\r
+K40O                    BITMAP  MOVEABLE PURE   "bitmaps/k40o.bmp"\r
+P40S                    BITMAP  MOVEABLE PURE   "bitmaps/p40s.bmp"\r
+N40S                    BITMAP  MOVEABLE PURE   "bitmaps/n40s.bmp"\r
+B40S                    BITMAP  MOVEABLE PURE   "bitmaps/b40s.bmp"\r
+R40S                    BITMAP  MOVEABLE PURE   "bitmaps/r40s.bmp"\r
+Q40S                    BITMAP  MOVEABLE PURE   "bitmaps/q40s.bmp"\r
+K40S                    BITMAP  MOVEABLE PURE   "bitmaps/k40s.bmp"\r
+P40W                    BITMAP  MOVEABLE PURE   "bitmaps/p40w.bmp"\r
+N40W                    BITMAP  MOVEABLE PURE   "bitmaps/n40w.bmp"\r
+B40W                    BITMAP  MOVEABLE PURE   "bitmaps/b40w.bmp"\r
+R40W                    BITMAP  MOVEABLE PURE   "bitmaps/r40w.bmp"\r
+Q40W                    BITMAP  MOVEABLE PURE   "bitmaps/q40w.bmp"\r
+K40W                    BITMAP  MOVEABLE PURE   "bitmaps/k40w.bmp"\r
+P45O                    BITMAP  MOVEABLE PURE   "bitmaps/p45o.bmp"\r
+N45O                    BITMAP  MOVEABLE PURE   "bitmaps/n45o.bmp"\r
+B45O                    BITMAP  MOVEABLE PURE   "bitmaps/b45o.bmp"\r
+R45O                    BITMAP  MOVEABLE PURE   "bitmaps/r45o.bmp"\r
+Q45O                    BITMAP  MOVEABLE PURE   "bitmaps/q45o.bmp"\r
+K45O                    BITMAP  MOVEABLE PURE   "bitmaps/k45o.bmp"\r
+P45S                    BITMAP  MOVEABLE PURE   "bitmaps/p45s.bmp"\r
+N45S                    BITMAP  MOVEABLE PURE   "bitmaps/n45s.bmp"\r
+B45S                    BITMAP  MOVEABLE PURE   "bitmaps/b45s.bmp"\r
+R45S                    BITMAP  MOVEABLE PURE   "bitmaps/r45s.bmp"\r
+Q45S                    BITMAP  MOVEABLE PURE   "bitmaps/q45s.bmp"\r
+K45S                    BITMAP  MOVEABLE PURE   "bitmaps/k45s.bmp"\r
+P45W                    BITMAP  MOVEABLE PURE   "bitmaps/p45w.bmp"\r
+N45W                    BITMAP  MOVEABLE PURE   "bitmaps/n45w.bmp"\r
+B45W                    BITMAP  MOVEABLE PURE   "bitmaps/b45w.bmp"\r
+R45W                    BITMAP  MOVEABLE PURE   "bitmaps/r45w.bmp"\r
+Q45W                    BITMAP  MOVEABLE PURE   "bitmaps/q45w.bmp"\r
+K45W                    BITMAP  MOVEABLE PURE   "bitmaps/k45w.bmp"\r
+P49O                    BITMAP  MOVEABLE PURE   "bitmaps/p49o.bmp"\r
+N49O                    BITMAP  MOVEABLE PURE   "bitmaps/n49o.bmp"\r
+B49O                    BITMAP  MOVEABLE PURE   "bitmaps/b49o.bmp"\r
+R49O                    BITMAP  MOVEABLE PURE   "bitmaps/r49o.bmp"\r
+Q49O                    BITMAP  MOVEABLE PURE   "bitmaps/q49o.bmp"\r
+K49O                    BITMAP  MOVEABLE PURE   "bitmaps/k49o.bmp"\r
+P49S                    BITMAP  MOVEABLE PURE   "bitmaps/p49s.bmp"\r
+N49S                    BITMAP  MOVEABLE PURE   "bitmaps/n49s.bmp"\r
+B49S                    BITMAP  MOVEABLE PURE   "bitmaps/b49s.bmp"\r
+R49S                    BITMAP  MOVEABLE PURE   "bitmaps/r49s.bmp"\r
+Q49S                    BITMAP  MOVEABLE PURE   "bitmaps/q49s.bmp"\r
+K49S                    BITMAP  MOVEABLE PURE   "bitmaps/k49s.bmp"\r
+P49W                    BITMAP  MOVEABLE PURE   "bitmaps/p49w.bmp"\r
+N49W                    BITMAP  MOVEABLE PURE   "bitmaps/n49w.bmp"\r
+B49W                    BITMAP  MOVEABLE PURE   "bitmaps/b49w.bmp"\r
+R49W                    BITMAP  MOVEABLE PURE   "bitmaps/r49w.bmp"\r
+Q49W                    BITMAP  MOVEABLE PURE   "bitmaps/q49w.bmp"\r
+K49W                    BITMAP  MOVEABLE PURE   "bitmaps/k49w.bmp"\r
+P54O                    BITMAP  MOVEABLE PURE   "bitmaps/p54o.bmp"\r
+N54O                    BITMAP  MOVEABLE PURE   "bitmaps/n54o.bmp"\r
+B54O                    BITMAP  MOVEABLE PURE   "bitmaps/b54o.bmp"\r
+R54O                    BITMAP  MOVEABLE PURE   "bitmaps/r54o.bmp"\r
+Q54O                    BITMAP  MOVEABLE PURE   "bitmaps/q54o.bmp"\r
+K54O                    BITMAP  MOVEABLE PURE   "bitmaps/k54o.bmp"\r
+P54S                    BITMAP  MOVEABLE PURE   "bitmaps/p54s.bmp"\r
+N54S                    BITMAP  MOVEABLE PURE   "bitmaps/n54s.bmp"\r
+B54S                    BITMAP  MOVEABLE PURE   "bitmaps/b54s.bmp"\r
+R54S                    BITMAP  MOVEABLE PURE   "bitmaps/r54s.bmp"\r
+Q54S                    BITMAP  MOVEABLE PURE   "bitmaps/q54s.bmp"\r
+K54S                    BITMAP  MOVEABLE PURE   "bitmaps/k54s.bmp"\r
+P54W                    BITMAP  MOVEABLE PURE   "bitmaps/p54w.bmp"\r
+N54W                    BITMAP  MOVEABLE PURE   "bitmaps/n54w.bmp"\r
+B54W                    BITMAP  MOVEABLE PURE   "bitmaps/b54w.bmp"\r
+R54W                    BITMAP  MOVEABLE PURE   "bitmaps/r54w.bmp"\r
+Q54W                    BITMAP  MOVEABLE PURE   "bitmaps/q54w.bmp"\r
+K54W                    BITMAP  MOVEABLE PURE   "bitmaps/k54w.bmp"\r
+P58O                    BITMAP  MOVEABLE PURE   "bitmaps/p58o.bmp"\r
+N58O                    BITMAP  MOVEABLE PURE   "bitmaps/n58o.bmp"\r
+B58O                    BITMAP  MOVEABLE PURE   "bitmaps/b58o.bmp"\r
+R58O                    BITMAP  MOVEABLE PURE   "bitmaps/r58o.bmp"\r
+Q58O                    BITMAP  MOVEABLE PURE   "bitmaps/q58o.bmp"\r
+K58O                    BITMAP  MOVEABLE PURE   "bitmaps/k58o.bmp"\r
+P58S                    BITMAP  MOVEABLE PURE   "bitmaps/p58s.bmp"\r
+N58S                    BITMAP  MOVEABLE PURE   "bitmaps/n58s.bmp"\r
+B58S                    BITMAP  MOVEABLE PURE   "bitmaps/b58s.bmp"\r
+R58S                    BITMAP  MOVEABLE PURE   "bitmaps/r58s.bmp"\r
+Q58S                    BITMAP  MOVEABLE PURE   "bitmaps/q58s.bmp"\r
+K58S                    BITMAP  MOVEABLE PURE   "bitmaps/k58s.bmp"\r
+P58W                    BITMAP  MOVEABLE PURE   "bitmaps/p58w.bmp"\r
+N58W                    BITMAP  MOVEABLE PURE   "bitmaps/n58w.bmp"\r
+B58W                    BITMAP  MOVEABLE PURE   "bitmaps/b58w.bmp"\r
+R58W                    BITMAP  MOVEABLE PURE   "bitmaps/r58w.bmp"\r
+Q58W                    BITMAP  MOVEABLE PURE   "bitmaps/q58w.bmp"\r
+K58W                    BITMAP  MOVEABLE PURE   "bitmaps/k58w.bmp"\r
+P64O                    BITMAP  MOVEABLE PURE   "bitmaps/p64o.bmp"\r
+N64O                    BITMAP  MOVEABLE PURE   "bitmaps/n64o.bmp"\r
+B64O                    BITMAP  MOVEABLE PURE   "bitmaps/b64o.bmp"\r
+R64O                    BITMAP  MOVEABLE PURE   "bitmaps/r64o.bmp"\r
+Q64O                    BITMAP  MOVEABLE PURE   "bitmaps/q64o.bmp"\r
+K64O                    BITMAP  MOVEABLE PURE   "bitmaps/k64o.bmp"\r
+P64S                    BITMAP  MOVEABLE PURE   "bitmaps/p64s.bmp"\r
+N64S                    BITMAP  MOVEABLE PURE   "bitmaps/n64s.bmp"\r
+B64S                    BITMAP  MOVEABLE PURE   "bitmaps/b64s.bmp"\r
+R64S                    BITMAP  MOVEABLE PURE   "bitmaps/r64s.bmp"\r
+Q64S                    BITMAP  MOVEABLE PURE   "bitmaps/q64s.bmp"\r
+K64S                    BITMAP  MOVEABLE PURE   "bitmaps/k64s.bmp"\r
+P64W                    BITMAP  MOVEABLE PURE   "bitmaps/p64w.bmp"\r
+N64W                    BITMAP  MOVEABLE PURE   "bitmaps/n64w.bmp"\r
+B64W                    BITMAP  MOVEABLE PURE   "bitmaps/b64w.bmp"\r
+R64W                    BITMAP  MOVEABLE PURE   "bitmaps/r64w.bmp"\r
+Q64W                    BITMAP  MOVEABLE PURE   "bitmaps/q64w.bmp"\r
+K64W                    BITMAP  MOVEABLE PURE   "bitmaps/k64w.bmp"\r
+P72O                    BITMAP  MOVEABLE PURE   "bitmaps/p72o.bmp"\r
+N72O                    BITMAP  MOVEABLE PURE   "bitmaps/n72o.bmp"\r
+B72O                    BITMAP  MOVEABLE PURE   "bitmaps/b72o.bmp"\r
+R72O                    BITMAP  MOVEABLE PURE   "bitmaps/r72o.bmp"\r
+Q72O                    BITMAP  MOVEABLE PURE   "bitmaps/q72o.bmp"\r
+K72O                    BITMAP  MOVEABLE PURE   "bitmaps/k72o.bmp"\r
+P72S                    BITMAP  MOVEABLE PURE   "bitmaps/p72s.bmp"\r
+N72S                    BITMAP  MOVEABLE PURE   "bitmaps/n72s.bmp"\r
+B72S                    BITMAP  MOVEABLE PURE   "bitmaps/b72s.bmp"\r
+R72S                    BITMAP  MOVEABLE PURE   "bitmaps/r72s.bmp"\r
+Q72S                    BITMAP  MOVEABLE PURE   "bitmaps/q72s.bmp"\r
+K72S                    BITMAP  MOVEABLE PURE   "bitmaps/k72s.bmp"\r
+P72W                    BITMAP  MOVEABLE PURE   "bitmaps/p72w.bmp"\r
+N72W                    BITMAP  MOVEABLE PURE   "bitmaps/n72w.bmp"\r
+B72W                    BITMAP  MOVEABLE PURE   "bitmaps/b72w.bmp"\r
+R72W                    BITMAP  MOVEABLE PURE   "bitmaps/r72w.bmp"\r
+Q72W                    BITMAP  MOVEABLE PURE   "bitmaps/q72w.bmp"\r
+K72W                    BITMAP  MOVEABLE PURE   "bitmaps/k72w.bmp"\r
+P80O                    BITMAP  MOVEABLE PURE   "bitmaps/p80o.bmp"\r
+N80O                    BITMAP  MOVEABLE PURE   "bitmaps/n80o.bmp"\r
+B80O                    BITMAP  MOVEABLE PURE   "bitmaps/b80o.bmp"\r
+R80O                    BITMAP  MOVEABLE PURE   "bitmaps/r80o.bmp"\r
+Q80O                    BITMAP  MOVEABLE PURE   "bitmaps/q80o.bmp"\r
+K80O                    BITMAP  MOVEABLE PURE   "bitmaps/k80o.bmp"\r
+P80S                    BITMAP  MOVEABLE PURE   "bitmaps/p80s.bmp"\r
+N80S                    BITMAP  MOVEABLE PURE   "bitmaps/n80s.bmp"\r
+B80S                    BITMAP  MOVEABLE PURE   "bitmaps/b80s.bmp"\r
+R80S                    BITMAP  MOVEABLE PURE   "bitmaps/r80s.bmp"\r
+Q80S                    BITMAP  MOVEABLE PURE   "bitmaps/q80s.bmp"\r
+K80S                    BITMAP  MOVEABLE PURE   "bitmaps/k80s.bmp"\r
+P80W                    BITMAP  MOVEABLE PURE   "bitmaps/p80w.bmp"\r
+N80W                    BITMAP  MOVEABLE PURE   "bitmaps/n80w.bmp"\r
+B80W                    BITMAP  MOVEABLE PURE   "bitmaps/b80w.bmp"\r
+R80W                    BITMAP  MOVEABLE PURE   "bitmaps/r80w.bmp"\r
+Q80W                    BITMAP  MOVEABLE PURE   "bitmaps/q80w.bmp"\r
+K80W                    BITMAP  MOVEABLE PURE   "bitmaps/k80w.bmp"\r
+P87O                    BITMAP  MOVEABLE PURE   "bitmaps/p87o.bmp"\r
+N87O                    BITMAP  MOVEABLE PURE   "bitmaps/n87o.bmp"\r
+B87O                    BITMAP  MOVEABLE PURE   "bitmaps/b87o.bmp"\r
+R87O                    BITMAP  MOVEABLE PURE   "bitmaps/r87o.bmp"\r
+Q87O                    BITMAP  MOVEABLE PURE   "bitmaps/q87o.bmp"\r
+K87O                    BITMAP  MOVEABLE PURE   "bitmaps/k87o.bmp"\r
+P87S                    BITMAP  MOVEABLE PURE   "bitmaps/p87s.bmp"\r
+N87S                    BITMAP  MOVEABLE PURE   "bitmaps/n87s.bmp"\r
+B87S                    BITMAP  MOVEABLE PURE   "bitmaps/b87s.bmp"\r
+R87S                    BITMAP  MOVEABLE PURE   "bitmaps/r87s.bmp"\r
+Q87S                    BITMAP  MOVEABLE PURE   "bitmaps/q87s.bmp"\r
+K87S                    BITMAP  MOVEABLE PURE   "bitmaps/k87s.bmp"\r
+P87W                    BITMAP  MOVEABLE PURE   "bitmaps/p87w.bmp"\r
+N87W                    BITMAP  MOVEABLE PURE   "bitmaps/n87w.bmp"\r
+B87W                    BITMAP  MOVEABLE PURE   "bitmaps/b87w.bmp"\r
+R87W                    BITMAP  MOVEABLE PURE   "bitmaps/r87w.bmp"\r
+Q87W                    BITMAP  MOVEABLE PURE   "bitmaps/q87w.bmp"\r
+K87W                    BITMAP  MOVEABLE PURE   "bitmaps/k87w.bmp"\r
+P95O                    BITMAP  MOVEABLE PURE   "bitmaps/p95o.bmp"\r
+N95O                    BITMAP  MOVEABLE PURE   "bitmaps/n95o.bmp"\r
+B95O                    BITMAP  MOVEABLE PURE   "bitmaps/b95o.bmp"\r
+R95O                    BITMAP  MOVEABLE PURE   "bitmaps/r95o.bmp"\r
+Q95O                    BITMAP  MOVEABLE PURE   "bitmaps/q95o.bmp"\r
+K95O                    BITMAP  MOVEABLE PURE   "bitmaps/k95o.bmp"\r
+P95S                    BITMAP  MOVEABLE PURE   "bitmaps/p95s.bmp"\r
+N95S                    BITMAP  MOVEABLE PURE   "bitmaps/n95s.bmp"\r
+B95S                    BITMAP  MOVEABLE PURE   "bitmaps/b95s.bmp"\r
+R95S                    BITMAP  MOVEABLE PURE   "bitmaps/r95s.bmp"\r
+Q95S                    BITMAP  MOVEABLE PURE   "bitmaps/q95s.bmp"\r
+K95S                    BITMAP  MOVEABLE PURE   "bitmaps/k95s.bmp"\r
+P95W                    BITMAP  MOVEABLE PURE   "bitmaps/p95w.bmp"\r
+N95W                    BITMAP  MOVEABLE PURE   "bitmaps/n95w.bmp"\r
+B95W                    BITMAP  MOVEABLE PURE   "bitmaps/b95w.bmp"\r
+R95W                    BITMAP  MOVEABLE PURE   "bitmaps/r95w.bmp"\r
+Q95W                    BITMAP  MOVEABLE PURE   "bitmaps/q95w.bmp"\r
+K95W                    BITMAP  MOVEABLE PURE   "bitmaps/k95w.bmp"\r
+P108O                   BITMAP  MOVEABLE PURE   "bitmaps/p108o.bmp"\r
+N108O                   BITMAP  MOVEABLE PURE   "bitmaps/n108o.bmp"\r
+B108O                   BITMAP  MOVEABLE PURE   "bitmaps/b108o.bmp"\r
+R108O                   BITMAP  MOVEABLE PURE   "bitmaps/r108o.bmp"\r
+Q108O                   BITMAP  MOVEABLE PURE   "bitmaps/q108o.bmp"\r
+K108O                   BITMAP  MOVEABLE PURE   "bitmaps/k108o.bmp"\r
+P108S                   BITMAP  MOVEABLE PURE   "bitmaps/p108s.bmp"\r
+N108S                   BITMAP  MOVEABLE PURE   "bitmaps/n108s.bmp"\r
+B108S                   BITMAP  MOVEABLE PURE   "bitmaps/b108s.bmp"\r
+R108S                   BITMAP  MOVEABLE PURE   "bitmaps/r108s.bmp"\r
+Q108S                   BITMAP  MOVEABLE PURE   "bitmaps/q108s.bmp"\r
+K108S                   BITMAP  MOVEABLE PURE   "bitmaps/k108s.bmp"\r
+P108W                   BITMAP  MOVEABLE PURE   "bitmaps/p108w.bmp"\r
+N108W                   BITMAP  MOVEABLE PURE   "bitmaps/n108w.bmp"\r
+B108W                   BITMAP  MOVEABLE PURE   "bitmaps/b108w.bmp"\r
+R108W                   BITMAP  MOVEABLE PURE   "bitmaps/r108w.bmp"\r
+Q108W                   BITMAP  MOVEABLE PURE   "bitmaps/q108w.bmp"\r
+K108W                   BITMAP  MOVEABLE PURE   "bitmaps/k108w.bmp"\r
+P116O                   BITMAP  MOVEABLE PURE   "bitmaps/p116o.bmp"\r
+N116O                   BITMAP  MOVEABLE PURE   "bitmaps/n116o.bmp"\r
+B116O                   BITMAP  MOVEABLE PURE   "bitmaps/b116o.bmp"\r
+R116O                   BITMAP  MOVEABLE PURE   "bitmaps/r116o.bmp"\r
+Q116O                   BITMAP  MOVEABLE PURE   "bitmaps/q116o.bmp"\r
+K116O                   BITMAP  MOVEABLE PURE   "bitmaps/k116o.bmp"\r
+P116S                   BITMAP  MOVEABLE PURE   "bitmaps/p116s.bmp"\r
+N116S                   BITMAP  MOVEABLE PURE   "bitmaps/n116s.bmp"\r
+B116S                   BITMAP  MOVEABLE PURE   "bitmaps/b116s.bmp"\r
+R116S                   BITMAP  MOVEABLE PURE   "bitmaps/r116s.bmp"\r
+Q116S                   BITMAP  MOVEABLE PURE   "bitmaps/q116s.bmp"\r
+K116S                   BITMAP  MOVEABLE PURE   "bitmaps/k116s.bmp"\r
+P116W                   BITMAP  MOVEABLE PURE   "bitmaps/p116w.bmp"\r
+N116W                   BITMAP  MOVEABLE PURE   "bitmaps/n116w.bmp"\r
+B116W                   BITMAP  MOVEABLE PURE   "bitmaps/b116w.bmp"\r
+R116W                   BITMAP  MOVEABLE PURE   "bitmaps/r116w.bmp"\r
+Q116W                   BITMAP  MOVEABLE PURE   "bitmaps/q116w.bmp"\r
+K116W                   BITMAP  MOVEABLE PURE   "bitmaps/k116w.bmp"\r
+P129O                   BITMAP  MOVEABLE PURE   "bitmaps/p129o.bmp"\r
+N129O                   BITMAP  MOVEABLE PURE   "bitmaps/n129o.bmp"\r
+B129O                   BITMAP  MOVEABLE PURE   "bitmaps/b129o.bmp"\r
+R129O                   BITMAP  MOVEABLE PURE   "bitmaps/r129o.bmp"\r
+Q129O                   BITMAP  MOVEABLE PURE   "bitmaps/q129o.bmp"\r
+K129O                   BITMAP  MOVEABLE PURE   "bitmaps/k129o.bmp"\r
+P129S                   BITMAP  MOVEABLE PURE   "bitmaps/p129s.bmp"\r
+N129S                   BITMAP  MOVEABLE PURE   "bitmaps/n129s.bmp"\r
+B129S                   BITMAP  MOVEABLE PURE   "bitmaps/b129s.bmp"\r
+R129S                   BITMAP  MOVEABLE PURE   "bitmaps/r129s.bmp"\r
+Q129S                   BITMAP  MOVEABLE PURE   "bitmaps/q129s.bmp"\r
+K129S                   BITMAP  MOVEABLE PURE   "bitmaps/k129s.bmp"\r
+P129W                   BITMAP  MOVEABLE PURE   "bitmaps/p129w.bmp"\r
+N129W                   BITMAP  MOVEABLE PURE   "bitmaps/n129w.bmp"\r
+B129W                   BITMAP  MOVEABLE PURE   "bitmaps/b129w.bmp"\r
+R129W                   BITMAP  MOVEABLE PURE   "bitmaps/r129w.bmp"\r
+Q129W                   BITMAP  MOVEABLE PURE   "bitmaps/q129w.bmp"\r
+K129W                   BITMAP  MOVEABLE PURE   "bitmaps/k129w.bmp"\r
+GALACTIC                BITMAP  MOVEABLE PURE   "bitmaps/galactic.bmp"\r
+TIM                     BITMAP  MOVEABLE PURE   "bitmaps/tim.bmp"\r
+// [HGM] Some fairy symbols:\r
+E72O                    BITMAP  MOVEABLE PURE   "bitmaps/e72o.bmp"\r
+A72O                    BITMAP  MOVEABLE PURE   "bitmaps/a72o.bmp"\r
+AA72O                   BITMAP  MOVEABLE PURE   "bitmaps/as72o.bmp"\r
+C72O                    BITMAP  MOVEABLE PURE   "bitmaps/c72o.bmp"\r
+CV72O                   BITMAP  MOVEABLE PURE   "bitmaps/cv72o.bmp"\r
+F72O                    BITMAP  MOVEABLE PURE   "bitmaps/f72o.bmp"\r
+M72O                    BITMAP  MOVEABLE PURE   "bitmaps/m72o.bmp"\r
+W72O                    BITMAP  MOVEABLE PURE   "bitmaps/w72o.bmp"\r
+O72O                    BITMAP  MOVEABLE PURE   "bitmaps/o72o.bmp"\r
+U72O                    BITMAP  MOVEABLE PURE   "bitmaps/u72o.bmp"\r
+H72O                    BITMAP  MOVEABLE PURE   "bitmaps/h72o.bmp"\r
+G72O                    BITMAP  MOVEABLE PURE   "bitmaps/g72o.bmp"\r
+V72O                    BITMAP  MOVEABLE PURE   "bitmaps/v72o.bmp"\r
+S72O                    BITMAP  MOVEABLE PURE   "bitmaps/s72o.bmp"\r
+L72O                    BITMAP  MOVEABLE PURE   "bitmaps/l72o.bmp"\r
+DK72O                   BITMAP  MOVEABLE PURE   "bitmaps/dk72o.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
+WS72O                   BITMAP  MOVEABLE PURE   "bitmaps/ws72o.bmp"\r
+E72S                    BITMAP  MOVEABLE PURE   "bitmaps/e72s.bmp"\r
+A72S                    BITMAP  MOVEABLE PURE   "bitmaps/a72s.bmp"\r
+AA72S                   BITMAP  MOVEABLE PURE   "bitmaps/as72s.bmp"\r
+C72S                    BITMAP  MOVEABLE PURE   "bitmaps/c72s.bmp"\r
+CV72S                   BITMAP  MOVEABLE PURE   "bitmaps/cv72s.bmp"\r
+F72S                    BITMAP  MOVEABLE PURE   "bitmaps/f72s.bmp"\r
+M72S                    BITMAP  MOVEABLE PURE   "bitmaps/m72s.bmp"\r
+W72S                    BITMAP  MOVEABLE PURE   "bitmaps/w72s.bmp"\r
+O72S                    BITMAP  MOVEABLE PURE   "bitmaps/o72s.bmp"\r
+U72S                    BITMAP  MOVEABLE PURE   "bitmaps/u72s.bmp"\r
+H72S                    BITMAP  MOVEABLE PURE   "bitmaps/h72s.bmp"\r
+G72S                    BITMAP  MOVEABLE PURE   "bitmaps/g72s.bmp"\r
+V72S                    BITMAP  MOVEABLE PURE   "bitmaps/v72s.bmp"\r
+S72S                    BITMAP  MOVEABLE PURE   "bitmaps/s72s.bmp"\r
+L72S                    BITMAP  MOVEABLE PURE   "bitmaps/l72s.bmp"\r
+DK72S                   BITMAP  MOVEABLE PURE   "bitmaps/dk72s.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
+WS72S                   BITMAP  MOVEABLE PURE   "bitmaps/ws72s.bmp"\r
+E72W                    BITMAP  MOVEABLE PURE   "bitmaps/e72w.bmp"\r
+A72W                    BITMAP  MOVEABLE PURE   "bitmaps/a72w.bmp"\r
+AA72W                   BITMAP  MOVEABLE PURE   "bitmaps/as72w.bmp"\r
+C72W                    BITMAP  MOVEABLE PURE   "bitmaps/c72w.bmp"\r
+CV72W                   BITMAP  MOVEABLE PURE   "bitmaps/cv72w.bmp"\r
+F72W                    BITMAP  MOVEABLE PURE   "bitmaps/f72w.bmp"\r
+M72W                    BITMAP  MOVEABLE PURE   "bitmaps/m72w.bmp"\r
+W72W                    BITMAP  MOVEABLE PURE   "bitmaps/w72w.bmp"\r
+O72W                    BITMAP  MOVEABLE PURE   "bitmaps/o72w.bmp"\r
+U72W                    BITMAP  MOVEABLE PURE   "bitmaps/u72w.bmp"\r
+H72W                    BITMAP  MOVEABLE PURE   "bitmaps/h72w.bmp"\r
+G72W                    BITMAP  MOVEABLE PURE   "bitmaps/g72w.bmp"\r
+V72W                    BITMAP  MOVEABLE PURE   "bitmaps/v72w.bmp"\r
+S72W                    BITMAP  MOVEABLE PURE   "bitmaps/s72w.bmp"\r
+L72W                    BITMAP  MOVEABLE PURE   "bitmaps/l72w.bmp"\r
+DK72W                   BITMAP  MOVEABLE PURE   "bitmaps/dk72w.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
+C49O                    BITMAP  MOVEABLE PURE   "bitmaps/c49o.bmp"\r
+CV49O                   BITMAP  MOVEABLE PURE   "bitmaps/cv49o.bmp"\r
+F49O                    BITMAP  MOVEABLE PURE   "bitmaps/f49o.bmp"\r
+M49O                    BITMAP  MOVEABLE PURE   "bitmaps/m49o.bmp"\r
+W49O                    BITMAP  MOVEABLE PURE   "bitmaps/w49o.bmp"\r
+O49O                    BITMAP  MOVEABLE PURE   "bitmaps/o49o.bmp"\r
+U49O                    BITMAP  MOVEABLE PURE   "bitmaps/u49o.bmp"\r
+H49O                    BITMAP  MOVEABLE PURE   "bitmaps/h49o.bmp"\r
+G49O                    BITMAP  MOVEABLE PURE   "bitmaps/g49o.bmp"\r
+V49O                    BITMAP  MOVEABLE PURE   "bitmaps/v49o.bmp"\r
+S49O                    BITMAP  MOVEABLE PURE   "bitmaps/s49o.bmp"\r
+L49O                    BITMAP  MOVEABLE PURE   "bitmaps/l49o.bmp"\r
+DK49O                   BITMAP  MOVEABLE PURE   "bitmaps/dk49o.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
+WS49O                   BITMAP  MOVEABLE PURE   "bitmaps/ws49o.bmp"\r
+E49S                    BITMAP  MOVEABLE PURE   "bitmaps/e49s.bmp"\r
+A49S                    BITMAP  MOVEABLE PURE   "bitmaps/a49s.bmp"\r
+AA49S                   BITMAP  MOVEABLE PURE   "bitmaps/as49s.bmp"\r
+C49S                    BITMAP  MOVEABLE PURE   "bitmaps/c49s.bmp"\r
+CV49S                   BITMAP  MOVEABLE PURE   "bitmaps/cv49s.bmp"\r
+F49S                    BITMAP  MOVEABLE PURE   "bitmaps/f49s.bmp"\r
+M49S                    BITMAP  MOVEABLE PURE   "bitmaps/m49s.bmp"\r
+W49S                    BITMAP  MOVEABLE PURE   "bitmaps/w49s.bmp"\r
+O49S                    BITMAP  MOVEABLE PURE   "bitmaps/o49s.bmp"\r
+U49S                    BITMAP  MOVEABLE PURE   "bitmaps/u49s.bmp"\r
+H49S                    BITMAP  MOVEABLE PURE   "bitmaps/h49s.bmp"\r
+G49S                    BITMAP  MOVEABLE PURE   "bitmaps/g49s.bmp"\r
+V49S                    BITMAP  MOVEABLE PURE   "bitmaps/v49s.bmp"\r
+S49S                    BITMAP  MOVEABLE PURE   "bitmaps/s49s.bmp"\r
+L49S                    BITMAP  MOVEABLE PURE   "bitmaps/l49s.bmp"\r
+DK49S                   BITMAP  MOVEABLE PURE   "bitmaps/dk49s.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
+WS49S                   BITMAP  MOVEABLE PURE   "bitmaps/ws49s.bmp"\r
+E49W                    BITMAP  MOVEABLE PURE   "bitmaps/e49w.bmp"\r
+A49W                    BITMAP  MOVEABLE PURE   "bitmaps/a49w.bmp"\r
+AA49W                   BITMAP  MOVEABLE PURE   "bitmaps/as49w.bmp"\r
+C49W                    BITMAP  MOVEABLE PURE   "bitmaps/c49w.bmp"\r
+CV49W                   BITMAP  MOVEABLE PURE   "bitmaps/cv49w.bmp"\r
+F49W                    BITMAP  MOVEABLE PURE   "bitmaps/f49w.bmp"\r
+M49W                    BITMAP  MOVEABLE PURE   "bitmaps/m49w.bmp"\r
+W49W                    BITMAP  MOVEABLE PURE   "bitmaps/w49w.bmp"\r
+O49W                    BITMAP  MOVEABLE PURE   "bitmaps/o49w.bmp"\r
+U49W                    BITMAP  MOVEABLE PURE   "bitmaps/u49w.bmp"\r
+H49W                    BITMAP  MOVEABLE PURE   "bitmaps/h49w.bmp"\r
+G49W                    BITMAP  MOVEABLE PURE   "bitmaps/g49w.bmp"\r
+V49W                    BITMAP  MOVEABLE PURE   "bitmaps/v49w.bmp"\r
+S49W                    BITMAP  MOVEABLE PURE   "bitmaps/s49w.bmp"\r
+L49W                    BITMAP  MOVEABLE PURE   "bitmaps/l49w.bmp"\r
+DK49W                   BITMAP  MOVEABLE PURE   "bitmaps/dk49w.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
+CV33O                   BITMAP  MOVEABLE PURE   "bitmaps/cv33o.bmp"\r
+V33O                    BITMAP  MOVEABLE PURE   "bitmaps/v33o.bmp"\r
+E33O                    BITMAP  MOVEABLE PURE   "bitmaps/e33o.bmp"\r
+F33O                    BITMAP  MOVEABLE PURE   "bitmaps/f33o.bmp"\r
+H33O                    BITMAP  MOVEABLE PURE   "bitmaps/h33o.bmp"\r
+G33O                    BITMAP  MOVEABLE PURE   "bitmaps/g33o.bmp"\r
+L33O                    BITMAP  MOVEABLE PURE   "bitmaps/l33o.bmp"\r
+W33O                    BITMAP  MOVEABLE PURE   "bitmaps/w33o.bmp"\r
+M33O                    BITMAP  MOVEABLE PURE   "bitmaps/m33o.bmp"\r
+O33O                    BITMAP  MOVEABLE PURE   "bitmaps/o33o.bmp"\r
+DK33O                   BITMAP  MOVEABLE PURE   "bitmaps/dk33o.bmp"\r
+A33W                    BITMAP  MOVEABLE PURE   "bitmaps/a33w.bmp"\r
+AA33W                   BITMAP  MOVEABLE PURE   "bitmaps/as33w.bmp"\r
+C33W                    BITMAP  MOVEABLE PURE   "bitmaps/c33w.bmp"\r
+CV33W                   BITMAP  MOVEABLE PURE   "bitmaps/cv33w.bmp"\r
+V33W                    BITMAP  MOVEABLE PURE   "bitmaps/v33w.bmp"\r
+E33W                    BITMAP  MOVEABLE PURE   "bitmaps/e33w.bmp"\r
+F33W                    BITMAP  MOVEABLE PURE   "bitmaps/f33w.bmp"\r
+H33W                    BITMAP  MOVEABLE PURE   "bitmaps/h33w.bmp"\r
+G33W                    BITMAP  MOVEABLE PURE   "bitmaps/g33w.bmp"\r
+L33W                    BITMAP  MOVEABLE PURE   "bitmaps/l33w.bmp"\r
+W33W                    BITMAP  MOVEABLE PURE   "bitmaps/w33w.bmp"\r
+M33W                    BITMAP  MOVEABLE PURE   "bitmaps/m33w.bmp"\r
+O33W                    BITMAP  MOVEABLE PURE   "bitmaps/o33w.bmp"\r
+DK33W                   BITMAP  MOVEABLE PURE   "bitmaps/dk33w.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
+CV33S                   BITMAP  MOVEABLE PURE   "bitmaps/cv33s.bmp"\r
+V33S                    BITMAP  MOVEABLE PURE   "bitmaps/v33s.bmp"\r
+E33S                    BITMAP  MOVEABLE PURE   "bitmaps/e33s.bmp"\r
+F33S                    BITMAP  MOVEABLE PURE   "bitmaps/f33s.bmp"\r
+H33S                    BITMAP  MOVEABLE PURE   "bitmaps/h33s.bmp"\r
+G33S                    BITMAP  MOVEABLE PURE   "bitmaps/g33s.bmp"\r
+L33S                    BITMAP  MOVEABLE PURE   "bitmaps/l33s.bmp"\r
+W33S                    BITMAP  MOVEABLE PURE   "bitmaps/w33s.bmp"\r
+M33S                    BITMAP  MOVEABLE PURE   "bitmaps/m33s.bmp"\r
+O33S                    BITMAP  MOVEABLE PURE   "bitmaps/o33s.bmp"\r
+DK33S                   BITMAP  MOVEABLE PURE   "bitmaps/dk33s.bmp"\r
+\r
+A37O                    BITMAP  MOVEABLE PURE   "bitmaps/a37o.bmp"\r
+L37O                    BITMAP  MOVEABLE PURE   "bitmaps/l37o.bmp"\r
+C37O                    BITMAP  MOVEABLE PURE   "bitmaps/c37o.bmp"\r
+CV37O                   BITMAP  MOVEABLE PURE   "bitmaps/cv37o.bmp"\r
+A40O                    BITMAP  MOVEABLE PURE   "bitmaps/a40o.bmp"\r
+L40O                    BITMAP  MOVEABLE PURE   "bitmaps/l40o.bmp"\r
+C40O                    BITMAP  MOVEABLE PURE   "bitmaps/c40o.bmp"\r
+CV40O                   BITMAP  MOVEABLE PURE   "bitmaps/cv40o.bmp"\r
+A45O                    BITMAP  MOVEABLE PURE   "bitmaps/a45o.bmp"\r
+L45O                    BITMAP  MOVEABLE PURE   "bitmaps/l45o.bmp"\r
+C45O                    BITMAP  MOVEABLE PURE   "bitmaps/c45o.bmp"\r
+CV45O                   BITMAP  MOVEABLE PURE   "bitmaps/cv45o.bmp"\r
+A54O                    BITMAP  MOVEABLE PURE   "bitmaps/a54o.bmp"\r
+L54O                    BITMAP  MOVEABLE PURE   "bitmaps/l54o.bmp"\r
+C54O                    BITMAP  MOVEABLE PURE   "bitmaps/c54o.bmp"\r
+CV54O                   BITMAP  MOVEABLE PURE   "bitmaps/cv54o.bmp"\r
+V54O                    BITMAP  MOVEABLE PURE   "bitmaps/v54o.bmp"\r
+A58O                    BITMAP  MOVEABLE PURE   "bitmaps/a58o.bmp"\r
+L58O                    BITMAP  MOVEABLE PURE   "bitmaps/l58o.bmp"\r
+C58O                    BITMAP  MOVEABLE PURE   "bitmaps/c58o.bmp"\r
+CV58O                   BITMAP  MOVEABLE PURE   "bitmaps/cv58o.bmp"\r
+A64O                    BITMAP  MOVEABLE PURE   "bitmaps/a64o.bmp"\r
+L64O                    BITMAP  MOVEABLE PURE   "bitmaps/l64o.bmp"\r
+C64O                    BITMAP  MOVEABLE PURE   "bitmaps/c64o.bmp"\r
+CV64O                   BITMAP  MOVEABLE PURE   "bitmaps/cv64o.bmp"\r
+A37W                    BITMAP  MOVEABLE PURE   "bitmaps/a37w.bmp"\r
+L37W                    BITMAP  MOVEABLE PURE   "bitmaps/l37w.bmp"\r
+C37W                    BITMAP  MOVEABLE PURE   "bitmaps/c37w.bmp"\r
+CV37W                   BITMAP  MOVEABLE PURE   "bitmaps/cv37w.bmp"\r
+A40W                    BITMAP  MOVEABLE PURE   "bitmaps/a40w.bmp"\r
+L40W                    BITMAP  MOVEABLE PURE   "bitmaps/l40w.bmp"\r
+C40W                    BITMAP  MOVEABLE PURE   "bitmaps/c40w.bmp"\r
+CV40W                   BITMAP  MOVEABLE PURE   "bitmaps/cv40w.bmp"\r
+A45W                    BITMAP  MOVEABLE PURE   "bitmaps/a45w.bmp"\r
+L45W                    BITMAP  MOVEABLE PURE   "bitmaps/l45w.bmp"\r
+C45W                    BITMAP  MOVEABLE PURE   "bitmaps/c45w.bmp"\r
+CV45W                   BITMAP  MOVEABLE PURE   "bitmaps/cv45w.bmp"\r
+A54W                    BITMAP  MOVEABLE PURE   "bitmaps/a54w.bmp"\r
+L54W                    BITMAP  MOVEABLE PURE   "bitmaps/l54w.bmp"\r
+C54W                    BITMAP  MOVEABLE PURE   "bitmaps/c54w.bmp"\r
+CV54W                   BITMAP  MOVEABLE PURE   "bitmaps/cv54w.bmp"\r
+V54W                    BITMAP  MOVEABLE PURE   "bitmaps/v54w.bmp"\r
+A58W                    BITMAP  MOVEABLE PURE   "bitmaps/a58w.bmp"\r
+L58W                    BITMAP  MOVEABLE PURE   "bitmaps/l58w.bmp"\r
+C58W                    BITMAP  MOVEABLE PURE   "bitmaps/c58w.bmp"\r
+CV58W                   BITMAP  MOVEABLE PURE   "bitmaps/cv58w.bmp"\r
+A64W                    BITMAP  MOVEABLE PURE   "bitmaps/a64w.bmp"\r
+L64W                    BITMAP  MOVEABLE PURE   "bitmaps/l64w.bmp"\r
+C64W                    BITMAP  MOVEABLE PURE   "bitmaps/c64w.bmp"\r
+CV64W                   BITMAP  MOVEABLE PURE   "bitmaps/cv64w.bmp"\r
+A37S                    BITMAP  MOVEABLE PURE   "bitmaps/a37s.bmp"\r
+L37S                    BITMAP  MOVEABLE PURE   "bitmaps/l37s.bmp"\r
+C37S                    BITMAP  MOVEABLE PURE   "bitmaps/c37s.bmp"\r
+CV37S                   BITMAP  MOVEABLE PURE   "bitmaps/cv37s.bmp"\r
+A40S                    BITMAP  MOVEABLE PURE   "bitmaps/a40s.bmp"\r
+L40S                    BITMAP  MOVEABLE PURE   "bitmaps/l40s.bmp"\r
+C40S                    BITMAP  MOVEABLE PURE   "bitmaps/c40s.bmp"\r
+CV40S                   BITMAP  MOVEABLE PURE   "bitmaps/cv40s.bmp"\r
+A45S                    BITMAP  MOVEABLE PURE   "bitmaps/a45s.bmp"\r
+L45S                    BITMAP  MOVEABLE PURE   "bitmaps/l45s.bmp"\r
+C45S                    BITMAP  MOVEABLE PURE   "bitmaps/c45s.bmp"\r
+CV45S                   BITMAP  MOVEABLE PURE   "bitmaps/cv45s.bmp"\r
+A54S                    BITMAP  MOVEABLE PURE   "bitmaps/a54s.bmp"\r
+L54S                    BITMAP  MOVEABLE PURE   "bitmaps/l54s.bmp"\r
+C54S                    BITMAP  MOVEABLE PURE   "bitmaps/c54s.bmp"\r
+CV54S                   BITMAP  MOVEABLE PURE   "bitmaps/cv54s.bmp"\r
+V54S                    BITMAP  MOVEABLE PURE   "bitmaps/v54s.bmp"\r
+A58S                    BITMAP  MOVEABLE PURE   "bitmaps/a58s.bmp"\r
+L58S                    BITMAP  MOVEABLE PURE   "bitmaps/l58s.bmp"\r
+C58S                    BITMAP  MOVEABLE PURE   "bitmaps/c58s.bmp"\r
+CV58S                   BITMAP  MOVEABLE PURE   "bitmaps/cv58s.bmp"\r
+A64S                    BITMAP  MOVEABLE PURE   "bitmaps/a64s.bmp"\r
+L64S                    BITMAP  MOVEABLE PURE   "bitmaps/l64s.bmp"\r
+C64S                    BITMAP  MOVEABLE PURE   "bitmaps/c64s.bmp"\r
+CV64S                   BITMAP  MOVEABLE PURE   "bitmaps/cv64s.bmp"\r
+\r
+SP58O                   BITMAP  MOVEABLE PURE   "shogibitmaps/sp58o.bmp"\r
+SN58O                   BITMAP  MOVEABLE PURE   "shogibitmaps/sn58o.bmp"\r
+SB58O                   BITMAP  MOVEABLE PURE   "shogibitmaps/sb58o.bmp"\r
+SR58O                   BITMAP  MOVEABLE PURE   "shogibitmaps/sr58o.bmp"\r
+SL58O                   BITMAP  MOVEABLE PURE   "shogibitmaps/sl58o.bmp"\r
+SK58O                   BITMAP  MOVEABLE PURE   "shogibitmaps/sk58o.bmp"\r
+SF58O                   BITMAP  MOVEABLE PURE   "shogibitmaps/sf58o.bmp"\r
+SW58O                   BITMAP  MOVEABLE PURE   "shogibitmaps/sw58o.bmp"\r
+SU58O                   BITMAP  MOVEABLE PURE   "shogibitmaps/su58o.bmp"\r
+SH58O                   BITMAP  MOVEABLE PURE   "shogibitmaps/sh58o.bmp"\r
+SA58O                   BITMAP  MOVEABLE PURE   "shogibitmaps/sa58o.bmp"\r
+SC58O                   BITMAP  MOVEABLE PURE   "shogibitmaps/sc58o.bmp"\r
+SG58O                   BITMAP  MOVEABLE PURE   "shogibitmaps/sg58o.bmp"\r
+SS58O                   BITMAP  MOVEABLE PURE   "shogibitmaps/ss58o.bmp"\r
+SP58W                   BITMAP  MOVEABLE PURE   "shogibitmaps/sp58w.bmp"\r
+SN58W                   BITMAP  MOVEABLE PURE   "shogibitmaps/sn58w.bmp"\r
+SR58W                   BITMAP  MOVEABLE PURE   "shogibitmaps/sr58w.bmp"\r
+SL58W                   BITMAP  MOVEABLE PURE   "shogibitmaps/sl58w.bmp"\r
+SK58W                   BITMAP  MOVEABLE PURE   "shogibitmaps/sk58w.bmp"\r
+SW58W                   BITMAP  MOVEABLE PURE   "shogibitmaps/sw58w.bmp"\r
+\r
+#ifdef APSTUDIO_INVOKED\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// TEXTINCLUDE\r
+//\r
+\r
+1 TEXTINCLUDE DISCARDABLE \r
+BEGIN\r
+    "resource.h\0"\r
+END\r
+\r
+2 TEXTINCLUDE DISCARDABLE \r
+BEGIN\r
+    "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"\r
+    "#include ""windows.h""\r\n"\r
+    "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"\r
+    "#include ""dlgs.h""\r\n"\r
+    "\r\n"\r
+    "\0"\r
+END\r
+\r
+3 TEXTINCLUDE DISCARDABLE \r
+BEGIN\r
+    "\r\n"\r
+    "\0"\r
+END\r
+\r
+#endif    // APSTUDIO_INVOKED\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// WAVE\r
+//\r
+\r
+DING                    WAVE    DISCARDABLE     "sounds/ding1.wav"\r
+CHING                   WAVE    DISCARDABLE     "sounds/ching.wav"\r
+CLICK                   WAVE    DISCARDABLE     "sounds/click.wav"\r
+CYMBAL                  WAVE    DISCARDABLE     "sounds/cymbal.wav"\r
+DRIP                    WAVE    DISCARDABLE     "sounds/drip.wav"\r
+GONG                    WAVE    DISCARDABLE     "sounds/gong.wav"\r
+BEEPBEEP                WAVE    DISCARDABLE     "sounds/honkhonk.wav"\r
+LASER                   WAVE    DISCARDABLE     "sounds/laser.wav"\r
+PENALTY                 WAVE    DISCARDABLE     "sounds/penalty.wav"\r
+PHONE                   WAVE    DISCARDABLE     "sounds/phone.wav"\r
+POP                     WAVE    DISCARDABLE     "sounds/pop.wav"\r
+POP2                    WAVE    DISCARDABLE     "sounds/pop2.wav"\r
+SLAP                    WAVE    DISCARDABLE     "sounds/slap.wav"\r
+SQUEAK                  WAVE    DISCARDABLE     "sounds/squeak.wav"\r
+SWISH                   WAVE    DISCARDABLE     "sounds/swish.wav"\r
+THUD                    WAVE    DISCARDABLE     "sounds/thud.wav"\r
+WHIPCRACK               WAVE    DISCARDABLE     "sounds/whipcrak.wav"\r
+MOVE                    WAVE    DISCARDABLE     "sounds/move.wav"\r
+ALARM                   WAVE    DISCARDABLE     "sounds/alarm.wav"\r
+CHALLENGE               WAVE    DISCARDABLE     "sounds/challenge.wav"\r
+CHANNEL                 WAVE    DISCARDABLE     "sounds/channel.wav"\r
+CHANNEL1                WAVE    DISCARDABLE     "sounds/channel1.wav"\r
+DRAW                    WAVE    DISCARDABLE     "sounds/draw.wav"\r
+KIBITZ                  WAVE    DISCARDABLE     "sounds/kibitz.wav"\r
+LOSE                    WAVE    DISCARDABLE     "sounds/lose.wav"\r
+REQUEST                 WAVE    DISCARDABLE     "sounds/request.wav"\r
+SEEK                    WAVE    DISCARDABLE     "sounds/seek.wav"\r
+SHOUT                   WAVE    DISCARDABLE     "sounds/shout.wav"\r
+SSHOUT                  WAVE    DISCARDABLE     "sounds/sshout.wav"\r
+TELL                    WAVE    DISCARDABLE     "sounds/tell.wav"\r
+UNFINISHED              WAVE    DISCARDABLE     "sounds/unfinished.wav"\r
+WIN                     WAVE    DISCARDABLE     "sounds/win.wav"\r
+#endif    // English (U.S.) resources\r
+/////////////////////////////////////////////////////////////////////////////\r
+\r
+\r
+\r
+#ifndef APSTUDIO_INVOKED\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Generated from the TEXTINCLUDE 3 resource.\r
+//\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+#endif    // not APSTUDIO_INVOKED\r
+\r
index 813445b..e2d0c81 100644 (file)
@@ -104,6 +104,9 @@ VOID NewVariantPopup(HWND hwnd);
 int FinishMove P((ChessMove moveType, int fromX, int fromY, int toX, int toY,\r
                   /*char*/int promoChar));\r
 void AnimateAtomicCapture(int fromX, int fromY, int toX, int toY, int nFrames);\r
+void DisplayMove P((int moveNumber));\r
+Boolean ParseFEN P((Board board, int *blackPlaysFirst, char *fen));\r
+HWND WINAPI HtmlHelp( HWND hwnd, LPCSTR helpFile, UINT action, DWORD_PTR data );\r
 \r
 typedef struct {\r
   ChessSquare piece;  \r
@@ -143,7 +146,7 @@ char szConsoleName[] = "WBConsole";
 \r
 /* Title bar text */\r
 char szTitle[] = "WinBoard";\r
-char szConsoleTitle[] = "ICS Interaction";\r
+char szConsoleTitle[] = "I C S Interaction";\r
 \r
 char *programName;\r
 char *settingsFileName;\r
@@ -482,6 +485,23 @@ void ThawUI()
   DrawMenuBar(hwndMain);\r
 }\r
 \r
+static int fromX = -1, fromY = -1, toX, toY; // [HGM] moved upstream, so JAWS can use them\r
+\r
+/* JAWS preparation patch (WinBoard for the sight impaired). Define required insertions as empty */\r
+#ifdef JAWS\r
+#include "jaws.c"\r
+#else\r
+#define JAWS_INIT\r
+#define JAWS_ALT_INTERCEPT\r
+#define JAWS_KB_NAVIGATION\r
+#define JAWS_MENU_ITEMS\r
+#define JAWS_SILENCE\r
+#define JAWS_REPLAY\r
+#define JAWS_DELETE(X) X\r
+#define SAYMACHINEMOVE()\r
+#define SAY(X)\r
+#endif\r
+\r
 /*---------------------------------------------------------------------------*\\r
  *\r
  * WinMain\r
@@ -508,6 +528,8 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
     return (FALSE);\r
   }\r
 \r
+  JAWS_INIT\r
+\r
 //  InitCommonControlsEx(&ex);\r
   InitCommonControls();\r
 \r
@@ -522,6 +544,77 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    0,    /* lowest message to examine */\r
                    0))   /* highest message to examine */\r
     {\r
+\r
+      if(msg.message == WM_CHAR && msg.wParam == '\t') {\r
+       // [HGM] navigate: switch between all windows with tab\r
+       HWND e1 = NULL, e2 = NULL, mh = NULL, hInput = NULL, hText = NULL;\r
+       int i, currentElement = 0;\r
+\r
+       // first determine what element of the chain we come from (if any)\r
+       if(appData.icsActive) {\r
+           hInput = GetDlgItem(hwndConsole, OPT_ConsoleInput);\r
+           hText  = GetDlgItem(hwndConsole, OPT_ConsoleText);\r
+       }\r
+       if(engineOutputDialog && EngineOutputIsUp()) {\r
+           e1 = GetDlgItem(engineOutputDialog, IDC_EngineMemo1);\r
+           e2 = GetDlgItem(engineOutputDialog, IDC_EngineMemo2);\r
+       }\r
+       if(moveHistoryDialog && MoveHistoryIsUp()) {\r
+           mh = GetDlgItem(moveHistoryDialog, IDC_MoveHistory);\r
+       }\r
+       if(msg.hwnd == hwndMain) currentElement = 7 ; else\r
+       if(msg.hwnd == engineOutputDialog) currentElement = 2; else\r
+       if(msg.hwnd == e1)                 currentElement = 2; else\r
+       if(msg.hwnd == e2)                 currentElement = 3; else\r
+       if(msg.hwnd == moveHistoryDialog) currentElement = 4; else\r
+       if(msg.hwnd == mh)                currentElement = 4; else\r
+       if(msg.hwnd == evalGraphDialog)    currentElement = 7; else\r
+       if(msg.hwnd == hText)  currentElement = 5; else\r
+       if(msg.hwnd == hInput) currentElement = 6; else\r
+       for (i = 0; i < N_BUTTONS; i++) {\r
+           if (buttonDesc[i].hwnd == msg.hwnd) { currentElement = 1; break; }\r
+       }\r
+\r
+       // determine where to go to\r
+       if(currentElement) { HWND h = NULL; int direction = GetKeyState(VK_SHIFT) < 0 ? -1 : 1;\r
+         do {\r
+           currentElement = (currentElement + direction) % 7;\r
+           switch(currentElement) {\r
+               case 0:\r
+                 h = hwndMain; break; // passing this case always makes the loop exit\r
+               case 1:\r
+                 h = buttonDesc[0].hwnd; break; // could be NULL\r
+               case 2:\r
+                 if(!EngineOutputIsUp()) continue; // skip closed auxiliary windows\r
+                 h = e1; break;\r
+               case 3:\r
+                 if(!EngineOutputIsUp()) continue;\r
+                 h = e2; break;\r
+               case 4:\r
+                 if(!MoveHistoryIsUp()) continue;\r
+                 h = mh; break;\r
+//             case 5: // input to eval graph does not seem to get here!\r
+//               if(!EvalGraphIsUp()) continue;\r
+//               h = evalGraphDialog; break;\r
+               case 5:\r
+                 if(!appData.icsActive) continue;\r
+                 SAY("display");\r
+                 h = hText; break;\r
+               case 6:\r
+                 if(!appData.icsActive) continue;\r
+                 SAY("input");\r
+                 h = hInput; break;\r
+           }\r
+         } while(h == 0);\r
+\r
+         if(currentElement > 4 && IsIconic(hwndConsole)) ShowWindow(hwndConsole, SW_RESTORE);\r
+         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
+       }\r
+      }\r
+\r
       if (!(commentDialog && IsDialogMessage(commentDialog, &msg)) &&\r
           !(moveHistoryDialog && IsDialogMessage(moveHistoryDialog, &msg)) &&\r
           !(evalGraphDialog && IsDialogMessage(evalGraphDialog, &msg)) &&\r
@@ -4891,8 +4984,6 @@ SetupDropMenu(HMENU hmenu)
   }\r
 }\r
 \r
-static int fromX = -1, fromY = -1, toX, toY;\r
-\r
 /* Event handler for mouse messages */\r
 VOID\r
 MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)\r
@@ -5116,6 +5207,7 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
                fromX = fromY = -1; \r
                ClearHighlights();\r
                DrawPosition(FALSE, boards[currentMove]);\r
+               appData.animate = saveAnimate;\r
                break; \r
       } else \r
       if(moveType != ImpossibleMove) {\r
@@ -5137,6 +5229,7 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
                    DrawPosition(FALSE, boards[currentMove]);\r
                    boards[currentMove][fromY][fromX] = p; // take back, but display stays\r
                    boards[currentMove][toY][toX] = q;\r
+                   appData.animate = saveAnimate;\r
                    break;\r
                  } else\r
                PromotionPopup(hwnd); /* [HGM] Popup now calls FinishMove */\r
@@ -5308,24 +5401,9 @@ ButtonProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
     case '\r':\r
       SendMessage(hwndMain, WM_COMMAND, MAKEWPARAM(buttonDesc[i].id, 0), 0);\r
       return TRUE;\r
-    case '\t':\r
-      if (appData.icsActive) {\r
-       if (GetKeyState(VK_SHIFT) < 0) {\r
-         /* shifted */\r
-         HWND h = GetDlgItem(hwndConsole, OPT_ConsoleInput);\r
-         if (IsIconic(hwndConsole)) ShowWindow(hwndConsole, SW_RESTORE);\r
-         SetFocus(h);\r
-       } else {\r
-         /* unshifted */\r
-         HWND h = GetDlgItem(hwndConsole, OPT_ConsoleText);\r
-         if (IsIconic(hwndConsole)) ShowWindow(hwndConsole, SW_RESTORE);\r
-         SetFocus(h);\r
-       }\r
-       return TRUE;\r
-      }\r
-      break;\r
     default:\r
-      if (appData.icsActive) {\r
+      if (appData.icsActive && (isalpha((char)wParam) || wParam == '0')) {\r
+       // [HGM] movenum: only letters or leading zero should go to ICS input\r
         HWND h = GetDlgItem(hwndConsole, OPT_ConsoleInput);\r
        if (IsIconic(hwndConsole)) ShowWindow(hwndConsole, SW_RESTORE);\r
        SetFocus(h);\r
@@ -5566,30 +5644,24 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
     MouseEvent(hwnd, message, wParam, lParam);\r
     break;\r
 \r
+  JAWS_KB_NAVIGATION\r
+\r
   case WM_CHAR:\r
     \r
-    if (appData.icsActive) {\r
-      if (wParam == '\t') {\r
-       if (GetKeyState(VK_SHIFT) < 0) {\r
-         /* shifted */\r
-         HWND h = GetDlgItem(hwndConsole, OPT_ConsoleInput);\r
-         if (IsIconic(hwndConsole)) ShowWindow(hwndConsole, SW_RESTORE);\r
-         SetFocus(h);\r
-       } else {\r
-         /* unshifted */\r
-         HWND h = GetDlgItem(hwndConsole, OPT_ConsoleText);\r
-         if (IsIconic(hwndConsole)) ShowWindow(hwndConsole, SW_RESTORE);\r
-         SetFocus(h);\r
-       }\r
-      } else {\r
+    JAWS_ALT_INTERCEPT\r
+\r
+    if (appData.icsActive && (isalpha((char)wParam) || wParam == '0')) { \r
+       // [HGM] movenum: for non-zero digits we always do type-in dialog\r
        HWND h = GetDlgItem(hwndConsole, OPT_ConsoleInput);\r
        if (IsIconic(hwndConsole)) ShowWindow(hwndConsole, SW_RESTORE);\r
        SetFocus(h);\r
        SendMessage(h, message, wParam, lParam);\r
-      }\r
-    } else if (isalpha((char)wParam) || isdigit((char)wParam)) {\r
-      PopUpMoveDialog((char)wParam);\r
+    } else if(lParam != KF_REPEAT) {\r
+       if (isalpha((char)wParam) || isdigit((char)wParam)) {\r
+               PopUpMoveDialog((char)wParam);\r
+       }\r
     }\r
+\r
     break;\r
 \r
   case WM_PALETTECHANGED:\r
@@ -5633,6 +5705,7 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
     case IDM_NewGame:\r
       ResetGameEvent();\r
       AnalysisPopDown();\r
+      SAY("new game enter a move to play against the computer with white");\r
       break;\r
 \r
     case IDM_NewGameFRC:\r
@@ -5755,6 +5828,7 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
         }\r
         else {\r
             EvalGraphPopUp();\r
+           SetFocus(hwndMain);\r
         }\r
         break;\r
 \r
@@ -5822,6 +5896,7 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
          TagsPopUp(tags, CmailMsg());\r
          free(tags);\r
       }\r
+      SAY("computer starts playing white");\r
       break;\r
 \r
     case IDM_MachineBlack:\r
@@ -5835,6 +5910,7 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
          TagsPopUp(tags, CmailMsg());\r
          free(tags);\r
       }\r
+      SAY("computer starts playing black");\r
       break;\r
 \r
     case IDM_TwoMachines:\r
@@ -5848,6 +5924,7 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
          TagsPopUp(tags, CmailMsg());\r
          free(tags);\r
       }\r
+      SAY("programs start playing each other");\r
       break;\r
 \r
     case IDM_AnalysisMode:\r
@@ -5855,6 +5932,7 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
         sprintf(buf, "%s does not support analysis", first.tidy);\r
         DisplayError(buf, 0);\r
       } else {\r
+       SAY("analyzing current position");\r
         /* [DM] icsEngineAnlyze [HGM] Why is this front-end??? */\r
         if (appData.icsActive) {\r
                if (gameMode != IcsObserving) {\r
@@ -5904,10 +5982,12 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 \r
     case IDM_EditGame:\r
       EditGameEvent();\r
+      SAY("edit game");\r
       break;\r
 \r
     case IDM_EditPosition:\r
       EditPositionEvent();\r
+      SAY("to set up a position type a FEN");\r
       break;\r
 \r
     case IDM_Training:\r
@@ -5987,6 +6067,8 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       SetFocus(hwndMain);\r
       break;\r
 \r
+    JAWS_MENU_ITEMS\r
+\r
     case IDM_Forward:\r
       ForwardEvent();\r
       SetFocus(hwndMain);\r
@@ -6113,15 +6195,17 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       break;\r
 \r
     case IDM_HELPCONTENTS:\r
-      if (!WinHelp (hwnd, "winboard.hlp", HELP_KEY,(DWORD)(LPSTR)"CONTENTS")) {\r
-       MessageBox (GetFocus(),\r
+      if (!MyHelp (hwnd, "winboard.hlp", HELP_KEY,(DWORD)(LPSTR)"CONTENTS") &&\r
+         !HtmlHelp(hwnd, "winboard.chm", 0, NULL)      ) {\r
+         MessageBox (GetFocus(),\r
                    "Unable to activate help",\r
                    szAppName, MB_SYSTEMMODAL|MB_OK|MB_ICONHAND);\r
       }\r
       break;\r
 \r
     case IDM_HELPSEARCH:\r
-      if (!WinHelp(hwnd, "winboard.hlp", HELP_PARTIALKEY, (DWORD)(LPSTR)"")) {\r
+        if (!MyHelp (hwnd, "winboard.hlp", HELP_PARTIALKEY, (DWORD)(LPSTR)"") &&\r
+           !HtmlHelp(hwnd, "winboard.chm", 0, NULL)    ) {\r
        MessageBox (GetFocus(),\r
                    "Unable to activate help",\r
                    szAppName, MB_SYSTEMMODAL|MB_OK|MB_ICONHAND);\r
@@ -6577,8 +6661,10 @@ BOOLEAN
 MyPlaySound(MySound *ms)\r
 {\r
   BOOLEAN ok = FALSE;\r
+       if(appData.debugMode) fprintf(debugFP, "make sound %s %x %d\n", ms->name, ms, ms->name[0]);\r
   switch (ms->name[0]) {\r
   case NULLCHAR:\r
+       if(appData.debugMode) fprintf(debugFP, "silence\n");\r
     /* Silence */\r
     ok = TRUE;\r
     break;\r
@@ -7304,12 +7390,35 @@ TypeInMoveDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
   case WM_COMMAND:\r
     switch (LOWORD(wParam)) {\r
     case IDOK:\r
+      GetDlgItemText(hDlg, OPT_Move, move, sizeof(move));\r
+      { int n; Board board;\r
+       // [HGM] FENedit\r
+       if(gameMode == EditPosition && ParseFEN(board, &n, move) ) {\r
+               EditPositionPasteFEN(move);\r
+               EndDialog(hDlg, TRUE);\r
+               return TRUE;\r
+       }\r
+       // [HGM] movenum: allow move number to be typed in any mode\r
+       if(sscanf(move, "%d", &n) == 1 && n != 0 ) {\r
+         currentMove = 2*n-1;\r
+         if(currentMove > forwardMostMove)  currentMove = forwardMostMove;\r
+         if(currentMove < backwardMostMove) currentMove = backwardMostMove;\r
+         EndDialog(hDlg, TRUE);\r
+         DrawPosition(TRUE, boards[currentMove]);\r
+         if(currentMove > backwardMostMove) DisplayMove(currentMove - 1);\r
+         else DisplayMessage("", "");\r
+         return TRUE;\r
+       }\r
+      }\r
       if (gameMode != EditGame && currentMove != forwardMostMove && \r
        gameMode != Training) {\r
        DisplayMoveError("Displayed move is not current");\r
       } else {\r
-       GetDlgItemText(hDlg, OPT_Move, move, sizeof(move));\r
-       if (ParseOneMove(move, gameMode == EditPosition ? blackPlaysFirst : currentMove, \r
+//     GetDlgItemText(hDlg, OPT_Move, move, sizeof(move)); // moved upstream\r
+       int ok = ParseOneMove(move, gameMode == EditPosition ? blackPlaysFirst : currentMove, \r
+         &moveType, &fromX, &fromY, &toX, &toY, &promoChar);\r
+       if(!ok && move[0] >= 'a') { move[0] += 'A' - 'a'; ok = 2; } // [HGM] try also capitalized\r
+       if (ok==1 || ok && ParseOneMove(move, gameMode == EditPosition ? blackPlaysFirst : currentMove, \r
          &moveType, &fromX, &fromY, &toX, &toY, &promoChar)) {\r
          if (gameMode != Training)\r
              forwardMostMove = currentMove;\r
@@ -7341,6 +7450,9 @@ PopUpMoveDialog(char firstchar)
        gameMode == AnalyzeMode || gameMode == EditGame || \r
        gameMode == EditPosition || gameMode == IcsExamining ||\r
        gameMode == IcsPlayingWhite || gameMode == IcsPlayingBlack ||\r
+       isdigit(firstchar) && // [HGM] movenum: allow typing in of move nr in 'passive' modes\r
+               ( gameMode == AnalyzeFile || gameMode == PlayFromGameFile ||\r
+                 gameMode == IcsObserving || gameMode == TwoMachinesPlay    ) ||\r
        gameMode == Training) {\r
       lpProc = MakeProcInstance((FARPROC)TypeInMoveDialog, hInst);\r
       DialogBoxParam(hInst, MAKEINTRESOURCE(DLG_TypeInMove),\r
@@ -7806,6 +7918,7 @@ ConsoleTextSubclass(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
     }\r
     break;\r
   case WM_CHAR:\r
+   if(wParam != '\022') {\r
     if (wParam == '\t') {\r
       if (GetKeyState(VK_SHIFT) < 0) {\r
        /* shifted */\r
@@ -7821,10 +7934,31 @@ ConsoleTextSubclass(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       }\r
     } else {\r
       hInput = GetDlgItem(hwndConsole, OPT_ConsoleInput);\r
-      SetFocus(hInput);\r
+      JAWS_DELETE( SetFocus(hInput); )\r
       SendMessage(hInput, message, wParam, lParam);\r
     }\r
     return 0;\r
+   } // [HGM] navigate: for Ctrl+R, flow into nex case (moved up here) to summon up menu\r
+  case WM_RBUTTONUP:\r
+    if (GetKeyState(VK_SHIFT) & ~1) {\r
+      SendDlgItemMessage(hwndConsole, OPT_ConsoleText, \r
+        WM_COMMAND, MAKEWPARAM(IDM_QuickPaste, 0), 0);\r
+    } else {\r
+      POINT pt;\r
+      HMENU hmenu = LoadIcsTextMenu(icsTextMenuEntry);\r
+      SendMessage(hwnd, EM_EXGETSEL, 0, (LPARAM)&sel);\r
+      if (sel.cpMin == sel.cpMax) {\r
+        EnableMenuItem(hmenu, IDM_Copy, MF_BYCOMMAND|MF_GRAYED);\r
+        EnableMenuItem(hmenu, IDM_QuickPaste, MF_BYCOMMAND|MF_GRAYED);\r
+      }\r
+      if (!IsClipboardFormatAvailable(CF_TEXT)) {\r
+        EnableMenuItem(hmenu, IDM_Paste, MF_BYCOMMAND|MF_GRAYED);\r
+      }\r
+      pt.x = LOWORD(lParam);\r
+      pt.y = HIWORD(lParam);\r
+      MenuPopup(hwnd, pt, hmenu, -1);\r
+    }\r
+    return 0;\r
   case WM_PASTE:\r
     hInput = GetDlgItem(hwndConsole, OPT_ConsoleInput);\r
     SetFocus(hInput);\r
@@ -7846,26 +7980,6 @@ ConsoleTextSubclass(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       SendMessage(hwnd, EM_HIDESELECTION, FALSE, FALSE);\r
     }\r
     return 0;\r
-  case WM_RBUTTONUP:\r
-    if (GetKeyState(VK_SHIFT) & ~1) {\r
-      SendDlgItemMessage(hwndConsole, OPT_ConsoleText, \r
-        WM_COMMAND, MAKEWPARAM(IDM_QuickPaste, 0), 0);\r
-    } else {\r
-      POINT pt;\r
-      HMENU hmenu = LoadIcsTextMenu(icsTextMenuEntry);\r
-      SendMessage(hwnd, EM_EXGETSEL, 0, (LPARAM)&sel);\r
-      if (sel.cpMin == sel.cpMax) {\r
-        EnableMenuItem(hmenu, IDM_Copy, MF_BYCOMMAND|MF_GRAYED);\r
-        EnableMenuItem(hmenu, IDM_QuickPaste, MF_BYCOMMAND|MF_GRAYED);\r
-      }\r
-      if (!IsClipboardFormatAvailable(CF_TEXT)) {\r
-        EnableMenuItem(hmenu, IDM_Paste, MF_BYCOMMAND|MF_GRAYED);\r
-      }\r
-      pt.x = LOWORD(lParam);\r
-      pt.y = HIWORD(lParam);\r
-      MenuPopup(hwnd, pt, hmenu, -1);\r
-    }\r
-    return 0;\r
   case WM_COMMAND:\r
     switch (LOWORD(wParam)) {\r
     case IDM_QuickPaste:\r
@@ -7982,6 +8096,7 @@ ConsoleInputSubclass(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
     case '\021': /* Ctrl+Q */\r
       quoteNextChar = TRUE;\r
       return 0;\r
+    JAWS_REPLAY\r
     default:\r
       break;\r
     }\r
@@ -8115,6 +8230,8 @@ ConsoleWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
       wp.rcNormalPosition.bottom = wpConsole.y + wpConsole.height;\r
       SetWindowPlacement(hDlg, &wp);\r
     }\r
+#if 1\r
+   // [HGM] Chessknight's change 2004-07-13\r
    else { /* Determine Defaults */\r
        WINDOWPLACEMENT wp;\r
        wpConsole.x = winWidth + 1;\r
@@ -8132,6 +8249,7 @@ ConsoleWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
        wp.rcNormalPosition.bottom = wpConsole.y + wpConsole.height;\r
        SetWindowPlacement(hDlg, &wp);\r
     }\r
+#endif\r
     return FALSE;\r
 \r
   case WM_SETFOCUS:\r
@@ -8359,12 +8477,14 @@ DisplayAClock(HDC hdc, int timeRemaining, int highlight,
   }\r
   oldFont = SelectObject(hdc, font[boardSize][CLOCK_FONT]->hf);\r
 \r
+  JAWS_SILENCE\r
+\r
   ExtTextOut(hdc, rect->left + MESSAGE_LINE_LEFTMARGIN,\r
             rect->top, ETO_CLIPPED|ETO_OPAQUE,\r
             rect, str, strlen(str), NULL);\r
   if(logoHeight > 0 && appData.clockMode) {\r
       RECT r;\r
-      sprintf(buf, "%s %s", TimeString(timeRemaining), flagFell);\r
+      sprintf(buf, "%s %s", buf+7, flagFell);\r
       r.top = rect->top + logoHeight/2;\r
       r.left = rect->left;\r
       r.right = rect->right;\r
@@ -9013,6 +9133,9 @@ DisplayMessage(char *str1, char *str2)
   messageText[MESSAGE_TEXT_MAX - 1] = NULLCHAR;\r
 \r
   if (hwndMain == NULL || IsIconic(hwndMain)) return;\r
+\r
+  SAYMACHINEMOVE();\r
+\r
   hdc = GetDC(hwndMain);\r
   oldFont = SelectObject(hdc, font[boardSize][MESSAGE_FONT]->hf);\r
   ExtTextOut(hdc, messageRect.left, messageRect.top, ETO_CLIPPED|ETO_OPAQUE,\r