diff options
| author | SND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2011-03-13 08:26:16 +0000 |
|---|---|---|
| committer | SND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2011-03-13 08:26:16 +0000 |
| commit | 379a8879f7dae1a9074317c0270e12dd203b32c0 (patch) | |
| tree | 348efb7ecd4f7cbc030f4b5db6683a857f2ae6cf /gui/Plugin.c | |
| parent | d34b4220bde29d7937d927e9d17a50470a36c500 (diff) | |
| download | pcsxr-379a8879f7dae1a9074317c0270e12dd203b32c0.tar.gz | |
Temporarily reverted r64524 until I (or someone else) find the time to sort out the stuff.
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@64536 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'gui/Plugin.c')
| -rw-r--r-- | gui/Plugin.c | 860 |
1 files changed, 430 insertions, 430 deletions
diff --git a/gui/Plugin.c b/gui/Plugin.c index 8ed74465..74c71051 100644 --- a/gui/Plugin.c +++ b/gui/Plugin.c @@ -1,430 +1,430 @@ -/* Pcsx - Pc Psx Emulator - * Copyright (C) 1999-2002 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 <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <dlfcn.h> -#include <X11/keysym.h> -#include <signal.h> - -#include "Linux.h" - -#include "../libpcsxcore/plugins.h" -#include "../libpcsxcore/spu.h" -#include "../libpcsxcore/cdriso.h" - -#include "nopic.h" - -#include "cdrom.h" - -#define MAX_SLOTS 9 /* ADB TODO Same as Gtk2Gui.c */ - -void OnFile_Exit(); - -unsigned long gpuDisp; - -int StatesC = 0; -extern int UseGui; -int ShowPic = 0; - -static void gpuShowPic() { - gchar *state_filename; - gzFile f; - - if (!ShowPic) { - unsigned char *pMem; - - pMem = (unsigned char *) malloc(128*96*3); - if (pMem == NULL) return; - - state_filename = get_state_filename (StatesC); - - GPU_freeze(2, (GPUFreeze_t *)&StatesC); - - f = gzopen(state_filename, "rb"); - if (f != NULL) { - gzseek(f, 32, SEEK_SET); // skip header - gzseek(f, sizeof(u32), SEEK_CUR); - gzseek(f, sizeof(boolean), SEEK_CUR); - gzread(f, pMem, 128*96*3); - gzclose(f); - } else { - memcpy(pMem, NoPic_Image.pixel_data, 128*96*3); - DrawNumBorPic(pMem, StatesC+1); - } - GPU_showScreenPic(pMem); - - free(pMem); - ShowPic = 1; - g_free (state_filename); - } else { - GPU_showScreenPic(NULL); - ShowPic = 0; - } -} - -static void KeyStateSave(int i) { - gchar *state_filename; - - state_filename = get_state_filename (i); - state_save (state_filename); - - g_free (state_filename); -} - -static void KeyStateLoad(int i) { - gchar *state_filename; - - state_filename = get_state_filename (i); - state_load (state_filename); - - g_free (state_filename); - - // HACKHACK: prevent crash when using recompiler due to execution not - // returned from compiled code. This WILL cause memory leak, however a - // large amount of refactor is needed for a proper fix. - if (Config.Cpu == CPU_DYNAREC) psxCpu->Execute(); -} - -static short modctrl = 0, modalt = 0; - -/* Handle keyboard keystrokes */ -void PADhandleKey(int key) { - char Text[MAXPATHLEN]; - gchar *state_filename; - - short rel = 0; //released key flag - - if (key == 0) - return; - - if ((key >> 30) & 1) //specific to dfinput (padJoy) - rel = 1; - - if (rel) { - switch (key & ~0x40000000) { - case XK_Alt_L: - case XK_Alt_R: - modalt=0; - break; - case XK_Control_L: - case XK_Control_R: - modctrl=0; - break; - } - return; - } - - switch (key) { - case XK_Alt_L: - case XK_Alt_R: - modalt=1; - break; - case XK_Control_L: - case XK_Control_R: - modctrl=1; - break; - - case XK_0: - if (modalt && modctrl) - return; - if (modalt) KeyStateLoad(10); - break; - - case XK_1: - if (modalt && modctrl) - return; - if (modalt) KeyStateLoad(0); - if (modctrl) KeyStateSave(0); - break; - case XK_2: - if (modalt && modctrl) - return; - if (modalt) KeyStateLoad(1); - if (modctrl) KeyStateSave(1); - break; - case XK_3: - if (modalt && modctrl) - return; - if (modalt) KeyStateLoad(2); - if (modctrl) KeyStateSave(2); - break; - case XK_4: - if (modalt && modctrl) - return; - if (modalt) KeyStateLoad(3); - if (modctrl) KeyStateSave(3); - break; - case XK_5: - if (modalt && modctrl) - return; - if (modalt) KeyStateLoad(4); - if (modctrl) KeyStateSave(4); - break; - case XK_6: - if (modalt && modctrl) - return; - if (modalt) KeyStateLoad(5); - if (modctrl) KeyStateSave(5); - break; - case XK_7: - if (modalt && modctrl) - return; - if (modalt) KeyStateLoad(6); - if (modctrl) KeyStateSave(6); - break; - case XK_8: - if (modalt && modctrl) - return; - if (modalt) KeyStateLoad(7); - if (modctrl) KeyStateSave(7); - break; - case XK_9: - if (modalt && modctrl) - return; - if (modalt) KeyStateLoad(8); - if (modctrl) KeyStateSave(8); - break; - - case XK_F1: - GPU_freeze(2, (GPUFreeze_t *)&StatesC); - state_filename = get_state_filename (StatesC); - state_save (state_filename); - - g_free (state_filename); - - if (ShowPic) { ShowPic = 0; gpuShowPic(); } - - break; - case XK_F2: - if (StatesC < (MAX_SLOTS - 1)) StatesC++; - else StatesC = 0; - GPU_freeze(2, (GPUFreeze_t *)&StatesC); - if (ShowPic) { ShowPic = 0; gpuShowPic(); } - break; - case XK_F3: - state_filename = get_state_filename (StatesC); - state_load (state_filename); - - g_free (state_filename); - - // HACKHACK: prevent crash when using recompiler due to execution not - // returned from compiled code. This WILL cause memory leak, however a - // large amount of refactor is needed for a proper fix. - if (Config.Cpu == CPU_DYNAREC) psxCpu->Execute(); - - break; - case XK_F4: - gpuShowPic(); - break; - case XK_F5: - Config.Sio ^= 0x1; - if (Config.Sio) - sprintf(Text, _("SIO IRQ Always Enabled")); - else sprintf(Text, _("SIO IRQ Not Always Enabled")); - GPU_displayText(Text); - break; - case XK_F6: - Config.Mdec ^= 0x1; - if (Config.Mdec) - sprintf(Text, _("Black & White Mdecs Only Enabled")); - else sprintf(Text, _("Black & White Mdecs Only Disabled")); - GPU_displayText(Text); - break; - case XK_F7: - Config.Xa ^= 0x1; - if (Config.Xa == 0) - sprintf (Text, _("XA Enabled")); - else sprintf (Text, _("XA Disabled")); - GPU_displayText(Text); - break; - case XK_F8: - GPU_makeSnapshot(); - break; - case XK_F9: - SetCdOpenCaseTime(-1); - - LidInterrupt(); - break; - case XK_F10: - SetCdOpenCaseTime(0); - - LidInterrupt(); - break; - case XK_F12: - psxReset(); - break; - case XK_Escape: - // TODO - // the architecture is too broken to actually restart the GUI - // because SysUpdate is called from deep within the actual - // execution of the emulation code - // Fixing this would probably require a complete reworking of - // all functions, so that they return 0 or 1 for success - // that way, execution wouldn't continue - if (CdromId[0] != '\0') - KeyStateSave(10); - ClosePlugins(); - UpdateMenuSlots(); - if (!UseGui) OnFile_Exit(); - StartGui(); - break; - case XK_Return: //0xff0d - if (modalt) //alt-return - //I just made this up: a special sym for fullscreen because the current interface can't handle key mods - //though it can be used in the future as a convention...eg bit 29 for alt, bit 28 for cntl, etc. - GPU_keypressed( (1<<29) | 0xFF0D ); - break; - default: - GPU_keypressed(key); - if (Config.UseNet) NET_keypressed(key); - } -} - -void OnFile_Exit(); - -static void SignalExit(int sig) { - ClosePlugins(); - OnFile_Exit(); -} - -#define PARSEPATH(dst, src) \ - ptr = src + strlen(src); \ - while (*ptr != '\\' && ptr != src) ptr--; \ - if (ptr != src) { \ - strcpy(dst, ptr+1); \ - } - -static int _OpenPlugins() { - int ret; - - signal(SIGINT, SignalExit); - signal(SIGPIPE, SignalExit); - - GPU_clearDynarec(clearDynarec); - - ret = CDR_open(); - if (ret < 0) { SysMessage(_("Error opening CD-ROM plugin!")); return -1; } - ret = SPU_open(); - if (ret < 0) { SysMessage(_("Error opening SPU plugin!")); return -1; } - SPU_registerCallback(SPUirq); - ret = GPU_open(&gpuDisp, "PCSX", NULL); - if (ret < 0) { SysMessage(_("Error opening GPU plugin!")); return -1; } - GPU_registerCallback(GPUbusy); - ret = PAD1_open(&gpuDisp); - if (ret < 0) { SysMessage(_("Error opening Controller 1 plugin!")); return -1; } - PAD1_registerVibration(GPU_visualVibration); - PAD1_registerCursor(GPU_cursor); - ret = PAD2_open(&gpuDisp); - if (ret < 0) { SysMessage(_("Error opening Controller 2 plugin!")); return -1; } - PAD2_registerVibration(GPU_visualVibration); - PAD2_registerCursor(GPU_cursor); - - if (Config.UseNet && !NetOpened) { - netInfo info; - char path[MAXPATHLEN]; - char dotdir[MAXPATHLEN]; - - strncpy(dotdir, getenv("HOME"), MAXPATHLEN-100); - strcat(dotdir, "/.pcsx/plugins/"); - - strcpy(info.EmuName, "PCSX " PACKAGE_VERSION); - strncpy(info.CdromID, CdromId, 9); - strncpy(info.CdromLabel, CdromLabel, 9); - info.psxMem = psxM; - info.GPU_showScreenPic = GPU_showScreenPic; - info.GPU_displayText = GPU_displayText; - info.GPU_showScreenPic = GPU_showScreenPic; - info.PAD_setSensitive = PAD1_setSensitive; - sprintf(path, "%s%s", Config.BiosDir, Config.Bios); - strcpy(info.BIOSpath, path); - strcpy(info.MCD1path, Config.Mcd1); - strcpy(info.MCD2path, Config.Mcd2); - sprintf(path, "%s%s", dotdir, Config.Gpu); - strcpy(info.GPUpath, path); - sprintf(path, "%s%s", dotdir, Config.Spu); - strcpy(info.SPUpath, path); - sprintf(path, "%s%s", dotdir, Config.Cdr); - strcpy(info.CDRpath, path); - NET_setInfo(&info); - - ret = NET_open(&gpuDisp); - if (ret < 0) { - if (ret == -2) { - // -2 is returned when something in the info - // changed and needs to be synced - char *ptr; - - PARSEPATH(Config.Bios, info.BIOSpath); - PARSEPATH(Config.Gpu, info.GPUpath); - PARSEPATH(Config.Spu, info.SPUpath); - PARSEPATH(Config.Cdr, info.CDRpath); - - strcpy(Config.Mcd1, info.MCD1path); - strcpy(Config.Mcd2, info.MCD2path); - return -2; - } else { - Config.UseNet = FALSE; - } - } else { - if (NET_queryPlayer() == 1) { - if (SendPcsxInfo() == -1) Config.UseNet = FALSE; - } else { - if (RecvPcsxInfo() == -1) Config.UseNet = FALSE; - } - } - NetOpened = TRUE; - } else if (Config.UseNet) { - NET_resume(); - } - - return 0; -} - -int OpenPlugins() { - int ret; - - while ((ret = _OpenPlugins()) == -2) { - ReleasePlugins(); - LoadMcds(Config.Mcd1, Config.Mcd2); - if (LoadPlugins() == -1) return -1; - } - return ret; -} - -void ClosePlugins() { - int ret; - - signal(SIGINT, SIG_DFL); - signal(SIGPIPE, SIG_DFL); - ret = CDR_close(); - if (ret < 0) { SysMessage(_("Error closing CD-ROM plugin!")); return; } - ret = SPU_close(); - if (ret < 0) { SysMessage(_("Error closing SPU plugin!")); return; } - ret = PAD1_close(); - if (ret < 0) { SysMessage(_("Error closing Controller 1 Plugin!")); return; } - ret = PAD2_close(); - if (ret < 0) { SysMessage(_("Error closing Controller 2 plugin!")); return; } - ret = GPU_close(); - if (ret < 0) { SysMessage(_("Error closing GPU plugin!")); return; } - - if (Config.UseNet) { - NET_pause(); - } -} +/* Pcsx - Pc Psx Emulator
+ * Copyright (C) 1999-2002 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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <X11/keysym.h>
+#include <signal.h>
+
+#include "Linux.h"
+
+#include "../libpcsxcore/plugins.h"
+#include "../libpcsxcore/spu.h"
+#include "../libpcsxcore/cdriso.h"
+
+#include "nopic.h"
+
+#define MAX_SLOTS 9 /* ADB TODO Same as Gtk2Gui.c */
+
+void OnFile_Exit();
+
+extern void LidInterrupt();
+
+unsigned long gpuDisp;
+
+int StatesC = 0;
+extern int UseGui;
+int ShowPic = 0;
+
+void gpuShowPic() {
+ gchar *state_filename;
+ gzFile f;
+
+ if (!ShowPic) {
+ unsigned char *pMem;
+
+ pMem = (unsigned char *) malloc(128*96*3);
+ if (pMem == NULL) return;
+
+ state_filename = get_state_filename (StatesC);
+
+ GPU_freeze(2, (GPUFreeze_t *)&StatesC);
+
+ f = gzopen(state_filename, "rb");
+ if (f != NULL) {
+ gzseek(f, 32, SEEK_SET); // skip header
+ gzseek(f, sizeof(u32), SEEK_CUR);
+ gzseek(f, sizeof(boolean), SEEK_CUR);
+ gzread(f, pMem, 128*96*3);
+ gzclose(f);
+ } else {
+ memcpy(pMem, NoPic_Image.pixel_data, 128*96*3);
+ DrawNumBorPic(pMem, StatesC+1);
+ }
+ GPU_showScreenPic(pMem);
+
+ free(pMem);
+ ShowPic = 1;
+ g_free (state_filename);
+ } else {
+ GPU_showScreenPic(NULL);
+ ShowPic = 0;
+ }
+}
+
+void KeyStateSave(int i) {
+ gchar *state_filename;
+
+ state_filename = get_state_filename (i);
+ state_save (state_filename);
+
+ g_free (state_filename);
+}
+
+void KeyStateLoad(int i) {
+ gchar *state_filename;
+
+ state_filename = get_state_filename (i);
+ state_load (state_filename);
+
+ g_free (state_filename);
+
+ // HACKHACK: prevent crash when using recompiler due to execution not
+ // returned from compiled code. This WILL cause memory leak, however a
+ // large amount of refactor is needed for a proper fix.
+ if (Config.Cpu == CPU_DYNAREC) psxCpu->Execute();
+}
+
+static short modctrl = 0, modalt = 0;
+
+/* Handle keyboard keystrokes */
+void PADhandleKey(int key) {
+ char Text[MAXPATHLEN];
+ gchar *state_filename;
+
+ short rel = 0; //released key flag
+
+ if (key == 0)
+ return;
+
+ if ((key >> 30) & 1) //specific to dfinput (padJoy)
+ rel = 1;
+
+ if (rel) {
+ switch (key & ~0x40000000) {
+ case XK_Alt_L:
+ case XK_Alt_R:
+ modalt=0;
+ break;
+ case XK_Control_L:
+ case XK_Control_R:
+ modctrl=0;
+ break;
+ }
+ return;
+ }
+
+ switch (key) {
+ case XK_Alt_L:
+ case XK_Alt_R:
+ modalt=1;
+ break;
+ case XK_Control_L:
+ case XK_Control_R:
+ modctrl=1;
+ break;
+
+ case XK_0:
+ if (modalt && modctrl)
+ return;
+ if (modalt) KeyStateLoad(10);
+ break;
+
+ case XK_1:
+ if (modalt && modctrl)
+ return;
+ if (modalt) KeyStateLoad(0);
+ if (modctrl) KeyStateSave(0);
+ break;
+ case XK_2:
+ if (modalt && modctrl)
+ return;
+ if (modalt) KeyStateLoad(1);
+ if (modctrl) KeyStateSave(1);
+ break;
+ case XK_3:
+ if (modalt && modctrl)
+ return;
+ if (modalt) KeyStateLoad(2);
+ if (modctrl) KeyStateSave(2);
+ break;
+ case XK_4:
+ if (modalt && modctrl)
+ return;
+ if (modalt) KeyStateLoad(3);
+ if (modctrl) KeyStateSave(3);
+ break;
+ case XK_5:
+ if (modalt && modctrl)
+ return;
+ if (modalt) KeyStateLoad(4);
+ if (modctrl) KeyStateSave(4);
+ break;
+ case XK_6:
+ if (modalt && modctrl)
+ return;
+ if (modalt) KeyStateLoad(5);
+ if (modctrl) KeyStateSave(5);
+ break;
+ case XK_7:
+ if (modalt && modctrl)
+ return;
+ if (modalt) KeyStateLoad(6);
+ if (modctrl) KeyStateSave(6);
+ break;
+ case XK_8:
+ if (modalt && modctrl)
+ return;
+ if (modalt) KeyStateLoad(7);
+ if (modctrl) KeyStateSave(7);
+ break;
+ case XK_9:
+ if (modalt && modctrl)
+ return;
+ if (modalt) KeyStateLoad(8);
+ if (modctrl) KeyStateSave(8);
+ break;
+
+ case XK_F1:
+ GPU_freeze(2, (GPUFreeze_t *)&StatesC);
+ state_filename = get_state_filename (StatesC);
+ state_save (state_filename);
+
+ g_free (state_filename);
+
+ if (ShowPic) { ShowPic = 0; gpuShowPic(); }
+
+ break;
+ case XK_F2:
+ if (StatesC < (MAX_SLOTS - 1)) StatesC++;
+ else StatesC = 0;
+ GPU_freeze(2, (GPUFreeze_t *)&StatesC);
+ if (ShowPic) { ShowPic = 0; gpuShowPic(); }
+ break;
+ case XK_F3:
+ state_filename = get_state_filename (StatesC);
+ state_load (state_filename);
+
+ g_free (state_filename);
+
+ // HACKHACK: prevent crash when using recompiler due to execution not
+ // returned from compiled code. This WILL cause memory leak, however a
+ // large amount of refactor is needed for a proper fix.
+ if (Config.Cpu == CPU_DYNAREC) psxCpu->Execute();
+
+ break;
+ case XK_F4:
+ gpuShowPic();
+ break;
+ case XK_F5:
+ Config.Sio ^= 0x1;
+ if (Config.Sio)
+ sprintf(Text, _("SIO IRQ Always Enabled"));
+ else sprintf(Text, _("SIO IRQ Not Always Enabled"));
+ GPU_displayText(Text);
+ break;
+ case XK_F6:
+ Config.Mdec ^= 0x1;
+ if (Config.Mdec)
+ sprintf(Text, _("Black & White Mdecs Only Enabled"));
+ else sprintf(Text, _("Black & White Mdecs Only Disabled"));
+ GPU_displayText(Text);
+ break;
+ case XK_F7:
+ Config.Xa ^= 0x1;
+ if (Config.Xa == 0)
+ sprintf (Text, _("XA Enabled"));
+ else sprintf (Text, _("XA Disabled"));
+ GPU_displayText(Text);
+ break;
+ case XK_F8:
+ GPU_makeSnapshot();
+ break;
+ case XK_F9:
+ SetCdOpenCaseTime(-1);
+
+ LidInterrupt();
+ break;
+ case XK_F10:
+ SetCdOpenCaseTime(0);
+
+ LidInterrupt();
+ break;
+ case XK_F12:
+ psxReset();
+ break;
+ case XK_Escape:
+ // TODO
+ // the architecture is too broken to actually restart the GUI
+ // because SysUpdate is called from deep within the actual
+ // execution of the emulation code
+ // Fixing this would probably require a complete reworking of
+ // all functions, so that they return 0 or 1 for success
+ // that way, execution wouldn't continue
+ if (CdromId[0] != '\0')
+ KeyStateSave(10);
+ ClosePlugins();
+ UpdateMenuSlots();
+ if (!UseGui) OnFile_Exit();
+ StartGui();
+ break;
+ case XK_Return: //0xff0d
+ if (modalt) //alt-return
+ //I just made this up: a special sym for fullscreen because the current interface can't handle key mods
+ //though it can be used in the future as a convention...eg bit 29 for alt, bit 28 for cntl, etc.
+ GPU_keypressed( (1<<29) | 0xFF0D );
+ break;
+ default:
+ GPU_keypressed(key);
+ if (Config.UseNet) NET_keypressed(key);
+ }
+}
+
+void OnFile_Exit();
+
+void SignalExit(int sig) {
+ ClosePlugins();
+ OnFile_Exit();
+}
+
+#define PARSEPATH(dst, src) \
+ ptr = src + strlen(src); \
+ while (*ptr != '\\' && ptr != src) ptr--; \
+ if (ptr != src) { \
+ strcpy(dst, ptr+1); \
+ }
+
+int _OpenPlugins() {
+ int ret;
+
+ signal(SIGINT, SignalExit);
+ signal(SIGPIPE, SignalExit);
+
+ GPU_clearDynarec(clearDynarec);
+
+ ret = CDR_open();
+ if (ret < 0) { SysMessage(_("Error opening CD-ROM plugin!")); return -1; }
+ ret = SPU_open();
+ if (ret < 0) { SysMessage(_("Error opening SPU plugin!")); return -1; }
+ SPU_registerCallback(SPUirq);
+ ret = GPU_open(&gpuDisp, "PCSX", NULL);
+ if (ret < 0) { SysMessage(_("Error opening GPU plugin!")); return -1; }
+ GPU_registerCallback(GPUbusy);
+ ret = PAD1_open(&gpuDisp);
+ if (ret < 0) { SysMessage(_("Error opening Controller 1 plugin!")); return -1; }
+ PAD1_registerVibration(GPU_visualVibration);
+ PAD1_registerCursor(GPU_cursor);
+ ret = PAD2_open(&gpuDisp);
+ if (ret < 0) { SysMessage(_("Error opening Controller 2 plugin!")); return -1; }
+ PAD2_registerVibration(GPU_visualVibration);
+ PAD2_registerCursor(GPU_cursor);
+
+ if (Config.UseNet && !NetOpened) {
+ netInfo info;
+ char path[MAXPATHLEN];
+ char dotdir[MAXPATHLEN];
+
+ strncpy(dotdir, getenv("HOME"), MAXPATHLEN-100);
+ strcat(dotdir, "/.pcsx/plugins/");
+
+ strcpy(info.EmuName, "PCSX " PACKAGE_VERSION);
+ strncpy(info.CdromID, CdromId, 9);
+ strncpy(info.CdromLabel, CdromLabel, 9);
+ info.psxMem = psxM;
+ info.GPU_showScreenPic = GPU_showScreenPic;
+ info.GPU_displayText = GPU_displayText;
+ info.GPU_showScreenPic = GPU_showScreenPic;
+ info.PAD_setSensitive = PAD1_setSensitive;
+ sprintf(path, "%s%s", Config.BiosDir, Config.Bios);
+ strcpy(info.BIOSpath, path);
+ strcpy(info.MCD1path, Config.Mcd1);
+ strcpy(info.MCD2path, Config.Mcd2);
+ sprintf(path, "%s%s", dotdir, Config.Gpu);
+ strcpy(info.GPUpath, path);
+ sprintf(path, "%s%s", dotdir, Config.Spu);
+ strcpy(info.SPUpath, path);
+ sprintf(path, "%s%s", dotdir, Config.Cdr);
+ strcpy(info.CDRpath, path);
+ NET_setInfo(&info);
+
+ ret = NET_open(&gpuDisp);
+ if (ret < 0) {
+ if (ret == -2) {
+ // -2 is returned when something in the info
+ // changed and needs to be synced
+ char *ptr;
+
+ PARSEPATH(Config.Bios, info.BIOSpath);
+ PARSEPATH(Config.Gpu, info.GPUpath);
+ PARSEPATH(Config.Spu, info.SPUpath);
+ PARSEPATH(Config.Cdr, info.CDRpath);
+
+ strcpy(Config.Mcd1, info.MCD1path);
+ strcpy(Config.Mcd2, info.MCD2path);
+ return -2;
+ } else {
+ Config.UseNet = FALSE;
+ }
+ } else {
+ if (NET_queryPlayer() == 1) {
+ if (SendPcsxInfo() == -1) Config.UseNet = FALSE;
+ } else {
+ if (RecvPcsxInfo() == -1) Config.UseNet = FALSE;
+ }
+ }
+ NetOpened = TRUE;
+ } else if (Config.UseNet) {
+ NET_resume();
+ }
+
+ return 0;
+}
+
+int OpenPlugins() {
+ int ret;
+
+ while ((ret = _OpenPlugins()) == -2) {
+ ReleasePlugins();
+ LoadMcds(Config.Mcd1, Config.Mcd2);
+ if (LoadPlugins() == -1) return -1;
+ }
+ return ret;
+}
+
+void ClosePlugins() {
+ int ret;
+
+ signal(SIGINT, SIG_DFL);
+ signal(SIGPIPE, SIG_DFL);
+ ret = CDR_close();
+ if (ret < 0) { SysMessage(_("Error closing CD-ROM plugin!")); return; }
+ ret = SPU_close();
+ if (ret < 0) { SysMessage(_("Error closing SPU plugin!")); return; }
+ ret = PAD1_close();
+ if (ret < 0) { SysMessage(_("Error closing Controller 1 Plugin!")); return; }
+ ret = PAD2_close();
+ if (ret < 0) { SysMessage(_("Error closing Controller 2 plugin!")); return; }
+ ret = GPU_close();
+ if (ret < 0) { SysMessage(_("Error closing GPU plugin!")); return; }
+
+ if (Config.UseNet) {
+ NET_pause();
+ }
+}
|
