Fix patch application, which I broke in r3273. :)

DevNote:  Adding SysForwardDefs.h, which I'm going to use for forward declaring a bunch of PCSX2 classes and other simple dependency-free include content.  This is the SysCore version of AppForwardDefs, and hopefully helps minimize header file hell.

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@3276 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
Jake.Stine 2010-06-23 01:15:09 +00:00
parent d24a15e0f9
commit 67ddabd231
8 changed files with 70 additions and 50 deletions

View File

@ -51,8 +51,8 @@ void BaseGameDatabaseImpl::updateGame(const Game_Data& game)
} }
// Searches the current game's data to see if the given key exists // Searches the current game's data to see if the given key exists
bool Game_Data::keyExists(const wxChar* key) { bool Game_Data::keyExists(const wxChar* key) const {
KeyPairArray::iterator it( kList.begin() ); KeyPairArray::const_iterator it( kList.begin() );
for ( ; it != kList.end(); ++it) { for ( ; it != kList.end(); ++it) {
if (it[0].CompareKey(key)) { if (it[0].CompareKey(key)) {
return true; return true;
@ -73,8 +73,8 @@ void Game_Data::deleteKey(const wxChar* key) {
} }
// Gets a string representation of the 'value' for the given key // Gets a string representation of the 'value' for the given key
wxString Game_Data::getString(const wxChar* key) { wxString Game_Data::getString(const wxChar* key) const {
KeyPairArray::iterator it( kList.begin() ); KeyPairArray::const_iterator it( kList.begin() );
for ( ; it != kList.end(); ++it) { for ( ; it != kList.end(); ++it) {
if (it[0].CompareKey(key)) { if (it[0].CompareKey(key)) {
return it[0].value; return it[0].value;

View File

@ -95,9 +95,9 @@ struct Game_Data
kList.clear(); kList.clear();
} }
bool keyExists(const wxChar* key); bool keyExists(const wxChar* key) const;
void deleteKey(const wxChar* key); void deleteKey(const wxChar* key);
wxString getString(const wxChar* key); wxString getString(const wxChar* key) const;
void writeString(const wxString& key, const wxString& value); void writeString(const wxString& key, const wxString& value);
void writeBool(const wxString& key, bool value); void writeBool(const wxString& key, bool value);
@ -105,46 +105,46 @@ struct Game_Data
return !id.IsEmpty(); return !id.IsEmpty();
} }
bool sectionExists(const wxChar* key, const wxString& value) { bool sectionExists(const wxChar* key, const wxString& value) const {
return keyExists(wxsFormat(L"[%s%s%s]", key, value.IsEmpty() ? L"" : L" = ", value.c_str())); return keyExists(wxsFormat(L"[%s%s%s]", key, value.IsEmpty() ? L"" : L" = ", value.c_str()));
} }
wxString getSection(const wxChar* key, const wxString& value) { wxString getSection(const wxChar* key, const wxString& value) const {
return getString(wxsFormat(L"[%s%s%s]", key, value.IsEmpty() ? L"" : L" = ", value.c_str())); return getString(wxsFormat(L"[%s%s%s]", key, value.IsEmpty() ? L"" : L" = ", value.c_str()));
} }
// Gets an integer representation of the 'value' for the given key // Gets an integer representation of the 'value' for the given key
int getInt(const wxChar* key) { int getInt(const wxChar* key) const {
return wxStrtoul(getString(key), NULL, 0); return wxStrtoul(getString(key), NULL, 0);
} }
// Gets a u8 representation of the 'value' for the given key // Gets a u8 representation of the 'value' for the given key
u8 getU8(const wxChar* key) { u8 getU8(const wxChar* key) const {
return (u8)wxAtoi(getString(key)); return (u8)wxAtoi(getString(key));
} }
// Gets a bool representation of the 'value' for the given key // Gets a bool representation of the 'value' for the given key
bool getBool(const wxChar* key) { bool getBool(const wxChar* key) const {
return !!wxAtoi(getString(key)); return !!wxAtoi(getString(key));
} }
bool keyExists(const char* key) { bool keyExists(const char* key) const {
return keyExists(fromUTF8(key)); return keyExists(fromUTF8(key));
} }
wxString getString(const char* key) { wxString getString(const char* key) const {
return getString(fromUTF8(key)); return getString(fromUTF8(key));
} }
int getInt(const char* key) { int getInt(const char* key) const {
return getInt(fromUTF8(key)); return getInt(fromUTF8(key));
} }
u8 getU8(const char* key) { u8 getU8(const char* key) const {
return getU8(fromUTF8(key)); return getU8(fromUTF8(key));
} }
bool getBool(const char* key) { bool getBool(const char* key) const {
return getBool(fromUTF8(key)); return getBool(fromUTF8(key));
} }
}; };

View File

@ -131,24 +131,21 @@ void TrimPatches(wxString& s)
// This routine loads patches from the game database // This routine loads patches from the game database
// Returns number of patches loaded // Returns number of patches loaded
int InitPatches(const wxString& name) int InitPatches(const wxString& crc, const Game_Data& game)
{ {
bool patchFound = false; bool patchFound = false;
wxString patch; wxString patch;
patchnumber = 0; patchnumber = 0;
if (IGameDatabase* GameDB = AppHost_GetGameDatabase() ) if (game.IsOk())
{ {
Game_Data game; if (game.sectionExists(L"patches", crc)) {
if (GameDB->findGame(game,name)) { patch = game.getSection(L"patches", crc);
if (game.sectionExists(L"patches", name)) { patchFound = true;
patch = game.getSection(L"patches", name); }
patchFound = true; else if (game.keyExists(L"[patches]")) {
} patch = game.getString(L"[patches]");
else if (game.keyExists(L"[patches]")) { patchFound = true;
patch = game.getString(L"[patches]");
patchFound = true;
}
} }
} }

View File

@ -12,10 +12,11 @@
* You should have received a copy of the GNU General Public License along with PCSX2. * You should have received a copy of the GNU General Public License along with PCSX2.
* If not, see <http://www.gnu.org/licenses/>. * If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef __PATCH_H__
#define __PATCH_H__ #pragma once
#include "Pcsx2Defs.h" #include "Pcsx2Defs.h"
#include "SysForwardDefs.h"
#define MAX_PATCH 512 #define MAX_PATCH 512
#define MAX_CHEAT 1024 #define MAX_CHEAT 1024
@ -56,16 +57,14 @@ namespace PatchFunc
PATCHTABLEFUNC cheat; PATCHTABLEFUNC cheat;
} }
int InitCheats(const wxString& name); extern int InitCheats(const wxString& name);
void inifile_command(bool isCheat, const wxString& cmd); extern void inifile_command(bool isCheat, const wxString& cmd);
void inifile_trim(wxString& buffer); extern void inifile_trim(wxString& buffer);
int InitPatches(const wxString& name); extern int InitPatches(const wxString& name, const Game_Data& game);
int AddPatch(int Mode, int Place, int Address, int Size, u64 data); extern int AddPatch(int Mode, int Place, int Address, int Size, u64 data);
void ResetPatch(void); extern void ResetPatch(void);
void ApplyPatch(int place = 1); extern void ApplyPatch(int place = 1);
void ApplyCheat(int place = 1); extern void ApplyCheat(int place = 1);
void _ApplyPatch(IniPatch *p); extern void _ApplyPatch(IniPatch *p);
#endif /* __PATCH_H__ */

25
pcsx2/SysForwardDefs.h Normal file
View File

@ -0,0 +1,25 @@
/* PCSX2 - PS2 Emulator for PCs
* Copyright (C) 2002-2010 PCSX2 Dev Team
*
* PCSX2 is free software: you can redistribute it and/or modify it under the terms
* of the GNU Lesser General Public License as published by the Free Software Found-
* ation, either version 3 of the License, or (at your option) any later version.
*
* PCSX2 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 PCSX2.
* If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
static const int PCSX2_VersionHi = 0;
static const int PCSX2_VersionMid = 9;
static const int PCSX2_VersionLo = 7;
class SysCoreThread;
class CpuInitializerSet;
struct Game_Data;

View File

@ -15,17 +15,12 @@
#pragma once #pragma once
#include "SysForwardDefs.h"
#include "Utilities/SafeArray.h" #include "Utilities/SafeArray.h"
#include "Utilities/Threading.h" // to use threading stuff, include the Threading namespace in your file. #include "Utilities/Threading.h" // to use threading stuff, include the Threading namespace in your file.
#include "CDVD/CDVDaccess.h" #include "CDVD/CDVDaccess.h"
static const int PCSX2_VersionHi = 0;
static const int PCSX2_VersionMid = 9;
static const int PCSX2_VersionLo = 7;
class SysCoreThread;
class CpuInitializerSet;
typedef SafeArray<u8> VmStateBuffer; typedef SafeArray<u8> VmStateBuffer;
// -------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------

View File

@ -266,7 +266,7 @@ void AppCoreThread::ApplySettings( const Pcsx2Config& src )
} }
if (EmuConfig.EnablePatches) { if (EmuConfig.EnablePatches) {
if (int patches = InitPatches(gameCRC)) { if (int patches = InitPatches(gameCRC, game)) {
gamePatch.Printf(L" [%d Patches]", patches); gamePatch.Printf(L" [%d Patches]", patches);
} }
if (int fixes = loadGameSettings(fixup, GameDB)) { if (int fixes = loadGameSettings(fixup, GameDB)) {

View File

@ -475,6 +475,10 @@
RelativePath="..\..\Stats.h" RelativePath="..\..\Stats.h"
> >
</File> </File>
<File
RelativePath="..\..\SysForwardDefs.h"
>
</File>
<File <File
RelativePath="..\..\System.h" RelativePath="..\..\System.h"
> >