From f3499bc61cd525e6d342854ebe212d4c977662dc Mon Sep 17 00:00:00 2001 From: "SND\\weimingzhi_cp" Date: Wed, 26 Aug 2009 14:36:53 +0000 Subject: git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@27779 e17a0e51-4ae3-4d35-97c3-1a29b211df97 --- ChangeLog | 12 + doc/tweaks.txt | 7 + gui/Cheat.c | 6 + win32/gui/CheatDlg.c | 640 +++++++++++++++++++++++++++++++++++++++++++++++---- win32/gui/WndMain.c | 34 +-- win32/pcsx.dev | 4 +- win32/pcsx.rc | 39 ++-- win32/resource.h | 10 +- 8 files changed, 673 insertions(+), 79 deletions(-) diff --git a/ChangeLog b/ChangeLog index 63768c4f..bbc41652 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +August 26, 2009 Wei Mingzhi + + * 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 * win32/gui/WndMain.c: Set the language to the OS language by default. diff --git a/doc/tweaks.txt b/doc/tweaks.txt index 0788302f..4c29ab58 100644 --- a/doc/tweaks.txt +++ b/doc/tweaks.txt @@ -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. diff --git a/gui/Cheat.c b/gui/Cheat.c index f324ee7d..ec398a44 100644 --- a/gui/Cheat.c +++ b/gui/Cheat.c @@ -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; diff --git a/win32/gui/CheatDlg.c b/win32/gui/CheatDlg.c index 88cb3214..05b4285f 100644 --- a/win32/gui/CheatDlg.c +++ b/win32/gui/CheatDlg.c @@ -19,6 +19,9 @@ #include #include +#ifndef _WIN32_IE +#define _WIN32_IE 0x0400 +#endif #include #include #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", ¤t_valuefrom); + GetWindowText(GetDlgItem(hW, IDC_VALUETO), (LPTSTR)buf, 255); + sscanf(buf, "%u", ¤t_valueto); + } + else { + GetWindowText(GetDlgItem(hW, IDC_VALUEFROM), (LPTSTR)buf, 255); + sscanf(buf, "%x", ¤t_valuefrom); + GetWindowText(GetDlgItem(hW, IDC_VALUETO), (LPTSTR)buf, 255); + sscanf(buf, "%x", ¤t_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; } diff --git a/win32/gui/WndMain.c b/win32/gui/WndMain.c index 40414ab2..6825ea13 100644 --- a/win32/gui/WndMain.c +++ b/win32/gui/WndMain.c @@ -1499,20 +1499,8 @@ void CreateMainMenu() { ADDMENUITEM(0, _("Cheat &Search..."), ID_CONFIGURATION_CHEATSEARCH); ADDMENUITEM(0, _("Ch&eat Code..."), ID_CONFIGURATION_CHEATLIST); ADDSEPARATOR(0); - ADDMENUITEM(0, _("&Memory cards..."), ID_CONFIGURATION_MEMORYCARDMANAGER); - ADDMENUITEM(0, _("C&PU..."), ID_CONFIGURATION_CPU); - ADDSEPARATOR(0); - ADDMENUITEM(0, _("&NetPlay..."), ID_CONFIGURATION_NETPLAY); - ADDSEPARATOR(0); - ADDMENUITEM(0, _("&Controllers..."), ID_CONFIGURATION_CONTROLLERS); - ADDMENUITEM(0, _("CD-&ROM..."), ID_CONFIGURATION_CDROM); - ADDMENUITEM(0, _("&Sound..."), ID_CONFIGURATION_SOUND); - ADDMENUITEM(0, _("&Graphics..."), ID_CONFIGURATION_GRAPHICS); - ADDSEPARATOR(0); - ADDMENUITEM(0, _("&Plugins && Bios..."), ID_CONFIGURATION); - #ifdef ENABLE_NLS - ADDSUBMENU(0, _("&Language")); + ADDSUBMENUS(0, 1, _("&Language")); if (langs != langs) free(langs); langs = (_langs*)malloc(sizeof(_langs)); @@ -1522,20 +1510,32 @@ void CreateMainMenu() { 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); + ADDMENUITEMC(1, ParseLang(langs[i].lang), ID_LANGS + i); } else { - ADDMENUITEM(0, ParseLang(langs[i].lang), ID_LANGS + i); + ADDMENUITEM(1, ParseLang(langs[i].lang), ID_LANGS + i); } i++; } CloseLanguages(); langsMax = i; if (!strcmp(Config.Lang, "English")) { - ADDMENUITEMC(0, _("English"), ID_LANGS); + ADDMENUITEMC(1, _("English"), ID_LANGS); } else { - ADDMENUITEM(0, _("English"), ID_LANGS); + ADDMENUITEM(1, _("English"), ID_LANGS); } + ADDSEPARATOR(0); #endif + ADDMENUITEM(0, _("&Memory cards..."), ID_CONFIGURATION_MEMORYCARDMANAGER); + ADDMENUITEM(0, _("C&PU..."), ID_CONFIGURATION_CPU); + ADDSEPARATOR(0); + ADDMENUITEM(0, _("&NetPlay..."), ID_CONFIGURATION_NETPLAY); + ADDSEPARATOR(0); + ADDMENUITEM(0, _("&Controllers..."), ID_CONFIGURATION_CONTROLLERS); + ADDMENUITEM(0, _("CD-&ROM..."), ID_CONFIGURATION_CDROM); + ADDMENUITEM(0, _("&Sound..."), ID_CONFIGURATION_SOUND); + ADDMENUITEM(0, _("&Graphics..."), ID_CONFIGURATION_GRAPHICS); + ADDSEPARATOR(0); + ADDMENUITEM(0, _("&Plugins && Bios..."), ID_CONFIGURATION); ADDSUBMENU(0, _("&Help")); ADDMENUITEM(0, _("&About..."), ID_HELP_ABOUT); diff --git a/win32/pcsx.dev b/win32/pcsx.dev index f038aa72..348e38a1 100644 --- a/win32/pcsx.dev +++ b/win32/pcsx.dev @@ -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) diff --git a/win32/pcsx.rc b/win32/pcsx.rc index 4dca7a5e..d2b6277c 100644 --- a/win32/pcsx.rc +++ b/win32/pcsx.rc @@ -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 diff --git a/win32/resource.h b/win32/resource.h index 5aa19f1c..fc9f0660 100644 --- a/win32/resource.h +++ b/win32/resource.h @@ -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 -- cgit v1.2.3