From ef79bbde537d6b9c745a7d86cb9df1d04c35590d Mon Sep 17 00:00:00 2001 From: PCSX* teams Date: Tue, 16 Nov 2010 14:15:22 +0200 Subject: pcsxr-1.9.92 --- win32/gui/ConfigurePlugins.c | 649 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 649 insertions(+) create mode 100644 win32/gui/ConfigurePlugins.c (limited to 'win32/gui/ConfigurePlugins.c') diff --git a/win32/gui/ConfigurePlugins.c b/win32/gui/ConfigurePlugins.c new file mode 100644 index 0000000..6f734a1 --- /dev/null +++ b/win32/gui/ConfigurePlugins.c @@ -0,0 +1,649 @@ +/* Pcsx - Pc Psx Emulator + * Copyright (C) 1999-2003 Pcsx Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307 USA + */ + +#include +#include +#include +#include "psxcommon.h" +#include "plugin.h" +#include "plugins.h" +#include "resource.h" +#include "Win32.h" + +#define QueryKeyV(name, var) \ + size = sizeof(DWORD); \ + if (RegQueryValueEx(myKey, name, 0, &type, (LPBYTE)&tmp, &size) != 0) { if (err) { RegCloseKey(myKey); return -1; } } \ + var = tmp; + +#define QueryKey(s, name, var) \ + size = s; \ + if (RegQueryValueEx(myKey, name, 0, &type, (LPBYTE)var, &size) != 0) { if (err) { RegCloseKey(myKey); return -1; } } + +#define SetKeyV(name, var) \ + tmp = var; \ + RegSetValueEx(myKey, name, 0, REG_DWORD, (LPBYTE)&tmp, sizeof(DWORD)); + +#define SetKey(name, var, s, t) \ + RegSetValueEx(myKey, name, 0, t, (LPBYTE)var, s); + +int LoadConfig() { + HKEY myKey; + DWORD type, size, tmp; + PcsxConfig *Conf = &Config; + int err; +#ifdef ENABLE_NLS + char text[256]; +#endif + + if (RegOpenKeyEx(HKEY_CURRENT_USER,cfgfile,0,KEY_ALL_ACCESS,&myKey)!=ERROR_SUCCESS) return -1; + + err = 1; + QueryKey(256, "Bios", Conf->Bios); + QueryKey(256, "Gpu", Conf->Gpu); + QueryKey(256, "Spu", Conf->Spu); + QueryKey(256, "Cdr", Conf->Cdr); + QueryKey(256, "Pad1", Conf->Pad1); + QueryKey(256, "Pad2", Conf->Pad2); + QueryKey(256, "Mcd1", Conf->Mcd1); + QueryKey(256, "Mcd2", Conf->Mcd2); + QueryKey(256, "PluginsDir", Conf->PluginsDir); + QueryKey(256, "BiosDir", Conf->BiosDir); + err = 0; + QueryKey(256, "Net", Conf->Net); + QueryKey(256, "Lang", Conf->Lang); + + QueryKeyV("Xa", Conf->Xa); + QueryKeyV("Sio", Conf->Sio); + QueryKeyV("Mdec", Conf->Mdec); + QueryKeyV("PsxAuto", Conf->PsxAuto); + QueryKeyV("Cdda", Conf->Cdda); + QueryKeyV("Debug", Conf->Debug); + QueryKeyV("PsxOut", Conf->PsxOut); + QueryKeyV("SpuIrq", Conf->SpuIrq); + QueryKeyV("RCntFix", Conf->RCntFix); + QueryKeyV("VSyncWA", Conf->VSyncWA); + + QueryKeyV("Cpu", Conf->Cpu); + QueryKeyV("PsxType", Conf->PsxType); + + if (Config.Cpu == CPU_DYNAREC) { + Config.Debug = 0; // don't enable debugger if using dynarec core + } + + RegCloseKey(myKey); + +#ifdef ENABLE_NLS + sprintf(text, "LANGUAGE=%s", Conf->Lang); + gettext_putenv(text); +#endif + + return 0; +} + +///////////////////////////////////////////////////////// + +void SaveConfig() { + HKEY myKey; + DWORD myDisp, tmp; + PcsxConfig *Conf = &Config; + + RegCreateKeyEx(HKEY_CURRENT_USER, cfgfile, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &myKey, &myDisp); + + SetKey("Bios", Conf->Bios, strlen(Conf->Bios), REG_SZ); + SetKey("Gpu", Conf->Gpu, strlen(Conf->Gpu), REG_SZ); + SetKey("Spu", Conf->Spu, strlen(Conf->Spu), REG_SZ); + SetKey("Cdr", Conf->Cdr, strlen(Conf->Cdr), REG_SZ); + SetKey("Pad1", Conf->Pad1, strlen(Conf->Pad1), REG_SZ); + SetKey("Pad2", Conf->Pad2, strlen(Conf->Pad2), REG_SZ); + SetKey("Net", Conf->Net, strlen(Conf->Net), REG_SZ); + SetKey("Mcd1", Conf->Mcd1, strlen(Conf->Mcd1), REG_SZ); + SetKey("Mcd2", Conf->Mcd2, strlen(Conf->Mcd2), REG_SZ); + SetKey("Lang", Conf->Lang, strlen(Conf->Lang), REG_SZ); + SetKey("PluginsDir", Conf->PluginsDir, strlen(Conf->PluginsDir), REG_SZ); + SetKey("BiosDir", Conf->BiosDir, strlen(Conf->BiosDir), REG_SZ); + + SetKeyV("Xa", Conf->Xa); + SetKeyV("Sio", Conf->Sio); + SetKeyV("Mdec", Conf->Mdec); + SetKeyV("PsxAuto", Conf->PsxAuto); + SetKeyV("Cdda", Conf->Cdda); + SetKeyV("Debug", Conf->Debug); + SetKeyV("PsxOut", Conf->PsxOut); + SetKeyV("SpuIrq", Conf->SpuIrq); + SetKeyV("RCntFix", Conf->RCntFix); + SetKeyV("VSyncWA", Conf->VSyncWA); + + SetKeyV("Cpu", Conf->Cpu); + SetKeyV("PsxType", Conf->PsxType); + + RegCloseKey(myKey); +} + +///////////////////////////////////////////////////////// + +#define ComboAddPlugin(hw, str) { \ + lp = (char *)malloc(strlen(FindData.cFileName)+8); \ + sprintf(lp, "%s", FindData.cFileName); \ + i = ComboBox_AddString(hw, tmpStr); \ + ComboBox_SetItemData(hw, i, lp); \ + if (stricmp(str, lp)==0) \ + ComboBox_SetCurSel(hw, i); \ +} + +BOOL OnConfigurePluginsDialog(HWND hW) { + WIN32_FIND_DATA FindData; + HANDLE Find; + HANDLE Lib; + PSEgetLibType PSE_GetLibType; + PSEgetLibName PSE_GetLibName; + PSEgetLibVersion PSE_GetLibVersion; + HWND hWC_GPU=GetDlgItem(hW,IDC_LISTGPU); + HWND hWC_SPU=GetDlgItem(hW,IDC_LISTSPU); + HWND hWC_CDR=GetDlgItem(hW,IDC_LISTCDR); + HWND hWC_PAD1=GetDlgItem(hW,IDC_LISTPAD1); + HWND hWC_PAD2=GetDlgItem(hW,IDC_LISTPAD2); + HWND hWC_BIOS=GetDlgItem(hW,IDC_LISTBIOS); + char tmpStr[256]; + char *lp; + int i; + + strcpy(tmpStr, Config.PluginsDir); + strcat(tmpStr, "*.dll"); + Find = FindFirstFile(tmpStr, &FindData); + + do { + if (Find == INVALID_HANDLE_VALUE) break; + sprintf(tmpStr,"%s%s", Config.PluginsDir, FindData.cFileName); + Lib = LoadLibrary(tmpStr); + if (Lib != NULL) { + PSE_GetLibType = (PSEgetLibType) GetProcAddress((HMODULE)Lib,"PSEgetLibType"); + PSE_GetLibName = (PSEgetLibName) GetProcAddress((HMODULE)Lib,"PSEgetLibName"); + PSE_GetLibVersion = (PSEgetLibVersion) GetProcAddress((HMODULE)Lib,"PSEgetLibVersion"); + + if (PSE_GetLibType != NULL && PSE_GetLibName != NULL && PSE_GetLibVersion != NULL) { + unsigned long version = PSE_GetLibVersion(); + long type; + + sprintf(tmpStr, "%s %d.%d", PSE_GetLibName(), (int)(version>>8)&0xff, (int)version&0xff); + type = PSE_GetLibType(); + if (type & PSE_LT_CDR) { + ComboAddPlugin(hWC_CDR, Config.Cdr); + } + + if (type & PSE_LT_SPU) { + ComboAddPlugin(hWC_SPU, Config.Spu); + } + + if (type & PSE_LT_GPU) { + ComboAddPlugin(hWC_GPU, Config.Gpu); + } + + if (type & PSE_LT_PAD) { + PADquery query; + + query = (PADquery)GetProcAddress((HMODULE)Lib, "PADquery"); + if (query != NULL) { + if (query() & 0x1) + ComboAddPlugin(hWC_PAD1, Config.Pad1); + if (query() & 0x2) + ComboAddPlugin(hWC_PAD2, Config.Pad2); + } else { // just a guess + ComboAddPlugin(hWC_PAD1, Config.Pad1); + } + } + } + } + } while (FindNextFile(Find,&FindData)); + + if (Find != INVALID_HANDLE_VALUE) FindClose(Find); + +// BIOS + + lp = (char *)malloc(strlen("HLE") + 1); + sprintf(lp, "HLE"); + i = ComboBox_AddString(hWC_BIOS, _("Simulate Psx Bios")); + ComboBox_SetItemData(hWC_BIOS, i, lp); + if (stricmp(Config.Bios, lp)==0) + ComboBox_SetCurSel(hWC_BIOS, i); + + strcpy(tmpStr, Config.BiosDir); + strcat(tmpStr, "*"); + Find=FindFirstFile(tmpStr, &FindData); + + do { + if (Find==INVALID_HANDLE_VALUE) break; + if (!strcmp(FindData.cFileName, ".")) continue; + if (!strcmp(FindData.cFileName, "..")) continue; + if (FindData.nFileSizeLow != 1024 * 512) continue; + lp = (char *)malloc(strlen(FindData.cFileName)+8); + sprintf(lp, "%s", (char *)FindData.cFileName); + i = ComboBox_AddString(hWC_BIOS, FindData.cFileName); + ComboBox_SetItemData(hWC_BIOS, i, lp); + if (Config.Bios[0]=='\0') { + ComboBox_SetCurSel(hWC_BIOS, i); + strcpy(Config.Bios, FindData.cFileName); + } else if (stricmp(Config.Bios, FindData.cFileName)==0) + ComboBox_SetCurSel(hWC_BIOS, i); + } while (FindNextFile(Find,&FindData)); + + if (Find!=INVALID_HANDLE_VALUE) FindClose(Find); + + if (ComboBox_GetCurSel(hWC_CDR ) == -1) + ComboBox_SetCurSel(hWC_CDR, 0); + if (ComboBox_GetCurSel(hWC_GPU ) == -1) + ComboBox_SetCurSel(hWC_GPU, 0); + if (ComboBox_GetCurSel(hWC_SPU ) == -1) + ComboBox_SetCurSel(hWC_SPU, 0); + if (ComboBox_GetCurSel(hWC_PAD1) == -1) + ComboBox_SetCurSel(hWC_PAD1, 0); + if (ComboBox_GetCurSel(hWC_PAD2) == -1) + ComboBox_SetCurSel(hWC_PAD2, 0); + if (ComboBox_GetCurSel(hWC_BIOS) == -1) + ComboBox_SetCurSel(hWC_BIOS, 0); + + return TRUE; +} + +#define CleanCombo(item) \ + hWC = GetDlgItem(hW, item); \ + iCnt = ComboBox_GetCount(hWC); \ + for (i=0; i + +int SelectPath(HWND hW, char *Title, char *Path) { + LPITEMIDLIST pidl; + BROWSEINFO bi; + char Buffer[256]; + + bi.hwndOwner = hW; + bi.pidlRoot = NULL; + bi.pszDisplayName = Buffer; + bi.lpszTitle = Title; + bi.ulFlags = BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS; + bi.lpfn = NULL; + bi.lParam = 0; + if ((pidl = SHBrowseForFolder(&bi)) != NULL) { + if (SHGetPathFromIDList(pidl, Path)) { + int len = strlen(Path); + + if (Path[len - 1] != '\\') { strcat(Path,"\\"); } + return 0; + } + } + return -1; +} + +void SetPluginsDir(HWND hW) { + char Path[256]; + + if (SelectPath(hW, _("Select Plugins Directory"), Path) == -1) return; + strcpy(Config.PluginsDir, Path); + CleanUpCombos(hW); + OnConfigurePluginsDialog(hW); +} + +void SetBiosDir(HWND hW) { + char Path[256]; + + if (SelectPath(hW, _("Select Bios Directory"), Path) == -1) return; + strcpy(Config.BiosDir, Path); + CleanUpCombos(hW); + OnConfigurePluginsDialog(hW); +} + +BOOL CALLBACK ConfigurePluginsDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) { + switch(uMsg) { + case WM_INITDIALOG: + SetWindowText(hW, _("Configuration")); + + Button_SetText(GetDlgItem(hW, IDOK), _("OK")); + Button_SetText(GetDlgItem(hW, IDCANCEL), _("Cancel")); + Static_SetText(GetDlgItem(hW, IDC_GRAPHICS), _("Graphics")); + Static_SetText(GetDlgItem(hW, IDC_FIRSTCONTROLLER), _("First Controller")); + Static_SetText(GetDlgItem(hW, IDC_SECONDCONTROLLER), _("Second Controller")); + Static_SetText(GetDlgItem(hW, IDC_SOUND), _("Sound")); + Static_SetText(GetDlgItem(hW, IDC_CDROM), _("Cdrom")); + Static_SetText(GetDlgItem(hW, IDC_BIOS), _("Bios")); + Button_SetText(GetDlgItem(hW, IDC_BIOSDIR), _("Set Bios Directory")); + Button_SetText(GetDlgItem(hW, IDC_PLUGINSDIR), _("Set Plugins Directory")); + Button_SetText(GetDlgItem(hW, IDC_CONFIGGPU), _("Configure...")); + Button_SetText(GetDlgItem(hW, IDC_TESTGPU), _("Test...")); + Button_SetText(GetDlgItem(hW, IDC_ABOUTGPU), _("About...")); + Button_SetText(GetDlgItem(hW, IDC_CONFIGSPU), _("Configure...")); + Button_SetText(GetDlgItem(hW, IDC_TESTSPU), _("Test...")); + Button_SetText(GetDlgItem(hW, IDC_ABOUTSPU), _("About...")); + Button_SetText(GetDlgItem(hW, IDC_CONFIGCDR), _("Configure...")); + Button_SetText(GetDlgItem(hW, IDC_TESTCDR), _("Test...")); + Button_SetText(GetDlgItem(hW, IDC_ABOUTCDR), _("About...")); + Button_SetText(GetDlgItem(hW, IDC_CONFIGPAD1), _("Configure...")); + Button_SetText(GetDlgItem(hW, IDC_TESTPAD1), _("Test...")); + Button_SetText(GetDlgItem(hW, IDC_ABOUTPAD1), _("About...")); + Button_SetText(GetDlgItem(hW, IDC_CONFIGPAD2), _("Configure...")); + Button_SetText(GetDlgItem(hW, IDC_TESTPAD2), _("Test...")); + Button_SetText(GetDlgItem(hW, IDC_ABOUTPAD2), _("About...")); + + return OnConfigurePluginsDialog(hW); + + case WM_COMMAND: + switch(LOWORD(wParam)) { + case IDC_CONFIGGPU: ConfigureGPU(hW); return TRUE; + case IDC_CONFIGSPU: ConfigureSPU(hW); return TRUE; + case IDC_CONFIGCDR: ConfigureCDR(hW); return TRUE; + case IDC_CONFIGPAD1: ConfigurePAD1(hW); return TRUE; + case IDC_CONFIGPAD2: ConfigurePAD2(hW); return TRUE; + + case IDC_TESTGPU: TestGPU(hW); return TRUE; + case IDC_TESTSPU: TestSPU(hW); return TRUE; + case IDC_TESTCDR: TestCDR(hW); return TRUE; + case IDC_TESTPAD1: TestPAD1(hW); return TRUE; + case IDC_TESTPAD2: TestPAD2(hW); return TRUE; + + case IDC_ABOUTGPU: AboutGPU(hW); return TRUE; + case IDC_ABOUTSPU: AboutSPU(hW); return TRUE; + case IDC_ABOUTCDR: AboutCDR(hW); return TRUE; + case IDC_ABOUTPAD1: AboutPAD1(hW); return TRUE; + case IDC_ABOUTPAD2: AboutPAD2(hW); return TRUE; + + case IDC_PLUGINSDIR: SetPluginsDir(hW); return TRUE; + case IDC_BIOSDIR: SetBiosDir(hW); return TRUE; + + case IDCANCEL: + OnCancel(hW); + if (CancelQuit) { + SysClose(); exit(1); + } + return TRUE; + case IDOK: + OnOK(hW); + return TRUE; + } + } + return FALSE; +} + + +void ConfigurePlugins(HWND hWnd) { + DialogBox(gApp.hInstance, + MAKEINTRESOURCE(IDD_CONFIG), + hWnd, + (DLGPROC)ConfigurePluginsDlgProc); +} + +// NetPlay Config Dialog + +BOOL OnConfigureNetPlayDialog(HWND hW) { + WIN32_FIND_DATA FindData; + HANDLE Find; + HANDLE Lib; + PSEgetLibType PSE_GetLibType; + PSEgetLibName PSE_GetLibName; + PSEgetLibVersion PSE_GetLibVersion; + HWND hWC_NET=GetDlgItem(hW,IDC_LISTNET); + char tmpStr[256]; + char *lp; + int i; + + strcpy(tmpStr, Config.PluginsDir); + strcat(tmpStr, "*.dll"); + Find = FindFirstFile(tmpStr, &FindData); + + lp = (char *)malloc(strlen("Disabled")+8); + sprintf(lp, "Disabled"); + i = ComboBox_AddString(hWC_NET, "Disabled"); + ComboBox_SetItemData(hWC_NET, i, lp); + ComboBox_SetCurSel(hWC_NET, 0); + + do { + if (Find==INVALID_HANDLE_VALUE) break; + sprintf(tmpStr,"%s%s", Config.PluginsDir, FindData.cFileName); + Lib = LoadLibrary(tmpStr); + if (Lib!=NULL) { + PSE_GetLibType = (PSEgetLibType) GetProcAddress((HMODULE)Lib,"PSEgetLibType"); + PSE_GetLibName = (PSEgetLibName) GetProcAddress((HMODULE)Lib,"PSEgetLibName"); + PSE_GetLibVersion = (PSEgetLibVersion) GetProcAddress((HMODULE)Lib,"PSEgetLibVersion"); + + if (PSE_GetLibType != NULL && PSE_GetLibName != NULL && PSE_GetLibVersion != NULL) { + unsigned long version = PSE_GetLibVersion(); + long type; + + sprintf(tmpStr, "%s %d.%d", PSE_GetLibName(), (int)(version>>8)&0xff, (int)version&0xff); + type = PSE_GetLibType(); + if (type & PSE_LT_NET && ((version >> 16) == 2)) { + ComboAddPlugin(hWC_NET, Config.Net); + } + } + } + } while (FindNextFile(Find,&FindData)); + + if (Find!=INVALID_HANDLE_VALUE) FindClose(Find); + + return TRUE; +} + +BOOL CALLBACK ConfigureNetPlayDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) { + int i,iCnt;HWND hWC;char * lp; + + switch(uMsg) { + case WM_INITDIALOG: + SetWindowText(hW, _("NetPlay Configuration")); + + Button_SetText(GetDlgItem(hW, IDOK), _("OK")); + Button_SetText(GetDlgItem(hW, IDCANCEL), _("Cancel")); + Static_SetText(GetDlgItem(hW, IDC_NETPLAY), _("NetPlay")); + Button_SetText(GetDlgItem(hW, IDC_CONFIGNET), _("Configure...")); + Button_SetText(GetDlgItem(hW, IDC_TESTNET), _("Test...")); + Button_SetText(GetDlgItem(hW, IDC_ABOUTNET), _("About...")); + Static_SetText(GetDlgItem(hW, IDC_NETPLAYNOTE), _("Note: The NetPlay Plugin Directory should be the same as the other Plugins.")); + + OnConfigureNetPlayDialog(hW); + return TRUE; + + case WM_COMMAND: { + switch (LOWORD(wParam)) { + case IDC_CONFIGNET: ConfigureNET(hW); return TRUE; + case IDC_TESTNET: TestNET(hW); return TRUE; + case IDC_ABOUTNET: AboutNET(hW); return TRUE; + + case IDCANCEL: + CleanCombo(IDC_LISTNET); + EndDialog(hW,FALSE); + return TRUE; + + case IDOK: + strcpy(Config.Net, GetSelDLL(hW, IDC_LISTNET)); + SaveConfig(); + CleanUpCombos(hW); + LoadPlugins(); + CleanCombo(IDC_LISTNET); + EndDialog(hW,TRUE); + return TRUE; + } + } + } + + return FALSE; +} -- cgit v1.2.3