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