remove stuff we won't need
[pcsx_rearmed.git] / win32 / gui / WndMain.c
diff --git a/win32/gui/WndMain.c b/win32/gui/WndMain.c
deleted file mode 100644 (file)
index f167c0e..0000000
+++ /dev/null
@@ -1,1802 +0,0 @@
-/*  Pcsx - Pc Psx Emulator\r
- *  Copyright (C) 1999-2003  Pcsx Team\r
- *\r
- *  This program is free software; you can redistribute it and/or modify\r
- *  it under the terms of the GNU General Public License as published by\r
- *  the Free Software Foundation; either version 2 of the License, or\r
- *  (at your option) any later version.\r
- *\r
- *  This program is distributed in the hope that it will be useful,\r
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- *  GNU General Public License for more details.\r
- *\r
- *  You should have received a copy of the GNU General Public License\r
- *  along with this program; if not, write to the Free Software\r
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307 USA\r
- */\r
-\r
-#include <windows.h>\r
-#include <windowsx.h>\r
-#include <commctrl.h>\r
-#include <time.h>\r
-#include <stdio.h>\r
-#include <string.h>\r
-#include <stdarg.h>\r
-\r
-#include "resource.h"\r
-#include "AboutDlg.h"\r
-\r
-#include "psxcommon.h"\r
-#include "plugin.h"\r
-#include "debug.h"\r
-#include "Win32.h"\r
-#include "sio.h"\r
-#include "misc.h"\r
-#include "cheat.h"\r
-\r
-#ifdef __MINGW32__\r
-#ifndef LVM_GETSELECTIONMARK\r
-#define LVM_GETSELECTIONMARK (LVM_FIRST+66)\r
-#endif\r
-#ifndef ListView_GetSelectionMark\r
-#define ListView_GetSelectionMark(w) (INT)SNDMSG((w),LVM_GETSELECTIONMARK,0,0)\r
-#endif\r
-#endif\r
-\r
-int AccBreak = 0;\r
-int ConfPlug = 0;\r
-int StatesC = 0;\r
-int CancelQuit = 0;\r
-char cfgfile[256];\r
-int Running = 0;\r
-char PcsxDir[256];\r
-\r
-static HDC          hDC;\r
-static HDC          hdcmem;\r
-static HBITMAP      hBm;\r
-static BITMAP       bm;\r
-\r
-#ifdef ENABLE_NLS\r
-\r
-unsigned int langsMax;\r
-\r
-typedef struct {\r
-       char lang[256];\r
-} _langs;\r
-_langs *langs = NULL;\r
-\r
-typedef struct {\r
-       char                    id[8];\r
-       char                    name[64];\r
-       LANGID                  langid;\r
-} LangDef;\r
-\r
-LangDef sLangs[] = {\r
-       { "ar",         N_("Arabic"),                           0x0401 },\r
-       { "ca",         N_("Catalan"),                          0x0403 },\r
-       { "de",         N_("German"),                           0x0407 },\r
-       { "el",         N_("Greek"),                            0x0408 },\r
-       { "en",         N_("English"),                          0x0409 },\r
-       { "es",         N_("Spanish"),                          0x040a },\r
-       { "fr_FR",      N_("French"),                           0x040c },\r
-       { "it",         N_("Italian"),                          0x0410 },\r
-       { "pt",         N_("Portuguese"),                       0x0816 },\r
-       { "pt_BR",      N_("Portuguese (Brazilian)"),           0x0416 },\r
-       { "ro",         N_("Romanian"),                         0x0418 },\r
-       { "ru_RU",      N_("Russian"),                          0x0419 },\r
-       { "zh_CN",      N_("Simplified Chinese"),       0x0804 },\r
-       { "zh_TW",      N_("Traditional Chinese"),      0x0404 },\r
-       { "ja",         N_("Japanese"),                         0x0411 },\r
-       { "ko",         N_("Korean"),                           0x0412 },\r
-       { "", "", 0xFFFF },\r
-};\r
-\r
-char *ParseLang(char *id) {\r
-       int i=0;\r
-\r
-       while (sLangs[i].id[0] != '\0') {\r
-               if (!strcmp(id, sLangs[i].id))\r
-                       return _(sLangs[i].name);\r
-               i++;\r
-       }\r
-\r
-       return id;\r
-}\r
-\r
-static void SetDefaultLang(void) {\r
-       LANGID langid;\r
-       int i;\r
-\r
-       langid = GetSystemDefaultLangID();\r
-\r
-       i = 0;\r
-       while (sLangs[i].id[0] != '\0') {\r
-               if (langid == sLangs[i].langid) {\r
-                       strcpy(Config.Lang, sLangs[i].id);\r
-                       return;\r
-               }\r
-               i++;\r
-       }\r
-\r
-       strcpy(Config.Lang, "English");\r
-}\r
-\r
-#endif\r
-\r
-void strcatz(char *dst, char *src) {\r
-       int len = strlen(dst) + 1;\r
-       strcpy(dst + len, src);\r
-}\r
-\r
-int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {\r
-       strcpy(cfgfile, "Software\\Pcsx");\r
-\r
-       gApp.hInstance = hInstance;\r
-\r
-#ifdef ENABLE_NLS\r
-       bindtextdomain(PACKAGE, "Langs\\");\r
-       textdomain(PACKAGE);\r
-#endif\r
-\r
-       Running = 0;\r
-\r
-       GetCurrentDirectory(256, PcsxDir);\r
-\r
-       memset(&Config, 0, sizeof(PcsxConfig));\r
-       strcpy(Config.Net, "Disabled");\r
-       if (LoadConfig() == -1) {\r
-               Config.PsxAuto = 1;\r
-               strcpy(Config.PluginsDir, "Plugins\\");\r
-               strcpy(Config.BiosDir,    "Bios\\");\r
-\r
-               strcpy(Config.Mcd1, "memcards\\Mcd001.mcr");\r
-               strcpy(Config.Mcd2, "memcards\\Mcd002.mcr");\r
-\r
-               ConfPlug = 1;\r
-\r
-#ifdef ENABLE_NLS\r
-               {\r
-                       char text[256];\r
-                       SetDefaultLang();\r
-                       sprintf(text, "LANGUAGE=%s", Config.Lang);\r
-                       gettext_putenv(text);\r
-               }\r
-#endif\r
-\r
-               ConfigurePlugins(gApp.hWnd);\r
-\r
-               if (LoadConfig() == -1) {\r
-                       return 0;\r
-               }\r
-       }\r
-\r
-       strcpy(Config.PatchesDir, "Patches\\");\r
-\r
-#ifdef ENABLE_NLS\r
-       if (Config.Lang[0] == 0) {\r
-               SetDefaultLang();\r
-               SaveConfig();\r
-               LoadConfig();\r
-       }\r
-#endif\r
-\r
-       if (SysInit() == -1) return 1;\r
-\r
-       CreateMainWindow(nCmdShow);\r
-\r
-       RunGui();\r
-\r
-       return 0;\r
-}\r
-\r
-void RunGui() {\r
-       MSG msg;\r
-\r
-       for (;;) {\r
-               if(PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE)) {\r
-                       TranslateMessage(&msg);\r
-                       DispatchMessage(&msg);\r
-               }\r
-       }\r
-}\r
-\r
-void RestoreWindow() {\r
-       AccBreak = 1;\r
-       DestroyWindow(gApp.hWnd);\r
-       CreateMainWindow(SW_SHOWNORMAL);\r
-       ShowCursor(TRUE);\r
-       SetCursor(LoadCursor(gApp.hInstance, IDC_ARROW));\r
-       ShowCursor(TRUE);\r
-}\r
-\r
-int Slots[5] = { -1, -1, -1, -1, -1 };\r
-\r
-void ResetMenuSlots() {\r
-       int i;\r
-\r
-       for (i = 0; i < 5; i++) {\r
-               if (Slots[i] == -1)\r
-                       EnableMenuItem(GetSubMenu(gApp.hMenu, 0), ID_FILE_STATES_LOAD_SLOT1+i, MF_GRAYED);\r
-               else \r
-                       EnableMenuItem(GetSubMenu(gApp.hMenu, 0), ID_FILE_STATES_LOAD_SLOT1+i, MF_ENABLED);\r
-       }\r
-}\r
-\r
-void UpdateMenuSlots() {\r
-       char str[256];\r
-       int i;\r
-\r
-       for (i = 0; i < 5; i++) {\r
-               GetStateFilename(str, i);\r
-               Slots[i] = CheckState(str);\r
-       }\r
-}\r
-\r
-void OpenConsole() {\r
-       if (hConsole) return;\r
-       AllocConsole();\r
-       SetConsoleTitle("Psx Output");\r
-       hConsole = GetStdHandle(STD_OUTPUT_HANDLE);\r
-}\r
-\r
-void CloseConsole() {\r
-       FreeConsole();\r
-       hConsole = NULL;\r
-}\r
-\r
-void States_Load(int num) {\r
-       char Text[256];\r
-       int ret;\r
-\r
-       SetMenu(gApp.hWnd, NULL);\r
-       OpenPlugins(gApp.hWnd);\r
-\r
-       GetStateFilename(Text, num);\r
-\r
-       ret = LoadState(Text);\r
-       if (ret == 0)\r
-                sprintf(Text, _("*PCSX*: Loaded State %d"), num+1);\r
-       else sprintf(Text, _("*PCSX*: Error Loading State %d"), num+1);\r
-       GPU_displayText(Text);\r
-\r
-       Running = 1;\r
-       CheatSearchBackupMemory();\r
-       psxCpu->Execute();\r
-}\r
-\r
-void States_Save(int num) {\r
-       char Text[256];\r
-       int ret;\r
-\r
-       SetMenu(gApp.hWnd, NULL);\r
-       OpenPlugins(gApp.hWnd);\r
-\r
-       GPU_updateLace();\r
-\r
-       GetStateFilename(Text, num);\r
-       GPU_freeze(2, (GPUFreeze_t *)&num);\r
-       ret = SaveState(Text);\r
-       if (ret == 0)\r
-                sprintf(Text, _("*PCSX*: Saved State %d"), num+1);\r
-       else sprintf(Text, _("*PCSX*: Error Saving State %d"), num+1);\r
-       GPU_displayText(Text);\r
-\r
-       Running = 1;\r
-       CheatSearchBackupMemory();\r
-       psxCpu->Execute();\r
-}\r
-\r
-void OnStates_LoadOther() {\r
-       OPENFILENAME ofn;\r
-       char szFileName[MAXPATHLEN];\r
-       char szFileTitle[MAXPATHLEN];\r
-       char szFilter[256];\r
-\r
-       memset(&szFileName,  0, sizeof(szFileName));\r
-       memset(&szFileTitle, 0, sizeof(szFileTitle));\r
-       memset(&szFilter,    0, sizeof(szFilter));\r
-\r
-       strcpy(szFilter, _("PCSX State Format"));\r
-       strcatz(szFilter, "*.*");\r
-\r
-       ofn.lStructSize                 = sizeof(OPENFILENAME);\r
-       ofn.hwndOwner                   = gApp.hWnd;\r
-       ofn.lpstrFilter                 = szFilter;\r
-       ofn.lpstrCustomFilter           = NULL;\r
-       ofn.nMaxCustFilter              = 0;\r
-       ofn.nFilterIndex                = 1;\r
-       ofn.lpstrFile                   = szFileName;\r
-       ofn.nMaxFile                    = MAXPATHLEN;\r
-       ofn.lpstrInitialDir             = NULL;\r
-       ofn.lpstrFileTitle              = szFileTitle;\r
-       ofn.nMaxFileTitle               = MAXPATHLEN;\r
-       ofn.lpstrTitle                  = NULL;\r
-       ofn.lpstrDefExt                 = NULL;\r
-       ofn.Flags                       = OFN_HIDEREADONLY | OFN_NOCHANGEDIR;\r
-\r
-       if (GetOpenFileName ((LPOPENFILENAME)&ofn)) {\r
-               char Text[256];\r
-               int ret;\r
-\r
-               SetMenu(gApp.hWnd, NULL);\r
-               OpenPlugins(gApp.hWnd);\r
-\r
-               ret = LoadState(szFileName);\r
-               if (ret == 0)\r
-                        sprintf(Text, _("*PCSX*: Loaded State %s"), szFileName);\r
-               else sprintf(Text, _("*PCSX*: Error Loading State %s"), szFileName);\r
-               GPU_displayText(Text);\r
-\r
-               Running = 1;\r
-               psxCpu->Execute();\r
-       }\r
-} \r
-\r
-void OnStates_Save1() { States_Save(0); } \r
-void OnStates_Save2() { States_Save(1); } \r
-void OnStates_Save3() { States_Save(2); } \r
-void OnStates_Save4() { States_Save(3); } \r
-void OnStates_Save5() { States_Save(4); } \r
-\r
-void OnStates_SaveOther() {\r
-       OPENFILENAME ofn;\r
-       char szFileName[MAXPATHLEN];\r
-       char szFileTitle[MAXPATHLEN];\r
-       char szFilter[256];\r
-\r
-       memset(&szFileName,  0, sizeof(szFileName));\r
-       memset(&szFileTitle, 0, sizeof(szFileTitle));\r
-       memset(&szFilter,    0, sizeof(szFilter));\r
-\r
-       strcpy(szFilter, _("PCSX State Format"));\r
-       strcatz(szFilter, "*.*");\r
-\r
-       ofn.lStructSize                 = sizeof(OPENFILENAME);\r
-       ofn.hwndOwner                   = gApp.hWnd;\r
-       ofn.lpstrFilter                 = szFilter;\r
-       ofn.lpstrCustomFilter   = NULL;\r
-       ofn.nMaxCustFilter              = 0;\r
-       ofn.nFilterIndex                = 1;\r
-       ofn.lpstrFile                   = szFileName;\r
-       ofn.nMaxFile                    = MAXPATHLEN;\r
-       ofn.lpstrInitialDir             = NULL;\r
-       ofn.lpstrFileTitle              = szFileTitle;\r
-       ofn.nMaxFileTitle               = MAXPATHLEN;\r
-       ofn.lpstrTitle                  = NULL;\r
-       ofn.lpstrDefExt                 = NULL;\r
-       ofn.Flags                               = OFN_HIDEREADONLY | OFN_NOCHANGEDIR;\r
-\r
-       if (GetOpenFileName ((LPOPENFILENAME)&ofn)) {\r
-               char Text[256];\r
-               int ret;\r
-\r
-               SetMenu(gApp.hWnd, NULL);\r
-               OpenPlugins(gApp.hWnd);\r
-\r
-               ret = SaveState(szFileName);\r
-               if (ret == 0)\r
-                        sprintf(Text, _("*PCSX*: Saved State %s"), szFileName);\r
-               else sprintf(Text, _("*PCSX*: Error Saving State %s"), szFileName);\r
-               GPU_displayText(Text);\r
-\r
-               Running = 1;\r
-               psxCpu->Execute();\r
-       }\r
-} \r
-\r
-LRESULT WINAPI MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {\r
-       char File[256];\r
-       PAINTSTRUCT ps;\r
-\r
-       switch (msg) {\r
-               case WM_CREATE:\r
-                       hBm = LoadBitmap(gApp.hInstance, MAKEINTRESOURCE(MAIN_LOGO));\r
-                       GetObject(hBm, sizeof(BITMAP), (LPVOID)&bm);\r
-                       hDC = GetDC(hWnd);\r
-                       hdcmem = CreateCompatibleDC(hDC);\r
-                       ReleaseDC(hWnd, hDC);\r
-                       break;\r
-\r
-               case WM_PAINT:\r
-                       hDC = BeginPaint(hWnd, &ps);\r
-                       SelectObject(hdcmem, hBm);\r
-                       if (!Running) BitBlt(hDC, 0, 0, bm.bmWidth, bm.bmHeight, hdcmem, 0, 0, SRCCOPY);\r
-                       EndPaint(hWnd, &ps);\r
-                       break;\r
-\r
-               case WM_COMMAND:\r
-                       switch (LOWORD(wParam)) {\r
-                               case ID_FILE_EXIT:\r
-                                       SysClose();\r
-                                       PostQuitMessage(0);\r
-                                       exit(0);\r
-                                       return TRUE;\r
-\r
-                               case ID_FILE_RUN_CD:\r
-                                       SetIsoFile(NULL);\r
-                                       SetMenu(hWnd, NULL);\r
-                                       LoadPlugins();\r
-                                       if (OpenPlugins(hWnd) == -1) {\r
-                                               ClosePlugins();\r
-                                               RestoreWindow();\r
-                                               return TRUE;\r
-                                       }\r
-                                       SysReset();\r
-                                       if (CheckCdrom() == -1) {\r
-                                               ClosePlugins();\r
-                                               RestoreWindow();\r
-                                               SysMessage(_("The CD does not appear to be a valid Playstation CD"));\r
-                                               return TRUE;\r
-                                       }\r
-                                       if (LoadCdrom() == -1) {\r
-                                               ClosePlugins();\r
-                                               RestoreWindow();\r
-                                               SysMessage(_("Could not load CD-ROM!"));\r
-                                               return TRUE;\r
-                                       }\r
-                                       ShowCursor(FALSE);\r
-                                       Running = 1;\r
-                                       psxCpu->Execute();\r
-                                       return TRUE;\r
-\r
-                               case ID_FILE_RUNBIOS:\r
-                                       if (strcmp(Config.Bios, "HLE") == 0) {\r
-                                               SysMessage(_("Running BIOS is not supported with Internal HLE Bios."));\r
-                                               return TRUE;\r
-                                       }\r
-                                       SetIsoFile(NULL);\r
-                                       SetMenu(hWnd, NULL);\r
-                                       LoadPlugins();\r
-                                       if (OpenPlugins(hWnd) == -1) {\r
-                                               ClosePlugins();\r
-                                               RestoreWindow();\r
-                                               return TRUE;\r
-                                       }\r
-                                       ShowCursor(FALSE);\r
-                                       SysReset();\r
-                                       CdromId[0] = '\0';\r
-                                       CdromLabel[0] = '\0';\r
-                                       Running = 1;\r
-                                       psxCpu->Execute();\r
-                                       return TRUE;\r
-\r
-                               case ID_FILE_RUN_ISO:\r
-                                       if (!Open_Iso_Proc(File)) return TRUE;\r
-                                       SetIsoFile(File);\r
-                                       SetMenu(hWnd, NULL);\r
-                                       LoadPlugins();\r
-                                       if (OpenPlugins(hWnd) == -1) {\r
-                                               ClosePlugins();\r
-                                               RestoreWindow();\r
-                                               return TRUE;\r
-                                       }\r
-                                       SysReset();\r
-                                       if (CheckCdrom() == -1) {\r
-                                               ClosePlugins();\r
-                                               RestoreWindow();\r
-                                               SysMessage(_("The CD does not appear to be a valid Playstation CD"));\r
-                                               return TRUE;\r
-                                       }\r
-                                       if (LoadCdrom() == -1) {\r
-                                               ClosePlugins();\r
-                                               RestoreWindow();\r
-                                               SysMessage(_("Could not load CD-ROM!"));\r
-                                               return TRUE;\r
-                                       }\r
-                                       ShowCursor(FALSE);\r
-                                       Running = 1;\r
-                                       psxCpu->Execute();\r
-                                       return TRUE;\r
-\r
-                               case ID_FILE_RUN_EXE:\r
-                                       if (!Open_File_Proc(File)) return TRUE;\r
-                                       SetIsoFile(NULL);\r
-                                       SetMenu(hWnd, NULL);\r
-                                       LoadPlugins();\r
-                                       if (OpenPlugins(hWnd) == -1) {\r
-                                               ClosePlugins();\r
-                                               RestoreWindow();\r
-                                               return TRUE;\r
-                                       }\r
-                                       SysReset();\r
-                                       CheckCdrom();\r
-                                       Load(File);\r
-                                       Running = 1;\r
-                                       psxCpu->Execute();\r
-                                       return TRUE;\r
-\r
-                               case ID_FILE_STATES_LOAD_SLOT1: States_Load(0); return TRUE;\r
-                               case ID_FILE_STATES_LOAD_SLOT2: States_Load(1); return TRUE;\r
-                               case ID_FILE_STATES_LOAD_SLOT3: States_Load(2); return TRUE;\r
-                               case ID_FILE_STATES_LOAD_SLOT4: States_Load(3); return TRUE;\r
-                               case ID_FILE_STATES_LOAD_SLOT5: States_Load(4); return TRUE;\r
-                               case ID_FILE_STATES_LOAD_OTHER: OnStates_LoadOther(); return TRUE;\r
-\r
-                               case ID_FILE_STATES_SAVE_SLOT1: States_Save(0); return TRUE;\r
-                               case ID_FILE_STATES_SAVE_SLOT2: States_Save(1); return TRUE;\r
-                               case ID_FILE_STATES_SAVE_SLOT3: States_Save(2); return TRUE;\r
-                               case ID_FILE_STATES_SAVE_SLOT4: States_Save(3); return TRUE;\r
-                               case ID_FILE_STATES_SAVE_SLOT5: States_Save(4); return TRUE;\r
-                               case ID_FILE_STATES_SAVE_OTHER: OnStates_SaveOther(); return TRUE;\r
-\r
-                               case ID_EMULATOR_RUN:\r
-                                       SetMenu(hWnd, NULL);\r
-                                       OpenPlugins(hWnd);\r
-                                       ShowCursor(FALSE);\r
-                                       Running = 1;\r
-                                       CheatSearchBackupMemory();\r
-                                       psxCpu->Execute();\r
-                                       return TRUE;\r
-\r
-                               case ID_EMULATOR_RESET:\r
-                                       SetMenu(hWnd, NULL);\r
-                                       OpenPlugins(hWnd);\r
-                                       SysReset();\r
-                                       CheckCdrom();\r
-                                       LoadCdrom();\r
-                                       ShowCursor(FALSE);\r
-                                       Running = 1;\r
-                                       psxCpu->Execute();\r
-                                       return TRUE;\r
-\r
-                               case ID_EMULATOR_SWITCH_ISO:\r
-                                       if (!Open_Iso_Proc(File)) return TRUE;\r
-                                       SetIsoFile(File);\r
-                                       SetMenu(hWnd, NULL);\r
-                                       if (OpenPlugins(hWnd) == -1) {\r
-                                               ClosePlugins();\r
-                                               RestoreWindow();\r
-                                               return TRUE;\r
-                                       }\r
-                                       ShowCursor(FALSE);\r
-                                       Running = 1;\r
-                                       SetCdOpenCaseTime(time(NULL) + 2);\r
-                                       CheatSearchBackupMemory();\r
-                                       psxCpu->Execute();\r
-                                       return TRUE;\r
-\r
-                               case ID_CONFIGURATION_GRAPHICS:\r
-                                       if (GPU_configure) GPU_configure();\r
-                                       return TRUE;\r
-\r
-                               case ID_CONFIGURATION_SOUND:\r
-                                       if (SPU_configure) SPU_configure();\r
-                                       return TRUE;\r
-\r
-                               case ID_CONFIGURATION_CONTROLLERS:\r
-                                       if (PAD1_configure) PAD1_configure();\r
-                                       if (strcmp(Config.Pad1, Config.Pad2)) if (PAD2_configure) PAD2_configure();\r
-                                       return TRUE;\r
-\r
-                               case ID_CONFIGURATION_CDROM:\r
-                                   if (CDR_configure) CDR_configure();\r
-                                       return TRUE;\r
-\r
-                               case ID_CONFIGURATION_NETPLAY:\r
-                                       DialogBox(gApp.hInstance, MAKEINTRESOURCE(IDD_NETPLAY), hWnd, (DLGPROC)ConfigureNetPlayDlgProc);\r
-                                       return TRUE;\r
-\r
-                               case ID_CONFIGURATION_MEMORYCARDMANAGER:\r
-                                       DialogBox(gApp.hInstance, MAKEINTRESOURCE(IDD_MCDCONF), hWnd, (DLGPROC)ConfigureMcdsDlgProc);\r
-                                       return TRUE;\r
-\r
-                               case ID_CONFIGURATION_CPU:\r
-                                       DialogBox(gApp.hInstance, MAKEINTRESOURCE(IDD_CPUCONF), hWnd, (DLGPROC)ConfigureCpuDlgProc);\r
-                                       return TRUE;\r
-\r
-                               case ID_CONFIGURATION:\r
-                                       ConfigurePlugins(hWnd);\r
-                                       return TRUE;\r
-\r
-                               case ID_CONFIGURATION_CHEATLIST:\r
-                                       DialogBox(gApp.hInstance, MAKEINTRESOURCE(IDD_CHEATLIST), hWnd, (DLGPROC)CheatDlgProc);\r
-                                       break;\r
-\r
-                               case ID_CONFIGURATION_CHEATSEARCH:\r
-                                       DialogBox(gApp.hInstance, MAKEINTRESOURCE(IDD_CHEATSEARCH), hWnd, (DLGPROC)CheatSearchDlgProc);\r
-                                       break;\r
-\r
-                               case ID_HELP_ABOUT:\r
-                                       DialogBox(gApp.hInstance, MAKEINTRESOURCE(ABOUT_DIALOG), hWnd, (DLGPROC)AboutDlgProc);\r
-                                       return TRUE;\r
-\r
-                               default:\r
-#ifdef ENABLE_NLS\r
-                                       if (LOWORD(wParam) >= ID_LANGS && LOWORD(wParam) <= (ID_LANGS + langsMax)) {\r
-                                               AccBreak = 1;\r
-                                               DestroyWindow(gApp.hWnd);\r
-                                               ChangeLanguage(langs[LOWORD(wParam) - ID_LANGS].lang);\r
-                                               CreateMainWindow(SW_NORMAL);\r
-                                               return TRUE;\r
-                                       }\r
-#endif\r
-                                       break;\r
-                       }\r
-                       break;\r
-\r
-               case WM_SYSKEYDOWN:\r
-                       if (wParam != VK_F10)\r
-                               return DefWindowProc(hWnd, msg, wParam, lParam);\r
-               case WM_KEYDOWN:\r
-                       PADhandleKey(wParam);\r
-                       return TRUE;\r
-\r
-               case WM_DESTROY:\r
-                       if (!AccBreak) {\r
-                               if (Running) ClosePlugins();\r
-                               SysClose();\r
-                               PostQuitMessage(0);\r
-                               exit(0);\r
-                       }\r
-                       else AccBreak = 0;\r
-\r
-                       DeleteObject(hBm);\r
-                       DeleteDC(hdcmem);\r
-                       return TRUE;\r
-\r
-               case WM_QUIT:\r
-                       exit(0);\r
-                       break;\r
-\r
-               default:\r
-                       return DefWindowProc(hWnd, msg, wParam, lParam);\r
-       }\r
-\r
-       return FALSE;\r
-}\r
-\r
-HWND mcdDlg;\r
-McdBlock Blocks[2][15];\r
-int IconC[2][15];\r
-HIMAGELIST Iiml[2];\r
-HICON eICON;\r
-\r
-void CreateListView(int idc) {\r
-       HWND List;\r
-       LV_COLUMN col;\r
-\r
-       List = GetDlgItem(mcdDlg, idc);\r
-\r
-       col.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;\r
-       col.fmt  = LVCFMT_LEFT;\r
-\r
-       col.pszText  = _("Title");\r
-       col.cx       = 170;\r
-       col.iSubItem = 0;\r
-\r
-       ListView_InsertColumn(List, 0, &col);\r
-\r
-       col.pszText  = _("Status");\r
-       col.cx       = 50;\r
-       col.iSubItem = 1;\r
-\r
-       ListView_InsertColumn(List, 1, &col);\r
-\r
-       col.pszText  = _("Game ID");\r
-       col.cx       = 90;\r
-       col.iSubItem = 2;\r
-\r
-       ListView_InsertColumn(List, 2, &col);\r
-\r
-       col.pszText  = _("Game");\r
-       col.cx       = 80;\r
-       col.iSubItem = 3;\r
-\r
-       ListView_InsertColumn(List, 3, &col);\r
-}\r
-\r
-int GetRGB() {\r
-    HDC scrDC, memDC;\r
-    HBITMAP oldBmp = NULL; \r
-    HBITMAP curBmp = NULL;\r
-    COLORREF oldColor;\r
-    COLORREF curColor = RGB(255,255,255);\r
-    int i, R, G, B;\r
-\r
-    R = G = B = 1;\r
\r
-    scrDC = CreateDC("DISPLAY", NULL, NULL, NULL);\r
-    memDC = CreateCompatibleDC(NULL); \r
-    curBmp = CreateCompatibleBitmap(scrDC, 1, 1);    \r
-    oldBmp = (HBITMAP)SelectObject(memDC, curBmp);\r
-        \r
-    for (i = 255; i >= 0; --i) {\r
-        oldColor = curColor;\r
-        curColor = SetPixel(memDC, 0, 0, RGB(i, i, i));\r
\r
-        if (GetRValue(curColor) < GetRValue(oldColor)) ++R; \r
-        if (GetGValue(curColor) < GetGValue(oldColor)) ++G;\r
-        if (GetBValue(curColor) < GetBValue(oldColor)) ++B;\r
-    }\r
\r
-    DeleteObject(oldBmp);\r
-    DeleteObject(curBmp);\r
-    DeleteDC(scrDC);\r
-    DeleteDC(memDC);\r
\r
-    return (R * G * B);\r
-}\r
\r
-HICON GetIcon(short *icon) {\r
-    ICONINFO iInfo;\r
-    HDC hDC;\r
-    char mask[16*16];\r
-    int x, y, c, Depth;\r
-  \r
-    hDC = CreateIC("DISPLAY",NULL,NULL,NULL);\r
-    Depth=GetDeviceCaps(hDC, BITSPIXEL);\r
-    DeleteDC(hDC);\r
\r
-    if (Depth == 16) {\r
-        if (GetRGB() == (32 * 32 * 32))        \r
-            Depth = 15;\r
-    }\r
-\r
-    for (y=0; y<16; y++) {\r
-        for (x=0; x<16; x++) {\r
-            c = icon[y*16+x];\r
-            if (Depth == 15 || Depth == 32)\r
-                               c = ((c&0x001f) << 10) | \r
-                                       ((c&0x7c00) >> 10) | \r
-                                       ((c&0x03e0)      );\r
-                       else\r
-                c = ((c&0x001f) << 11) |\r
-                                       ((c&0x7c00) >>  9) |\r
-                                       ((c&0x03e0) <<  1);\r
-\r
-            icon[y*16+x] = c;\r
-        }\r
-    }    \r
-\r
-    iInfo.fIcon = TRUE;\r
-    memset(mask, 0, 16*16);\r
-    iInfo.hbmMask  = CreateBitmap(16, 16, 1, 1, mask);\r
-    iInfo.hbmColor = CreateBitmap(16, 16, 1, 16, icon); \r
\r
-    return CreateIconIndirect(&iInfo);\r
-}\r
-\r
-HICON hICON[2][3][15];\r
-int aIover[2];                        \r
-int ani[2];\r
\r
-void LoadMcdItems(int mcd, int idc) {\r
-    HWND List = GetDlgItem(mcdDlg, idc);\r
-    LV_ITEM item;\r
-    HIMAGELIST iml = Iiml[mcd-1];\r
-    int i, j;\r
-    HICON hIcon;\r
-    McdBlock *Info;\r
\r
-    aIover[mcd-1]=0;\r
-    ani[mcd-1]=0;\r
\r
-    ListView_DeleteAllItems(List);\r
-\r
-    for (i=0; i<15; i++) {\r
-  \r
-        item.mask      = LVIF_TEXT | LVIF_IMAGE;\r
-        item.iItem       = i;\r
-        item.iImage    = i;\r
-        item.pszText  = LPSTR_TEXTCALLBACK;\r
-        item.iSubItem = 0;\r
\r
-        IconC[mcd-1][i] = 0;\r
-        Info = &Blocks[mcd-1][i];\r
\r
-        if ((Info->Flags & 0xF) == 1 && Info->IconCount != 0) {\r
-            hIcon = GetIcon(Info->Icon);   \r
\r
-            if (Info->IconCount > 1) {\r
-                for(j = 0; j < 3; j++)\r
-                    hICON[mcd-1][j][i]=hIcon;\r
-            }\r
-        } else {\r
-            hIcon = eICON; \r
-        }\r
\r
-        ImageList_ReplaceIcon(iml, -1, hIcon);\r
-        ListView_InsertItem(List, &item);\r
-    } \r
-}\r
-\r
-void UpdateMcdItems(int mcd, int idc) {\r
-    HWND List = GetDlgItem(mcdDlg, idc);\r
-    LV_ITEM item;\r
-    HIMAGELIST iml = Iiml[mcd-1];\r
-    int i, j;\r
-    McdBlock *Info;\r
-    HICON hIcon;\r
\r
-    aIover[mcd-1]=0;\r
-    ani[mcd-1]=0;\r
-  \r
-    for (i=0; i<15; i++) { \r
\r
-        item.mask     = LVIF_TEXT | LVIF_IMAGE;\r
-        item.iItem    = i;\r
-        item.iImage   = i;\r
-        item.pszText  = LPSTR_TEXTCALLBACK;\r
-        item.iSubItem = 0;\r
\r
-        IconC[mcd-1][i] = 0; \r
-        Info = &Blocks[mcd-1][i];\r
\r
-        if ((Info->Flags & 0xF) == 1 && Info->IconCount != 0) {\r
-            hIcon = GetIcon(Info->Icon);   \r
\r
-            if (Info->IconCount > 1) { \r
-                for(j = 0; j < 3; j++)\r
-                    hICON[mcd-1][j][i]=hIcon;\r
-            }\r
-        } else { \r
-            hIcon = eICON; \r
-        }\r
-              \r
-        ImageList_ReplaceIcon(iml, i, hIcon);\r
-        ListView_SetItem(List, &item);\r
-    } \r
-    ListView_Update(List, -1);\r
-}\r
\r
-void McdListGetDispInfo(int mcd, int idc, LPNMHDR pnmh) {\r
-       LV_DISPINFO *lpdi = (LV_DISPINFO *)pnmh;\r
-       McdBlock *Info;\r
-       char buf[256];
-       static char buftitle[256];\r
-\r
-       Info = &Blocks[mcd - 1][lpdi->item.iItem];\r
-\r
-       switch (lpdi->item.iSubItem) {\r
-               case 0:\r
-                       switch (Info->Flags & 0xF) {\r
-                               case 1:\r
-                                       if (MultiByteToWideChar(932, 0, (LPCSTR)Info->sTitle, -1, (LPWSTR)buf, sizeof(buf)) == 0) {\r
-                                               lpdi->item.pszText = Info->Title;\r
-                                       } else if (WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)buf, -1, (LPSTR)buftitle, sizeof(buftitle), NULL, NULL) == 0) {\r
-                                               lpdi->item.pszText = Info->Title;\r
-                                       } else {\r
-                                               lpdi->item.pszText = buftitle;\r
-                                       }\r
-                                       break;\r
-                               case 2:\r
-                                       lpdi->item.pszText = _("mid link block");\r
-                                       break;\r
-                               case 3:\r
-                                       lpdi->item.pszText = _("terminiting link block");\r
-                                       break;\r
-                       }\r
-                       break;\r
-               case 1:\r
-                       if ((Info->Flags & 0xF0) == 0xA0) {\r
-                               if ((Info->Flags & 0xF) >= 1 &&\r
-                                       (Info->Flags & 0xF) <= 3) {\r
-                                       lpdi->item.pszText = _("Deleted");\r
-                               } else lpdi->item.pszText = _("Free");\r
-                       } else if ((Info->Flags & 0xF0) == 0x50)\r
-                               lpdi->item.pszText = _("Used");\r
-                       else { lpdi->item.pszText = _("Free"); }\r
-                       break;\r
-               case 2:\r
-                       if((Info->Flags & 0xF)==1)\r
-                               lpdi->item.pszText = Info->ID;\r
-                       break;\r
-               case 3:\r
-                       if((Info->Flags & 0xF)==1)\r
-                               lpdi->item.pszText = Info->Name;\r
-                       break;\r
-       }\r
-}\r
-\r
-void McdListNotify(int mcd, int idc, LPNMHDR pnmh) {\r
-       switch (pnmh->code) {\r
-               case LVN_GETDISPINFO: McdListGetDispInfo(mcd, idc, pnmh); break;\r
-       }\r
-}\r
-\r
-void UpdateMcdDlg() {\r
-       int i;\r
-\r
-       for (i=1; i<16; i++) GetMcdBlockInfo(1, i, &Blocks[0][i-1]);\r
-       for (i=1; i<16; i++) GetMcdBlockInfo(2, i, &Blocks[1][i-1]);\r
-       UpdateMcdItems(1, IDC_LIST1);\r
-       UpdateMcdItems(2, IDC_LIST2);\r
-}\r
-\r
-void LoadMcdDlg() {\r
-       int i;\r
-\r
-       for (i=1; i<16; i++) GetMcdBlockInfo(1, i, &Blocks[0][i-1]);\r
-       for (i=1; i<16; i++) GetMcdBlockInfo(2, i, &Blocks[1][i-1]);\r
-       LoadMcdItems(1, IDC_LIST1);\r
-       LoadMcdItems(2, IDC_LIST2);\r
-}\r
-\r
-void UpdateMcdIcon(int mcd, int idc) {\r
-    HWND List = GetDlgItem(mcdDlg, idc);\r
-    HIMAGELIST iml = Iiml[mcd-1];\r
-    int i;\r
-    McdBlock *Info;\r
-    int *count; \r
\r
-    if(!aIover[mcd-1]) {\r
-        ani[mcd-1]++; \r
\r
-        for (i=0; i<15; i++) {\r
-            Info = &Blocks[mcd-1][i];\r
-            count = &IconC[mcd-1][i];\r
\r
-            if ((Info->Flags & 0xF) != 1) continue;\r
-            if (Info->IconCount <= 1) continue;\r
\r
-            if (*count < Info->IconCount) {\r
-                (*count)++;\r
-                aIover[mcd-1]=0;\r
\r
-                if(ani[mcd-1] <= (Info->IconCount-1))  // last frame and below...\r
-                    hICON[mcd-1][ani[mcd-1]][i] = GetIcon(&Info->Icon[(*count)*16*16]);\r
-            } else {\r
-                aIover[mcd-1]=1;\r
-            }\r
-        }\r
-\r
-    } else { \r
\r
-        if (ani[mcd-1] > 1) ani[mcd-1] = 0;  // 1st frame\r
-        else ani[mcd-1]++;                       // 2nd, 3rd frame\r
\r
-        for(i=0;i<15;i++) {\r
-            Info = &Blocks[mcd-1][i];\r
\r
-            if (((Info->Flags & 0xF) == 1) && (Info->IconCount > 1))\r
-                ImageList_ReplaceIcon(iml, i, hICON[mcd-1][ani[mcd-1]][i]);\r
-        }\r
-        InvalidateRect(List,  NULL, FALSE);\r
-    }\r
-}\r
-\r
-static int copy = 0, copymcd = 0;\r
-//static int listsel = 0;\r
-\r
-BOOL CALLBACK ConfigureMcdsDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) {\r
-       char str[256];\r
-       LPBYTE lpAND, lpXOR;\r
-       LPBYTE lpA, lpX;\r
-       int i, j;\r
-\r
-       switch(uMsg) {\r
-               case WM_INITDIALOG:\r
-                       mcdDlg = hW;\r
-\r
-                       SetWindowText(hW, _("Memcard Manager"));\r
-\r
-                       Button_SetText(GetDlgItem(hW, IDOK),        _("OK"));\r
-                       Button_SetText(GetDlgItem(hW, IDCANCEL),    _("Cancel"));\r
-                       Button_SetText(GetDlgItem(hW, IDC_MCDSEL1), _("Select Mcd"));\r
-                       Button_SetText(GetDlgItem(hW, IDC_FORMAT1), _("Format Mcd"));\r
-                       Button_SetText(GetDlgItem(hW, IDC_RELOAD1), _("Reload Mcd"));\r
-                       Button_SetText(GetDlgItem(hW, IDC_MCDSEL2), _("Select Mcd"));\r
-                       Button_SetText(GetDlgItem(hW, IDC_FORMAT2), _("Format Mcd"));\r
-                       Button_SetText(GetDlgItem(hW, IDC_RELOAD2), _("Reload Mcd"));\r
-                       Button_SetText(GetDlgItem(hW, IDC_COPYTO2), _("-> Copy ->"));\r
-                       Button_SetText(GetDlgItem(hW, IDC_COPYTO1), _("<- Copy <-"));\r
-                       Button_SetText(GetDlgItem(hW, IDC_PASTE),   _("Paste"));\r
-                       Button_SetText(GetDlgItem(hW, IDC_DELETE1), _("<- Un/Delete"));\r
-                       Button_SetText(GetDlgItem(hW, IDC_DELETE2), _("Un/Delete ->"));\r
\r
-                       Static_SetText(GetDlgItem(hW, IDC_FRAMEMCD1), _("Memory Card 1"));\r
-                       Static_SetText(GetDlgItem(hW, IDC_FRAMEMCD2), _("Memory Card 2"));\r
-\r
-                       lpA=lpAND=(LPBYTE)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,(16*16));\r
-                       lpX=lpXOR=(LPBYTE)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,(16*16));\r
-\r
-                       for(i=0;i<16;i++)\r
-                       {\r
-                               for(j=0;j<16;j++)\r
-                               {\r
-                                       *lpA++=0xff;\r
-                                       *lpX++=0;\r
-                               }\r
-                       }\r
-                       eICON=CreateIcon(gApp.hInstance,16,16,1,1,lpAND,lpXOR);\r
-\r
-                       HeapFree(GetProcessHeap(),0,lpAND);\r
-                       HeapFree(GetProcessHeap(),0,lpXOR);\r
-\r
-                       if (!strlen(Config.Mcd1)) strcpy(Config.Mcd1, "memcards\\Mcd001.mcr");\r
-                       if (!strlen(Config.Mcd2)) strcpy(Config.Mcd2, "memcards\\Mcd002.mcr");\r
-                       Edit_SetText(GetDlgItem(hW,IDC_MCD1), Config.Mcd1);\r
-                       Edit_SetText(GetDlgItem(hW,IDC_MCD2), Config.Mcd2);\r
-\r
-                       CreateListView(IDC_LIST1);\r
-                       CreateListView(IDC_LIST2);\r
\r
-            Iiml[0] = ImageList_Create(16, 16, ILC_COLOR16, 0, 0);\r
-            Iiml[1] = ImageList_Create(16, 16, ILC_COLOR16, 0, 0);\r
\r
-            ListView_SetImageList(GetDlgItem(mcdDlg, IDC_LIST1), Iiml[0], LVSIL_SMALL);\r
-            ListView_SetImageList(GetDlgItem(mcdDlg, IDC_LIST2), Iiml[1], LVSIL_SMALL);\r
-\r
-                       Button_Enable(GetDlgItem(hW, IDC_PASTE), FALSE);\r
-\r
-                       LoadMcdDlg();\r
-\r
-                       SetTimer(hW, 1, 250, NULL);\r
-\r
-                       return TRUE;\r
-\r
-               case WM_COMMAND:\r
-                       switch (LOWORD(wParam)) {\r
-                               case IDC_COPYTO1:\r
-                                       copy = ListView_GetSelectionMark(GetDlgItem(mcdDlg, IDC_LIST2));\r
-                                       copymcd = 1;\r
-\r
-                                       Button_Enable(GetDlgItem(hW, IDC_PASTE), TRUE);\r
-                                       return TRUE;\r
-                               case IDC_COPYTO2:\r
-                                       copy = ListView_GetSelectionMark(GetDlgItem(mcdDlg, IDC_LIST1));\r
-                                       copymcd = 2;\r
-\r
-                                       Button_Enable(GetDlgItem(hW, IDC_PASTE), TRUE);\r
-                                       return TRUE;\r
-                               case IDC_PASTE:\r
-                                       if (MessageBox(hW, _("Are you sure you want to paste this selection?"), _("Confirmation"), MB_YESNO) == IDNO) return TRUE;\r
-\r
-                                       if (copymcd == 1) {\r
-                                               Edit_GetText(GetDlgItem(hW,IDC_MCD1), str, 256);\r
-                                               i = ListView_GetSelectionMark(GetDlgItem(mcdDlg, IDC_LIST1));\r
-\r
-                                               // save dir data + save data\r
-                                               memcpy(Mcd1Data + (i+1) * 128, Mcd2Data + (copy+1) * 128, 128);\r
-                                               SaveMcd(str, Mcd1Data, (i+1) * 128, 128);\r
-                                               memcpy(Mcd1Data + (i+1) * 1024 * 8, Mcd2Data + (copy+1) * 1024 * 8, 1024 * 8);\r
-                                               SaveMcd(str, Mcd1Data, (i+1) * 1024 * 8, 1024 * 8);\r
-                                       } else { // 2\r
-                                               Edit_GetText(GetDlgItem(hW,IDC_MCD2), str, 256);\r
-                                               i = ListView_GetSelectionMark(GetDlgItem(mcdDlg, IDC_LIST2));\r
-\r
-                                               // save dir data + save data\r
-                                               memcpy(Mcd2Data + (i+1) * 128, Mcd1Data + (copy+1) * 128, 128);\r
-                                               SaveMcd(str, Mcd2Data, (i+1) * 128, 128);\r
-                                               memcpy(Mcd2Data + (i+1) * 1024 * 8, Mcd1Data + (copy+1) * 1024 * 8, 1024 * 8);\r
-                                               SaveMcd(str, Mcd2Data, (i+1) * 1024 * 8, 1024 * 8);\r
-                                       }\r
-\r
-                                       UpdateMcdDlg();\r
-\r
-                                       return TRUE;\r
-                               case IDC_DELETE1:\r
-                               {\r
-                                       McdBlock *Info;\r
-                                       int mcd = 1;\r
-                                       int i, xor = 0, j;\r
-                                       unsigned char *data, *ptr;\r
-\r
-                                       Edit_GetText(GetDlgItem(hW,IDC_MCD1), str, 256);\r
-                                       i = ListView_GetSelectionMark(GetDlgItem(mcdDlg, IDC_LIST1));\r
-                                       data = Mcd1Data;\r
-\r
-                                       i++;\r
-\r
-                                       ptr = data + i * 128;\r
-\r
-                                       Info = &Blocks[mcd-1][i-1];\r
-\r
-                                       if ((Info->Flags & 0xF0) == 0xA0) {\r
-                                               if ((Info->Flags & 0xF) >= 1 &&\r
-                                                       (Info->Flags & 0xF) <= 3) { // deleted\r
-                                                       *ptr = 0x50 | (Info->Flags & 0xF);\r
-                                               } else return TRUE;\r
-                                       } else if ((Info->Flags & 0xF0) == 0x50) { // used\r
-                                               *ptr = 0xA0 | (Info->Flags & 0xF);\r
-                                       } else { return TRUE; }\r
-\r
-                                       for (j=0; j<127; j++) xor^=*ptr++;\r
-                                       *ptr = xor;\r
-\r
-                                       SaveMcd(str, data, i * 128, 128);\r
-                                       UpdateMcdDlg();\r
-                               }\r
-\r
-                                       return TRUE;\r
-                               case IDC_DELETE2:\r
-                               {\r
-                                       McdBlock *Info;\r
-                                       int mcd = 2;\r
-                                       int i, xor = 0, j;\r
-                                       unsigned char *data, *ptr;\r
-\r
-                                       Edit_GetText(GetDlgItem(hW,IDC_MCD2), str, 256);\r
-                                       i = ListView_GetSelectionMark(GetDlgItem(mcdDlg, IDC_LIST2));\r
-                                       data = Mcd2Data;\r
-\r
-                                       i++;\r
-\r
-                                       ptr = data + i * 128;\r
-\r
-                                       Info = &Blocks[mcd-1][i-1];\r
-\r
-                                       if ((Info->Flags & 0xF0) == 0xA0) {\r
-                                               if ((Info->Flags & 0xF) >= 1 &&\r
-                                                       (Info->Flags & 0xF) <= 3) { // deleted\r
-                                                       *ptr = 0x50 | (Info->Flags & 0xF);\r
-                                               } else return TRUE;\r
-                                       } else if ((Info->Flags & 0xF0) == 0x50) { // used\r
-                                               *ptr = 0xA0 | (Info->Flags & 0xF);\r
-                                       } else { return TRUE; }\r
-\r
-                                       for (j=0; j<127; j++) xor^=*ptr++;\r
-                                       *ptr = xor;\r
-\r
-                                       SaveMcd(str, data, i * 128, 128);\r
-                                       UpdateMcdDlg();\r
-                               }\r
-\r
-                                       return TRUE;\r
-\r
-                               case IDC_MCDSEL1: \r
-                                       Open_Mcd_Proc(hW, 1); \r
-                                       return TRUE;\r
-                               case IDC_MCDSEL2: \r
-                                       Open_Mcd_Proc(hW, 2); \r
-                                       return TRUE;\r
-                               case IDC_RELOAD1: \r
-                                       Edit_GetText(GetDlgItem(hW,IDC_MCD1), str, 256);\r
-                                       LoadMcd(1, str);\r
-                                       UpdateMcdDlg();\r
-                                       return TRUE;\r
-                               case IDC_RELOAD2: \r
-                                       Edit_GetText(GetDlgItem(hW,IDC_MCD2), str, 256);\r
-                                       LoadMcd(2, str);\r
-                                       UpdateMcdDlg();\r
-                                       return TRUE;\r
-                               case IDC_FORMAT1:\r
-                                       if (MessageBox(hW, _("Are you sure you want to format this Memory Card?"), _("Confirmation"), MB_YESNO) == IDNO) return TRUE;\r
-                                       Edit_GetText(GetDlgItem(hW,IDC_MCD1), str, 256);\r
-                                       CreateMcd(str);\r
-                                       LoadMcd(1, str);\r
-                                       UpdateMcdDlg();\r
-                                       return TRUE;\r
-                               case IDC_FORMAT2:\r
-                                       if (MessageBox(hW, _("Are you sure you want to format this Memory Card?"), _("Confirmation"), MB_YESNO) == IDNO) return TRUE;\r
-                                       Edit_GetText(GetDlgItem(hW,IDC_MCD2), str, 256);\r
-                                       CreateMcd(str);\r
-                                       LoadMcd(2, str);\r
-                                       UpdateMcdDlg();\r
-                                       return TRUE;\r
-                               case IDCANCEL:\r
-                                       LoadMcds(Config.Mcd1, Config.Mcd2);\r
-\r
-                                       EndDialog(hW,FALSE);\r
-\r
-                                       return TRUE;\r
-                               case IDOK:\r
-                                       Edit_GetText(GetDlgItem(hW,IDC_MCD1), Config.Mcd1, 256);\r
-                                       Edit_GetText(GetDlgItem(hW,IDC_MCD2), Config.Mcd2, 256);\r
-\r
-                                       LoadMcds(Config.Mcd1, Config.Mcd2);\r
-                                       SaveConfig();\r
-\r
-                                       EndDialog(hW,TRUE);\r
-\r
-                                       return TRUE;\r
-                       }\r
-               case WM_NOTIFY:\r
-                       switch (wParam) {\r
-                               case IDC_LIST1: McdListNotify(1, IDC_LIST1, (LPNMHDR)lParam); break;\r
-                               case IDC_LIST2: McdListNotify(2, IDC_LIST2, (LPNMHDR)lParam); break;\r
-                       }\r
-                       return TRUE;\r
-               case WM_TIMER:\r
-                       UpdateMcdIcon(1, IDC_LIST1);\r
-                       UpdateMcdIcon(2, IDC_LIST2);\r
-                       return TRUE;\r
-               case WM_DESTROY:\r
-                       DestroyIcon(eICON);\r
-                       //KillTimer(hW, 1);\r
-                       return TRUE;\r
-       }\r
-       return FALSE;\r
-}\r
-\r
-BOOL CALLBACK ConfigureCpuDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) {\r
-       long tmp;\r
-\r
-       switch(uMsg) {\r
-               case WM_INITDIALOG:\r
-                       SetWindowText(hW, _("Cpu Config"));\r
-\r
-                       Button_SetText(GetDlgItem(hW,IDOK),        _("OK"));\r
-                       Button_SetText(GetDlgItem(hW,IDCANCEL),    _("Cancel"));\r
-\r
-                       Button_SetText(GetDlgItem(hW,IDC_XA),      _("Disable Xa Decoding"));\r
-                       Button_SetText(GetDlgItem(hW,IDC_SIO),     _("Sio Irq Always Enabled"));\r
-                       Button_SetText(GetDlgItem(hW,IDC_MDEC),    _("Black && White Movies"));\r
-                       Button_SetText(GetDlgItem(hW,IDC_CDDA),    _("Disable Cd audio"));\r
-                       Button_SetText(GetDlgItem(hW,IDC_PSXAUTO), _("Autodetect"));\r
-                       Button_SetText(GetDlgItem(hW,IDC_CPU),     _("Enable Interpreter Cpu"));\r
-                       Button_SetText(GetDlgItem(hW,IDC_PSXOUT),  _("Enable Console Output"));\r
-                       Button_SetText(GetDlgItem(hW,IDC_DEBUG),   _("Enable Debugger"));\r
-                       Button_SetText(GetDlgItem(hW,IDC_SPUIRQ),  _("Spu Irq Always Enabled"));\r
-                       Button_SetText(GetDlgItem(hW,IDC_RCNTFIX), _("Parasite Eve 2, Vandal Hearts 1/2 Fix"));\r
-                       Button_SetText(GetDlgItem(hW,IDC_VSYNCWA), _("InuYasha Sengoku Battle Fix"));\r
-\r
-                       Static_SetText(GetDlgItem(hW,IDC_MISCOPT), _("Options"));\r
-                       Static_SetText(GetDlgItem(hW,IDC_SELPSX),  _("Psx System Type"));\r
-\r
-                       Button_SetCheck(GetDlgItem(hW,IDC_XA),      Config.Xa);\r
-                       Button_SetCheck(GetDlgItem(hW,IDC_SIO),     Config.Sio);\r
-                       Button_SetCheck(GetDlgItem(hW,IDC_MDEC),    Config.Mdec);\r
-                       Button_SetCheck(GetDlgItem(hW,IDC_CDDA),    Config.Cdda);\r
-                       Button_SetCheck(GetDlgItem(hW,IDC_PSXAUTO), Config.PsxAuto);\r
-                       Button_SetCheck(GetDlgItem(hW,IDC_CPU),     (Config.Cpu == CPU_INTERPRETER));\r
-                       Button_SetCheck(GetDlgItem(hW,IDC_PSXOUT),  Config.PsxOut);\r
-                       Button_SetCheck(GetDlgItem(hW,IDC_DEBUG),   Config.Debug);\r
-                       Button_SetCheck(GetDlgItem(hW,IDC_SPUIRQ),  Config.SpuIrq);\r
-                       Button_SetCheck(GetDlgItem(hW,IDC_RCNTFIX), Config.RCntFix);\r
-                       Button_SetCheck(GetDlgItem(hW,IDC_VSYNCWA), Config.VSyncWA);\r
-                       ComboBox_AddString(GetDlgItem(hW,IDC_PSXTYPES), "NTSC");\r
-                       ComboBox_AddString(GetDlgItem(hW,IDC_PSXTYPES), "PAL");\r
-                       ComboBox_SetCurSel(GetDlgItem(hW,IDC_PSXTYPES),Config.PsxType);\r
-\r
-                       if (Config.Cpu == CPU_DYNAREC) {\r
-                               Config.Debug = 0;\r
-                               Button_SetCheck(GetDlgItem(hW, IDC_DEBUG), FALSE);\r
-                               EnableWindow(GetDlgItem(hW, IDC_DEBUG), FALSE);\r
-                       }\r
-\r
-                       EnableWindow(GetDlgItem(hW,IDC_PSXTYPES), !Config.PsxAuto);\r
-                       break;\r
-\r
-               case WM_COMMAND: {\r
-                       switch (LOWORD(wParam)) {\r
-                               case IDCANCEL: EndDialog(hW, FALSE); return TRUE;\r
-                       case IDOK:\r
-                                       tmp = ComboBox_GetCurSel(GetDlgItem(hW,IDC_PSXTYPES));\r
-                                       if (tmp == 0) Config.PsxType = 0;\r
-                                       else Config.PsxType = 1;\r
-\r
-                                       Config.Xa      = Button_GetCheck(GetDlgItem(hW,IDC_XA));\r
-                                       Config.Sio     = Button_GetCheck(GetDlgItem(hW,IDC_SIO));\r
-                                       Config.Mdec    = Button_GetCheck(GetDlgItem(hW,IDC_MDEC));\r
-                                       Config.Cdda    = Button_GetCheck(GetDlgItem(hW,IDC_CDDA));\r
-                                       Config.PsxAuto = Button_GetCheck(GetDlgItem(hW,IDC_PSXAUTO));\r
-                                       tmp = Config.Cpu;\r
-                                       Config.Cpu     = (Button_GetCheck(GetDlgItem(hW,IDC_CPU)) ? CPU_INTERPRETER : CPU_DYNAREC);\r
-                                       if (tmp != Config.Cpu) {\r
-                                               psxCpu->Shutdown();\r
-                                               if (Config.Cpu == CPU_INTERPRETER) psxCpu = &psxInt;\r
-                                               else psxCpu = &psxRec;\r
-                                               if (psxCpu->Init() == -1) {\r
-                                                       SysClose();\r
-                                                       exit(1);\r
-                                               }\r
-                                               psxCpu->Reset();\r
-                                       }\r
-                                       Config.PsxOut  = Button_GetCheck(GetDlgItem(hW,IDC_PSXOUT));\r
-                                       Config.SpuIrq  = Button_GetCheck(GetDlgItem(hW,IDC_SPUIRQ));\r
-                                       Config.RCntFix = Button_GetCheck(GetDlgItem(hW,IDC_RCNTFIX));\r
-                                       Config.VSyncWA = Button_GetCheck(GetDlgItem(hW,IDC_VSYNCWA));\r
-                                       tmp = Config.Debug;\r
-                                       Config.Debug   = Button_GetCheck(GetDlgItem(hW,IDC_DEBUG));\r
-                                       if (tmp != Config.Debug) {\r
-                                               if (Config.Debug) StartDebugger();\r
-                                               else StopDebugger();\r
-                                       }\r
-\r
-                                       SaveConfig();\r
-\r
-                                       EndDialog(hW,TRUE);\r
-\r
-                                       if (Config.PsxOut) OpenConsole();\r
-                                       else CloseConsole();\r
-\r
-                                       return TRUE;\r
-\r
-                               case IDC_CPU:\r
-                                       if (Button_GetCheck(GetDlgItem(hW,IDC_CPU))) {\r
-                                               EnableWindow(GetDlgItem(hW,IDC_DEBUG), TRUE);\r
-                                       } else {\r
-                                               Button_SetCheck(GetDlgItem(hW,IDC_DEBUG), FALSE);\r
-                                               EnableWindow(GetDlgItem(hW,IDC_DEBUG), FALSE);\r
-                                       }\r
-                                       break;\r
-\r
-                               case IDC_PSXAUTO:\r
-                                       if (Button_GetCheck(GetDlgItem(hW,IDC_PSXAUTO))) {\r
-                                               EnableWindow(GetDlgItem(hW,IDC_PSXTYPES), FALSE);\r
-                                       } else {\r
-                                               EnableWindow(GetDlgItem(hW,IDC_PSXTYPES), TRUE);\r
-                                       }\r
-                                       break;\r
-                       }\r
-               }\r
-       }\r
-       return FALSE;\r
-}\r
-\r
-void Open_Mcd_Proc(HWND hW, int mcd) {\r
-       OPENFILENAME ofn;\r
-       char szFileName[MAXPATHLEN];\r
-       char szFileTitle[MAXPATHLEN];\r
-       char szFilter[1024];\r
-       char *str;\r
-\r
-       memset(&szFileName,  0, sizeof(szFileName));\r
-       memset(&szFileTitle, 0, sizeof(szFileTitle));\r
-       memset(&szFilter,    0, sizeof(szFilter));\r
-\r
-       strcpy(szFilter, _("Psx Mcd Format (*.mcr;*.mc;*.mem;*.vgs;*.mcd;*.gme;*.ddf)"));\r
-       str = szFilter + strlen(szFilter) + 1; \r
-       strcpy(str, "*.mcr;*.mcd;*.mem;*.gme;*.mc;*.ddf");\r
-\r
-       str+= strlen(str) + 1;\r
-       strcpy(str, _("Psx Memory Card (*.mcr;*.mc)"));\r
-       str+= strlen(str) + 1;\r
-       strcpy(str, "*.mcr;0*.mc");\r
-\r
-       str+= strlen(str) + 1;\r
-       strcpy(str, _("CVGS Memory Card (*.mem;*.vgs)"));\r
-       str+= strlen(str) + 1;\r
-       strcpy(str, "*.mem;*.vgs");\r
-\r
-       str+= strlen(str) + 1;\r
-       strcpy(str, _("Bleem Memory Card (*.mcd)"));\r
-       str+= strlen(str) + 1;\r
-       strcpy(str, "*.mcd");\r
-\r
-       str+= strlen(str) + 1;\r
-       strcpy(str, _("DexDrive Memory Card (*.gme)"));\r
-       str+= strlen(str) + 1;\r
-       strcpy(str, "*.gme");\r
-\r
-       str+= strlen(str) + 1;\r
-       strcpy(str, _("DataDeck Memory Card (*.ddf)"));\r
-       str+= strlen(str) + 1;\r
-       strcpy(str, "*.ddf");\r
-\r
-       str+= strlen(str) + 1;\r
-       strcpy(str, _("All Files"));\r
-       str+= strlen(str) + 1;\r
-       strcpy(str, "*.*");\r
-\r
-    ofn.lStructSize                    = sizeof(OPENFILENAME);\r
-    ofn.hwndOwner                      = hW;\r
-    ofn.lpstrFilter                    = szFilter;\r
-       ofn.lpstrCustomFilter   = NULL;\r
-    ofn.nMaxCustFilter         = 0;\r
-    ofn.nFilterIndex           = 1;\r
-    ofn.lpstrFile                      = szFileName;\r
-    ofn.nMaxFile                       = MAXPATHLEN;\r
-    ofn.lpstrInitialDir                = "memcards";\r
-    ofn.lpstrFileTitle         = szFileTitle;\r
-    ofn.nMaxFileTitle          = MAXPATHLEN;\r
-    ofn.lpstrTitle                     = NULL;\r
-    ofn.lpstrDefExt                    = "MCR";\r
-    ofn.Flags                          = OFN_HIDEREADONLY | OFN_NOCHANGEDIR;\r
-\r
-       if (GetOpenFileName ((LPOPENFILENAME)&ofn)) {\r
-               Edit_SetText(GetDlgItem(hW,mcd == 1 ? IDC_MCD1 : IDC_MCD2), szFileName);\r
-               LoadMcd(mcd, szFileName);\r
-               UpdateMcdDlg();\r
-       }\r
-}\r
-\r
-int Open_File_Proc(char *file) {\r
-       OPENFILENAME ofn;\r
-       char szFileName[MAXPATHLEN];\r
-       char szFileTitle[MAXPATHLEN];\r
-       char szFilter[256];\r
-\r
-       memset(&szFileName,  0, sizeof(szFileName));\r
-       memset(&szFileTitle, 0, sizeof(szFileTitle));\r
-       memset(&szFilter,    0, sizeof(szFilter));\r
-\r
-    ofn.lStructSize                    = sizeof(OPENFILENAME);\r
-    ofn.hwndOwner                      = gApp.hWnd;\r
-\r
-       strcpy(szFilter, _("Psx Exe Format"));\r
-       strcatz(szFilter, "*.*");\r
-\r
-    ofn.lpstrFilter                    = szFilter;\r
-       ofn.lpstrCustomFilter   = NULL;\r
-    ofn.nMaxCustFilter         = 0;\r
-    ofn.nFilterIndex           = 1;\r
-    ofn.lpstrFile                      = szFileName;\r
-    ofn.nMaxFile                       = MAXPATHLEN;\r
-    ofn.lpstrInitialDir                = NULL;\r
-    ofn.lpstrFileTitle         = szFileTitle;\r
-    ofn.nMaxFileTitle          = MAXPATHLEN;\r
-    ofn.lpstrTitle                     = NULL;\r
-    ofn.lpstrDefExt                    = "EXE";\r
-    ofn.Flags                          = OFN_HIDEREADONLY | OFN_NOCHANGEDIR;\r
-\r
-       if (GetOpenFileName ((LPOPENFILENAME)&ofn)) {\r
-               strcpy(file, szFileName);\r
-               return 1;\r
-       } else\r
-               return 0;\r
-}\r
-\r
-int Open_Iso_Proc(char *file) {\r
-       OPENFILENAME ofn;\r
-       char szFileName[MAXPATHLEN];\r
-       char szFileTitle[MAXPATHLEN];\r
-       char szFilter[256];\r
-       char *str;\r
-\r
-       memset(&szFileName,  0, sizeof(szFileName));\r
-       memset(&szFileTitle, 0, sizeof(szFileTitle));\r
-       memset(&szFilter,    0, sizeof(szFilter));\r
-\r
-    ofn.lStructSize                    = sizeof(OPENFILENAME);\r
-    ofn.hwndOwner                      = gApp.hWnd;\r
-\r
-       strcpy(szFilter, _("Psx Isos (*.iso;*.mdf;*.img;*.bin)"));\r
-       str = szFilter + strlen(szFilter) + 1; \r
-       strcpy(str, "*.iso;*.mdf;*.img;*.bin");\r
-\r
-       str += strlen(str) + 1;\r
-       strcpy(str, _("All Files"));\r
-       str += strlen(str) + 1;\r
-       strcpy(str, "*.*");\r
-\r
-    ofn.lpstrFilter                    = szFilter;\r
-       ofn.lpstrCustomFilter   = NULL;\r
-    ofn.nMaxCustFilter         = 0;\r
-    ofn.nFilterIndex           = 1;\r
-    ofn.lpstrFile                      = szFileName;\r
-    ofn.nMaxFile                       = MAXPATHLEN;\r
-    ofn.lpstrInitialDir                = NULL;\r
-    ofn.lpstrFileTitle         = szFileTitle;\r
-    ofn.nMaxFileTitle          = MAXPATHLEN;\r
-    ofn.lpstrTitle                     = NULL;\r
-    ofn.lpstrDefExt                    = "ISO";\r
-    ofn.Flags                          = OFN_HIDEREADONLY | OFN_NOCHANGEDIR;\r
-\r
-       if (GetOpenFileName ((LPOPENFILENAME)&ofn)) {\r
-               strcpy(file, szFileName);\r
-               return 1;\r
-       } else\r
-               return 0;\r
-}\r
-\r
-#define _ADDSUBMENU(menu, menun, string) \\r
-       submenu[menun] = CreatePopupMenu(); \\r
-       AppendMenu(menu, MF_STRING | MF_POPUP, (UINT)submenu[menun], string);\r
-\r
-#define ADDSUBMENU(menun, string) \\r
-       _ADDSUBMENU(gApp.hMenu, menun, string);\r
-\r
-#define ADDSUBMENUS(submn, menun, string) \\r
-       submenu[menun] = CreatePopupMenu(); \\r
-       InsertMenu(submenu[submn], 0, MF_BYPOSITION | MF_STRING | MF_POPUP, (UINT)submenu[menun], string);\r
-\r
-#define ADDMENUITEM(menun, string, id) \\r
-       item.fType = MFT_STRING; \\r
-       item.fMask = MIIM_STATE | MIIM_TYPE | MIIM_ID; \\r
-       item.fState = MFS_ENABLED; \\r
-       item.wID = id; \\r
-       sprintf(buf, string); \\r
-       InsertMenuItem(submenu[menun], 0, TRUE, &item);\r
-\r
-#define ADDMENUITEMC(menun, string, id) \\r
-       item.fType = MFT_STRING; \\r
-       item.fMask = MIIM_STATE | MIIM_TYPE | MIIM_ID; \\r
-       item.fState = MFS_ENABLED | MFS_CHECKED; \\r
-       item.wID = id; \\r
-       sprintf(buf, string); \\r
-       InsertMenuItem(submenu[menun], 0, TRUE, &item);\r
-\r
-#define ADDSEPARATOR(menun) \\r
-       item.fMask = MIIM_TYPE; \\r
-       item.fType = MFT_SEPARATOR; \\r
-       InsertMenuItem(submenu[menun], 0, TRUE, &item);\r
-\r
-void CreateMainMenu() {\r
-       MENUITEMINFO item;\r
-       HMENU submenu[256];\r
-       char buf[256];\r
-#ifdef ENABLE_NLS\r
-       char *lang;\r
-       int i;\r
-#endif\r
-\r
-       item.cbSize = sizeof(MENUITEMINFO);\r
-       item.dwTypeData = buf;\r
-       item.cch = 256;\r
-\r
-       gApp.hMenu = CreateMenu();\r
-\r
-       ADDSUBMENU(0, _("&File"));\r
-       ADDMENUITEM(0, _("E&xit"), ID_FILE_EXIT);\r
-       ADDSEPARATOR(0);\r
-       ADDMENUITEM(0, _("Run &EXE..."), ID_FILE_RUN_EXE);\r
-       ADDMENUITEM(0, _("Run &BIOS"), ID_FILE_RUNBIOS);\r
-       ADDMENUITEM(0, _("Run &ISO..."), ID_FILE_RUN_ISO);\r
-       ADDMENUITEM(0, _("Run &CD"), ID_FILE_RUN_CD);\r
-\r
-       ADDSUBMENU(0, _("&Emulator"));\r
-       ADDSUBMENUS(0, 1, _("&States"));\r
-       ADDSEPARATOR(0);\r
-       ADDMENUITEM(0, _("S&witch ISO..."), ID_EMULATOR_SWITCH_ISO);\r
-       ADDSEPARATOR(0);\r
-       ADDMENUITEM(0, _("Re&set"), ID_EMULATOR_RESET);\r
-       ADDMENUITEM(0, _("&Run"), ID_EMULATOR_RUN);\r
-       ADDSUBMENUS(1, 3, _("&Save"));\r
-       ADDSUBMENUS(1, 2, _("&Load"));\r
-       ADDMENUITEM(2, _("&Other..."), ID_FILE_STATES_LOAD_OTHER);\r
-       ADDMENUITEM(2, _("Slot &5"), ID_FILE_STATES_LOAD_SLOT5);\r
-       ADDMENUITEM(2, _("Slot &4"), ID_FILE_STATES_LOAD_SLOT4);\r
-       ADDMENUITEM(2, _("Slot &3"), ID_FILE_STATES_LOAD_SLOT3);\r
-       ADDMENUITEM(2, _("Slot &2"), ID_FILE_STATES_LOAD_SLOT2);\r
-       ADDMENUITEM(2, _("Slot &1"), ID_FILE_STATES_LOAD_SLOT1);\r
-       ADDMENUITEM(3, _("&Other..."), ID_FILE_STATES_SAVE_OTHER);\r
-       ADDMENUITEM(3, _("Slot &5"), ID_FILE_STATES_SAVE_SLOT5);\r
-       ADDMENUITEM(3, _("Slot &4"), ID_FILE_STATES_SAVE_SLOT4);\r
-       ADDMENUITEM(3, _("Slot &3"), ID_FILE_STATES_SAVE_SLOT3);\r
-       ADDMENUITEM(3, _("Slot &2"), ID_FILE_STATES_SAVE_SLOT2);\r
-       ADDMENUITEM(3, _("Slot &1"), ID_FILE_STATES_SAVE_SLOT1);\r
-\r
-       ADDSUBMENU(0, _("&Configuration"));\r
-       ADDMENUITEM(0, _("Cheat &Search..."), ID_CONFIGURATION_CHEATSEARCH);\r
-       ADDMENUITEM(0, _("Ch&eat Code..."), ID_CONFIGURATION_CHEATLIST);\r
-       ADDSEPARATOR(0);\r
-#ifdef ENABLE_NLS\r
-       ADDSUBMENUS(0, 1, _("&Language"));\r
-\r
-       if (langs != langs) free(langs);\r
-       langs = (_langs*)malloc(sizeof(_langs));\r
-       strcpy(langs[0].lang, "English");\r
-       InitLanguages(); i=1;\r
-       while ((lang = GetLanguageNext()) != NULL) {\r
-               langs = (_langs*)realloc(langs, sizeof(_langs)*(i+1));\r
-               strcpy(langs[i].lang, lang);\r
-               if (!strcmp(Config.Lang, lang)) {\r
-                       ADDMENUITEMC(1, ParseLang(langs[i].lang), ID_LANGS + i);\r
-               } else {\r
-                       ADDMENUITEM(1, ParseLang(langs[i].lang), ID_LANGS + i);\r
-               }\r
-               i++;\r
-       }\r
-       CloseLanguages();\r
-       langsMax = i;\r
-       if (!strcmp(Config.Lang, "English")) {\r
-               ADDMENUITEMC(1, _("English"), ID_LANGS);\r
-       } else {\r
-               ADDMENUITEM(1, _("English"), ID_LANGS);\r
-       }\r
-       ADDSEPARATOR(0);\r
-#endif\r
-       ADDMENUITEM(0, _("&Memory cards..."), ID_CONFIGURATION_MEMORYCARDMANAGER);\r
-       ADDMENUITEM(0, _("C&PU..."), ID_CONFIGURATION_CPU);\r
-       ADDSEPARATOR(0);\r
-       ADDMENUITEM(0, _("&NetPlay..."), ID_CONFIGURATION_NETPLAY);\r
-       ADDSEPARATOR(0);\r
-       ADDMENUITEM(0, _("&Controllers..."), ID_CONFIGURATION_CONTROLLERS);\r
-       ADDMENUITEM(0, _("CD-&ROM..."), ID_CONFIGURATION_CDROM);\r
-       ADDMENUITEM(0, _("&Sound..."), ID_CONFIGURATION_SOUND);\r
-       ADDMENUITEM(0, _("&Graphics..."), ID_CONFIGURATION_GRAPHICS);\r
-       ADDSEPARATOR(0);\r
-       ADDMENUITEM(0, _("&Plugins && Bios..."), ID_CONFIGURATION);\r
-\r
-       ADDSUBMENU(0, _("&Help"));\r
-       ADDMENUITEM(0, _("&About..."), ID_HELP_ABOUT);\r
-\r
-       if (CdromId[0] != '\0') {\r
-               EnableMenuItem(gApp.hMenu, ID_CONFIGURATION_NETPLAY, MF_BYCOMMAND | MF_GRAYED);\r
-               EnableMenuItem(gApp.hMenu, ID_CONFIGURATION_CONTROLLERS, MF_BYCOMMAND | MF_GRAYED);\r
-               EnableMenuItem(gApp.hMenu, ID_CONFIGURATION_CDROM, MF_BYCOMMAND | MF_GRAYED);\r
-               EnableMenuItem(gApp.hMenu, ID_CONFIGURATION_SOUND, MF_BYCOMMAND | MF_GRAYED);\r
-               EnableMenuItem(gApp.hMenu, ID_CONFIGURATION_GRAPHICS, MF_BYCOMMAND | MF_GRAYED);\r
-               EnableMenuItem(gApp.hMenu, ID_CONFIGURATION, MF_BYCOMMAND | MF_GRAYED);\r
-               if (!UsingIso()) {\r
-                       EnableMenuItem(gApp.hMenu, ID_EMULATOR_SWITCH_ISO, MF_BYCOMMAND | MF_GRAYED);\r
-               }\r
-       } else {\r
-               EnableMenuItem(gApp.hMenu, ID_EMULATOR_RESET, MF_BYCOMMAND | MF_GRAYED);\r
-               EnableMenuItem(gApp.hMenu, ID_EMULATOR_RUN, MF_BYCOMMAND | MF_GRAYED);\r
-               EnableMenuItem(gApp.hMenu, ID_EMULATOR_SWITCH_ISO, MF_BYCOMMAND | MF_GRAYED);\r
-               EnableMenuItem(gApp.hMenu, ID_FILE_STATES_LOAD_SLOT1, MF_BYCOMMAND | MF_GRAYED);\r
-               EnableMenuItem(gApp.hMenu, ID_FILE_STATES_LOAD_SLOT2, MF_BYCOMMAND | MF_GRAYED);\r
-               EnableMenuItem(gApp.hMenu, ID_FILE_STATES_LOAD_SLOT3, MF_BYCOMMAND | MF_GRAYED);\r
-               EnableMenuItem(gApp.hMenu, ID_FILE_STATES_LOAD_SLOT4, MF_BYCOMMAND | MF_GRAYED);\r
-               EnableMenuItem(gApp.hMenu, ID_FILE_STATES_LOAD_SLOT5, MF_BYCOMMAND | MF_GRAYED);\r
-               EnableMenuItem(gApp.hMenu, ID_FILE_STATES_LOAD_OTHER, MF_BYCOMMAND | MF_GRAYED);\r
-               EnableMenuItem(gApp.hMenu, ID_FILE_STATES_SAVE_SLOT1, MF_BYCOMMAND | MF_GRAYED);\r
-               EnableMenuItem(gApp.hMenu, ID_FILE_STATES_SAVE_SLOT2, MF_BYCOMMAND | MF_GRAYED);\r
-               EnableMenuItem(gApp.hMenu, ID_FILE_STATES_SAVE_SLOT3, MF_BYCOMMAND | MF_GRAYED);\r
-               EnableMenuItem(gApp.hMenu, ID_FILE_STATES_SAVE_SLOT4, MF_BYCOMMAND | MF_GRAYED);\r
-               EnableMenuItem(gApp.hMenu, ID_FILE_STATES_SAVE_SLOT5, MF_BYCOMMAND | MF_GRAYED);\r
-               EnableMenuItem(gApp.hMenu, ID_FILE_STATES_SAVE_OTHER, MF_BYCOMMAND | MF_GRAYED);\r
-               EnableMenuItem(gApp.hMenu, ID_CONFIGURATION_CHEATSEARCH, MF_BYCOMMAND | MF_GRAYED);\r
-       }\r
-}\r
-\r
-void CreateMainWindow(int nCmdShow) {\r
-       WNDCLASS wc;\r
-       HWND hWnd;\r
-\r
-       wc.lpszClassName = "PCSX Main";\r
-       wc.lpfnWndProc = MainWndProc;\r
-       wc.style = 0;\r
-       wc.hInstance = gApp.hInstance;\r
-       wc.hIcon = LoadIcon(gApp.hInstance, MAKEINTRESOURCE(IDI_APP_ICON));\r
-       wc.hCursor = NULL;\r
-       wc.hbrBackground = (HBRUSH)(COLOR_MENUTEXT);\r
-       wc.lpszMenuName = 0;\r
-       wc.cbClsExtra = 0;\r
-       wc.cbWndExtra = 0;\r
-\r
-       RegisterClass(&wc);\r
-\r
-       hWnd = CreateWindow("PCSX Main",\r
-                                               "PCSX",\r
-                                               WS_CAPTION | WS_POPUPWINDOW | WS_MINIMIZEBOX,\r
-                                               CW_USEDEFAULT,\r
-                                               0,\r
-                                               350,\r
-                                               220,\r
-                                               NULL,\r
-                                               NULL,\r
-                                               gApp.hInstance,\r
-                                               NULL);\r
-\r
-       gApp.hWnd = hWnd;\r
-       ResetMenuSlots();\r
-\r
-       CreateMainMenu();\r
-       SetMenu(gApp.hWnd, gApp.hMenu);\r
-\r
-       ShowWindow(hWnd, nCmdShow);\r
-}\r
-\r
-#ifdef ENABLE_NLS\r
-\r
-WIN32_FIND_DATA lFindData;\r
-HANDLE lFind;\r
-int lFirst;\r
-\r
-void InitLanguages() {\r
-       lFind = FindFirstFile("Langs\\*", &lFindData);\r
-       lFirst = 1;\r
-}\r
-\r
-char *GetLanguageNext() {\r
-       for (;;) {\r
-               if (!strcmp(lFindData.cFileName, ".")) {\r
-                       if (FindNextFile(lFind, &lFindData) == FALSE)\r
-                               return NULL;\r
-                       continue;\r
-               }\r
-               if (!strcmp(lFindData.cFileName, "..")) {\r
-                       if (FindNextFile(lFind, &lFindData) == FALSE)\r
-                               return NULL;\r
-                       continue;\r
-               }\r
-               break;\r
-       }\r
-       if (lFirst == 0) {\r
-               if (FindNextFile(lFind, &lFindData) == FALSE)\r
-                       return NULL;\r
-       } else lFirst = 0;\r
-       if (lFind==INVALID_HANDLE_VALUE) return NULL;\r
-\r
-       return lFindData.cFileName;\r
-}\r
-\r
-void CloseLanguages() {\r
-       if (lFind != INVALID_HANDLE_VALUE) FindClose(lFind);\r
-}\r
-\r
-void ChangeLanguage(char *lang) {\r
-       strcpy(Config.Lang, lang);\r
-       SaveConfig();\r
-       LoadConfig();\r
-}\r
-\r
-#endif\r
-\r
-int SysInit() {\r
-       if (Config.PsxOut) OpenConsole();\r
-\r
-       if (EmuInit() == -1) return -1;\r
-\r
-#ifdef EMU_LOG\r
-       emuLog = fopen("emuLog.txt","w");\r
-       setvbuf(emuLog, NULL,  _IONBF, 0);\r
-#endif\r
-\r
-       while (LoadPlugins(0) == -1) {\r
-               CancelQuit = 1;\r
-               ConfigurePlugins(gApp.hWnd);\r
-               CancelQuit = 0;\r
-       }\r
-       LoadMcds(Config.Mcd1, Config.Mcd2);\r
-\r
-       if (Config.Debug) StartDebugger();\r
-\r
-       return 0;\r
-}\r
-\r
-void SysReset() {\r
-       EmuReset();\r
-}\r
-\r
-void SysClose() {\r
-       EmuShutdown();\r
-       ReleasePlugins();\r
-\r
-       StopDebugger();\r
-\r
-       if (Config.PsxOut) CloseConsole();\r
-\r
-       if (emuLog != NULL) fclose(emuLog);\r
-}\r
-\r
-void SysPrintf(const char *fmt, ...) {\r
-       va_list list;\r
-       char msg[512];\r
-       DWORD tmp;\r
-\r
-       if (!hConsole) return;\r
-\r
-       va_start(list,fmt);\r
-       vsprintf(msg,fmt,list);\r
-       va_end(list);\r
-\r
-       WriteConsole(hConsole, msg, (DWORD)strlen(msg), &tmp, 0);\r
-#ifdef EMU_LOG\r
-#ifndef LOG_STDOUT\r
-       if (emuLog != NULL) fprintf(emuLog, "%s", msg);\r
-#endif\r
-#endif\r
-}\r
-\r
-void SysMessage(const char *fmt, ...) {\r
-       va_list list;\r
-       char tmp[512];\r
-\r
-       va_start(list,fmt);\r
-       vsprintf(tmp,fmt,list);\r
-       va_end(list);\r
-       MessageBox(0, tmp, _("Pcsx Msg"), 0);\r
-}\r
-\r
-static char *err = N_("Error Loading Symbol");\r
-static int errval;\r
-\r
-void *SysLoadLibrary(const char *lib) {\r
-       return LoadLibrary(lib);\r
-}\r
-\r
-void *SysLoadSym(void *lib, const char *sym) {\r
-       void *tmp = GetProcAddress((HINSTANCE)lib, sym);\r
-       if (tmp == NULL) errval = 1;\r
-       else errval = 0;\r
-       return tmp;\r
-}\r
-\r
-const char *SysLibError() {\r
-       if (errval) { errval = 0; return err; }\r
-       return NULL;\r
-}\r
-\r
-void SysCloseLibrary(void *lib) {\r
-       FreeLibrary((HINSTANCE)lib);\r
-}\r
-\r
-void SysUpdate() {\r
-       MSG msg;\r
-\r
-       while (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE)) {\r
-               TranslateMessage(&msg);\r
-               DispatchMessage(&msg);\r
-       }\r
-}\r
-\r
-void SysRunGui() {\r
-       RestoreWindow();\r
-       RunGui();\r
-}\r