git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@27779 e17a0e51-4ae3-4d35-97c3-1a29b211df97

This commit is contained in:
SND\weimingzhi_cp 2009-08-26 14:36:53 +00:00
parent f865dc1d5e
commit f3499bc61c
8 changed files with 682 additions and 88 deletions

View File

@ -1,3 +1,15 @@
August 26, 2009 Wei Mingzhi <weimingzhi@gmail.com>
* win32/pcsx.rc: Completed the Cheat Search dialog.
* win32/resource.h: Likewise.
* win32/gui/CheatDlg.c: Implemented the Cheat Search dialog. Fixed MinGW
compilation issue.
* win32/gui/pcsx.dev: Fixed Dev-C++ build.
* win32/WndMain.c: Moved Language menu into the Config menu.
* gui/CheatDlg.c: Clamp values when editing value in Cheat Search dialog.
* doc/tweaks.txt: Added instructions to allow CD-DA playing when using
image files (as suggested by dario86).
August 24, 2009 Wei Mingzhi <weimingzhi@gmail.com>
* win32/gui/WndMain.c: Set the language to the OS language by default.

View File

@ -23,3 +23,10 @@ function. These can all be found at Configuration -> CPU.
* Enable Interpreter CPU:
Enables interpretive emulation.
This is often more compatible, but at the price of emulation speed.
Currently, PCSX-Reloaded does not support CD-DA tracks when loading
image files. In this case, to experience music in games such as Tekken
and Wipeout 2097, a CD emulation software should be used in conjunction
with the emulator. DAEMON Tools (http://www.daemon-tools.cc) and CDEmu
(http://cdemu.sourceforge.net) were tested to work under Windows and
GNU/Linux respectively.

View File

@ -831,10 +831,16 @@ static void OnCheatSearchDlg_ModifyClicked(GtkWidget *widget, gpointer user_data
switch (current_searchtype) {
case SEARCHTYPE_8BIT:
if (val > 0xFF) {
val = 0xFF;
}
psxMemWrite8(addr, (u8)val);
break;
case SEARCHTYPE_16BIT:
if (val > 0xFFFF) {
val = 0xFFFF;
}
psxMemWrite16(addr, (u16)val);
break;

View File

@ -19,6 +19,9 @@
#include <windows.h>
#include <windowsx.h>
#ifndef _WIN32_IE
#define _WIN32_IE 0x0400
#endif
#include <commctrl.h>
#include <stdio.h>
#include "psxcommon.h"
@ -80,28 +83,28 @@ static LRESULT WINAPI CheatEditDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM
break;
case WM_COMMAND:
switch (wParam) {
case IDOK:
Edit_GetText(GetDlgItem(hW, IDC_DESCR), szDescr, 256);
Edit_GetText(GetDlgItem(hW, IDC_CODE), szCode, 1024);
if (EditCheat(iEditItem, szDescr, szCode) != 0) {
SysMessage(_("Invalid cheat code!"));
}
else {
switch (LOWORD(wParam)) {
case IDOK:
Edit_GetText(GetDlgItem(hW, IDC_DESCR), szDescr, 256);
Edit_GetText(GetDlgItem(hW, IDC_CODE), szCode, 1024);
if (EditCheat(iEditItem, szDescr, szCode) != 0) {
SysMessage(_("Invalid cheat code!"));
}
else {
EndDialog(hW, TRUE);
return TRUE;
}
break;
case IDCANCEL:
EndDialog(hW, TRUE);
EndDialog(hW, FALSE);
return TRUE;
}
break;
case WM_CLOSE:
EndDialog(hW, TRUE);
EndDialog(hW, FALSE);
return TRUE;
}
@ -121,28 +124,28 @@ static LRESULT WINAPI CheatAddDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM
break;
case WM_COMMAND:
switch (wParam) {
case IDOK:
Edit_GetText(GetDlgItem(hW, IDC_DESCR), szDescr, 256);
Edit_GetText(GetDlgItem(hW, IDC_CODE), szCode, 1024);
if (AddCheat(szDescr, szCode) != 0) {
SysMessage(_("Invalid cheat code!"));
}
else {
switch (LOWORD(wParam)) {
case IDOK:
Edit_GetText(GetDlgItem(hW, IDC_DESCR), szDescr, 256);
Edit_GetText(GetDlgItem(hW, IDC_CODE), szCode, 1024);
if (AddCheat(szDescr, szCode) != 0) {
SysMessage(_("Invalid cheat code!"));
}
else {
EndDialog(hW, TRUE);
return TRUE;
}
break;
case IDCANCEL:
EndDialog(hW, TRUE);
EndDialog(hW, FALSE);
return TRUE;
}
break;
case WM_CLOSE:
EndDialog(hW, TRUE);
EndDialog(hW, FALSE);
return TRUE;
}
@ -194,9 +197,9 @@ LRESULT WINAPI CheatDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) {
break;
case WM_COMMAND:
switch (wParam) {
switch (LOWORD(wParam)) {
case IDCANCEL:
EndDialog(hW, TRUE);
EndDialog(hW, FALSE);
return TRUE;
case IDC_ADDCODE:
@ -204,7 +207,7 @@ LRESULT WINAPI CheatDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) {
szDescr[0] = '\0';
szCode[0] = '\0';
DialogBox(gApp.hInstance, MAKEINTRESOURCE(IDD_CHEATEDIT), hW, CheatAddDlgProc);
DialogBox(gApp.hInstance, MAKEINTRESOURCE(IDD_CHEATEDIT), hW, (DLGPROC)CheatAddDlgProc);
if (NumCheats > i) {
// new cheat added
@ -230,7 +233,7 @@ LRESULT WINAPI CheatDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) {
iEditItem = ListView_GetSelectionMark(List);
if (iEditItem != -1) {
DialogBox(gApp.hInstance, MAKEINTRESOURCE(IDD_CHEATEDIT), hW, CheatEditDlgProc);
DialogBox(gApp.hInstance, MAKEINTRESOURCE(IDD_CHEATEDIT), hW, (DLGPROC)CheatEditDlgProc);
memset(&item, 0, sizeof(item));
@ -274,10 +277,10 @@ LRESULT WINAPI CheatDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) {
case IDC_LOADCODE:
memset(&szFileName, 0, sizeof(szFileName));
memset(&szFileTitle, 0, sizeof(szFileTitle));
memset(&szFilter, 0, sizeof(szFilter));
memset(&szFileTitle, 0, sizeof(szFileTitle));
memset(&szFilter, 0, sizeof(szFilter));
strcpy(szFilter, _("PCSX Cheat Code Files"));
strcpy(szFilter, _("PCSX Cheat Code Files"));
strcatz(szFilter, "*.*");
ofn.lStructSize = sizeof(OPENFILENAME);
@ -303,10 +306,10 @@ LRESULT WINAPI CheatDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) {
case IDC_SAVECODE:
memset(&szFileName, 0, sizeof(szFileName));
memset(&szFileTitle, 0, sizeof(szFileTitle));
memset(&szFilter, 0, sizeof(szFilter));
memset(&szFileTitle, 0, sizeof(szFileTitle));
memset(&szFilter, 0, sizeof(szFilter));
strcpy(szFilter, _("PCSX Cheat Code Files"));
strcpy(szFilter, _("PCSX Cheat Code Files"));
strcatz(szFilter, "*.*");
ofn.lStructSize = sizeof(OPENFILENAME);
@ -354,7 +357,7 @@ LRESULT WINAPI CheatDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) {
break;
case WM_CLOSE:
EndDialog(hW, TRUE);
EndDialog(hW, FALSE);
return TRUE;
}
@ -388,14 +391,284 @@ static uint32_t current_valueto = 0;
static void UpdateCheatSearchDlg(HWND hW) {
char buf[256];
int i;
// clear all combo boxes
SendMessage(GetDlgItem(hW, IDC_SEARCHFOR), CB_RESETCONTENT, 0, 0);
SendMessage(GetDlgItem(hW, IDC_DATATYPE), CB_RESETCONTENT, 0, 0);
SendMessage(GetDlgItem(hW, IDC_DATABASE), CB_RESETCONTENT, 0, 0);
SendMessage(GetDlgItem(hW, IDC_RESLIST), LB_RESETCONTENT, 0, 0);
Button_Enable(GetDlgItem(hW, IDC_FREEZE), FALSE);
Button_Enable(GetDlgItem(hW, IDC_MODIFY), FALSE);
Button_Enable(GetDlgItem(hW, IDC_COPY), FALSE);
SendMessage(GetDlgItem(hW, IDC_SEARCHFOR), CB_ADDSTRING, 0, (LPARAM)_("Equal Value"));
SendMessage(GetDlgItem(hW, IDC_SEARCHFOR), CB_ADDSTRING, 0, (LPARAM)_("Not Equal Value"));
SendMessage(GetDlgItem(hW, IDC_SEARCHFOR), CB_ADDSTRING, 0, (LPARAM)_("Range"));
if (prevM != NULL) {
SendMessage(GetDlgItem(hW, IDC_SEARCHFOR), CB_ADDSTRING, 0, (LPARAM)_("Increased By"));
SendMessage(GetDlgItem(hW, IDC_SEARCHFOR), CB_ADDSTRING, 0, (LPARAM)_("Decreased By"));
SendMessage(GetDlgItem(hW, IDC_SEARCHFOR), CB_ADDSTRING, 0, (LPARAM)_("Increased"));
SendMessage(GetDlgItem(hW, IDC_SEARCHFOR), CB_ADDSTRING, 0, (LPARAM)_("Decreased"));
SendMessage(GetDlgItem(hW, IDC_SEARCHFOR), CB_ADDSTRING, 0, (LPARAM)_("Different"));
SendMessage(GetDlgItem(hW, IDC_SEARCHFOR), CB_ADDSTRING, 0, (LPARAM)_("No Change"));
}
SendMessage(GetDlgItem(hW, IDC_SEARCHFOR), CB_SETCURSEL, (WPARAM)current_search, 0);
if (current_search == SEARCH_RANGE) {
ShowWindow(GetDlgItem(hW, IDC_LABEL_TO), SW_SHOW);
ShowWindow(GetDlgItem(hW, IDC_VALUETO), SW_SHOW);
}
else {
ShowWindow(GetDlgItem(hW, IDC_LABEL_TO), SW_HIDE);
ShowWindow(GetDlgItem(hW, IDC_VALUETO), SW_HIDE);
}
SendMessage(GetDlgItem(hW, IDC_DATATYPE), CB_SETCURSEL, (WPARAM)current_searchtype, 0);
SendMessage(GetDlgItem(hW, IDC_DATABASE), CB_SETCURSEL, (WPARAM)current_searchbase, 0);
if (current_searchbase == SEARCHBASE_HEX) {
sprintf(buf, "%X", current_valuefrom);
SetWindowText(GetDlgItem(hW, IDC_VALUEFROM), buf);
sprintf(buf, "%X", current_valueto);
SetWindowText(GetDlgItem(hW, IDC_VALUETO), buf);
}
else {
sprintf(buf, "%u", current_valuefrom);
SetWindowText(GetDlgItem(hW, IDC_VALUEFROM), buf);
sprintf(buf, "%u", current_valueto);
SetWindowText(GetDlgItem(hW, IDC_VALUETO), buf);
}
if (prevM == NULL) {
SendMessage(GetDlgItem(hW, IDC_RESLIST), LB_ADDSTRING, (WPARAM)0, (LPARAM)_("Enter the values and start your search."));
EnableWindow(GetDlgItem(hW, IDC_RESLIST), FALSE);
}
else {
if (NumSearchResults == 0) {
SendMessage(GetDlgItem(hW, IDC_RESLIST), LB_ADDSTRING, (WPARAM)0, (LPARAM)_("No addresses found."));
EnableWindow(GetDlgItem(hW, IDC_RESLIST), FALSE);
}
else if (NumSearchResults > 100) {
SendMessage(GetDlgItem(hW, IDC_RESLIST), LB_ADDSTRING, (WPARAM)0, (LPARAM)_("Too many addresses found."));
EnableWindow(GetDlgItem(hW, IDC_RESLIST), FALSE);
}
else {
for (i = 0; i < NumSearchResults; i++) {
u32 addr = SearchResults[i];
switch (current_searchtype) {
case SEARCHTYPE_8BIT:
sprintf(buf, _("%.8X Current: %u (%.2X), Previous: %u (%.2X)"),
addr, PSXMu8(addr), PSXMu8(addr), PrevMu8(addr), PrevMu8(addr));
break;
case SEARCHTYPE_16BIT:
sprintf(buf, _("%.8X Current: %u (%.4X), Previous: %u (%.4X)"),
addr, PSXMu16(addr), PSXMu16(addr), PrevMu16(addr), PrevMu16(addr));
break;
case SEARCHTYPE_32BIT:
sprintf(buf, _("%.8X Current: %u (%.8X), Previous: %u (%.8X)"),
addr, PSXMu32(addr), PSXMu32(addr), PrevMu32(addr), PrevMu32(addr));
break;
default:
assert(FALSE); // impossible
break;
}
SendMessage(GetDlgItem(hW, IDC_RESLIST), LB_ADDSTRING, (WPARAM)0, (LPARAM)buf);
SendMessage(GetDlgItem(hW, IDC_RESLIST), LB_SETITEMDATA, i, (LPARAM)i);
}
EnableWindow(GetDlgItem(hW, IDC_RESLIST), TRUE);
}
}
sprintf(buf, _("Founded Addresses: %d"), NumSearchResults);
Static_SetText(GetDlgItem(hW, IDC_LABEL_RESULTSFOUND), buf);
}
static int iCurItem = 0;
static LRESULT WINAPI CheatFreezeProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) {
u32 val;
char buf[256];
switch (uMsg) {
case WM_INITDIALOG:
SetWindowText(hW, _("Freeze"));
Static_SetText(GetDlgItem(hW, IDC_LABEL_ADDRESS), _("Address:"));
Static_SetText(GetDlgItem(hW, IDC_LABEL_VALUE), _("Value:"));
sprintf(buf, "%.8X", SearchResults[iCurItem]);
SetWindowText(GetDlgItem(hW, IDC_ADDRESS), buf);
switch (current_searchtype) {
case SEARCHTYPE_8BIT:
val = PSXMu8(SearchResults[iCurItem]);
break;
case SEARCHTYPE_16BIT:
val = PSXMu16(SearchResults[iCurItem]);
break;
case SEARCHTYPE_32BIT:
val = PSXMu32(SearchResults[iCurItem]);
break;
default:
assert(FALSE); // should not reach here
break;
}
sprintf(buf, "%u", val);
SetWindowText(GetDlgItem(hW, IDC_VALUE), buf);
break;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDOK:
val = 0;
GetWindowText(GetDlgItem(hW, IDC_VALUE), buf, 255);
sscanf(buf, "%u", &val);
switch (current_searchtype) {
case SEARCHTYPE_8BIT:
if (val > (u32)0xFF) {
val = 0xFF;
}
sprintf(szCode, "%.8X %.4X", (SearchResults[iCurItem] & 0x1FFFFF) | (CHEAT_CONST8 << 24), val);
break;
case SEARCHTYPE_16BIT:
if (val > (u32)0xFFFF) {
val = 0xFFFF;
}
sprintf(szCode, "%.8X %.4X", (SearchResults[iCurItem] & 0x1FFFFF) | (CHEAT_CONST16 << 24), val);
break;
case SEARCHTYPE_32BIT:
sprintf(szCode, "%.8X %.4X\n%.8X %.4X",
(SearchResults[iCurItem] & 0x1FFFFF) | (CHEAT_CONST16 << 24), val & 0xFFFF,
((SearchResults[iCurItem] + 2) & 0x1FFFFF) | (CHEAT_CONST16 << 24), ((val & 0xFFFF0000) >> 16) & 0xFFFF);
break;
default:
assert(FALSE); // should not reach here
break;
}
sprintf(szDescr, _("Freeze %.8X"), SearchResults[iCurItem]);
if (DialogBox(gApp.hInstance, MAKEINTRESOURCE(IDD_CHEATEDIT), hW, (DLGPROC)CheatAddDlgProc)) {
Cheats[NumCheats - 1].Enabled = 1;
EndDialog(hW, TRUE);
return TRUE;
}
break;
case IDCANCEL:
EndDialog(hW, FALSE);
return TRUE;
}
break;
case WM_CLOSE:
EndDialog(hW, FALSE);
return TRUE;
}
return FALSE;
}
static LRESULT WINAPI CheatModifyProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) {
u32 val;
char buf[256];
switch (uMsg) {
case WM_INITDIALOG:
SetWindowText(hW, _("Modify"));
Static_SetText(GetDlgItem(hW, IDC_LABEL_ADDRESS), _("Address:"));
Static_SetText(GetDlgItem(hW, IDC_LABEL_VALUE), _("Value:"));
sprintf(buf, "%.8X", SearchResults[iCurItem]);
SetWindowText(GetDlgItem(hW, IDC_ADDRESS), buf);
switch (current_searchtype) {
case SEARCHTYPE_8BIT:
val = PSXMu8(SearchResults[iCurItem]);
break;
case SEARCHTYPE_16BIT:
val = PSXMu16(SearchResults[iCurItem]);
break;
case SEARCHTYPE_32BIT:
val = PSXMu32(SearchResults[iCurItem]);
break;
default:
assert(FALSE); // should not reach here
break;
}
sprintf(buf, "%u", val);
SetWindowText(GetDlgItem(hW, IDC_VALUE), buf);
break;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDOK:
val = 0;
GetWindowText(GetDlgItem(hW, IDC_VALUE), buf, 255);
sscanf(buf, "%u", &val);
switch (current_searchtype) {
case SEARCHTYPE_8BIT:
if (val > 0xFF) {
val = 0xFF;
}
psxMemWrite8(SearchResults[iCurItem], (u8)val);
break;
case SEARCHTYPE_16BIT:
if (val > 0xFFFF) {
val = 0xFFFF;
}
psxMemWrite16(SearchResults[iCurItem], (u16)val);
break;
case SEARCHTYPE_32BIT:
psxMemWrite32(SearchResults[iCurItem], (u32)val);
break;
default:
assert(FALSE); // should not reach here
break;
}
EndDialog(hW, TRUE);
return TRUE;
case IDCANCEL:
EndDialog(hW, TRUE);
return FALSE;
}
break;
case WM_CLOSE:
EndDialog(hW, TRUE);
return FALSE;
}
return FALSE;
}
LRESULT WINAPI CheatSearchDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) {
char buf[256];
uint32_t i;
switch (uMsg) {
case WM_INITDIALOG:
SetWindowText(hW, _("Cheat Search"));
@ -412,43 +685,330 @@ LRESULT WINAPI CheatSearchDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lPar
Button_SetText(GetDlgItem(hW, IDC_NEWSEARCH), _("&New Search"));
Button_SetText(GetDlgItem(hW, IDCANCEL), _("C&lose"));
SendMessage(GetDlgItem(hW, IDC_DATATYPE), CB_ADDSTRING, 0, (LPARAM)_("8-bit"));
SendMessage(GetDlgItem(hW, IDC_DATATYPE), CB_ADDSTRING, 0, (LPARAM)_("16-bit"));
SendMessage(GetDlgItem(hW, IDC_DATATYPE), CB_ADDSTRING, 0, (LPARAM)_("32-bit"));
SendMessage(GetDlgItem(hW, IDC_DATABASE), CB_ADDSTRING, 0, (LPARAM)_("Decimal"));
SendMessage(GetDlgItem(hW, IDC_DATABASE), CB_ADDSTRING, 0, (LPARAM)_("Hexadecimal"));
UpdateCheatSearchDlg(hW);
break;
case WM_COMMAND:
switch (LOBYTE(wParam)) {
switch (LOWORD(wParam)) {
case IDCANCEL:
EndDialog(hW, TRUE);
EndDialog(hW, FALSE);
return TRUE;
case IDC_FREEZE:
iCurItem = SendMessage(GetDlgItem(hW, IDC_RESLIST), LB_GETCURSEL, 0, 0);
DialogBox(gApp.hInstance, MAKEINTRESOURCE(IDD_CHEATVALEDIT), hW, (DLGPROC)CheatFreezeProc);
break;
case IDC_MODIFY:
iCurItem = SendMessage(GetDlgItem(hW, IDC_RESLIST), LB_GETCURSEL, 0, 0);
DialogBox(gApp.hInstance, MAKEINTRESOURCE(IDD_CHEATVALEDIT), hW, (DLGPROC)CheatModifyProc);
UpdateCheatSearchDlg(hW);
break;
case IDC_COPY:
i = SendMessage(GetDlgItem(hW, IDC_RESLIST), LB_GETCURSEL, 0, 0);
sprintf(buf, "%.8X", SearchResults[i]);
if (OpenClipboard(gApp.hWnd)) {
HGLOBAL hglbCopy = GlobalAlloc(GHND, 256);
char *p;
if (hglbCopy != NULL) {
p = (char *)GlobalLock(hglbCopy);
strcpy(p, buf);
GlobalUnlock(p);
EmptyClipboard();
SetClipboardData(CF_TEXT, (HANDLE)hglbCopy);
}
CloseClipboard();
}
break;
case IDC_SEARCH:
current_search = SendMessage(GetDlgItem(hW, IDC_SEARCHFOR), CB_GETCURSEL, 0, 0);
current_searchtype = SendMessage(GetDlgItem(hW, IDC_DATATYPE), CB_GETCURSEL, 0, 0);
current_searchbase = SendMessage(GetDlgItem(hW, IDC_DATABASE), CB_GETCURSEL, 0, 0);
current_valuefrom = 0;
current_valueto = 0;
if (current_searchbase == SEARCHBASE_DEC) {
GetWindowText(GetDlgItem(hW, IDC_VALUEFROM), (LPTSTR)buf, 255);
sscanf(buf, "%u", &current_valuefrom);
GetWindowText(GetDlgItem(hW, IDC_VALUETO), (LPTSTR)buf, 255);
sscanf(buf, "%u", &current_valueto);
}
else {
GetWindowText(GetDlgItem(hW, IDC_VALUEFROM), (LPTSTR)buf, 255);
sscanf(buf, "%x", &current_valuefrom);
GetWindowText(GetDlgItem(hW, IDC_VALUETO), (LPTSTR)buf, 255);
sscanf(buf, "%x", &current_valueto);
}
switch (current_searchtype) {
case SEARCHTYPE_8BIT:
if (current_valuefrom > (u32)0xFF) {
current_valuefrom = 0xFF;
}
if (current_valueto > (u32)0xFF) {
current_valueto = 0xFF;
}
break;
case SEARCHTYPE_16BIT:
if (current_valuefrom > (u32)0xFFFF) {
current_valuefrom = 0xFFFF;
}
if (current_valueto > (u32)0xFFFF) {
current_valueto = 0xFFFF;
}
break;
}
if (current_search == SEARCH_RANGE && current_valuefrom > current_valueto) {
u32 t = current_valuefrom;
current_valuefrom = current_valueto;
current_valueto = t;
}
switch (current_search) {
case SEARCH_EQUALVAL:
switch (current_searchtype) {
case SEARCHTYPE_8BIT:
CheatSearchEqual8((u8)current_valuefrom);
break;
case SEARCHTYPE_16BIT:
CheatSearchEqual16((u16)current_valuefrom);
break;
case SEARCHTYPE_32BIT:
CheatSearchEqual32((u32)current_valuefrom);
break;
}
break;
case SEARCH_NOTEQUALVAL:
switch (current_searchtype) {
case SEARCHTYPE_8BIT:
CheatSearchNotEqual8((u8)current_valuefrom);
break;
case SEARCHTYPE_16BIT:
CheatSearchNotEqual16((u16)current_valuefrom);
break;
case SEARCHTYPE_32BIT:
CheatSearchNotEqual32((u32)current_valuefrom);
break;
}
break;
case SEARCH_RANGE:
switch (current_searchtype) {
case SEARCHTYPE_8BIT:
CheatSearchRange8((u8)current_valuefrom, (u8)current_valueto);
break;
case SEARCHTYPE_16BIT:
CheatSearchRange16((u16)current_valuefrom, (u16)current_valueto);
break;
case SEARCHTYPE_32BIT:
CheatSearchRange32((u32)current_valuefrom, (u32)current_valueto);
break;
}
break;
case SEARCH_INCBY:
switch (current_searchtype) {
case SEARCHTYPE_8BIT:
CheatSearchIncreasedBy8((u8)current_valuefrom);
break;
case SEARCHTYPE_16BIT:
CheatSearchIncreasedBy16((u16)current_valuefrom);
break;
case SEARCHTYPE_32BIT:
CheatSearchIncreasedBy32((u32)current_valuefrom);
break;
}
break;
case SEARCH_DECBY:
switch (current_searchtype) {
case SEARCHTYPE_8BIT:
CheatSearchDecreasedBy8((u8)current_valuefrom);
break;
case SEARCHTYPE_16BIT:
CheatSearchDecreasedBy16((u16)current_valuefrom);
break;
case SEARCHTYPE_32BIT:
CheatSearchDecreasedBy32((u32)current_valuefrom);
break;
}
break;
case SEARCH_INC:
switch (current_searchtype) {
case SEARCHTYPE_8BIT:
CheatSearchIncreased8();
break;
case SEARCHTYPE_16BIT:
CheatSearchIncreased16();
break;
case SEARCHTYPE_32BIT:
CheatSearchIncreased32();
break;
}
break;
case SEARCH_DEC:
switch (current_searchtype) {
case SEARCHTYPE_8BIT:
CheatSearchDecreased8();
break;
case SEARCHTYPE_16BIT:
CheatSearchDecreased16();
break;
case SEARCHTYPE_32BIT:
CheatSearchDecreased32();
break;
}
break;
case SEARCH_DIFFERENT:
switch (current_searchtype) {
case SEARCHTYPE_8BIT:
CheatSearchDifferent8();
break;
case SEARCHTYPE_16BIT:
CheatSearchDifferent16();
break;
case SEARCHTYPE_32BIT:
CheatSearchDifferent32();
break;
}
break;
case SEARCH_NOCHANGE:
switch (current_searchtype) {
case SEARCHTYPE_8BIT:
CheatSearchNoChange8();
break;
case SEARCHTYPE_16BIT:
CheatSearchNoChange16();
break;
case SEARCHTYPE_32BIT:
CheatSearchNoChange32();
break;
}
break;
default:
assert(FALSE); // not possible
break;
}
UpdateCheatSearchDlg(hW);
break;
case IDC_NEWSEARCH:
FreeCheatSearchMem();
FreeCheatSearchResults();
current_search = SEARCH_EQUALVAL;
current_searchtype = SEARCHTYPE_8BIT;
current_searchbase = SEARCHBASE_DEC;
current_valuefrom = 0;
current_valueto = 0;
UpdateCheatSearchDlg(hW);
break;
case IDC_SEARCHFOR:
EnableWindow(GetDlgItem(hW, IDC_VALUEFROM), TRUE);
if (SendMessage(GetDlgItem(hW, IDC_SEARCHFOR), CB_GETCURSEL, 0, 0) == SEARCH_RANGE) {
ShowWindow(GetDlgItem(hW, IDC_LABEL_TO), SW_SHOW);
ShowWindow(GetDlgItem(hW, IDC_VALUETO), SW_SHOW);
}
else {
ShowWindow(GetDlgItem(hW, IDC_LABEL_TO), SW_HIDE);
ShowWindow(GetDlgItem(hW, IDC_VALUETO), SW_HIDE);
if (SendMessage(GetDlgItem(hW, IDC_SEARCHFOR), CB_GETCURSEL, 0, 0) >= SEARCH_INC) {
EnableWindow(GetDlgItem(hW, IDC_VALUEFROM), FALSE);
}
}
break;
case IDC_DATABASE:
if (SendMessage(GetDlgItem(hW, IDC_DATABASE), CB_GETCURSEL, 0, 0) == SEARCHBASE_DEC) {
if (current_searchbase == SEARCHBASE_HEX) {
GetWindowText(GetDlgItem(hW, IDC_VALUEFROM), (LPTSTR)buf, 255);
sscanf(buf, "%x", &i);
sprintf(buf, "%u", i);
SetWindowText(GetDlgItem(hW, IDC_VALUEFROM), (LPCTSTR)buf);
GetWindowText(GetDlgItem(hW, IDC_VALUETO), (LPTSTR)buf, 255);
sscanf(buf, "%x", &i);
sprintf(buf, "%u", i);
SetWindowText(GetDlgItem(hW, IDC_VALUETO), (LPCTSTR)buf);
}
}
else if (current_searchbase == SEARCHBASE_DEC){
GetWindowText(GetDlgItem(hW, IDC_VALUEFROM), (LPTSTR)buf, 255);
sscanf(buf, "%u", &i);
sprintf(buf, "%X", i);
SetWindowText(GetDlgItem(hW, IDC_VALUEFROM), (LPCTSTR)buf);
GetWindowText(GetDlgItem(hW, IDC_VALUETO), (LPTSTR)buf, 255);
sscanf(buf, "%u", &i);
sprintf(buf, "%X", i);
SetWindowText(GetDlgItem(hW, IDC_VALUETO), (LPCTSTR)buf);
}
current_searchbase = SendMessage(GetDlgItem(hW, IDC_DATABASE), CB_GETCURSEL, 0, 0);
break;
case IDC_DATATYPE:
case IDC_RESLIST:
switch (HIWORD(wParam)) {
case LBN_SELCHANGE:
Button_Enable(GetDlgItem(hW, IDC_FREEZE), TRUE);
Button_Enable(GetDlgItem(hW, IDC_MODIFY), TRUE);
Button_Enable(GetDlgItem(hW, IDC_COPY), TRUE);
break;
case LBN_SELCANCEL:
Button_Enable(GetDlgItem(hW, IDC_FREEZE), FALSE);
Button_Enable(GetDlgItem(hW, IDC_MODIFY), FALSE);
Button_Enable(GetDlgItem(hW, IDC_COPY), FALSE);
break;
}
break;
}
break;
case WM_CLOSE:
EndDialog(hW, TRUE);
EndDialog(hW, FALSE);
return TRUE;
}

View File

@ -1499,6 +1499,32 @@ void CreateMainMenu() {
ADDMENUITEM(0, _("Cheat &Search..."), ID_CONFIGURATION_CHEATSEARCH);
ADDMENUITEM(0, _("Ch&eat Code..."), ID_CONFIGURATION_CHEATLIST);
ADDSEPARATOR(0);
#ifdef ENABLE_NLS
ADDSUBMENUS(0, 1, _("&Language"));
if (langs != langs) free(langs);
langs = (_langs*)malloc(sizeof(_langs));
strcpy(langs[0].lang, "English");
InitLanguages(); i=1;
while ((lang = GetLanguageNext()) != NULL) {
langs = (_langs*)realloc(langs, sizeof(_langs)*(i+1));
strcpy(langs[i].lang, lang);
if (!strcmp(Config.Lang, lang)) {
ADDMENUITEMC(1, ParseLang(langs[i].lang), ID_LANGS + i);
} else {
ADDMENUITEM(1, ParseLang(langs[i].lang), ID_LANGS + i);
}
i++;
}
CloseLanguages();
langsMax = i;
if (!strcmp(Config.Lang, "English")) {
ADDMENUITEMC(1, _("English"), ID_LANGS);
} else {
ADDMENUITEM(1, _("English"), ID_LANGS);
}
ADDSEPARATOR(0);
#endif
ADDMENUITEM(0, _("&Memory cards..."), ID_CONFIGURATION_MEMORYCARDMANAGER);
ADDMENUITEM(0, _("C&PU..."), ID_CONFIGURATION_CPU);
ADDSEPARATOR(0);
@ -1511,32 +1537,6 @@ void CreateMainMenu() {
ADDSEPARATOR(0);
ADDMENUITEM(0, _("&Plugins && Bios..."), ID_CONFIGURATION);
#ifdef ENABLE_NLS
ADDSUBMENU(0, _("&Language"));
if (langs != langs) free(langs);
langs = (_langs*)malloc(sizeof(_langs));
strcpy(langs[0].lang, "English");
InitLanguages(); i=1;
while ((lang = GetLanguageNext()) != NULL) {
langs = (_langs*)realloc(langs, sizeof(_langs)*(i+1));
strcpy(langs[i].lang, lang);
if (!strcmp(Config.Lang, lang)) {
ADDMENUITEMC(0, ParseLang(langs[i].lang), ID_LANGS + i);
} else {
ADDMENUITEM(0, ParseLang(langs[i].lang), ID_LANGS + i);
}
i++;
}
CloseLanguages();
langsMax = i;
if (!strcmp(Config.Lang, "English")) {
ADDMENUITEMC(0, _("English"), ID_LANGS);
} else {
ADDMENUITEM(0, _("English"), ID_LANGS);
}
#endif
ADDSUBMENU(0, _("&Help"));
ADDMENUITEM(0, _("&About..."), ID_HELP_ABOUT);

View File

@ -1099,11 +1099,11 @@ BuildCmd=$(CC) -c cheat.c -o cheat.o $(CFLAGS)
[Unit106]
FileName=gui\CheatDlg.c
CompileCpp=1
CompileCpp=0
Folder=gui
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
BuildCmd=$(CC) -c CheatDlg.c -o CheatDlg.o $(CFLAGS)

View File

@ -188,7 +188,7 @@ IDD_CONFIG DIALOGEX 0, 0, 322, 161
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION |
WS_SYSMENU
CAPTION "Configuration"
FONT 8, "MS Sans Serif", 0, 0, 0x0
FONT 8, "MS Sans Serif", 0, 0, 0x1
BEGIN
COMBOBOX IDC_LISTGPU,10,10,145,74,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
@ -234,7 +234,7 @@ END
IDD_CHEATLIST DIALOGEX 0, 0, 392, 201
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Edit Cheat Codes"
FONT 8, "MS Sans Serif", 0, 0, 0x0
FONT 8, "MS Sans Serif", 0, 0, 0x1
BEGIN
PUSHBUTTON "&Close",IDCANCEL,324,180,61,14
CONTROL "List2",IDC_CODELIST,"SysListView32",LVS_REPORT |
@ -283,21 +283,34 @@ BEGIN
WS_TABSTOP
END
IDD_CHEATEDIT DIALOGEX 0, 0, 261, 175
IDD_CHEATEDIT DIALOGEX 0, 0, 242, 161
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |
WS_SYSMENU
CAPTION "Edit Cheat Code"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "OK",IDOK,139,154,50,14
PUSHBUTTON "Cancel",IDCANCEL,197,154,50,14
LTEXT "Description:",IDC_LABEL_DESCR,16,15,39,8
LTEXT "Cheat Code:",IDC_LABEL_CODE,15,49,42,8
EDITTEXT IDC_DESCR,15,25,232,14,ES_AUTOHSCROLL
EDITTEXT IDC_CODE,15,60,231,84,ES_MULTILINE | ES_UPPERCASE |
DEFPUSHBUTTON "OK",IDOK,126,143,50,14
PUSHBUTTON "Cancel",IDCANCEL,185,143,50,14
LTEXT "Description:",IDC_LABEL_DESCR,7,6,39,8
LTEXT "Cheat Code:",IDC_LABEL_CODE,6,40,42,8
EDITTEXT IDC_DESCR,6,17,232,14,ES_AUTOHSCROLL
EDITTEXT IDC_CODE,6,52,231,84,ES_MULTILINE | ES_UPPERCASE |
ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN
END
IDD_CHEATVALEDIT DIALOGEX 0, 0, 162, 57
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Enter New Value"
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
DEFPUSHBUTTON "OK",IDOK,25,40,50,14
PUSHBUTTON "Cancel",IDCANCEL,87,40,50,14
LTEXT "Address:",IDC_LABEL_ADDRESS,7,7,30,8
LTEXT "Value:",IDC_LABEL_VALUE,8,24,30,8
EDITTEXT IDC_ADDRESS,41,4,113,12,ES_AUTOHSCROLL | WS_DISABLED
EDITTEXT IDC_VALUE,41,22,113,12,ES_AUTOHSCROLL
END
/////////////////////////////////////////////////////////////////////////////
//
@ -357,14 +370,6 @@ BEGIN
TOPMARGIN, 7
BOTTOMMARGIN, 194
END
IDD_CHEATEDIT, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 254
TOPMARGIN, 7
BOTTOMMARGIN, 168
END
END
#endif // APSTUDIO_INVOKED

View File

@ -1,5 +1,5 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Microsoft Developer Studio generated include file.
// Used by pcsx.rc
//
#define IDS_TITLE 1
@ -30,6 +30,7 @@
#define IDD_CHEATEDIT 114
#define IDD_CP0REGS 115
#define IDC_COPY 115
#define IDD_CHEATVALEDIT 115
#define IDD_COP2D 116
#define IDD_COP2C 117
#define MAIN_LOGO 118
@ -37,6 +38,7 @@
#define IDD_MEMVIEW 136
#define IDC_EDIT2 1001
#define IDC_CODE 1001
#define IDC_VALUE 1001
#define IDC_MCD2 1004
#define IDC_ASMCHECK1 1005
#define IDC_MCD1 1005
@ -57,6 +59,7 @@
#define IDC_EDIT1 1013
#define IDC_CDDA 1013
#define IDC_DESCR 1013
#define IDC_ADDRESS 1013
#define IDC_CLOSE 1014
#define IDC_PCSX_ABOUT_TEXT 1014
#define IDC_PSXOUT 1014
@ -141,6 +144,7 @@
#define IDC_LABEL_CODE 1051
#define IDC_GPR5 1052
#define IDC_LISTGPU 1052
#define IDC_LABEL_ADDRESS 1052
#define IDC_GPR6 1053
#define IDC_LISTSPU 1053
#define IDC_GPR7 1054
@ -331,9 +335,9 @@
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 114
#define _APS_NEXT_RESOURCE_VALUE 116
#define _APS_NEXT_COMMAND_VALUE 40047
#define _APS_NEXT_CONTROL_VALUE 1052
#define _APS_NEXT_CONTROL_VALUE 1053
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif