#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
DrawMenuBar(hwndMain);\r
}\r
\r
-static int fromX = -1, fromY = -1, toX, toY; // [HGM] moved upstream, so JAWS can use them\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
ShowWindow(hwndConsole, nCmdShow);\r
}\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
{ "loadGameFile", ArgFilename, (LPVOID) &appData.loadGameFile, FALSE },\r
{ "", ArgNone, NULL },\r
/* keyword arguments */\r
+ JAWS_ARGS\r
{ "whitePieceColor", ArgColor, (LPVOID) &whitePieceColor, TRUE },\r
{ "wpc", ArgColor, (LPVOID) &whitePieceColor, FALSE },\r
{ "blackPieceColor", ArgColor, (LPVOID) &blackPieceColor, TRUE },\r
{ "secondNeedsNoncompliantFEN", ArgString, (LPVOID) &appData.fenOverride2, FALSE },\r
{ "keepAlive", ArgInt, (LPVOID) &appData.keepAlive, FALSE },\r
{ "icstype", ArgInt, (LPVOID) &ics_type, FALSE },\r
+ { "forceIllegalMoves", ArgTrue, (LPVOID) &appData.forceIllegal, FALSE },\r
\r
#ifdef ZIPPY\r
{ "zippyTalk", ArgBoolean, (LPVOID) &appData.zippyTalk, FALSE },\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
+ moveType = UserMoveTest(fromX, fromY, toX, toY, NULLCHAR, FALSE);\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
- if(moveType == IllegalMove) {\r
- ;\r
- } else\r
+ if(moveType != ImpossibleMove && moveType != Comment) {\r
/* [HGM] We use PromotionToKnight in Shogi to indicate frorced promotion */\r
if (moveType == WhitePromotionKnight || moveType == BlackPromotionKnight ||\r
((moveType == WhitePromotionQueen || moveType == BlackPromotionQueen) &&\r
DrawPosition(FALSE, boards[currentMove]);\r
boards[currentMove][fromY][fromX] = p; // take back, but display stays\r
boards[currentMove][toY][toX] = q;\r
+ DisplayMessage("Select piece from holdings", "");\r
} else\r
PromotionPopup(hwnd);\r
- } else { /* not a promotion */\r
+ goto noClear;\r
+ } else { // not a promotion. Move can be illegal if testLegality off, and should be made then.\r
if (appData.animate || appData.highlightLastMove) {\r
SetHighlights(fromX, fromY, toX, toY);\r
} else {\r
}\r
}\r
fromX = fromY = -1;\r
+ noClear:\r
break;\r
}\r
- if (gotPremove) {\r
+ if (gotPremove && moveType != Comment) {\r
SetPremoveHighlights(fromX, fromY, toX, toY);\r
- DrawPosition(forceFullRepaint || FALSE, NULL);\r
+// DrawPosition(forceFullRepaint || FALSE, NULL);\r
} else ClearHighlights();\r
fromX = fromY = -1;\r
DrawPosition(forceFullRepaint || FALSE, NULL);\r
+ if(moveType != Comment) break;\r
}\r
/* First downclick, or restart on a square with same color piece */\r
if (!frozen && OKToStartUserMove(x, y)) {\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
+ moveType = UserMoveTest(fromX, fromY, toX, toY, NULLCHAR, TRUE);\r
if(moveType == AmbiguousMove) { /* [HGM] Edit-Position move executed */\r
fromX = fromY = -1; \r
ClearHighlights();\r
boards[currentMove][fromY][fromX] = p; // take back, but display stays\r
boards[currentMove][toY][toX] = q;\r
appData.animate = saveAnimate;\r
+ DisplayMessage("Select piece from holdings", "");\r
break;\r
} else\r
PromotionPopup(hwnd); /* [HGM] Popup now calls FinishMove */\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
GeneralOptionsPopup(hwnd);\r
DrawPosition(TRUE, NULL);\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
{ 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
{\r
HWND hwnd = GetActiveWindow();\r
EitherCommentPopUp(0, title, str, FALSE);\r
+ SAY(str);\r
SetActiveWindow(hwnd);\r
}\r
\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