* WinBoard.c -- Windows NT front end to XBoard\r
*\r
* Copyright 1991 by Digital Equipment Corporation, Maynard,\r
- * Massachusetts. \r
+ * Massachusetts.\r
*\r
* Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,\r
- * 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.\r
+ * 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.\r
*\r
* Enhancements Copyright 2005 Alessandro Scotti\r
*\r
#include "help.h"\r
#include "wsnap.h"\r
\r
+#define SLASH '/'\r
+#define DATADIR "~~"\r
+\r
//void InitEngineUCI( const char * iniDir, ChessProgramState * cps );\r
\r
int myrandom(void);\r
\r
/* Set by InitInstance, used by EnsureOnScreen */\r
int screenHeight, screenWidth;\r
+RECT screenGeometry;\r
\r
void\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 < minX) *x = minX;\r
- if (*y < minY) *y = minY;\r
+ if (*x > screenGeometry.right - 32) *x = screenGeometry.left;\r
+ if (*y > screenGeometry.bottom - 32) *y = screenGeometry.top;\r
+ if (*x < screenGeometry.left + minX) *x = screenGeometry.left + minX;\r
+ if (*y < screenGeometry.top + minY) *y = screenGeometry.top + minY;\r
}\r
\r
VOID\r
}\r
}\r
\r
+#ifndef SM_CXVIRTUALSCREEN\r
+#define SM_CXVIRTUALSCREEN 78\r
+#endif\r
+#ifndef SM_CYVIRTUALSCREEN\r
+#define SM_CYVIRTUALSCREEN 79\r
+#endif\r
+#ifndef SM_XVIRTUALSCREEN \r
+#define SM_XVIRTUALSCREEN 76\r
+#endif\r
+#ifndef SM_YVIRTUALSCREEN \r
+#define SM_YVIRTUALSCREEN 77\r
+#endif\r
+\r
+VOID\r
+InitGeometry()\r
+{\r
+ screenHeight = GetSystemMetrics(SM_CYVIRTUALSCREEN);\r
+ if( !screenHeight ) screenHeight = GetSystemMetrics(SM_CYSCREEN);\r
+ screenWidth = GetSystemMetrics(SM_CXVIRTUALSCREEN);\r
+ if( !screenWidth ) screenWidth = GetSystemMetrics(SM_CXSCREEN);\r
+ screenGeometry.left = GetSystemMetrics(SM_XVIRTUALSCREEN);\r
+ screenGeometry.top = GetSystemMetrics(SM_YVIRTUALSCREEN);\r
+ screenGeometry.right = screenGeometry.left + screenWidth;\r
+ screenGeometry.bottom = screenGeometry.top + screenHeight;\r
+}\r
+\r
BOOL\r
InitInstance(HINSTANCE hInstance, int nCmdShow, LPSTR lpCmdLine)\r
{\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
+ InitGeometry();\r
InitAppData(lpCmdLine); /* Get run-time parameters */\r
/* xboard, and older WinBoards, controlled the move sound with the\r
appData.ringBellAfterMoves option. In the current WinBoard, we\r
iconBlack = LoadIcon(hInstance, "icon_black");\r
iconCurrent = iconWhite;\r
InitDrawingColors();\r
- screenHeight = GetSystemMetrics(SM_CYSCREEN);\r
- screenWidth = GetSystemMetrics(SM_CXSCREEN);\r
+\r
InitPosition(0); // to set nr of ranks and files, which might be non-default through command-line args\r
for (ibs = (int) NUM_SIZES - 1; ibs >= 0; ibs--) {\r
/* Compute window size for each board size, and use the largest\r
else\r
err = GetLastError();\r
}\r
+\r
}\r
return err;\r
}\r
/*!!if (signal) GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT, cp->pid);*/\r
\r
/* [AS] Special termination modes for misbehaving programs... */\r
- if( signal == 9 ) { \r
+ if( signal & 8 ) { \r
result = TerminateProcess( cp->hProcess, 0 );\r
\r
if ( appData.debugMode) {\r
fprintf( debugFP, "Terminating process %lu, result=%d\n", cp->pid, result );\r
}\r
}\r
- else if( signal == 10 ) {\r
- DWORD dw = WaitForSingleObject( cp->hProcess, 3*1000 ); // Wait 3 seconds at most\r
+ else if( signal & 4 ) {\r
+ DWORD dw = WaitForSingleObject( cp->hProcess, appData.delayAfterQuit*1000 + 50 ); // Wait 3 seconds at most\r
\r
if( dw != WAIT_OBJECT_0 ) {\r
result = TerminateProcess( cp->hProcess, 0 );\r