+++ /dev/null
-/* 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