1 /* Pcsx - Pc Psx Emulator
\r
2 * Copyright (C) 1999-2003 Pcsx Team
\r
4 * This program is free software; you can redistribute it and/or modify
\r
5 * it under the terms of the GNU General Public License as published by
\r
6 * the Free Software Foundation; either version 2 of the License, or
\r
7 * (at your option) any later version.
\r
9 * This program is distributed in the hope that it will be useful,
\r
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
12 * GNU General Public License for more details.
\r
14 * You should have received a copy of the GNU General Public License
\r
15 * along with this program; if not, write to the Free Software
\r
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307 USA
\r
19 #include <windows.h>
\r
20 #include <windowsx.h>
\r
22 #include "psxcommon.h"
\r
24 #include "plugins.h"
\r
25 #include "resource.h"
\r
28 #define QueryKeyV(name, var) \
\r
29 size = sizeof(DWORD); \
\r
30 if (RegQueryValueEx(myKey, name, 0, &type, (LPBYTE)&tmp, &size) != 0) { if (err) { RegCloseKey(myKey); return -1; } } \
\r
33 #define QueryKey(s, name, var) \
\r
35 if (RegQueryValueEx(myKey, name, 0, &type, (LPBYTE)var, &size) != 0) { if (err) { RegCloseKey(myKey); return -1; } }
\r
37 #define SetKeyV(name, var) \
\r
39 RegSetValueEx(myKey, name, 0, REG_DWORD, (LPBYTE)&tmp, sizeof(DWORD));
\r
41 #define SetKey(name, var, s, t) \
\r
42 RegSetValueEx(myKey, name, 0, t, (LPBYTE)var, s);
\r
46 DWORD type, size, tmp;
\r
47 PcsxConfig *Conf = &Config;
\r
53 if (RegOpenKeyEx(HKEY_CURRENT_USER,cfgfile,0,KEY_ALL_ACCESS,&myKey)!=ERROR_SUCCESS) return -1;
\r
56 QueryKey(256, "Bios", Conf->Bios);
\r
57 QueryKey(256, "Gpu", Conf->Gpu);
\r
58 QueryKey(256, "Spu", Conf->Spu);
\r
59 QueryKey(256, "Cdr", Conf->Cdr);
\r
60 QueryKey(256, "Pad1", Conf->Pad1);
\r
61 QueryKey(256, "Pad2", Conf->Pad2);
\r
62 QueryKey(256, "Mcd1", Conf->Mcd1);
\r
63 QueryKey(256, "Mcd2", Conf->Mcd2);
\r
64 QueryKey(256, "PluginsDir", Conf->PluginsDir);
\r
65 QueryKey(256, "BiosDir", Conf->BiosDir);
\r
67 QueryKey(256, "Net", Conf->Net);
\r
68 QueryKey(256, "Lang", Conf->Lang);
\r
70 QueryKeyV("Xa", Conf->Xa);
\r
71 QueryKeyV("Sio", Conf->Sio);
\r
72 QueryKeyV("Mdec", Conf->Mdec);
\r
73 QueryKeyV("PsxAuto", Conf->PsxAuto);
\r
74 QueryKeyV("Cdda", Conf->Cdda);
\r
75 QueryKeyV("Debug", Conf->Debug);
\r
76 QueryKeyV("PsxOut", Conf->PsxOut);
\r
77 QueryKeyV("SpuIrq", Conf->SpuIrq);
\r
78 QueryKeyV("RCntFix", Conf->RCntFix);
\r
79 QueryKeyV("VSyncWA", Conf->VSyncWA);
\r
81 QueryKeyV("Cpu", Conf->Cpu);
\r
82 QueryKeyV("PsxType", Conf->PsxType);
\r
84 if (Config.Cpu == CPU_DYNAREC) {
\r
85 Config.Debug = 0; // don't enable debugger if using dynarec core
\r
91 sprintf(text, "LANGUAGE=%s", Conf->Lang);
\r
92 gettext_putenv(text);
\r
98 /////////////////////////////////////////////////////////
\r
100 void SaveConfig() {
\r
103 PcsxConfig *Conf = &Config;
\r
105 RegCreateKeyEx(HKEY_CURRENT_USER, cfgfile, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &myKey, &myDisp);
\r
107 SetKey("Bios", Conf->Bios, strlen(Conf->Bios), REG_SZ);
\r
108 SetKey("Gpu", Conf->Gpu, strlen(Conf->Gpu), REG_SZ);
\r
109 SetKey("Spu", Conf->Spu, strlen(Conf->Spu), REG_SZ);
\r
110 SetKey("Cdr", Conf->Cdr, strlen(Conf->Cdr), REG_SZ);
\r
111 SetKey("Pad1", Conf->Pad1, strlen(Conf->Pad1), REG_SZ);
\r
112 SetKey("Pad2", Conf->Pad2, strlen(Conf->Pad2), REG_SZ);
\r
113 SetKey("Net", Conf->Net, strlen(Conf->Net), REG_SZ);
\r
114 SetKey("Mcd1", Conf->Mcd1, strlen(Conf->Mcd1), REG_SZ);
\r
115 SetKey("Mcd2", Conf->Mcd2, strlen(Conf->Mcd2), REG_SZ);
\r
116 SetKey("Lang", Conf->Lang, strlen(Conf->Lang), REG_SZ);
\r
117 SetKey("PluginsDir", Conf->PluginsDir, strlen(Conf->PluginsDir), REG_SZ);
\r
118 SetKey("BiosDir", Conf->BiosDir, strlen(Conf->BiosDir), REG_SZ);
\r
120 SetKeyV("Xa", Conf->Xa);
\r
121 SetKeyV("Sio", Conf->Sio);
\r
122 SetKeyV("Mdec", Conf->Mdec);
\r
123 SetKeyV("PsxAuto", Conf->PsxAuto);
\r
124 SetKeyV("Cdda", Conf->Cdda);
\r
125 SetKeyV("Debug", Conf->Debug);
\r
126 SetKeyV("PsxOut", Conf->PsxOut);
\r
127 SetKeyV("SpuIrq", Conf->SpuIrq);
\r
128 SetKeyV("RCntFix", Conf->RCntFix);
\r
129 SetKeyV("VSyncWA", Conf->VSyncWA);
\r
131 SetKeyV("Cpu", Conf->Cpu);
\r
132 SetKeyV("PsxType", Conf->PsxType);
\r
134 RegCloseKey(myKey);
\r
137 /////////////////////////////////////////////////////////
\r
139 #define ComboAddPlugin(hw, str) { \
\r
140 lp = (char *)malloc(strlen(FindData.cFileName)+8); \
\r
141 sprintf(lp, "%s", FindData.cFileName); \
\r
142 i = ComboBox_AddString(hw, tmpStr); \
\r
143 ComboBox_SetItemData(hw, i, lp); \
\r
144 if (stricmp(str, lp)==0) \
\r
145 ComboBox_SetCurSel(hw, i); \
\r
148 BOOL OnConfigurePluginsDialog(HWND hW) {
\r
149 WIN32_FIND_DATA FindData;
\r
152 PSEgetLibType PSE_GetLibType;
\r
153 PSEgetLibName PSE_GetLibName;
\r
154 PSEgetLibVersion PSE_GetLibVersion;
\r
155 HWND hWC_GPU=GetDlgItem(hW,IDC_LISTGPU);
\r
156 HWND hWC_SPU=GetDlgItem(hW,IDC_LISTSPU);
\r
157 HWND hWC_CDR=GetDlgItem(hW,IDC_LISTCDR);
\r
158 HWND hWC_PAD1=GetDlgItem(hW,IDC_LISTPAD1);
\r
159 HWND hWC_PAD2=GetDlgItem(hW,IDC_LISTPAD2);
\r
160 HWND hWC_BIOS=GetDlgItem(hW,IDC_LISTBIOS);
\r
165 strcpy(tmpStr, Config.PluginsDir);
\r
166 strcat(tmpStr, "*.dll");
\r
167 Find = FindFirstFile(tmpStr, &FindData);
\r
170 if (Find == INVALID_HANDLE_VALUE) break;
\r
171 sprintf(tmpStr,"%s%s", Config.PluginsDir, FindData.cFileName);
\r
172 Lib = LoadLibrary(tmpStr);
\r
174 PSE_GetLibType = (PSEgetLibType) GetProcAddress((HMODULE)Lib,"PSEgetLibType");
\r
175 PSE_GetLibName = (PSEgetLibName) GetProcAddress((HMODULE)Lib,"PSEgetLibName");
\r
176 PSE_GetLibVersion = (PSEgetLibVersion) GetProcAddress((HMODULE)Lib,"PSEgetLibVersion");
\r
178 if (PSE_GetLibType != NULL && PSE_GetLibName != NULL && PSE_GetLibVersion != NULL) {
\r
179 unsigned long version = PSE_GetLibVersion();
\r
182 sprintf(tmpStr, "%s %d.%d", PSE_GetLibName(), (int)(version>>8)&0xff, (int)version&0xff);
\r
183 type = PSE_GetLibType();
\r
184 if (type & PSE_LT_CDR) {
\r
185 ComboAddPlugin(hWC_CDR, Config.Cdr);
\r
188 if (type & PSE_LT_SPU) {
\r
189 ComboAddPlugin(hWC_SPU, Config.Spu);
\r
192 if (type & PSE_LT_GPU) {
\r
193 ComboAddPlugin(hWC_GPU, Config.Gpu);
\r
196 if (type & PSE_LT_PAD) {
\r
199 query = (PADquery)GetProcAddress((HMODULE)Lib, "PADquery");
\r
200 if (query != NULL) {
\r
202 ComboAddPlugin(hWC_PAD1, Config.Pad1);
\r
204 ComboAddPlugin(hWC_PAD2, Config.Pad2);
\r
205 } else { // just a guess
\r
206 ComboAddPlugin(hWC_PAD1, Config.Pad1);
\r
211 } while (FindNextFile(Find,&FindData));
\r
213 if (Find != INVALID_HANDLE_VALUE) FindClose(Find);
\r
217 lp = (char *)malloc(strlen("HLE") + 1);
\r
218 sprintf(lp, "HLE");
\r
219 i = ComboBox_AddString(hWC_BIOS, _("Simulate Psx Bios"));
\r
220 ComboBox_SetItemData(hWC_BIOS, i, lp);
\r
221 if (stricmp(Config.Bios, lp)==0)
\r
222 ComboBox_SetCurSel(hWC_BIOS, i);
\r
224 strcpy(tmpStr, Config.BiosDir);
\r
225 strcat(tmpStr, "*");
\r
226 Find=FindFirstFile(tmpStr, &FindData);
\r
229 if (Find==INVALID_HANDLE_VALUE) break;
\r
230 if (!strcmp(FindData.cFileName, ".")) continue;
\r
231 if (!strcmp(FindData.cFileName, "..")) continue;
\r
232 if (FindData.nFileSizeLow != 1024 * 512) continue;
\r
233 lp = (char *)malloc(strlen(FindData.cFileName)+8);
\r
234 sprintf(lp, "%s", (char *)FindData.cFileName);
\r
235 i = ComboBox_AddString(hWC_BIOS, FindData.cFileName);
\r
236 ComboBox_SetItemData(hWC_BIOS, i, lp);
\r
237 if (Config.Bios[0]=='\0') {
\r
238 ComboBox_SetCurSel(hWC_BIOS, i);
\r
239 strcpy(Config.Bios, FindData.cFileName);
\r
240 } else if (stricmp(Config.Bios, FindData.cFileName)==0)
\r
241 ComboBox_SetCurSel(hWC_BIOS, i);
\r
242 } while (FindNextFile(Find,&FindData));
\r
244 if (Find!=INVALID_HANDLE_VALUE) FindClose(Find);
\r
246 if (ComboBox_GetCurSel(hWC_CDR ) == -1)
\r
247 ComboBox_SetCurSel(hWC_CDR, 0);
\r
248 if (ComboBox_GetCurSel(hWC_GPU ) == -1)
\r
249 ComboBox_SetCurSel(hWC_GPU, 0);
\r
250 if (ComboBox_GetCurSel(hWC_SPU ) == -1)
\r
251 ComboBox_SetCurSel(hWC_SPU, 0);
\r
252 if (ComboBox_GetCurSel(hWC_PAD1) == -1)
\r
253 ComboBox_SetCurSel(hWC_PAD1, 0);
\r
254 if (ComboBox_GetCurSel(hWC_PAD2) == -1)
\r
255 ComboBox_SetCurSel(hWC_PAD2, 0);
\r
256 if (ComboBox_GetCurSel(hWC_BIOS) == -1)
\r
257 ComboBox_SetCurSel(hWC_BIOS, 0);
\r
262 #define CleanCombo(item) \
\r
263 hWC = GetDlgItem(hW, item); \
\r
264 iCnt = ComboBox_GetCount(hWC); \
\r
265 for (i=0; i<iCnt; i++) { \
\r
266 lp = (char *)ComboBox_GetItemData(hWC, i); \
\r
267 if (lp) free(lp); \
\r
269 ComboBox_ResetContent(hWC);
\r
271 void CleanUpCombos(HWND hW) {
\r
272 int i,iCnt;HWND hWC;char * lp;
\r
274 CleanCombo(IDC_LISTGPU);
\r
275 CleanCombo(IDC_LISTSPU);
\r
276 CleanCombo(IDC_LISTCDR);
\r
277 CleanCombo(IDC_LISTPAD1);
\r
278 CleanCombo(IDC_LISTPAD2);
\r
279 CleanCombo(IDC_LISTBIOS);
\r
282 void OnCancel(HWND hW) {
\r
284 EndDialog(hW,FALSE);
\r
287 char *GetSelDLL(HWND hW,int id) {
\r
288 HWND hWC = GetDlgItem(hW,id);
\r
290 iSel = ComboBox_GetCurSel(hWC);
\r
291 if (iSel<0) return NULL;
\r
292 return (char *)ComboBox_GetItemData(hWC, iSel);
\r
295 void OnOK(HWND hW) {
\r
296 char *gpuDLL=GetSelDLL(hW,IDC_LISTGPU);
\r
297 char *spuDLL=GetSelDLL(hW,IDC_LISTSPU);
\r
298 char *cdrDLL=GetSelDLL(hW,IDC_LISTCDR);
\r
299 char *pad1DLL=GetSelDLL(hW,IDC_LISTPAD1);
\r
300 char *pad2DLL=GetSelDLL(hW,IDC_LISTPAD2);
\r
301 char *biosFILE=GetSelDLL(hW,IDC_LISTBIOS);
\r
303 if (gpuDLL == NULL || spuDLL == NULL || cdrDLL == NULL || pad1DLL == NULL ||
\r
304 pad2DLL == NULL || biosFILE == NULL) {
\r
305 MessageBox(hW, _("Configuration not OK!"), _("Error"), MB_OK | MB_ICONERROR);
\r
309 strcpy(Config.Bios, biosFILE);
\r
310 strcpy(Config.Gpu, gpuDLL);
\r
311 strcpy(Config.Spu, spuDLL);
\r
312 strcpy(Config.Cdr, cdrDLL);
\r
313 strcpy(Config.Pad1, pad1DLL);
\r
314 strcpy(Config.Pad2, pad2DLL);
\r
323 EndDialog(hW,TRUE);
\r
327 #define ConfPlugin(src, confs, name) \
\r
330 char * pDLL = GetSelDLL(hW, confs); \
\r
332 if(pDLL==NULL) return; \
\r
333 strcpy(file, Config.PluginsDir); \
\r
334 strcat(file, pDLL); \
\r
335 drv = SysLoadLibrary(file); \
\r
336 if (drv == NULL) return; \
\r
337 conf = (src) SysLoadSym(drv, name); \
\r
338 if (SysLibError() == NULL) conf(); \
\r
339 SysCloseLibrary(drv);
\r
341 void ConfigureGPU(HWND hW) {
\r
342 ConfPlugin(GPUconfigure, IDC_LISTGPU, "GPUconfigure");
\r
345 void ConfigureSPU(HWND hW) {
\r
346 ConfPlugin(SPUconfigure, IDC_LISTSPU, "SPUconfigure");
\r
349 void ConfigureCDR(HWND hW) {
\r
350 ConfPlugin(CDRconfigure, IDC_LISTCDR, "CDRconfigure");
\r
353 void ConfigureNET(HWND hW) {
\r
354 ConfPlugin(NETconfigure, IDC_LISTNET, "NETconfigure");
\r
357 void ConfigurePAD1(HWND hW) {
\r
358 ConfPlugin(PADconfigure, IDC_LISTPAD1, "PADconfigure");
\r
361 void ConfigurePAD2(HWND hW) {
\r
362 ConfPlugin(PADconfigure, IDC_LISTPAD2, "PADconfigure");
\r
366 void AboutGPU(HWND hW) {
\r
367 ConfPlugin(GPUabout, IDC_LISTGPU, "GPUabout");
\r
370 void AboutSPU(HWND hW) {
\r
371 ConfPlugin(SPUabout, IDC_LISTSPU, "SPUabout");
\r
374 void AboutCDR(HWND hW) {
\r
375 ConfPlugin(CDRabout, IDC_LISTCDR, "CDRabout");
\r
378 void AboutNET(HWND hW) {
\r
379 ConfPlugin(NETabout, IDC_LISTNET, "NETabout");
\r
382 void AboutPAD1(HWND hW) {
\r
383 ConfPlugin(PADabout, IDC_LISTPAD1, "PADabout");
\r
386 void AboutPAD2(HWND hW) {
\r
387 ConfPlugin(PADabout, IDC_LISTPAD2, "PADabout");
\r
391 #define TestPlugin(src, confs, name) \
\r
395 char * pDLL = GetSelDLL(hW, confs); \
\r
397 if (pDLL== NULL) return; \
\r
398 strcpy(file, Config.PluginsDir); \
\r
399 strcat(file, pDLL); \
\r
400 drv = SysLoadLibrary(file); \
\r
401 if (drv == NULL) return; \
\r
402 conf = (src) SysLoadSym(drv, name); \
\r
403 if (SysLibError() == NULL) { \
\r
406 SysMessage(_("This plugin reports that should work correctly")); \
\r
407 else SysMessage(_("This plugin reports that should not work correctly")); \
\r
409 SysCloseLibrary(drv);
\r
411 void TestGPU(HWND hW) {
\r
412 TestPlugin(GPUtest, IDC_LISTGPU, "GPUtest");
\r
415 void TestSPU(HWND hW) {
\r
416 TestPlugin(SPUtest, IDC_LISTSPU, "SPUtest");
\r
419 void TestCDR(HWND hW) {
\r
420 TestPlugin(CDRtest, IDC_LISTCDR, "CDRtest");
\r
423 void TestNET(HWND hW) {
\r
424 TestPlugin(NETtest, IDC_LISTNET, "NETtest");
\r
427 void TestPAD1(HWND hW) {
\r
428 TestPlugin(PADtest, IDC_LISTPAD1, "PADtest");
\r
431 void TestPAD2(HWND hW) {
\r
432 TestPlugin(PADtest, IDC_LISTPAD2, "PADtest");
\r
435 #include <shlobj.h>
\r
437 int SelectPath(HWND hW, char *Title, char *Path) {
\r
443 bi.pidlRoot = NULL;
\r
444 bi.pszDisplayName = Buffer;
\r
445 bi.lpszTitle = Title;
\r
446 bi.ulFlags = BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;
\r
449 if ((pidl = SHBrowseForFolder(&bi)) != NULL) {
\r
450 if (SHGetPathFromIDList(pidl, Path)) {
\r
451 int len = strlen(Path);
\r
453 if (Path[len - 1] != '\\') { strcat(Path,"\\"); }
\r
460 void SetPluginsDir(HWND hW) {
\r
463 if (SelectPath(hW, _("Select Plugins Directory"), Path) == -1) return;
\r
464 strcpy(Config.PluginsDir, Path);
\r
466 OnConfigurePluginsDialog(hW);
\r
469 void SetBiosDir(HWND hW) {
\r
472 if (SelectPath(hW, _("Select Bios Directory"), Path) == -1) return;
\r
473 strcpy(Config.BiosDir, Path);
\r
475 OnConfigurePluginsDialog(hW);
\r
478 BOOL CALLBACK ConfigurePluginsDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) {
\r
480 case WM_INITDIALOG:
\r
481 SetWindowText(hW, _("Configuration"));
\r
483 Button_SetText(GetDlgItem(hW, IDOK), _("OK"));
\r
484 Button_SetText(GetDlgItem(hW, IDCANCEL), _("Cancel"));
\r
485 Static_SetText(GetDlgItem(hW, IDC_GRAPHICS), _("Graphics"));
\r
486 Static_SetText(GetDlgItem(hW, IDC_FIRSTCONTROLLER), _("First Controller"));
\r
487 Static_SetText(GetDlgItem(hW, IDC_SECONDCONTROLLER), _("Second Controller"));
\r
488 Static_SetText(GetDlgItem(hW, IDC_SOUND), _("Sound"));
\r
489 Static_SetText(GetDlgItem(hW, IDC_CDROM), _("Cdrom"));
\r
490 Static_SetText(GetDlgItem(hW, IDC_BIOS), _("Bios"));
\r
491 Button_SetText(GetDlgItem(hW, IDC_BIOSDIR), _("Set Bios Directory"));
\r
492 Button_SetText(GetDlgItem(hW, IDC_PLUGINSDIR), _("Set Plugins Directory"));
\r
493 Button_SetText(GetDlgItem(hW, IDC_CONFIGGPU), _("Configure..."));
\r
494 Button_SetText(GetDlgItem(hW, IDC_TESTGPU), _("Test..."));
\r
495 Button_SetText(GetDlgItem(hW, IDC_ABOUTGPU), _("About..."));
\r
496 Button_SetText(GetDlgItem(hW, IDC_CONFIGSPU), _("Configure..."));
\r
497 Button_SetText(GetDlgItem(hW, IDC_TESTSPU), _("Test..."));
\r
498 Button_SetText(GetDlgItem(hW, IDC_ABOUTSPU), _("About..."));
\r
499 Button_SetText(GetDlgItem(hW, IDC_CONFIGCDR), _("Configure..."));
\r
500 Button_SetText(GetDlgItem(hW, IDC_TESTCDR), _("Test..."));
\r
501 Button_SetText(GetDlgItem(hW, IDC_ABOUTCDR), _("About..."));
\r
502 Button_SetText(GetDlgItem(hW, IDC_CONFIGPAD1), _("Configure..."));
\r
503 Button_SetText(GetDlgItem(hW, IDC_TESTPAD1), _("Test..."));
\r
504 Button_SetText(GetDlgItem(hW, IDC_ABOUTPAD1), _("About..."));
\r
505 Button_SetText(GetDlgItem(hW, IDC_CONFIGPAD2), _("Configure..."));
\r
506 Button_SetText(GetDlgItem(hW, IDC_TESTPAD2), _("Test..."));
\r
507 Button_SetText(GetDlgItem(hW, IDC_ABOUTPAD2), _("About..."));
\r
509 return OnConfigurePluginsDialog(hW);
\r
512 switch(LOWORD(wParam)) {
\r
513 case IDC_CONFIGGPU: ConfigureGPU(hW); return TRUE;
\r
514 case IDC_CONFIGSPU: ConfigureSPU(hW); return TRUE;
\r
515 case IDC_CONFIGCDR: ConfigureCDR(hW); return TRUE;
\r
516 case IDC_CONFIGPAD1: ConfigurePAD1(hW); return TRUE;
\r
517 case IDC_CONFIGPAD2: ConfigurePAD2(hW); return TRUE;
\r
519 case IDC_TESTGPU: TestGPU(hW); return TRUE;
\r
520 case IDC_TESTSPU: TestSPU(hW); return TRUE;
\r
521 case IDC_TESTCDR: TestCDR(hW); return TRUE;
\r
522 case IDC_TESTPAD1: TestPAD1(hW); return TRUE;
\r
523 case IDC_TESTPAD2: TestPAD2(hW); return TRUE;
\r
525 case IDC_ABOUTGPU: AboutGPU(hW); return TRUE;
\r
526 case IDC_ABOUTSPU: AboutSPU(hW); return TRUE;
\r
527 case IDC_ABOUTCDR: AboutCDR(hW); return TRUE;
\r
528 case IDC_ABOUTPAD1: AboutPAD1(hW); return TRUE;
\r
529 case IDC_ABOUTPAD2: AboutPAD2(hW); return TRUE;
\r
531 case IDC_PLUGINSDIR: SetPluginsDir(hW); return TRUE;
\r
532 case IDC_BIOSDIR: SetBiosDir(hW); return TRUE;
\r
537 SysClose(); exit(1);
\r
549 void ConfigurePlugins(HWND hWnd) {
\r
550 DialogBox(gApp.hInstance,
\r
551 MAKEINTRESOURCE(IDD_CONFIG),
\r
553 (DLGPROC)ConfigurePluginsDlgProc);
\r
556 // NetPlay Config Dialog
\r
558 BOOL OnConfigureNetPlayDialog(HWND hW) {
\r
559 WIN32_FIND_DATA FindData;
\r
562 PSEgetLibType PSE_GetLibType;
\r
563 PSEgetLibName PSE_GetLibName;
\r
564 PSEgetLibVersion PSE_GetLibVersion;
\r
565 HWND hWC_NET=GetDlgItem(hW,IDC_LISTNET);
\r
570 strcpy(tmpStr, Config.PluginsDir);
\r
571 strcat(tmpStr, "*.dll");
\r
572 Find = FindFirstFile(tmpStr, &FindData);
\r
574 lp = (char *)malloc(strlen("Disabled")+8);
\r
575 sprintf(lp, "Disabled");
\r
576 i = ComboBox_AddString(hWC_NET, "Disabled");
\r
577 ComboBox_SetItemData(hWC_NET, i, lp);
\r
578 ComboBox_SetCurSel(hWC_NET, 0);
\r
581 if (Find==INVALID_HANDLE_VALUE) break;
\r
582 sprintf(tmpStr,"%s%s", Config.PluginsDir, FindData.cFileName);
\r
583 Lib = LoadLibrary(tmpStr);
\r
585 PSE_GetLibType = (PSEgetLibType) GetProcAddress((HMODULE)Lib,"PSEgetLibType");
\r
586 PSE_GetLibName = (PSEgetLibName) GetProcAddress((HMODULE)Lib,"PSEgetLibName");
\r
587 PSE_GetLibVersion = (PSEgetLibVersion) GetProcAddress((HMODULE)Lib,"PSEgetLibVersion");
\r
589 if (PSE_GetLibType != NULL && PSE_GetLibName != NULL && PSE_GetLibVersion != NULL) {
\r
590 unsigned long version = PSE_GetLibVersion();
\r
593 sprintf(tmpStr, "%s %d.%d", PSE_GetLibName(), (int)(version>>8)&0xff, (int)version&0xff);
\r
594 type = PSE_GetLibType();
\r
595 if (type & PSE_LT_NET && ((version >> 16) == 2)) {
\r
596 ComboAddPlugin(hWC_NET, Config.Net);
\r
600 } while (FindNextFile(Find,&FindData));
\r
602 if (Find!=INVALID_HANDLE_VALUE) FindClose(Find);
\r
607 BOOL CALLBACK ConfigureNetPlayDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) {
\r
608 int i,iCnt;HWND hWC;char * lp;
\r
611 case WM_INITDIALOG:
\r
612 SetWindowText(hW, _("NetPlay Configuration"));
\r
614 Button_SetText(GetDlgItem(hW, IDOK), _("OK"));
\r
615 Button_SetText(GetDlgItem(hW, IDCANCEL), _("Cancel"));
\r
616 Static_SetText(GetDlgItem(hW, IDC_NETPLAY), _("NetPlay"));
\r
617 Button_SetText(GetDlgItem(hW, IDC_CONFIGNET), _("Configure..."));
\r
618 Button_SetText(GetDlgItem(hW, IDC_TESTNET), _("Test..."));
\r
619 Button_SetText(GetDlgItem(hW, IDC_ABOUTNET), _("About..."));
\r
620 Static_SetText(GetDlgItem(hW, IDC_NETPLAYNOTE), _("Note: The NetPlay Plugin Directory should be the same as the other Plugins."));
\r
622 OnConfigureNetPlayDialog(hW);
\r
626 switch (LOWORD(wParam)) {
\r
627 case IDC_CONFIGNET: ConfigureNET(hW); return TRUE;
\r
628 case IDC_TESTNET: TestNET(hW); return TRUE;
\r
629 case IDC_ABOUTNET: AboutNET(hW); return TRUE;
\r
632 CleanCombo(IDC_LISTNET);
\r
633 EndDialog(hW,FALSE);
\r
637 strcpy(Config.Net, GetSelDLL(hW, IDC_LISTNET));
\r
641 CleanCombo(IDC_LISTNET);
\r
642 EndDialog(hW,TRUE);
\r