Put recently used engines in WB menu
[xboard.git] / winboard / winboard.c
index 6f26f2b..9ce5428 100644 (file)
@@ -435,7 +435,7 @@ TranslateOneMenu(int i, HMENU subMenu)
             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
@@ -492,6 +492,29 @@ TranslateMenus(int addLanguage)
 \r
 #endif\r
 \r
+#define IDM_RecentEngines 3000\r
+\r
+void\r
+RecentEngineMenu (char *s)\r
+{\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
@@ -1095,6 +1118,7 @@ InitInstance(HINSTANCE hInstance, int nCmdShow, LPSTR lpCmdLine)
   }\r
 \r
   InitDrawingSizes(boardSize, 0);\r
+  RecentEngineMenu(appData.recentEngineList);\r
   InitMenuChecks();\r
   buttonCount = GetSystemMetrics(SM_CMOUSEBUTTONS);\r
 \r
@@ -4247,7 +4271,7 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       }\r
       break;\r
     case 2:\r
-      SetCapture(hwndMain);
+      SetCapture(hwndMain);\r
       break;\r
     case 1:\r
       hmenu = LoadMenu(hInst, "DropPieceMenu");\r
@@ -5443,6 +5467,9 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       break;\r
 \r
     default:\r
+      if(wmId >= IDM_RecentEngines && wmId < IDM_RecentEngines + appData.recentEngines)\r
+          RecentEngineEvent(wmId - 3000);\r
+      else\r
       if(wmId > IDM_English && wmId < IDM_English+20) {\r
           LoadLanguageFile(languageFile[wmId - IDM_English - 1]);\r
           TranslateMenus(0);\r
@@ -6157,7 +6184,7 @@ StartupDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
        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
@@ -6467,10 +6494,10 @@ TypeInMoveDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
 \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
@@ -7433,7 +7460,7 @@ DisplayHoldingsCount(HDC hdc, int x, int y, int rightAlign, int copyNumber)
   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
@@ -8183,8 +8210,8 @@ DisplayMessage(char *str1, char *str2)
     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