* Massachusetts. \r
*\r
* Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,\r
- * 2007, 2008, 2009, 2010 Free Software Foundation, Inc.\r
+ * 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.\r
*\r
* Enhancements Copyright 2005 Alessandro Scotti\r
*\r
#include <richedit.h>\r
#include <mmsystem.h>\r
#include <ctype.h>\r
+#include <io.h>\r
\r
#if __GNUC__\r
#include <errno.h>\r
POINT pos; /* window coordinates of current pos */\r
POINT lastpos; /* window coordinates of last pos - used for clipping */\r
POINT from; /* board coordinates of the piece's orig pos */\r
+ ChessSquare piece;\r
} DragInfo;\r
\r
-static DragInfo dragInfo = { {-1,-1}, {-1,-1}, {-1,-1}, {-1,-1} };\r
+static DragInfo dragInfo = { {-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}, EmptySquare };\r
\r
typedef struct {\r
POINT sq[2]; /* board coordinates of from, to squares */\r
\r
if(!name || name[0] == NULLCHAR) return;\r
snprintf(buf, MSG_SIZ, "%s%s", name, strchr(name, '.') ? "" : ".lng"); // auto-append lng extension\r
+ appData.language = oldLanguage;\r
if(!strcmp(buf, oldLanguage)) { barbaric = 1; return; } // this language already loaded; just switch on\r
if((f = fopen(buf, "r")) == NULL) return;\r
while((k = fgetc(f)) != EOF) {\r
int i;\r
WIN32_FIND_DATA fileData;\r
HANDLE hFind;\r
-#define IDM_English 1895\r
+#define IDM_English 1970\r
if(1) {\r
HMENU mainMenu = GetMenu(hwndMain);\r
for (i=GetMenuItemCount(mainMenu)-1; i>=0; i--) {\r
StartupDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
VOID APIENTRY MenuPopup(HWND hwnd, POINT pt, HMENU hmenu, UINT def);\r
void ParseIcsTextMenu(char *icsTextMenuString);\r
-VOID PopUpMoveDialog(char firstchar);\r
VOID PopUpNameDialog(char firstchar);\r
VOID UpdateSampleText(HWND hDlg, int id, MyColorizeAttribs *mca);\r
\r
}\r
\r
if (tinyLayout != oldTinyLayout) {\r
- long style = GetWindowLong(hwndMain, GWL_STYLE);\r
+ long style = GetWindowLongPtr(hwndMain, GWL_STYLE);\r
if (tinyLayout) {\r
style &= ~WS_SYSMENU;\r
InsertMenu(hmenu, IDM_Exit, MF_BYCOMMAND, IDM_Minimize,\r
style |= WS_SYSMENU;\r
RemoveMenu(hmenu, IDM_Minimize, MF_BYCOMMAND);\r
}\r
- SetWindowLong(hwndMain, GWL_STYLE, style);\r
+ SetWindowLongPtr(hwndMain, GWL_STYLE, style);\r
\r
for (i=0; menuBarText[tinyLayout][i]; i++) {\r
ModifyMenu(hmenu, i, MF_STRING|MF_BYPOSITION|MF_POPUP, \r
boardRect.right - BUTTON_WIDTH*(N_BUTTONS-i),\r
messageRect.top, BUTTON_WIDTH, messageSize.cy, hwndMain,\r
(HMENU) buttonDesc[i].id,\r
- (HINSTANCE) GetWindowLong(hwndMain, GWL_HINSTANCE), NULL);\r
+ (HINSTANCE) GetWindowLongPtr(hwndMain, GWLP_HINSTANCE), NULL);\r
if (tinyLayout) {\r
SendMessage(buttonDesc[i].hwnd, WM_SETFONT, \r
(WPARAM)font[boardSize][MESSAGE_FONT]->hf,\r
if (buttonDesc[i].id == IDM_Pause)\r
hwndPause = buttonDesc[i].hwnd;\r
buttonDesc[i].wndproc = (WNDPROC)\r
- SetWindowLong(buttonDesc[i].hwnd, GWL_WNDPROC, (LONG) ButtonProc);\r
+ SetWindowLongPtr(buttonDesc[i].hwnd, GWLP_WNDPROC, (LONG_PTR) ButtonProc);\r
}\r
}\r
if (gridPen != NULL) DeleteObject(gridPen);\r
DeleteDC(tmphdc);\r
}\r
\r
+VOID\r
+DisplayLogos()\r
+{\r
+ if(logoHeight) {\r
+ HDC hdc = GetDC(hwndMain);\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
+ ReleaseDC(hwndMain, hdc);\r
+ }\r
+}\r
+\r
static HDC hdcSeek;\r
\r
// [HGM] seekgraph\r
}\r
}\r
}\r
- if(logoHeight) {\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
DrawArrowHighlight(hdcmem);\r
board[dragInfo.from.y][dragInfo.from.x] = dragged_piece;\r
x = dragInfo.pos.x - squareSize / 2;\r
y = dragInfo.pos.y - squareSize / 2;\r
- DrawPieceOnDC(hdcmem, dragged_piece,\r
- ((int) dragged_piece < (int) BlackPawn), \r
+ DrawPieceOnDC(hdcmem, dragInfo.piece,\r
+ ((int) dragInfo.piece < (int) BlackPawn), \r
(dragInfo.from.y + dragInfo.from.x) % 2, x, y, tmphdc);\r
} \r
\r
boardRect.bottom - boardRect.top,\r
tmphdc, boardRect.left, boardRect.top, SRCCOPY);\r
if(saveDiagFlag) { \r
- BITMAP b; int i, j=0, m, w, wb, fac=0; char pData[1000000]; \r
+ BITMAP b; int i, j=0, m, w, wb, fac=0; char *pData; \r
BITMAPINFOHEADER bih; int color[16], nrColors=0;\r
\r
GetObject(bufferBitmap, sizeof(b), &b);\r
- if(b.bmWidthBytes*b.bmHeight <= 990000) {\r
+ if(pData = malloc(b.bmWidthBytes*b.bmHeight + 10000)) {\r
bih.biSize = sizeof(BITMAPINFOHEADER);\r
bih.biWidth = b.bmWidth;\r
bih.biHeight = b.bmHeight;\r
// write bitmap data\r
for(i=0; i<wb*(b.bmHeight - boardRect.top + OUTER_MARGIN); i++) \r
fputc(pData[i], diagFile);\r
+ free(pData);\r
}\r
}\r
\r
{\r
saveDiagFlag = 1; diagFile = f;\r
HDCDrawPosition(NULL, TRUE, NULL);\r
-\r
saveDiagFlag = 0;\r
\r
-// if(f != NULL) fprintf(f, "Sorry, but this feature is still in preparation\n");\r
- \r
fclose(f);\r
return TRUE;\r
}\r
&messageRect, messageText, strlen(messageText), NULL);\r
SelectObject(hdc, oldFont);\r
DisplayBothClocks();\r
+ DisplayLogos();\r
}\r
EndPaint(hwnd,&ps);\r
}\r
dragInfo.lastpos.y = boardRect.top + y;\r
dragInfo.from.x = fromX;\r
dragInfo.from.y = fromY;\r
+ dragInfo.piece = boards[currentMove][fromY][fromX];\r
dragInfo.start = dragInfo.from;\r
SetCapture(hwndMain);\r
}\r
dragInfo.pos = dragInfo.lastpos = dragInfo.start;\r
}\r
\r
+void ChangeDragPiece(ChessSquare piece)\r
+{\r
+ dragInfo.piece = piece;\r
+}\r
+\r
/* Event handler for mouse messages */\r
VOID\r
MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)\r
switch (message) {\r
case WM_LBUTTONDOWN:\r
if (PtInRect((LPRECT) &whiteRect, pt)) {\r
- if (gameMode == EditPosition) {\r
- SetWhiteToPlayEvent();\r
- } else if (gameMode == EditGame || GetKeyState(VK_SHIFT) < 0) {\r
- AdjustClock(flipClock, -1);\r
- } else if (gameMode == IcsPlayingBlack ||\r
- gameMode == MachinePlaysWhite) {\r
- CallFlagEvent();\r
- }\r
+ ClockClick(flipClock);\r
} else if (PtInRect((LPRECT) &blackRect, pt)) {\r
- if (gameMode == EditPosition) {\r
- SetBlackToPlayEvent();\r
- } else if (gameMode == EditGame || GetKeyState(VK_SHIFT) < 0) {\r
- AdjustClock(!flipClock, -1);\r
- } else if (gameMode == IcsPlayingWhite ||\r
- gameMode == MachinePlaysBlack) {\r
- CallFlagEvent();\r
- }\r
+ ClockClick(!flipClock);\r
}\r
dragInfo.start.x = dragInfo.start.y = -1;\r
dragInfo.from = dragInfo.start;\r
\r
case WM_MOUSEMOVE:\r
if(SeekGraphClick(Press, pt.x - boardRect.left, pt.y - boardRect.top, 1)) break;\r
+ if(PromoScroll(pt.x - boardRect.left, pt.y - boardRect.top)) break;\r
MovePV(pt.x - boardRect.left, pt.y - boardRect.top, boardRect.bottom - boardRect.top);\r
if ((appData.animateDragging || appData.highlightDragging)\r
&& (wParam & MK_LBUTTON)\r
LRESULT CALLBACK\r
ButtonProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)\r
{\r
- int id = GetWindowLong(hwnd, GWL_ID);\r
+ int id = GetWindowLongPtr(hwnd, GWLP_ID);\r
int i, dir;\r
\r
for (i=0; i<N_BUTTONS; i++) {\r
SendMessage(h, WM_CHAR, wParam, lParam);\r
return TRUE;\r
} else if (isalpha((char)wParam) || isdigit((char)wParam)){\r
- PopUpMoveDialog((char)wParam);\r
+ TypeInEvent((char)wParam);\r
}\r
break;\r
}\r
LONG old_width, new_width;\r
\r
new_width = get_term_width(hText, FALSE);\r
- old_width = GetWindowLong(hText, GWL_USERDATA);\r
+ old_width = GetWindowLongPtr(hText, GWLP_USERDATA);\r
if (new_width != old_width)\r
{\r
ics_update_width(new_width);\r
- SetWindowLong(hText, GWL_USERDATA, new_width);\r
+ SetWindowLongPtr(hText, GWLP_USERDATA, new_width);\r
}\r
}\r
\r
SendMessage(h, message, wParam, lParam);\r
} else if(lParam != KF_REPEAT) {\r
if (isalpha((char)wParam) || isdigit((char)wParam)) {\r
- PopUpMoveDialog((char)wParam);\r
+ TypeInEvent((char)wParam);\r
} else if((char)wParam == 003) CopyGameToClipboard();\r
else if((char)wParam == 026) PasteGameOrFENFromClipboard();\r
}\r
f = OpenFileDialog(hwnd, "wb", defName,\r
"bmp",\r
DIAGRAM_FILT,\r
- "Save Diagram to File", NULL, fileTitle, NULL);\r
+ _("Save Diagram to File"), NULL, fileTitle, NULL);\r
if (f != NULL) {\r
SaveDiagram(f);\r
}\r
break;\r
\r
case IDM_Match: // [HGM] match: flows into next case, after setting Match Mode and nr of Games\r
- if(gameMode != BeginningOfGame) { // allow menu item to remain enabled for better mode highligting\r
- DisplayError(_("You can only start a match from the initial position."), 0); break;\r
- }\r
- matchMode = 2;// distinguish from command-line-triggered case (matchMode=1)\r
- appData.matchGames = appData.defaultMatchGames;\r
- matchGame = 1;\r
+ MatchEvent(2); // distinguish from command-line-triggered case (matchMode=1)\r
+ break;\r
\r
case IDM_TwoMachines:\r
TwoMachinesEvent();\r
break;\r
\r
case IDM_TypeInMove:\r
- PopUpMoveDialog('\000');\r
+ TypeInEvent('\000');\r
break;\r
\r
case IDM_TypeInName:\r
case IDM_FlipClock:\r
flipClock = !flipClock;\r
DisplayBothClocks();\r
- DrawPosition(FALSE, NULL);\r
+ DisplayLogos();\r
break;\r
\r
case IDM_MuteSounds:\r
\r
case IDM_Engine2Options:\r
savedHwnd = hwnd;\r
- if(WaitForSecond(SettingsMenuIfReady)) break;\r
+ if(WaitForEngine(&second, SettingsMenuIfReady)) break;\r
EngineOptionsPopup(hwnd, &second);\r
break;\r
\r
break;\r
\r
case IDM_English:\r
- barbaric = 0;\r
+ barbaric = 0; appData.language = "";\r
TranslateMenus(0);\r
CheckMenuItem(GetMenu(hwndMain), lastChecked, MF_BYCOMMAND|MF_UNCHECKED);\r
CheckMenuItem(GetMenu(hwndMain), IDM_English, MF_BYCOMMAND|MF_CHECKED);\r
break;\r
\r
default:\r
- if(wmId > IDM_English && wmId < IDM_English+5) {\r
+ if(wmId > IDM_English && wmId < IDM_English+20) {\r
LoadLanguageFile(languageFile[wmId - IDM_English - 1]);\r
TranslateMenus(0);\r
CheckMenuItem(GetMenu(hwndMain), lastChecked, MF_BYCOMMAND|MF_UNCHECKED);\r
{\r
char move[MSG_SIZ];\r
HWND hInput;\r
- ChessMove moveType;\r
- int fromX, fromY, toX, toY;\r
- char promoChar;\r
\r
switch (message) {\r
case WM_INITDIALOG:\r
case IDOK:
\r
shiftKey = GetKeyState(VK_SHIFT) < 0; // [HGM] remember last shift status\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)); // 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
- UserMoveEvent(fromX, fromY, toX, toY, promoChar); \r
- } else {\r
- DisplayMoveError(_("Could not parse move"));\r
- }\r
- }\r
+ GetDlgItemText(hDlg, OPT_Move, move, sizeof(move));
+ TypeInDoneEvent(move);\r
EndDialog(hDlg, TRUE);\r
return TRUE;\r
case IDCANCEL:\r
PopUpMoveDialog(char firstchar)\r
{\r
FARPROC lpProc;\r
- \r
- if ((gameMode == BeginningOfGame && !appData.icsActive) || \r
- gameMode == MachinePlaysWhite || gameMode == MachinePlaysBlack ||\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
+\r
lpProc = MakeProcInstance((FARPROC)TypeInMoveDialog, hInst);\r
DialogBoxParam(hInst, MAKEINTRESOURCE(DLG_TypeInMove),\r
hwndMain, (DLGPROC)lpProc, (LPARAM)firstchar);\r
FreeProcInstance(lpProc);\r
- }\r
}\r
\r
/*---------------------------------------------------------------------------*\\r
hwndConsole = hDlg;\r
SetFocus(hInput);\r
consoleTextWindowProc = (WNDPROC)\r
- SetWindowLong(hText, GWL_WNDPROC, (LONG) ConsoleTextSubclass);\r
+ SetWindowLongPtr(hText, GWLP_WNDPROC, (LONG_PTR) ConsoleTextSubclass);\r
SendMessage(hText, EM_SETBKGNDCOLOR, FALSE, consoleBackgroundColor);\r
consoleInputWindowProc = (WNDPROC)\r
- SetWindowLong(hInput, GWL_WNDPROC, (LONG) ConsoleInputSubclass);\r
+ SetWindowLongPtr(hInput, GWLP_WNDPROC, (LONG_PTR) ConsoleInputSubclass);\r
SendMessage(hInput, EM_SETBKGNDCOLOR, FALSE, consoleBackgroundColor);\r
Colorize(ColorNormal, TRUE);\r
SendMessage(hInput, EM_SETCHARFORMAT, SCF_ALL, (LPARAM) &consoleCF);\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
+ SetWindowLongPtr(hText, GWLP_USERDATA, 79); // initialize the text window's width\r
\r
return FALSE;\r
\r
{ IDM_NewChat, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_Engine1Options, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_Engine2Options, MF_BYCOMMAND|MF_GRAYED },\r
+ { IDM_Sounds, 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_Match, MF_BYCOMMAND|MF_GRAYED },\r
+// { IDM_Match, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_TypeInMove, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_RetractMove, MF_BYCOMMAND|MF_GRAYED },\r
{ -1, -1 }\r
{ IDM_MachineWhite, MF_BYCOMMAND|MF_ENABLED },\r
{ IDM_MachineBlack, MF_BYCOMMAND|MF_ENABLED },\r
{ IDM_TwoMachines, MF_BYCOMMAND|MF_ENABLED },\r
- { IDM_Match, MF_BYCOMMAND|MF_ENABLED },\r
+// { IDM_Match, MF_BYCOMMAND|MF_ENABLED },\r
{ IDM_TypeInMove, MF_BYCOMMAND|MF_ENABLED },\r
{ IDM_RetractMove, MF_BYCOMMAND|MF_ENABLED },\r
{ -1, -1 }\r
* \r
\*---------------------------------------------------------------------------*/\r
VOID\r
+CheckMark(UINT item, int state)\r
+{\r
+ if(item) CheckMenuItem(GetMenu(hwndMain), item, MF_BYCOMMAND|state);\r
+}\r
+\r
+VOID\r
ModeHighlight()\r
{\r
static UINT prevChecked = 0;\r
nowChecked = IDM_MachineWhite;\r
break;\r
case TwoMachinesPlay:\r
- nowChecked = matchMode ? IDM_Match : IDM_TwoMachines; // [HGM] match\r
+ nowChecked = IDM_TwoMachines;\r
break;\r
case AnalyzeMode:\r
nowChecked = IDM_AnalysisMode;\r
nowChecked = 0;\r
break;\r
}\r
- if (prevChecked != 0)\r
- (void) CheckMenuItem(GetMenu(hwndMain),\r
- prevChecked, MF_BYCOMMAND|MF_UNCHECKED);\r
- if (nowChecked != 0)\r
- (void) CheckMenuItem(GetMenu(hwndMain),\r
- nowChecked, MF_BYCOMMAND|MF_CHECKED);\r
+ CheckMark(prevChecked, MF_UNCHECKED);\r
+ CheckMark(nowChecked, MF_CHECKED);\r
+ CheckMark(IDM_Match, matchMode && matchGame < appData.matchGames ? MF_CHECKED : MF_UNCHECKED);\r
\r
if (nowChecked == IDM_LoadGame || nowChecked == IDM_Training) {\r
(void) EnableMenuItem(GetMenu(hwndMain), IDM_Training, \r
/* [DM] icsEngineAnalyze - Do a sceure check too */\r
if (appData.icsActive) {\r
if (appData.icsEngineAnalyze) {\r
- (void) CheckMenuItem(GetMenu(hwndMain), IDM_AnalysisMode,\r
- MF_BYCOMMAND|MF_CHECKED);\r
+ CheckMark(IDM_AnalysisMode, MF_CHECKED);\r
} else {\r
- (void) CheckMenuItem(GetMenu(hwndMain), IDM_AnalysisMode,\r
- MF_BYCOMMAND|MF_UNCHECKED);\r
+ CheckMark(IDM_AnalysisMode, MF_UNCHECKED);\r
}\r
}\r
+ DisplayLogos(); // [HGM] logos: mode change could have altered logos\r
}\r
\r
VOID\r
{\r
HMENU hmenu = GetMenu(hwndMain);\r
SetMenuEnables(hmenu, icsEnables);\r
- EnableMenuItem(GetSubMenu(hmenu, OPTIONS_POS), ICS_POS,\r
- MF_BYPOSITION|MF_ENABLED);\r
+ EnableMenuItem(GetSubMenu(hmenu, OPTIONS_POS), IDM_IcsOptions,\r
+ MF_BYCOMMAND|MF_ENABLED);\r
#if ZIPPY\r
if (appData.zippyPlay) {\r
SetMenuEnables(hmenu, zippyEnables);\r
{\r
HMENU hmenu = GetMenu(hwndMain);\r
SetMenuEnables(hmenu, ncpEnables);\r
- EnableMenuItem(GetSubMenu(hmenu, OPTIONS_POS), SOUNDS_POS,\r
- MF_BYPOSITION|MF_GRAYED);\r
DrawMenuBar(hwndMain);\r
}\r
\r
if (len > remain) len = remain;\r
strncat(messageText, str2, len);\r
}\r
- messageText[MESSAGE_TEXT_MAX - 1] = NULLCHAR;\r
+ messageText[MESSAGE_TEXT_MAX - 1] = NULLCHAR;
+ safeStrCpy(lastMsg, messageText, MSG_SIZ);
\r
if (hwndMain == NULL || IsIconic(hwndMain)) return;\r
\r
{ // [HGM] wrapper needed because handles must not be passed through back-end\r
EngineOptionsPopup(savedHwnd, cps);\r
}\r
+\r
+int flock(int fid, int code)\r
+{\r
+ HANDLE hFile = (HANDLE) _get_osfhandle(fid);\r
+ OVERLAPPED ov;\r
+ ov.hEvent = NULL;\r
+ ov.Offset = 0;\r
+ ov.OffsetHigh = 0;\r
+ switch(code) {\r
+ case 1: LockFileEx(hFile, LOCKFILE_EXCLUSIVE_LOCK, 0, 1024, 0, &ov); break; // LOCK_SH\r
+ case 2: LockFileEx(hFile, LOCKFILE_EXCLUSIVE_LOCK, 0, 1024, 0, &ov); break; // LOCK_EX\r
+ case 3: UnlockFileEx(hFile, 0, 1024, 0, &ov); break; // LOCK_UN\r
+ default: return -1;\r
+ }\r
+ return 0;\r
+}\r