Commit | Line | Data |
---|---|---|
ef79bbde P |
1 | /* Pcsx - Pc Psx Emulator\r |
2 | * Copyright (C) 1999-2003 Pcsx Team\r | |
3 | *\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 | |
8 | *\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 | |
13 | *\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 | |
17 | */\r | |
18 | \r | |
19 | #include <windows.h>\r | |
20 | #include <windowsx.h>\r | |
21 | #include <stdio.h>\r | |
22 | #include "psxcommon.h"\r | |
23 | #include "plugin.h"\r | |
24 | #include "plugins.h"\r | |
25 | #include "resource.h"\r | |
26 | #include "Win32.h"\r | |
27 | \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 | |
31 | var = tmp;\r | |
32 | \r | |
33 | #define QueryKey(s, name, var) \\r | |
34 | size = s; \\r | |
35 | if (RegQueryValueEx(myKey, name, 0, &type, (LPBYTE)var, &size) != 0) { if (err) { RegCloseKey(myKey); return -1; } }\r | |
36 | \r | |
37 | #define SetKeyV(name, var) \\r | |
38 | tmp = var; \\r | |
39 | RegSetValueEx(myKey, name, 0, REG_DWORD, (LPBYTE)&tmp, sizeof(DWORD));\r | |
40 | \r | |
41 | #define SetKey(name, var, s, t) \\r | |
42 | RegSetValueEx(myKey, name, 0, t, (LPBYTE)var, s);\r | |
43 | \r | |
44 | int LoadConfig() {\r | |
45 | HKEY myKey;\r | |
46 | DWORD type, size, tmp;\r | |
47 | PcsxConfig *Conf = &Config;\r | |
48 | int err;\r | |
49 | #ifdef ENABLE_NLS\r | |
50 | char text[256];\r | |
51 | #endif\r | |
52 | \r | |
53 | if (RegOpenKeyEx(HKEY_CURRENT_USER,cfgfile,0,KEY_ALL_ACCESS,&myKey)!=ERROR_SUCCESS) return -1;\r | |
54 | \r | |
55 | err = 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 | |
66 | err = 0;\r | |
67 | QueryKey(256, "Net", Conf->Net);\r | |
68 | QueryKey(256, "Lang", Conf->Lang);\r | |
69 | \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 | |
80 | \r | |
81 | QueryKeyV("Cpu", Conf->Cpu);\r | |
82 | QueryKeyV("PsxType", Conf->PsxType);\r | |
83 | \r | |
84 | if (Config.Cpu == CPU_DYNAREC) {\r | |
85 | Config.Debug = 0; // don't enable debugger if using dynarec core\r | |
86 | }\r | |
87 | \r | |
88 | RegCloseKey(myKey);\r | |
89 | \r | |
90 | #ifdef ENABLE_NLS\r | |
91 | sprintf(text, "LANGUAGE=%s", Conf->Lang);\r | |
92 | gettext_putenv(text);\r | |
93 | #endif\r | |
94 | \r | |
95 | return 0;\r | |
96 | }\r | |
97 | \r | |
98 | /////////////////////////////////////////////////////////\r | |
99 | \r | |
100 | void SaveConfig() {\r | |
101 | HKEY myKey;\r | |
102 | DWORD myDisp, tmp;\r | |
103 | PcsxConfig *Conf = &Config;\r | |
104 | \r | |
105 | RegCreateKeyEx(HKEY_CURRENT_USER, cfgfile, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &myKey, &myDisp);\r | |
106 | \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 | |
119 | \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 | |
130 | \r | |
131 | SetKeyV("Cpu", Conf->Cpu);\r | |
132 | SetKeyV("PsxType", Conf->PsxType);\r | |
133 | \r | |
134 | RegCloseKey(myKey);\r | |
135 | }\r | |
136 | \r | |
137 | /////////////////////////////////////////////////////////\r | |
138 | \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 | |
146 | }\r | |
147 | \r | |
148 | BOOL OnConfigurePluginsDialog(HWND hW) {\r | |
149 | WIN32_FIND_DATA FindData;\r | |
150 | HANDLE Find;\r | |
151 | HANDLE Lib;\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 | |
161 | char tmpStr[256];\r | |
162 | char *lp;\r | |
163 | int i;\r | |
164 | \r | |
165 | strcpy(tmpStr, Config.PluginsDir);\r | |
166 | strcat(tmpStr, "*.dll");\r | |
167 | Find = FindFirstFile(tmpStr, &FindData);\r | |
168 | \r | |
169 | do {\r | |
170 | if (Find == INVALID_HANDLE_VALUE) break;\r | |
171 | sprintf(tmpStr,"%s%s", Config.PluginsDir, FindData.cFileName);\r | |
172 | Lib = LoadLibrary(tmpStr);\r | |
173 | if (Lib != NULL) {\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 | |
177 | \r | |
178 | if (PSE_GetLibType != NULL && PSE_GetLibName != NULL && PSE_GetLibVersion != NULL) {\r | |
179 | unsigned long version = PSE_GetLibVersion();\r | |
180 | long type;\r | |
181 | \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 | |
186 | }\r | |
187 | \r | |
188 | if (type & PSE_LT_SPU) {\r | |
189 | ComboAddPlugin(hWC_SPU, Config.Spu);\r | |
190 | }\r | |
191 | \r | |
192 | if (type & PSE_LT_GPU) {\r | |
193 | ComboAddPlugin(hWC_GPU, Config.Gpu);\r | |
194 | }\r | |
195 | \r | |
196 | if (type & PSE_LT_PAD) {\r | |
197 | PADquery query;\r | |
198 | \r | |
199 | query = (PADquery)GetProcAddress((HMODULE)Lib, "PADquery");\r | |
200 | if (query != NULL) {\r | |
201 | if (query() & 0x1)\r | |
202 | ComboAddPlugin(hWC_PAD1, Config.Pad1);\r | |
203 | if (query() & 0x2)\r | |
204 | ComboAddPlugin(hWC_PAD2, Config.Pad2);\r | |
205 | } else { // just a guess\r | |
206 | ComboAddPlugin(hWC_PAD1, Config.Pad1);\r | |
207 | }\r | |
208 | }\r | |
209 | }\r | |
210 | }\r | |
211 | } while (FindNextFile(Find,&FindData));\r | |
212 | \r | |
213 | if (Find != INVALID_HANDLE_VALUE) FindClose(Find);\r | |
214 | \r | |
215 | // BIOS\r | |
216 | \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 | |
223 | \r | |
224 | strcpy(tmpStr, Config.BiosDir);\r | |
225 | strcat(tmpStr, "*");\r | |
226 | Find=FindFirstFile(tmpStr, &FindData);\r | |
227 | \r | |
228 | do {\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 | |
243 | \r | |
244 | if (Find!=INVALID_HANDLE_VALUE) FindClose(Find);\r | |
245 | \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 | |
258 | \r | |
259 | return TRUE;\r | |
260 | }\r | |
261 | \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 | |
268 | } \\r | |
269 | ComboBox_ResetContent(hWC);\r | |
270 | \r | |
271 | void CleanUpCombos(HWND hW) {\r | |
272 | int i,iCnt;HWND hWC;char * lp;\r | |
273 | \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 | |
280 | }\r | |
281 | \r | |
282 | void OnCancel(HWND hW) {\r | |
283 | CleanUpCombos(hW);\r | |
284 | EndDialog(hW,FALSE);\r | |
285 | }\r | |
286 | \r | |
287 | char *GetSelDLL(HWND hW,int id) {\r | |
288 | HWND hWC = GetDlgItem(hW,id);\r | |
289 | int iSel;\r | |
290 | iSel = ComboBox_GetCurSel(hWC);\r | |
291 | if (iSel<0) return NULL;\r | |
292 | return (char *)ComboBox_GetItemData(hWC, iSel);\r | |
293 | }\r | |
294 | \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 | |
302 | \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 | |
306 | return;\r | |
307 | }\r | |
308 | \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 | |
315 | \r | |
316 | SaveConfig();\r | |
317 | \r | |
318 | CleanUpCombos(hW);\r | |
319 | \r | |
320 | if (!ConfPlug) {\r | |
321 | LoadPlugins();\r | |
322 | }\r | |
323 | EndDialog(hW,TRUE);\r | |
324 | }\r | |
325 | \r | |
326 | \r | |
327 | #define ConfPlugin(src, confs, name) \\r | |
328 | void *drv; \\r | |
329 | src conf; \\r | |
330 | char * pDLL = GetSelDLL(hW, confs); \\r | |
331 | char file[256]; \\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 | |
340 | \r | |
341 | void ConfigureGPU(HWND hW) {\r | |
342 | ConfPlugin(GPUconfigure, IDC_LISTGPU, "GPUconfigure");\r | |
343 | }\r | |
344 | \r | |
345 | void ConfigureSPU(HWND hW) {\r | |
346 | ConfPlugin(SPUconfigure, IDC_LISTSPU, "SPUconfigure");\r | |
347 | }\r | |
348 | \r | |
349 | void ConfigureCDR(HWND hW) {\r | |
350 | ConfPlugin(CDRconfigure, IDC_LISTCDR, "CDRconfigure");\r | |
351 | }\r | |
352 | \r | |
353 | void ConfigureNET(HWND hW) {\r | |
354 | ConfPlugin(NETconfigure, IDC_LISTNET, "NETconfigure");\r | |
355 | }\r | |
356 | \r | |
357 | void ConfigurePAD1(HWND hW) {\r | |
358 | ConfPlugin(PADconfigure, IDC_LISTPAD1, "PADconfigure");\r | |
359 | }\r | |
360 | \r | |
361 | void ConfigurePAD2(HWND hW) {\r | |
362 | ConfPlugin(PADconfigure, IDC_LISTPAD2, "PADconfigure");\r | |
363 | }\r | |
364 | \r | |
365 | \r | |
366 | void AboutGPU(HWND hW) {\r | |
367 | ConfPlugin(GPUabout, IDC_LISTGPU, "GPUabout");\r | |
368 | }\r | |
369 | \r | |
370 | void AboutSPU(HWND hW) {\r | |
371 | ConfPlugin(SPUabout, IDC_LISTSPU, "SPUabout");\r | |
372 | }\r | |
373 | \r | |
374 | void AboutCDR(HWND hW) {\r | |
375 | ConfPlugin(CDRabout, IDC_LISTCDR, "CDRabout");\r | |
376 | }\r | |
377 | \r | |
378 | void AboutNET(HWND hW) {\r | |
379 | ConfPlugin(NETabout, IDC_LISTNET, "NETabout");\r | |
380 | }\r | |
381 | \r | |
382 | void AboutPAD1(HWND hW) {\r | |
383 | ConfPlugin(PADabout, IDC_LISTPAD1, "PADabout");\r | |
384 | }\r | |
385 | \r | |
386 | void AboutPAD2(HWND hW) {\r | |
387 | ConfPlugin(PADabout, IDC_LISTPAD2, "PADabout");\r | |
388 | }\r | |
389 | \r | |
390 | \r | |
391 | #define TestPlugin(src, confs, name) \\r | |
392 | void *drv; \\r | |
393 | src conf; \\r | |
394 | int ret = 0; \\r | |
395 | char * pDLL = GetSelDLL(hW, confs); \\r | |
396 | char file[256]; \\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 | |
404 | ret = conf(); \\r | |
405 | if (ret == 0) \\r | |
406 | SysMessage(_("This plugin reports that should work correctly")); \\r | |
407 | else SysMessage(_("This plugin reports that should not work correctly")); \\r | |
408 | } \\r | |
409 | SysCloseLibrary(drv);\r | |
410 | \r | |
411 | void TestGPU(HWND hW) {\r | |
412 | TestPlugin(GPUtest, IDC_LISTGPU, "GPUtest");\r | |
413 | }\r | |
414 | \r | |
415 | void TestSPU(HWND hW) {\r | |
416 | TestPlugin(SPUtest, IDC_LISTSPU, "SPUtest");\r | |
417 | }\r | |
418 | \r | |
419 | void TestCDR(HWND hW) {\r | |
420 | TestPlugin(CDRtest, IDC_LISTCDR, "CDRtest");\r | |
421 | }\r | |
422 | \r | |
423 | void TestNET(HWND hW) {\r | |
424 | TestPlugin(NETtest, IDC_LISTNET, "NETtest");\r | |
425 | }\r | |
426 | \r | |
427 | void TestPAD1(HWND hW) {\r | |
428 | TestPlugin(PADtest, IDC_LISTPAD1, "PADtest");\r | |
429 | }\r | |
430 | \r | |
431 | void TestPAD2(HWND hW) {\r | |
432 | TestPlugin(PADtest, IDC_LISTPAD2, "PADtest");\r | |
433 | }\r | |
434 | \r | |
435 | #include <shlobj.h>\r | |
436 | \r | |
437 | int SelectPath(HWND hW, char *Title, char *Path) {\r | |
438 | LPITEMIDLIST pidl;\r | |
439 | BROWSEINFO bi;\r | |
440 | char Buffer[256];\r | |
441 | \r | |
442 | bi.hwndOwner = hW;\r | |
443 | bi.pidlRoot = NULL;\r | |
444 | bi.pszDisplayName = Buffer;\r | |
445 | bi.lpszTitle = Title;\r | |
446 | bi.ulFlags = BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;\r | |
447 | bi.lpfn = NULL;\r | |
448 | bi.lParam = 0;\r | |
449 | if ((pidl = SHBrowseForFolder(&bi)) != NULL) {\r | |
450 | if (SHGetPathFromIDList(pidl, Path)) {\r | |
451 | int len = strlen(Path);\r | |
452 | \r | |
453 | if (Path[len - 1] != '\\') { strcat(Path,"\\"); }\r | |
454 | return 0;\r | |
455 | }\r | |
456 | }\r | |
457 | return -1;\r | |
458 | }\r | |
459 | \r | |
460 | void SetPluginsDir(HWND hW) {\r | |
461 | char Path[256];\r | |
462 | \r | |
463 | if (SelectPath(hW, _("Select Plugins Directory"), Path) == -1) return;\r | |
464 | strcpy(Config.PluginsDir, Path);\r | |
465 | CleanUpCombos(hW);\r | |
466 | OnConfigurePluginsDialog(hW);\r | |
467 | }\r | |
468 | \r | |
469 | void SetBiosDir(HWND hW) {\r | |
470 | char Path[256];\r | |
471 | \r | |
472 | if (SelectPath(hW, _("Select Bios Directory"), Path) == -1) return;\r | |
473 | strcpy(Config.BiosDir, Path);\r | |
474 | CleanUpCombos(hW);\r | |
475 | OnConfigurePluginsDialog(hW);\r | |
476 | }\r | |
477 | \r | |
478 | BOOL CALLBACK ConfigurePluginsDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) {\r | |
479 | switch(uMsg) {\r | |
480 | case WM_INITDIALOG:\r | |
481 | SetWindowText(hW, _("Configuration"));\r | |
482 | \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 | |
508 | \r | |
509 | return OnConfigurePluginsDialog(hW);\r | |
510 | \r | |
511 | case WM_COMMAND:\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 | |
518 | \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 | |
524 | \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 | |
530 | \r | |
531 | case IDC_PLUGINSDIR: SetPluginsDir(hW); return TRUE;\r | |
532 | case IDC_BIOSDIR: SetBiosDir(hW); return TRUE;\r | |
533 | \r | |
534 | case IDCANCEL: \r | |
535 | OnCancel(hW); \r | |
536 | if (CancelQuit) {\r | |
537 | SysClose(); exit(1);\r | |
538 | }\r | |
539 | return TRUE;\r | |
540 | case IDOK: \r | |
541 | OnOK(hW); \r | |
542 | return TRUE;\r | |
543 | }\r | |
544 | }\r | |
545 | return FALSE;\r | |
546 | }\r | |
547 | \r | |
548 | \r | |
549 | void ConfigurePlugins(HWND hWnd) {\r | |
550 | DialogBox(gApp.hInstance,\r | |
551 | MAKEINTRESOURCE(IDD_CONFIG),\r | |
552 | hWnd, \r | |
553 | (DLGPROC)ConfigurePluginsDlgProc);\r | |
554 | }\r | |
555 | \r | |
556 | // NetPlay Config Dialog\r | |
557 | \r | |
558 | BOOL OnConfigureNetPlayDialog(HWND hW) {\r | |
559 | WIN32_FIND_DATA FindData;\r | |
560 | HANDLE Find;\r | |
561 | HANDLE Lib;\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 | |
566 | char tmpStr[256];\r | |
567 | char *lp;\r | |
568 | int i;\r | |
569 | \r | |
570 | strcpy(tmpStr, Config.PluginsDir);\r | |
571 | strcat(tmpStr, "*.dll");\r | |
572 | Find = FindFirstFile(tmpStr, &FindData);\r | |
573 | \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 | |
579 | \r | |
580 | do {\r | |
581 | if (Find==INVALID_HANDLE_VALUE) break;\r | |
582 | sprintf(tmpStr,"%s%s", Config.PluginsDir, FindData.cFileName);\r | |
583 | Lib = LoadLibrary(tmpStr);\r | |
584 | if (Lib!=NULL) {\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 | |
588 | \r | |
589 | if (PSE_GetLibType != NULL && PSE_GetLibName != NULL && PSE_GetLibVersion != NULL) {\r | |
590 | unsigned long version = PSE_GetLibVersion();\r | |
591 | long type;\r | |
592 | \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 | |
597 | }\r | |
598 | }\r | |
599 | }\r | |
600 | } while (FindNextFile(Find,&FindData));\r | |
601 | \r | |
602 | if (Find!=INVALID_HANDLE_VALUE) FindClose(Find);\r | |
603 | \r | |
604 | return TRUE;\r | |
605 | }\r | |
606 | \r | |
607 | BOOL CALLBACK ConfigureNetPlayDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) {\r | |
608 | int i,iCnt;HWND hWC;char * lp;\r | |
609 | \r | |
610 | switch(uMsg) {\r | |
611 | case WM_INITDIALOG:\r | |
612 | SetWindowText(hW, _("NetPlay Configuration"));\r | |
613 | \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 | |
621 | \r | |
622 | OnConfigureNetPlayDialog(hW);\r | |
623 | return TRUE;\r | |
624 | \r | |
625 | case WM_COMMAND: {\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 | |
630 | \r | |
631 | case IDCANCEL: \r | |
632 | CleanCombo(IDC_LISTNET);\r | |
633 | EndDialog(hW,FALSE); \r | |
634 | return TRUE;\r | |
635 | \r | |
636 | case IDOK:\r | |
637 | strcpy(Config.Net, GetSelDLL(hW, IDC_LISTNET));\r | |
638 | SaveConfig();\r | |
639 | CleanUpCombos(hW);\r | |
640 | LoadPlugins();\r | |
641 | CleanCombo(IDC_LISTNET);\r | |
642 | EndDialog(hW,TRUE);\r | |
643 | return TRUE;\r | |
644 | }\r | |
645 | }\r | |
646 | }\r | |
647 | \r | |
648 | return FALSE;\r | |
649 | }\r |