/*\r
* WinBoard.c -- Windows NT front end to XBoard\r
- * $Id: winboard.c,v 2.3 2003/11/25 05:25:20 mann Exp $\r
*\r
* Copyright 1991 by Digital Equipment Corporation, Maynard,\r
- * Massachusetts. Enhancements Copyright\r
- * 1992-2001,2002,2003,2004,2005,2006,2007,2008,2009 Free Software\r
- * Foundation, Inc.\r
+ * Massachusetts. \r
+ *\r
+ * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,\r
+ * 2007, 2008, 2009 Free Software Foundation, Inc.\r
+ *\r
+ * Enhancements Copyright 2005 Alessandro Scotti\r
*\r
* XBoard borrows its colors and the bitmaps.xchess bitmap set from XChess,\r
* which was written and is copyrighted by Wayne Christopher.\r
#endif\r
\r
#include "common.h"\r
-#include "winboard.h"\r
#include "frontend.h"\r
#include "backend.h"\r
+#include "winboard.h"\r
#include "moves.h"\r
#include "wclipbrd.h"\r
-#include "wgamelist.h"\r
-#include "wedittags.h"\r
#include "woptions.h"\r
#include "wsockerr.h"\r
#include "defaults.h"\r
-\r
+#include "help.h"\r
#include "wsnap.h"\r
\r
//void InitEngineUCI( const char * iniDir, ChessProgramState * cps );\r
\r
extern int whiteFlag, blackFlag;\r
Boolean flipClock = FALSE;\r
+extern HANDLE chatHandle[];\r
+extern int ics_type;\r
\r
void DisplayHoldingsCount(HDC hdc, int x, int y, int align, int copyNumber);\r
VOID NewVariantPopup(HWND hwnd);\r
int FinishMove P((ChessMove moveType, int fromX, int fromY, int toX, int toY,\r
/*char*/int promoChar));\r
void AnimateAtomicCapture(int fromX, int fromY, int toX, int toY, int nFrames);\r
-\r
+void DisplayMove P((int moveNumber));\r
+Boolean ParseFEN P((Board board, int *blackPlaysFirst, char *fen));\r
+void ChatPopUp P(());\r
typedef struct {\r
ChessSquare piece; \r
POINT pos; /* window coordinates of current pos */\r
\r
/* Title bar text */\r
char szTitle[] = "WinBoard";\r
-char szConsoleTitle[] = "ICS Interaction";\r
+char szConsoleTitle[] = "I C S Interaction";\r
\r
char *programName;\r
char *settingsFileName;\r
\r
BoardSize boardSize;\r
BOOLEAN chessProgram;\r
-static int boardX, boardY, consoleX, consoleY, consoleW, consoleH;\r
+//static int boardX, boardY;\r
+int minX, minY; // [HGM] placement: volatile limits on upper-left corner\r
static int squareSize, lineGap, minorSize;\r
-static int winWidth, winHeight;\r
+static int winW, winH;\r
static RECT messageRect, whiteRect, blackRect, leftLogoRect, rightLogoRect; // [HGM] logo\r
static int logoHeight = 0;\r
static char messageText[MESSAGE_TEXT_MAX];\r
#define PALETTESIZE 256\r
\r
HINSTANCE hInst; /* current instance */\r
-HWND hwndMain = NULL; /* root window*/\r
-HWND hwndConsole = NULL;\r
BOOLEAN alwaysOnTop = FALSE;\r
RECT boardRect;\r
COLORREF lightSquareColor, darkSquareColor, whitePieceColor, \r
blackSquareBrush, /* [HGM] for band between board and holdings */\r
explodeBrush, /* [HGM] atomic */\r
whitePieceBrush, blackPieceBrush, iconBkgndBrush /*, outlineBrush*/;\r
-static POINT gridEndpoints[(BOARD_SIZE + 1) * 4];\r
-static DWORD gridVertexCounts[(BOARD_SIZE + 1) * 2];\r
+static POINT gridEndpoints[(BOARD_RANKS + BOARD_FILES + 2) * 2];\r
+static DWORD gridVertexCounts[BOARD_RANKS + BOARD_FILES + 2];\r
static HPEN gridPen = NULL;\r
static HPEN highlightPen = NULL;\r
static HPEN premovePen = NULL;\r
static int doingSizing = FALSE;\r
static int lastSizing = 0;\r
static int prevStderrPort;\r
+static HBITMAP userLogo;\r
\r
/* [AS] Support for background textures */\r
#define BACK_TEXTURE_MODE_DISABLED 0\r
static int liteBackTextureMode = BACK_TEXTURE_MODE_PLAIN;\r
static int darkBackTextureMode = BACK_TEXTURE_MODE_PLAIN;\r
static int backTextureSquareSize = 0;\r
-static struct { int x; int y; int mode; } backTextureSquareInfo[BOARD_SIZE][BOARD_SIZE];\r
+static struct { int x; int y; int mode; } backTextureSquareInfo[BOARD_RANKS][BOARD_FILES];\r
\r
#if __GNUC__ && !defined(_winmajor)\r
#define oldDialog 0 /* cygwin doesn't define _winmajor; mingw does */\r
#else\r
+#if defined(_winmajor)\r
#define oldDialog (_winmajor < 4)\r
+#else\r
+#define oldDialog 0\r
+#endif\r
#endif\r
\r
char *defaultTextAttribs[] = \r
};\r
\r
int tinyLayout = 0, smallLayout = 0;\r
-#define MENU_BAR_ITEMS 6\r
+#define MENU_BAR_ITEMS 7\r
char *menuBarText[2][MENU_BAR_ITEMS+1] = {\r
{ "&File", "&Mode", "&Action", "&Step", "&Options", "&Help", NULL },\r
{ "&F", "&M", "&A", "&S", "&O", "&H", NULL },\r
static char *commentText;\r
static int commentIndex;\r
static Boolean editComment = FALSE;\r
-HWND commentDialog = NULL;\r
-BOOLEAN commentDialogUp = FALSE;\r
-static int commentX, commentY, commentH, commentW;\r
\r
-static char *analysisTitle;\r
-static char *analysisText;\r
-HWND analysisDialog = NULL;\r
-BOOLEAN analysisDialogUp = FALSE;\r
-static int analysisX, analysisY, analysisH, analysisW;\r
\r
char errorTitle[MSG_SIZ];\r
char errorMessage[2*MSG_SIZ];\r
int NewGameFRC();\r
int GameListOptions();\r
\r
-HWND moveHistoryDialog = NULL;\r
-BOOLEAN moveHistoryDialogUp = FALSE;\r
-\r
-WindowPlacement wpMoveHistory;\r
+int dummy; // [HGM] for obsolete args\r
\r
+HWND hwndMain = NULL; /* root window*/\r
+HWND hwndConsole = NULL;\r
+HWND commentDialog = NULL;\r
+HWND moveHistoryDialog = NULL;\r
HWND evalGraphDialog = NULL;\r
-BOOLEAN evalGraphDialogUp = FALSE;\r
-\r
-WindowPlacement wpEvalGraph;\r
-\r
HWND engineOutputDialog = NULL;\r
-BOOLEAN engineOutputDialogUp = FALSE;\r
-\r
-WindowPlacement wpEngineOutput;\r
+HWND gameListDialog = NULL;\r
+HWND editTagsDialog = NULL;\r
\r
-VOID MoveHistoryPopUp();\r
-VOID MoveHistoryPopDown();\r
-VOID MoveHistorySet( char movelist[][2*MOVE_LEN], int first, int last, int current, ChessProgramStats_Move * pvInfo );\r
-BOOL MoveHistoryIsUp();\r
+int commentUp = FALSE;\r
\r
-VOID EvalGraphSet( int first, int last, int current, ChessProgramStats_Move * pvInfo );\r
-VOID EvalGraphPopUp();\r
-VOID EvalGraphPopDown();\r
-BOOL EvalGraphIsUp();\r
+WindowPlacement wpMain;\r
+WindowPlacement wpConsole;\r
+WindowPlacement wpComment;\r
+WindowPlacement wpMoveHistory;\r
+WindowPlacement wpEvalGraph;\r
+WindowPlacement wpEngineOutput;\r
+WindowPlacement wpGameList;\r
+WindowPlacement wpTags;\r
\r
-VOID EngineOutputPopUp();\r
-VOID EngineOutputPopDown();\r
-BOOL EngineOutputIsUp();\r
-VOID EngineOutputUpdate( FrontEndProgramStats * stats );\r
+VOID EngineOptionsPopup(); // [HGM] settings\r
\r
VOID GothicPopUp(char *title, VariantClass variant);\r
/*\r
DrawMenuBar(hwndMain);\r
}\r
\r
+/*static*/ int fromX = -1, fromY = -1, toX, toY; // [HGM] moved upstream, so JAWS can use them\r
+\r
+/* JAWS preparation patch (WinBoard for the sight impaired). Define required insertions as empty */\r
+#ifdef JAWS\r
+#include "jaws.c"\r
+#else\r
+#define JAWS_INIT\r
+#define JAWS_ARGS\r
+#define JAWS_ALT_INTERCEPT\r
+#define JAWS_KB_NAVIGATION\r
+#define JAWS_MENU_ITEMS\r
+#define JAWS_SILENCE\r
+#define JAWS_REPLAY\r
+#define JAWS_ACCEL\r
+#define JAWS_COPYRIGHT\r
+#define JAWS_DELETE(X) X\r
+#define SAYMACHINEMOVE()\r
+#define SAY(X)\r
+#endif\r
+\r
/*---------------------------------------------------------------------------*\\r
*\r
* WinMain\r
return (FALSE);\r
}\r
\r
+ JAWS_INIT\r
+\r
// InitCommonControlsEx(&ex);\r
InitCommonControls();\r
\r
0, /* lowest message to examine */\r
0)) /* highest message to examine */\r
{\r
+\r
+ if(msg.message == WM_CHAR && msg.wParam == '\t') {\r
+ // [HGM] navigate: switch between all windows with tab\r
+ HWND e1 = NULL, e2 = NULL, mh = NULL, hInput = NULL, hText = NULL;\r
+ int i, currentElement = 0;\r
+\r
+ // first determine what element of the chain we come from (if any)\r
+ if(appData.icsActive) {\r
+ hInput = GetDlgItem(hwndConsole, OPT_ConsoleInput);\r
+ hText = GetDlgItem(hwndConsole, OPT_ConsoleText);\r
+ }\r
+ if(engineOutputDialog && EngineOutputIsUp()) {\r
+ e1 = GetDlgItem(engineOutputDialog, IDC_EngineMemo1);\r
+ e2 = GetDlgItem(engineOutputDialog, IDC_EngineMemo2);\r
+ }\r
+ if(moveHistoryDialog && MoveHistoryIsUp()) {\r
+ mh = GetDlgItem(moveHistoryDialog, IDC_MoveHistory);\r
+ }\r
+ if(msg.hwnd == hwndMain) currentElement = 7 ; else\r
+ if(msg.hwnd == engineOutputDialog) currentElement = 2; else\r
+ if(msg.hwnd == e1) currentElement = 2; else\r
+ if(msg.hwnd == e2) currentElement = 3; else\r
+ if(msg.hwnd == moveHistoryDialog) currentElement = 4; else\r
+ if(msg.hwnd == mh) currentElement = 4; else\r
+ if(msg.hwnd == evalGraphDialog) currentElement = 6; else\r
+ if(msg.hwnd == hText) currentElement = 5; else\r
+ if(msg.hwnd == hInput) currentElement = 6; else\r
+ for (i = 0; i < N_BUTTONS; i++) {\r
+ if (buttonDesc[i].hwnd == msg.hwnd) { currentElement = 1; break; }\r
+ }\r
+\r
+ // determine where to go to\r
+ if(currentElement) { HWND h = NULL; int direction = GetKeyState(VK_SHIFT) < 0 ? -1 : 1;\r
+ do {\r
+ currentElement = (currentElement + direction) % 7;\r
+ switch(currentElement) {\r
+ case 0:\r
+ h = hwndMain; break; // passing this case always makes the loop exit\r
+ case 1:\r
+ h = buttonDesc[0].hwnd; break; // could be NULL\r
+ case 2:\r
+ if(!EngineOutputIsUp()) continue; // skip closed auxiliary windows\r
+ h = e1; break;\r
+ case 3:\r
+ if(!EngineOutputIsUp()) continue;\r
+ h = e2; break;\r
+ case 4:\r
+ if(!MoveHistoryIsUp()) continue;\r
+ h = mh; break;\r
+// case 6: // input to eval graph does not seem to get here!\r
+// if(!EvalGraphIsUp()) continue;\r
+// h = evalGraphDialog; break;\r
+ case 5:\r
+ if(!appData.icsActive) continue;\r
+ SAY("display");\r
+ h = hText; break;\r
+ case 6:\r
+ if(!appData.icsActive) continue;\r
+ SAY("input");\r
+ h = hInput; break;\r
+ }\r
+ } while(h == 0);\r
+\r
+ if(currentElement > 4 && IsIconic(hwndConsole)) ShowWindow(hwndConsole, SW_RESTORE);\r
+ if(currentElement < 5 && IsIconic(hwndMain)) ShowWindow(hwndMain, SW_RESTORE); // all open together\r
+ SetFocus(h);\r
+\r
+ continue; // this message now has been processed\r
+ }\r
+ }\r
+\r
if (!(commentDialog && IsDialogMessage(commentDialog, &msg)) &&\r
!(moveHistoryDialog && IsDialogMessage(moveHistoryDialog, &msg)) &&\r
!(evalGraphDialog && IsDialogMessage(evalGraphDialog, &msg)) &&\r
!(editTagsDialog && IsDialogMessage(editTagsDialog, &msg)) &&\r
!(gameListDialog && IsDialogMessage(gameListDialog, &msg)) &&\r
!(errorDialog && IsDialogMessage(errorDialog, &msg)) &&\r
- !(!frozen && TranslateAccelerator(hwndMain, hAccelMain, &msg)) &&\r
+ !(!frozen && TranslateAccelerator(hwndMain, hAccelMain, &msg)) && JAWS_ACCEL\r
!(!hwndConsole && TranslateAccelerator(hwndMain, hAccelNoICS, &msg)) &&\r
!(!hwndConsole && TranslateAccelerator(hwndMain, hAccelNoAlt, &msg))) {\r
+ int done = 0, i; // [HGM] chat: dispatch cat-box messages\r
+ for(i=0; i<MAX_CHAT; i++) \r
+ if(chatHandle[i] && IsDialogMessage(chatHandle[i], &msg)) {\r
+ done = 1; break;\r
+ }\r
+ if(done) continue; // [HGM] chat: end patch\r
TranslateMessage(&msg); /* Translates virtual key codes */\r
DispatchMessage(&msg); /* Dispatches message to window */\r
}\r
*\r
\*---------------------------------------------------------------------------*/\r
\r
+void\r
+SetUserLogo()\r
+{ // update user logo if necessary\r
+ static char oldUserName[MSG_SIZ], *curName;\r
+\r
+ if(appData.autoLogo) {\r
+ curName = UserName();\r
+ if(strcmp(curName, oldUserName)) {\r
+ sprintf(oldUserName, "logos\\%s.bmp", curName);\r
+ userLogo = LoadImage( 0, oldUserName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE ); \r
+ strcpy(oldUserName, curName);\r
+ }\r
+ }\r
+}\r
+\r
BOOL\r
InitApplication(HINSTANCE hInstance)\r
{\r
int screenHeight, screenWidth;\r
\r
void\r
-EnsureOnScreen(int *x, int *y)\r
+EnsureOnScreen(int *x, int *y, int minX, int minY)\r
{\r
// int gap = GetSystemMetrics(SM_CYFRAME) + GetSystemMetrics(SM_CYCAPTION);\r
/* Be sure window at (x,y) is not off screen (or even mostly off screen) */\r
if (*x > screenWidth - 32) *x = 0;\r
if (*y > screenHeight - 32) *y = 0;\r
- if (*x < 0) *x = 0;\r
- if (*y < 0) *y = 0;\r
-// if (*x < 10) *x = 10;\r
-// if (*y < gap) *y = gap;\r
+ if (*x < minX) *x = minX;\r
+ if (*y < minY) *y = minY;\r
}\r
\r
BOOL\r
GetCurrentDirectory(MSG_SIZ, installDir);\r
}\r
gameInfo.boardWidth = gameInfo.boardHeight = 8; // [HGM] won't have open window otherwise\r
+ screenWidth = screenHeight = 1000; // [HGM] placement: kludge to allow calling EnsureOnScreen from InitAppData\r
InitAppData(lpCmdLine); /* Get run-time parameters */\r
if (appData.debugMode) {\r
debugFP = fopen(appData.nameOfDebugFile, "w");\r
fprintf( debugFP, "Unable to load logo bitmap '%s'\n", appData.secondLogo );\r
}\r
} else if(appData.autoLogo) {\r
+ char buf[MSG_SIZ];\r
+ if(appData.icsActive) { // [HGM] logo: in ICS mode second can be used for ICS\r
+ sprintf(buf, "logos\\%s.bmp", appData.icsHost);\r
+ second.programLogo = LoadImage( 0, buf, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );\r
+ } else\r
if(appData.secondDirectory && appData.secondDirectory[0]) {\r
- char buf[MSG_SIZ];\r
sprintf(buf, "%s\\logo.bmp", appData.secondDirectory);\r
second.programLogo = LoadImage( 0, buf, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE ); \r
}\r
}\r
\r
+ SetUserLogo();\r
+\r
iconWhite = LoadIcon(hInstance, "icon_white");\r
iconBlack = LoadIcon(hInstance, "icon_black");\r
iconCurrent = iconWhite;\r
for (ibs = (int) NUM_SIZES - 1; ibs >= 0; ibs--) {\r
/* Compute window size for each board size, and use the largest\r
size that fits on this screen as the default. */\r
- InitDrawingSizes((BoardSize)ibs, 0);\r
+ InitDrawingSizes((BoardSize)(ibs+1000), 0);\r
if (boardSize == (BoardSize)-1 &&\r
- winHeight <= screenHeight\r
+ winH <= screenHeight\r
- GetSystemMetrics(SM_CYFRAME) - GetSystemMetrics(SM_CYCAPTION) - 10\r
- && winWidth <= screenWidth) {\r
+ && winW <= screenWidth) {\r
boardSize = (BoardSize)ibs;\r
}\r
}\r
InitBackEnd2();\r
\r
/* Make the window visible; update its client area; and return "success" */\r
- EnsureOnScreen(&boardX, &boardY);\r
+ EnsureOnScreen(&wpMain.x, &wpMain.y, minX, minY);\r
wp.length = sizeof(WINDOWPLACEMENT);\r
wp.flags = 0;\r
wp.showCmd = nCmdShow;\r
wp.ptMaxPosition.x = wp.ptMaxPosition.y = 0;\r
- wp.rcNormalPosition.left = boardX;\r
- wp.rcNormalPosition.right = boardX + winWidth;\r
- wp.rcNormalPosition.top = boardY;\r
- wp.rcNormalPosition.bottom = boardY + winHeight;\r
+ wp.rcNormalPosition.left = wpMain.x;\r
+ wp.rcNormalPosition.right = wpMain.x + wpMain.width;\r
+ wp.rcNormalPosition.top = wpMain.y;\r
+ wp.rcNormalPosition.bottom = wpMain.y + wpMain.height;\r
SetWindowPlacement(hwndMain, &wp);\r
\r
- SetWindowPos(hwndMain, alwaysOnTop ? HWND_TOPMOST : HWND_NOTOPMOST,\r
+ if(!appData.noGUI) SetWindowPos(hwndMain, alwaysOnTop ? HWND_TOPMOST : HWND_NOTOPMOST,\r
0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);\r
\r
-#if 0\r
- /* [AS] Disable the FRC stuff if not playing the proper variant */\r
- if( gameInfo.variant != VariantFischeRandom ) {\r
- EnableMenuItem( GetMenu(hwndMain), IDM_NewGameFRC, MF_GRAYED );\r
- }\r
-#endif\r
if (hwndConsole) {\r
#if AOT_CONSOLE\r
SetWindowPos(hwndConsole, alwaysOnTop ? HWND_TOPMOST : HWND_NOTOPMOST,\r
#endif\r
ShowWindow(hwndConsole, nCmdShow);\r
}\r
- UpdateWindow(hwnd);\r
+ if(!appData.noGUI) UpdateWindow(hwnd); else ShowWindow(hwnd, SW_MINIMIZE);\r
+ if(gameListDialog) SetFocus(gameListDialog); // [HGM] jaws: for if we clicked multi-game game file\r
\r
return TRUE;\r
\r
typedef enum {\r
ArgString, ArgInt, ArgFloat, ArgBoolean, ArgTrue, ArgFalse, ArgNone, \r
ArgColor, ArgAttribs, ArgFilename, ArgBoardSize, ArgFont, ArgCommSettings,\r
- ArgSettingsFilename\r
+ ArgSettingsFilename,\r
+ ArgX, ArgY, ArgZ // [HGM] placement: for window-placement options stored relative to main window\r
} ArgType;\r
\r
+typedef void *ArgIniType;\r
+#define INVALID (ArgIniType) 6915 /* Some number unlikely to be needed as default for anything */\r
+\r
typedef struct {\r
char *argName;\r
ArgType argType;\r
***/\r
LPVOID argLoc;\r
BOOL save;\r
+ ArgIniType defaultValue;\r
} ArgDescriptor;\r
\r
int junk;\r
+\r
+#define XBOARD FALSE\r
+\r
ArgDescriptor argDescriptors[] = {\r
/* positional arguments */\r
- { "loadGameFile", ArgFilename, (LPVOID) &appData.loadGameFile, FALSE },\r
- { "", ArgNone, NULL },\r
+ { "loadGameFile", ArgFilename, (LPVOID) &appData.loadGameFile, FALSE, INVALID },\r
+ { "", ArgNone, NULL, FALSE, INVALID },\r
/* keyword arguments */\r
- { "whitePieceColor", ArgColor, (LPVOID) &whitePieceColor, TRUE },\r
- { "wpc", ArgColor, (LPVOID) &whitePieceColor, FALSE },\r
- { "blackPieceColor", ArgColor, (LPVOID) &blackPieceColor, TRUE },\r
- { "bpc", ArgColor, (LPVOID) &blackPieceColor, FALSE },\r
- { "lightSquareColor", ArgColor, (LPVOID) &lightSquareColor, TRUE },\r
- { "lsc", ArgColor, (LPVOID) &lightSquareColor, FALSE },\r
- { "darkSquareColor", ArgColor, (LPVOID) &darkSquareColor, TRUE },\r
- { "dsc", ArgColor, (LPVOID) &darkSquareColor, FALSE },\r
- { "highlightSquareColor", ArgColor, (LPVOID) &highlightSquareColor, TRUE },\r
- { "hsc", ArgColor, (LPVOID) &highlightSquareColor, FALSE },\r
- { "premoveHighlightColor", ArgColor, (LPVOID) &premoveHighlightColor, TRUE },\r
- { "phc", ArgColor, (LPVOID) &premoveHighlightColor, FALSE },\r
- { "movesPerSession", ArgInt, (LPVOID) &appData.movesPerSession, TRUE },\r
- { "mps", ArgInt, (LPVOID) &appData.movesPerSession, FALSE },\r
- { "initString", ArgString, (LPVOID) &appData.initString, FALSE },\r
- { "firstInitString", ArgString, (LPVOID) &appData.initString, FALSE },\r
- { "secondInitString", ArgString, (LPVOID) &appData.secondInitString, FALSE },\r
+ JAWS_ARGS\r
+ { "whitePieceColor", ArgColor, (LPVOID) &whitePieceColor, TRUE, INVALID },\r
+ { "wpc", ArgColor, (LPVOID) &whitePieceColor, FALSE, INVALID },\r
+ { "blackPieceColor", ArgColor, (LPVOID) &blackPieceColor, TRUE, INVALID },\r
+ { "bpc", ArgColor, (LPVOID) &blackPieceColor, FALSE, INVALID },\r
+ { "lightSquareColor", ArgColor, (LPVOID) &lightSquareColor, TRUE, INVALID },\r
+ { "lsc", ArgColor, (LPVOID) &lightSquareColor, FALSE, INVALID },\r
+ { "darkSquareColor", ArgColor, (LPVOID) &darkSquareColor, TRUE, INVALID },\r
+ { "dsc", ArgColor, (LPVOID) &darkSquareColor, FALSE, INVALID },\r
+ { "highlightSquareColor", ArgColor, (LPVOID) &highlightSquareColor, TRUE, INVALID },\r
+ { "hsc", ArgColor, (LPVOID) &highlightSquareColor, FALSE, INVALID },\r
+ { "premoveHighlightColor", ArgColor, (LPVOID) &premoveHighlightColor, TRUE, INVALID },\r
+ { "phc", ArgColor, (LPVOID) &premoveHighlightColor, FALSE, INVALID },\r
+ { "movesPerSession", ArgInt, (LPVOID) &appData.movesPerSession, TRUE, (ArgIniType) MOVES_PER_SESSION },\r
+ { "mps", ArgInt, (LPVOID) &appData.movesPerSession, FALSE, INVALID },\r
+ { "initString", ArgString, (LPVOID) &appData.initString, FALSE, INVALID },\r
+ { "firstInitString", ArgString, (LPVOID) &appData.initString, FALSE, (ArgIniType) INIT_STRING },\r
+ { "secondInitString", ArgString, (LPVOID) &appData.secondInitString, FALSE, (ArgIniType) INIT_STRING },\r
{ "firstComputerString", ArgString, (LPVOID) &appData.firstComputerString,\r
- FALSE },\r
+ FALSE, (ArgIniType) COMPUTER_STRING },\r
{ "secondComputerString", ArgString, (LPVOID) &appData.secondComputerString,\r
- FALSE },\r
+ FALSE, (ArgIniType) COMPUTER_STRING },\r
{ "firstChessProgram", ArgFilename, (LPVOID) &appData.firstChessProgram,\r
- FALSE },\r
- { "fcp", ArgFilename, (LPVOID) &appData.firstChessProgram, FALSE },\r
+ FALSE, (ArgIniType) FIRST_CHESS_PROGRAM },\r
+ { "fcp", ArgFilename, (LPVOID) &appData.firstChessProgram, FALSE, INVALID },\r
{ "secondChessProgram", ArgFilename, (LPVOID) &appData.secondChessProgram,\r
- FALSE },\r
- { "scp", ArgFilename, (LPVOID) &appData.secondChessProgram, FALSE },\r
- { "firstPlaysBlack", ArgBoolean, (LPVOID) &appData.firstPlaysBlack, FALSE },\r
- { "fb", ArgTrue, (LPVOID) &appData.firstPlaysBlack, FALSE },\r
- { "xfb", ArgFalse, (LPVOID) &appData.firstPlaysBlack, FALSE },\r
- { "-fb", ArgFalse, (LPVOID) &appData.firstPlaysBlack, FALSE },\r
- { "noChessProgram", ArgBoolean, (LPVOID) &appData.noChessProgram, FALSE },\r
- { "ncp", ArgTrue, (LPVOID) &appData.noChessProgram, FALSE },\r
- { "xncp", ArgFalse, (LPVOID) &appData.noChessProgram, FALSE },\r
- { "-ncp", ArgFalse, (LPVOID) &appData.noChessProgram, FALSE },\r
- { "firstHost", ArgString, (LPVOID) &appData.firstHost, FALSE },\r
- { "fh", ArgString, (LPVOID) &appData.firstHost, FALSE },\r
- { "secondHost", ArgString, (LPVOID) &appData.secondHost, FALSE },\r
- { "sh", ArgString, (LPVOID) &appData.secondHost, FALSE },\r
- { "firstDirectory", ArgFilename, (LPVOID) &appData.firstDirectory, FALSE },\r
- { "fd", ArgFilename, (LPVOID) &appData.firstDirectory, FALSE },\r
- { "secondDirectory", ArgFilename, (LPVOID) &appData.secondDirectory, FALSE },\r
- { "sd", ArgFilename, (LPVOID) &appData.secondDirectory, FALSE },\r
- /*!!bitmapDirectory?*/\r
- { "remoteShell", ArgFilename, (LPVOID) &appData.remoteShell, FALSE },\r
- { "rsh", ArgFilename, (LPVOID) &appData.remoteShell, FALSE },\r
- { "remoteUser", ArgString, (LPVOID) &appData.remoteUser, FALSE },\r
- { "ruser", ArgString, (LPVOID) &appData.remoteUser, FALSE },\r
- { "timeDelay", ArgFloat, (LPVOID) &appData.timeDelay, TRUE },\r
- { "td", ArgFloat, (LPVOID) &appData.timeDelay, FALSE },\r
- { "timeControl", ArgString, (LPVOID) &appData.timeControl, TRUE },\r
- { "tc", ArgString, (LPVOID) &appData.timeControl, FALSE },\r
- { "timeIncrement", ArgInt, (LPVOID) &appData.timeIncrement, TRUE },\r
- { "inc", ArgInt, (LPVOID) &appData.timeIncrement, FALSE },\r
- { "internetChessServerMode", ArgBoolean, (LPVOID) &appData.icsActive, FALSE },\r
- { "ics", ArgTrue, (LPVOID) &appData.icsActive, FALSE },\r
- { "xics", ArgFalse, (LPVOID) &appData.icsActive, FALSE },\r
- { "-ics", ArgFalse, (LPVOID) &appData.icsActive, FALSE },\r
- { "internetChessServerHost", ArgString, (LPVOID) &appData.icsHost, FALSE },\r
- { "icshost", ArgString, (LPVOID) &appData.icsHost, FALSE },\r
- { "internetChessServerPort", ArgString, (LPVOID) &appData.icsPort, FALSE },\r
- { "icsport", ArgString, (LPVOID) &appData.icsPort, FALSE },\r
- { "internetChessServerCommPort", ArgString, (LPVOID) &appData.icsCommPort, FALSE },\r
- { "icscomm", ArgString, (LPVOID) &appData.icsCommPort, FALSE },\r
- { "internetChessServerComPort", ArgString, (LPVOID) &appData.icsCommPort, FALSE },\r
- { "icscom", ArgString, (LPVOID) &appData.icsCommPort, FALSE },\r
- { "internetChessServerLogonScript", ArgFilename, (LPVOID) &appData.icsLogon, FALSE },\r
- { "icslogon", ArgFilename, (LPVOID) &appData.icsLogon, FALSE },\r
- { "useTelnet", ArgBoolean, (LPVOID) &appData.useTelnet, FALSE },\r
- { "telnet", ArgTrue, (LPVOID) &appData.useTelnet, FALSE },\r
- { "xtelnet", ArgFalse, (LPVOID) &appData.useTelnet, FALSE },\r
- { "-telnet", ArgFalse, (LPVOID) &appData.useTelnet, FALSE },\r
- { "telnetProgram", ArgFilename, (LPVOID) &appData.telnetProgram, FALSE },\r
- { "icshelper", ArgFilename, (LPVOID) &appData.icsHelper, FALSE },\r
- { "gateway", ArgString, (LPVOID) &appData.gateway, FALSE },\r
- { "loadGameFile", ArgFilename, (LPVOID) &appData.loadGameFile, FALSE },\r
- { "lgf", ArgFilename, (LPVOID) &appData.loadGameFile, FALSE },\r
- { "loadGameIndex", ArgInt, (LPVOID) &appData.loadGameIndex, FALSE },\r
- { "lgi", ArgInt, (LPVOID) &appData.loadGameIndex, FALSE },\r
- { "saveGameFile", ArgFilename, (LPVOID) &appData.saveGameFile, TRUE },\r
- { "sgf", ArgFilename, (LPVOID) &appData.saveGameFile, FALSE },\r
- { "autoSaveGames", ArgBoolean, (LPVOID) &appData.autoSaveGames, TRUE },\r
- { "autosave", ArgTrue, (LPVOID) &appData.autoSaveGames, FALSE },\r
- { "xautosave", ArgFalse, (LPVOID) &appData.autoSaveGames, FALSE },\r
- { "-autosave", ArgFalse, (LPVOID) &appData.autoSaveGames, FALSE },\r
- { "loadPositionFile", ArgFilename, (LPVOID) &appData.loadPositionFile, FALSE },\r
- { "lpf", ArgFilename, (LPVOID) &appData.loadPositionFile, FALSE },\r
- { "loadPositionIndex", ArgInt, (LPVOID) &appData.loadPositionIndex, FALSE },\r
- { "lpi", ArgInt, (LPVOID) &appData.loadPositionIndex, FALSE },\r
- { "savePositionFile", ArgFilename, (LPVOID) &appData.savePositionFile, FALSE },\r
- { "spf", ArgFilename, (LPVOID) &appData.savePositionFile, FALSE },\r
- { "matchMode", ArgBoolean, (LPVOID) &appData.matchMode, FALSE },\r
- { "mm", ArgTrue, (LPVOID) &appData.matchMode, FALSE },\r
- { "xmm", ArgFalse, (LPVOID) &appData.matchMode, FALSE },\r
- { "-mm", ArgFalse, (LPVOID) &appData.matchMode, FALSE },\r
- { "matchGames", ArgInt, (LPVOID) &appData.matchGames, FALSE },\r
- { "mg", ArgInt, (LPVOID) &appData.matchGames, FALSE },\r
- { "monoMode", ArgBoolean, (LPVOID) &appData.monoMode, TRUE },\r
- { "mono", ArgTrue, (LPVOID) &appData.monoMode, FALSE },\r
- { "xmono", ArgFalse, (LPVOID) &appData.monoMode, FALSE },\r
- { "-mono", ArgFalse, (LPVOID) &appData.monoMode, FALSE },\r
- { "debugMode", ArgBoolean, (LPVOID) &appData.debugMode, FALSE },\r
- { "debug", ArgTrue, (LPVOID) &appData.debugMode, FALSE },\r
- { "xdebug", ArgFalse, (LPVOID) &appData.debugMode, FALSE },\r
- { "-debug", ArgFalse, (LPVOID) &appData.debugMode, FALSE },\r
- { "clockMode", ArgBoolean, (LPVOID) &appData.clockMode, FALSE },\r
- { "clock", ArgTrue, (LPVOID) &appData.clockMode, FALSE },\r
- { "xclock", ArgFalse, (LPVOID) &appData.clockMode, FALSE },\r
- { "-clock", ArgFalse, (LPVOID) &appData.clockMode, FALSE },\r
- { "searchTime", ArgString, (LPVOID) &appData.searchTime, FALSE },\r
- { "st", ArgString, (LPVOID) &appData.searchTime, FALSE },\r
- { "searchDepth", ArgInt, (LPVOID) &appData.searchDepth, FALSE },\r
- { "depth", ArgInt, (LPVOID) &appData.searchDepth, FALSE },\r
- { "showCoords", ArgBoolean, (LPVOID) &appData.showCoords, TRUE },\r
- { "coords", ArgTrue, (LPVOID) &appData.showCoords, FALSE },\r
- { "xcoords", ArgFalse, (LPVOID) &appData.showCoords, FALSE },\r
- { "-coords", ArgFalse, (LPVOID) &appData.showCoords, FALSE },\r
- { "showThinking", ArgBoolean, (LPVOID) &appData.showThinking, TRUE },\r
- { "thinking", ArgTrue, (LPVOID) &appData.showThinking, FALSE },\r
- { "xthinking", ArgFalse, (LPVOID) &appData.showThinking, FALSE },\r
- { "-thinking", ArgFalse, (LPVOID) &appData.showThinking, FALSE },\r
- { "ponderNextMove", ArgBoolean, (LPVOID) &appData.ponderNextMove, TRUE },\r
- { "ponder", ArgTrue, (LPVOID) &appData.ponderNextMove, FALSE },\r
- { "xponder", ArgFalse, (LPVOID) &appData.ponderNextMove, FALSE },\r
- { "-ponder", ArgFalse, (LPVOID) &appData.ponderNextMove, FALSE },\r
- { "periodicUpdates", ArgBoolean, (LPVOID) &appData.periodicUpdates, TRUE },\r
- { "periodic", ArgTrue, (LPVOID) &appData.periodicUpdates, FALSE },\r
- { "xperiodic", ArgFalse, (LPVOID) &appData.periodicUpdates, FALSE },\r
- { "-periodic", ArgFalse, (LPVOID) &appData.periodicUpdates, FALSE },\r
- { "popupExitMessage", ArgBoolean, (LPVOID) &appData.popupExitMessage, TRUE },\r
- { "exit", ArgTrue, (LPVOID) &appData.popupExitMessage, FALSE },\r
- { "xexit", ArgFalse, (LPVOID) &appData.popupExitMessage, FALSE },\r
- { "-exit", ArgFalse, (LPVOID) &appData.popupExitMessage, FALSE },\r
- { "popupMoveErrors", ArgBoolean, (LPVOID) &appData.popupMoveErrors, TRUE },\r
- { "popup", ArgTrue, (LPVOID) &appData.popupMoveErrors, FALSE },\r
- { "xpopup", ArgFalse, (LPVOID) &appData.popupMoveErrors, FALSE },\r
- { "-popup", ArgFalse, (LPVOID) &appData.popupMoveErrors, FALSE },\r
+ FALSE, (ArgIniType) SECOND_CHESS_PROGRAM },\r
+ { "scp", ArgFilename, (LPVOID) &appData.secondChessProgram, FALSE, INVALID },\r
+ { "firstPlaysBlack", ArgBoolean, (LPVOID) &appData.firstPlaysBlack, FALSE, FALSE },\r
+ { "fb", ArgTrue, (LPVOID) &appData.firstPlaysBlack, FALSE, FALSE },\r
+ { "xfb", ArgFalse, (LPVOID) &appData.firstPlaysBlack, FALSE, INVALID },\r
+ { "-fb", ArgFalse, (LPVOID) &appData.firstPlaysBlack, FALSE, INVALID },\r
+ { "noChessProgram", ArgBoolean, (LPVOID) &appData.noChessProgram, FALSE, FALSE },\r
+ { "ncp", ArgTrue, (LPVOID) &appData.noChessProgram, FALSE, INVALID },\r
+ { "xncp", ArgFalse, (LPVOID) &appData.noChessProgram, FALSE, INVALID },\r
+ { "-ncp", ArgFalse, (LPVOID) &appData.noChessProgram, FALSE, INVALID },\r
+ { "firstHost", ArgString, (LPVOID) &appData.firstHost, FALSE, (ArgIniType) FIRST_HOST },\r
+ { "fh", ArgString, (LPVOID) &appData.firstHost, FALSE, INVALID },\r
+ { "secondHost", ArgString, (LPVOID) &appData.secondHost, FALSE, (ArgIniType) SECOND_HOST },\r
+ { "sh", ArgString, (LPVOID) &appData.secondHost, FALSE, INVALID },\r
+ { "firstDirectory", ArgFilename, (LPVOID) &appData.firstDirectory, FALSE, (ArgIniType) FIRST_DIRECTORY },\r
+ { "fd", ArgFilename, (LPVOID) &appData.firstDirectory, FALSE, INVALID },\r
+ { "secondDirectory", ArgFilename, (LPVOID) &appData.secondDirectory, FALSE, (ArgIniType) SECOND_DIRECTORY },\r
+ { "sd", ArgFilename, (LPVOID) &appData.secondDirectory, FALSE, INVALID },\r
+\r
+ /* some options only used by the XBoard front end, and ignored in WinBoard */\r
+ /* Their saving is controlled by XBOARD, which in WinBoard is defined as FALSE */\r
+ { "internetChessServerInputBox", ArgBoolean, (LPVOID) &appData.icsInputBox, XBOARD, (ArgIniType) FALSE },\r
+ { "icsinput", ArgTrue, (LPVOID) &appData.icsInputBox, FALSE, INVALID },\r
+ { "xicsinput", ArgFalse, (LPVOID) &appData.icsInputBox, FALSE, INVALID },\r
+ { "cmail", ArgString, (LPVOID) &appData.cmailGameName, FALSE, (ArgIniType) "" },\r
+ { "soundProgram", ArgFilename, (LPVOID) &appData.soundProgram, XBOARD, (ArgIniType) "play" },\r
+ { "fontSizeTolerance", ArgInt, (LPVOID) &appData.fontSizeTolerance, XBOARD, (ArgIniType) 4 },\r
+ { "lowTimeWarningColor", ArgColor, (LPVOID) &appData.lowTimeWarningColor, XBOARD, \r
+ (ArgIniType) LOWTIMEWARNING_COLOR },\r
+ { "lowTimeWarning", ArgBoolean, (LPVOID) &appData.lowTimeWarning, XBOARD, (ArgIniType) FALSE },\r
+ { "titleInWindow", ArgBoolean, (LPVOID) &appData.titleInWindow, XBOARD, (ArgIniType) FALSE },\r
+ { "title", ArgTrue, (LPVOID) &appData.titleInWindow, FALSE, INVALID },\r
+ { "xtitle", ArgFalse, (LPVOID) &appData.titleInWindow, FALSE, INVALID },\r
+ { "flashCount", ArgInt, (LPVOID) &appData.flashCount, XBOARD, (ArgIniType) FLASH_COUNT },\r
+ { "flashRate", ArgInt, (LPVOID) &appData.flashRate, XBOARD, (ArgIniType) FLASH_RATE },\r
+ { "pixmapDirectory", ArgFilename, (LPVOID) &appData.pixmapDirectory, XBOARD, (ArgIniType) "" },\r
+ { "pixmap", ArgFilename, (LPVOID) &appData.pixmapDirectory, FALSE, INVALID },\r
+ { "bitmapDirectory", ArgFilename, (LPVOID) &appData.bitmapDirectory, XBOARD, (ArgIniType) "" },\r
+ { "bm", ArgFilename, (LPVOID) &appData.bitmapDirectory, FALSE, INVALID },\r
+ { "msLoginDelay", ArgInt, (LPVOID) &appData.msLoginDelay, XBOARD, (ArgIniType) MS_LOGIN_DELAY },\r
+ { "pasteSelection", ArgBoolean, (LPVOID) &appData.pasteSelection, XBOARD, (ArgIniType) FALSE },\r
+\r
+ { "remoteShell", ArgFilename, (LPVOID) &appData.remoteShell, FALSE, (ArgIniType) REMOTE_SHELL },\r
+ { "rsh", ArgFilename, (LPVOID) &appData.remoteShell, FALSE, INVALID },\r
+ { "remoteUser", ArgString, (LPVOID) &appData.remoteUser, FALSE, INVALID },\r
+ { "ruser", ArgString, (LPVOID) &appData.remoteUser, FALSE, INVALID },\r
+ { "timeDelay", ArgFloat, (LPVOID) &appData.timeDelay, TRUE, INVALID },\r
+ { "td", ArgFloat, (LPVOID) &appData.timeDelay, FALSE, INVALID },\r
+ { "timeControl", ArgString, (LPVOID) &appData.timeControl, TRUE, (ArgIniType) TIME_CONTROL },\r
+ { "tc", ArgString, (LPVOID) &appData.timeControl, FALSE, INVALID },\r
+ { "timeIncrement", ArgInt, (LPVOID) &appData.timeIncrement, TRUE, (ArgIniType) TIME_INCREMENT },\r
+ { "inc", ArgInt, (LPVOID) &appData.timeIncrement, FALSE, INVALID },\r
+ { "internetChessServerMode", ArgBoolean, (LPVOID) &appData.icsActive, FALSE, INVALID },\r
+ { "ics", ArgTrue, (LPVOID) &appData.icsActive, FALSE, (ArgIniType) FALSE },\r
+ { "xics", ArgFalse, (LPVOID) &appData.icsActive, FALSE, INVALID },\r
+ { "-ics", ArgFalse, (LPVOID) &appData.icsActive, FALSE, INVALID },\r
+ { "internetChessServerHost", ArgString, (LPVOID) &appData.icsHost, FALSE, (ArgIniType) "" },\r
+ { "icshost", ArgString, (LPVOID) &appData.icsHost, FALSE, INVALID },\r
+ { "internetChessServerPort", ArgString, (LPVOID) &appData.icsPort, FALSE, (ArgIniType) ICS_PORT },\r
+ { "icsport", ArgString, (LPVOID) &appData.icsPort, FALSE, INVALID },\r
+ { "internetChessServerCommPort", ArgString, (LPVOID) &appData.icsCommPort, FALSE, (ArgIniType) ICS_COMM_PORT },\r
+ { "icscomm", ArgString, (LPVOID) &appData.icsCommPort, FALSE, INVALID },\r
+ { "internetChessServerComPort", ArgString, (LPVOID) &appData.icsCommPort, FALSE, INVALID },\r
+ { "icscom", ArgString, (LPVOID) &appData.icsCommPort, FALSE, INVALID },\r
+ { "internetChessServerLogonScript", ArgFilename, (LPVOID) &appData.icsLogon, FALSE, (ArgIniType) ICS_LOGON },\r
+ { "icslogon", ArgFilename, (LPVOID) &appData.icsLogon, FALSE, INVALID },\r
+ { "useTelnet", ArgBoolean, (LPVOID) &appData.useTelnet, FALSE, INVALID },\r
+ { "telnet", ArgTrue, (LPVOID) &appData.useTelnet, FALSE, INVALID },\r
+ { "xtelnet", ArgFalse, (LPVOID) &appData.useTelnet, FALSE, INVALID },\r
+ { "-telnet", ArgFalse, (LPVOID) &appData.useTelnet, FALSE, INVALID },\r
+ { "telnetProgram", ArgFilename, (LPVOID) &appData.telnetProgram, FALSE, (ArgIniType) TELNET_PROGRAM },\r
+ { "internetChessserverHelper", ArgFilename, (LPVOID) &appData.icsHelper, \r
+ FALSE, INVALID }, // for XB\r
+ { "icshelper", ArgFilename, (LPVOID) &appData.icsHelper, FALSE, (ArgIniType) "" },\r
+ { "gateway", ArgString, (LPVOID) &appData.gateway, FALSE, (ArgIniType) "" },\r
+ { "loadGameFile", ArgFilename, (LPVOID) &appData.loadGameFile, FALSE, (ArgIniType) "" },\r
+ { "lgf", ArgFilename, (LPVOID) &appData.loadGameFile, FALSE, INVALID },\r
+ { "loadGameIndex", ArgInt, (LPVOID) &appData.loadGameIndex, FALSE, (ArgIniType) 0 },\r
+ { "lgi", ArgInt, (LPVOID) &appData.loadGameIndex, FALSE, INVALID },\r
+ { "saveGameFile", ArgFilename, (LPVOID) &appData.saveGameFile, TRUE, (ArgIniType) "" },\r
+ { "sgf", ArgFilename, (LPVOID) &appData.saveGameFile, FALSE, INVALID },\r
+ { "autoSaveGames", ArgBoolean, (LPVOID) &appData.autoSaveGames, TRUE, (ArgIniType) FALSE },\r
+ { "autosave", ArgTrue, (LPVOID) &appData.autoSaveGames, FALSE, INVALID },\r
+ { "xautosave", ArgFalse, (LPVOID) &appData.autoSaveGames, FALSE, INVALID },\r
+ { "-autosave", ArgFalse, (LPVOID) &appData.autoSaveGames, FALSE, INVALID },\r
+ { "loadPositionFile", ArgFilename, (LPVOID) &appData.loadPositionFile, FALSE, (ArgIniType) "" },\r
+ { "lpf", ArgFilename, (LPVOID) &appData.loadPositionFile, FALSE, INVALID },\r
+ { "loadPositionIndex", ArgInt, (LPVOID) &appData.loadPositionIndex, FALSE, (ArgIniType) 1 },\r
+ { "lpi", ArgInt, (LPVOID) &appData.loadPositionIndex, FALSE, INVALID },\r
+ { "savePositionFile", ArgFilename, (LPVOID) &appData.savePositionFile, FALSE, (ArgIniType) "" },\r
+ { "spf", ArgFilename, (LPVOID) &appData.savePositionFile, FALSE, INVALID },\r
+ { "matchMode", ArgBoolean, (LPVOID) &appData.matchMode, FALSE, (ArgIniType) FALSE },\r
+ { "mm", ArgTrue, (LPVOID) &appData.matchMode, FALSE, INVALID },\r
+ { "xmm", ArgFalse, (LPVOID) &appData.matchMode, FALSE, INVALID },\r
+ { "-mm", ArgFalse, (LPVOID) &appData.matchMode, FALSE, INVALID },\r
+ { "matchGames", ArgInt, (LPVOID) &appData.matchGames, FALSE, (ArgIniType) 0 },\r
+ { "mg", ArgInt, (LPVOID) &appData.matchGames, FALSE, INVALID },\r
+ { "monoMode", ArgBoolean, (LPVOID) &appData.monoMode, TRUE, (ArgIniType) FALSE },\r
+ { "mono", ArgTrue, (LPVOID) &appData.monoMode, FALSE, INVALID },\r
+ { "xmono", ArgFalse, (LPVOID) &appData.monoMode, FALSE, INVALID },\r
+ { "-mono", ArgFalse, (LPVOID) &appData.monoMode, FALSE, INVALID },\r
+ { "debugMode", ArgBoolean, (LPVOID) &appData.debugMode, FALSE, (ArgIniType) FALSE },\r
+ { "debug", ArgTrue, (LPVOID) &appData.debugMode, FALSE, INVALID },\r
+ { "xdebug", ArgFalse, (LPVOID) &appData.debugMode, FALSE, INVALID },\r
+ { "-debug", ArgFalse, (LPVOID) &appData.debugMode, FALSE, INVALID },\r
+ { "clockMode", ArgBoolean, (LPVOID) &appData.clockMode, FALSE, (ArgIniType) TRUE },\r
+ { "clock", ArgTrue, (LPVOID) &appData.clockMode, FALSE, INVALID },\r
+ { "xclock", ArgFalse, (LPVOID) &appData.clockMode, FALSE, INVALID },\r
+ { "-clock", ArgFalse, (LPVOID) &appData.clockMode, FALSE, INVALID },\r
+ { "searchTime", ArgString, (LPVOID) &appData.searchTime, FALSE, (ArgIniType) "" },\r
+ { "st", ArgString, (LPVOID) &appData.searchTime, FALSE, INVALID },\r
+ { "searchDepth", ArgInt, (LPVOID) &appData.searchDepth, FALSE, (ArgIniType) 0 },\r
+ { "depth", ArgInt, (LPVOID) &appData.searchDepth, FALSE, INVALID },\r
+ { "showCoords", ArgBoolean, (LPVOID) &appData.showCoords, TRUE, (ArgIniType) FALSE },\r
+ { "coords", ArgTrue, (LPVOID) &appData.showCoords, FALSE, INVALID },\r
+ { "xcoords", ArgFalse, (LPVOID) &appData.showCoords, FALSE, INVALID },\r
+ { "-coords", ArgFalse, (LPVOID) &appData.showCoords, FALSE, INVALID },\r
+ { "showThinking", ArgBoolean, (LPVOID) &appData.showThinking, TRUE, (ArgIniType) FALSE },\r
+ { "thinking", ArgTrue, (LPVOID) &appData.showThinking, FALSE, INVALID },\r
+ { "xthinking", ArgFalse, (LPVOID) &appData.showThinking, FALSE, INVALID },\r
+ { "-thinking", ArgFalse, (LPVOID) &appData.showThinking, FALSE, INVALID },\r
+ { "ponderNextMove", ArgBoolean, (LPVOID) &appData.ponderNextMove, TRUE, (ArgIniType) TRUE },\r
+ { "ponder", ArgTrue, (LPVOID) &appData.ponderNextMove, FALSE, INVALID },\r
+ { "xponder", ArgFalse, (LPVOID) &appData.ponderNextMove, FALSE, INVALID },\r
+ { "-ponder", ArgFalse, (LPVOID) &appData.ponderNextMove, FALSE, INVALID },\r
+ { "periodicUpdates", ArgBoolean, (LPVOID) &appData.periodicUpdates, TRUE, (ArgIniType) TRUE },\r
+ { "periodic", ArgTrue, (LPVOID) &appData.periodicUpdates, FALSE, INVALID },\r
+ { "xperiodic", ArgFalse, (LPVOID) &appData.periodicUpdates, FALSE, INVALID },\r
+ { "-periodic", ArgFalse, (LPVOID) &appData.periodicUpdates, FALSE, INVALID },\r
+ { "popupExitMessage", ArgBoolean, (LPVOID) &appData.popupExitMessage, TRUE, (ArgIniType) TRUE },\r
+ { "exit", ArgTrue, (LPVOID) &appData.popupExitMessage, FALSE, INVALID },\r
+ { "xexit", ArgFalse, (LPVOID) &appData.popupExitMessage, FALSE, INVALID },\r
+ { "-exit", ArgFalse, (LPVOID) &appData.popupExitMessage, FALSE, INVALID },\r
+ { "popupMoveErrors", ArgBoolean, (LPVOID) &appData.popupMoveErrors, TRUE, (ArgIniType) FALSE },\r
+ { "popup", ArgTrue, (LPVOID) &appData.popupMoveErrors, FALSE, INVALID },\r
+ { "xpopup", ArgFalse, (LPVOID) &appData.popupMoveErrors, FALSE, INVALID },\r
+ { "-popup", ArgFalse, (LPVOID) &appData.popupMoveErrors, FALSE, INVALID },\r
{ "popUpErrors", ArgBoolean, (LPVOID) &appData.popupMoveErrors, \r
- FALSE }, /* only so that old WinBoard.ini files from betas can be read */\r
- { "clockFont", ArgFont, (LPVOID) CLOCK_FONT, TRUE },\r
- { "messageFont", ArgFont, (LPVOID) MESSAGE_FONT, TRUE },\r
- { "coordFont", ArgFont, (LPVOID) COORD_FONT, TRUE },\r
- { "tagsFont", ArgFont, (LPVOID) EDITTAGS_FONT, TRUE },\r
- { "commentFont", ArgFont, (LPVOID) COMMENT_FONT, TRUE },\r
- { "icsFont", ArgFont, (LPVOID) CONSOLE_FONT, TRUE },\r
- { "moveHistoryFont", ArgFont, (LPVOID) MOVEHISTORY_FONT, TRUE }, /* [AS] */\r
+ FALSE, INVALID }, /* only so that old WinBoard.ini files from betas can be read */\r
+ { "clockFont", ArgFont, (LPVOID) CLOCK_FONT, TRUE, INVALID },\r
+ { "messageFont", ArgFont, (LPVOID) MESSAGE_FONT, TRUE, INVALID },\r
+ { "coordFont", ArgFont, (LPVOID) COORD_FONT, TRUE, INVALID },\r
+ { "tagsFont", ArgFont, (LPVOID) EDITTAGS_FONT, TRUE, INVALID },\r
+ { "commentFont", ArgFont, (LPVOID) COMMENT_FONT, TRUE, INVALID },\r
+ { "icsFont", ArgFont, (LPVOID) CONSOLE_FONT, TRUE, INVALID },\r
+ { "moveHistoryFont", ArgFont, (LPVOID) MOVEHISTORY_FONT, TRUE, INVALID }, /* [AS] */\r
{ "boardSize", ArgBoardSize, (LPVOID) &boardSize,\r
- TRUE }, /* must come after all fonts */\r
- { "size", ArgBoardSize, (LPVOID) &boardSize, FALSE },\r
+ TRUE, (ArgIniType) -1 }, /* must come after all fonts */\r
+ { "size", ArgBoardSize, (LPVOID) &boardSize, FALSE, INVALID },\r
{ "ringBellAfterMoves", ArgBoolean, (LPVOID) &appData.ringBellAfterMoves,\r
- FALSE }, /* historical; kept only so old winboard.ini files will parse */\r
- { "alwaysOnTop", ArgBoolean, (LPVOID) &alwaysOnTop, TRUE },\r
- { "top", ArgTrue, (LPVOID) &alwaysOnTop, FALSE },\r
- { "xtop", ArgFalse, (LPVOID) &alwaysOnTop, FALSE },\r
- { "-top", ArgFalse, (LPVOID) &alwaysOnTop, FALSE },\r
- { "autoCallFlag", ArgBoolean, (LPVOID) &appData.autoCallFlag, TRUE },\r
- { "autoflag", ArgTrue, (LPVOID) &appData.autoCallFlag, FALSE },\r
- { "xautoflag", ArgFalse, (LPVOID) &appData.autoCallFlag, FALSE },\r
- { "-autoflag", ArgFalse, (LPVOID) &appData.autoCallFlag, FALSE },\r
- { "autoComment", ArgBoolean, (LPVOID) &appData.autoComment, TRUE },\r
- { "autocomm", ArgTrue, (LPVOID) &appData.autoComment, FALSE },\r
- { "xautocomm", ArgFalse, (LPVOID) &appData.autoComment, FALSE },\r
- { "-autocomm", ArgFalse, (LPVOID) &appData.autoComment, FALSE },\r
- { "autoObserve", ArgBoolean, (LPVOID) &appData.autoObserve, TRUE },\r
- { "autobs", ArgTrue, (LPVOID) &appData.autoObserve, FALSE },\r
- { "xautobs", ArgFalse, (LPVOID) &appData.autoObserve, FALSE },\r
- { "-autobs", ArgFalse, (LPVOID) &appData.autoObserve, FALSE },\r
- { "flipView", ArgBoolean, (LPVOID) &appData.flipView, FALSE },\r
- { "flip", ArgTrue, (LPVOID) &appData.flipView, FALSE },\r
- { "xflip", ArgFalse, (LPVOID) &appData.flipView, FALSE },\r
- { "-flip", ArgFalse, (LPVOID) &appData.flipView, FALSE },\r
- { "autoFlipView", ArgBoolean, (LPVOID) &appData.autoFlipView, TRUE },\r
- { "autoflip", ArgTrue, (LPVOID) &appData.autoFlipView, FALSE },\r
- { "xautoflip", ArgFalse, (LPVOID) &appData.autoFlipView, FALSE },\r
- { "-autoflip", ArgFalse, (LPVOID) &appData.autoFlipView, FALSE },\r
- { "autoRaiseBoard", ArgBoolean, (LPVOID) &appData.autoRaiseBoard, TRUE },\r
- { "autoraise", ArgTrue, (LPVOID) &appData.autoRaiseBoard, FALSE },\r
- { "xautoraise", ArgFalse, (LPVOID) &appData.autoRaiseBoard, FALSE },\r
- { "-autoraise", ArgFalse, (LPVOID) &appData.autoRaiseBoard, FALSE },\r
-#if 0\r
- { "cmailGameName", ArgString, (LPVOID) &appData.cmailGameName, FALSE },\r
- { "cmail", ArgString, (LPVOID) &appData.cmailGameName, FALSE },\r
-#endif\r
- { "alwaysPromoteToQueen", ArgBoolean, (LPVOID) &appData.alwaysPromoteToQueen, TRUE },\r
- { "queen", ArgTrue, (LPVOID) &appData.alwaysPromoteToQueen, FALSE },\r
- { "xqueen", ArgFalse, (LPVOID) &appData.alwaysPromoteToQueen, FALSE },\r
- { "-queen", ArgFalse, (LPVOID) &appData.alwaysPromoteToQueen, FALSE },\r
- { "oldSaveStyle", ArgBoolean, (LPVOID) &appData.oldSaveStyle, TRUE },\r
- { "oldsave", ArgTrue, (LPVOID) &appData.oldSaveStyle, FALSE },\r
- { "xoldsave", ArgFalse, (LPVOID) &appData.oldSaveStyle, FALSE },\r
- { "-oldsave", ArgFalse, (LPVOID) &appData.oldSaveStyle, FALSE },\r
- { "quietPlay", ArgBoolean, (LPVOID) &appData.quietPlay, TRUE },\r
- { "quiet", ArgTrue, (LPVOID) &appData.quietPlay, FALSE },\r
- { "xquiet", ArgFalse, (LPVOID) &appData.quietPlay, FALSE },\r
- { "-quiet", ArgFalse, (LPVOID) &appData.quietPlay, FALSE },\r
- { "getMoveList", ArgBoolean, (LPVOID) &appData.getMoveList, TRUE },\r
- { "moves", ArgTrue, (LPVOID) &appData.getMoveList, FALSE },\r
- { "xmoves", ArgFalse, (LPVOID) &appData.getMoveList, FALSE },\r
- { "-moves", ArgFalse, (LPVOID) &appData.getMoveList, FALSE },\r
- { "testLegality", ArgBoolean, (LPVOID) &appData.testLegality, TRUE },\r
- { "legal", ArgTrue, (LPVOID) &appData.testLegality, FALSE },\r
- { "xlegal", ArgFalse, (LPVOID) &appData.testLegality, FALSE },\r
- { "-legal", ArgFalse, (LPVOID) &appData.testLegality, FALSE },\r
- { "premove", ArgBoolean, (LPVOID) &appData.premove, TRUE },\r
- { "pre", ArgTrue, (LPVOID) &appData.premove, FALSE },\r
- { "xpre", ArgFalse, (LPVOID) &appData.premove, FALSE },\r
- { "-pre", ArgFalse, (LPVOID) &appData.premove, FALSE },\r
- { "premoveWhite", ArgBoolean, (LPVOID) &appData.premoveWhite, TRUE },\r
- { "prewhite", ArgTrue, (LPVOID) &appData.premoveWhite, FALSE },\r
- { "xprewhite", ArgFalse, (LPVOID) &appData.premoveWhite, FALSE },\r
- { "-prewhite", ArgFalse, (LPVOID) &appData.premoveWhite, FALSE },\r
- { "premoveWhiteText", ArgString, (LPVOID) &appData.premoveWhiteText, TRUE },\r
- { "premoveBlack", ArgBoolean, (LPVOID) &appData.premoveBlack, TRUE },\r
- { "preblack", ArgTrue, (LPVOID) &appData.premoveBlack, FALSE },\r
- { "xpreblack", ArgFalse, (LPVOID) &appData.premoveBlack, FALSE },\r
- { "-preblack", ArgFalse, (LPVOID) &appData.premoveBlack, FALSE },\r
- { "premoveBlackText", ArgString, (LPVOID) &appData.premoveBlackText, TRUE },\r
- { "icsAlarm", ArgBoolean, (LPVOID) &appData.icsAlarm, TRUE},\r
+ FALSE, (ArgIniType) TRUE }, /* historical; kept only so old winboard.ini files will parse */\r
+ { "bell", ArgTrue, (LPVOID) &appData.ringBellAfterMoves, FALSE, INVALID }, // for XB\r
+ { "xbell", ArgFalse, (LPVOID) &appData.ringBellAfterMoves, FALSE, INVALID }, // for XB\r
+ { "movesound", ArgTrue, (LPVOID) &appData.ringBellAfterMoves, FALSE, INVALID }, // for XB\r
+ { "xmovesound", ArgFalse, (LPVOID) &appData.ringBellAfterMoves, FALSE, INVALID }, // for XB\r
+ { "alwaysOnTop", ArgBoolean, (LPVOID) &alwaysOnTop, TRUE, INVALID },\r
+ { "top", ArgTrue, (LPVOID) &alwaysOnTop, FALSE, INVALID },\r
+ { "xtop", ArgFalse, (LPVOID) &alwaysOnTop, FALSE, INVALID },\r
+ { "-top", ArgFalse, (LPVOID) &alwaysOnTop, FALSE, INVALID },\r
+ { "autoCallFlag", ArgBoolean, (LPVOID) &appData.autoCallFlag, TRUE, (ArgIniType) FALSE },\r
+ { "autoflag", ArgTrue, (LPVOID) &appData.autoCallFlag, FALSE, INVALID },\r
+ { "xautoflag", ArgFalse, (LPVOID) &appData.autoCallFlag, FALSE, INVALID },\r
+ { "-autoflag", ArgFalse, (LPVOID) &appData.autoCallFlag, FALSE, INVALID },\r
+ { "autoComment", ArgBoolean, (LPVOID) &appData.autoComment, TRUE, (ArgIniType) FALSE },\r
+ { "autocomm", ArgTrue, (LPVOID) &appData.autoComment, FALSE, INVALID },\r
+ { "xautocomm", ArgFalse, (LPVOID) &appData.autoComment, FALSE, INVALID },\r
+ { "-autocomm", ArgFalse, (LPVOID) &appData.autoComment, FALSE, INVALID },\r
+ { "autoObserve", ArgBoolean, (LPVOID) &appData.autoObserve, TRUE, (ArgIniType) FALSE },\r
+ { "autobs", ArgTrue, (LPVOID) &appData.autoObserve, FALSE, INVALID },\r
+ { "xautobs", ArgFalse, (LPVOID) &appData.autoObserve, FALSE, INVALID },\r
+ { "-autobs", ArgFalse, (LPVOID) &appData.autoObserve, FALSE, INVALID },\r
+ { "flipView", ArgBoolean, (LPVOID) &appData.flipView, FALSE, (ArgIniType) FALSE },\r
+ { "flip", ArgTrue, (LPVOID) &appData.flipView, FALSE, INVALID },\r
+ { "xflip", ArgFalse, (LPVOID) &appData.flipView, FALSE, INVALID },\r
+ { "-flip", ArgFalse, (LPVOID) &appData.flipView, FALSE, INVALID },\r
+ { "autoFlipView", ArgBoolean, (LPVOID) &appData.autoFlipView, TRUE, (ArgIniType) TRUE },\r
+ { "autoflip", ArgTrue, (LPVOID) &appData.autoFlipView, FALSE, INVALID },\r
+ { "xautoflip", ArgFalse, (LPVOID) &appData.autoFlipView, FALSE, INVALID },\r
+ { "-autoflip", ArgFalse, (LPVOID) &appData.autoFlipView, FALSE, INVALID },\r
+ { "autoRaiseBoard", ArgBoolean, (LPVOID) &appData.autoRaiseBoard, TRUE, (ArgIniType) TRUE },\r
+ { "autoraise", ArgTrue, (LPVOID) &appData.autoRaiseBoard, FALSE, INVALID },\r
+ { "xautoraise", ArgFalse, (LPVOID) &appData.autoRaiseBoard, FALSE, INVALID },\r
+ { "-autoraise", ArgFalse, (LPVOID) &appData.autoRaiseBoard, FALSE, INVALID },\r
+ { "alwaysPromoteToQueen", ArgBoolean, (LPVOID) &appData.alwaysPromoteToQueen, TRUE, (ArgIniType) FALSE },\r
+ { "queen", ArgTrue, (LPVOID) &appData.alwaysPromoteToQueen, FALSE, INVALID },\r
+ { "xqueen", ArgFalse, (LPVOID) &appData.alwaysPromoteToQueen, FALSE, INVALID },\r
+ { "-queen", ArgFalse, (LPVOID) &appData.alwaysPromoteToQueen, FALSE, INVALID },\r
+ { "oldSaveStyle", ArgBoolean, (LPVOID) &appData.oldSaveStyle, TRUE, (ArgIniType) FALSE },\r
+ { "oldsave", ArgTrue, (LPVOID) &appData.oldSaveStyle, FALSE, INVALID },\r
+ { "xoldsave", ArgFalse, (LPVOID) &appData.oldSaveStyle, FALSE, INVALID },\r
+ { "-oldsave", ArgFalse, (LPVOID) &appData.oldSaveStyle, FALSE, INVALID },\r
+ { "quietPlay", ArgBoolean, (LPVOID) &appData.quietPlay, TRUE, (ArgIniType) FALSE },\r
+ { "quiet", ArgTrue, (LPVOID) &appData.quietPlay, FALSE, INVALID },\r
+ { "xquiet", ArgFalse, (LPVOID) &appData.quietPlay, FALSE, INVALID },\r
+ { "-quiet", ArgFalse, (LPVOID) &appData.quietPlay, FALSE, INVALID },\r
+ { "getMoveList", ArgBoolean, (LPVOID) &appData.getMoveList, TRUE, (ArgIniType) TRUE },\r
+ { "moves", ArgTrue, (LPVOID) &appData.getMoveList, FALSE, INVALID },\r
+ { "xmoves", ArgFalse, (LPVOID) &appData.getMoveList, FALSE, INVALID },\r
+ { "-moves", ArgFalse, (LPVOID) &appData.getMoveList, FALSE, INVALID },\r
+ { "testLegality", ArgBoolean, (LPVOID) &appData.testLegality, TRUE, (ArgIniType) TRUE },\r
+ { "legal", ArgTrue, (LPVOID) &appData.testLegality, FALSE, INVALID },\r
+ { "xlegal", ArgFalse, (LPVOID) &appData.testLegality, FALSE, INVALID },\r
+ { "-legal", ArgFalse, (LPVOID) &appData.testLegality, FALSE, INVALID },\r
+ { "premove", ArgBoolean, (LPVOID) &appData.premove, TRUE, (ArgIniType) TRUE },\r
+ { "pre", ArgTrue, (LPVOID) &appData.premove, FALSE, INVALID },\r
+ { "xpre", ArgFalse, (LPVOID) &appData.premove, FALSE, INVALID },\r
+ { "-pre", ArgFalse, (LPVOID) &appData.premove, FALSE, INVALID },\r
+ { "premoveWhite", ArgBoolean, (LPVOID) &appData.premoveWhite, TRUE, (ArgIniType) FALSE },\r
+ { "prewhite", ArgTrue, (LPVOID) &appData.premoveWhite, FALSE, INVALID },\r
+ { "xprewhite", ArgFalse, (LPVOID) &appData.premoveWhite, FALSE, INVALID },\r
+ { "-prewhite", ArgFalse, (LPVOID) &appData.premoveWhite, FALSE, INVALID },\r
+ { "premoveWhiteText", ArgString, (LPVOID) &appData.premoveWhiteText, TRUE, (ArgIniType) "" },\r
+ { "premoveBlack", ArgBoolean, (LPVOID) &appData.premoveBlack, TRUE, (ArgIniType) FALSE },\r
+ { "preblack", ArgTrue, (LPVOID) &appData.premoveBlack, FALSE, INVALID },\r
+ { "xpreblack", ArgFalse, (LPVOID) &appData.premoveBlack, FALSE, INVALID },\r
+ { "-preblack", ArgFalse, (LPVOID) &appData.premoveBlack, FALSE, INVALID },\r
+ { "premoveBlackText", ArgString, (LPVOID) &appData.premoveBlackText, TRUE, (ArgIniType) "" },\r
+ { "icsAlarm", ArgBoolean, (LPVOID) &appData.icsAlarm, TRUE, (ArgIniType) TRUE},\r
{ "alarm", ArgTrue, (LPVOID) &appData.icsAlarm, FALSE},\r
{ "xalarm", ArgFalse, (LPVOID) &appData.icsAlarm, FALSE},\r
{ "-alarm", ArgFalse, (LPVOID) &appData.icsAlarm, FALSE},\r
- { "icsAlarmTime", ArgInt, (LPVOID) &appData.icsAlarmTime, TRUE},\r
- { "localLineEditing", ArgBoolean, (LPVOID) &appData.localLineEditing, FALSE},\r
- { "localLineEditing", ArgBoolean, (LPVOID) &appData.localLineEditing, FALSE},\r
- { "edit", ArgTrue, (LPVOID) &appData.localLineEditing, FALSE },\r
- { "xedit", ArgFalse, (LPVOID) &appData.localLineEditing, FALSE },\r
- { "-edit", ArgFalse, (LPVOID) &appData.localLineEditing, FALSE },\r
- { "animateMoving", ArgBoolean, (LPVOID) &appData.animate, TRUE },\r
- { "animate", ArgTrue, (LPVOID) &appData.animate, FALSE },\r
- { "xanimate", ArgFalse, (LPVOID) &appData.animate, FALSE },\r
- { "-animate", ArgFalse, (LPVOID) &appData.animate, FALSE },\r
- { "animateSpeed", ArgInt, (LPVOID) &appData.animSpeed, TRUE },\r
- { "animateDragging", ArgBoolean, (LPVOID) &appData.animateDragging, TRUE },\r
- { "drag", ArgTrue, (LPVOID) &appData.animateDragging, FALSE },\r
- { "xdrag", ArgFalse, (LPVOID) &appData.animateDragging, FALSE },\r
- { "-drag", ArgFalse, (LPVOID) &appData.animateDragging, FALSE },\r
- { "blindfold", ArgBoolean, (LPVOID) &appData.blindfold, TRUE },\r
- { "blind", ArgTrue, (LPVOID) &appData.blindfold, FALSE },\r
- { "xblind", ArgFalse, (LPVOID) &appData.blindfold, FALSE },\r
- { "-blind", ArgFalse, (LPVOID) &appData.blindfold, FALSE },\r
+ { "icsAlarmTime", ArgInt, (LPVOID) &appData.icsAlarmTime, TRUE, (ArgIniType) 5000},\r
+ { "localLineEditing", ArgBoolean, (LPVOID) &appData.localLineEditing, FALSE, (ArgIniType) TRUE},\r
+ { "edit", ArgTrue, (LPVOID) &appData.localLineEditing, FALSE, INVALID },\r
+ { "xedit", ArgFalse, (LPVOID) &appData.localLineEditing, FALSE, INVALID },\r
+ { "-edit", ArgFalse, (LPVOID) &appData.localLineEditing, FALSE, INVALID },\r
+ { "animateMoving", ArgBoolean, (LPVOID) &appData.animate, TRUE, (ArgIniType) TRUE },\r
+ { "animate", ArgTrue, (LPVOID) &appData.animate, FALSE, INVALID },\r
+ { "xanimate", ArgFalse, (LPVOID) &appData.animate, FALSE, INVALID },\r
+ { "-animate", ArgFalse, (LPVOID) &appData.animate, FALSE, INVALID },\r
+ { "animateSpeed", ArgInt, (LPVOID) &appData.animSpeed, TRUE, (ArgIniType) 10 },\r
+ { "animateDragging", ArgBoolean, (LPVOID) &appData.animateDragging, TRUE, (ArgIniType) TRUE },\r
+ { "drag", ArgTrue, (LPVOID) &appData.animateDragging, FALSE, INVALID },\r
+ { "xdrag", ArgFalse, (LPVOID) &appData.animateDragging, FALSE, INVALID },\r
+ { "-drag", ArgFalse, (LPVOID) &appData.animateDragging, FALSE, INVALID },\r
+ { "blindfold", ArgBoolean, (LPVOID) &appData.blindfold, TRUE, (ArgIniType) FALSE },\r
+ { "blind", ArgTrue, (LPVOID) &appData.blindfold, FALSE, INVALID },\r
+ { "xblind", ArgFalse, (LPVOID) &appData.blindfold, FALSE, INVALID },\r
+ { "-blind", ArgFalse, (LPVOID) &appData.blindfold, FALSE, INVALID },\r
{ "highlightLastMove", ArgBoolean,\r
- (LPVOID) &appData.highlightLastMove, TRUE },\r
- { "highlight", ArgTrue, (LPVOID) &appData.highlightLastMove, FALSE },\r
- { "xhighlight", ArgFalse, (LPVOID) &appData.highlightLastMove, FALSE },\r
- { "-highlight", ArgFalse, (LPVOID) &appData.highlightLastMove, FALSE },\r
+ (LPVOID) &appData.highlightLastMove, TRUE, (ArgIniType) TRUE },\r
+ { "highlight", ArgTrue, (LPVOID) &appData.highlightLastMove, FALSE, INVALID },\r
+ { "xhighlight", ArgFalse, (LPVOID) &appData.highlightLastMove, FALSE, INVALID },\r
+ { "-highlight", ArgFalse, (LPVOID) &appData.highlightLastMove, FALSE, INVALID },\r
{ "highlightDragging", ArgBoolean,\r
- (LPVOID) &appData.highlightDragging, TRUE },\r
- { "highdrag", ArgTrue, (LPVOID) &appData.highlightDragging, FALSE },\r
- { "xhighdrag", ArgFalse, (LPVOID) &appData.highlightDragging, FALSE },\r
- { "-highdrag", ArgFalse, (LPVOID) &appData.highlightDragging, FALSE },\r
- { "colorizeMessages", ArgBoolean, (LPVOID) &appData.colorize, TRUE },\r
- { "colorize", ArgTrue, (LPVOID) &appData.colorize, FALSE },\r
- { "xcolorize", ArgFalse, (LPVOID) &appData.colorize, FALSE },\r
- { "-colorize", ArgFalse, (LPVOID) &appData.colorize, FALSE },\r
- { "colorShout", ArgAttribs, (LPVOID) ColorShout, TRUE },\r
- { "colorSShout", ArgAttribs, (LPVOID) ColorSShout, TRUE },\r
- { "colorChannel1", ArgAttribs, (LPVOID) ColorChannel1, TRUE },\r
- { "colorChannel", ArgAttribs, (LPVOID) ColorChannel, TRUE },\r
- { "colorKibitz", ArgAttribs, (LPVOID) ColorKibitz, TRUE },\r
- { "colorTell", ArgAttribs, (LPVOID) ColorTell, TRUE },\r
- { "colorChallenge", ArgAttribs, (LPVOID) ColorChallenge, TRUE },\r
- { "colorRequest", ArgAttribs, (LPVOID) ColorRequest, TRUE },\r
- { "colorSeek", ArgAttribs, (LPVOID) ColorSeek, TRUE },\r
- { "colorNormal", ArgAttribs, (LPVOID) ColorNormal, TRUE },\r
- { "colorBackground", ArgColor, (LPVOID) &consoleBackgroundColor, TRUE },\r
- { "soundShout", ArgFilename,\r
- (LPVOID) &textAttribs[ColorShout].sound.name, TRUE },\r
- { "soundSShout", ArgFilename,\r
- (LPVOID) &textAttribs[ColorSShout].sound.name, TRUE },\r
- { "soundChannel1", ArgFilename,\r
- (LPVOID) &textAttribs[ColorChannel1].sound.name, TRUE },\r
- { "soundChannel", ArgFilename,\r
- (LPVOID) &textAttribs[ColorChannel].sound.name, TRUE },\r
- { "soundKibitz", ArgFilename,\r
- (LPVOID) &textAttribs[ColorKibitz].sound.name, TRUE },\r
- { "soundTell", ArgFilename,\r
- (LPVOID) &textAttribs[ColorTell].sound.name, TRUE },\r
- { "soundChallenge", ArgFilename,\r
- (LPVOID) &textAttribs[ColorChallenge].sound.name, TRUE },\r
- { "soundRequest", ArgFilename,\r
- (LPVOID) &textAttribs[ColorRequest].sound.name, TRUE },\r
- { "soundSeek", ArgFilename,\r
- (LPVOID) &textAttribs[ColorSeek].sound.name, TRUE },\r
- { "soundMove", ArgFilename, (LPVOID) &sounds[(int)SoundMove].name, TRUE },\r
- { "soundBell", ArgFilename, (LPVOID) &sounds[(int)SoundBell].name, TRUE },\r
- { "soundIcsWin", ArgFilename, (LPVOID) &sounds[(int)SoundIcsWin].name,TRUE },\r
- { "soundIcsLoss", ArgFilename, \r
- (LPVOID) &sounds[(int)SoundIcsLoss].name, TRUE },\r
- { "soundIcsDraw", ArgFilename, \r
- (LPVOID) &sounds[(int)SoundIcsDraw].name, TRUE },\r
- { "soundIcsUnfinished", ArgFilename, \r
- (LPVOID) &sounds[(int)SoundIcsUnfinished].name, TRUE},\r
- { "soundIcsAlarm", ArgFilename, \r
- (LPVOID) &sounds[(int)SoundAlarm].name, TRUE },\r
- { "reuseFirst", ArgBoolean, (LPVOID) &appData.reuseFirst, FALSE },\r
- { "reuse", ArgTrue, (LPVOID) &appData.reuseFirst, FALSE },\r
- { "xreuse", ArgFalse, (LPVOID) &appData.reuseFirst, FALSE },\r
- { "-reuse", ArgFalse, (LPVOID) &appData.reuseFirst, FALSE },\r
+ (LPVOID) &appData.highlightDragging, TRUE, INVALID },\r
+ { "highdrag", ArgTrue, (LPVOID) &appData.highlightDragging, FALSE, INVALID },\r
+ { "xhighdrag", ArgFalse, (LPVOID) &appData.highlightDragging, FALSE, INVALID },\r
+ { "-highdrag", ArgFalse, (LPVOID) &appData.highlightDragging, FALSE, INVALID },\r
+ { "colorizeMessages", ArgBoolean, (LPVOID) &appData.colorize, TRUE, (ArgIniType) TRUE },\r
+ { "colorize", ArgTrue, (LPVOID) &appData.colorize, FALSE, INVALID },\r
+ { "xcolorize", ArgFalse, (LPVOID) &appData.colorize, FALSE, INVALID },\r
+ { "-colorize", ArgFalse, (LPVOID) &appData.colorize, FALSE, INVALID },\r
+ { "colorShout", ArgAttribs, (LPVOID) ColorShout, TRUE, INVALID },\r
+ { "colorSShout", ArgAttribs, (LPVOID) ColorSShout, TRUE, INVALID },\r
+ { "colorChannel1", ArgAttribs, (LPVOID) ColorChannel1, TRUE, INVALID },\r
+ { "colorChannel", ArgAttribs, (LPVOID) ColorChannel, TRUE, INVALID },\r
+ { "colorKibitz", ArgAttribs, (LPVOID) ColorKibitz, TRUE, INVALID },\r
+ { "colorTell", ArgAttribs, (LPVOID) ColorTell, TRUE, INVALID },\r
+ { "colorChallenge", ArgAttribs, (LPVOID) ColorChallenge, TRUE, INVALID },\r
+ { "colorRequest", ArgAttribs, (LPVOID) ColorRequest, TRUE, INVALID },\r
+ { "colorSeek", ArgAttribs, (LPVOID) ColorSeek, TRUE, INVALID },\r
+ { "colorNormal", ArgAttribs, (LPVOID) ColorNormal, TRUE, INVALID },\r
+ { "colorBackground", ArgColor, (LPVOID) &consoleBackgroundColor, TRUE, INVALID },\r
+ { "soundShout", ArgFilename, (LPVOID) &appData.soundShout, TRUE, (ArgIniType) "" },\r
+ { "soundSShout", ArgFilename, (LPVOID) &appData.soundSShout, TRUE, (ArgIniType) "" },\r
+ { "soundCShout", ArgFilename, (LPVOID) &appData.soundSShout, TRUE, (ArgIniType) "" }, // for XB\r
+ { "soundChannel1", ArgFilename, (LPVOID) &appData.soundChannel1, TRUE, (ArgIniType) "" },\r
+ { "soundChannel", ArgFilename, (LPVOID) &appData.soundChannel, TRUE, (ArgIniType) "" },\r
+ { "soundKibitz", ArgFilename, (LPVOID) &appData.soundKibitz, TRUE, (ArgIniType) "" },\r
+ { "soundTell", ArgFilename, (LPVOID) &appData.soundTell, TRUE, (ArgIniType) "" },\r
+ { "soundChallenge", ArgFilename, (LPVOID) &appData.soundChallenge, TRUE, (ArgIniType) "" },\r
+ { "soundRequest", ArgFilename, (LPVOID) &appData.soundRequest, TRUE, (ArgIniType) "" },\r
+ { "soundSeek", ArgFilename, (LPVOID) &appData.soundSeek, TRUE, (ArgIniType) "" },\r
+ { "soundMove", ArgFilename, (LPVOID) &appData.soundMove, TRUE, (ArgIniType) "" },\r
+ { "soundBell", ArgFilename, (LPVOID) &appData.soundBell, TRUE, (ArgIniType) SOUND_BELL },\r
+ { "soundIcsWin", ArgFilename, (LPVOID) &appData.soundIcsWin, TRUE, (ArgIniType) "" },\r
+ { "soundIcsLoss", ArgFilename, (LPVOID) &appData.soundIcsLoss, TRUE, (ArgIniType) "" },\r
+ { "soundIcsDraw", ArgFilename, (LPVOID) &appData.soundIcsDraw, TRUE, (ArgIniType) "" },\r
+ { "soundIcsUnfinished", ArgFilename, (LPVOID) &appData.soundIcsUnfinished, TRUE, (ArgIniType) "" },\r
+ { "soundIcsAlarm", ArgFilename, (LPVOID) &appData.soundIcsAlarm, TRUE, (ArgIniType) "" },\r
+ { "reuseFirst", ArgBoolean, (LPVOID) &appData.reuseFirst, FALSE, (ArgIniType) TRUE },\r
+ { "reuse", ArgTrue, (LPVOID) &appData.reuseFirst, FALSE, INVALID },\r
+ { "xreuse", ArgFalse, (LPVOID) &appData.reuseFirst, FALSE, INVALID },\r
+ { "-reuse", ArgFalse, (LPVOID) &appData.reuseFirst, FALSE, INVALID },\r
{ "reuseChessPrograms", ArgBoolean,\r
- (LPVOID) &appData.reuseFirst, FALSE }, /* backward compat only */\r
- { "reuseSecond", ArgBoolean, (LPVOID) &appData.reuseSecond, FALSE },\r
- { "reuse2", ArgTrue, (LPVOID) &appData.reuseSecond, FALSE },\r
- { "xreuse2", ArgFalse, (LPVOID) &appData.reuseSecond, FALSE },\r
- { "-reuse2", ArgFalse, (LPVOID) &appData.reuseSecond, FALSE },\r
- { "comPortSettings", ArgCommSettings, (LPVOID) &dcb, TRUE },\r
- { "x", ArgInt, (LPVOID) &boardX, TRUE },\r
- { "y", ArgInt, (LPVOID) &boardY, TRUE },\r
- { "icsX", ArgInt, (LPVOID) &consoleX, TRUE },\r
- { "icsY", ArgInt, (LPVOID) &consoleY, TRUE },\r
- { "icsW", ArgInt, (LPVOID) &consoleW, TRUE },\r
- { "icsH", ArgInt, (LPVOID) &consoleH, TRUE },\r
- { "analysisX", ArgInt, (LPVOID) &analysisX, TRUE },\r
- { "analysisY", ArgInt, (LPVOID) &analysisY, TRUE },\r
- { "analysisW", ArgInt, (LPVOID) &analysisW, TRUE },\r
- { "analysisH", ArgInt, (LPVOID) &analysisH, TRUE },\r
- { "commentX", ArgInt, (LPVOID) &commentX, TRUE },\r
- { "commentY", ArgInt, (LPVOID) &commentY, TRUE },\r
- { "commentW", ArgInt, (LPVOID) &commentW, TRUE },\r
- { "commentH", ArgInt, (LPVOID) &commentH, TRUE },\r
- { "tagsX", ArgInt, (LPVOID) &editTagsX, TRUE },\r
- { "tagsY", ArgInt, (LPVOID) &editTagsY, TRUE },\r
- { "tagsW", ArgInt, (LPVOID) &editTagsW, TRUE },\r
- { "tagsH", ArgInt, (LPVOID) &editTagsH, TRUE },\r
- { "gameListX", ArgInt, (LPVOID) &gameListX, TRUE },\r
- { "gameListY", ArgInt, (LPVOID) &gameListY, TRUE },\r
- { "gameListW", ArgInt, (LPVOID) &gameListW, TRUE },\r
- { "gameListH", ArgInt, (LPVOID) &gameListH, TRUE },\r
- { "settingsFile", ArgSettingsFilename, (LPVOID) &settingsFileName, FALSE },\r
- { "ini", ArgSettingsFilename, (LPVOID) &settingsFileName, FALSE },\r
- { "saveSettingsOnExit", ArgBoolean, (LPVOID) &saveSettingsOnExit, TRUE },\r
- { "chessProgram", ArgBoolean, (LPVOID) &chessProgram, FALSE },\r
- { "cp", ArgTrue, (LPVOID) &chessProgram, FALSE },\r
- { "xcp", ArgFalse, (LPVOID) &chessProgram, FALSE },\r
- { "-cp", ArgFalse, (LPVOID) &chessProgram, FALSE },\r
- { "icsMenu", ArgString, (LPVOID) &icsTextMenuString, TRUE },\r
- { "icsNames", ArgString, (LPVOID) &icsNames, TRUE },\r
+ (LPVOID) &appData.reuseFirst, FALSE, INVALID }, /* backward compat only */\r
+ { "reuseSecond", ArgBoolean, (LPVOID) &appData.reuseSecond, FALSE, (ArgIniType) TRUE },\r
+ { "reuse2", ArgTrue, (LPVOID) &appData.reuseSecond, FALSE, INVALID },\r
+ { "xreuse2", ArgFalse, (LPVOID) &appData.reuseSecond, FALSE, INVALID },\r
+ { "-reuse2", ArgFalse, (LPVOID) &appData.reuseSecond, FALSE, INVALID },\r
+ { "comPortSettings", ArgCommSettings, (LPVOID) &dcb, TRUE, INVALID },\r
+ { "settingsFile", ArgSettingsFilename, (LPVOID) &settingsFileName, FALSE, (ArgIniType) SETTINGS_FILE },\r
+ { "ini", ArgSettingsFilename, (LPVOID) &settingsFileName, FALSE, INVALID },\r
+ { "saveSettingsOnExit", ArgBoolean, (LPVOID) &saveSettingsOnExit, TRUE, (ArgIniType) TRUE },\r
+ { "chessProgram", ArgBoolean, (LPVOID) &chessProgram, FALSE, (ArgIniType) FALSE },\r
+ { "cp", ArgTrue, (LPVOID) &chessProgram, FALSE, INVALID },\r
+ { "xcp", ArgFalse, (LPVOID) &chessProgram, FALSE, INVALID },\r
+ { "-cp", ArgFalse, (LPVOID) &chessProgram, FALSE, INVALID },\r
+ { "icsMenu", ArgString, (LPVOID) &icsTextMenuString, TRUE, (ArgIniType) ICS_TEXT_MENU_DEFAULT },\r
+ { "icsNames", ArgString, (LPVOID) &icsNames, TRUE, (ArgIniType) ICS_NAMES },\r
{ "firstChessProgramNames", ArgString, (LPVOID) &firstChessProgramNames,\r
- TRUE },\r
+ TRUE, (ArgIniType) FCP_NAMES },\r
{ "secondChessProgramNames", ArgString, (LPVOID) &secondChessProgramNames,\r
- TRUE },\r
- { "initialMode", ArgString, (LPVOID) &appData.initialMode, FALSE },\r
- { "mode", ArgString, (LPVOID) &appData.initialMode, FALSE },\r
- { "variant", ArgString, (LPVOID) &appData.variant, FALSE },\r
- { "firstProtocolVersion", ArgInt, (LPVOID) &appData.firstProtocolVersion, FALSE },\r
- { "secondProtocolVersion", ArgInt, (LPVOID) &appData.secondProtocolVersion,FALSE },\r
- { "showButtonBar", ArgBoolean, (LPVOID) &appData.showButtonBar, TRUE },\r
- { "buttons", ArgTrue, (LPVOID) &appData.showButtonBar, FALSE },\r
- { "xbuttons", ArgFalse, (LPVOID) &appData.showButtonBar, FALSE },\r
- { "-buttons", ArgFalse, (LPVOID) &appData.showButtonBar, FALSE },\r
- /* [AS] New features */\r
- { "firstScoreAbs", ArgBoolean, (LPVOID) &appData.firstScoreIsAbsolute, FALSE },\r
- { "secondScoreAbs", ArgBoolean, (LPVOID) &appData.secondScoreIsAbsolute, FALSE },\r
- { "pgnExtendedInfo", ArgBoolean, (LPVOID) &appData.saveExtendedInfoInPGN, TRUE },\r
- { "hideThinkingFromHuman", ArgBoolean, (LPVOID) &appData.hideThinkingFromHuman, TRUE },\r
- { "liteBackTextureFile", ArgString, (LPVOID) &appData.liteBackTextureFile, TRUE },\r
- { "darkBackTextureFile", ArgString, (LPVOID) &appData.darkBackTextureFile, TRUE },\r
- { "liteBackTextureMode", ArgInt, (LPVOID) &appData.liteBackTextureMode, TRUE },\r
- { "darkBackTextureMode", ArgInt, (LPVOID) &appData.darkBackTextureMode, TRUE },\r
- { "renderPiecesWithFont", ArgString, (LPVOID) &appData.renderPiecesWithFont, TRUE },\r
- { "fontPieceToCharTable", ArgString, (LPVOID) &appData.fontToPieceTable, TRUE },\r
- { "fontPieceBackColorWhite", ArgColor, (LPVOID) &appData.fontBackColorWhite, TRUE },\r
- { "fontPieceForeColorWhite", ArgColor, (LPVOID) &appData.fontForeColorWhite, TRUE },\r
- { "fontPieceBackColorBlack", ArgColor, (LPVOID) &appData.fontBackColorBlack, TRUE },\r
- { "fontPieceForeColorBlack", ArgColor, (LPVOID) &appData.fontForeColorBlack, TRUE },\r
- { "fontPieceSize", ArgInt, (LPVOID) &appData.fontPieceSize, TRUE },\r
- { "overrideLineGap", ArgInt, (LPVOID) &appData.overrideLineGap, TRUE },\r
- { "adjudicateLossThreshold", ArgInt, (LPVOID) &appData.adjudicateLossThreshold, TRUE },\r
- { "delayBeforeQuit", ArgInt, (LPVOID) &appData.delayBeforeQuit, TRUE },\r
- { "delayAfterQuit", ArgInt, (LPVOID) &appData.delayAfterQuit, TRUE },\r
- { "nameOfDebugFile", ArgFilename, (LPVOID) &appData.nameOfDebugFile, FALSE },\r
- { "debugfile", ArgFilename, (LPVOID) &appData.nameOfDebugFile, FALSE },\r
- { "pgnEventHeader", ArgString, (LPVOID) &appData.pgnEventHeader, TRUE },\r
- { "defaultFrcPosition", ArgInt, (LPVOID) &appData.defaultFrcPosition, TRUE },\r
- { "gameListTags", ArgString, (LPVOID) &appData.gameListTags, TRUE },\r
- { "saveOutOfBookInfo", ArgBoolean, (LPVOID) &appData.saveOutOfBookInfo, TRUE },\r
- { "showEvalInMoveHistory", ArgBoolean, (LPVOID) &appData.showEvalInMoveHistory, TRUE },\r
- { "evalHistColorWhite", ArgColor, (LPVOID) &appData.evalHistColorWhite, TRUE },\r
- { "evalHistColorBlack", ArgColor, (LPVOID) &appData.evalHistColorBlack, TRUE },\r
- { "highlightMoveWithArrow", ArgBoolean, (LPVOID) &appData.highlightMoveWithArrow, TRUE },\r
- { "highlightArrowColor", ArgColor, (LPVOID) &appData.highlightArrowColor, TRUE },\r
- { "stickyWindows", ArgBoolean, (LPVOID) &appData.useStickyWindows, TRUE },\r
- { "adjudicateDrawMoves", ArgInt, (LPVOID) &appData.adjudicateDrawMoves, TRUE },\r
- { "autoDisplayComment", ArgBoolean, (LPVOID) &appData.autoDisplayComment, TRUE },\r
- { "autoDisplayTags", ArgBoolean, (LPVOID) &appData.autoDisplayTags, TRUE },\r
- { "firstIsUCI", ArgBoolean, (LPVOID) &appData.firstIsUCI, FALSE },\r
- { "fUCI", ArgTrue, (LPVOID) &appData.firstIsUCI, FALSE },\r
- { "secondIsUCI", ArgBoolean, (LPVOID) &appData.secondIsUCI, FALSE },\r
- { "sUCI", ArgTrue, (LPVOID) &appData.secondIsUCI, FALSE },\r
- { "firstHasOwnBookUCI", ArgBoolean, (LPVOID) &appData.firstHasOwnBookUCI, FALSE },\r
- { "fNoOwnBookUCI", ArgFalse, (LPVOID) &appData.firstHasOwnBookUCI, FALSE },\r
- { "firstXBook", ArgFalse, (LPVOID) &appData.firstHasOwnBookUCI, FALSE },\r
- { "secondHasOwnBookUCI", ArgBoolean, (LPVOID) &appData.secondHasOwnBookUCI, FALSE },\r
- { "sNoOwnBookUCI", ArgFalse, (LPVOID) &appData.secondHasOwnBookUCI, FALSE },\r
- { "secondXBook", ArgFalse, (LPVOID) &appData.secondHasOwnBookUCI, FALSE },\r
- { "polyglotDir", ArgFilename, (LPVOID) &appData.polyglotDir, TRUE },\r
- { "usePolyglotBook", ArgBoolean, (LPVOID) &appData.usePolyglotBook, TRUE },\r
- { "polyglotBook", ArgFilename, (LPVOID) &appData.polyglotBook, TRUE },\r
- { "defaultHashSize", ArgInt, (LPVOID) &appData.defaultHashSize, TRUE }, \r
- { "defaultCacheSizeEGTB", ArgInt, (LPVOID) &appData.defaultCacheSizeEGTB, TRUE },\r
- { "defaultPathEGTB", ArgFilename, (LPVOID) &appData.defaultPathEGTB, TRUE },\r
+ TRUE, (ArgIniType) SCP_NAMES },\r
+ { "initialMode", ArgString, (LPVOID) &appData.initialMode, FALSE, (ArgIniType) "" },\r
+ { "mode", ArgString, (LPVOID) &appData.initialMode, FALSE, INVALID },\r
+ { "variant", ArgString, (LPVOID) &appData.variant, FALSE, (ArgIniType) "normal" },\r
+ { "firstProtocolVersion", ArgInt, (LPVOID) &appData.firstProtocolVersion, FALSE, (ArgIniType) PROTOVER },\r
+ { "secondProtocolVersion", ArgInt, (LPVOID) &appData.secondProtocolVersion,FALSE, (ArgIniType) PROTOVER },\r
+ { "showButtonBar", ArgBoolean, (LPVOID) &appData.showButtonBar, TRUE, (ArgIniType) TRUE },\r
+ { "buttons", ArgTrue, (LPVOID) &appData.showButtonBar, FALSE, INVALID },\r
+ { "xbuttons", ArgFalse, (LPVOID) &appData.showButtonBar, FALSE, INVALID },\r
+ { "-buttons", ArgFalse, (LPVOID) &appData.showButtonBar, FALSE, INVALID },\r
\r
- /* [AS] Layout stuff */\r
- { "moveHistoryUp", ArgBoolean, (LPVOID) &wpMoveHistory.visible, TRUE },\r
- { "moveHistoryX", ArgInt, (LPVOID) &wpMoveHistory.x, TRUE },\r
- { "moveHistoryY", ArgInt, (LPVOID) &wpMoveHistory.y, TRUE },\r
- { "moveHistoryW", ArgInt, (LPVOID) &wpMoveHistory.width, TRUE },\r
- { "moveHistoryH", ArgInt, (LPVOID) &wpMoveHistory.height, TRUE },\r
-\r
- { "evalGraphUp", ArgBoolean, (LPVOID) &wpEvalGraph.visible, TRUE },\r
- { "evalGraphX", ArgInt, (LPVOID) &wpEvalGraph.x, TRUE },\r
- { "evalGraphY", ArgInt, (LPVOID) &wpEvalGraph.y, TRUE },\r
- { "evalGraphW", ArgInt, (LPVOID) &wpEvalGraph.width, TRUE },\r
- { "evalGraphH", ArgInt, (LPVOID) &wpEvalGraph.height, TRUE },\r
-\r
- { "engineOutputUp", ArgBoolean, (LPVOID) &wpEngineOutput.visible, TRUE },\r
- { "engineOutputX", ArgInt, (LPVOID) &wpEngineOutput.x, TRUE },\r
- { "engineOutputY", ArgInt, (LPVOID) &wpEngineOutput.y, TRUE },\r
- { "engineOutputW", ArgInt, (LPVOID) &wpEngineOutput.width, TRUE },\r
- { "engineOutputH", ArgInt, (LPVOID) &wpEngineOutput.height, TRUE },\r
+ /* [AS] New features */\r
+ { "firstScoreAbs", ArgBoolean, (LPVOID) &appData.firstScoreIsAbsolute, FALSE, (ArgIniType) FALSE },\r
+ { "secondScoreAbs", ArgBoolean, (LPVOID) &appData.secondScoreIsAbsolute, FALSE, (ArgIniType) FALSE },\r
+ { "pgnExtendedInfo", ArgBoolean, (LPVOID) &appData.saveExtendedInfoInPGN, TRUE, (ArgIniType) FALSE },\r
+ { "hideThinkingFromHuman", ArgBoolean, (LPVOID) &appData.hideThinkingFromHuman, TRUE, (ArgIniType) FALSE },\r
+ { "liteBackTextureFile", ArgString, (LPVOID) &appData.liteBackTextureFile, TRUE, (ArgIniType) "" },\r
+ { "darkBackTextureFile", ArgString, (LPVOID) &appData.darkBackTextureFile, TRUE, (ArgIniType) "" },\r
+ { "liteBackTextureMode", ArgInt, (LPVOID) &appData.liteBackTextureMode, TRUE, (ArgIniType) BACK_TEXTURE_MODE_PLAIN },\r
+ { "darkBackTextureMode", ArgInt, (LPVOID) &appData.darkBackTextureMode, TRUE, (ArgIniType) BACK_TEXTURE_MODE_PLAIN },\r
+ { "renderPiecesWithFont", ArgString, (LPVOID) &appData.renderPiecesWithFont, TRUE, (ArgIniType) "" },\r
+ { "fontPieceToCharTable", ArgString, (LPVOID) &appData.fontToPieceTable, TRUE, (ArgIniType) "" },\r
+ { "fontPieceBackColorWhite", ArgColor, (LPVOID) &appData.fontBackColorWhite, TRUE, (ArgIniType) 0 },\r
+ { "fontPieceForeColorWhite", ArgColor, (LPVOID) &appData.fontForeColorWhite, TRUE, (ArgIniType) 0 },\r
+ { "fontPieceBackColorBlack", ArgColor, (LPVOID) &appData.fontBackColorBlack, TRUE, (ArgIniType) 0 },\r
+ { "fontPieceForeColorBlack", ArgColor, (LPVOID) &appData.fontForeColorBlack, TRUE, (ArgIniType) 0 },\r
+ { "fontPieceSize", ArgInt, (LPVOID) &appData.fontPieceSize, TRUE, (ArgIniType) 80 },\r
+ { "overrideLineGap", ArgInt, (LPVOID) &appData.overrideLineGap, TRUE, (ArgIniType) 1 },\r
+ { "adjudicateLossThreshold", ArgInt, (LPVOID) &appData.adjudicateLossThreshold, TRUE, (ArgIniType) 0 },\r
+ { "delayBeforeQuit", ArgInt, (LPVOID) &appData.delayBeforeQuit, TRUE, (ArgIniType) 0 },\r
+ { "delayAfterQuit", ArgInt, (LPVOID) &appData.delayAfterQuit, TRUE, (ArgIniType) 0 },\r
+ { "nameOfDebugFile", ArgFilename, (LPVOID) &appData.nameOfDebugFile, FALSE, (ArgIniType) "winboard.debug" },\r
+ { "debugfile", ArgFilename, (LPVOID) &appData.nameOfDebugFile, FALSE, INVALID },\r
+ { "pgnEventHeader", ArgString, (LPVOID) &appData.pgnEventHeader, TRUE, (ArgIniType) "Computer Chess Game" },\r
+ { "defaultFrcPosition", ArgInt, (LPVOID) &appData.defaultFrcPosition, TRUE, (ArgIniType) -1 },\r
+ { "gameListTags", ArgString, (LPVOID) &appData.gameListTags, TRUE, (ArgIniType) GLT_DEFAULT_TAGS },\r
+ { "saveOutOfBookInfo", ArgBoolean, (LPVOID) &appData.saveOutOfBookInfo, TRUE, (ArgIniType) TRUE },\r
+ { "showEvalInMoveHistory", ArgBoolean, (LPVOID) &appData.showEvalInMoveHistory, TRUE, (ArgIniType) TRUE },\r
+ { "evalHistColorWhite", ArgColor, (LPVOID) &appData.evalHistColorWhite, TRUE, INVALID },\r
+ { "evalHistColorBlack", ArgColor, (LPVOID) &appData.evalHistColorBlack, TRUE, INVALID },\r
+ { "highlightMoveWithArrow", ArgBoolean, (LPVOID) &appData.highlightMoveWithArrow, TRUE, (ArgIniType) FALSE },\r
+ { "highlightArrowColor", ArgColor, (LPVOID) &appData.highlightArrowColor, TRUE, INVALID },\r
+ { "stickyWindows", ArgBoolean, (LPVOID) &appData.useStickyWindows, TRUE, (ArgIniType) TRUE },\r
+ { "adjudicateDrawMoves", ArgInt, (LPVOID) &appData.adjudicateDrawMoves, TRUE, (ArgIniType) TRUE },\r
+ { "autoDisplayComment", ArgBoolean, (LPVOID) &appData.autoDisplayComment, TRUE, (ArgIniType) TRUE },\r
+ { "autoDisplayTags", ArgBoolean, (LPVOID) &appData.autoDisplayTags, TRUE, (ArgIniType) TRUE },\r
+ { "firstIsUCI", ArgBoolean, (LPVOID) &appData.firstIsUCI, FALSE, (ArgIniType) FALSE },\r
+ { "fUCI", ArgTrue, (LPVOID) &appData.firstIsUCI, FALSE, INVALID },\r
+ { "secondIsUCI", ArgBoolean, (LPVOID) &appData.secondIsUCI, FALSE, (ArgIniType) FALSE },\r
+ { "sUCI", ArgTrue, (LPVOID) &appData.secondIsUCI, FALSE, INVALID },\r
+ { "firstHasOwnBookUCI", ArgBoolean, (LPVOID) &appData.firstHasOwnBookUCI, FALSE, (ArgIniType) TRUE },\r
+ { "fNoOwnBookUCI", ArgFalse, (LPVOID) &appData.firstHasOwnBookUCI, FALSE, INVALID },\r
+ { "firstXBook", ArgFalse, (LPVOID) &appData.firstHasOwnBookUCI, FALSE, INVALID },\r
+ { "secondHasOwnBookUCI", ArgBoolean, (LPVOID) &appData.secondHasOwnBookUCI, FALSE, (ArgIniType) TRUE },\r
+ { "sNoOwnBookUCI", ArgFalse, (LPVOID) &appData.secondHasOwnBookUCI, FALSE, INVALID },\r
+ { "secondXBook", ArgFalse, (LPVOID) &appData.secondHasOwnBookUCI, FALSE, INVALID },\r
+ { "polyglotDir", ArgFilename, (LPVOID) &appData.polyglotDir, TRUE, (ArgIniType) "" },\r
+ { "usePolyglotBook", ArgBoolean, (LPVOID) &appData.usePolyglotBook, TRUE, (ArgIniType) FALSE },\r
+ { "polyglotBook", ArgFilename, (LPVOID) &appData.polyglotBook, TRUE, (ArgIniType) "" },\r
+ { "defaultHashSize", ArgInt, (LPVOID) &appData.defaultHashSize, TRUE, (ArgIniType) 64 }, \r
+ { "defaultCacheSizeEGTB", ArgInt, (LPVOID) &appData.defaultCacheSizeEGTB, TRUE, (ArgIniType) 4 },\r
+ { "defaultPathEGTB", ArgFilename, (LPVOID) &appData.defaultPathEGTB, TRUE, (ArgIniType) "c:\\egtb" },\r
\r
/* [HGM] board-size, adjudication and misc. options */\r
- { "boardWidth", ArgInt, (LPVOID) &appData.NrFiles, TRUE },\r
- { "boardHeight", ArgInt, (LPVOID) &appData.NrRanks, TRUE },\r
- { "holdingsSize", ArgInt, (LPVOID) &appData.holdingsSize, TRUE },\r
- { "matchPause", ArgInt, (LPVOID) &appData.matchPause, TRUE },\r
- { "pieceToCharTable", ArgString, (LPVOID) &appData.pieceToCharTable, FALSE },\r
- { "flipBlack", ArgBoolean, (LPVOID) &appData.upsideDown, TRUE },\r
- { "allWhite", ArgBoolean, (LPVOID) &appData.allWhite, TRUE },\r
- { "alphaRank", ArgBoolean, (LPVOID) &appData.alphaRank, FALSE },\r
- { "firstAlphaRank", ArgBoolean, (LPVOID) &first.alphaRank, FALSE },\r
- { "secondAlphaRank", ArgBoolean, (LPVOID) &second.alphaRank, FALSE },\r
- { "testClaims", ArgBoolean, (LPVOID) &appData.testClaims, TRUE },\r
- { "checkMates", ArgBoolean, (LPVOID) &appData.checkMates, TRUE },\r
- { "materialDraws", ArgBoolean, (LPVOID) &appData.materialDraws, TRUE },\r
- { "trivialDraws", ArgBoolean, (LPVOID) &appData.trivialDraws, TRUE },\r
- { "ruleMoves", ArgInt, (LPVOID) &appData.ruleMoves, TRUE },\r
- { "repeatsToDraw", ArgInt, (LPVOID) &appData.drawRepeats, TRUE },\r
- { "autoKibitz", ArgTrue, (LPVOID) &appData.autoKibitz, FALSE },\r
- { "engineDebugOutput", ArgInt, (LPVOID) &appData.engineComments, FALSE },\r
- { "userName", ArgString, (LPVOID) &appData.userName, FALSE },\r
- { "rewindIndex", ArgInt, (LPVOID) &appData.rewindIndex, FALSE },\r
- { "sameColorGames", ArgInt, (LPVOID) &appData.sameColorGames, FALSE },\r
- { "smpCores", ArgInt, (LPVOID) &appData.smpCores, TRUE },\r
- { "egtFormats", ArgString, (LPVOID) &appData.egtFormats, TRUE },\r
- { "niceEngines", ArgInt, (LPVOID) &appData.niceEngines, TRUE },\r
- { "firstLogo", ArgFilename, (LPVOID) &appData.firstLogo, FALSE },\r
- { "secondLogo", ArgFilename, (LPVOID) &appData.secondLogo, FALSE },\r
- { "autoLogo", ArgBoolean, (LPVOID) &appData.autoLogo, TRUE },\r
- { "firstOptions", ArgString, (LPVOID) &appData.firstOptions, FALSE },\r
- { "secondOptions", ArgString, (LPVOID) &appData.secondOptions, FALSE },\r
- { "firstNeedsNoncompliantFEN", ArgString, (LPVOID) &appData.fenOverride1, FALSE },\r
- { "secondNeedsNoncompliantFEN", ArgString, (LPVOID) &appData.fenOverride2, FALSE },\r
+ { "boardWidth", ArgInt, (LPVOID) &appData.NrFiles, TRUE, (ArgIniType) -1 },\r
+ { "boardHeight", ArgInt, (LPVOID) &appData.NrRanks, TRUE, (ArgIniType) -1 },\r
+ { "holdingsSize", ArgInt, (LPVOID) &appData.holdingsSize, TRUE, (ArgIniType) -1 },\r
+ { "matchPause", ArgInt, (LPVOID) &appData.matchPause, TRUE, (ArgIniType) 10000 },\r
+ { "pieceToCharTable", ArgString, (LPVOID) &appData.pieceToCharTable, FALSE, INVALID },\r
+ { "flipBlack", ArgBoolean, (LPVOID) &appData.upsideDown, TRUE, (ArgIniType) FALSE },\r
+ { "allWhite", ArgBoolean, (LPVOID) &appData.allWhite, TRUE, (ArgIniType) FALSE },\r
+ { "alphaRank", ArgBoolean, (LPVOID) &appData.alphaRank, FALSE, (ArgIniType) FALSE },\r
+ { "firstAlphaRank", ArgBoolean, (LPVOID) &first.alphaRank, FALSE, (ArgIniType) FALSE },\r
+ { "secondAlphaRank", ArgBoolean, (LPVOID) &second.alphaRank, FALSE, (ArgIniType) FALSE },\r
+ { "testClaims", ArgBoolean, (LPVOID) &appData.testClaims, TRUE, (ArgIniType) FALSE },\r
+ { "checkMates", ArgBoolean, (LPVOID) &appData.checkMates, TRUE, (ArgIniType) FALSE },\r
+ { "materialDraws", ArgBoolean, (LPVOID) &appData.materialDraws, TRUE, (ArgIniType) FALSE },\r
+ { "trivialDraws", ArgBoolean, (LPVOID) &appData.trivialDraws, TRUE, (ArgIniType) FALSE },\r
+ { "ruleMoves", ArgInt, (LPVOID) &appData.ruleMoves, TRUE, (ArgIniType) 51 },\r
+ { "repeatsToDraw", ArgInt, (LPVOID) &appData.drawRepeats, TRUE, (ArgIniType) 6 },\r
+ { "autoKibitz", ArgTrue, (LPVOID) &appData.autoKibitz, FALSE, INVALID },\r
+ { "engineDebugOutput", ArgInt, (LPVOID) &appData.engineComments, FALSE, (ArgIniType) 1 },\r
+ { "userName", ArgString, (LPVOID) &appData.userName, FALSE, INVALID },\r
+ { "rewindIndex", ArgInt, (LPVOID) &appData.rewindIndex, FALSE, INVALID },\r
+ { "sameColorGames", ArgInt, (LPVOID) &appData.sameColorGames, FALSE, INVALID },\r
+ { "smpCores", ArgInt, (LPVOID) &appData.smpCores, TRUE, (ArgIniType) 1 },\r
+ { "egtFormats", ArgString, (LPVOID) &appData.egtFormats, TRUE, (ArgIniType) "" },\r
+ { "niceEngines", ArgInt, (LPVOID) &appData.niceEngines, TRUE, INVALID },\r
+ { "firstLogo", ArgFilename, (LPVOID) &appData.firstLogo, FALSE, INVALID },\r
+ { "secondLogo", ArgFilename, (LPVOID) &appData.secondLogo, FALSE, INVALID },\r
+ { "autoLogo", ArgBoolean, (LPVOID) &appData.autoLogo, TRUE, INVALID },\r
+ { "firstOptions", ArgString, (LPVOID) &appData.firstOptions, FALSE, (ArgIniType) "" },\r
+ { "secondOptions", ArgString, (LPVOID) &appData.secondOptions, FALSE, (ArgIniType) "" },\r
+ { "firstNeedsNoncompliantFEN", ArgString, (LPVOID) &appData.fenOverride1, FALSE, (ArgIniType) "" },\r
+ { "secondNeedsNoncompliantFEN", ArgString, (LPVOID) &appData.fenOverride2, FALSE, (ArgIniType) "" },\r
+ { "keepAlive", ArgInt, (LPVOID) &appData.keepAlive, FALSE, INVALID },\r
+ { "icstype", ArgInt, (LPVOID) &ics_type, FALSE, INVALID },\r
+ { "forceIllegalMoves", ArgTrue, (LPVOID) &appData.forceIllegal, FALSE, INVALID },\r
\r
#ifdef ZIPPY\r
- { "zippyTalk", ArgBoolean, (LPVOID) &appData.zippyTalk, FALSE },\r
- { "zt", ArgTrue, (LPVOID) &appData.zippyTalk, FALSE },\r
- { "xzt", ArgFalse, (LPVOID) &appData.zippyTalk, FALSE },\r
- { "-zt", ArgFalse, (LPVOID) &appData.zippyTalk, FALSE },\r
- { "zippyPlay", ArgBoolean, (LPVOID) &appData.zippyPlay, FALSE },\r
- { "zp", ArgTrue, (LPVOID) &appData.zippyPlay, FALSE },\r
- { "xzp", ArgFalse, (LPVOID) &appData.zippyPlay, FALSE },\r
- { "-zp", ArgFalse, (LPVOID) &appData.zippyPlay, FALSE },\r
- { "zippyLines", ArgFilename, (LPVOID) &appData.zippyLines, FALSE },\r
- { "zippyPinhead", ArgString, (LPVOID) &appData.zippyPinhead, FALSE },\r
- { "zippyPassword", ArgString, (LPVOID) &appData.zippyPassword, FALSE },\r
- { "zippyPassword2", ArgString, (LPVOID) &appData.zippyPassword2, FALSE },\r
+ { "zippyTalk", ArgBoolean, (LPVOID) &appData.zippyTalk, FALSE, (ArgIniType) ZIPPY_TALK },\r
+ { "zt", ArgTrue, (LPVOID) &appData.zippyTalk, FALSE, INVALID },\r
+ { "xzt", ArgFalse, (LPVOID) &appData.zippyTalk, FALSE, INVALID },\r
+ { "-zt", ArgFalse, (LPVOID) &appData.zippyTalk, FALSE, INVALID },\r
+ { "zippyPlay", ArgBoolean, (LPVOID) &appData.zippyPlay, FALSE, (ArgIniType) ZIPPY_PLAY },\r
+ { "zp", ArgTrue, (LPVOID) &appData.zippyPlay, FALSE, INVALID },\r
+ { "xzp", ArgFalse, (LPVOID) &appData.zippyPlay, FALSE, INVALID },\r
+ { "-zp", ArgFalse, (LPVOID) &appData.zippyPlay, FALSE, INVALID },\r
+ { "zippyLines", ArgFilename, (LPVOID) &appData.zippyLines, FALSE, (ArgIniType) ZIPPY_LINES },\r
+ { "zippyPinhead", ArgString, (LPVOID) &appData.zippyPinhead, FALSE, (ArgIniType) ZIPPY_PINHEAD },\r
+ { "zippyPassword", ArgString, (LPVOID) &appData.zippyPassword, FALSE, (ArgIniType) ZIPPY_PASSWORD },\r
+ { "zippyPassword2", ArgString, (LPVOID) &appData.zippyPassword2, FALSE, (ArgIniType) ZIPPY_PASSWORD2 },\r
{ "zippyWrongPassword", ArgString, (LPVOID) &appData.zippyWrongPassword,\r
- FALSE },\r
- { "zippyAcceptOnly", ArgString, (LPVOID) &appData.zippyAcceptOnly, FALSE },\r
- { "zippyUseI", ArgBoolean, (LPVOID) &appData.zippyUseI, FALSE },\r
- { "zui", ArgTrue, (LPVOID) &appData.zippyUseI, FALSE },\r
- { "xzui", ArgFalse, (LPVOID) &appData.zippyUseI, FALSE },\r
- { "-zui", ArgFalse, (LPVOID) &appData.zippyUseI, FALSE },\r
- { "zippyBughouse", ArgInt, (LPVOID) &appData.zippyBughouse, FALSE },\r
+ FALSE, (ArgIniType) ZIPPY_WRONG_PASSWORD },\r
+ { "zippyAcceptOnly", ArgString, (LPVOID) &appData.zippyAcceptOnly, FALSE, (ArgIniType) ZIPPY_ACCEPT_ONLY },\r
+ { "zippyUseI", ArgBoolean, (LPVOID) &appData.zippyUseI, FALSE, (ArgIniType) ZIPPY_USE_I },\r
+ { "zui", ArgTrue, (LPVOID) &appData.zippyUseI, FALSE, INVALID },\r
+ { "xzui", ArgFalse, (LPVOID) &appData.zippyUseI, FALSE, INVALID },\r
+ { "-zui", ArgFalse, (LPVOID) &appData.zippyUseI, FALSE, INVALID },\r
+ { "zippyBughouse", ArgInt, (LPVOID) &appData.zippyBughouse, FALSE, (ArgIniType) ZIPPY_BUGHOUSE },\r
{ "zippyNoplayCrafty", ArgBoolean, (LPVOID) &appData.zippyNoplayCrafty,\r
- FALSE },\r
- { "znc", ArgTrue, (LPVOID) &appData.zippyNoplayCrafty, FALSE },\r
- { "xznc", ArgFalse, (LPVOID) &appData.zippyNoplayCrafty, FALSE },\r
- { "-znc", ArgFalse, (LPVOID) &appData.zippyNoplayCrafty, FALSE },\r
- { "zippyGameEnd", ArgString, (LPVOID) &appData.zippyGameEnd, FALSE },\r
- { "zippyGameStart", ArgString, (LPVOID) &appData.zippyGameStart, FALSE },\r
- { "zippyAdjourn", ArgBoolean, (LPVOID) &appData.zippyAdjourn, FALSE },\r
- { "zadj", ArgTrue, (LPVOID) &appData.zippyAdjourn, FALSE },\r
- { "xzadj", ArgFalse, (LPVOID) &appData.zippyAdjourn, FALSE },\r
- { "-zadj", ArgFalse, (LPVOID) &appData.zippyAdjourn, FALSE },\r
- { "zippyAbort", ArgBoolean, (LPVOID) &appData.zippyAbort, FALSE },\r
- { "zab", ArgTrue, (LPVOID) &appData.zippyAbort, FALSE },\r
- { "xzab", ArgFalse, (LPVOID) &appData.zippyAbort, FALSE },\r
- { "-zab", ArgFalse, (LPVOID) &appData.zippyAbort, FALSE },\r
- { "zippyVariants", ArgString, (LPVOID) &appData.zippyVariants, FALSE },\r
- { "zippyMaxGames", ArgInt, (LPVOID)&appData.zippyMaxGames, FALSE },\r
- { "zippyReplayTimeout", ArgInt, (LPVOID)&appData.zippyReplayTimeout, FALSE },\r
- { "zippyShortGame", ArgInt, (LPVOID)&appData.zippyShortGame, FALSE },\r
+ FALSE, (ArgIniType) ZIPPY_NOPLAY_CRAFTY },\r
+ { "znc", ArgTrue, (LPVOID) &appData.zippyNoplayCrafty, FALSE, INVALID },\r
+ { "xznc", ArgFalse, (LPVOID) &appData.zippyNoplayCrafty, FALSE, INVALID },\r
+ { "-znc", ArgFalse, (LPVOID) &appData.zippyNoplayCrafty, FALSE, INVALID },\r
+ { "zippyGameEnd", ArgString, (LPVOID) &appData.zippyGameEnd, FALSE, (ArgIniType) ZIPPY_GAME_END },\r
+ { "zippyGameStart", ArgString, (LPVOID) &appData.zippyGameStart, FALSE, (ArgIniType) ZIPPY_GAME_START },\r
+ { "zippyAdjourn", ArgBoolean, (LPVOID) &appData.zippyAdjourn, FALSE, (ArgIniType) ZIPPY_ADJOURN },\r
+ { "zadj", ArgTrue, (LPVOID) &appData.zippyAdjourn, FALSE, INVALID },\r
+ { "xzadj", ArgFalse, (LPVOID) &appData.zippyAdjourn, FALSE, INVALID },\r
+ { "-zadj", ArgFalse, (LPVOID) &appData.zippyAdjourn, FALSE, INVALID },\r
+ { "zippyAbort", ArgBoolean, (LPVOID) &appData.zippyAbort, FALSE, (ArgIniType) ZIPPY_ABORT },\r
+ { "zab", ArgTrue, (LPVOID) &appData.zippyAbort, FALSE, INVALID },\r
+ { "xzab", ArgFalse, (LPVOID) &appData.zippyAbort, FALSE, INVALID },\r
+ { "-zab", ArgFalse, (LPVOID) &appData.zippyAbort, FALSE, INVALID },\r
+ { "zippyVariants", ArgString, (LPVOID) &appData.zippyVariants, FALSE, (ArgIniType) ZIPPY_VARIANTS },\r
+ { "zippyMaxGames", ArgInt, (LPVOID)&appData.zippyMaxGames, FALSE, (ArgIniType) ZIPPY_MAX_GAMES},\r
+ { "zippyReplayTimeout", ArgInt, (LPVOID)&appData.zippyReplayTimeout, FALSE, (ArgIniType) ZIPPY_REPLAY_TIMEOUT },\r
+ { "zippyShortGame", ArgInt, (LPVOID)&appData.zippyShortGame, FALSE, INVALID },\r
/* Kludge to allow winboard.ini files from buggy 4.0.4 to be read: */\r
- { "zippyReplyTimeout", ArgInt, (LPVOID)&junk, FALSE },\r
+ { "zippyReplyTimeout", ArgInt, (LPVOID)&junk, FALSE, INVALID },\r
#endif\r
/* [HGM] options for broadcasting and time odds */\r
- { "serverMoves", ArgString, (LPVOID) &appData.serverMovesName, FALSE },\r
- { "suppressLoadMoves", ArgBoolean, (LPVOID) &appData.suppressLoadMoves, FALSE },\r
- { "serverPause", ArgInt, (LPVOID) &appData.serverPause, FALSE },\r
- { "firstTimeOdds", ArgInt, (LPVOID) &appData.firstTimeOdds, FALSE },\r
- { "secondTimeOdds", ArgInt, (LPVOID) &appData.secondTimeOdds, FALSE },\r
- { "timeOddsMode", ArgInt, (LPVOID) &appData.timeOddsMode, TRUE },\r
- { "firstAccumulateTC", ArgInt, (LPVOID) &appData.firstAccumulateTC, FALSE },\r
- { "secondAccumulateTC", ArgInt, (LPVOID) &appData.secondAccumulateTC, FALSE },\r
- { "firstNPS", ArgInt, (LPVOID) &appData.firstNPS, FALSE },\r
- { "secondNPS", ArgInt, (LPVOID) &appData.secondNPS, FALSE },\r
- { "noGUI", ArgTrue, (LPVOID) &appData.noGUI, FALSE },\r
- { NULL, ArgNone, NULL, FALSE }\r
+ { "serverMoves", ArgString, (LPVOID) &appData.serverMovesName, FALSE, (ArgIniType) NULL },\r
+ { "suppressLoadMoves", ArgBoolean, (LPVOID) &appData.suppressLoadMoves, FALSE, (ArgIniType) FALSE },\r
+ { "serverPause", ArgInt, (LPVOID) &appData.serverPause, FALSE, (ArgIniType) 15 },\r
+ { "firstTimeOdds", ArgInt, (LPVOID) &appData.firstTimeOdds, FALSE, (ArgIniType) 1 },\r
+ { "secondTimeOdds", ArgInt, (LPVOID) &appData.secondTimeOdds, FALSE, (ArgIniType) 1 },\r
+ { "timeOddsMode", ArgInt, (LPVOID) &appData.timeOddsMode, TRUE, INVALID },\r
+ { "firstAccumulateTC", ArgInt, (LPVOID) &appData.firstAccumulateTC, FALSE, (ArgIniType) 1 },\r
+ { "secondAccumulateTC", ArgInt, (LPVOID) &appData.secondAccumulateTC, FALSE, (ArgIniType) 1 },\r
+ { "firstNPS", ArgInt, (LPVOID) &appData.firstNPS, FALSE, (ArgIniType) -1 },\r
+ { "secondNPS", ArgInt, (LPVOID) &appData.secondNPS, FALSE, (ArgIniType) -1 },\r
+ { "noGUI", ArgTrue, (LPVOID) &appData.noGUI, FALSE, INVALID },\r
+ { "keepLineBreaksICS", ArgBoolean, (LPVOID) &appData.noJoin, TRUE, INVALID },\r
+ { "wrapContinuationSequence", ArgString, (LPVOID) &appData.wrapContSeq, FALSE, INVALID },\r
+ { "useInternalWrap", ArgTrue, (LPVOID) &appData.useInternalWrap, FALSE, INVALID }, /* noJoin usurps this if set */\r
+ \r
+ // [HGM] placement: put all window layouts last in ini file, but man X,Y before all others\r
+ { "minX", ArgZ, (LPVOID) &minX, FALSE, INVALID }, // [HGM] placement: to make suer auxialary windows can be placed\r
+ { "minY", ArgZ, (LPVOID) &minY, FALSE, INVALID },\r
+ { "winWidth", ArgInt, (LPVOID) &wpMain.width, TRUE, INVALID }, // [HGM] placement: dummies to remember right & bottom\r
+ { "winHeight", ArgInt, (LPVOID) &wpMain.height, TRUE, INVALID }, // for attaching auxiliary windows to them\r
+ { "x", ArgInt, (LPVOID) &wpMain.x, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+ { "y", ArgInt, (LPVOID) &wpMain.y, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+ { "icsX", ArgX, (LPVOID) &wpConsole.x, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+ { "icsY", ArgY, (LPVOID) &wpConsole.y, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+ { "icsW", ArgInt, (LPVOID) &wpConsole.width, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+ { "icsH", ArgInt, (LPVOID) &wpConsole.height, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+ { "analysisX", ArgX, (LPVOID) &dummy, FALSE, INVALID }, // [HGM] placement: analysis window no longer exists\r
+ { "analysisY", ArgY, (LPVOID) &dummy, FALSE, INVALID }, // provided for compatibility with old ini files\r
+ { "analysisW", ArgInt, (LPVOID) &dummy, FALSE, INVALID },\r
+ { "analysisH", ArgInt, (LPVOID) &dummy, FALSE, INVALID },\r
+ { "commentX", ArgX, (LPVOID) &wpComment.x, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+ { "commentY", ArgY, (LPVOID) &wpComment.y, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+ { "commentW", ArgInt, (LPVOID) &wpComment.width, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+ { "commentH", ArgInt, (LPVOID) &wpComment.height, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+ { "tagsX", ArgX, (LPVOID) &wpTags.x, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+ { "tagsY", ArgY, (LPVOID) &wpTags.y, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+ { "tagsW", ArgInt, (LPVOID) &wpTags.width, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+ { "tagsH", ArgInt, (LPVOID) &wpTags.height, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+ { "gameListX", ArgX, (LPVOID) &wpGameList.x, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+ { "gameListY", ArgY, (LPVOID) &wpGameList.y, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+ { "gameListW", ArgInt, (LPVOID) &wpGameList.width, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+ { "gameListH", ArgInt, (LPVOID) &wpGameList.height, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+ /* [AS] Layout stuff */\r
+ { "moveHistoryUp", ArgBoolean, (LPVOID) &wpMoveHistory.visible, TRUE, (ArgIniType) TRUE },\r
+ { "moveHistoryX", ArgX, (LPVOID) &wpMoveHistory.x, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+ { "moveHistoryY", ArgY, (LPVOID) &wpMoveHistory.y, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+ { "moveHistoryW", ArgInt, (LPVOID) &wpMoveHistory.width, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+ { "moveHistoryH", ArgInt, (LPVOID) &wpMoveHistory.height, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+\r
+ { "evalGraphUp", ArgBoolean, (LPVOID) &wpEvalGraph.visible, TRUE, (ArgIniType) TRUE },\r
+ { "evalGraphX", ArgX, (LPVOID) &wpEvalGraph.x, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+ { "evalGraphY", ArgY, (LPVOID) &wpEvalGraph.y, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+ { "evalGraphW", ArgInt, (LPVOID) &wpEvalGraph.width, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+ { "evalGraphH", ArgInt, (LPVOID) &wpEvalGraph.height, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+\r
+ { "engineOutputUp", ArgBoolean, (LPVOID) &wpEngineOutput.visible, TRUE, (ArgIniType) TRUE },\r
+ { "engineOutputX", ArgX, (LPVOID) &wpEngineOutput.x, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+ { "engineOutputY", ArgY, (LPVOID) &wpEngineOutput.y, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+ { "engineOutputW", ArgInt, (LPVOID) &wpEngineOutput.width, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+ { "engineOutputH", ArgInt, (LPVOID) &wpEngineOutput.height, TRUE, (ArgIniType) CW_USEDEFAULT },\r
+\r
+ { NULL, ArgNone, NULL, FALSE, INVALID }\r
};\r
\r
\r
mfp->italic = (strchr(p, 'i') != NULL);\r
mfp->underline = (strchr(p, 'u') != NULL);\r
mfp->strikeout = (strchr(p, 's') != NULL);\r
+ mfp->charset = DEFAULT_CHARSET;\r
+ q = strchr(p, 'c');\r
+ if (q)\r
+ mfp->charset = (BYTE) atoi(q+1);\r
}\r
\r
/* Color name parser.\r
*(int *) ad->argLoc = atoi(argValue);\r
break;\r
\r
+ case ArgX:\r
+ *(int *) ad->argLoc = atoi(argValue) + wpMain.x; // [HGM] placement: translate stored relative to absolute \r
+ break;\r
+\r
+ case ArgY:\r
+ *(int *) ad->argLoc = atoi(argValue) + wpMain.y; // (this is really kludgey, it should be done where used...)\r
+ break;\r
+\r
+ case ArgZ:\r
+ *(int *) ad->argLoc = atoi(argValue);\r
+ EnsureOnScreen(&wpMain.x, &wpMain.y, minX, minY); \r
+ break;\r
+\r
case ArgFloat:\r
*(float *) ad->argLoc = (float) atof(argValue);\r
break;\r
lf->lfItalic = mfp->italic;\r
lf->lfUnderline = mfp->underline;\r
lf->lfStrikeOut = mfp->strikeout;\r
- lf->lfCharSet = DEFAULT_CHARSET;\r
+ lf->lfCharSet = mfp->charset;\r
lf->lfOutPrecision = OUT_DEFAULT_PRECIS;\r
lf->lfClipPrecision = CLIP_DEFAULT_PRECIS;\r
lf->lfQuality = DEFAULT_QUALITY;\r
\r
VOID\r
SetDefaultSounds()\r
-{\r
+{ // [HGM] only sounds for which no option exists\r
ColorClass cc;\r
- SoundClass sc;\r
- for (cc = (ColorClass)0; cc < NColorClasses; cc++) {\r
+ for (cc = ColorNormal; cc < NColorClasses; cc++) {\r
textAttribs[cc].sound.name = strdup("");\r
textAttribs[cc].sound.data = NULL;\r
}\r
- for (sc = (SoundClass)0; sc < NSoundClasses; sc++) {\r
- sounds[sc].name = strdup("");\r
- sounds[sc].data = NULL;\r
- }\r
- sounds[(int)SoundBell].name = strdup(SOUND_BELL);\r
}\r
\r
VOID\r
LoadAllSounds()\r
-{\r
+{ // [HGM] import name from appData first\r
ColorClass cc;\r
SoundClass sc;\r
- for (cc = (ColorClass)0; cc < NColorClasses; cc++) {\r
+ for (cc = (ColorClass)0; cc < ColorNormal; cc++) {\r
+ textAttribs[cc].sound.name = strdup((&appData.soundShout)[cc]);\r
+ textAttribs[cc].sound.data = NULL;\r
MyLoadSound(&textAttribs[cc].sound);\r
}\r
for (sc = (SoundClass)0; sc < NSoundClasses; sc++) {\r
+ sounds[sc].name = strdup((&appData.soundMove)[sc]);\r
+ sounds[sc].data = NULL;\r
MyLoadSound(&sounds[sc]);\r
}\r
}\r
\r
+void\r
+SetDefaultsFromList()\r
+{ // [HGM] ini: take defaults from argDescriptor list\r
+ int i;\r
+\r
+ for(i=0; argDescriptors[i].argName != NULL; i++) {\r
+ if(argDescriptors[i].defaultValue != INVALID)\r
+ switch(argDescriptors[i].argType) {\r
+ case ArgBoolean:\r
+ case ArgTrue:\r
+ case ArgFalse:\r
+ *(Boolean *) argDescriptors[i].argLoc = (int)argDescriptors[i].defaultValue;\r
+ break;\r
+ case ArgInt:\r
+ case ArgX:\r
+ case ArgY:\r
+ case ArgZ:\r
+ *(int *) argDescriptors[i].argLoc = (int)argDescriptors[i].defaultValue;\r
+ break;\r
+ case ArgString:\r
+ case ArgFilename:\r
+ case ArgSettingsFilename:\r
+ *(char **) argDescriptors[i].argLoc = (char *)argDescriptors[i].defaultValue;\r
+ break;\r
+ case ArgBoardSize:\r
+ *(BoardSize *) argDescriptors[i].argLoc = (BoardSize)argDescriptors[i].defaultValue;\r
+ break;\r
+ case ArgFloat: // floats cannot be casted to int without precision loss\r
+ default: ; // some arg types cannot be initialized through table\r
+ }\r
+ }\r
+}\r
+\r
VOID\r
InitAppData(LPSTR lpCmdLine)\r
{\r
programName = szAppName;\r
\r
/* Initialize to defaults */\r
+ SetDefaultsFromList(); // this sets most defaults\r
+\r
+ // some parameters for which there are no options!\r
+ appData.Iconic = FALSE; /*unused*/\r
+ appData.cmailGameName = "";\r
+ appData.icsEngineAnalyze = FALSE;\r
+\r
+ // float: casting to int is not harmless, so default cannot be contained in table\r
+ appData.timeDelay = TIME_DELAY;\r
+\r
+ // colors have platform-dependent option format and internal representation\r
+ // their setting and parsing must remain in front-end\r
lightSquareColor = ParseColorName(LIGHT_SQUARE_COLOR);\r
darkSquareColor = ParseColorName(DARK_SQUARE_COLOR);\r
whitePieceColor = ParseColorName(WHITE_PIECE_COLOR);\r
highlightSquareColor = ParseColorName(HIGHLIGHT_SQUARE_COLOR);\r
premoveHighlightColor = ParseColorName(PREMOVE_HIGHLIGHT_COLOR);\r
consoleBackgroundColor = ParseColorName(COLOR_BKGD);\r
+ // the following must be moved out of appData to front-end variables\r
+ appData.evalHistColorWhite = ParseColorName( "#FFFFB0" );\r
+ appData.evalHistColorBlack = ParseColorName( "#AD5D3D" );\r
+ appData.highlightArrowColor = ParseColorName( "#FFFF80" );\r
+\r
+ // some complex, platform-dependent stuff\r
SetDefaultTextAttribs();\r
SetDefaultSounds();\r
- appData.movesPerSession = MOVES_PER_SESSION;\r
- appData.initString = INIT_STRING;\r
- appData.secondInitString = INIT_STRING;\r
- appData.firstComputerString = COMPUTER_STRING;\r
- appData.secondComputerString = COMPUTER_STRING;\r
- appData.firstChessProgram = FIRST_CHESS_PROGRAM;\r
- appData.secondChessProgram = SECOND_CHESS_PROGRAM;\r
- appData.firstPlaysBlack = FALSE;\r
- appData.noChessProgram = FALSE;\r
- chessProgram = FALSE;\r
- appData.firstHost = FIRST_HOST;\r
- appData.secondHost = SECOND_HOST;\r
- appData.firstDirectory = FIRST_DIRECTORY;\r
- appData.secondDirectory = SECOND_DIRECTORY;\r
- appData.bitmapDirectory = "";\r
- appData.remoteShell = REMOTE_SHELL;\r
- appData.remoteUser = "";\r
- appData.timeDelay = TIME_DELAY;\r
- appData.timeControl = TIME_CONTROL;\r
- appData.timeIncrement = TIME_INCREMENT;\r
- appData.icsActive = FALSE;\r
- appData.icsHost = "";\r
- appData.icsPort = ICS_PORT;\r
- appData.icsCommPort = ICS_COMM_PORT;\r
- appData.icsLogon = ICS_LOGON;\r
- appData.icsHelper = "";\r
- appData.useTelnet = FALSE;\r
- appData.telnetProgram = TELNET_PROGRAM;\r
- appData.gateway = "";\r
- appData.loadGameFile = "";\r
- appData.loadGameIndex = 0;\r
- appData.saveGameFile = "";\r
- appData.autoSaveGames = FALSE;\r
- appData.loadPositionFile = "";\r
- appData.loadPositionIndex = 1;\r
- appData.savePositionFile = "";\r
- appData.matchMode = FALSE;\r
- appData.matchGames = 0;\r
- appData.monoMode = FALSE;\r
- appData.debugMode = FALSE;\r
- appData.clockMode = TRUE;\r
- boardSize = (BoardSize) -1; /* determine by screen size */\r
- appData.Iconic = FALSE; /*unused*/\r
- appData.searchTime = "";\r
- appData.searchDepth = 0;\r
- appData.showCoords = FALSE;\r
- appData.ringBellAfterMoves = TRUE; /*obsolete in WinBoard*/\r
- appData.autoCallFlag = FALSE;\r
- appData.flipView = FALSE;\r
- appData.autoFlipView = TRUE;\r
- appData.cmailGameName = "";\r
- appData.alwaysPromoteToQueen = FALSE;\r
- appData.oldSaveStyle = FALSE;\r
- appData.quietPlay = FALSE;\r
- appData.showThinking = FALSE;\r
- appData.ponderNextMove = TRUE;\r
- appData.periodicUpdates = TRUE;\r
- appData.popupExitMessage = TRUE;\r
- appData.popupMoveErrors = FALSE;\r
- appData.autoObserve = FALSE;\r
- appData.autoComment = FALSE;\r
- appData.animate = TRUE;\r
- appData.animSpeed = 10;\r
- appData.animateDragging = TRUE;\r
- appData.highlightLastMove = TRUE;\r
- appData.getMoveList = TRUE;\r
- appData.testLegality = TRUE;\r
- appData.premove = TRUE;\r
- appData.premoveWhite = FALSE;\r
- appData.premoveWhiteText = "";\r
- appData.premoveBlack = FALSE;\r
- appData.premoveBlackText = "";\r
- appData.icsAlarm = TRUE;\r
- appData.icsAlarmTime = 5000;\r
- appData.autoRaiseBoard = TRUE;\r
- appData.localLineEditing = TRUE;\r
- appData.colorize = TRUE;\r
- appData.reuseFirst = TRUE;\r
- appData.reuseSecond = TRUE;\r
- appData.blindfold = FALSE;\r
- appData.icsEngineAnalyze = FALSE;\r
+\r
memset(&dcb, 0, sizeof(DCB)); // required by VS 2002 +\r
dcb.DCBlength = sizeof(DCB);\r
dcb.BaudRate = 9600;\r
dcb.ByteSize = 7;\r
dcb.Parity = SPACEPARITY;\r
dcb.StopBits = ONESTOPBIT;\r
- settingsFileName = SETTINGS_FILE;\r
- saveSettingsOnExit = TRUE;\r
- boardX = CW_USEDEFAULT;\r
- boardY = CW_USEDEFAULT;\r
- consoleX = CW_USEDEFAULT; \r
- consoleY = CW_USEDEFAULT; \r
- consoleW = CW_USEDEFAULT;\r
- consoleH = CW_USEDEFAULT;\r
- analysisX = CW_USEDEFAULT; \r
- analysisY = CW_USEDEFAULT; \r
- analysisW = CW_USEDEFAULT;\r
- analysisH = CW_USEDEFAULT;\r
- commentX = CW_USEDEFAULT; \r
- commentY = CW_USEDEFAULT; \r
- commentW = CW_USEDEFAULT;\r
- commentH = CW_USEDEFAULT;\r
- editTagsX = CW_USEDEFAULT; \r
- editTagsY = CW_USEDEFAULT; \r
- editTagsW = CW_USEDEFAULT;\r
- editTagsH = CW_USEDEFAULT;\r
- gameListX = CW_USEDEFAULT; \r
- gameListY = CW_USEDEFAULT; \r
- gameListW = CW_USEDEFAULT;\r
- gameListH = CW_USEDEFAULT;\r
- icsTextMenuString = ICS_TEXT_MENU_DEFAULT;\r
- icsNames = ICS_NAMES;\r
- firstChessProgramNames = FCP_NAMES;\r
- secondChessProgramNames = SCP_NAMES;\r
- appData.initialMode = "";\r
- appData.variant = "normal";\r
- appData.firstProtocolVersion = PROTOVER;\r
- appData.secondProtocolVersion = PROTOVER;\r
- appData.showButtonBar = TRUE;\r
-\r
- /* [AS] New properties (see comments in header file) */\r
- appData.firstScoreIsAbsolute = FALSE;\r
- appData.secondScoreIsAbsolute = FALSE;\r
- appData.saveExtendedInfoInPGN = FALSE;\r
- appData.hideThinkingFromHuman = FALSE;\r
- appData.liteBackTextureFile = "";\r
- appData.liteBackTextureMode = BACK_TEXTURE_MODE_PLAIN;\r
- appData.darkBackTextureFile = "";\r
- appData.darkBackTextureMode = BACK_TEXTURE_MODE_PLAIN;\r
- appData.renderPiecesWithFont = "";\r
- appData.fontToPieceTable = "";\r
- appData.fontBackColorWhite = 0;\r
- appData.fontForeColorWhite = 0;\r
- appData.fontBackColorBlack = 0;\r
- appData.fontForeColorBlack = 0;\r
- appData.fontPieceSize = 80;\r
- appData.overrideLineGap = 1;\r
- appData.adjudicateLossThreshold = 0;\r
- appData.delayBeforeQuit = 0;\r
- appData.delayAfterQuit = 0;\r
- appData.nameOfDebugFile = "winboard.debug";\r
- appData.pgnEventHeader = "Computer Chess Game";\r
- appData.defaultFrcPosition = -1;\r
- appData.gameListTags = GLT_DEFAULT_TAGS;\r
- appData.saveOutOfBookInfo = TRUE;\r
- appData.showEvalInMoveHistory = TRUE;\r
- appData.evalHistColorWhite = ParseColorName( "#FFFFB0" );\r
- appData.evalHistColorBlack = ParseColorName( "#AD5D3D" );\r
- appData.highlightMoveWithArrow = FALSE;\r
- appData.highlightArrowColor = ParseColorName( "#FFFF80" );\r
- appData.useStickyWindows = TRUE;\r
- appData.adjudicateDrawMoves = 0;\r
- appData.autoDisplayComment = TRUE;\r
- appData.autoDisplayTags = TRUE;\r
- appData.firstIsUCI = FALSE;\r
- appData.secondIsUCI = FALSE;\r
- appData.firstHasOwnBookUCI = TRUE;\r
- appData.secondHasOwnBookUCI = TRUE;\r
- appData.polyglotDir = "";\r
- appData.usePolyglotBook = FALSE;\r
- appData.polyglotBook = "";\r
- appData.defaultHashSize = 64;\r
- appData.defaultCacheSizeEGTB = 4;\r
- appData.defaultPathEGTB = "c:\\egtb";\r
- appData.firstOptions = "";\r
- appData.secondOptions = "";\r
-\r
- InitWindowPlacement( &wpMoveHistory );\r
- InitWindowPlacement( &wpEvalGraph );\r
- InitWindowPlacement( &wpEngineOutput );\r
-\r
- /* [HGM] User-selectable board size, adjudication control, miscellaneous */\r
- appData.NrFiles = -1;\r
- appData.NrRanks = -1;\r
- appData.holdingsSize = -1;\r
- appData.testClaims = FALSE;\r
- appData.checkMates = FALSE;\r
- appData.materialDraws= FALSE;\r
- appData.trivialDraws = FALSE;\r
- appData.ruleMoves = 51;\r
- appData.drawRepeats = 6;\r
- appData.matchPause = 10000;\r
- appData.alphaRank = FALSE;\r
- appData.allWhite = FALSE;\r
- appData.upsideDown = FALSE;\r
- appData.serverPause = 15;\r
- appData.serverMovesName = NULL;\r
- appData.suppressLoadMoves = FALSE;\r
- appData.firstTimeOdds = 1;\r
- appData.secondTimeOdds = 1;\r
- appData.firstAccumulateTC = 1; // combine previous and current sessions\r
- appData.secondAccumulateTC = 1;\r
- appData.firstNPS = -1; // [HGM] nps: use wall-clock time\r
- appData.secondNPS = -1;\r
- appData.engineComments = 1;\r
- appData.smpCores = 1; // [HGM] SMP: max nr of cores\r
- appData.egtFormats = "";\r
-\r
-#ifdef ZIPPY\r
- appData.zippyTalk = ZIPPY_TALK;\r
- appData.zippyPlay = ZIPPY_PLAY;\r
- appData.zippyLines = ZIPPY_LINES;\r
- appData.zippyPinhead = ZIPPY_PINHEAD;\r
- appData.zippyPassword = ZIPPY_PASSWORD;\r
- appData.zippyPassword2 = ZIPPY_PASSWORD2;\r
- appData.zippyWrongPassword = ZIPPY_WRONG_PASSWORD;\r
- appData.zippyAcceptOnly = ZIPPY_ACCEPT_ONLY;\r
- appData.zippyUseI = ZIPPY_USE_I;\r
- appData.zippyBughouse = ZIPPY_BUGHOUSE;\r
- appData.zippyNoplayCrafty = ZIPPY_NOPLAY_CRAFTY;\r
- appData.zippyGameEnd = ZIPPY_GAME_END;\r
- appData.zippyGameStart = ZIPPY_GAME_START;\r
- appData.zippyAdjourn = ZIPPY_ADJOURN;\r
- appData.zippyAbort = ZIPPY_ABORT;\r
- appData.zippyVariants = ZIPPY_VARIANTS;\r
- appData.zippyMaxGames = ZIPPY_MAX_GAMES;\r
- appData.zippyReplayTimeout = ZIPPY_REPLAY_TIMEOUT;\r
-#endif\r
\r
/* Point font array elements to structures and\r
parse default font names */\r
ParseArgs(StringGet, &lpCmdLine);\r
\r
/* [HGM] make sure board size is acceptable */\r
- if(appData.NrFiles > BOARD_SIZE ||\r
- appData.NrRanks > BOARD_SIZE )\r
- DisplayFatalError("Recompile with BOARD_SIZE > 12, to support this size", 0, 2);\r
+ if(appData.NrFiles > BOARD_FILES ||\r
+ appData.NrRanks > BOARD_RANKS )\r
+ DisplayFatalError("Recompile with BOARD_RANKS or BOARD_FILES, to support this size", 0, 2);\r
\r
/* [HGM] After parsing the options from the .ini file, and overruling them\r
* with options from the command line, we now make an even higher priority\r
MF_CHECKED : MF_UNCHECKED));\r
}\r
\r
+// [HGM] args: these three cases taken out to stay in front-end\r
+void\r
+SaveFontArg(FILE *f, ArgDescriptor *ad)\r
+{ // in WinBoard every board size has its own font, and the "argLoc" identifies the table,\r
+ // while the curent board size determines the element. This system should be ported to XBoard.\r
+ // What the table contains pointers to, and how to print the font description, remains platform-dependent\r
+ int bs;\r
+ for (bs=0; bs<NUM_SIZES; bs++) {\r
+ MyFontParams *mfp = &font[bs][(int) ad->argLoc]->mfp;\r
+ fprintf(f, "/size=%s ", sizeInfo[bs].name);\r
+ fprintf(f, "/%s=\"%s:%g%s%s%s%s%sc%d\"\n",\r
+ ad->argName, mfp->faceName, mfp->pointSize,\r
+ mfp->bold || mfp->italic || mfp->underline || mfp->strikeout ? " " : "",\r
+ mfp->bold ? "b" : "",\r
+ mfp->italic ? "i" : "",\r
+ mfp->underline ? "u" : "",\r
+ mfp->strikeout ? "s" : "",\r
+ (int)mfp->charset);\r
+ }\r
+ }\r
+\r
+VOID\r
+ExportSounds()\r
+{ // [HGM] copy the names from the internal WB variables to appData\r
+ ColorClass cc;\r
+ SoundClass sc;\r
+ for (cc = (ColorClass)0; cc < ColorNormal; cc++)\r
+ (&appData.soundShout)[cc] = textAttribs[cc].sound.name;\r
+ for (sc = (SoundClass)0; sc < NSoundClasses; sc++)\r
+ (&appData.soundMove)[sc] = sounds[sc].name;\r
+}\r
+\r
+void\r
+SaveAttribsArg(FILE *f, ArgDescriptor *ad)\r
+{ // here the "argLoc" defines a table index. It could have contained the 'ta' pointer itself, though\r
+ MyTextAttribs* ta = &textAttribs[(ColorClass)ad->argLoc];\r
+ fprintf(f, "/%s=\"%s%s%s%s%s#%02lx%02lx%02lx\"\n", ad->argName,\r
+ (ta->effects & CFE_BOLD) ? "b" : "",\r
+ (ta->effects & CFE_ITALIC) ? "i" : "",\r
+ (ta->effects & CFE_UNDERLINE) ? "u" : "",\r
+ (ta->effects & CFE_STRIKEOUT) ? "s" : "",\r
+ (ta->effects) ? " " : "",\r
+ ta->color&0xff, (ta->color >> 8)&0xff, (ta->color >> 16)&0xff);\r
+ }\r
+\r
+void\r
+SaveColor(FILE *f, ArgDescriptor *ad)\r
+{ // in WinBoard the color is an int and has to be converted to text. In X it would be a string already?\r
+ COLORREF color = *(COLORREF *)ad->argLoc;\r
+ fprintf(f, "/%s=#%02lx%02lx%02lx\n", ad->argName, \r
+ color&0xff, (color>>8)&0xff, (color>>16)&0xff);\r
+}\r
+\r
+int\r
+MainWindowUp()\r
+{ // [HGM] args: allows testing if main window is realized from back-end\r
+ return hwndMain != NULL;\r
+}\r
\r
VOID\r
SaveSettings(char* name)\r
{\r
FILE *f;\r
ArgDescriptor *ad;\r
- WINDOWPLACEMENT wp;\r
char dir[MSG_SIZ];\r
\r
- if (!hwndMain) return;\r
+ if (!MainWindowUp()) return;\r
\r
GetCurrentDirectory(MSG_SIZ, dir);\r
SetCurrentDirectory(installDir);\r
return;\r
}\r
fprintf(f, ";\n");\r
- fprintf(f, "; %s %s.%s Save Settings file\n", PRODUCT, VERSION, PATCHLEVEL);\r
+ fprintf(f, "; %s Save Settings file\n", PACKAGE_STRING);\r
fprintf(f, ";\n");\r
fprintf(f, "; You can edit the values of options that are already set in this file,\n");\r
fprintf(f, "; but if you add other options, the next Save Settings will not save them.\n");\r
fprintf(f, "; Use a shortcut, an @indirection file, or a .bat file instead.\n");\r
fprintf(f, ";\n");\r
\r
- wp.length = sizeof(WINDOWPLACEMENT);\r
- GetWindowPlacement(hwndMain, &wp);\r
- boardX = wp.rcNormalPosition.left;\r
- boardY = wp.rcNormalPosition.top;\r
-\r
- if (hwndConsole) {\r
- GetWindowPlacement(hwndConsole, &wp);\r
- consoleX = wp.rcNormalPosition.left;\r
- consoleY = wp.rcNormalPosition.top;\r
- consoleW = wp.rcNormalPosition.right - wp.rcNormalPosition.left;\r
- consoleH = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top;\r
- }\r
-\r
- if (analysisDialog) {\r
- GetWindowPlacement(analysisDialog, &wp);\r
- analysisX = wp.rcNormalPosition.left;\r
- analysisY = wp.rcNormalPosition.top;\r
- analysisW = wp.rcNormalPosition.right - wp.rcNormalPosition.left;\r
- analysisH = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top;\r
- }\r
-\r
- if (commentDialog) {\r
- GetWindowPlacement(commentDialog, &wp);\r
- commentX = wp.rcNormalPosition.left;\r
- commentY = wp.rcNormalPosition.top;\r
- commentW = wp.rcNormalPosition.right - wp.rcNormalPosition.left;\r
- commentH = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top;\r
- }\r
-\r
- if (editTagsDialog) {\r
- GetWindowPlacement(editTagsDialog, &wp);\r
- editTagsX = wp.rcNormalPosition.left;\r
- editTagsY = wp.rcNormalPosition.top;\r
- editTagsW = wp.rcNormalPosition.right - wp.rcNormalPosition.left;\r
- editTagsH = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top;\r
- }\r
-\r
- if (gameListDialog) {\r
- GetWindowPlacement(gameListDialog, &wp);\r
- gameListX = wp.rcNormalPosition.left;\r
- gameListY = wp.rcNormalPosition.top;\r
- gameListW = wp.rcNormalPosition.right - wp.rcNormalPosition.left;\r
- gameListH = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top;\r
- }\r
+ GetActualPlacement(hwndMain, &wpMain);\r
+ GetActualPlacement(hwndConsole, &wpConsole);\r
+ GetActualPlacement(commentDialog, &wpComment);\r
+ GetActualPlacement(editTagsDialog, &wpTags);\r
+ GetActualPlacement(gameListDialog, &wpGameList);\r
\r
/* [AS] Move history */\r
wpMoveHistory.visible = MoveHistoryIsUp();\r
- \r
- if( moveHistoryDialog ) {\r
- GetWindowPlacement(moveHistoryDialog, &wp);\r
- wpMoveHistory.x = wp.rcNormalPosition.left;\r
- wpMoveHistory.y = wp.rcNormalPosition.top;\r
- wpMoveHistory.width = wp.rcNormalPosition.right - wp.rcNormalPosition.left;\r
- wpMoveHistory.height = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top;\r
- }\r
+ GetActualPlacement(moveHistoryDialog, &wpMoveHistory);\r
\r
/* [AS] Eval graph */\r
wpEvalGraph.visible = EvalGraphIsUp();\r
-\r
- if( evalGraphDialog ) {\r
- GetWindowPlacement(evalGraphDialog, &wp);\r
- wpEvalGraph.x = wp.rcNormalPosition.left;\r
- wpEvalGraph.y = wp.rcNormalPosition.top;\r
- wpEvalGraph.width = wp.rcNormalPosition.right - wp.rcNormalPosition.left;\r
- wpEvalGraph.height = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top;\r
- }\r
+ GetActualPlacement(evalGraphDialog, &wpEvalGraph);\r
\r
/* [AS] Engine output */\r
wpEngineOutput.visible = EngineOutputIsUp();\r
+ GetActualPlacement(engineOutputDialog, &wpEngineOutput);\r
\r
- if( engineOutputDialog ) {\r
- GetWindowPlacement(engineOutputDialog, &wp);\r
- wpEngineOutput.x = wp.rcNormalPosition.left;\r
- wpEngineOutput.y = wp.rcNormalPosition.top;\r
- wpEngineOutput.width = wp.rcNormalPosition.right - wp.rcNormalPosition.left;\r
- wpEngineOutput.height = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top;\r
- }\r
+ // [HGM] in WB we have to copy sound names to appData first\r
+ ExportSounds();\r
\r
for (ad = argDescriptors; ad->argName != NULL; ad++) {\r
if (!ad->save) continue;\r
}\r
break;\r
case ArgInt:\r
+ case ArgZ:\r
fprintf(f, "/%s=%d\n", ad->argName, *(int *)ad->argLoc);\r
break;\r
+ case ArgX:\r
+ fprintf(f, "/%s=%d\n", ad->argName, *(int *)ad->argLoc - wpMain.x); // [HGM] placement: stor relative value\r
+ break;\r
+ case ArgY:\r
+ fprintf(f, "/%s=%d\n", ad->argName, *(int *)ad->argLoc - wpMain.y);\r
+ break;\r
case ArgFloat:\r
fprintf(f, "/%s=%g\n", ad->argName, *(float *)ad->argLoc);\r
break;\r
if (!*(Boolean *)ad->argLoc) fprintf(f, "/%s\n", ad->argName);\r
break;\r
case ArgColor:\r
- {\r
- COLORREF color = *(COLORREF *)ad->argLoc;\r
- fprintf(f, "/%s=#%02lx%02lx%02lx\n", ad->argName, \r
- color&0xff, (color>>8)&0xff, (color>>16)&0xff);\r
- }\r
+ SaveColor(f, ad);\r
break;\r
case ArgAttribs:\r
- {\r
- MyTextAttribs* ta = &textAttribs[(ColorClass)ad->argLoc];\r
- fprintf(f, "/%s=\"%s%s%s%s%s#%02lx%02lx%02lx\"\n", ad->argName,\r
- (ta->effects & CFE_BOLD) ? "b" : "",\r
- (ta->effects & CFE_ITALIC) ? "i" : "",\r
- (ta->effects & CFE_UNDERLINE) ? "u" : "",\r
- (ta->effects & CFE_STRIKEOUT) ? "s" : "",\r
- (ta->effects) ? " " : "",\r
- ta->color&0xff, (ta->color >> 8)&0xff, (ta->color >> 16)&0xff);\r
- }\r
break;\r
case ArgFilename:\r
if (strchr(*(char **)ad->argLoc, '\"')) {\r
sizeInfo[*(BoardSize *)ad->argLoc].name);\r
break;\r
case ArgFont:\r
- {\r
- int bs;\r
- for (bs=0; bs<NUM_SIZES; bs++) {\r
- MyFontParams *mfp = &font[bs][(int) ad->argLoc]->mfp;\r
- fprintf(f, "/size=%s ", sizeInfo[bs].name);\r
- fprintf(f, "/%s=\"%s:%g%s%s%s%s%s\"\n",\r
- ad->argName, mfp->faceName, mfp->pointSize,\r
- mfp->bold || mfp->italic || mfp->underline || mfp->strikeout ? " " : "",\r
- mfp->bold ? "b" : "",\r
- mfp->italic ? "i" : "",\r
- mfp->underline ? "u" : "",\r
- mfp->strikeout ? "s" : "");\r
- }\r
- }\r
+ SaveFontArg(f, ad);\r
break;\r
case ArgCommSettings:\r
PrintCommSettings(f, ad->argName, (DCB *)ad->argLoc);\r
}\r
else if( strstr(lf.lfFaceName,"GC2004D") != NULL ) {\r
/* Good Companion (Some characters get warped as literal :-( */\r
- char s[] = "1cmWG0ñueOS¯®oYI23wgQU";\r
+ char s[] = "1cmWG0??S??oYI23wgQU";\r
s[0]=0xB9; s[1]=0xA9; s[6]=0xB1; s[11]=0xBB; s[12]=0xAB; s[17]=0xB3;\r
SetCharTable(pieceToFontChar, s);\r
}\r
\r
/* Create bitmaps */\r
hfont_old = SelectObject( hdc, hPieceFont );\r
-#if 0\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_WP );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_WN );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_WB );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_WR );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_WQ );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_WK );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_BP );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_BN );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_BB );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_BR );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_BQ );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_BK );\r
-\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_WA );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_WC );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_WF );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_WH );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_WE );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_WW );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_WU );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_WO );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_WG );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_WM );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_WSG );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_WV );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_WAB );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_WD );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_WL );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_WS );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_BA );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_BC );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_BF );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_BH );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_BE );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_BW );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_BU );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_BO );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_BG );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_BM );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_BSG );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_BV );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_BAB );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_BD );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_BL );\r
- CreatePieceMaskFromFont( hdc_window, hdc, PM_BS );\r
-#else\r
for(i=(int)WhitePawn; i<(int)EmptySquare; i++) /* [HGM] made a loop for this */\r
if(PieceToChar((ChessSquare)i) != '.') /* skip unused pieces */\r
CreatePieceMaskFromFont( hdc_window, hdc, i );\r
-#endif\r
+\r
SelectObject( hdc, hfont_old );\r
\r
fontBitmapSquareSize = squareSize;\r
char buf[MSG_SIZ];\r
char *str;\r
HMENU hmenu = GetMenu(hwndMain);\r
- RECT crect, wrect;\r
+ RECT crect, wrect, oldRect;\r
int offby;\r
LOGBRUSH logbrush;\r
\r
/* [HGM] call with -2 uses old size (for if nr of files, ranks changes) */\r
if(boardSize == (BoardSize)(-2) ) boardSize = oldBoardSize;\r
\r
+ oldRect.left = wpMain.x; //[HGM] placement: remember previous window params\r
+ oldRect.top = wpMain.y;\r
+ oldRect.right = wpMain.x + wpMain.width;\r
+ oldRect.bottom = wpMain.y + wpMain.height;\r
+\r
tinyLayout = sizeInfo[boardSize].tinyLayout;\r
smallLayout = sizeInfo[boardSize].smallLayout;\r
squareSize = sizeInfo[boardSize].squareSize;\r
ReleaseDC(hwndMain, hdc);\r
\r
/* Compute where everything goes */\r
- if(first.programLogo || second.programLogo) {\r
+ if((first.programLogo || second.programLogo) && !tinyLayout) {\r
/* [HGM] logo: if either logo is on, reserve space for it */\r
logoHeight = 2*clockSize.cy;\r
leftLogoRect.left = OUTER_MARGIN;\r
rightLogoRect.bottom = OUTER_MARGIN + logoHeight;\r
\r
\r
- blackRect.left = leftLogoRect.right;\r
- blackRect.right = rightLogoRect.left;\r
- blackRect.top = OUTER_MARGIN;\r
- blackRect.bottom = blackRect.top + clockSize.cy;\r
+ whiteRect.left = leftLogoRect.right;\r
+ whiteRect.right = OUTER_MARGIN + boardWidth/2 - INNER_MARGIN/2;\r
+ whiteRect.top = OUTER_MARGIN;\r
+ whiteRect.bottom = whiteRect.top + logoHeight;\r
\r
- whiteRect.left = blackRect.left ;\r
- whiteRect.right = blackRect.right;\r
- whiteRect.top = blackRect.bottom;\r
- whiteRect.bottom = leftLogoRect.bottom;\r
+ blackRect.right = rightLogoRect.left;\r
+ blackRect.left = whiteRect.right + INNER_MARGIN;\r
+ blackRect.top = whiteRect.top;\r
+ blackRect.bottom = whiteRect.bottom;\r
} else {\r
whiteRect.left = OUTER_MARGIN;\r
whiteRect.right = whiteRect.left + boardWidth/2 - INNER_MARGIN/2;\r
- whiteRect.top = OUTER_MARGIN + logoHeight;\r
+ whiteRect.top = OUTER_MARGIN;\r
whiteRect.bottom = whiteRect.top + clockSize.cy;\r
\r
blackRect.left = whiteRect.right + INNER_MARGIN;\r
\r
sizeInfo[boardSize].cliWidth = boardRect.right + OUTER_MARGIN;\r
sizeInfo[boardSize].cliHeight = boardRect.bottom + OUTER_MARGIN;\r
- if(suppressVisibleEffects) return; // [HGM] when called for filling sizeInfo only\r
- winWidth = 2 * GetSystemMetrics(SM_CXFRAME) + boardRect.right + OUTER_MARGIN;\r
- winHeight = 2 * GetSystemMetrics(SM_CYFRAME) + GetSystemMetrics(SM_CYMENU) +\r
+ oldBoardSize = boardSize;\r
+ oldTinyLayout = tinyLayout;\r
+ winW = 2 * GetSystemMetrics(SM_CXFRAME) + boardRect.right + OUTER_MARGIN;\r
+ winH = 2 * GetSystemMetrics(SM_CYFRAME) + GetSystemMetrics(SM_CYMENU) +\r
GetSystemMetrics(SM_CYCAPTION) + boardRect.bottom + OUTER_MARGIN;\r
+ if(suppressVisibleEffects) return; // [HGM] when called for filling sizeInfo only\r
+ wpMain.width = winW; // [HGM] placement: set through temporary which can used by initial sizing choice\r
+ wpMain.height = winH; // without disturbing window attachments\r
GetWindowRect(hwndMain, &wrect);\r
- SetWindowPos(hwndMain, NULL, 0, 0, winWidth, winHeight,\r
+ SetWindowPos(hwndMain, NULL, 0, 0, wpMain.width, wpMain.height,\r
SWP_NOCOPYBITS|SWP_NOZORDER|SWP_NOMOVE);\r
+\r
+ // [HGM] placement: let attached windows follow size change.\r
+ ReattachAfterSize( &oldRect, wpMain.width, wpMain.height, moveHistoryDialog, &wpMoveHistory );\r
+ ReattachAfterSize( &oldRect, wpMain.width, wpMain.height, evalGraphDialog, &wpEvalGraph );\r
+ ReattachAfterSize( &oldRect, wpMain.width, wpMain.height, engineOutputDialog, &wpEngineOutput );\r
+ ReattachAfterSize( &oldRect, wpMain.width, wpMain.height, gameListDialog, &wpGameList );\r
+ ReattachAfterSize( &oldRect, wpMain.width, wpMain.height, hwndConsole, &wpConsole );\r
+\r
/* compensate if menu bar wrapped */\r
GetClientRect(hwndMain, &crect);\r
offby = boardRect.bottom + OUTER_MARGIN - crect.bottom;\r
- winHeight += offby;\r
+ wpMain.height += offby;\r
switch (flags) {\r
case WMSZ_TOPLEFT:\r
SetWindowPos(hwndMain, NULL, \r
- wrect.right - winWidth, wrect.bottom - winHeight, \r
- winWidth, winHeight, SWP_NOCOPYBITS|SWP_NOZORDER);\r
+ wrect.right - wpMain.width, wrect.bottom - wpMain.height, \r
+ wpMain.width, wpMain.height, SWP_NOCOPYBITS|SWP_NOZORDER);\r
break;\r
\r
case WMSZ_TOPRIGHT:\r
case WMSZ_TOP:\r
SetWindowPos(hwndMain, NULL, \r
- wrect.left, wrect.bottom - winHeight, \r
- winWidth, winHeight, SWP_NOCOPYBITS|SWP_NOZORDER);\r
+ wrect.left, wrect.bottom - wpMain.height, \r
+ wpMain.width, wpMain.height, SWP_NOCOPYBITS|SWP_NOZORDER);\r
break;\r
\r
case WMSZ_BOTTOMLEFT:\r
case WMSZ_LEFT:\r
SetWindowPos(hwndMain, NULL, \r
- wrect.right - winWidth, wrect.top, \r
- winWidth, winHeight, SWP_NOCOPYBITS|SWP_NOZORDER);\r
+ wrect.right - wpMain.width, wrect.top, \r
+ wpMain.width, wpMain.height, SWP_NOCOPYBITS|SWP_NOZORDER);\r
break;\r
\r
case WMSZ_BOTTOMRIGHT:\r
case WMSZ_BOTTOM:\r
case WMSZ_RIGHT:\r
default:\r
- SetWindowPos(hwndMain, NULL, 0, 0, winWidth, winHeight,\r
+ SetWindowPos(hwndMain, NULL, 0, 0, wpMain.width, wpMain.height,\r
SWP_NOCOPYBITS|SWP_NOZORDER|SWP_NOMOVE);\r
break;\r
}\r
\r
\r
/* if (boardSize == oldBoardSize) return; [HGM] variant might have changed */\r
- oldBoardSize = boardSize;\r
- oldTinyLayout = tinyLayout;\r
\r
/* Load piece bitmaps for this board size */\r
for (i=0; i<=2; i++) {\r
StretchBlt(hdc, x+tmpSize, y+tmpSize, -tmpSize, -tmpSize, tmphdc, 0, 0, tmpSize, tmpSize, 0x00B8074A);\r
else\r
BitBlt(hdc, x, y, tmpSize, tmpSize, tmphdc, 0, 0, 0x00B8074A);\r
-#if 0\r
- /* Use black piece color for outline of white pieces */\r
- /* Not sure this looks really good (though xboard does it).\r
- Maybe better to have another selectable color, default black */\r
- SelectObject(hdc, blackPieceBrush); /* could have own brush */\r
- SelectObject(tmphdc, PieceBitmap(piece, OUTLINE_PIECE));\r
- BitBlt(hdc, x, y, tmpSize, tmpSize, tmphdc, 0, 0, 0x00B8074A);\r
-#else\r
/* Use black for outline of white pieces */\r
SelectObject(tmphdc, PieceBitmap(piece, OUTLINE_PIECE));\r
if(appData.upsideDown && color==flipView)\r
StretchBlt(hdc, x+tmpSize, y+tmpSize, -tmpSize, -tmpSize, tmphdc, 0, 0, tmpSize, tmpSize, SRCAND);\r
else\r
BitBlt(hdc, x, y, tmpSize, tmpSize, tmphdc, 0, 0, SRCAND);\r
-#endif\r
} else {\r
-#if 0\r
- /* Use white piece color for details of black pieces */\r
- /* Requires filled-in solid bitmaps (BLACK_PIECE class); the\r
- WHITE_PIECE ones aren't always the right shape. */\r
- /* Not sure this looks really good (though xboard does it).\r
- Maybe better to have another selectable color, default medium gray? */\r
- oldBitmap = SelectObject(tmphdc, PieceBitmap(piece, BLACK_PIECE));\r
- oldBrush = SelectObject(hdc, whitePieceBrush); /* could have own brush */\r
- BitBlt(hdc, x, y, tmpSize, tmpSize, tmphdc, 0, 0, 0x00B8074A);\r
- SelectObject(tmphdc, PieceBitmap(piece, SOLID_PIECE));\r
- SelectObject(hdc, blackPieceBrush);\r
- BitBlt(hdc, x, y, tmpSize, tmpSize, tmphdc, 0, 0, 0x00B8074A);\r
-#else\r
/* Use square color for details of black pieces */\r
oldBitmap = SelectObject(tmphdc, PieceBitmap(piece, SOLID_PIECE));\r
oldBrush = SelectObject(hdc, blackPieceBrush);\r
StretchBlt(hdc, x+tmpSize, y+tmpSize, -tmpSize, -tmpSize, tmphdc, 0, 0, tmpSize, tmpSize, 0x00B8074A);\r
else\r
BitBlt(hdc, x, y, tmpSize, tmpSize, tmphdc, 0, 0, 0x00B8074A);\r
-#endif\r
}\r
SelectObject(hdc, oldBrush);\r
SelectObject(tmphdc, oldBitmap);\r
but animation is fast enough that it's difficult to notice.\r
*/\r
if( animInfo.piece == EmptySquare ) {\r
- if( (appData.highlightLastMove || appData.highlightDragging) && IsDrawArrowEnabled() && HasHighlightInfo() ) {\r
+ if( (appData.highlightLastMove || appData.highlightDragging) && IsDrawArrowEnabled() /*&& HasHighlightInfo()*/ ) {\r
result = TRUE;\r
}\r
}\r
if( liteBackTexture != NULL || darkBackTexture != NULL ) {\r
static int backTextureBoardSize; /* [HGM] boardsize: also new texture if board format changed */\r
if( backTextureSquareSize != squareSize \r
- || backTextureBoardSize != BOARD_WIDTH+BOARD_SIZE*BOARD_HEIGHT) {\r
- backTextureBoardSize = BOARD_WIDTH+BOARD_SIZE*BOARD_HEIGHT;\r
+ || backTextureBoardSize != BOARD_WIDTH+BOARD_FILES*BOARD_HEIGHT) {\r
+ backTextureBoardSize = BOARD_WIDTH+BOARD_FILES*BOARD_HEIGHT;\r
backTextureSquareSize = squareSize;\r
RebuildTextureSquareInfo();\r
}\r
#define MAX_CLIPS 200 /* more than enough */\r
\r
VOID\r
-DrawLogoOnDC(HDC hdc, RECT logoRect, ChessProgramState *cps)\r
+DrawLogoOnDC(HDC hdc, RECT logoRect, HBITMAP logo)\r
{\r
// HBITMAP bufferBitmap;\r
BITMAP bi;\r
HBITMAP hbm;\r
int w = 100, h = 50;\r
\r
- if(cps->programLogo == NULL) return;\r
+ if(logo == NULL) return;\r
// GetClientRect(hwndMain, &Rect);\r
// bufferBitmap = CreateCompatibleBitmap(hdc, Rect.right-Rect.left+1,\r
// Rect.bottom-Rect.top+1);\r
tmphdc = CreateCompatibleDC(hdc);\r
- hbm = SelectObject(tmphdc, (HBITMAP) cps->programLogo);\r
- if( GetObject( cps->programLogo, sizeof(bi), &bi ) > 0 ) {\r
+ hbm = SelectObject(tmphdc, logo);\r
+ if( GetObject( logo, sizeof(bi), &bi ) > 0 ) {\r
w = bi.bmWidth;\r
h = bi.bmHeight;\r
}\r
fullrepaint = TRUE;\r
}\r
\r
-#if 0\r
- if( fullrepaint ) {\r
- static int repaint_count = 0;\r
- char buf[128];\r
-\r
- repaint_count++;\r
- sprintf( buf, "FULL repaint: %d\n", repaint_count );\r
- OutputDebugString( buf );\r
- }\r
-#endif\r
-\r
if (board == NULL) {\r
if (!lastReqValid) {\r
return;\r
releaseDC = FALSE;\r
}\r
\r
-#if 0\r
- fprintf(debugFP, "*******************************\n"\r
- "repaint = %s\n"\r
- "dragInfo.from (%d,%d)\n"\r
- "dragInfo.start (%d,%d)\n"\r
- "dragInfo.pos (%d,%d)\n"\r
- "dragInfo.lastpos (%d,%d)\n", \r
- repaint ? "TRUE" : "FALSE",\r
- dragInfo.from.x, dragInfo.from.y, \r
- dragInfo.start.x, dragInfo.start.y,\r
- dragInfo.pos.x, dragInfo.pos.y,\r
- dragInfo.lastpos.x, dragInfo.lastpos.y);\r
- fprintf(debugFP, "prev: ");\r
- for (row = 0; row < BOARD_HEIGHT; row++) {\r
- for (column = 0; column < BOARD_WIDTH; column++) {\r
- fprintf(debugFP, "%d ", lastDrawn[row][column]);\r
- }\r
- }\r
- fprintf(debugFP, "\n");\r
- fprintf(debugFP, "board: ");\r
- for (row = 0; row < BOARD_HEIGHT; row++) {\r
- for (column = 0; column < BOARD_WIDTH; column++) {\r
- fprintf(debugFP, "%d ", board[row][column]);\r
- }\r
- }\r
- fprintf(debugFP, "\n");\r
- fflush(debugFP);\r
-#endif\r
-\r
/* Create some work-DCs */\r
hdcmem = CreateCompatibleDC(hdc);\r
tmphdc = CreateCompatibleDC(hdc);\r
DrawBoardOnDC(hdcmem, board, tmphdc);\r
}\r
if(logoHeight) {\r
- DrawLogoOnDC(hdc, leftLogoRect, flipClock ? &second : &first);\r
- DrawLogoOnDC(hdc, rightLogoRect, flipClock ? &first : &second);\r
+ HBITMAP whiteLogo = (HBITMAP) first.programLogo, blackLogo = (HBITMAP) second.programLogo;\r
+ if(appData.autoLogo) {\r
+ \r
+ switch(gameMode) { // pick logos based on game mode\r
+ case IcsObserving:\r
+ whiteLogo = second.programLogo; // ICS logo\r
+ blackLogo = second.programLogo;\r
+ default:\r
+ break;\r
+ case IcsPlayingWhite:\r
+ if(!appData.zippyPlay) whiteLogo = userLogo;\r
+ blackLogo = second.programLogo; // ICS logo\r
+ break;\r
+ case IcsPlayingBlack:\r
+ whiteLogo = second.programLogo; // ICS logo\r
+ blackLogo = appData.zippyPlay ? first.programLogo : userLogo;\r
+ break;\r
+ case TwoMachinesPlay:\r
+ if(first.twoMachinesColor[0] == 'b') {\r
+ whiteLogo = second.programLogo;\r
+ blackLogo = first.programLogo;\r
+ }\r
+ break;\r
+ case MachinePlaysWhite:\r
+ blackLogo = userLogo;\r
+ break;\r
+ case MachinePlaysBlack:\r
+ whiteLogo = userLogo;\r
+ blackLogo = first.programLogo;\r
+ }\r
+ }\r
+ DrawLogoOnDC(hdc, leftLogoRect, flipClock ? blackLogo : whiteLogo);\r
+ DrawLogoOnDC(hdc, rightLogoRect, flipClock ? whiteLogo : blackLogo);\r
}\r
\r
if( appData.highlightMoveWithArrow ) {\r
GetDIBits(tmphdc,bufferBitmap,0,b.bmHeight,pData,(BITMAPINFO*)&bih,DIB_RGB_COLORS);\r
// fprintf(diagFile, "%8x\n", (int) pData);\r
\r
-#if 1\r
wb = b.bmWidthBytes;\r
// count colors\r
for(i=0; i<wb*(b.bmHeight - boardRect.top + OUTER_MARGIN)>>2; i++) {\r
// write bitmap data\r
for(i=0; i<wb*(b.bmHeight - boardRect.top + OUTER_MARGIN); i++) \r
fputc(pData[i], diagFile);\r
-#endif\r
}\r
}\r
\r
* The offset boardRect.left or boardRect.top must already have been\r
* subtracted from x.\r
*/\r
-int\r
-EventToSquare(int x)\r
+int EventToSquare(x, limit)\r
+ int x, limit;\r
{\r
if (x <= 0)\r
return -2;\r
if ((x % (squareSize + lineGap)) >= squareSize)\r
return -1;\r
x /= (squareSize + lineGap);\r
- if (x >= BOARD_SIZE)\r
+ if (x >= limit)\r
return -2;\r
return x;\r
}\r
}\r
}\r
\r
-static int fromX = -1, fromY = -1, toX, toY;\r
+void DragPieceBegin(int x, int y)\r
+{\r
+ dragInfo.lastpos.x = boardRect.left + x;\r
+ dragInfo.lastpos.y = boardRect.top + y;\r
+ dragInfo.from.x = fromX;\r
+ dragInfo.from.y = fromY;\r
+ dragInfo.start = dragInfo.from;\r
+ SetCapture(hwndMain);\r
+}\r
+\r
+void DragPieceEnd(int x, int y)\r
+{\r
+ ReleaseCapture();\r
+ dragInfo.start.x = dragInfo.start.y = -1;\r
+ dragInfo.from = dragInfo.start;\r
+ dragInfo.pos = dragInfo.lastpos = dragInfo.start;\r
+}\r
\r
/* Event handler for mouse messages */\r
VOID\r
POINT pt;\r
static int recursive = 0;\r
HMENU hmenu;\r
-// BOOLEAN needsRedraw = FALSE;\r
- BOOLEAN saveAnimate;\r
BOOLEAN forceFullRepaint = IsFullRepaintPreferrable(); /* [AS] */\r
- static BOOLEAN sameAgain = FALSE, promotionChoice = FALSE;\r
- ChessMove moveType;\r
\r
if (recursive) {\r
if (message == WM_MBUTTONUP) {\r
\r
pt.x = LOWORD(lParam);\r
pt.y = HIWORD(lParam);\r
- x = EventToSquare(pt.x - boardRect.left);\r
- y = EventToSquare(pt.y - boardRect.top);\r
+ x = EventToSquare(pt.x - boardRect.left, BOARD_WIDTH);\r
+ y = EventToSquare(pt.y - boardRect.top, BOARD_HEIGHT);\r
if (!flipView && y >= 0) {\r
y = BOARD_HEIGHT - 1 - y;\r
}\r
\r
switch (message) {\r
case WM_LBUTTONDOWN:\r
- if(promotionChoice) { // we are waiting for a click to indicate promotion piece\r
- promotionChoice = FALSE; // only one chance: if click not OK it is interpreted as cancel\r
- if(appData.debugMode) fprintf(debugFP, "promotion click, x=%d, y=%d\n", x, y);\r
- if(gameInfo.holdingsWidth && \r
- (WhiteOnMove(currentMove) \r
- ? x == BOARD_WIDTH-1 && y < gameInfo.holdingsSize && y > 0\r
- : x == 0 && y >= BOARD_HEIGHT - gameInfo.holdingsSize && y < BOARD_HEIGHT-1) ) {\r
- // click in right holdings, for determining promotion piece\r
- ChessSquare p = boards[currentMove][y][x];\r
- if(appData.debugMode) fprintf(debugFP, "square contains %d\n", (int)p);\r
- if(p != EmptySquare) {\r
- FinishMove(WhitePromotionQueen, fromX, fromY, toX, toY, ToLower(PieceToChar(p)));\r
- fromX = fromY = -1;\r
- break;\r
- }\r
- }\r
- DrawPosition(FALSE, boards[currentMove]);\r
- break;\r
- }\r
- ErrorPopDown();\r
- sameAgain = FALSE;\r
- if (y == -2) {\r
- /* Downclick vertically off board; check if on clock */\r
if (PtInRect((LPRECT) &whiteRect, pt)) {\r
if (gameMode == EditPosition) {\r
SetWhiteToPlayEvent();\r
gameMode == MachinePlaysWhite) {\r
CallFlagEvent();\r
} else if (gameMode == EditGame) {\r
- AdjustClock((logoHeight > 0 ? flipView: flipClock), -1);\r
+ AdjustClock(flipClock, -1);\r
}\r
} else if (PtInRect((LPRECT) &blackRect, pt)) {\r
if (gameMode == EditPosition) {\r
gameMode == MachinePlaysBlack) {\r
CallFlagEvent();\r
} else if (gameMode == EditGame) {\r
- AdjustClock(!(logoHeight > 0 ? flipView: flipClock), -1);\r
+ AdjustClock(!flipClock, -1);\r
}\r
}\r
- if (!appData.highlightLastMove) {\r
- ClearHighlights();\r
- DrawPosition((int) (forceFullRepaint || FALSE), NULL);\r
- }\r
- fromX = fromY = -1;\r
dragInfo.start.x = dragInfo.start.y = -1;\r
dragInfo.from = dragInfo.start;\r
- break;\r
- } else if (x < 0 || y < 0\r
- /* [HGM] block clicks between board and holdings */\r
- || x == BOARD_LEFT-1 || x == BOARD_RGHT\r
- || (x == BOARD_LEFT-2 && y < BOARD_HEIGHT-gameInfo.holdingsSize)\r
- || (x == BOARD_RGHT+1 && y >= gameInfo.holdingsSize)\r
- /* EditPosition, empty square, or different color piece;\r
- click-click move is possible */\r
- ) {\r
- break;\r
- } else if (fromX == x && fromY == y) {\r
- /* Downclick on same square again */\r
- ClearHighlights();\r
- DrawPosition(forceFullRepaint || FALSE, NULL);\r
- sameAgain = TRUE; \r
- } else if (fromX != -1 &&\r
- x != BOARD_LEFT-2 && x != BOARD_RGHT+1 \r
- ) {\r
- /* Downclick on different square. */\r
- /* [HGM] if on holdings file, should count as new first click ! */\r
- { /* [HGM] <sameColor> now always do UserMoveTest(), and check colors there */\r
- toX = x;\r
- toY = y;\r
- /* [HGM] <popupFix> UserMoveEvent requires two calls now,\r
- to make sure move is legal before showing promotion popup */\r
- moveType = UserMoveTest(fromX, fromY, toX, toY, NULLCHAR);\r
- if(moveType == AmbiguousMove) { /* [HGM] Edit-Position move executed */\r
+ if(fromX == -1 && frozen) { // not sure where this is for\r
fromX = fromY = -1; \r
- ClearHighlights();\r
- DrawPosition(FALSE, boards[currentMove]);\r
- break; \r
- } else \r
- if(moveType != ImpossibleMove) {\r
- /* [HGM] We use PromotionToKnight in Shogi to indicate frorced promotion */\r
- if (moveType == WhitePromotionKnight || moveType == BlackPromotionKnight ||\r
- ((moveType == WhitePromotionQueen || moveType == BlackPromotionQueen) &&\r
- appData.alwaysPromoteToQueen)) {\r
- FinishMove(moveType, fromX, fromY, toX, toY, 'q');\r
- if (!appData.highlightLastMove) {\r
- ClearHighlights();\r
- DrawPosition(forceFullRepaint || FALSE, NULL);\r
- }\r
- } else\r
- if (moveType == WhitePromotionQueen || moveType == BlackPromotionQueen ) {\r
- SetHighlights(fromX, fromY, toX, toY);\r
- DrawPosition(forceFullRepaint || FALSE, NULL);\r
- /* [HGM] <popupFix> Popup calls FinishMove now.\r
- If promotion to Q is legal, all are legal! */\r
- if(gameInfo.variant == VariantSuper || gameInfo.variant == VariantGreat)\r
- { ChessSquare p = boards[currentMove][fromY][fromX], q = boards[currentMove][toY][toX];\r
- // kludge to temporarily execute move on display, wthout promotng yet\r
- promotionChoice = TRUE;\r
- boards[currentMove][fromY][fromX] = EmptySquare; // move Pawn to 8th rank\r
- boards[currentMove][toY][toX] = p;\r
- DrawPosition(FALSE, boards[currentMove]);\r
- boards[currentMove][fromY][fromX] = p; // take back, but display stays\r
- boards[currentMove][toY][toX] = q;\r
- } else\r
- PromotionPopup(hwnd);\r
- } else { /* not a promotion */\r
- if (appData.animate || appData.highlightLastMove) {\r
- SetHighlights(fromX, fromY, toX, toY);\r
- } else {\r
- ClearHighlights();\r
- }\r
- FinishMove(moveType, fromX, fromY, toX, toY, NULLCHAR);\r
- fromX = fromY = -1;\r
- if (appData.animate && !appData.highlightLastMove) {\r
- ClearHighlights();\r
- DrawPosition(forceFullRepaint || FALSE, NULL);\r
- }\r
- }\r
- break;\r
- }\r
- if (gotPremove) {\r
- /* [HGM] it seemed that braces were missing here */\r
- SetPremoveHighlights(fromX, fromY, toX, toY);\r
- fromX = fromY = -1;\r
- break;\r
- }\r
- }\r
- ClearHighlights();\r
- DrawPosition(forceFullRepaint || FALSE, NULL);\r
- }\r
- /* First downclick, or restart on a square with same color piece */\r
- if (!frozen && OKToStartUserMove(x, y)) {\r
- fromX = x;\r
- fromY = y;\r
- dragInfo.lastpos = pt;\r
- dragInfo.from.x = fromX;\r
- dragInfo.from.y = fromY;\r
- dragInfo.start = dragInfo.from;\r
- SetCapture(hwndMain);\r
- } else {\r
- fromX = fromY = -1;\r
- dragInfo.start.x = dragInfo.start.y = -1;\r
- dragInfo.from = dragInfo.start;\r
DrawPosition(forceFullRepaint || FALSE, NULL); /* [AS] */\r
+ break;\r
}\r
+ LeftClick(Press, pt.x - boardRect.left, pt.y - boardRect.top);\r
+ DrawPosition(TRUE, NULL);\r
break;\r
\r
case WM_LBUTTONUP:\r
- ReleaseCapture();\r
- if (fromX == -1) break;\r
- if (x == fromX && y == fromY) {\r
- dragInfo.from.x = dragInfo.from.y = -1;\r
- /* Upclick on same square */\r
- if (sameAgain) {\r
- /* Clicked same square twice: abort click-click move */\r
- fromX = fromY = -1;\r
- gotPremove = 0;\r
- ClearPremoveHighlights();\r
- } else {\r
- /* First square clicked: start click-click move */\r
- SetHighlights(fromX, fromY, -1, -1);\r
- }\r
- DrawPosition(forceFullRepaint || FALSE, NULL);\r
- } else if (dragInfo.from.x < 0 || dragInfo.from.y < 0) {\r
- /* Errant click; ignore */\r
- break;\r
- } else {\r
- /* Finish drag move. */\r
- if (appData.debugMode) {\r
- fprintf(debugFP, "release\n");\r
- }\r
- dragInfo.from.x = dragInfo.from.y = -1;\r
- toX = x;\r
- toY = y;\r
- saveAnimate = appData.animate; /* sorry, Hawk :) */\r
- appData.animate = appData.animate && !appData.animateDragging;\r
- moveType = UserMoveTest(fromX, fromY, toX, toY, NULLCHAR);\r
- if(moveType == AmbiguousMove) { /* [HGM] Edit-Position move executed */\r
- fromX = fromY = -1; \r
- ClearHighlights();\r
- DrawPosition(FALSE, boards[currentMove]);\r
- break; \r
- } else \r
- if(moveType != ImpossibleMove) {\r
- /* [HGM] use move type to determine if move is promotion.\r
- Knight is Shogi kludge for mandatory promotion, Queen means choice */\r
- if (moveType == WhitePromotionKnight || moveType == BlackPromotionKnight ||\r
- ((moveType == WhitePromotionQueen || moveType == BlackPromotionQueen) &&\r
- appData.alwaysPromoteToQueen)) \r
- FinishMove(moveType, fromX, fromY, toX, toY, 'q');\r
- else \r
- if (moveType == WhitePromotionQueen || moveType == BlackPromotionQueen ) {\r
- DrawPosition(forceFullRepaint || FALSE, NULL);\r
- if(gameInfo.variant == VariantSuper || gameInfo.variant == VariantGreat)\r
- { ChessSquare p = boards[currentMove][fromY][fromX], q = boards[currentMove][toY][toX];\r
- // kludge to temporarily execute move on display, wthout promotng yet\r
- promotionChoice = TRUE;\r
- boards[currentMove][fromY][fromX] = EmptySquare; // move Pawn to 8th rank\r
- boards[currentMove][toY][toX] = p;\r
- DrawPosition(FALSE, boards[currentMove]);\r
- boards[currentMove][fromY][fromX] = p; // take back, but display stays\r
- boards[currentMove][toY][toX] = q;\r
- break;\r
- } else\r
- PromotionPopup(hwnd); /* [HGM] Popup now calls FinishMove */\r
- } else {\r
- if(saveAnimate /* ^$!%@#$!$ */ && gameInfo.variant == VariantAtomic \r
- && (boards[currentMove][toY][toX] != EmptySquare || \r
- moveType == WhiteCapturesEnPassant || \r
- moveType == BlackCapturesEnPassant ) )\r
- AnimateAtomicCapture(fromX, fromY, toX, toY, 20);\r
- FinishMove(moveType, fromX, fromY, toX, toY, NULLCHAR);\r
- }\r
- }\r
- if (gotPremove) SetPremoveHighlights(fromX, fromY, toX, toY);\r
- appData.animate = saveAnimate;\r
- fromX = fromY = -1;\r
- if (appData.highlightDragging && !appData.highlightLastMove) {\r
- ClearHighlights();\r
- }\r
- if (appData.animate || appData.animateDragging ||\r
- appData.highlightDragging || gotPremove) {\r
- DrawPosition(forceFullRepaint || FALSE, NULL);\r
- }\r
- }\r
- dragInfo.start.x = dragInfo.start.y = -1; \r
- dragInfo.pos = dragInfo.lastpos = dragInfo.start;\r
+ LeftClick(Release, pt.x - boardRect.left, pt.y - boardRect.top);\r
+ DrawPosition(TRUE, NULL);\r
break;\r
\r
case WM_MOUSEMOVE:\r
{\r
BOOL full_repaint = FALSE;\r
\r
- sameAgain = FALSE; /* [HGM] if we drag something around, do keep square selected */\r
if (appData.animateDragging) {\r
dragInfo.pos = pt;\r
}\r
if(y == -2) {\r
/* [HGM] right mouse button in clock area edit-game mode ups clock */\r
if (PtInRect((LPRECT) &whiteRect, pt)) {\r
- if (gameMode == EditGame) AdjustClock((logoHeight > 0 ? flipView: flipClock), 1);\r
+ if (gameMode == EditGame) AdjustClock(flipClock, 1);\r
} else if (PtInRect((LPRECT) &blackRect, pt)) {\r
- if (gameMode == EditGame) AdjustClock(!(logoHeight > 0 ? flipView: flipClock), 1);\r
+ if (gameMode == EditGame) AdjustClock(!flipClock, 1);\r
}\r
}\r
DrawPosition(TRUE, NULL);\r
else\r
MenuPopup(hwnd, pt, LoadMenu(hInst, "WhitePieceMenu"), -1);\r
} else { /* message == WM_RBUTTONDOWN */\r
-#if 0\r
- if (buttonCount == 3) {\r
- if (wParam & MK_SHIFT) \r
- MenuPopup(hwnd, pt, LoadMenu(hInst, "WhitePieceMenu"), -1);\r
- else\r
- MenuPopup(hwnd, pt, LoadMenu(hInst, "BlackPieceMenu"), -1);\r
- } else {\r
- MenuPopup(hwnd, pt, LoadMenu(hInst, "PieceMenu"), -1);\r
- }\r
-#else\r
/* Just have one menu, on the right button. Windows users don't\r
think to try the middle one, and sometimes other software steals\r
it, or it doesn't really exist. */\r
MenuPopup(hwnd, pt, LoadMenu(hInst, "PieceMenu"), -1);\r
else\r
MenuPopup(hwnd, pt, LoadMenu(hInst, "ShogiPieceMenu"), -1);\r
-#endif\r
}\r
break;\r
case IcsPlayingWhite:\r
case '\r':\r
SendMessage(hwndMain, WM_COMMAND, MAKEWPARAM(buttonDesc[i].id, 0), 0);\r
return TRUE;\r
- case '\t':\r
- if (appData.icsActive) {\r
- if (GetKeyState(VK_SHIFT) < 0) {\r
- /* shifted */\r
- HWND h = GetDlgItem(hwndConsole, OPT_ConsoleInput);\r
- if (IsIconic(hwndConsole)) ShowWindow(hwndConsole, SW_RESTORE);\r
- SetFocus(h);\r
- } else {\r
- /* unshifted */\r
- HWND h = GetDlgItem(hwndConsole, OPT_ConsoleText);\r
- if (IsIconic(hwndConsole)) ShowWindow(hwndConsole, SW_RESTORE);\r
- SetFocus(h);\r
- }\r
- return TRUE;\r
- }\r
- break;\r
default:\r
- if (appData.icsActive) {\r
+ if (appData.icsActive && (isalpha((char)wParam) || wParam == '0')) {\r
+ // [HGM] movenum: only letters or leading zero should go to ICS input\r
HWND h = GetDlgItem(hwndConsole, OPT_ConsoleInput);\r
if (IsIconic(hwndConsole)) ShowWindow(hwndConsole, SW_RESTORE);\r
SetFocus(h);\r
only show the popup when we are already sure the move is valid or\r
legal. We pass a faulty move type, but the kludge is that FinishMove\r
will figure out it is a promotion from the promoChar. */\r
- FinishMove(NormalMove, fromX, fromY, toX, toY, promoChar);\r
+ UserMoveEvent(fromX, fromY, toX, toY, promoChar);\r
+ fromX = fromY = -1;\r
if (!appData.highlightLastMove) {\r
ClearHighlights();\r
DrawPosition(FALSE, NULL);\r
FreeProcInstance(lpProc);\r
}\r
\r
+void\r
+PromotionPopUp()\r
+{\r
+ DrawPosition(TRUE, NULL);\r
+ PromotionPopup(hwndMain);\r
+}\r
+\r
/* Toggle ShowThinking */\r
VOID\r
ToggleShowThinking()\r
}\r
}\r
\r
+int get_term_width()\r
+{\r
+ HDC hdc;\r
+ TEXTMETRIC tm;\r
+ RECT rc;\r
+ HFONT hfont, hold_font;\r
+ LOGFONT lf;\r
+ HWND hText;\r
+\r
+ if (hwndConsole)\r
+ hText = GetDlgItem(hwndConsole, OPT_ConsoleText);\r
+ else\r
+ return 79;\r
+\r
+ // get the text metrics\r
+ hdc = GetDC(hText);\r
+ lf = font[boardSize][CONSOLE_FONT]->lf;\r
+ if (consoleCF.dwEffects & CFE_BOLD)\r
+ lf.lfWeight = FW_BOLD;\r
+ if (consoleCF.dwEffects & CFE_ITALIC)\r
+ lf.lfItalic = TRUE;\r
+ if (consoleCF.dwEffects & CFE_STRIKEOUT)\r
+ lf.lfStrikeOut = TRUE;\r
+ if (consoleCF.dwEffects & CFE_UNDERLINE)\r
+ lf.lfUnderline = TRUE;\r
+ hfont = CreateFontIndirect(&lf);\r
+ hold_font = SelectObject(hdc, hfont);\r
+ GetTextMetrics(hdc, &tm);\r
+ SelectObject(hdc, hold_font);\r
+ DeleteObject(hfont);\r
+ ReleaseDC(hText, hdc);\r
+\r
+ // get the rectangle\r
+ SendMessage(hText, EM_GETRECT, 0, (LPARAM)&rc);\r
+\r
+ return (rc.right-rc.left) / tm.tmAveCharWidth;\r
+}\r
+\r
+void UpdateICSWidth(HWND hText)\r
+{\r
+ LONG old_width, new_width;\r
+\r
+ new_width = get_term_width(hText, FALSE);\r
+ old_width = GetWindowLong(hText, GWL_USERDATA);\r
+ if (new_width != old_width)\r
+ {\r
+ ics_update_width(new_width);\r
+ SetWindowLong(hText, GWL_USERDATA, new_width);\r
+ }\r
+}\r
+\r
VOID\r
ChangedConsoleFont()\r
{\r
paraf.dxOffset = WRAP_INDENT;\r
SendMessage(hText, EM_SETPARAFORMAT, 0, (LPARAM) ¶f);\r
SendMessage(hText, EM_EXSETSEL, 0, (LPARAM)&sel);\r
+ UpdateICSWidth(hText);\r
}\r
\r
/*---------------------------------------------------------------------------*\\r
MouseEvent(hwnd, message, wParam, lParam);\r
break;\r
\r
+ JAWS_KB_NAVIGATION\r
+\r
case WM_CHAR:\r
\r
- if (appData.icsActive) {\r
- if (wParam == '\t') {\r
- if (GetKeyState(VK_SHIFT) < 0) {\r
- /* shifted */\r
- HWND h = GetDlgItem(hwndConsole, OPT_ConsoleInput);\r
- if (IsIconic(hwndConsole)) ShowWindow(hwndConsole, SW_RESTORE);\r
- SetFocus(h);\r
- } else {\r
- /* unshifted */\r
- HWND h = GetDlgItem(hwndConsole, OPT_ConsoleText);\r
- if (IsIconic(hwndConsole)) ShowWindow(hwndConsole, SW_RESTORE);\r
- SetFocus(h);\r
- }\r
- } else {\r
+ JAWS_ALT_INTERCEPT\r
+\r
+ if (appData.icsActive && ((char)wParam == '\r' || (char)wParam > ' ' && !((char)wParam >= '1' && (char)wParam <= '9'))) { \r
+ // [HGM] movenum: for non-zero digits we always do type-in dialog\r
HWND h = GetDlgItem(hwndConsole, OPT_ConsoleInput);\r
if (IsIconic(hwndConsole)) ShowWindow(hwndConsole, SW_RESTORE);\r
SetFocus(h);\r
SendMessage(h, message, wParam, lParam);\r
- }\r
- } else if (isalpha((char)wParam) || isdigit((char)wParam)) {\r
- PopUpMoveDialog((char)wParam);\r
+ } else if(lParam != KF_REPEAT) {\r
+ if (isalpha((char)wParam) || isdigit((char)wParam)) {\r
+ PopUpMoveDialog((char)wParam);\r
+ } else if((char)wParam == 003) CopyGameToClipboard();\r
+ else if((char)wParam == 026) PasteGameOrFENFromClipboard();\r
}\r
+\r
break;\r
\r
case WM_PALETTECHANGED:\r
nnew = RealizePalette(hdc);\r
if (nnew > 0) {\r
paletteChanged = TRUE;\r
-#if 0\r
- UpdateColors(hdc);\r
-#else\r
- InvalidateRect(hwnd, &boardRect, FALSE);/*faster!*/\r
-#endif\r
+ InvalidateRect(hwnd, &boardRect, FALSE);\r
}\r
ReleaseDC(hwnd, hdc);\r
}\r
switch (wmId) {\r
case IDM_NewGame:\r
ResetGameEvent();\r
- AnalysisPopDown();\r
+ SAY("new game enter a move to play against the computer with white");\r
break;\r
\r
case IDM_NewGameFRC:\r
if( NewGameFRC() == 0 ) {\r
ResetGameEvent();\r
- AnalysisPopDown();\r
}\r
break;\r
\r
}\r
else {\r
EvalGraphPopUp();\r
+ SetFocus(hwndMain);\r
}\r
break;\r
\r
GameListOptions();\r
break;\r
\r
+ case IDM_NewChat:\r
+ ChatPopUp();\r
+ break;\r
+\r
case IDM_CopyPosition:\r
CopyFENToClipboard();\r
break;\r
TagsPopUp(tags, CmailMsg());\r
free(tags);\r
}\r
+ SAY("computer starts playing white");\r
break;\r
\r
case IDM_MachineBlack:\r
TagsPopUp(tags, CmailMsg());\r
free(tags);\r
}\r
+ SAY("computer starts playing black");\r
break;\r
\r
case IDM_TwoMachines:\r
TagsPopUp(tags, CmailMsg());\r
free(tags);\r
}\r
+ SAY("programs start playing each other");\r
break;\r
\r
case IDM_AnalysisMode:\r
sprintf(buf, "%s does not support analysis", first.tidy);\r
DisplayError(buf, 0);\r
} else {\r
+ SAY("analyzing current position");\r
/* [DM] icsEngineAnlyze [HGM] Why is this front-end??? */\r
if (appData.icsActive) {\r
if (gameMode != IcsObserving) {\r
\r
case IDM_EditGame:\r
EditGameEvent();\r
+ SAY("edit game");\r
break;\r
\r
case IDM_EditPosition:\r
EditPositionEvent();\r
+ SAY("to set up a position type a FEN");\r
break;\r
\r
case IDM_Training:\r
break;\r
\r
case IDM_EditComment:\r
- if (commentDialogUp && editComment) {\r
+ if (commentUp && editComment) {\r
CommentPopDown();\r
} else {\r
EditCommentEvent();\r
SetFocus(hwndMain);\r
break;\r
\r
+ JAWS_MENU_ITEMS\r
+\r
case IDM_Forward:\r
ForwardEvent();\r
SetFocus(hwndMain);\r
case IDM_FlipClock:\r
flipClock = !flipClock;\r
DisplayBothClocks();\r
+ DrawPosition(FALSE, NULL);\r
+ break;\r
+\r
+ case IDM_MuteSounds:\r
+ mute = !mute; // [HGM] mute: keep track of global muting variable\r
+ CheckMenuItem(GetMenu(hwndMain),IDM_MuteSounds, \r
+ MF_BYCOMMAND|(mute?MF_CHECKED:MF_UNCHECKED));\r
break;\r
\r
case IDM_GeneralOptions:\r
EnginePlayOptionsPopup(hwnd);\r
break;\r
\r
+ case IDM_Engine1Options:\r
+ EngineOptionsPopup(hwnd, &first);\r
+ break;\r
+\r
+ case IDM_Engine2Options:\r
+ EngineOptionsPopup(hwnd, &second);\r
+ break;\r
+\r
case IDM_OptionsUCI:\r
UciOptionsPopup(hwnd);\r
break;\r
break;\r
\r
case IDM_HELPCONTENTS:\r
- if (!WinHelp (hwnd, "winboard.hlp", HELP_KEY,(DWORD)(LPSTR)"CONTENTS")) {\r
- MessageBox (GetFocus(),\r
+ if (!MyHelp (hwnd, "winboard.hlp", HELP_KEY,(DWORD)(LPSTR)"CONTENTS") &&\r
+ !HtmlHelp(hwnd, "winboard.chm", 0, 0) ) {\r
+ MessageBox (GetFocus(),\r
"Unable to activate help",\r
szAppName, MB_SYSTEMMODAL|MB_OK|MB_ICONHAND);\r
}\r
break;\r
\r
case IDM_HELPSEARCH:\r
- if (!WinHelp(hwnd, "winboard.hlp", HELP_PARTIALKEY, (DWORD)(LPSTR)"")) {\r
+ if (!MyHelp (hwnd, "winboard.hlp", HELP_PARTIALKEY, (DWORD)(LPSTR)"") &&\r
+ !HtmlHelp(hwnd, "winboard.chm", 0, 0) ) {\r
MessageBox (GetFocus(),\r
"Unable to activate help",\r
szAppName, MB_SYSTEMMODAL|MB_OK|MB_ICONHAND);\r
RECT rcMain;\r
\r
// GetWindowRect( hwnd, &rcMain ); //[HGM] sticky: in XP this returned new position, not old\r
- rcMain.left = boardX; // replace by these 4 lines to reconstruct old rect\r
- rcMain.right = boardX + winWidth;\r
- rcMain.top = boardY;\r
- rcMain.bottom = boardY + winHeight;\r
+ rcMain.left = wpMain.x; // replace by these 4 lines to reconstruct old rect\r
+ rcMain.right = wpMain.x + wpMain.width;\r
+ rcMain.top = wpMain.y;\r
+ rcMain.bottom = wpMain.y + wpMain.height;\r
\r
ReattachAfterMove( &rcMain, lpwp->x, lpwp->y, moveHistoryDialog, &wpMoveHistory );\r
ReattachAfterMove( &rcMain, lpwp->x, lpwp->y, evalGraphDialog, &wpEvalGraph );\r
ReattachAfterMove( &rcMain, lpwp->x, lpwp->y, engineOutputDialog, &wpEngineOutput );\r
- boardX = lpwp->x;\r
- boardY = lpwp->y;\r
+ ReattachAfterMove( &rcMain, lpwp->x, lpwp->y, gameListDialog, &wpGameList );\r
+ ReattachAfterMove( &rcMain, lpwp->x, lpwp->y, hwndConsole, &wpConsole );\r
+ wpMain.x = lpwp->x;\r
+ wpMain.y = lpwp->y;\r
}\r
}\r
break;\r
MyPlaySound(MySound *ms)\r
{\r
BOOLEAN ok = FALSE;\r
+\r
+ if(mute) return TRUE; // [HGM] mute: suppress all sound play when muted\r
switch (ms->name[0]) {\r
case NULLCHAR:\r
+ if(appData.debugMode) fprintf(debugFP, "silence\n");\r
/* Silence */\r
ok = TRUE;\r
break;\r
/* Don't print an error: this can happen innocently if the sound driver\r
is busy; for instance, if another instance of WinBoard is playing\r
a sound at about the same time. */\r
-#if 0\r
- if (!ok) {\r
- char buf[MSG_SIZ];\r
- sprintf(buf, "Error playing sound %s", ms->name);\r
- DisplayError(buf, GetLastError());\r
- }\r
-#endif\r
return ok;\r
}\r
\r
/* Center the dialog over the application window */\r
CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));\r
SetDlgItemText(hDlg, ABOUTBOX_Version, programVersion);\r
+ JAWS_COPYRIGHT\r
return (TRUE);\r
\r
case WM_COMMAND: /* message: received a command */\r
GetClientRect(hDlg, &rect);\r
sizeX = rect.right;\r
sizeY = rect.bottom;\r
- if (commentX != CW_USEDEFAULT && commentY != CW_USEDEFAULT &&\r
- commentW != CW_USEDEFAULT && commentH != CW_USEDEFAULT) {\r
+ if (wpComment.x != CW_USEDEFAULT && wpComment.y != CW_USEDEFAULT &&\r
+ wpComment.width != CW_USEDEFAULT && wpComment.height != CW_USEDEFAULT) {\r
WINDOWPLACEMENT wp;\r
- EnsureOnScreen(&commentX, &commentY);\r
+ EnsureOnScreen(&wpComment.x, &wpComment.y, 0, 0);\r
wp.length = sizeof(WINDOWPLACEMENT);\r
wp.flags = 0;\r
wp.showCmd = SW_SHOW;\r
wp.ptMaxPosition.x = wp.ptMaxPosition.y = 0;\r
- wp.rcNormalPosition.left = commentX;\r
- wp.rcNormalPosition.right = commentX + commentW;\r
- wp.rcNormalPosition.top = commentY;\r
- wp.rcNormalPosition.bottom = commentY + commentH;\r
+ wp.rcNormalPosition.left = wpComment.x;\r
+ wp.rcNormalPosition.right = wpComment.x + wpComment.width;\r
+ wp.rcNormalPosition.top = wpComment.y;\r
+ wp.rcNormalPosition.bottom = wpComment.y + wpComment.height;\r
SetWindowPlacement(hDlg, &wp);\r
\r
GetClientRect(hDlg, &rect);\r
\r
if (commentDialog) {\r
SendMessage(commentDialog, WM_INITDIALOG, 0, 0);\r
- if (!commentDialogUp) ShowWindow(commentDialog, SW_SHOW);\r
+ if (!commentUp) ShowWindow(commentDialog, SW_SHOW);\r
} else {\r
lpProc = MakeProcInstance((FARPROC)CommentDialog, hInst);\r
CreateDialog(hInst, MAKEINTRESOURCE(DLG_EditComment),\r
hwndMain, (DLGPROC)lpProc);\r
FreeProcInstance(lpProc);\r
}\r
- commentDialogUp = TRUE;\r
+ commentUp = TRUE;\r
}\r
\r
\r
case WM_COMMAND:\r
switch (LOWORD(wParam)) {\r
case IDOK:\r
+ GetDlgItemText(hDlg, OPT_Move, move, sizeof(move));\r
+ { int n; Board board;\r
+ // [HGM] FENedit\r
+ if(gameMode == EditPosition && ParseFEN(board, &n, move) ) {\r
+ EditPositionPasteFEN(move);\r
+ EndDialog(hDlg, TRUE);\r
+ return TRUE;\r
+ }\r
+ // [HGM] movenum: allow move number to be typed in any mode\r
+ if(sscanf(move, "%d", &n) == 1 && n != 0 ) {\r
+ ToNrEvent(2*n-1);\r
+ EndDialog(hDlg, TRUE);\r
+ return TRUE;\r
+ }\r
+ }\r
if (gameMode != EditGame && currentMove != forwardMostMove && \r
gameMode != Training) {\r
DisplayMoveError("Displayed move is not current");\r
} else {\r
- GetDlgItemText(hDlg, OPT_Move, move, sizeof(move));\r
- if (ParseOneMove(move, gameMode == EditPosition ? blackPlaysFirst : currentMove, \r
+// GetDlgItemText(hDlg, OPT_Move, move, sizeof(move)); // moved upstream\r
+ int ok = ParseOneMove(move, gameMode == EditPosition ? blackPlaysFirst : currentMove, \r
+ &moveType, &fromX, &fromY, &toX, &toY, &promoChar);\r
+ if(!ok && move[0] >= 'a') { move[0] += 'A' - 'a'; ok = 2; } // [HGM] try also capitalized\r
+ if (ok==1 || ok && ParseOneMove(move, gameMode == EditPosition ? blackPlaysFirst : currentMove, \r
&moveType, &fromX, &fromY, &toX, &toY, &promoChar)) {\r
if (gameMode != Training)\r
forwardMostMove = currentMove;\r
gameMode == AnalyzeMode || gameMode == EditGame || \r
gameMode == EditPosition || gameMode == IcsExamining ||\r
gameMode == IcsPlayingWhite || gameMode == IcsPlayingBlack ||\r
+ isdigit(firstchar) && // [HGM] movenum: allow typing in of move nr in 'passive' modes\r
+ ( gameMode == AnalyzeFile || gameMode == PlayFromGameFile ||\r
+ gameMode == IcsObserving || gameMode == TwoMachinesPlay ) ||\r
gameMode == Training) {\r
lpProc = MakeProcInstance((FARPROC)TypeInMoveDialog, hInst);\r
DialogBoxParam(hInst, MAKEINTRESOURCE(DLG_TypeInMove),\r
case IDOK:\r
GetDlgItemText(hDlg, OPT_Name, move, sizeof(move));\r
appData.userName = strdup(move);\r
+ SetUserLogo();\r
\r
EndDialog(hDlg, TRUE);\r
return TRUE;\r
case WM_INITDIALOG:\r
GetWindowRect(hDlg, &rChild);\r
\r
- SetWindowPos(hDlg, NULL, boardX, boardY-height, winWidth, height,\r
+ SetWindowPos(hDlg, NULL, wpMain.x, wpMain.y-height, wpMain.width, height,\r
SWP_NOZORDER);\r
\r
/* \r
}\r
break;\r
case WM_CHAR:\r
+ if(wParam != '\022') {\r
if (wParam == '\t') {\r
if (GetKeyState(VK_SHIFT) < 0) {\r
/* shifted */\r
}\r
} else {\r
hInput = GetDlgItem(hwndConsole, OPT_ConsoleInput);\r
- SetFocus(hInput);\r
+ JAWS_DELETE( SetFocus(hInput); )\r
SendMessage(hInput, message, wParam, lParam);\r
}\r
return 0;\r
+ } // [HGM] navigate: for Ctrl+R, flow into nex case (moved up here) to summon up menu\r
+ case WM_RBUTTONUP:\r
+ if (GetKeyState(VK_SHIFT) & ~1) {\r
+ SendDlgItemMessage(hwndConsole, OPT_ConsoleText, \r
+ WM_COMMAND, MAKEWPARAM(IDM_QuickPaste, 0), 0);\r
+ } else {\r
+ POINT pt;\r
+ HMENU hmenu = LoadIcsTextMenu(icsTextMenuEntry);\r
+ SendMessage(hwnd, EM_EXGETSEL, 0, (LPARAM)&sel);\r
+ if (sel.cpMin == sel.cpMax) {\r
+ EnableMenuItem(hmenu, IDM_Copy, MF_BYCOMMAND|MF_GRAYED);\r
+ EnableMenuItem(hmenu, IDM_QuickPaste, MF_BYCOMMAND|MF_GRAYED);\r
+ }\r
+ if (!IsClipboardFormatAvailable(CF_TEXT)) {\r
+ EnableMenuItem(hmenu, IDM_Paste, MF_BYCOMMAND|MF_GRAYED);\r
+ }\r
+ pt.x = LOWORD(lParam);\r
+ pt.y = HIWORD(lParam);\r
+ MenuPopup(hwnd, pt, hmenu, -1);\r
+ }\r
+ return 0;\r
case WM_PASTE:\r
hInput = GetDlgItem(hwndConsole, OPT_ConsoleInput);\r
SetFocus(hInput);\r
SendMessage(hwnd, EM_HIDESELECTION, FALSE, FALSE);\r
}\r
return 0;\r
- case WM_RBUTTONUP:\r
- if (GetKeyState(VK_SHIFT) & ~1) {\r
- SendDlgItemMessage(hwndConsole, OPT_ConsoleText, \r
- WM_COMMAND, MAKEWPARAM(IDM_QuickPaste, 0), 0);\r
- } else {\r
- POINT pt;\r
- HMENU hmenu = LoadIcsTextMenu(icsTextMenuEntry);\r
- SendMessage(hwnd, EM_EXGETSEL, 0, (LPARAM)&sel);\r
- if (sel.cpMin == sel.cpMax) {\r
- EnableMenuItem(hmenu, IDM_Copy, MF_BYCOMMAND|MF_GRAYED);\r
- EnableMenuItem(hmenu, IDM_QuickPaste, MF_BYCOMMAND|MF_GRAYED);\r
- }\r
- if (!IsClipboardFormatAvailable(CF_TEXT)) {\r
- EnableMenuItem(hmenu, IDM_Paste, MF_BYCOMMAND|MF_GRAYED);\r
- }\r
- pt.x = LOWORD(lParam);\r
- pt.y = HIWORD(lParam);\r
- MenuPopup(hwnd, pt, hmenu, -1);\r
- }\r
- return 0;\r
case WM_COMMAND:\r
switch (LOWORD(wParam)) {\r
case IDM_QuickPaste:\r
case '\021': /* Ctrl+Q */\r
quoteNextChar = TRUE;\r
return 0;\r
+ JAWS_REPLAY\r
default:\r
break;\r
}\r
ConsoleWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
{\r
static SnapData sd;\r
- static HWND hText, hInput /*, hFocus*/;\r
-// InputSource *is = consoleInputSource;\r
+ HWND hText, hInput;\r
RECT rect;\r
static int sizeX, sizeY;\r
int newSizeX, newSizeY;\r
MINMAXINFO *mmi;\r
+ WORD wMask;\r
+\r
+ hText = GetDlgItem(hDlg, OPT_ConsoleText);\r
+ hInput = GetDlgItem(hDlg, OPT_ConsoleInput);\r
\r
switch (message) {\r
+ case WM_NOTIFY:\r
+ if (((NMHDR*)lParam)->code == EN_LINK)\r
+ {\r
+ ENLINK *pLink = (ENLINK*)lParam;\r
+ if (pLink->msg == WM_LBUTTONUP)\r
+ {\r
+ TEXTRANGE tr;\r
+\r
+ tr.chrg = pLink->chrg;\r
+ tr.lpstrText = malloc(1+tr.chrg.cpMax-tr.chrg.cpMin);\r
+ SendMessage(hText, EM_GETTEXTRANGE, 0, (LPARAM)&tr);\r
+ ShellExecute(NULL, "open", tr.lpstrText, NULL, NULL, SW_SHOW);\r
+ free(tr.lpstrText);\r
+ }\r
+ }\r
+ break;\r
case WM_INITDIALOG: /* message: initialize dialog box */\r
hwndConsole = hDlg;\r
- hText = GetDlgItem(hDlg, OPT_ConsoleText);\r
- hInput = GetDlgItem(hDlg, OPT_ConsoleInput);\r
SetFocus(hInput);\r
consoleTextWindowProc = (WNDPROC)\r
SetWindowLong(hText, GWL_WNDPROC, (LONG) ConsoleTextSubclass);\r
GetClientRect(hDlg, &rect);\r
sizeX = rect.right;\r
sizeY = rect.bottom;\r
- if (consoleX != CW_USEDEFAULT && consoleY != CW_USEDEFAULT &&\r
- consoleW != CW_USEDEFAULT && consoleH != CW_USEDEFAULT) {\r
+ if (wpConsole.x != CW_USEDEFAULT && wpConsole.y != CW_USEDEFAULT &&\r
+ wpConsole.width != CW_USEDEFAULT && wpConsole.height != CW_USEDEFAULT) {\r
WINDOWPLACEMENT wp;\r
- EnsureOnScreen(&consoleX, &consoleY);\r
+ EnsureOnScreen(&wpConsole.x, &wpConsole.y, 0, 0);\r
wp.length = sizeof(WINDOWPLACEMENT);\r
wp.flags = 0;\r
wp.showCmd = SW_SHOW;\r
wp.ptMaxPosition.x = wp.ptMaxPosition.y = 0;\r
- wp.rcNormalPosition.left = consoleX;\r
- wp.rcNormalPosition.right = consoleX + consoleW;\r
- wp.rcNormalPosition.top = consoleY;\r
- wp.rcNormalPosition.bottom = consoleY + consoleH;\r
+ wp.rcNormalPosition.left = wpConsole.x;\r
+ wp.rcNormalPosition.right = wpConsole.x + wpConsole.width;\r
+ wp.rcNormalPosition.top = wpConsole.y;\r
+ wp.rcNormalPosition.bottom = wpConsole.y + wpConsole.height;\r
SetWindowPlacement(hDlg, &wp);\r
}\r
-#if 0 \r
+\r
// [HGM] Chessknight's change 2004-07-13\r
else { /* Determine Defaults */\r
WINDOWPLACEMENT wp;\r
- consoleX = winWidth + 1;\r
- consoleY = boardY;\r
- consoleW = screenWidth - winWidth;\r
- consoleH = winHeight;\r
- EnsureOnScreen(&consoleX, &consoleY);\r
+ wpConsole.x = wpMain.width + 1;\r
+ wpConsole.y = wpMain.y;\r
+ wpConsole.width = screenWidth - wpMain.width;\r
+ wpConsole.height = wpMain.height;\r
+ EnsureOnScreen(&wpConsole.x, &wpConsole.y, 0, 0);\r
wp.length = sizeof(WINDOWPLACEMENT);\r
wp.flags = 0;\r
wp.showCmd = SW_SHOW;\r
wp.ptMaxPosition.x = wp.ptMaxPosition.y = 0;\r
- wp.rcNormalPosition.left = consoleX;\r
- wp.rcNormalPosition.right = consoleX + consoleW;\r
- wp.rcNormalPosition.top = consoleY;\r
- wp.rcNormalPosition.bottom = consoleY + consoleH;\r
+ wp.rcNormalPosition.left = wpConsole.x;\r
+ wp.rcNormalPosition.right = wpConsole.x + wpConsole.width;\r
+ wp.rcNormalPosition.top = wpConsole.y;\r
+ wp.rcNormalPosition.bottom = wpConsole.y + wpConsole.height;\r
SetWindowPlacement(hDlg, &wp);\r
}\r
-#endif\r
+\r
+ // Allow hText to highlight URLs and send notifications on them\r
+ wMask = (WORD) SendMessage(hText, EM_GETEVENTMASK, 0, 0L);\r
+ SendMessage(hText, EM_SETEVENTMASK, 0, wMask | ENM_LINK);\r
+ SendMessage(hText, EM_AUTOURLDETECT, TRUE, 0L);\r
+ SetWindowLong(hText, GWL_USERDATA, 79); // initialize the text window's width\r
+\r
return FALSE;\r
\r
case WM_SETFOCUS:\r
return OnMoving( &sd, hDlg, wParam, lParam );\r
\r
case WM_EXITSIZEMOVE:\r
+ UpdateICSWidth(hText);\r
return OnExitSizeMove( &sd, hDlg, wParam, lParam );\r
}\r
\r
if (tinyLayout)\r
sprintf(buf, "%c %s %s", color[0], TimeString(timeRemaining), flagFell);\r
else\r
- sprintf(buf, "%s: %s %s", color, TimeString(timeRemaining), flagFell);\r
+ sprintf(buf, "%s:%c%s %s", color, (logoHeight>0 ? 0 : ' '), TimeString(timeRemaining), flagFell);\r
str = buf;\r
} else {\r
str = color;\r
}\r
oldFont = SelectObject(hdc, font[boardSize][CLOCK_FONT]->hf);\r
\r
+ JAWS_SILENCE\r
+\r
ExtTextOut(hdc, rect->left + MESSAGE_LINE_LEFTMARGIN,\r
rect->top, ETO_CLIPPED|ETO_OPAQUE,\r
rect, str, strlen(str), NULL);\r
-\r
+ if(logoHeight > 0 && appData.clockMode) {\r
+ RECT r;\r
+ sprintf(buf, "%s %s", buf+7, flagFell);\r
+ r.top = rect->top + logoHeight/2;\r
+ r.left = rect->left;\r
+ r.right = rect->right;\r
+ r.bottom = rect->bottom;\r
+ ExtTextOut(hdc, rect->left + MESSAGE_LINE_LEFTMARGIN,\r
+ r.top, ETO_CLIPPED|ETO_OPAQUE,\r
+ &r, str, strlen(str), NULL);\r
+ }\r
(void) SetTextColor(hdc, oldFg);\r
(void) SetBkColor(hdc, oldBg);\r
(void) SelectObject(hdc, oldFont);\r
} Enables;\r
\r
VOID\r
+GreyRevert(Boolean grey)\r
+{ // [HGM] vari: for retracting variations in local mode\r
+ HMENU hmenu = GetMenu(hwndMain);\r
+ EnableMenuItem(hmenu, IDM_Revert, MF_BYCOMMAND|(grey ? MF_GRAYED : MF_ENABLED));\r
+}\r
+\r
+VOID\r
SetMenuEnables(HMENU hmenu, Enables *enab)\r
{\r
while (enab->item > 0) {\r
{ IDM_StopExamining, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_StopObserving, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_Revert, MF_BYCOMMAND|MF_GRAYED },\r
+ { IDM_NewChat, MF_BYCOMMAND|MF_GRAYED },\r
{ -1, -1 }\r
};\r
\r
{ IDM_MachineWhite, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_MachineBlack, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_TwoMachines, MF_BYCOMMAND|MF_GRAYED },\r
+ { IDM_MachineBoth, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_AnalysisMode, MF_BYCOMMAND|MF_ENABLED },\r
{ IDM_AnalyzeFile, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_TimeControl, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_Hint, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_Book, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_IcsOptions, MF_BYCOMMAND|MF_ENABLED },\r
+ { IDM_Engine1Options, MF_BYCOMMAND|MF_GRAYED },\r
+ { IDM_Engine2Options, MF_BYCOMMAND|MF_GRAYED },\r
{ -1, -1 }\r
};\r
\r
{ IDM_MoveNow, MF_BYCOMMAND|MF_ENABLED },\r
{ IDM_Hint, MF_BYCOMMAND|MF_ENABLED },\r
{ IDM_Book, MF_BYCOMMAND|MF_ENABLED },\r
+ { IDM_Engine1Options, MF_BYCOMMAND|MF_ENABLED },\r
{ -1, -1 }\r
};\r
#endif\r
{ IDM_TimeControl, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_Hint, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_Book, MF_BYCOMMAND|MF_GRAYED },\r
+ { IDM_MachineBoth, MF_BYCOMMAND|MF_GRAYED },\r
+ { IDM_NewChat, MF_BYCOMMAND|MF_GRAYED },\r
+ { IDM_Engine1Options, MF_BYCOMMAND|MF_GRAYED },\r
+ { IDM_Engine2Options, MF_BYCOMMAND|MF_GRAYED },\r
{ -1, -1 }\r
};\r
\r
messageText[MESSAGE_TEXT_MAX - 1] = NULLCHAR;\r
\r
if (hwndMain == NULL || IsIconic(hwndMain)) return;\r
+\r
+ SAYMACHINEMOVE();\r
+\r
hdc = GetDC(hwndMain);\r
oldFont = SelectObject(hdc, font[boardSize][MESSAGE_FONT]->hf);\r
ExtTextOut(hdc, messageRect.left, messageRect.top, ETO_CLIPPED|ETO_OPAQUE,\r
{ GLT_TIME_CONTROL,"Time Control" },\r
{ GLT_VARIANT, "Variant" },\r
{ GLT_OUT_OF_BOOK,PGN_OUT_OF_BOOK },\r
+ { GLT_RESULT_COMMENT, "Result Comment" }, // [HGM] rescom\r
{ 0, 0 }\r
};\r
\r
HDCDrawPosition(NULL, (BOOLEAN) fullRedraw, board); \r
}\r
\r
+void NotifyFrontendLogin()\r
+{\r
+ if (hwndConsole)\r
+ UpdateICSWidth(GetDlgItem(hwndConsole, OPT_ConsoleText));\r
+}\r
\r
VOID\r
ResetFrontEnd()\r
{\r
HWND hwnd = GetActiveWindow();\r
EitherCommentPopUp(0, title, str, FALSE);\r
+ SAY(str);\r
SetActiveWindow(hwnd);\r
}\r
\r
if (commentDialog) {\r
ShowWindow(commentDialog, SW_HIDE);\r
}\r
- commentDialogUp = FALSE;\r
+ commentUp = FALSE;\r
}\r
\r
VOID\r
hdc = GetDC(hwndMain);\r
if (!IsIconic(hwndMain)) {\r
DisplayAClock(hdc, timeRemaining, highlight, \r
- (logoHeight > 0 ? flipView: flipClock) ? &blackRect : &whiteRect, "White", flag);\r
+ flipClock ? &blackRect : &whiteRect, "White", flag);\r
}\r
if (highlight && iconCurrent == iconBlack) {\r
iconCurrent = iconWhite;\r
hdc = GetDC(hwndMain);\r
if (!IsIconic(hwndMain)) {\r
DisplayAClock(hdc, timeRemaining, highlight, \r
- (logoHeight > 0 ? flipView: flipClock) ? &whiteRect : &blackRect, "Black", flag);\r
+ flipClock ? &whiteRect : &blackRect, "Black", flag);\r
}\r
if (highlight && iconCurrent == iconWhite) {\r
iconCurrent = iconBlack;\r
ScheduleDelayedEvent(DelayedEventCallback cb, long millisec)\r
{\r
if (delayedTimerEvent != 0) {\r
- if (appData.debugMode) {\r
+ if (appData.debugMode && cb != delayedTimerCallback) { // [HGM] alive: not too much debug\r
fprintf(debugFP, "ScheduleDelayedEvent: event already scheduled\n");\r
}\r
KillTimer(hwndMain, delayedTimerEvent);\r
delayedTimerEvent = 0;\r
+ if(delayedTimerCallback != cb) // [HGM] alive: do not "flush" same event, just postpone it\r
delayedTimerCallback();\r
}\r
delayedTimerCallback = cb;\r
}\r
}\r
\r
+int no_wrap(char *message, int count)\r
+{\r
+ ConsoleOutput(message, count, FALSE);\r
+ return count;\r
+}\r
\r
int\r
OutputToProcess(ProcRef pr, char *message, int count, int *outError)\r
int outCount = SOCKET_ERROR;\r
ChildProc *cp = (ChildProc *) pr;\r
static OVERLAPPED ovl;\r
+ static int line = 0;\r
\r
- if (pr == NoProc) {\r
- ConsoleOutput(message, count, FALSE);\r
- return count;\r
- } \r
+ if (pr == NoProc)\r
+ {\r
+ if (appData.noJoin || !appData.useInternalWrap)\r
+ return no_wrap(message, count);\r
+ else\r
+ {\r
+ int width = get_term_width();\r
+ int len = wrap(NULL, message, count, width, &line);\r
+ char *msg = malloc(len);\r
+ int dbgchk;\r
+\r
+ if (!msg)\r
+ return no_wrap(message, count);\r
+ else\r
+ {\r
+ dbgchk = wrap(msg, message, count, width, &line);\r
+ if (dbgchk != len && appData.debugMode)\r
+ fprintf(debugFP, "wrap(): dbgchk(%d) != len(%d)\n", dbgchk, len);\r
+ ConsoleOutput(msg, len, FALSE);\r
+ free(msg);\r
+ return len;\r
+ }\r
+ }\r
+ }\r
\r
if (ovl.hEvent == NULL) {\r
ovl.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);\r
(UINT) 2000, NULL);\r
}\r
\r
-LRESULT CALLBACK\r
-AnalysisDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
-{\r
- static HANDLE hwndText;\r
- RECT rect;\r
- static int sizeX, sizeY;\r
- int newSizeX, newSizeY, flags;\r
- MINMAXINFO *mmi;\r
-\r
- switch (message) {\r
- case WM_INITDIALOG: /* message: initialize dialog box */\r
- /* Initialize the dialog items */\r
- hwndText = GetDlgItem(hDlg, OPT_AnalysisText);\r
- SetWindowText(hDlg, analysisTitle);\r
- SetDlgItemText(hDlg, OPT_AnalysisText, analysisText);\r
- /* Size and position the dialog */\r
- if (!analysisDialog) {\r
- analysisDialog = hDlg;\r
- flags = SWP_NOZORDER;\r
- GetClientRect(hDlg, &rect);\r
- sizeX = rect.right;\r
- sizeY = rect.bottom;\r
- if (analysisX != CW_USEDEFAULT && analysisY != CW_USEDEFAULT &&\r
- analysisW != CW_USEDEFAULT && analysisH != CW_USEDEFAULT) {\r
- WINDOWPLACEMENT wp;\r
- EnsureOnScreen(&analysisX, &analysisY);\r
- wp.length = sizeof(WINDOWPLACEMENT);\r
- wp.flags = 0;\r
- wp.showCmd = SW_SHOW;\r
- wp.ptMaxPosition.x = wp.ptMaxPosition.y = 0;\r
- wp.rcNormalPosition.left = analysisX;\r
- wp.rcNormalPosition.right = analysisX + analysisW;\r
- wp.rcNormalPosition.top = analysisY;\r
- wp.rcNormalPosition.bottom = analysisY + analysisH;\r
- SetWindowPlacement(hDlg, &wp);\r
-\r
- GetClientRect(hDlg, &rect);\r
- newSizeX = rect.right;\r
- newSizeY = rect.bottom;\r
- ResizeEditPlusButtons(hDlg, hwndText, sizeX, sizeY,\r
- newSizeX, newSizeY);\r
- sizeX = newSizeX;\r
- sizeY = newSizeY;\r
- }\r
- }\r
- return FALSE;\r
-\r
- case WM_COMMAND: /* message: received a command */\r
- switch (LOWORD(wParam)) {\r
- case IDCANCEL:\r
- if (appData.icsActive && appData.icsEngineAnalyze) { /* [DM] icsEngineAnalyze */\r
- ExitAnalyzeMode();\r
- ModeHighlight();\r
- return TRUE;\r
- }\r
- EditGameEvent();\r
- return TRUE;\r
- default:\r
- break;\r
- }\r
- break;\r
-\r
- case WM_SIZE:\r
- newSizeX = LOWORD(lParam);\r
- newSizeY = HIWORD(lParam);\r
- ResizeEditPlusButtons(hDlg, hwndText, sizeX, sizeY, newSizeX, newSizeY);\r
- sizeX = newSizeX;\r
- sizeY = newSizeY;\r
- break;\r
-\r
- case WM_GETMINMAXINFO:\r
- /* Prevent resizing window too small */\r
- mmi = (MINMAXINFO *) lParam;\r
- mmi->ptMinTrackSize.x = 100;\r
- mmi->ptMinTrackSize.y = 100;\r
- break;\r
- }\r
- return FALSE;\r
-}\r
-\r
-VOID\r
-AnalysisPopUp(char* title, char* str)\r
-{\r
- FARPROC lpProc;\r
- char *p, *q;\r
-\r
- /* [AS] */\r
- EngineOutputPopUp();\r
- return;\r
-\r
- if (str == NULL) str = "";\r
- p = (char *) malloc(2 * strlen(str) + 2);\r
- q = p;\r
- while (*str) {\r
- if (*str == '\n') *q++ = '\r';\r
- *q++ = *str++;\r
- }\r
- *q = NULLCHAR;\r
- if (analysisText != NULL) free(analysisText);\r
- analysisText = p;\r
-\r
- if (analysisDialog) {\r
- SetWindowText(analysisDialog, title);\r
- SetDlgItemText(analysisDialog, OPT_AnalysisText, analysisText);\r
- ShowWindow(analysisDialog, SW_SHOW);\r
- } else {\r
- analysisTitle = title;\r
- lpProc = MakeProcInstance((FARPROC)AnalysisDialog, hInst);\r
- CreateDialog(hInst, MAKEINTRESOURCE(DLG_Analysis),\r
- hwndMain, (DLGPROC)lpProc);\r
- FreeProcInstance(lpProc);\r
- }\r
- analysisDialogUp = TRUE; \r
-}\r
-\r
-VOID\r
-AnalysisPopDown()\r
-{\r
- if (analysisDialog) {\r
- ShowWindow(analysisDialog, SW_HIDE);\r
- }\r
- analysisDialogUp = FALSE; \r
-}\r
-\r
-\r
VOID\r
SetHighlights(int fromX, int fromY, int toX, int toY)\r
{\r
void\r
HistorySet( char movelist[][2*MOVE_LEN], int first, int last, int current )\r
{\r
-#if 0\r
- char buf[256];\r
-\r
- sprintf( buf, "HistorySet: first=%d, last=%d, current=%d (%s)\n",\r
- first, last, current, current >= 0 ? movelist[current] : "n/a" );\r
-\r
- OutputDebugString( buf );\r
-#endif\r
-\r
MoveHistorySet( movelist, first, last, current, pvInfoList );\r
\r
EvalGraphSet( first, last, current, pvInfoList );\r
}\r
-\r
-void SetProgramStats( FrontEndProgramStats * stats )\r
-{\r
-#if 0\r
- char buf[1024];\r
-\r
- sprintf( buf, "SetStats for %d: depth=%d, nodes=%lu, score=%5.2f, time=%5.2f, pv=%s\n",\r
- stats->which, stats->depth, stats->nodes, stats->score / 100.0, stats->time / 100.0, stats->pv == 0 ? "n/a" : stats->pv );\r
-\r
- OutputDebugString( buf );\r
-#endif\r
-\r
- EngineOutputUpdate( stats );\r
-}\r