1 // Menu handling
2
3 #include "burner.h"
4
5 #ifdef _MSC_VER
6 // #include <winable.h>
7 #endif
8
9 int nOtherRes = 0;
10
11 HMENU hMenu = NULL;
12 HMENU hMenuPopup = NULL;
13 HWND hMenubar = NULL; // Handle to the Toolbar control comprising the menu
14 static HMENU hBlitterMenu[8] = {NULL, }; // Handles to the blitter-specific sub-menus
15 static HMENU hAudioPluginMenu[8] = {NULL, };
16
17 bool bMenuDisplayed = false;
18 bool bModelessMenu = false;
19 int nLastMenu = 0;
20 static int nRecursions = -1;
21 static HMENU hCurrentMenu;
22 static int nCurrentItem;
23 static int nCurrentItemFlags;
24
25 int nMenuHeight = 0;
26 int nWindowSize = 0;
27 int nScreenSize = 0;
28 int nScreenSizeHor = 0;
29 int nScreenSizeVer = 0;
30
31 TCHAR szPrevGames[SHOW_PREV_GAMES][32];
32
33 static HHOOK hMenuHook;
34
MenuHook(int nCode,WPARAM wParam,LPARAM lParam)35 static LRESULT CALLBACK MenuHook(int nCode, WPARAM wParam, LPARAM lParam)
36 {
37
38 switch (((MSG*)lParam)->message) {
39
40 case WM_MOUSEMOVE: { // Translate coordinates to menubar client coordinates
41 RECT rect;
42 POINT point = {GET_X_LPARAM(((MSG*)lParam)->lParam), GET_Y_LPARAM(((MSG*)lParam)->lParam)};
43
44 GetWindowRect(hMenubar, &rect);
45
46 if (point.x >= rect.left && point.y >= rect.top && point.x < rect.right && point.y < rect.bottom) {
47 RECT buttonrect;
48 SendMessage(hMenubar, TB_GETITEMRECT, nLastMenu, (LPARAM)&buttonrect);
49
50 if (!(point.x >= rect.left + buttonrect.left && point.y >= rect.top + buttonrect.top && point.x < rect.left + buttonrect.right && point.y < rect.top + buttonrect.bottom)) {
51 SendNotifyMessage(hMenubar, WM_MOUSEMOVE, wParam, MAKELONG(point.x - rect.left, point.y - rect.top));
52 }
53 }
54 break;
55 }
56
57 case WM_LBUTTONDOWN: {
58 RECT rect;
59 RECT buttonrect;
60 POINT point = {GET_X_LPARAM(((MSG*)lParam)->lParam), GET_Y_LPARAM(((MSG*)lParam)->lParam)};
61
62 GetWindowRect(hMenubar, &rect);
63 SendMessage(hMenubar, TB_GETITEMRECT, nLastMenu, (LPARAM)&buttonrect);
64
65 // If the button is pressed over the currently selected menu title, eat the message and close the menu
66 if (point.x >= rect.left + buttonrect.left && point.y >= rect.top + buttonrect.top && point.x < rect.left + buttonrect.right && point.y < rect.top + buttonrect.bottom) {
67 PostMessage(hMenubar, WM_CANCELMODE, 0, 0);
68 return 1;
69 }
70 break;
71 }
72
73 }
74
75 MenuHandleKeyboard((MSG*)lParam);
76
77 return CallNextHookEx(hMenuHook, nCode, wParam, lParam);
78 }
79
DisplayPopupMenu(int nMenu)80 void DisplayPopupMenu(int nMenu)
81 {
82 if (bMenuDisplayed) {
83 EndMenu();
84 if (nLastMenu != nMenu) {
85 PostMessage(hScrnWnd, UM_DISPLAYPOPUP, nMenu, 0);
86 }
87 } else {
88 HMENU hPopupMenu = GetSubMenu(hMenu, nMenu);
89 RECT clientRect;
90 RECT buttonRect;
91
92 nLastMenu = nMenu;
93 nRecursions = 0;
94 nCurrentItemFlags = 0;
95
96 GetWindowRect(hMenubar, &clientRect);
97 SendMessage(hMenubar, TB_GETITEMRECT, nMenu, (LPARAM)&buttonRect);
98
99 if (!bModelessMenu) {
100 hMenuHook = SetWindowsHookEx(WH_MSGFILTER, MenuHook, NULL, GetCurrentThreadId());
101 }
102 TrackPopupMenuEx(hPopupMenu, TPM_LEFTALIGN | TPM_TOPALIGN, clientRect.left + buttonRect.left, clientRect.top + buttonRect.bottom, hScrnWnd, NULL);
103 if (!bModelessMenu) {
104 UnhookWindowsHookEx(hMenuHook);
105 }
106 }
107 }
108
OnNotify(HWND,int,NMHDR * lpnmhdr)109 int OnNotify(HWND, int, NMHDR* lpnmhdr) // HWND hwnd, int id, NMHDR* lpnmhdr
110 {
111 switch (((TBNOTIFY*)lpnmhdr)->hdr.code) {
112
113 case TBN_DROPDOWN: {
114 if (!bMenuDisplayed || ((TBNOTIFY*)lpnmhdr)->iItem - MENU_MENU_0 != nLastMenu) {
115 DisplayPopupMenu(((TBNOTIFY*)lpnmhdr)->iItem - MENU_MENU_0);
116 nLastMenu = ((TBNOTIFY*)lpnmhdr)->iItem - MENU_MENU_0;
117 }
118 return TBDDRET_DEFAULT;
119 }
120
121 case TBN_HOTITEMCHANGE: {
122 int nItem = ((NMTBHOTITEM*)lpnmhdr)->idNew;
123
124 // If a menu is being displayed, close it and display the new one
125 if (bMenuDisplayed) {
126 if (nItem) {
127 if (nItem - MENU_MENU_0 != nLastMenu) {
128 DisplayPopupMenu(nItem - MENU_MENU_0);
129 return 1;
130 }
131 }
132 } else {
133 nLastMenu = nItem - MENU_MENU_0;
134 if (!nItem && !bAltPause) {
135 GameInpCheckMouse();
136 }
137 return 0;
138 }
139 }
140 }
141 return 0;
142 }
143
OnMenuSelect(HWND,HMENU,int nItem,HMENU,UINT nFlags)144 int OnMenuSelect(HWND, HMENU, int nItem, HMENU, UINT nFlags)
145 {
146 // printf("WM_MENUSELECT: %4i, %08x\n", nItem, nFlags);
147 nCurrentItem = nItem;
148 nCurrentItemFlags = nFlags;
149 return 0;
150 }
151
OnInitMenuPopup(HWND,HMENU hNewMenuPopup,UINT,BOOL bWindowsMenu)152 int OnInitMenuPopup(HWND, HMENU hNewMenuPopup, UINT, BOOL bWindowsMenu)
153 {
154 if (!bWindowsMenu) {
155 if (!nRecursions) {
156 bMenuDisplayed = true;
157 SendMessage(hMenubar, TB_PRESSBUTTON, nLastMenu + MENU_MENU_0, MAKELONG(1, 0));
158 hCurrentMenu = hNewMenuPopup;
159 }
160 nRecursions++;
161 }
162 return 0;
163 }
164
OnUnInitMenuPopup(HWND,HMENU,UINT,BOOL)165 int OnUnInitMenuPopup(HWND, HMENU, UINT, BOOL)
166 {
167 if (nRecursions <= 1) {
168 bMenuDisplayed = false;
169 SendMessage(hMenubar, TB_PRESSBUTTON, nLastMenu + MENU_MENU_0, MAKELONG(0, 0));
170 if(!bAltPause) {
171 if (bRunPause) {
172 bRunPause = 0;
173 }
174 GameInpCheckMouse();
175 }
176 }
177 nRecursions--;
178
179 return 0;
180 }
181
MenuHandleKeyboard(MSG * Msg)182 bool MenuHandleKeyboard(MSG* Msg)
183 {
184 static bool bProcessAltKeyUp = true;
185
186 if (!bMenuEnabled) {
187 return 0;
188 }
189
190 if (Msg->message == WM_KEYDOWN) {
191 switch (Msg->wParam) {
192 case VK_ESCAPE: {
193 if (bMenuDisplayed) {
194 if (nRecursions > 1) {
195 break;
196 } else {
197 EndMenu();
198 SendMessage(hMenubar, TB_SETHOTITEM, nLastMenu, 0);
199 return 1;
200 }
201 } else {
202 if (SendMessage(hMenubar, TB_GETHOTITEM, 0, 0) != -1) {
203 SendMessage(hMenubar, TB_SETHOTITEM, (WPARAM)-1, 0);
204 if (!bAltPause) {
205 GameInpCheckMouse();
206 }
207 return 1;
208 }
209 }
210 break;
211 }
212 case VK_LEFT: {
213 int nItem;
214 if (bMenuDisplayed) {
215 if (nRecursions > 1) {
216 break;
217 } else {
218 nItem = nLastMenu;
219 }
220 } else {
221 nItem = SendMessage(hMenubar, TB_GETHOTITEM, 0, 0);
222 }
223 if (nItem != -1) {
224 if (nItem) {
225 nItem -= 1;
226 } else {
227 nItem = 5;
228 }
229 SendMessage(hMenubar, TB_SETHOTITEM, (WPARAM)nItem, 0);
230 return 1;
231 }
232 break;
233 }
234 case VK_RIGHT: {
235 int nItem;
236 if (bMenuDisplayed) {
237 if (nCurrentItemFlags & MF_POPUP) {
238 break;
239 } else {
240 nItem = nLastMenu;
241 }
242 } else {
243 nItem = SendMessage(hMenubar, TB_GETHOTITEM, 0, 0);
244 }
245 if (nItem != -1) {
246 if (nItem != 5) {
247 nItem += 1;
248 } else {
249 nItem = 0;
250 }
251 SendMessage(hMenubar, TB_SETHOTITEM, (WPARAM)nItem, 0);
252 return 1;
253 }
254 break;
255 }
256 case VK_UP: {
257 if (!bMenuDisplayed) {
258 int nItem = SendMessage(hMenubar, TB_GETHOTITEM, 0, 0);
259 if (nItem == -1) {
260 break;
261 } else {
262 SendMessage(hMenubar, TB_SETHOTITEM, (WPARAM)-1, 0);
263 DisplayPopupMenu(nItem);
264 return 1;
265 }
266 }
267 break;
268 }
269 case VK_DOWN: {
270 if (!bMenuDisplayed) {
271 int nItem = SendMessage(hMenubar, TB_GETHOTITEM, 0, 0);
272 if (nItem == -1) {
273 break;
274 } else {
275 SendMessage(hMenubar, TB_SETHOTITEM, (WPARAM)-1, 0);
276 DisplayPopupMenu(nItem);
277 return 1;
278 }
279 }
280 break;
281 }
282 }
283 } else {
284 if (!bLeftAltkeyMapped || bRunPause || !bDrvOkay) {
285 if (Msg->message == WM_SYSKEYDOWN && Msg->wParam == VK_MENU) {
286 if (bMenuDisplayed) {
287 bProcessAltKeyUp = false;
288 EndMenu();
289 if (!bAltPause) {
290 GameInpCheckMouse();
291 }
292 return 1;
293 }
294 } else {
295 if (Msg->message == WM_SYSKEYUP && Msg->wParam == VK_MENU) {
296 if (bProcessAltKeyUp) {
297 int nItem = SendMessage(hMenubar, TB_GETHOTITEM, 0, 0);
298 if (nItem == -1) { // Menu enabled
299 SendMessage(hMenubar, TB_SETHOTITEM, 0, 0);
300 InputSetCooperativeLevel(false, bAlwaysProcessKeyboardInput);
301 return 1;
302 } else { // Menu disabled
303 SendMessage(hMenubar, TB_SETHOTITEM, (WPARAM)-1, 0);
304 if (!bAltPause) {
305 GameInpCheckMouse();
306 }
307 return 1;
308 }
309 }
310 } else {
311 if (Msg->message == UM_DISPLAYPOPUP) {
312 DisplayPopupMenu(Msg->wParam);
313 InputSetCooperativeLevel(false, bAlwaysProcessKeyboardInput);
314 return 1;
315 }
316 }
317 }
318 }
319 }
320
321 bProcessAltKeyUp = true;
322
323 return 0;
324 }
325
MenuCreate()326 int MenuCreate()
327 {
328 TBBUTTON button;
329 TCHAR szButtonText[32];
330 MENUITEMINFO menuItemInfo;
331 MENUINFO menu;
332
333 if (hMenu == NULL) {
334 hMenu = FBALoadMenu(hAppInst, MAKEINTRESOURCE(IDR_MENU)); // Main application menu
335 hBlitterMenu[0] = FBALoadMenu(hAppInst, MAKEINTRESOURCE(IDR_MENU_BLITTER_1)); // DirectDraw Standard blitter
336 hBlitterMenu[1] = FBALoadMenu(hAppInst, MAKEINTRESOURCE(IDR_MENU_BLITTER_2)); // Direct3D
337 hBlitterMenu[2] = FBALoadMenu(hAppInst, MAKEINTRESOURCE(IDR_MENU_BLITTER_3)); // Software effects blitter
338 hBlitterMenu[3] = FBALoadMenu(hAppInst, MAKEINTRESOURCE(IDR_MENU_BLITTER_4)); // DirectX 9
339 hBlitterMenu[4] = FBALoadMenu(hAppInst, MAKEINTRESOURCE(IDR_MENU_BLITTER_5)); // DirectX 9 Alt
340
341 hAudioPluginMenu[0] = FBALoadMenu(hAppInst, MAKEINTRESOURCE(IDR_MENU_AUD_PLUGIN_1));
342 hAudioPluginMenu[1] = FBALoadMenu(hAppInst, MAKEINTRESOURCE(IDR_MENU_AUD_PLUGIN_2));
343 }
344
345 if (hMenuPopup == NULL) {
346 hMenuPopup = CreatePopupMenu();
347
348 menuItemInfo.cbSize = sizeof(MENUITEMINFO);
349 menuItemInfo.fMask = MIIM_TYPE;
350 menuItemInfo.dwTypeData = szButtonText;
351
352 for (int i = 0; i < 6; i++) {
353 menuItemInfo.cch = 32;
354 GetMenuItemInfo(hMenu, i, true, &menuItemInfo);
355 AppendMenu(hMenuPopup, MF_POPUP | MF_STRING, (UINT_PTR)GetSubMenu(hMenu, i), szButtonText);
356 }
357 }
358
359 MenuEnableItems();
360 MenuUpdate();
361
362 bMenuDisplayed = false;
363 nLastMenu = -1;
364
365 hMenubar = CreateWindowEx(0,
366 TOOLBARCLASSNAME, NULL,
367 TBSTYLE_FLAT | TBSTYLE_LIST | CCS_NODIVIDER | CCS_NOPARENTALIGN | CCS_NORESIZE | WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_VISIBLE,
368 0, 0, 0, 0,
369 hScrnWnd, NULL, hAppInst, NULL);
370
371 SendMessage(hMenubar, TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0);
372 SendMessage(hMenubar, TB_SETBITMAPSIZE, 0, 0);
373
374 // Reset window menu to default
375 GetSystemMenu(hScrnWnd, TRUE);
376
377 if (bModelessMenu) { // Make menu modeless
378
379 memset(&menu, 0, sizeof(MENUINFO));
380 menu.cbSize = sizeof(MENUINFO);
381 menu.fMask = MIM_APPLYTOSUBMENUS | MIM_STYLE;
382 menu.dwStyle = MNS_MODELESS | MNS_CHECKORBMP;
383
384 SetMenuInfo(hMenuPopup, &menu);
385
386 for (int i = 0; i < 6; i++) {
387 SetMenuInfo(GetSubMenu(hMenu, i), &menu);
388 }
389
390 memset(&menu, 0, sizeof(MENUINFO));
391 menu.cbSize = sizeof(MENUINFO);
392 menu.fMask = MIM_STYLE | MIM_MAXHEIGHT;
393
394 #if 0
395 // Doesn't seem to work
396 {
397 HMENU hWindowMenu = GetSystemMenu(hScrnWnd, FALSE);
398 GetMenuInfo(hWindowMenu, &menu);
399 menu.dwStyle |= MNS_MODELESS;
400 SetMenuInfo(hWindowMenu, &menu);
401 }
402 #endif
403 }
404
405 // Add buttons to the menu toolbar
406 memset(&button, 0, sizeof(TBBUTTON));
407 memset(&menuItemInfo, 0, sizeof(MENUITEMINFO));
408
409 menuItemInfo.cbSize = sizeof(MENUITEMINFO);
410 menuItemInfo.fMask = MIIM_TYPE;
411 menuItemInfo.dwTypeData = szButtonText;
412
413 for (int i = 0; i < 6; i++) {
414
415 menuItemInfo.cch = 32;
416 GetMenuItemInfo(hMenu, i, true, &menuItemInfo);
417
418 button.iBitmap = 0;
419 button.idCommand = MENU_MENU_0 + i;
420 button.fsState = TBSTATE_ENABLED;
421 button.fsStyle = TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE;
422
423 button.iString = (INT_PTR)szButtonText;
424
425 SendMessage(hMenubar, TB_ADDBUTTONS, 1, (LPARAM)&button);
426 }
427
428 SendMessage(hMenubar, TB_AUTOSIZE, 0, 0);
429
430 return 0;
431 }
432
MenuDestroy()433 void MenuDestroy()
434 {
435 if (hMenubar) {
436 DestroyWindow(hMenubar);
437 hMenubar = NULL;
438 }
439
440 {
441 MENUITEMINFO myMenuItemInfo;
442 myMenuItemInfo.cbSize = sizeof(MENUITEMINFO);
443 myMenuItemInfo.fMask = MIIM_SUBMENU | MIIM_STATE;
444 myMenuItemInfo.fState = MFS_GRAYED;
445 myMenuItemInfo.hSubMenu = NULL;
446 if (hMenu) {
447 SetMenuItemInfo(GetSubMenu(hMenu, 1), 1, TRUE, &myMenuItemInfo);
448 }
449 if (hMenuPopup) {
450 SetMenuItemInfo(GetSubMenu(hMenuPopup, 1), 1, TRUE, &myMenuItemInfo);
451 }
452
453 for (int i = 0; i < 5; i++) {
454 if (hBlitterMenu[i]) {
455 DestroyMenu(hBlitterMenu[i]);
456 hBlitterMenu[i] = 0;
457 }
458 }
459
460 for (int i = 0; i < 2; i++) {
461 if (hAudioPluginMenu[i]) {
462 DestroyMenu(hAudioPluginMenu[i]);
463 hAudioPluginMenu[i] = 0;
464 }
465 }
466 }
467
468 if(hMenu) {
469 DestroyMenu(hMenu);
470 hMenu = NULL;
471 }
472 if (hMenuPopup) {
473 DestroyMenu(hMenuPopup);
474 hMenuPopup = NULL;
475 }
476 }
477
478 // Update the arade resolution menuitem
CreateArcaderesItem()479 void CreateArcaderesItem()
480 {
481 int nGameWidth, nGameHeight;
482
483 TCHAR szItemText[256];
484 MENUITEMINFO menuItem = {sizeof(MENUITEMINFO), MIIM_TYPE, MFT_STRING, 0, 0, NULL, NULL, NULL, 0, szItemText, 0, 0, };
485
486 // horizontal oriented
487 FBALoadString(hAppInst, IDS_MENU_0, szItemText, 256);
488 if ((bDrvOkay) && !(BurnDrvGetFlags() & BDF_ORIENTATION_VERTICAL)) {
489 BurnDrvGetVisibleSize(&nGameWidth, &nGameHeight);
490 _stprintf(szItemText + _tcslen(szItemText), _T("\t(%i x %i)"), nGameWidth, nGameHeight);
491 }
492 menuItem.cch = _tcslen(szItemText);
493 SetMenuItemInfo(hMenu, MENU_RES_ARCADE, 0, &menuItem);
494
495 // vertical oriented
496 TCHAR szItemText2[256];
497 MENUITEMINFO menuItem2 = {sizeof(MENUITEMINFO), MIIM_TYPE, MFT_STRING, 0, 0, NULL, NULL, NULL, 0, szItemText2, 0, 0, };
498
499 FBALoadString(hAppInst, IDS_MENU_0, szItemText2, 256);
500 if (bDrvOkay && BurnDrvGetFlags() & BDF_ORIENTATION_VERTICAL) {
501 BurnDrvGetVisibleSize(&nGameWidth, &nGameHeight);
502 _stprintf(szItemText + _tcslen(szItemText2), _T("\t(%i x %i)"), nGameWidth, nGameHeight);
503 }
504 menuItem2.cch = _tcslen(szItemText2);
505 SetMenuItemInfo(hMenu, MENU_RES_ARCADE_VERTICAL, 0, &menuItem2);
506 }
507
508 // (Horizontal oriented) Update the custom resolution menuitem
CreateOtherresItem(bool bOther)509 static void CreateOtherresItem(bool bOther)
510 {
511 TCHAR szItemText[256];
512 MENUITEMINFO menuItem = {sizeof(MENUITEMINFO), MIIM_TYPE, MFT_STRING, 0, 0, NULL, NULL, NULL, 0, szItemText, 0, 0 };
513
514 FBALoadString(hAppInst, IDS_MENU_1, szItemText, 256);
515 if (bOther) {
516 _stprintf(szItemText + _tcslen(szItemText), _T("\t(%i x %i)"), nVidHorWidth, nVidHorHeight);
517 }
518 menuItem.cch = _tcslen(szItemText);
519 SetMenuItemInfo(hMenu, MENU_RES_OTHER, 0, &menuItem);
520 }
521
522 // (Vertical oriented) Update the custom resolution menuitem
CreateOtherresItemVer(bool bOther)523 static void CreateOtherresItemVer(bool bOther)
524 {
525 TCHAR szItemText[256];
526 MENUITEMINFO menuItem = {sizeof(MENUITEMINFO), MIIM_TYPE, MFT_STRING, 0, 0, NULL, NULL, NULL, 0, szItemText, 0, 0 };
527
528 FBALoadString(hAppInst, IDS_MENU_1, szItemText, 256);
529 if (bOther) {
530 _stprintf(szItemText + _tcslen(szItemText), _T("\t(%i x %i)"), nVidVerWidth, nVidVerHeight);
531 }
532 menuItem.cch = _tcslen(szItemText);
533 SetMenuItemInfo(hMenu, MENU_RES_OTHER_VERTICAL, 0, &menuItem);
534 }
535
CreatepresetResItems()536 static void CreatepresetResItems()
537 {
538 TCHAR szItemText[256];
539 MENUITEMINFO menuItem = {sizeof(MENUITEMINFO), MIIM_TYPE, MFT_STRING, 0, 0, NULL, NULL, NULL, 0, szItemText, 0, 0 };
540
541 // horizontal oriented
542 for (int i = 0; i < 4; i++) {
543 _stprintf(szItemText, _T("%i x %i"), VidPreset[i].nWidth, VidPreset[i].nHeight);
544 menuItem.cch = _tcslen(szItemText);
545 SetMenuItemInfo(hMenu, MENU_RES_1 + i, 0, &menuItem);
546 }
547
548 // vertical oriented
549 for (int i = 0; i < 4; i++) {
550 _stprintf(szItemText, _T("%i x %i"), VidPresetVer[i].nWidth, VidPresetVer[i].nHeight);
551 menuItem.cch = _tcslen(szItemText);
552 SetMenuItemInfo(hMenu, MENU_RES_1_VERTICAL + i, 0, &menuItem);
553 }
554 return;
555 }
556
557 // Update the other gamma menuitem
CreateOtherGammaItem(bool bOther)558 static void CreateOtherGammaItem(bool bOther)
559 {
560 TCHAR szItemText[256];
561 MENUITEMINFO menuItem = {sizeof(MENUITEMINFO), MIIM_TYPE, MFT_STRING, 0, 0, NULL, NULL, NULL, 0, szItemText, 0, 0 };
562
563 FBALoadString(hAppInst, IDS_MENU_2, szItemText, 256);
564 if (bOther) {
565 _stprintf(szItemText + _tcslen(szItemText), _T("\t(%1.2f)"), nGamma);
566 }
567 menuItem.cch = _tcslen(szItemText);
568 SetMenuItemInfo(hMenu, MENU_GAMMA_OTHER, 0, &menuItem);
569 }
570
571 // Update the cpu speed menuitem
CreateCPUSpeedItem(bool bOther)572 static void CreateCPUSpeedItem(bool bOther)
573 {
574 TCHAR szItemText[256];
575 MENUITEMINFO menuItem = {sizeof(MENUITEMINFO), MIIM_TYPE, MFT_STRING, 0, 0, NULL, NULL, NULL, 0, szItemText, 0, 0 };
576
577 FBALoadString(hAppInst, IDS_MENU_3, szItemText, 256);
578 if (bOther) {
579 _stprintf(szItemText + _tcslen(szItemText), _T("\t(%d%%)"), nBurnCPUSpeedAdjust * 100 / 256);
580 }
581 menuItem.cch = _tcslen(szItemText);
582 SetMenuItemInfo(hMenu, MENU_SETCPUCLOCK, 0, &menuItem);
583 }
584
585 // Update state slot menuitmes
CreateStateslotItems()586 static void CreateStateslotItems()
587 {
588 TCHAR szItemText[256];
589 MENUITEMINFO menuItem = {sizeof(MENUITEMINFO), MIIM_TYPE, MFT_STRING, 0, 0, NULL, NULL, NULL, 0, szItemText, 0, 0 };
590
591 _sntprintf(szItemText, 256, FBALoadStringEx(hAppInst, IDS_MENU_4, true), nSavestateSlot);
592 menuItem.cch = _tcslen(szItemText);
593 SetMenuItemInfo(hMenu, MENU_STATE_LOAD_SLOT, 0, &menuItem);
594
595 _sntprintf(szItemText, 256, FBALoadStringEx(hAppInst, IDS_MENU_5, true), nSavestateSlot);
596 menuItem.cch = _tcslen(szItemText);
597 SetMenuItemInfo(hMenu, MENU_STATE_SAVE_SLOT, 0, &menuItem);
598 }
599 #if 0
600 // Update CD menu items
601 static void CreateCDItems()
602 {
603 TCHAR szItemText[256];
604 MENUITEMINFO menuItem = { sizeof(MENUITEMINFO), MIIM_TYPE, MFT_STRING, 0, 0, NULL, NULL, NULL, 0, szItemText, 0, NULL };
605
606 _sntprintf(szItemText, 256, FBALoadStringEx(hAppInst, IDS_CD_SELECT_IMAGE, true));
607 if (nCDEmuSelect == 0) {
608 TCHAR szImage[32];
609 int length = _tcslen(szItemText);
610
611 _sntprintf(szImage, 13, _T("\t%s"), CDEmuImage);
612 if (_tcslen(szImage) > 13) {
613 _sntprintf(szImage + 13, 8, _T("..."));
614 }
615
616 _sntprintf(szItemText + length - 1, 256 - length, szImage);
617 }
618 menuItem.cch = _tcslen(szItemText);
619 SetMenuItemInfo(hMenu, MENU_CDIMAGE, 0, &menuItem);
620 }
621 #endif
622 // Update bullets, checkmarks, and item text
MenuUpdate()623 void MenuUpdate()
624 {
625 int var;
626
627 // if (!bMenuEnabled) {
628 // return;
629 // }
630
631 CreateStateslotItems();
632
633 CheckMenuItem(hMenu, MENU_PAUSE, bAltPause ? MF_CHECKED : MF_UNCHECKED);
634 CheckMenuItem(hMenu, MENU_ALLRAM, bDrvSaveAll ? MF_CHECKED : MF_UNCHECKED);
635
636 // CreateCDItems();
637 // CheckMenuRadioItem(hMenu, MENU_CDIMAGE, MENU_CDIMAGE, MENU_CDIMAGE + nCDEmuSelect, MF_BYCOMMAND);
638
639 CheckMenuItem(hMenu, MENU_SETCPUCLOCK, nBurnCPUSpeedAdjust != 0x0100 ? MF_CHECKED : MF_UNCHECKED);
640 CreateCPUSpeedItem(nBurnCPUSpeedAdjust != 0x0100);
641
642 if (bVidFullStretch) {
643 var = MENU_STRETCH;
644 } else {
645 if (bVidCorrectAspect) {
646 var = MENU_ASPECT;
647 } else {
648 var = MENU_NOSTRETCH;
649 }
650 }
651 CheckMenuRadioItem(hMenu, MENU_NOSTRETCH, MENU_ASPECT, var, MF_BYCOMMAND);
652 CheckMenuItem(hMenu, MENU_STRETCH, bVidFullStretch ? MF_CHECKED : MF_UNCHECKED);
653
654 CheckMenuItem(hMenu, MENU_TRIPLE, bVidTripleBuffer ? MF_CHECKED : MF_UNCHECKED);
655
656 CheckMenuItem(hMenu, MENU_DWMFIX, bVidDWMSync ? MF_CHECKED : MF_UNCHECKED);
657
658 var = nVidSelect + MENU_BLITTER_1;
659 CheckMenuRadioItem(hMenu, MENU_BLITTER_1, MENU_BLITTER_8, var, MF_BYCOMMAND);
660
661 switch (nVidSelect) {
662 case 0:
663 if (bVidScanlines) {
664 if (bVidScanHalf) {
665 var = MENU_SCAN50;
666 } else {
667 var = MENU_BASIC_SCAN;
668 }
669 } else {
670 var = MENU_BASIC_NORMAL;
671 }
672 CheckMenuRadioItem(hMenu, MENU_BASIC_NORMAL, MENU_SCAN50, var, MF_BYCOMMAND);
673 CheckMenuItem(hMenu, MENU_BASIC_ROTSCAN, bVidScanRotate ? MF_CHECKED : MF_UNCHECKED);
674 CheckMenuItem(hMenu, MENU_FORCE_FLIP, bVidForceFlip ? MF_CHECKED : MF_UNCHECKED);
675 CheckMenuItem(hMenu, MENU_RES_ARCADE, bVidArcaderes ? MF_CHECKED : MF_UNCHECKED);
676 break;
677 case 1:
678 CheckMenuItem(hMenu, MENU_BILINEAR, bVidBilinear ? MF_CHECKED : MF_UNCHECKED);
679 CheckMenuItem(hMenu, MENU_ENHANCED_SCAN, bVidScanlines ? MF_CHECKED : MF_UNCHECKED);
680 CheckMenuItem(hMenu, MENU_PHOSPHOR, bVidScanDelay ? MF_CHECKED : MF_UNCHECKED);
681
682 CheckMenuItem(hMenu, MENU_PRESCALE, nVidBlitterOpt[nVidSelect] & 0x01000000 ? MF_CHECKED : MF_UNCHECKED);
683 CheckMenuItem(hMenu, MENU_SOFTFX, nVidBlitterOpt[nVidSelect] & 0x02000000 ? MF_CHECKED : MF_UNCHECKED);
684
685 var = ((unsigned long long)nVidBlitterOpt[nVidSelect] >> 32) + MENU_ENHANCED_SOFT_STRETCH;
686 CheckMenuRadioItem(hMenu, MENU_ENHANCED_SOFT_STRETCH, MENU_ENHANCED_SOFT_STRETCH + 34, var, MF_BYCOMMAND);
687 CheckMenuItem(hMenu, MENU_ENHANCED_SOFT_AUTOSIZE, (nVidBlitterOpt[nVidSelect] & 0x04000000) ? MF_CHECKED : MF_UNCHECKED);
688 if (nVidBlitterOpt[nVidSelect] & 0x00100000) {
689 var = MENU_3DPROJECTION;
690 } else {
691 if (nVidBlitterOpt[nVidSelect] & 0x00010000) {
692 var = MENU_RGBEFFECTS;
693 } else {
694 var = MENU_ENHANCED_NORMAL;
695 }
696 }
697 CheckMenuRadioItem(hMenu, MENU_ENHANCED_NORMAL, MENU_ENHANCED_NORMAL, var, MF_BYCOMMAND);
698 CheckMenuRadioItem(hMenu, MENU_RGBEFFECTS, MENU_3DPROJECTION, var, MF_BYCOMMAND);
699
700 CheckMenuItem(hMenu, MENU_EFFECT_AUTO, (nVidBlitterOpt[nVidSelect] & 0x00020000) ? MF_CHECKED : MF_UNCHECKED);
701 var = MENU_EFFECT_01 + (nVidBlitterOpt[nVidSelect] & 0x000000FF) - 8;
702 CheckMenuRadioItem(hMenu, MENU_EFFECT_01, MENU_EFFECT_08, var, MF_BYCOMMAND);
703 CheckMenuItem(hMenu, MENU_3DUSELIGHTING, nVidBlitterOpt[nVidSelect] & 0x00200000 ? MF_CHECKED : MF_UNCHECKED);
704 CheckMenuItem(hMenu, MENU_ENHANCED_ROTSCAN, bVidScanRotate ? MF_CHECKED : MF_UNCHECKED);
705 CheckMenuItem(hMenu, MENU_FORCE_16BIT, bVidForce16bit ? MF_CHECKED : MF_UNCHECKED);
706 CheckMenuItem(hMenu, MENU_TEXTUREMANAGE, (nVidTransferMethod & 1) ? MF_CHECKED : MF_UNCHECKED);
707 CheckMenuItem(hMenu, MENU_RES_ARCADE, bVidArcaderes ? MF_CHECKED : MF_UNCHECKED);
708 break;
709 case 2:
710 var = (nVidBlitterOpt[nVidSelect] & 0xFF) + MENU_SOFTFX_SOFT_STRETCH;
711 CheckMenuRadioItem(hMenu, MENU_SOFTFX_SOFT_STRETCH, MENU_SOFTFX_SOFT_STRETCH + 34, var, MF_BYCOMMAND);
712 CheckMenuItem(hMenu, MENU_SOFTFX_SOFT_AUTOSIZE, (nVidBlitterOpt[nVidSelect] & 0x0100) ? MF_CHECKED : MF_UNCHECKED);
713 CheckMenuItem(hMenu, MENU_SOFT_DIRECTACCESS, !(nVidBlitterOpt[nVidSelect] & 0x0200) ? MF_CHECKED : MF_UNCHECKED);
714 break;
715 case 3:
716 var = ((nVidBlitterOpt[nVidSelect] >> 24) & 0x03) + MENU_DX9_POINT;
717 CheckMenuRadioItem(hMenu, MENU_DX9_POINT, MENU_DX9_POINT + 2, var, MF_BYCOMMAND);
718 CheckMenuItem(hMenu, MENU_EXP_SCAN, bVidScanlines ? MF_CHECKED : MF_UNCHECKED);
719
720 var = MENU_DX9_CUBIC_CUSTOM;
721 if (dVidCubicB > -0.001 && dVidCubicB < 0.001 && dVidCubicC > -0.001 && dVidCubicC < 0.001) {
722 var = MENU_DX9_CUBIC_LIGHT;
723 }
724 if (dVidCubicB > 1.499 && dVidCubicB < 1.501 && dVidCubicC > -0.251 && dVidCubicC < -0.249) {
725 var = MENU_DX9_CUBIC_NOTCH;
726 }
727 if (dVidCubicB > 0.999 && dVidCubicB < 1.001 && dVidCubicC > -0.001 && dVidCubicC < 0.001) {
728 var = MENU_DX9_CUBIC_BSPLINE;
729 }
730 if (dVidCubicB > 0.333 && dVidCubicB < 0.334 && dVidCubicC > 0.333 && dVidCubicC < 0.334) {
731 var = MENU_DX9_CUBIC_OPTIMAL;
732 }
733 if (dVidCubicB > -0.001 && dVidCubicB < 0.001 && dVidCubicC > 0.499 && dVidCubicC < 0.501) {
734 var = MENU_DX9_CUBIC_CATMULL;
735 }
736 if (dVidCubicB > -0.001 && dVidCubicB < 0.001 && dVidCubicC > 0.999 && dVidCubicC < 1.001) {
737 var = MENU_DX9_CUBIC_SHARP;
738 }
739 CheckMenuRadioItem(hMenu, MENU_DX9_CUBIC_LIGHT, MENU_DX9_CUBIC_BSPLINE + 8, var, MF_BYCOMMAND);
740
741 CheckMenuItem(hMenu, MENU_DX9_FORCE_PS14, !(nVidBlitterOpt[nVidSelect] & (1 << 9)) ? MF_CHECKED : MF_UNCHECKED);
742 CheckMenuItem(hMenu, MENU_DX9_FPTERXTURES, (nVidBlitterOpt[nVidSelect] & (1 << 8)) ? MF_CHECKED : MF_UNCHECKED);
743 if (!(nVidBlitterOpt[nVidSelect] & (1 << 9))) {
744 var = MENU_DX9_CUBIC4;
745 } else {
746 var = ((nVidBlitterOpt[nVidSelect] >> 28) & 0x07) + MENU_DX9_CUBIC0;
747 }
748 CheckMenuRadioItem(hMenu, MENU_DX9_CUBIC0, MENU_DX9_CUBIC0 + 8, var, MF_BYCOMMAND);
749 break;
750 case 4:
751 var = (nVidBlitterOpt[nVidSelect] & 0xFF) + MENU_DX9_ALT_SOFT_STRETCH;
752 CheckMenuRadioItem(hMenu, MENU_DX9_ALT_SOFT_STRETCH, MENU_DX9_ALT_SOFT_STRETCH + 34, var, MF_BYCOMMAND);
753 CheckMenuItem(hMenu, MENU_DX9_ALT_SOFT_AUTOSIZE, (nVidBlitterOpt[nVidSelect] & 0x0100) ? MF_CHECKED : MF_UNCHECKED);
754 CheckMenuRadioItem(hMenu, MENU_DX9_ALT_POINT, MENU_DX9_ALT_POINT + 1, MENU_DX9_ALT_POINT + bVidDX9Bilinear, MF_BYCOMMAND);
755 CheckMenuItem(hMenu, MENU_DX9_ALT_HARDWAREVERTEX, (bVidHardwareVertex) ? MF_CHECKED : MF_UNCHECKED);
756 CheckMenuItem(hMenu, MENU_DX9_ALT_MOTIONBLUR, (bVidMotionBlur) ? MF_CHECKED : MF_UNCHECKED);
757 CheckMenuItem(hMenu, MENU_DX9_ALT_FORCE_16BIT, bVidForce16bitDx9Alt ? MF_CHECKED : MF_UNCHECKED);
758 break;
759 }
760
761 var = 0;
762 if (nScreenSizeHor) {
763 var = MENU_SINGLESIZESCREEN + nScreenSizeHor - 1;
764 CreateOtherresItem(0);
765 } else {
766 for (int n = 0; n < 4; n++) {
767 if (nVidHorWidth == VidPreset[n].nWidth && nVidHorHeight == VidPreset[n].nHeight) {
768 var = MENU_RES_1 + n;
769 break;
770 }
771 }
772 if (var) {
773 CreateOtherresItem(0);
774 } else {
775 var = MENU_RES_OTHER;
776 CreateOtherresItem(1);
777 }
778 if (bVidArcaderesHor) {
779 var = MENU_RES_ARCADE;
780 }
781 }
782 CheckMenuRadioItem(hMenu, MENU_RES_1, MENU_QUADSIZESCREEN, var, MF_BYCOMMAND);
783
784 var = 0;
785 if (nScreenSizeVer) {
786 var = MENU_SINGLESIZESCREEN_VERTICAL + nScreenSizeVer - 1;
787 CreateOtherresItemVer(0);
788 } else {
789 for (int n = 0; n < 4; n++) {
790 if (nVidVerWidth == VidPresetVer[n].nWidth && nVidVerHeight == VidPresetVer[n].nHeight) {
791 var = MENU_RES_1_VERTICAL + n;
792 break;
793 }
794 }
795 if (var) {
796 CreateOtherresItemVer(0);
797 } else {
798 var = MENU_RES_OTHER_VERTICAL;
799 CreateOtherresItemVer(1);
800 }
801 if (bVidArcaderesVer) {
802 var = MENU_RES_ARCADE_VERTICAL;
803 }
804 }
805 CheckMenuRadioItem(hMenu, MENU_RES_1_VERTICAL, MENU_QUADSIZESCREEN_VERTICAL, var, MF_BYCOMMAND);
806
807 if (nVidDepth == 16) {
808 var = MENU_16;
809 } else {
810 if (nVidDepth == 24) {
811 var = MENU_24;
812 } else {
813 var = MENU_32;
814 }
815 }
816 CheckMenuRadioItem(hMenu, MENU_16, MENU_32, var, MF_BYCOMMAND);
817
818 if (nGamma > 1.249 && nGamma < 1.251) {
819 var = MENU_GAMMA_DARKER;
820 } else {
821 if (nGamma > 0.799 && nGamma < 0.801) {
822 var = MENU_GAMMA_LIGHTER;
823 } else {
824 var = MENU_GAMMA_OTHER;
825 }
826 }
827 if (var == MENU_GAMMA_OTHER) {
828 CreateOtherGammaItem(1);
829 } else {
830 CreateOtherGammaItem(0);
831 }
832 if (!bDoGamma) {
833 var = MENU_GAMMA_DO;
834 }
835 CheckMenuRadioItem(hMenu, MENU_GAMMA_DARKER, MENU_GAMMA_OTHER, var, MF_BYCOMMAND);
836 CheckMenuItem(hMenu, MENU_GAMMA_DO, bDoGamma ? MF_CHECKED : MF_UNCHECKED);
837
838 var = MENU_GAMMA_SOFTWARE_ONLY;
839 if (bVidUseHardwareGamma) {
840 if (bHardwareGammaOnly) {
841 var = MENU_GAMMA_HARDWARE_ONLY;
842 } else {
843 var = MENU_GAMMA_USE_HARDWARE;
844 }
845 }
846 CheckMenuRadioItem(hMenu, MENU_GAMMA_USE_HARDWARE, MENU_GAMMA_SOFTWARE_ONLY, var, MF_BYCOMMAND);
847
848 CheckMenuItem(hMenu, MENU_AUTOSWITCHFULL, bVidAutoSwitchFull ? MF_CHECKED : MF_UNCHECKED);
849
850 if (nVidTransferMethod == 0) {
851 var = MENU_BASIC_VIDEOMEM;
852 } else {
853 if (nVidTransferMethod == -1) {
854 var = MENU_BASIC_MEMAUTO;
855 } else {
856 var = MENU_BASIC_SYSMEM;
857 }
858 }
859 CheckMenuRadioItem(hMenu, MENU_BASIC_MEMAUTO, MENU_BASIC_SYSMEM, var, MF_BYCOMMAND);
860
861 if (nVidTransferMethod == 0) {
862 var = MENU_SOFTFX_VIDEOMEM;
863 } else {
864 if (nVidTransferMethod == -1) {
865 var = MENU_SOFTFX_MEMAUTO;
866 } else {
867 var = MENU_SOFTFX_SYSMEM;
868 }
869 }
870 CheckMenuRadioItem(hMenu, MENU_SOFTFX_MEMAUTO, MENU_SOFTFX_SYSMEM, var, MF_BYCOMMAND);
871
872 if (nWindowSize <= 4) {
873 var = MENU_AUTOSIZE + nWindowSize;
874 } else {
875 var = MENU_MAXIMUMSIZEWINDOW;
876 }
877 CheckMenuRadioItem(hMenu, MENU_AUTOSIZE, MENU_MAXIMUMSIZEWINDOW, var, MF_BYCOMMAND);
878
879 CheckMenuItem(hMenu, MENU_MONITORAUTOCHECK, bMonitorAutoCheck ? MF_CHECKED : MF_UNCHECKED);
880
881 var = -1;
882 if (nVidScrnAspectX == 4 && nVidScrnAspectY == 3) {
883 var = MENU_ASPECTNORMAL;
884 } else {
885 if (nVidScrnAspectX == 5 && nVidScrnAspectY == 4) {
886 var = MENU_ASPECTLCD;
887 } else {
888 if (nVidScrnAspectX == 16 && nVidScrnAspectY == 9) {
889 var = MENU_ASPECTWIDE;
890 } else {
891 if (nVidScrnAspectX == 16 && nVidScrnAspectY == 10) {
892 var = MENU_ASPECTWIDELCD;
893 }
894 }
895 }
896 }
897 CheckMenuRadioItem(hMenu, MENU_ASPECTNORMAL, MENU_ASPECTWIDELCD, var, MF_BYCOMMAND);
898 CheckMenuItem(hMenu, MENU_MONITORMIRRORVERT, (nVidRotationAdjust & 2) ? MF_CHECKED : MF_UNCHECKED);
899
900 CheckMenuItem(hMenu, MENU_ROTATEVERTICAL, !(nVidRotationAdjust & 1) ? MF_CHECKED : MF_UNCHECKED);
901 CheckMenuItem(hMenu, MENU_FORCE60HZ, bForce60Hz ? MF_CHECKED : MF_UNCHECKED);
902 CheckMenuItem(hMenu, MENU_VIDEOVSYNC, bVidVSync ? MF_CHECKED : MF_UNCHECKED);
903 CheckMenuItem(hMenu, MENU_AUTOFRAMESKIP, !bAlwaysDrawFrames ? MF_CHECKED : MF_UNCHECKED);
904
905 var = nAudSelect + MENU_AUD_PLUGIN_1;
906 CheckMenuRadioItem(hMenu, MENU_AUD_PLUGIN_1, MENU_AUD_PLUGIN_8, var, MF_BYCOMMAND);
907
908 switch (nAudSelect) {
909 case 0: {
910 var = MENU_DSOUND_NOSOUND;
911 if (nAudSampleRate[0] > 0) {
912 if (nAudSampleRate[0] <= 11025) {
913 var = MENU_DSOUND_11025;
914 } else {
915 if (nAudSampleRate[0] <= 22050) {
916 var = MENU_DSOUND_22050;
917 } else {
918 if (nAudSampleRate[0] <= 44100) {
919 var = MENU_DSOUND_44100;
920 } else {
921 var = MENU_DSOUND_48000;
922 }
923 }
924 }
925 }
926 CheckMenuRadioItem(hMenu, MENU_DSOUND_NOSOUND, MENU_DSOUND_48000, var, MF_BYCOMMAND);
927 CheckMenuItem(hMenu, MENU_DSOUND_BASS, nAudDSPModule[0] ? MF_CHECKED : MF_UNCHECKED);
928 break;
929 }
930
931 case 1: {
932 var = MENU_XAUDIO_NOSOUND;
933 if (nAudSampleRate[1] > 0) {
934 if (nAudSampleRate[1] <= 11025) {
935 var = MENU_XAUDIO_11025;
936 } else {
937 if (nAudSampleRate[1] <= 22050) {
938 var = MENU_XAUDIO_22050;
939 } else {
940 if (nAudSampleRate[1] <= 44100) {
941 var = MENU_XAUDIO_44100;
942 } else {
943 var = MENU_XAUDIO_48000;
944 }
945 }
946 }
947 }
948 CheckMenuRadioItem(hMenu, MENU_XAUDIO_NOSOUND, MENU_XAUDIO_48000, var, MF_BYCOMMAND);
949 CheckMenuItem(hMenu, MENU_XAUDIO_BASS, (nAudDSPModule[1] & 1) ? MF_CHECKED : MF_UNCHECKED);
950 CheckMenuItem(hMenu, MENU_XAUDIO_REVERB, (nAudDSPModule[1] & 2) ? MF_CHECKED : MF_UNCHECKED);
951 break;
952 }
953 }
954
955 var = MENU_INTERPOLATE_0 + nInterpolation;
956 if (bDrvOkay) {
957 if ((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) == HARDWARE_SNK_NEOGEO) {
958 var = MENU_INTERPOLATE_0 + 1;
959 }
960 }
961 CheckMenuRadioItem(hMenu, MENU_INTERPOLATE_0, MENU_INTERPOLATE_5, var, MF_BYCOMMAND);
962
963 var = MENU_INTERPOLATE_FM_0 + nFMInterpolation;
964 CheckMenuRadioItem(hMenu, MENU_INTERPOLATE_FM_0, MENU_INTERPOLATE_FM_5, var, MF_BYCOMMAND);
965
966 CheckMenuItem(hMenu, MENU_AUTOPAUSE, bAutoPause ? MF_CHECKED : MF_UNCHECKED);
967 CheckMenuItem(hMenu, MENU_PROCESSINPUT, !bAlwaysProcessKeyboardInput ? MF_CHECKED : MF_UNCHECKED);
968 if (bAutoPause) {
969 EnableMenuItem(hMenu, MENU_PROCESSINPUT, MF_GRAYED | MF_BYCOMMAND);
970 } else {
971 EnableMenuItem(hMenu, MENU_PROCESSINPUT, MF_ENABLED | MF_BYCOMMAND);
972 }
973 CheckMenuItem(hMenu, MENU_DISPLAYINDICATOR, nVidSDisplayStatus ? MF_CHECKED : MF_UNCHECKED);
974 CheckMenuItem(hMenu, MENU_MODELESS, bModelessMenu ? MF_CHECKED : MF_UNCHECKED);
975 CheckMenuItem(hMenu, MENU_NOCHANGENUMLOCK, bNoChangeNumLock ? MF_CHECKED : MF_UNCHECKED);
976 CheckMenuItem(hMenu, MENU_HIGHRESTIMER, bEnableHighResTimer ? MF_CHECKED : MF_UNCHECKED);
977 CheckMenuItem(hMenu, MENU_CREATEDIRS, bAlwaysCreateSupportFolders ? MF_CHECKED : MF_UNCHECKED);
978 CheckMenuItem(hMenu, MENU_AUTOLOADGAMELIST, bAutoLoadGameList ? MF_CHECKED : MF_UNCHECKED);
979 CheckMenuItem(hMenu, MENU_SAVEHISCORES, EnableHiscores ? MF_CHECKED : MF_UNCHECKED);
980 CheckMenuItem(hMenu, MENU_USEBLEND, bBurnUseBlend ? MF_CHECKED : MF_UNCHECKED);
981 CheckMenuItem(hMenu, MENU_GEARSHIFT, BurnShiftEnabled ? MF_CHECKED : MF_UNCHECKED);
982
983 #ifdef INCLUDE_AVI_RECORDING
984 if (nAvi3x <= 1) {
985 nAvi3x = 1;
986 var = MENU_AVI1X;
987 }
988 if (nAvi3x == 2) {
989 var = MENU_AVI2X;
990 }
991 if (nAvi3x >= 3) {
992 nAvi3x = 3;
993 var = MENU_AVI3X;
994 }
995
996 CheckMenuRadioItem(hMenu, MENU_AVI1X, MENU_AVI3X, var, MF_BYCOMMAND);
997 #endif
998
999 if (nAppThreadPriority == THREAD_PRIORITY_TIME_CRITICAL) {
1000 var = MENU_PRIORITY_REALTIME;
1001 } else {
1002 if (nAppThreadPriority == THREAD_PRIORITY_HIGHEST) {
1003 var = MENU_PRIORITY_HIGH;
1004 } else {
1005 if (nAppThreadPriority == THREAD_PRIORITY_ABOVE_NORMAL) {
1006 var = MENU_PRIORITY_ABOVE_NORMAL;
1007 } else {
1008 if (nAppThreadPriority == THREAD_PRIORITY_BELOW_NORMAL) {
1009 var = MENU_PRIORITY_BELOW_NORMAL;
1010 } else {
1011 if (nAppThreadPriority == THREAD_PRIORITY_LOWEST) {
1012 var = MENU_PRIORITY_LOW;
1013 } else {
1014 var = MENU_PRIORITY_NORMAL;
1015 }
1016 }
1017 }
1018 }
1019 }
1020 CheckMenuRadioItem(hMenu, MENU_PRIORITY_REALTIME, MENU_PRIORITY_LOW, var, MF_BYCOMMAND);
1021 CheckMenuItem(hMenu, MENU_SAVEGAMEINPUT, bSaveInputs ? MF_CHECKED : MF_UNCHECKED);
1022
1023 // Auto-Fire
1024 if (nAutoFireRate == 4) var = MENU_INPUT_AUTOFIRE_RATE_4;
1025 if (nAutoFireRate == 8) var = MENU_INPUT_AUTOFIRE_RATE_3;
1026 if (nAutoFireRate == 12) var = MENU_INPUT_AUTOFIRE_RATE_2;
1027 if (nAutoFireRate == 22) var = MENU_INPUT_AUTOFIRE_RATE_1;
1028 CheckMenuRadioItem(hMenu, MENU_INPUT_AUTOFIRE_RATE_1, MENU_INPUT_AUTOFIRE_RATE_4, var, MF_BYCOMMAND);
1029
1030 #ifdef BUILD_A68K
1031 CheckMenuItem(hMenu, MENU_ASSEMBLYCORE, bBurnUseASMCPUEmulation ? MF_CHECKED : MF_UNCHECKED);
1032 #endif
1033
1034 var = MENU_ICONS_SIZE_16;
1035 switch (nIconsSize) {
1036 case ICON_16x16: var = MENU_ICONS_SIZE_16; break;
1037 case ICON_24x24: var = MENU_ICONS_SIZE_24; break;
1038 case ICON_32x32: var = MENU_ICONS_SIZE_32; break;
1039 }
1040 CheckMenuRadioItem(hMenu, MENU_ICONS_SIZE_16, MENU_ICONS_SIZE_32, var, MF_BYCOMMAND);
1041 CheckMenuItem(hMenu, MENU_ENABLEICONS, bEnableIcons ? MF_CHECKED : MF_UNCHECKED);
1042 CheckMenuItem(hMenu, MENU_ICONS_PARENTSONLY, bIconsOnlyParents ? MF_CHECKED : MF_UNCHECKED);
1043
1044 // Previous games list
1045 for (int i = 0; i < SHOW_PREV_GAMES; i++) {
1046 MENUITEMINFO menuItemInfo;
1047 TCHAR szText[256] = _T("");
1048 int OldDrvSelect = nBurnDrvActive;
1049
1050 memset(&menuItemInfo, 0, sizeof(MENUITEMINFO));
1051 menuItemInfo.cbSize = sizeof(MENUITEMINFO);
1052 menuItemInfo.fType = MFT_STRING;
1053 menuItemInfo.fMask = MIIM_TYPE;
1054
1055 if (_tcslen(szPrevGames[i])) {
1056 for (unsigned int j = 0; j < nBurnDrvCount; j++) {
1057 nBurnDrvActive = j;
1058 if (!_tcsicmp(szPrevGames[i], BurnDrvGetText(DRV_NAME))) {
1059 _stprintf(szText, _T("%s\t%s"), BurnDrvGetText(DRV_FULLNAME), BurnDrvGetText(DRV_NAME));
1060
1061 break;
1062 }
1063 }
1064
1065 // Check for &s and change to &&
1066 TCHAR szText2[256] = _T("");
1067 TCHAR *Tokens = NULL;
1068 int NumTokens = 0;
1069
1070 Tokens = _tcstok(szText, _T("&"));
1071 while (Tokens != NULL) {
1072 if (NumTokens) {
1073 _stprintf(szText2, _T("%s&&%s"), szText2, Tokens);
1074 } else {
1075 _stprintf(szText2, _T("%s"), Tokens);
1076 }
1077
1078 Tokens = _tcstok(NULL, _T("&"));
1079 NumTokens++;
1080 }
1081
1082 menuItemInfo.dwTypeData = szText2;
1083 menuItemInfo.cch = _tcslen(szText2);
1084
1085 SetMenuItemInfo(hMenu, MENU_PREVIOUSGAMES1 + i, FALSE, &menuItemInfo);
1086 EnableMenuItem(hMenu, MENU_PREVIOUSGAMES1 + i, MF_ENABLED | MF_BYCOMMAND);
1087 } else {
1088 _tcscpy(szText, FBALoadStringEx(hAppInst, IDS_MENU_6, true));
1089
1090 menuItemInfo.dwTypeData = szText;
1091 menuItemInfo.cch = _tcslen(szText);
1092
1093 SetMenuItemInfo(hMenu, MENU_PREVIOUSGAMES1 + i, FALSE, &menuItemInfo);
1094 EnableMenuItem(hMenu, MENU_PREVIOUSGAMES1 + i, MF_GRAYED | MF_BYCOMMAND);
1095 }
1096
1097 nBurnDrvActive = OldDrvSelect;
1098 }
1099
1100 #if !defined BUILD_X86_ASM
1101 EnableMenuItem(hMenu, MENU_ENHANCED_SOFT_2XPM_LQ, MF_GRAYED | MF_BYCOMMAND);
1102 EnableMenuItem(hMenu, MENU_ENHANCED_SOFT_2XPM_HQ, MF_GRAYED | MF_BYCOMMAND);
1103 EnableMenuItem(hMenu, MENU_ENHANCED_SOFT_EAGLE, MF_GRAYED | MF_BYCOMMAND);
1104 EnableMenuItem(hMenu, MENU_ENHANCED_SOFT_SUPEREAGLE, MF_GRAYED | MF_BYCOMMAND);
1105 EnableMenuItem(hMenu, MENU_ENHANCED_SOFT_2XSAI, MF_GRAYED | MF_BYCOMMAND);
1106 EnableMenuItem(hMenu, MENU_ENHANCED_SOFT_SUPER2XSAI, MF_GRAYED | MF_BYCOMMAND);
1107 EnableMenuItem(hMenu, MENU_ENHANCED_SOFT_SUPEREAGLE_VBA, MF_GRAYED | MF_BYCOMMAND);
1108 EnableMenuItem(hMenu, MENU_ENHANCED_SOFT_2XSAI_VBA, MF_GRAYED | MF_BYCOMMAND);
1109 EnableMenuItem(hMenu, MENU_ENHANCED_SOFT_SUPER2XSAI_VBA, MF_GRAYED | MF_BYCOMMAND);
1110 EnableMenuItem(hMenu, MENU_ENHANCED_SOFT_SUPERSCALE, MF_GRAYED | MF_BYCOMMAND);
1111 EnableMenuItem(hMenu, MENU_ENHANCED_SOFT_SUPERSCALE75, MF_GRAYED | MF_BYCOMMAND);
1112 EnableMenuItem(hMenu, MENU_ENHANCED_SOFT_HQ2X, MF_GRAYED | MF_BYCOMMAND);
1113 EnableMenuItem(hMenu, MENU_ENHANCED_SOFT_HQ3X, MF_GRAYED | MF_BYCOMMAND);
1114 EnableMenuItem(hMenu, MENU_ENHANCED_SOFT_HQ4X, MF_GRAYED | MF_BYCOMMAND);
1115
1116 EnableMenuItem(hMenu, MENU_SOFTFX_SOFT_2XPM_LQ, MF_GRAYED | MF_BYCOMMAND);
1117 EnableMenuItem(hMenu, MENU_SOFTFX_SOFT_2XPM_HQ, MF_GRAYED | MF_BYCOMMAND);
1118 EnableMenuItem(hMenu, MENU_SOFTFX_SOFT_EAGLE, MF_GRAYED | MF_BYCOMMAND);
1119 EnableMenuItem(hMenu, MENU_SOFTFX_SOFT_SUPEREAGLE, MF_GRAYED | MF_BYCOMMAND);
1120 EnableMenuItem(hMenu, MENU_SOFTFX_SOFT_2XSAI, MF_GRAYED | MF_BYCOMMAND);
1121 EnableMenuItem(hMenu, MENU_SOFTFX_SOFT_SUPER2XSAI, MF_GRAYED | MF_BYCOMMAND);
1122 EnableMenuItem(hMenu, MENU_SOFTFX_SOFT_SUPEREAGLE_VBA, MF_GRAYED | MF_BYCOMMAND);
1123 EnableMenuItem(hMenu, MENU_SOFTFX_SOFT_2XSAI_VBA, MF_GRAYED | MF_BYCOMMAND);
1124 EnableMenuItem(hMenu, MENU_SOFTFX_SOFT_SUPER2XSAI_VBA, MF_GRAYED | MF_BYCOMMAND);
1125 EnableMenuItem(hMenu, MENU_SOFTFX_SOFT_SUPERSCALE, MF_GRAYED | MF_BYCOMMAND);
1126 EnableMenuItem(hMenu, MENU_SOFTFX_SOFT_SUPERSCALE75, MF_GRAYED | MF_BYCOMMAND);
1127 EnableMenuItem(hMenu, MENU_SOFTFX_SOFT_HQ2X, MF_GRAYED | MF_BYCOMMAND);
1128 EnableMenuItem(hMenu, MENU_SOFTFX_SOFT_HQ3X, MF_GRAYED | MF_BYCOMMAND);
1129 EnableMenuItem(hMenu, MENU_SOFTFX_SOFT_HQ4X, MF_GRAYED | MF_BYCOMMAND);
1130
1131 EnableMenuItem(hMenu, MENU_DX9_ALT_SOFT_2XPM_LQ, MF_GRAYED | MF_BYCOMMAND);
1132 EnableMenuItem(hMenu, MENU_DX9_ALT_SOFT_2XPM_HQ, MF_GRAYED | MF_BYCOMMAND);
1133 EnableMenuItem(hMenu, MENU_DX9_ALT_SOFT_EAGLE, MF_GRAYED | MF_BYCOMMAND);
1134 EnableMenuItem(hMenu, MENU_DX9_ALT_SOFT_SUPEREAGLE, MF_GRAYED | MF_BYCOMMAND);
1135 EnableMenuItem(hMenu, MENU_DX9_ALT_SOFT_2XSAI, MF_GRAYED | MF_BYCOMMAND);
1136 EnableMenuItem(hMenu, MENU_DX9_ALT_SOFT_SUPER2XSAI, MF_GRAYED | MF_BYCOMMAND);
1137 EnableMenuItem(hMenu, MENU_DX9_ALT_SOFT_SUPEREAGLE_VBA, MF_GRAYED | MF_BYCOMMAND);
1138 EnableMenuItem(hMenu, MENU_DX9_ALT_SOFT_2XSAI_VBA, MF_GRAYED | MF_BYCOMMAND);
1139 EnableMenuItem(hMenu, MENU_DX9_ALT_SOFT_SUPER2XSAI_VBA, MF_GRAYED | MF_BYCOMMAND);
1140 EnableMenuItem(hMenu, MENU_DX9_ALT_SOFT_SUPERSCALE, MF_GRAYED | MF_BYCOMMAND);
1141 EnableMenuItem(hMenu, MENU_DX9_ALT_SOFT_SUPERSCALE75, MF_GRAYED | MF_BYCOMMAND);
1142 EnableMenuItem(hMenu, MENU_DX9_ALT_SOFT_HQ2X, MF_GRAYED | MF_BYCOMMAND);
1143 EnableMenuItem(hMenu, MENU_DX9_ALT_SOFT_HQ3X, MF_GRAYED | MF_BYCOMMAND);
1144 EnableMenuItem(hMenu, MENU_DX9_ALT_SOFT_HQ4X, MF_GRAYED | MF_BYCOMMAND);
1145 #endif
1146
1147 #if defined BUILD_X64_EXE
1148 EnableMenuItem(hMenu, MENU_BLITTER_2, MF_GRAYED | MF_BYCOMMAND);
1149 #endif
1150 }
1151
MenuEnableItems()1152 void MenuEnableItems()
1153 {
1154 CreateArcaderesItem();
1155 CreatepresetResItems();
1156
1157 if (hBlitterMenu[nVidSelect]) {
1158 MENUITEMINFO myMenuItemInfo;
1159 myMenuItemInfo.cbSize = sizeof(MENUITEMINFO);
1160 myMenuItemInfo.fMask = MIIM_SUBMENU | MIIM_STATE;
1161 myMenuItemInfo.fState = MFS_ENABLED;
1162 myMenuItemInfo.hSubMenu = GetSubMenu(hBlitterMenu[nVidSelect], 0);
1163 SetMenuItemInfo(GetSubMenu(hMenu, 1), 1, TRUE, &myMenuItemInfo);
1164 } else {
1165 MENUITEMINFO myMenuItemInfo;
1166 myMenuItemInfo.cbSize = sizeof(MENUITEMINFO);
1167 myMenuItemInfo.fMask = MIIM_SUBMENU | MIIM_STATE;
1168 myMenuItemInfo.fState = MFS_GRAYED;
1169 myMenuItemInfo.hSubMenu = NULL;
1170 SetMenuItemInfo(GetSubMenu(hMenu, 1), 1, TRUE, &myMenuItemInfo);
1171 }
1172
1173 if (hBlitterMenu[nAudSelect]) {
1174 MENUITEMINFO myMenuItemInfo;
1175 myMenuItemInfo.cbSize = sizeof(MENUITEMINFO);
1176 myMenuItemInfo.fMask = MIIM_SUBMENU | MIIM_STATE;
1177 myMenuItemInfo.fState = MFS_ENABLED;
1178 myMenuItemInfo.hSubMenu = GetSubMenu(hAudioPluginMenu[nAudSelect], 0);
1179 SetMenuItemInfo(GetSubMenu(hMenu, 2), 1, TRUE, &myMenuItemInfo);
1180 } else {
1181 MENUITEMINFO myMenuItemInfo;
1182 myMenuItemInfo.cbSize = sizeof(MENUITEMINFO);
1183 myMenuItemInfo.fMask = MIIM_SUBMENU | MIIM_STATE;
1184 myMenuItemInfo.fState = MFS_GRAYED;
1185 myMenuItemInfo.hSubMenu = NULL;
1186 SetMenuItemInfo(GetSubMenu(hMenu, 2), 1, TRUE, &myMenuItemInfo);
1187 }
1188
1189 // Auto-size image when software blitter effects anre enabled
1190 if ((nVidSelect == 1 && (nVidBlitterOpt[1] & 0x07000000) == 0x07000000) || (nVidSelect == 2 && nVidBlitterOpt[2] & 0x0100)) {
1191 EnableMenuItem(GetSubMenu(hMenu, 1), 2, MF_GRAYED | MF_BYPOSITION);
1192 EnableMenuItem(GetSubMenu(hMenu, 1), 7, MF_GRAYED | MF_BYPOSITION);
1193 EnableMenuItem(GetSubMenu(hMenu, 1), 10, MF_GRAYED | MF_BYPOSITION);
1194 } else {
1195 EnableMenuItem(GetSubMenu(hMenu, 1), 2, MF_ENABLED | MF_BYPOSITION);
1196 EnableMenuItem(GetSubMenu(hMenu, 1), 7, MF_ENABLED | MF_BYPOSITION);
1197 EnableMenuItem(GetSubMenu(hMenu, 1), 10, MF_ENABLED | MF_BYPOSITION);
1198 }
1199 EnableMenuItem(GetSubMenu(hMenu, 1), 11, MF_ENABLED | MF_BYPOSITION);
1200
1201 #if 0
1202 if (nVidSelect == 3 && !(nVidBlitterOpt[3] & (1 << 9))) {
1203 EnableMenuItem(hMenu, MENU_DX9_CUBIC0, MF_GRAYED | MF_BYCOMMAND);
1204 EnableMenuItem(hMenu, MENU_DX9_CUBIC1, MF_GRAYED | MF_BYCOMMAND);
1205 EnableMenuItem(hMenu, MENU_DX9_CUBIC2, MF_GRAYED | MF_BYCOMMAND);
1206 EnableMenuItem(hMenu, MENU_DX9_CUBIC3, MF_GRAYED | MF_BYCOMMAND);
1207 EnableMenuItem(hMenu, MENU_DX9_CUBIC4, MF_GRAYED | MF_BYCOMMAND);
1208 } else {
1209 EnableMenuItem(hMenu, MENU_DX9_CUBIC0, MF_ENABLED | MF_BYCOMMAND);
1210 EnableMenuItem(hMenu, MENU_DX9_CUBIC1, MF_ENABLED | MF_BYCOMMAND);
1211 EnableMenuItem(hMenu, MENU_DX9_CUBIC2, MF_ENABLED | MF_BYCOMMAND);
1212 EnableMenuItem(hMenu, MENU_DX9_CUBIC3, MF_ENABLED | MF_BYCOMMAND);
1213 EnableMenuItem(hMenu, MENU_DX9_CUBIC4, MF_ENABLED | MF_BYCOMMAND);
1214 }
1215 #endif
1216
1217 if (nVidSelect == 3 && (!(nVidBlitterOpt[3] & (1 << 9)) || (nVidBlitterOpt[nVidSelect] & (7 << 28)) == (4 << 28))) {
1218 EnableMenuItem(hMenu, MENU_DX9_CUBIC_BSPLINE, MF_GRAYED | MF_BYCOMMAND);
1219 EnableMenuItem(hMenu, MENU_DX9_CUBIC_NOTCH, MF_GRAYED | MF_BYCOMMAND);
1220 EnableMenuItem(hMenu, MENU_DX9_CUBIC_OPTIMAL, MF_GRAYED | MF_BYCOMMAND);
1221 } else {
1222 EnableMenuItem(hMenu, MENU_DX9_CUBIC_BSPLINE, MF_ENABLED | MF_BYCOMMAND);
1223 EnableMenuItem(hMenu, MENU_DX9_CUBIC_NOTCH, MF_ENABLED | MF_BYCOMMAND);
1224 EnableMenuItem(hMenu, MENU_DX9_CUBIC_OPTIMAL, MF_ENABLED | MF_BYCOMMAND);
1225 }
1226 if (nVidSelect == 3) {
1227 EnableMenuItem(hMenu, MENU_24, MF_GRAYED | MF_BYCOMMAND);
1228 }
1229
1230 EnableMenuItem(hMenu, MENU_MODELESS, MF_ENABLED | MF_BYCOMMAND);
1231
1232 #if defined _MSC_VER && defined BUILD_X86_ASM
1233 EnableMenuItem(hBlitterMenu[1], MENU_ENHANCED_SOFT_HQ3XS_VBA, MF_ENABLED | MF_BYCOMMAND);
1234 EnableMenuItem(hBlitterMenu[2], MENU_SOFTFX_SOFT_HQ3XS_VBA, MF_ENABLED | MF_BYCOMMAND);
1235 EnableMenuItem(hBlitterMenu[4], MENU_DX9_ALT_SOFT_HQ3XS_VBA, MF_ENABLED | MF_BYCOMMAND);
1236 #endif
1237
1238 if (bDrvOkay) {
1239 EnableMenuItem(hMenu, MENU_QUIT, MF_ENABLED | MF_BYCOMMAND);
1240 EnableMenuItem(hMenu, MENU_INPUT, MF_ENABLED | MF_BYCOMMAND);
1241 EnableMenuItem(hMenu, MENU_FORCE60HZ, MF_GRAYED | MF_BYCOMMAND);
1242 EnableMenuItem(hMenu, MENU_DSOUND_NOSOUND, MF_GRAYED | MF_BYCOMMAND);
1243 EnableMenuItem(hMenu, MENU_DSOUND_11025, MF_GRAYED | MF_BYCOMMAND);
1244 EnableMenuItem(hMenu, MENU_DSOUND_22050, MF_GRAYED | MF_BYCOMMAND);
1245 EnableMenuItem(hMenu, MENU_DSOUND_44100, MF_GRAYED | MF_BYCOMMAND);
1246 EnableMenuItem(hMenu, MENU_DSOUND_48000, MF_GRAYED | MF_BYCOMMAND);
1247 EnableMenuItem(hMenu, MENU_XAUDIO_NOSOUND, MF_GRAYED | MF_BYCOMMAND);
1248 EnableMenuItem(hMenu, MENU_XAUDIO_11025, MF_GRAYED | MF_BYCOMMAND);
1249 EnableMenuItem(hMenu, MENU_XAUDIO_22050, MF_GRAYED | MF_BYCOMMAND);
1250 EnableMenuItem(hMenu, MENU_XAUDIO_44100, MF_GRAYED | MF_BYCOMMAND);
1251 EnableMenuItem(hMenu, MENU_XAUDIO_48000, MF_GRAYED | MF_BYCOMMAND);
1252 EnableMenuItem(hMenu, MENU_INTERPOLATE_FM_0, MF_GRAYED | MF_BYCOMMAND);
1253 EnableMenuItem(hMenu, MENU_INTERPOLATE_FM_3, MF_GRAYED | MF_BYCOMMAND);
1254 EnableMenuItem(hMenu, MENU_FRAMES, MF_GRAYED | MF_BYCOMMAND);
1255 EnableMenuItem(hMenu, MENU_SAVESNAP, MF_ENABLED | MF_BYCOMMAND);
1256 EnableMenuItem(hMenu, MENU_SAVEGAMEINPUTNOW, MF_ENABLED | MF_BYCOMMAND);
1257 #ifdef BUILD_A68K
1258 EnableMenuItem(hMenu, MENU_ASSEMBLYCORE, MF_GRAYED | MF_BYCOMMAND);
1259 #endif
1260 EnableMenuItem(hMenu, MENU_SAVEHISCORES, MF_GRAYED | MF_BYCOMMAND);
1261 EnableMenuItem(hMenu, MENU_USEBLEND, MF_GRAYED | MF_BYCOMMAND);
1262
1263 EnableMenuItem(hMenu, MENU_CDIMAGE, MF_GRAYED | MF_BYCOMMAND);
1264
1265 EnableMenuItem(hMenu, MENU_AUD_PLUGIN_1, MF_GRAYED | MF_BYCOMMAND);
1266 EnableMenuItem(hMenu, MENU_AUD_PLUGIN_2, MF_GRAYED | MF_BYCOMMAND);
1267
1268 BurnDIPInfo bdi;
1269 if (BurnDrvGetDIPInfo(&bdi, 0) == 0) {
1270 EnableMenuItem(hMenu, MENU_DIPSW, MF_ENABLED | MF_BYCOMMAND);
1271 } else {
1272 EnableMenuItem(hMenu, MENU_DIPSW, MF_GRAYED | MF_BYCOMMAND);
1273 }
1274
1275 EnableMenuItem(hMenu, MENU_INTERPOLATE_1, MF_ENABLED | MF_BYCOMMAND);
1276 EnableMenuItem(hMenu, MENU_INTERPOLATE_3, MF_ENABLED | MF_BYCOMMAND);
1277
1278 EnableMenuItem(hMenu, MENU_MEMCARD_CREATE, MF_GRAYED | MF_BYCOMMAND);
1279 EnableMenuItem(hMenu, MENU_MEMCARD_SELECT, MF_GRAYED | MF_BYCOMMAND);
1280 EnableMenuItem(hMenu, MENU_MEMCARD_INSERT, MF_GRAYED | MF_BYCOMMAND);
1281 EnableMenuItem(hMenu, MENU_MEMCARD_EJECT, MF_GRAYED | MF_BYCOMMAND);
1282
1283 if ((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) == HARDWARE_SNK_NEOGEO) {
1284 EnableMenuItem(hMenu, MENU_INTERPOLATE_1, MF_GRAYED | MF_BYCOMMAND);
1285 EnableMenuItem(hMenu, MENU_INTERPOLATE_3, MF_GRAYED | MF_BYCOMMAND);
1286
1287 if (!kNetGame) {
1288 EnableMenuItem(hMenu, MENU_MEMCARD_CREATE, MF_ENABLED | MF_BYCOMMAND);
1289 EnableMenuItem(hMenu, MENU_MEMCARD_SELECT, MF_ENABLED | MF_BYCOMMAND);
1290 if (nMemoryCardStatus & 1) {
1291 if (nMemoryCardStatus & 2) {
1292 EnableMenuItem(hMenu, MENU_MEMCARD_EJECT, MF_ENABLED | MF_BYCOMMAND);
1293 } else {
1294 EnableMenuItem(hMenu, MENU_MEMCARD_INSERT, MF_ENABLED | MF_BYCOMMAND);
1295 }
1296 }
1297 }
1298 }
1299
1300 if (kNetGame) {
1301 EnableMenuItem(hMenu, MENU_LOAD, MF_GRAYED | MF_BYCOMMAND);
1302 EnableMenuItem(hMenu, MENU_STARTNET, MF_GRAYED | MF_BYCOMMAND);
1303 EnableMenuItem(hMenu, MENU_EXIT, MF_GRAYED | MF_BYCOMMAND);
1304 EnableMenuItem(hMenu, MENU_SETCPUCLOCK, MF_GRAYED | MF_BYCOMMAND);
1305 EnableMenuItem(hMenu, MENU_RESETCPUCLOCK, MF_GRAYED | MF_BYCOMMAND);
1306 EnableMenuItem(hMenu, MENU_PAUSE, MF_GRAYED | MF_BYCOMMAND);
1307 EnableMenuItem(hMenu, MENU_ENABLECHEAT, MF_GRAYED | MF_BYCOMMAND);
1308 EnableMenuItem(hMenu, MENU_SNAPFACT, MF_GRAYED | MF_BYCOMMAND);
1309 } else {
1310 EnableMenuItem(hMenu, MENU_LOAD, MF_ENABLED | MF_BYCOMMAND);
1311 EnableMenuItem(hMenu, MENU_STARTNET, MF_ENABLED | MF_BYCOMMAND);
1312 EnableMenuItem(hMenu, MENU_EXIT, MF_ENABLED | MF_BYCOMMAND);
1313 EnableMenuItem(hMenu, MENU_SETCPUCLOCK, MF_ENABLED | MF_BYCOMMAND);
1314 EnableMenuItem(hMenu, MENU_RESETCPUCLOCK, (nBurnCPUSpeedAdjust != 0x0100 ? MF_ENABLED : MF_GRAYED) | MF_BYCOMMAND);
1315 EnableMenuItem(hMenu, MENU_PAUSE, MF_ENABLED | MF_BYCOMMAND);
1316 if (pCheatInfo) {
1317 EnableMenuItem(hMenu, MENU_ENABLECHEAT, MF_ENABLED | MF_BYCOMMAND);
1318 }
1319
1320 if (CheatSearchInit()) {
1321 EnableMenuItem(hMenu, MENU_CHEATSEARCH_START, MF_ENABLED | MF_BYCOMMAND);
1322 }
1323
1324 #if defined (FBA_DEBUG)
1325 extern UINT8 DebugCPU_SekInitted;
1326 if (DebugCPU_SekInitted) {
1327 EnableMenuItem(hMenu, MENU_DEBUG, MF_ENABLED | MF_BYCOMMAND);
1328 } else {
1329 EnableMenuItem(hMenu, MENU_DEBUG, MF_GRAYED | MF_BYCOMMAND);
1330 }
1331 #else
1332 EnableMenuItem(hMenu, MENU_DEBUG, MF_GRAYED | MF_BYCOMMAND);
1333 #endif
1334
1335 if (BurnDrvGetPaletteEntries()) EnableMenuItem(hMenu, MENU_PALETTEVIEWER, MF_ENABLED | MF_BYCOMMAND);
1336 EnableMenuItem(hMenu, MENU_SNAPFACT, MF_ENABLED | MF_BYCOMMAND);
1337 }
1338
1339 if (WaveLog) {
1340 EnableMenuItem(hMenu, MENU_WLOGEND, MF_ENABLED | MF_BYCOMMAND);
1341 EnableMenuItem(hMenu, MENU_WLOGSTART, MF_GRAYED | MF_BYCOMMAND);
1342 } else {
1343 EnableMenuItem(hMenu, MENU_WLOGEND, MF_GRAYED | MF_BYCOMMAND);
1344 EnableMenuItem(hMenu, MENU_WLOGSTART, MF_ENABLED | MF_BYCOMMAND);
1345 }
1346
1347 { // Enabled by default / selectively disabled below (nReplayStatus & kNetGame blocks)
1348 EnableMenuItem(hMenu, MENU_STARTRECORD, MF_ENABLED | MF_BYCOMMAND);
1349 EnableMenuItem(hMenu, MENU_STARTREPLAY, MF_ENABLED | MF_BYCOMMAND);
1350 EnableMenuItem(hMenu, MENU_STATE_SAVE_SLOT, MF_ENABLED | MF_BYCOMMAND);
1351 EnableMenuItem(hMenu, MENU_STATE_SAVE_DIALOG, MF_ENABLED | MF_BYCOMMAND);
1352 EnableMenuItem(hMenu, MENU_STATE_LOAD_SLOT, MF_ENABLED | MF_BYCOMMAND);
1353 EnableMenuItem(hMenu, MENU_STATE_LOAD_DIALOG, MF_ENABLED | MF_BYCOMMAND);
1354 }
1355
1356 if (nReplayStatus) {
1357 EnableMenuItem(hMenu, MENU_STOPREPLAY, MF_ENABLED | MF_BYCOMMAND);
1358 EnableMenuItem(hMenu, MENU_STARTRECORD, MF_GRAYED | MF_BYCOMMAND);
1359 EnableMenuItem(hMenu, MENU_STARTREPLAY, MF_GRAYED | MF_BYCOMMAND);
1360 } else {
1361 EnableMenuItem(hMenu, MENU_STOPREPLAY, MF_GRAYED | MF_BYCOMMAND);
1362 }
1363
1364 if (kNetGame) {
1365 EnableMenuItem(hMenu, MENU_STARTRECORD, MF_ENABLED | MF_BYCOMMAND);
1366 EnableMenuItem(hMenu, MENU_STARTREPLAY, MF_GRAYED | MF_BYCOMMAND);
1367 EnableMenuItem(hMenu, MENU_STATE_SAVE_SLOT, MF_ENABLED | MF_BYCOMMAND);
1368 EnableMenuItem(hMenu, MENU_STATE_SAVE_DIALOG, MF_ENABLED | MF_BYCOMMAND);
1369 EnableMenuItem(hMenu, MENU_STATE_LOAD_SLOT, MF_GRAYED | MF_BYCOMMAND);
1370 EnableMenuItem(hMenu, MENU_STATE_LOAD_DIALOG, MF_GRAYED | MF_BYCOMMAND);
1371 }
1372
1373 #ifdef INCLUDE_AVI_RECORDING
1374 if (nAviStatus) {
1375 EnableMenuItem(hMenu, MENU_AVISTART, MF_GRAYED | MF_BYCOMMAND);
1376 EnableMenuItem(hMenu, MENU_AVISTOP, MF_ENABLED | MF_BYCOMMAND);
1377 EnableMenuItem(hMenu, MENU_AVI1X, MF_GRAYED | MF_BYCOMMAND);
1378 EnableMenuItem(hMenu, MENU_AVI2X, MF_GRAYED | MF_BYCOMMAND);
1379 EnableMenuItem(hMenu, MENU_AVI3X, MF_GRAYED | MF_BYCOMMAND);
1380 } else {
1381 EnableMenuItem(hMenu, MENU_AVISTART, MF_ENABLED | MF_BYCOMMAND);
1382 EnableMenuItem(hMenu, MENU_AVISTOP, MF_GRAYED | MF_BYCOMMAND);
1383 EnableMenuItem(hMenu, MENU_AVI1X, MF_ENABLED | MF_BYCOMMAND);
1384 EnableMenuItem(hMenu, MENU_AVI2X, MF_ENABLED | MF_BYCOMMAND);
1385 EnableMenuItem(hMenu, MENU_AVI3X, MF_ENABLED | MF_BYCOMMAND);
1386 }
1387 #endif
1388 } else {
1389 bAltPause = 0;
1390
1391 EnableMenuItem(hMenu, MENU_LOAD, MF_ENABLED | MF_BYCOMMAND);
1392 EnableMenuItem(hMenu, MENU_MEMCARD_CREATE, MF_GRAYED | MF_BYCOMMAND);
1393 EnableMenuItem(hMenu, MENU_MEMCARD_SELECT, MF_GRAYED | MF_BYCOMMAND);
1394 EnableMenuItem(hMenu, MENU_MEMCARD_INSERT, MF_GRAYED | MF_BYCOMMAND);
1395 EnableMenuItem(hMenu, MENU_MEMCARD_EJECT, MF_GRAYED | MF_BYCOMMAND);
1396 EnableMenuItem(hMenu, MENU_STARTNET, MF_ENABLED | MF_BYCOMMAND);
1397 EnableMenuItem(hMenu, MENU_STARTREPLAY, MF_ENABLED | MF_BYCOMMAND);
1398 EnableMenuItem(hMenu, MENU_STARTRECORD, MF_GRAYED | MF_BYCOMMAND);
1399 EnableMenuItem(hMenu, MENU_STOPREPLAY, MF_GRAYED | MF_BYCOMMAND);
1400 EnableMenuItem(hMenu, MENU_QUIT, MF_GRAYED | MF_BYCOMMAND);
1401 EnableMenuItem(hMenu, MENU_EXIT, MF_ENABLED | MF_BYCOMMAND);
1402 EnableMenuItem(hMenu, MENU_INPUT, MF_GRAYED | MF_BYCOMMAND);
1403 EnableMenuItem(hMenu, MENU_SETCPUCLOCK, MF_GRAYED | MF_BYCOMMAND);
1404 EnableMenuItem(hMenu, MENU_RESETCPUCLOCK, MF_GRAYED | MF_BYCOMMAND);
1405 EnableMenuItem(hMenu, MENU_PAUSE, MF_GRAYED | MF_BYCOMMAND);
1406 EnableMenuItem(hMenu, MENU_FORCE60HZ, MF_ENABLED | MF_BYCOMMAND);
1407 EnableMenuItem(hMenu, MENU_DIPSW, MF_GRAYED | MF_BYCOMMAND);
1408 EnableMenuItem(hMenu, MENU_ENABLECHEAT, MF_GRAYED | MF_BYCOMMAND);
1409 EnableMenuItem(hMenu, MENU_DEBUG, MF_GRAYED | MF_BYCOMMAND);
1410 #ifdef BUILD_A68K
1411 EnableMenuItem(hMenu, MENU_ASSEMBLYCORE, MF_ENABLED | MF_BYCOMMAND);
1412 #endif
1413 EnableMenuItem(hMenu, MENU_SAVEHISCORES, MF_ENABLED | MF_BYCOMMAND);
1414 EnableMenuItem(hMenu, MENU_USEBLEND, MF_ENABLED | MF_BYCOMMAND);
1415 EnableMenuItem(hMenu, MENU_STATE_LOAD_SLOT, MF_GRAYED | MF_BYCOMMAND);
1416 EnableMenuItem(hMenu, MENU_STATE_LOAD_DIALOG, MF_ENABLED | MF_BYCOMMAND);
1417 EnableMenuItem(hMenu, MENU_STATE_SAVE_SLOT, MF_GRAYED | MF_BYCOMMAND);
1418 EnableMenuItem(hMenu, MENU_STATE_SAVE_DIALOG, MF_GRAYED | MF_BYCOMMAND);
1419 EnableMenuItem(hMenu, MENU_FRAMES, MF_ENABLED | MF_BYCOMMAND);
1420 EnableMenuItem(hMenu, MENU_DSOUND_NOSOUND, MF_ENABLED | MF_BYCOMMAND);
1421 EnableMenuItem(hMenu, MENU_DSOUND_11025, MF_ENABLED | MF_BYCOMMAND);
1422 EnableMenuItem(hMenu, MENU_DSOUND_22050, MF_ENABLED | MF_BYCOMMAND);
1423 EnableMenuItem(hMenu, MENU_DSOUND_44100, MF_ENABLED | MF_BYCOMMAND);
1424 EnableMenuItem(hMenu, MENU_DSOUND_48000, MF_ENABLED | MF_BYCOMMAND);
1425 EnableMenuItem(hMenu, MENU_XAUDIO_NOSOUND, MF_ENABLED | MF_BYCOMMAND);
1426 EnableMenuItem(hMenu, MENU_XAUDIO_11025, MF_ENABLED | MF_BYCOMMAND);
1427 EnableMenuItem(hMenu, MENU_XAUDIO_22050, MF_ENABLED | MF_BYCOMMAND);
1428 EnableMenuItem(hMenu, MENU_XAUDIO_44100, MF_ENABLED | MF_BYCOMMAND);
1429 EnableMenuItem(hMenu, MENU_XAUDIO_48000, MF_ENABLED | MF_BYCOMMAND);
1430 // EnableMenuItem(hMenu, MENU_INTERPOLATE_1, MF_ENABLED | MF_BYCOMMAND);
1431 // EnableMenuItem(hMenu, MENU_INTERPOLATE_3, MF_ENABLED | MF_BYCOMMAND);
1432 EnableMenuItem(hMenu, MENU_WLOGSTART, MF_GRAYED | MF_BYCOMMAND);
1433 EnableMenuItem(hMenu, MENU_INTERPOLATE_FM_0, MF_ENABLED | MF_BYCOMMAND);
1434 EnableMenuItem(hMenu, MENU_INTERPOLATE_FM_3, MF_ENABLED | MF_BYCOMMAND);
1435 EnableMenuItem(hMenu, MENU_WLOGEND, MF_GRAYED | MF_BYCOMMAND);
1436 EnableMenuItem(hMenu, MENU_SAVESNAP, MF_GRAYED | MF_BYCOMMAND);
1437 EnableMenuItem(hMenu, MENU_SNAPFACT, MF_GRAYED | MF_BYCOMMAND);
1438 EnableMenuItem(hMenu, MENU_PALETTEVIEWER, MF_GRAYED | MF_BYCOMMAND);
1439 EnableMenuItem(hMenu, MENU_SAVEGAMEINPUTNOW, MF_GRAYED | MF_BYCOMMAND);
1440 #ifdef INCLUDE_AVI_RECORDING
1441 EnableMenuItem(hMenu, MENU_AVISTART, MF_GRAYED | MF_BYCOMMAND);
1442 EnableMenuItem(hMenu, MENU_AVISTOP, MF_GRAYED | MF_BYCOMMAND);
1443 #endif
1444 EnableMenuItem(hMenu, MENU_CDIMAGE, MF_ENABLED | MF_BYCOMMAND);
1445
1446 EnableMenuItem(hMenu, MENU_AUD_PLUGIN_1, MF_ENABLED | MF_BYCOMMAND);
1447 EnableMenuItem(hMenu, MENU_AUD_PLUGIN_2, MF_ENABLED | MF_BYCOMMAND);
1448 }
1449 }
1450