extern HANDLE chatHandle[];\r
extern int ics_type;\r
\r
+int MySearchPath P((char *installDir, char *name, char *fullname));\r
+int MyGetFullPathName P((char *name, char *fullname));\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
#define ABOUTBOX -1 /* not sure why these are needed */\r
#define ABOUTBOX2 -1\r
\r
-int dialogItems[][41 ] = {\r
+int dialogItems[][42] = {\r
{ ABOUTBOX, IDOK, OPT_MESS, 400 }, \r
{ DLG_TimeControl, IDC_Babble, OPT_TCUseMoves, OPT_TCUseInc, OPT_TCUseFixed, \r
OPT_TCtext1, OPT_TCtext2, OPT_TCitext1, OPT_TCitext2, OPT_TCftext, GPB_Factors, IDC_Factor1, IDC_Factor2, IDOK, IDCANCEL }, \r
OPT_ChooseLightSquareColor, OPT_ChooseDarkSquareColor, OPT_ChooseWhitePieceColor,\r
OPT_ChooseBlackPieceColor, OPT_ChooseHighlightSquareColor, OPT_ChoosePremoveHighlightColor,\r
OPT_Monochrome, OPT_AllWhite, OPT_UpsideDown, OPT_DefaultBoardColors, GPB_Colors,\r
- IDC_Light, IDC_Dark, IDC_White, IDC_Black, IDC_High, IDC_PreHigh, GPB_Size, OPT_Bitmaps, OPT_PieceFont }, \r
+ IDC_Light, IDC_Dark, IDC_White, IDC_Black, IDC_High, IDC_PreHigh, GPB_Size, OPT_Bitmaps, OPT_PieceFont, OPT_Grid }, \r
{ DLG_NewVariant, IDOK, IDCANCEL, OPT_VariantNormal, OPT_VariantFRC, OPT_VariantWildcastle,\r
OPT_VariantNocastle, OPT_VariantLosers, OPT_VariantGiveaway, OPT_VariantSuicide,\r
OPT_Variant3Check, OPT_VariantTwoKings, OPT_VariantAtomic, OPT_VariantCrazyhouse,\r
info.dwTypeData = buf;\r
info.cch = sizeof(buf);\r
GetMenuItemInfo(subMenu, j, TRUE, &info);\r
- if(i < 10) {
+ if(i < 10) {\r
if(menuText[i][j]) safeStrCpy(buf, menuText[i][j], sizeof(buf)/sizeof(buf[0]) );\r
else menuText[i][j] = strdup(buf); // remember original on first change\r
}\r
\r
#endif\r
\r
+#define IDM_RecentEngines 3000\r
+\r
+void\r
+RecentEngineMenu (char *s)\r
+{\r
+ if(appData.icsActive) return;\r
+ if(appData.recentEngines > 0 && *s) { // feature is on, and list non-empty\r
+ HMENU mainMenu = GetMenu(hwndMain);\r
+ HMENU subMenu = GetSubMenu(mainMenu, 5); // Engine menu\r
+ int i=IDM_RecentEngines;\r
+ recentEngines = strdup(appData.recentEngineList); // remember them as they are in menu\r
+ AppendMenu(subMenu, MF_SEPARATOR, (UINT_PTR) 0, NULL);\r
+ while(*s) {\r
+ char *p = strchr(s, '\n');\r
+ if(p == NULL) return; // malformed!\r
+ *p = NULLCHAR;\r
+ AppendMenu(subMenu, MF_ENABLED|MF_STRING|MF_UNCHECKED, (UINT_PTR) i++, (LPCTSTR) s);\r
+ *p = '\n';\r
+ s = p+1;\r
+ }\r
+ }\r
+}\r
+\r
+\r
typedef struct {\r
char *name;\r
int squareSize;\r
}\r
\r
InitDrawingSizes(boardSize, 0);\r
+ RecentEngineMenu(appData.recentEngineList);\r
InitMenuChecks();\r
buttonCount = GetSystemMetrics(SM_CMOUSEBUTTONS);\r
\r
\r
#define OPTCHAR "/"\r
#define SEPCHAR "="\r
+#define TOPLEVEL 0\r
\r
#include "args.h"\r
\r
}\r
break;\r
case 2:\r
- SetCapture(hwndMain);
+ SetCapture(hwndMain);\r
break;\r
case 1:\r
hmenu = LoadMenu(hInst, "DropPieceMenu");\r
EditTagsPopUp(firstChessProgramNames, &firstChessProgramNames);\r
break;\r
\r
- case IDM_EditProgs2:\r
- LoadEnginePopUp(hwndMain);\r
-// EditTagsPopUp(secondChessProgramNames, &secondChessProgramNames);\r
+ case IDM_LoadProg1:\r
+ LoadEnginePopUp(hwndMain, 0);\r
+ break;\r
+\r
+ case IDM_LoadProg2:\r
+ LoadEnginePopUp(hwndMain, 1);\r
break;\r
\r
case IDM_EditServers:\r
break;\r
\r
default:\r
+ if(wmId >= IDM_RecentEngines && wmId < IDM_RecentEngines + appData.recentEngines)\r
+ RecentEngineEvent(wmId - IDM_RecentEngines);\r
+ else\r
if(wmId > IDM_English && wmId < IDM_English+20) {\r
LoadLanguageFile(languageFile[wmId - IDM_English - 1]);\r
TranslateMenus(0);\r
safeStrCpy(buf, "/fcp=", sizeof(buf)/sizeof(buf[0]) );\r
GetDlgItemText(hDlg, OPT_ChessEngineName, buf + strlen(buf), sizeof(buf) - strlen(buf));\r
p = buf;\r
+ comboLine = strdup(p+5); // [HGM] recent: remember complete line of first combobox\r
ParseArgs(StringGet, &p);\r
safeStrCpy(buf, singleList ? "/fcp=" : "/scp=", sizeof(buf)/sizeof(buf[0]) );\r
GetDlgItemText(hDlg, OPT_SecondChessEngineName, buf + strlen(buf), sizeof(buf) - strlen(buf));\r
- p = buf;
+ p = buf;\r
SwapEngines(singleList); // temporarily swap first and second, to load a second 'first', ...\r
ParseArgs(StringGet, &p);\r
SwapEngines(singleList); // ... and then make it 'second'\r
\r
case WM_COMMAND:\r
switch (LOWORD(wParam)) {\r
- case IDOK:
+ case IDOK:\r
\r
shiftKey = GetKeyState(VK_SHIFT) < 0; // [HGM] remember last shift status\r
- GetDlgItemText(hDlg, OPT_Move, move, sizeof(move));
+ GetDlgItemText(hDlg, OPT_Move, move, sizeof(move));\r
TypeInDoneEvent(move);\r
EndDialog(hDlg, TRUE);\r
return TRUE;\r
HFONT oldFont;\r
RECT rect;\r
\r
- if(copyNumber > 1)
+ if(copyNumber > 1)\r
snprintf(buf, sizeof(buf)/sizeof(buf[0]),"%d", copyNumber); else buf[0] = 0;\r
\r
oldFg = SetTextColor(hdc, RGB(255, 255, 255)); /* white */\r
COLORREF oldFg, oldBg;\r
HFONT oldFont;\r
\r
+ if (twoBoards && partnerUp) return;\r
if (appData.clockMode) {\r
if (tinyLayout)\r
snprintf(buf, sizeof(buf)/sizeof(buf[0]), "%c %s %s", color[0], TimeString(timeRemaining), flagFell);\r
{ IDM_MoveNow, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_Hint, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_Book, MF_BYCOMMAND|MF_GRAYED },\r
- { IDM_EditProgs2, MF_BYCOMMAND|MF_GRAYED },\r
+ { IDM_LoadProg1, MF_BYCOMMAND|MF_GRAYED },\r
+ { IDM_LoadProg2, 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
if (len > remain) len = remain;\r
strncat(messageText, str2, len);\r
}\r
- messageText[MESSAGE_TEXT_MAX - 1] = NULLCHAR;
- safeStrCpy(lastMsg, messageText, MSG_SIZ);
+ messageText[MESSAGE_TEXT_MAX - 1] = NULLCHAR;\r
+ safeStrCpy(lastMsg, messageText, MSG_SIZ);\r
\r
if (hwndMain == NULL || IsIconic(hwndMain)) return;\r
\r
char consoleTitle[MSG_SIZ];\r
\r
snprintf(consoleTitle, MSG_SIZ, "%s: %s", szConsoleTitle, str);\r
- SetWindowText(hwndConsole, consoleTitle);\r
+ SetWindowText(hwndConsole, consoleTitle);\r
\r
if(appData.chatBoxes) { // [HGM] chat: open chat boxes\r
char buf[MSG_SIZ], *p = buf, *q;\r
if(*p) ChatPopUp(p);\r
} while(p=q);\r
}\r
+\r
+ SetActiveWindow(hwndMain);\r
}\r
\r
void\r
ChildProc *cp;\r
int err;\r
SOCKET s;\r
+\r
struct sockaddr_in sa, mysa;\r
struct hostent FAR *hp;\r
unsigned short uport;\r