\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
void AnimateAtomicCapture(int fromX, int fromY, int toX, int toY, int nFrames);\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
BOOL EngineOutputIsUp();\r
VOID EngineOutputUpdate( FrontEndProgramStats * stats );\r
\r
+VOID EngineOptionsPopup(); // [HGM] settings\r
+\r
VOID GothicPopUp(char *title, VariantClass variant);\r
/*\r
* Setting "frozen" should disable all user input other than deleting\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
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 = 7; 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
case 4:\r
if(!MoveHistoryIsUp()) continue;\r
h = mh; break;\r
-// case 5: // input to eval graph does not seem to get here!\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
!(!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
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
{ "secondOptions", ArgString, (LPVOID) &appData.secondOptions, FALSE },\r
{ "firstNeedsNoncompliantFEN", ArgString, (LPVOID) &appData.fenOverride1, FALSE },\r
{ "secondNeedsNoncompliantFEN", ArgString, (LPVOID) &appData.fenOverride2, FALSE },\r
+ { "keepAlive", ArgInt, (LPVOID) &appData.keepAlive, FALSE },\r
+ { "icstype", ArgInt, (LPVOID) &ics_type, FALSE },\r
\r
#ifdef ZIPPY\r
{ "zippyTalk", ArgBoolean, (LPVOID) &appData.zippyTalk, FALSE },\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
+ /* [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
break; \r
} else \r
if(moveType != ImpossibleMove) {\r
+ if(moveType == IllegalMove) {\r
+ ;\r
+ } else\r
/* [HGM] We use PromotionToKnight in Shogi to indicate frorced promotion */\r
if (moveType == WhitePromotionKnight || moveType == BlackPromotionKnight ||\r
((moveType == WhitePromotionQueen || moveType == BlackPromotionQueen) &&\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
+ // kludge to temporarily execute move on display, without promoting yet\r
promotionChoice = TRUE;\r
boards[currentMove][fromY][fromX] = EmptySquare; // move Pawn to 8th rank\r
boards[currentMove][toY][toX] = p;\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
+ fromX = fromY = -1;\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
+ SetPremoveHighlights(fromX, fromY, toX, toY);\r
+ DrawPosition(forceFullRepaint || FALSE, NULL);\r
+ } else ClearHighlights();\r
+ fromX = fromY = -1;\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
\r
JAWS_ALT_INTERCEPT\r
\r
- if (appData.icsActive && (isalpha((char)wParam) || wParam == '0')) { \r
+ if (appData.icsActive && (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
GameListOptions();\r
break;\r
\r
+ case IDM_NewChat:\r
+ ChatPopUp();\r
+ break;\r
+\r
case IDM_CopyPosition:\r
CopyFENToClipboard();\r
break;\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
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