+++ /dev/null
-/* Cheat Support for PCSX-Reloaded\r
- * Copyright (C) 2009, Wei Mingzhi <whistler_wmz@users.sf.net>.\r
- *\r
- * This program is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program; if not, write to the Free Software\r
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307 USA\r
- */\r
-\r
-#include <windows.h>\r
-#include <windowsx.h>\r
-#ifndef _WIN32_IE\r
-#define _WIN32_IE 0x0400\r
-#endif\r
-#include <commctrl.h>\r
-#include <stdio.h>\r
-#include "psxcommon.h"\r
-#include "psxmem.h"\r
-#include "cheat.h"\r
-#include "resource.h"\r
-#include "Win32.h"\r
-\r
-static void UpdateCheatDlg(HWND hW) {\r
- HWND List;\r
- LV_ITEM item;\r
- int i;\r
-\r
- List = GetDlgItem(hW, IDC_CODELIST);\r
-\r
- ListView_DeleteAllItems(List);\r
-\r
- for (i = 0; i < NumCheats; i++) {\r
- memset(&item, 0, sizeof(item));\r
-\r
- item.mask = LVIF_TEXT;\r
- item.iItem = i;\r
- item.pszText = Cheats[i].Descr;\r
- item.iSubItem = 0;\r
-\r
- SendMessage(List, LVM_INSERTITEM, 0, (LPARAM)&item);\r
-\r
- item.pszText = (Cheats[i].Enabled ? _("Yes") : _("No"));\r
- item.iSubItem = 1;\r
-\r
- SendMessage(List, LVM_SETITEM, 0, (LPARAM)&item);\r
- }\r
-}\r
-\r
-static int iEditItem = -1;\r
-static char szDescr[256], szCode[1024];\r
-\r
-static LRESULT WINAPI CheatEditDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) {\r
- int i;\r
-\r
- switch (uMsg) {\r
- case WM_INITDIALOG:\r
- SetWindowText(hW, _("Edit Cheat"));\r
- Static_SetText(GetDlgItem(hW, IDC_LABEL_DESCR), _("Description:"));\r
- Static_SetText(GetDlgItem(hW, IDC_LABEL_CODE), _("Cheat Code:"));\r
- Button_SetText(GetDlgItem(hW, IDOK), _("OK"));\r
- Button_SetText(GetDlgItem(hW, IDCANCEL), _("Cancel"));\r
-\r
- assert(iEditItem != -1 && iEditItem < NumCheats);\r
-\r
- Edit_SetText(GetDlgItem(hW, IDC_DESCR), Cheats[iEditItem].Descr);\r
-\r
- szCode[0] = '\0';\r
- for (i = Cheats[iEditItem].First; i < Cheats[iEditItem].First + Cheats[iEditItem].n; i++) {\r
- sprintf(szDescr, "%.8X %.4X\r\n", CheatCodes[i].Addr, CheatCodes[i].Val);\r
- strcat(szCode, szDescr);\r
- }\r
- Edit_SetText(GetDlgItem(hW, IDC_CODE), szCode);\r
- break;\r
-\r
- case WM_COMMAND:\r
- switch (LOWORD(wParam)) {\r
- case IDOK:\r
- Edit_GetText(GetDlgItem(hW, IDC_DESCR), szDescr, 256);\r
- Edit_GetText(GetDlgItem(hW, IDC_CODE), szCode, 1024);\r
-\r
- if (EditCheat(iEditItem, szDescr, szCode) != 0) {\r
- SysMessage(_("Invalid cheat code!"));\r
- }\r
- else {\r
- EndDialog(hW, TRUE);\r
- return TRUE;\r
- }\r
- break;\r
-\r
- case IDCANCEL:\r
- EndDialog(hW, FALSE);\r
- return TRUE;\r
- }\r
- break;\r
-\r
- case WM_CLOSE:\r
- EndDialog(hW, FALSE);\r
- return TRUE;\r
- }\r
-\r
- return FALSE;\r
-}\r
-\r
-static LRESULT WINAPI CheatAddDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) {\r
- switch (uMsg) {\r
- case WM_INITDIALOG:\r
- SetWindowText(hW, _("Add New Cheat"));\r
- Static_SetText(GetDlgItem(hW, IDC_LABEL_DESCR), _("Description:"));\r
- Static_SetText(GetDlgItem(hW, IDC_LABEL_CODE), _("Cheat Code:"));\r
- Button_SetText(GetDlgItem(hW, IDOK), _("OK"));\r
- Button_SetText(GetDlgItem(hW, IDCANCEL), _("Cancel"));\r
- Edit_SetText(GetDlgItem(hW, IDC_DESCR), szDescr);\r
- Edit_SetText(GetDlgItem(hW, IDC_CODE), szCode);\r
- break;\r
-\r
- case WM_COMMAND:\r
- switch (LOWORD(wParam)) {\r
- case IDOK:\r
- Edit_GetText(GetDlgItem(hW, IDC_DESCR), szDescr, 256);\r
- Edit_GetText(GetDlgItem(hW, IDC_CODE), szCode, 1024);\r
-\r
- if (AddCheat(szDescr, szCode) != 0) {\r
- SysMessage(_("Invalid cheat code!"));\r
- }\r
- else {\r
- EndDialog(hW, TRUE);\r
- return TRUE;\r
- }\r
- break;\r
-\r
- case IDCANCEL:\r
- EndDialog(hW, FALSE);\r
- return TRUE;\r
- }\r
- break;\r
-\r
- case WM_CLOSE:\r
- EndDialog(hW, FALSE);\r
- return TRUE;\r
- }\r
-\r
- return FALSE;\r
-}\r
-\r
-LRESULT WINAPI CheatDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) {\r
- HWND List;\r
- LV_COLUMN col;\r
- LV_ITEM item;\r
- int i;\r
- OPENFILENAME ofn;\r
- char szFileName[256];\r
- char szFileTitle[256];\r
- char szFilter[256];\r
-\r
- switch (uMsg) {\r
- case WM_INITDIALOG:\r
- SetWindowText(hW, _("Edit Cheat Codes"));\r
-\r
- Button_SetText(GetDlgItem(hW, IDC_ADDCODE), _("&Add Code"));\r
- Button_SetText(GetDlgItem(hW, IDC_EDITCODE), _("&Edit Code"));\r
- Button_SetText(GetDlgItem(hW, IDC_REMOVECODE), _("&Remove Code"));\r
- Button_SetText(GetDlgItem(hW, IDC_TOGGLECODE), _("&Enable/Disable"));\r
- Button_SetText(GetDlgItem(hW, IDC_LOADCODE), _("&Load..."));\r
- Button_SetText(GetDlgItem(hW, IDC_SAVECODE), _("&Save As..."));\r
- Button_SetText(GetDlgItem(hW, IDCANCEL), _("&Close"));\r
-\r
- List = GetDlgItem(hW, IDC_CODELIST);\r
-\r
- SendMessage(List, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT);\r
-\r
- memset(&col, 0, sizeof(col));\r
-\r
- col.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;\r
- col.fmt = LVCFMT_LEFT;\r
-\r
- col.pszText = _("Description");\r
- col.cx = 400;\r
-\r
- SendMessage(List, LVM_INSERTCOLUMN, 0, (LPARAM)&col);\r
-\r
- col.pszText = _("Enabled");\r
- col.cx = 55;\r
-\r
- SendMessage(List, LVM_INSERTCOLUMN, 1, (LPARAM)&col);\r
-\r
- UpdateCheatDlg(hW);\r
- break;\r
-\r
- case WM_COMMAND:\r
- switch (LOWORD(wParam)) {\r
- case IDCANCEL:\r
- EndDialog(hW, FALSE);\r
- return TRUE;\r
-\r
- case IDC_ADDCODE:\r
- i = NumCheats;\r
- szDescr[0] = '\0';\r
- szCode[0] = '\0';\r
-\r
- DialogBox(gApp.hInstance, MAKEINTRESOURCE(IDD_CHEATEDIT), hW, (DLGPROC)CheatAddDlgProc);\r
-\r
- if (NumCheats > i) {\r
- // new cheat added\r
- List = GetDlgItem(hW, IDC_CODELIST);\r
- memset(&item, 0, sizeof(item));\r
-\r
- item.mask = LVIF_TEXT;\r
- item.iItem = i;\r
- item.pszText = Cheats[i].Descr;\r
- item.iSubItem = 0;\r
-\r
- SendMessage(List, LVM_INSERTITEM, 0, (LPARAM)&item);\r
-\r
- item.pszText = (Cheats[i].Enabled ? _("Yes") : _("No"));\r
- item.iSubItem = 1;\r
-\r
- SendMessage(List, LVM_SETITEM, 0, (LPARAM)&item);\r
- }\r
- break;\r
-\r
- case IDC_EDITCODE:\r
- List = GetDlgItem(hW, IDC_CODELIST);\r
- iEditItem = ListView_GetSelectionMark(List);\r
-\r
- if (iEditItem != -1) {\r
- DialogBox(gApp.hInstance, MAKEINTRESOURCE(IDD_CHEATEDIT), hW, (DLGPROC)CheatEditDlgProc);\r
-\r
- memset(&item, 0, sizeof(item));\r
-\r
- item.mask = LVIF_TEXT;\r
- item.iItem = iEditItem;\r
- item.pszText = Cheats[iEditItem].Descr;\r
- item.iSubItem = 0;\r
-\r
- SendMessage(List, LVM_SETITEM, 0, (LPARAM)&item);\r
- }\r
- break;\r
-\r
- case IDC_REMOVECODE:\r
- List = GetDlgItem(hW, IDC_CODELIST);\r
- i = ListView_GetSelectionMark(List);\r
-\r
- if (i != -1) {\r
- RemoveCheat(i);\r
- ListView_DeleteItem(List, i);\r
- ListView_SetSelectionMark(List, -1);\r
- }\r
- break;\r
-\r
- case IDC_TOGGLECODE:\r
- List = GetDlgItem(hW, IDC_CODELIST);\r
- i = ListView_GetSelectionMark(List);\r
-\r
- if (i != -1) {\r
- Cheats[i].Enabled ^= 1;\r
-\r
- memset(&item, 0, sizeof(item));\r
-\r
- item.mask = LVIF_TEXT;\r
- item.iItem = i;\r
- item.pszText = (Cheats[i].Enabled ? _("Yes") : _("No"));\r
- item.iSubItem = 1;\r
-\r
- SendMessage(List, LVM_SETITEM, 0, (LPARAM)&item);\r
- }\r
- break;\r
-\r
- case IDC_LOADCODE:\r
- memset(&szFileName, 0, sizeof(szFileName));\r
- memset(&szFileTitle, 0, sizeof(szFileTitle));\r
- memset(&szFilter, 0, sizeof(szFilter));\r
-\r
- strcpy(szFilter, _("PCSX Cheat Code Files"));\r
- strcatz(szFilter, "*.*");\r
-\r
- ofn.lStructSize = sizeof(OPENFILENAME);\r
- ofn.hwndOwner = hW;\r
- ofn.lpstrFilter = szFilter;\r
- ofn.lpstrCustomFilter = NULL;\r
- ofn.nMaxCustFilter = 0;\r
- ofn.nFilterIndex = 1;\r
- ofn.lpstrFile = szFileName;\r
- ofn.nMaxFile = 256;\r
- ofn.lpstrInitialDir = ".\\Cheats";\r
- ofn.lpstrFileTitle = szFileTitle;\r
- ofn.nMaxFileTitle = 256;\r
- ofn.lpstrTitle = NULL;\r
- ofn.lpstrDefExt = "CHT";\r
- ofn.Flags = OFN_HIDEREADONLY | OFN_NOCHANGEDIR;\r
-\r
- if (GetOpenFileName((LPOPENFILENAME)&ofn)) {\r
- LoadCheats(szFileName);\r
- UpdateCheatDlg(hW);\r
- }\r
- break;\r
-\r
- case IDC_SAVECODE:\r
- memset(&szFileName, 0, sizeof(szFileName));\r
- memset(&szFileTitle, 0, sizeof(szFileTitle));\r
- memset(&szFilter, 0, sizeof(szFilter));\r
-\r
- strcpy(szFilter, _("PCSX Cheat Code Files"));\r
- strcatz(szFilter, "*.*");\r
-\r
- ofn.lStructSize = sizeof(OPENFILENAME);\r
- ofn.hwndOwner = hW;\r
- ofn.lpstrFilter = szFilter;\r
- ofn.lpstrCustomFilter = NULL;\r
- ofn.nMaxCustFilter = 0;\r
- ofn.nFilterIndex = 1;\r
- ofn.lpstrFile = szFileName;\r
- ofn.nMaxFile = 256;\r
- ofn.lpstrInitialDir = ".\\Cheats";\r
- ofn.lpstrFileTitle = szFileTitle;\r
- ofn.nMaxFileTitle = 256;\r
- ofn.lpstrTitle = NULL;\r
- ofn.lpstrDefExt = "CHT";\r
- ofn.Flags = OFN_HIDEREADONLY | OFN_NOCHANGEDIR | OFN_OVERWRITEPROMPT;\r
-\r
- if (GetOpenFileName((LPOPENFILENAME)&ofn)) {\r
- SaveCheats(szFileName);\r
- }\r
- break;\r
- }\r
- break;\r
-\r
- case WM_NOTIFY:\r
- switch (LOWORD(wParam)) {\r
- case IDC_CODELIST:\r
- List = GetDlgItem(hW, IDC_CODELIST);\r
- i = ListView_GetSelectionMark(List);\r
-\r
- if (i != -1) {\r
- Button_Enable(GetDlgItem(hW, IDC_EDITCODE), TRUE);\r
- Button_Enable(GetDlgItem(hW, IDC_REMOVECODE), TRUE);\r
- Button_Enable(GetDlgItem(hW, IDC_TOGGLECODE), TRUE);\r
- }\r
- else {\r
- Button_Enable(GetDlgItem(hW, IDC_EDITCODE), FALSE);\r
- Button_Enable(GetDlgItem(hW, IDC_REMOVECODE), FALSE);\r
- Button_Enable(GetDlgItem(hW, IDC_TOGGLECODE), FALSE);\r
- }\r
-\r
- Button_Enable(GetDlgItem(hW, IDC_SAVECODE), (NumCheats > 0));\r
- break;\r
- }\r
- break;\r
-\r
- case WM_CLOSE:\r
- EndDialog(hW, FALSE);\r
- return TRUE;\r
- }\r
-\r
- return FALSE;\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////////////\r
-\r
-#define SEARCH_EQUALVAL 0\r
-#define SEARCH_NOTEQUALVAL 1\r
-#define SEARCH_RANGE 2\r
-#define SEARCH_INCBY 3\r
-#define SEARCH_DECBY 4\r
-#define SEARCH_INC 5\r
-#define SEARCH_DEC 6\r
-#define SEARCH_DIFFERENT 7\r
-#define SEARCH_NOCHANGE 8\r
-\r
-#define SEARCHTYPE_8BIT 0\r
-#define SEARCHTYPE_16BIT 1\r
-#define SEARCHTYPE_32BIT 2\r
-\r
-#define SEARCHBASE_DEC 0\r
-#define SEARCHBASE_HEX 1\r
-\r
-static char current_search = SEARCH_EQUALVAL;\r
-static char current_searchtype = SEARCHTYPE_8BIT;\r
-static char current_searchbase = SEARCHBASE_DEC;\r
-static uint32_t current_valuefrom = 0;\r
-static uint32_t current_valueto = 0;\r
-\r
-static void UpdateCheatSearchDlg(HWND hW) {\r
- char buf[256];\r
- int i;\r
-\r
- SendMessage(GetDlgItem(hW, IDC_SEARCHFOR), CB_RESETCONTENT, 0, 0);\r
- SendMessage(GetDlgItem(hW, IDC_RESLIST), LB_RESETCONTENT, 0, 0);\r
-\r
- Button_Enable(GetDlgItem(hW, IDC_FREEZE), FALSE);\r
- Button_Enable(GetDlgItem(hW, IDC_MODIFY), FALSE);\r
- Button_Enable(GetDlgItem(hW, IDC_COPY), FALSE);\r
-\r
- SendMessage(GetDlgItem(hW, IDC_SEARCHFOR), CB_ADDSTRING, 0, (LPARAM)_("Equal Value"));\r
- SendMessage(GetDlgItem(hW, IDC_SEARCHFOR), CB_ADDSTRING, 0, (LPARAM)_("Not Equal Value"));\r
- SendMessage(GetDlgItem(hW, IDC_SEARCHFOR), CB_ADDSTRING, 0, (LPARAM)_("Range"));\r
-\r
- if (prevM != NULL) {\r
- SendMessage(GetDlgItem(hW, IDC_SEARCHFOR), CB_ADDSTRING, 0, (LPARAM)_("Increased By"));\r
- SendMessage(GetDlgItem(hW, IDC_SEARCHFOR), CB_ADDSTRING, 0, (LPARAM)_("Decreased By"));\r
- SendMessage(GetDlgItem(hW, IDC_SEARCHFOR), CB_ADDSTRING, 0, (LPARAM)_("Increased"));\r
- SendMessage(GetDlgItem(hW, IDC_SEARCHFOR), CB_ADDSTRING, 0, (LPARAM)_("Decreased"));\r
- SendMessage(GetDlgItem(hW, IDC_SEARCHFOR), CB_ADDSTRING, 0, (LPARAM)_("Different"));\r
- SendMessage(GetDlgItem(hW, IDC_SEARCHFOR), CB_ADDSTRING, 0, (LPARAM)_("No Change"));\r
-\r
- ComboBox_Enable(GetDlgItem(hW, IDC_DATATYPE), FALSE);\r
- }\r
- else {\r
- ComboBox_Enable(GetDlgItem(hW, IDC_DATATYPE), TRUE);\r
- }\r
-\r
- SendMessage(GetDlgItem(hW, IDC_SEARCHFOR), CB_SETCURSEL, (WPARAM)current_search, 0);\r
-\r
- if (current_search == SEARCH_RANGE) {\r
- ShowWindow(GetDlgItem(hW, IDC_LABEL_TO), SW_SHOW);\r
- ShowWindow(GetDlgItem(hW, IDC_VALUETO), SW_SHOW);\r
- }\r
- else {\r
- ShowWindow(GetDlgItem(hW, IDC_LABEL_TO), SW_HIDE);\r
- ShowWindow(GetDlgItem(hW, IDC_VALUETO), SW_HIDE);\r
- }\r
-\r
- SendMessage(GetDlgItem(hW, IDC_DATATYPE), CB_SETCURSEL, (WPARAM)current_searchtype, 0);\r
- SendMessage(GetDlgItem(hW, IDC_DATABASE), CB_SETCURSEL, (WPARAM)current_searchbase, 0);\r
-\r
- if (current_searchbase == SEARCHBASE_HEX) {\r
- sprintf(buf, "%X", current_valuefrom);\r
- SetWindowText(GetDlgItem(hW, IDC_VALUEFROM), buf);\r
- sprintf(buf, "%X", current_valueto);\r
- SetWindowText(GetDlgItem(hW, IDC_VALUETO), buf);\r
- }\r
- else {\r
- sprintf(buf, "%u", current_valuefrom);\r
- SetWindowText(GetDlgItem(hW, IDC_VALUEFROM), buf);\r
- sprintf(buf, "%u", current_valueto);\r
- SetWindowText(GetDlgItem(hW, IDC_VALUETO), buf);\r
- }\r
-\r
- if (prevM == NULL) {\r
- SendMessage(GetDlgItem(hW, IDC_RESLIST), LB_ADDSTRING, (WPARAM)0, (LPARAM)_("Enter the values and start your search."));\r
- EnableWindow(GetDlgItem(hW, IDC_RESLIST), FALSE);\r
- }\r
- else {\r
- if (NumSearchResults == 0) {\r
- SendMessage(GetDlgItem(hW, IDC_RESLIST), LB_ADDSTRING, (WPARAM)0, (LPARAM)_("No addresses found."));\r
- EnableWindow(GetDlgItem(hW, IDC_RESLIST), FALSE);\r
- }\r
- else if (NumSearchResults > 100) {\r
- SendMessage(GetDlgItem(hW, IDC_RESLIST), LB_ADDSTRING, (WPARAM)0, (LPARAM)_("Too many addresses found."));\r
- EnableWindow(GetDlgItem(hW, IDC_RESLIST), FALSE);\r
- }\r
- else {\r
- for (i = 0; i < NumSearchResults; i++) {\r
- u32 addr = SearchResults[i];\r
-\r
- switch (current_searchtype) {\r
- case SEARCHTYPE_8BIT:\r
- sprintf(buf, _("%.8X Current: %u (%.2X), Previous: %u (%.2X)"),\r
- addr, PSXMu8(addr), PSXMu8(addr), PrevMu8(addr), PrevMu8(addr));\r
- break;\r
-\r
- case SEARCHTYPE_16BIT:\r
- sprintf(buf, _("%.8X Current: %u (%.4X), Previous: %u (%.4X)"),\r
- addr, PSXMu16(addr), PSXMu16(addr), PrevMu16(addr), PrevMu16(addr));\r
- break;\r
-\r
- case SEARCHTYPE_32BIT:\r
- sprintf(buf, _("%.8X Current: %u (%.8X), Previous: %u (%.8X)"),\r
- addr, PSXMu32(addr), PSXMu32(addr), PrevMu32(addr), PrevMu32(addr));\r
- break;\r
-\r
- default:\r
- assert(FALSE); // impossible\r
- break;\r
- }\r
-\r
- SendMessage(GetDlgItem(hW, IDC_RESLIST), LB_ADDSTRING, (WPARAM)0, (LPARAM)buf);\r
- SendMessage(GetDlgItem(hW, IDC_RESLIST), LB_SETITEMDATA, i, (LPARAM)i);\r
- }\r
- EnableWindow(GetDlgItem(hW, IDC_RESLIST), TRUE);\r
- }\r
- }\r
-\r
- sprintf(buf, _("Founded Addresses: %d"), NumSearchResults);\r
- Static_SetText(GetDlgItem(hW, IDC_LABEL_RESULTSFOUND), buf);\r
-}\r
-\r
-static int iCurItem = 0;\r
-\r
-static LRESULT WINAPI CheatFreezeProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) {\r
- u32 val;\r
- char buf[256];\r
-\r
- switch (uMsg) {\r
- case WM_INITDIALOG:\r
- SetWindowText(hW, _("Freeze"));\r
- Static_SetText(GetDlgItem(hW, IDC_LABEL_ADDRESS), _("Address:"));\r
- Static_SetText(GetDlgItem(hW, IDC_LABEL_VALUE), _("Value:"));\r
-\r
- sprintf(buf, "%.8X", SearchResults[iCurItem]);\r
- SetWindowText(GetDlgItem(hW, IDC_ADDRESS), buf);\r
-\r
- switch (current_searchtype) {\r
- case SEARCHTYPE_8BIT:\r
- val = PSXMu8(SearchResults[iCurItem]);\r
- break;\r
-\r
- case SEARCHTYPE_16BIT:\r
- val = PSXMu16(SearchResults[iCurItem]);\r
- break;\r
-\r
- case SEARCHTYPE_32BIT:\r
- val = PSXMu32(SearchResults[iCurItem]);\r
- break;\r
-\r
- default:\r
- assert(FALSE); // should not reach here\r
- break;\r
- }\r
-\r
- sprintf(buf, "%u", val);\r
- SetWindowText(GetDlgItem(hW, IDC_VALUE), buf);\r
- break;\r
-\r
- case WM_COMMAND:\r
- switch (LOWORD(wParam)) {\r
- case IDOK:\r
- val = 0;\r
- GetWindowText(GetDlgItem(hW, IDC_VALUE), buf, 255);\r
- sscanf(buf, "%u", &val);\r
-\r
- switch (current_searchtype) {\r
- case SEARCHTYPE_8BIT:\r
- if (val > (u32)0xFF) {\r
- val = 0xFF;\r
- }\r
- sprintf(szCode, "%.8X %.4X", (SearchResults[iCurItem] & 0x1FFFFF) | (CHEAT_CONST8 << 24), val);\r
- break;\r
-\r
- case SEARCHTYPE_16BIT:\r
- if (val > (u32)0xFFFF) {\r
- val = 0xFFFF;\r
- }\r
- sprintf(szCode, "%.8X %.4X", (SearchResults[iCurItem] & 0x1FFFFF) | (CHEAT_CONST16 << 24), val);\r
- break;\r
-\r
- case SEARCHTYPE_32BIT:\r
- sprintf(szCode, "%.8X %.4X\n%.8X %.4X",\r
- (SearchResults[iCurItem] & 0x1FFFFF) | (CHEAT_CONST16 << 24), val & 0xFFFF,\r
- ((SearchResults[iCurItem] + 2) & 0x1FFFFF) | (CHEAT_CONST16 << 24), ((val & 0xFFFF0000) >> 16) & 0xFFFF);\r
- break;\r
-\r
- default:\r
- assert(FALSE); // should not reach here\r
- break;\r
- }\r
-\r
- sprintf(szDescr, _("Freeze %.8X"), SearchResults[iCurItem]);\r
-\r
- if (DialogBox(gApp.hInstance, MAKEINTRESOURCE(IDD_CHEATEDIT), hW, (DLGPROC)CheatAddDlgProc)) {\r
- Cheats[NumCheats - 1].Enabled = 1;\r
- EndDialog(hW, TRUE);\r
- return TRUE;\r
- }\r
- break;\r
-\r
- case IDCANCEL:\r
- EndDialog(hW, FALSE);\r
- return TRUE;\r
- }\r
- break;\r
-\r
- case WM_CLOSE:\r
- EndDialog(hW, FALSE);\r
- return TRUE;\r
- }\r
-\r
- return FALSE;\r
-}\r
-\r
-static LRESULT WINAPI CheatModifyProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) {\r
- u32 val;\r
- char buf[256];\r
-\r
- switch (uMsg) {\r
- case WM_INITDIALOG:\r
- SetWindowText(hW, _("Modify"));\r
- Static_SetText(GetDlgItem(hW, IDC_LABEL_ADDRESS), _("Address:"));\r
- Static_SetText(GetDlgItem(hW, IDC_LABEL_VALUE), _("Value:"));\r
-\r
- sprintf(buf, "%.8X", SearchResults[iCurItem]);\r
- SetWindowText(GetDlgItem(hW, IDC_ADDRESS), buf);\r
-\r
- switch (current_searchtype) {\r
- case SEARCHTYPE_8BIT:\r
- val = PSXMu8(SearchResults[iCurItem]);\r
- break;\r
-\r
- case SEARCHTYPE_16BIT:\r
- val = PSXMu16(SearchResults[iCurItem]);\r
- break;\r
-\r
- case SEARCHTYPE_32BIT:\r
- val = PSXMu32(SearchResults[iCurItem]);\r
- break;\r
-\r
- default:\r
- assert(FALSE); // should not reach here\r
- break;\r
- }\r
-\r
- sprintf(buf, "%u", val);\r
- SetWindowText(GetDlgItem(hW, IDC_VALUE), buf);\r
- break;\r
-\r
- case WM_COMMAND:\r
- switch (LOWORD(wParam)) {\r
- case IDOK:\r
- val = 0;\r
- GetWindowText(GetDlgItem(hW, IDC_VALUE), buf, 255);\r
- sscanf(buf, "%u", &val);\r
-\r
- switch (current_searchtype) {\r
- case SEARCHTYPE_8BIT:\r
- if (val > 0xFF) {\r
- val = 0xFF;\r
- }\r
- psxMemWrite8(SearchResults[iCurItem], (u8)val);\r
- break;\r
-\r
- case SEARCHTYPE_16BIT:\r
- if (val > 0xFFFF) {\r
- val = 0xFFFF;\r
- }\r
- psxMemWrite16(SearchResults[iCurItem], (u16)val);\r
- break;\r
-\r
- case SEARCHTYPE_32BIT:\r
- psxMemWrite32(SearchResults[iCurItem], (u32)val);\r
- break;\r
-\r
- default:\r
- assert(FALSE); // should not reach here\r
- break;\r
- }\r
-\r
- EndDialog(hW, TRUE);\r
- return TRUE;\r
-\r
- case IDCANCEL:\r
- EndDialog(hW, TRUE);\r
- return FALSE;\r
- }\r
- break;\r
-\r
- case WM_CLOSE:\r
- EndDialog(hW, TRUE);\r
- return FALSE;\r
- }\r
-\r
- return FALSE;\r
-}\r
-\r
-LRESULT WINAPI CheatSearchDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) {\r
- char buf[256];\r
- uint32_t i;\r
-\r
- switch (uMsg) {\r
- case WM_INITDIALOG:\r
- SetWindowText(hW, _("Cheat Search"));\r
-\r
- Static_SetText(GetDlgItem(hW, IDC_LABEL_SEARCHFOR), _("Search For:"));\r
- Static_SetText(GetDlgItem(hW, IDC_LABEL_DATATYPE), _("Data Type:"));\r
- Static_SetText(GetDlgItem(hW, IDC_LABEL_VALUE), _("Value:"));\r
- Static_SetText(GetDlgItem(hW, IDC_LABEL_DATABASE), _("Data Base:"));\r
- Static_SetText(GetDlgItem(hW, IDC_LABEL_TO), _("To:"));\r
- Button_SetText(GetDlgItem(hW, IDC_FREEZE), _("&Freeze"));\r
- Button_SetText(GetDlgItem(hW, IDC_MODIFY), _("&Modify"));\r
- Button_SetText(GetDlgItem(hW, IDC_COPY), _("&Copy"));\r
- Button_SetText(GetDlgItem(hW, IDC_SEARCH), _("&Search"));\r
- Button_SetText(GetDlgItem(hW, IDC_NEWSEARCH), _("&New Search"));\r
- Button_SetText(GetDlgItem(hW, IDCANCEL), _("C&lose"));\r
-\r
- SendMessage(GetDlgItem(hW, IDC_DATATYPE), CB_ADDSTRING, 0, (LPARAM)_("8-bit"));\r
- SendMessage(GetDlgItem(hW, IDC_DATATYPE), CB_ADDSTRING, 0, (LPARAM)_("16-bit"));\r
- SendMessage(GetDlgItem(hW, IDC_DATATYPE), CB_ADDSTRING, 0, (LPARAM)_("32-bit"));\r
- SendMessage(GetDlgItem(hW, IDC_DATABASE), CB_ADDSTRING, 0, (LPARAM)_("Decimal"));\r
- SendMessage(GetDlgItem(hW, IDC_DATABASE), CB_ADDSTRING, 0, (LPARAM)_("Hexadecimal"));\r
-\r
- UpdateCheatSearchDlg(hW);\r
- break;\r
-\r
- case WM_COMMAND:\r
- switch (LOWORD(wParam)) {\r
- case IDCANCEL:\r
- EndDialog(hW, FALSE);\r
- return TRUE;\r
-\r
- case IDC_FREEZE:\r
- iCurItem = SendMessage(GetDlgItem(hW, IDC_RESLIST), LB_GETCURSEL, 0, 0);\r
- DialogBox(gApp.hInstance, MAKEINTRESOURCE(IDD_CHEATVALEDIT), hW, (DLGPROC)CheatFreezeProc);\r
- break;\r
-\r
- case IDC_MODIFY:\r
- iCurItem = SendMessage(GetDlgItem(hW, IDC_RESLIST), LB_GETCURSEL, 0, 0);\r
- DialogBox(gApp.hInstance, MAKEINTRESOURCE(IDD_CHEATVALEDIT), hW, (DLGPROC)CheatModifyProc);\r
- UpdateCheatSearchDlg(hW);\r
- break;\r
-\r
- case IDC_COPY:\r
- i = SendMessage(GetDlgItem(hW, IDC_RESLIST), LB_GETCURSEL, 0, 0);\r
- sprintf(buf, "%.8X", SearchResults[i]);\r
-\r
- if (OpenClipboard(gApp.hWnd)) {\r
- HGLOBAL hglbCopy = GlobalAlloc(GHND, 256);\r
- char *p;\r
-\r
- if (hglbCopy != NULL) {\r
- p = (char *)GlobalLock(hglbCopy);\r
- strcpy(p, buf);\r
- GlobalUnlock(p);\r
-\r
- EmptyClipboard();\r
- SetClipboardData(CF_TEXT, (HANDLE)hglbCopy);\r
- }\r
-\r
- CloseClipboard();\r
- }\r
- break;\r
-\r
- case IDC_SEARCH:\r
- current_search = SendMessage(GetDlgItem(hW, IDC_SEARCHFOR), CB_GETCURSEL, 0, 0);\r
- current_searchtype = SendMessage(GetDlgItem(hW, IDC_DATATYPE), CB_GETCURSEL, 0, 0);\r
- current_searchbase = SendMessage(GetDlgItem(hW, IDC_DATABASE), CB_GETCURSEL, 0, 0);\r
- current_valuefrom = 0;\r
- current_valueto = 0;\r
-\r
- if (current_searchbase == SEARCHBASE_DEC) {\r
- GetWindowText(GetDlgItem(hW, IDC_VALUEFROM), (LPTSTR)buf, 255);\r
- sscanf(buf, "%u", ¤t_valuefrom);\r
- GetWindowText(GetDlgItem(hW, IDC_VALUETO), (LPTSTR)buf, 255);\r
- sscanf(buf, "%u", ¤t_valueto);\r
- }\r
- else {\r
- GetWindowText(GetDlgItem(hW, IDC_VALUEFROM), (LPTSTR)buf, 255);\r
- sscanf(buf, "%x", ¤t_valuefrom);\r
- GetWindowText(GetDlgItem(hW, IDC_VALUETO), (LPTSTR)buf, 255);\r
- sscanf(buf, "%x", ¤t_valueto);\r
- }\r
-\r
- switch (current_searchtype) {\r
- case SEARCHTYPE_8BIT:\r
- if (current_valuefrom > (u32)0xFF) {\r
- current_valuefrom = 0xFF;\r
- }\r
- if (current_valueto > (u32)0xFF) {\r
- current_valueto = 0xFF;\r
- }\r
- break;\r
-\r
- case SEARCHTYPE_16BIT:\r
- if (current_valuefrom > (u32)0xFFFF) {\r
- current_valuefrom = 0xFFFF;\r
- }\r
- if (current_valueto > (u32)0xFFFF) {\r
- current_valueto = 0xFFFF;\r
- }\r
- break;\r
- }\r
-\r
- if (current_search == SEARCH_RANGE && current_valuefrom > current_valueto) {\r
- u32 t = current_valuefrom;\r
- current_valuefrom = current_valueto;\r
- current_valueto = t;\r
- }\r
-\r
- switch (current_search) {\r
- case SEARCH_EQUALVAL:\r
- switch (current_searchtype) {\r
- case SEARCHTYPE_8BIT:\r
- CheatSearchEqual8((u8)current_valuefrom);\r
- break;\r
-\r
- case SEARCHTYPE_16BIT:\r
- CheatSearchEqual16((u16)current_valuefrom);\r
- break;\r
-\r
- case SEARCHTYPE_32BIT:\r
- CheatSearchEqual32((u32)current_valuefrom);\r
- break;\r
- }\r
- break;\r
-\r
- case SEARCH_NOTEQUALVAL:\r
- switch (current_searchtype) {\r
- case SEARCHTYPE_8BIT:\r
- CheatSearchNotEqual8((u8)current_valuefrom);\r
- break;\r
-\r
- case SEARCHTYPE_16BIT:\r
- CheatSearchNotEqual16((u16)current_valuefrom);\r
- break;\r
-\r
- case SEARCHTYPE_32BIT:\r
- CheatSearchNotEqual32((u32)current_valuefrom);\r
- break;\r
- }\r
- break;\r
-\r
- case SEARCH_RANGE:\r
- switch (current_searchtype) {\r
- case SEARCHTYPE_8BIT:\r
- CheatSearchRange8((u8)current_valuefrom, (u8)current_valueto);\r
- break;\r
-\r
- case SEARCHTYPE_16BIT:\r
- CheatSearchRange16((u16)current_valuefrom, (u16)current_valueto);\r
- break;\r
-\r
- case SEARCHTYPE_32BIT:\r
- CheatSearchRange32((u32)current_valuefrom, (u32)current_valueto);\r
- break;\r
- }\r
- break;\r
-\r
- case SEARCH_INCBY:\r
- switch (current_searchtype) {\r
- case SEARCHTYPE_8BIT:\r
- CheatSearchIncreasedBy8((u8)current_valuefrom);\r
- break;\r
-\r
- case SEARCHTYPE_16BIT:\r
- CheatSearchIncreasedBy16((u16)current_valuefrom);\r
- break;\r
-\r
- case SEARCHTYPE_32BIT:\r
- CheatSearchIncreasedBy32((u32)current_valuefrom);\r
- break;\r
- }\r
- break;\r
-\r
- case SEARCH_DECBY:\r
- switch (current_searchtype) {\r
- case SEARCHTYPE_8BIT:\r
- CheatSearchDecreasedBy8((u8)current_valuefrom);\r
- break;\r
-\r
- case SEARCHTYPE_16BIT:\r
- CheatSearchDecreasedBy16((u16)current_valuefrom);\r
- break;\r
-\r
- case SEARCHTYPE_32BIT:\r
- CheatSearchDecreasedBy32((u32)current_valuefrom);\r
- break;\r
- }\r
- break;\r
-\r
- case SEARCH_INC:\r
- switch (current_searchtype) {\r
- case SEARCHTYPE_8BIT:\r
- CheatSearchIncreased8();\r
- break;\r
-\r
- case SEARCHTYPE_16BIT:\r
- CheatSearchIncreased16();\r
- break;\r
-\r
- case SEARCHTYPE_32BIT:\r
- CheatSearchIncreased32();\r
- break;\r
- }\r
- break;\r
-\r
- case SEARCH_DEC:\r
- switch (current_searchtype) {\r
- case SEARCHTYPE_8BIT:\r
- CheatSearchDecreased8();\r
- break;\r
-\r
- case SEARCHTYPE_16BIT:\r
- CheatSearchDecreased16();\r
- break;\r
-\r
- case SEARCHTYPE_32BIT:\r
- CheatSearchDecreased32();\r
- break;\r
- }\r
- break;\r
-\r
- case SEARCH_DIFFERENT:\r
- switch (current_searchtype) {\r
- case SEARCHTYPE_8BIT:\r
- CheatSearchDifferent8();\r
- break;\r
-\r
- case SEARCHTYPE_16BIT:\r
- CheatSearchDifferent16();\r
- break;\r
-\r
- case SEARCHTYPE_32BIT:\r
- CheatSearchDifferent32();\r
- break;\r
- }\r
- break;\r
-\r
- case SEARCH_NOCHANGE:\r
- switch (current_searchtype) {\r
- case SEARCHTYPE_8BIT:\r
- CheatSearchNoChange8();\r
- break;\r
-\r
- case SEARCHTYPE_16BIT:\r
- CheatSearchNoChange16();\r
- break;\r
-\r
- case SEARCHTYPE_32BIT:\r
- CheatSearchNoChange32();\r
- break;\r
- }\r
- break;\r
-\r
- default:\r
- assert(FALSE); // not possible\r
- break;\r
- }\r
-\r
- UpdateCheatSearchDlg(hW);\r
- break;\r
-\r
- case IDC_NEWSEARCH:\r
- FreeCheatSearchMem();\r
- FreeCheatSearchResults();\r
-\r
- current_search = SEARCH_EQUALVAL;\r
- current_searchtype = SEARCHTYPE_8BIT;\r
- current_searchbase = SEARCHBASE_DEC;\r
- current_valuefrom = 0;\r
- current_valueto = 0;\r
-\r
- UpdateCheatSearchDlg(hW);\r
- EnableWindow(GetDlgItem(hW, IDC_VALUEFROM), TRUE);\r
- break;\r
-\r
- case IDC_SEARCHFOR:\r
- EnableWindow(GetDlgItem(hW, IDC_VALUEFROM), TRUE);\r
-\r
- if (SendMessage(GetDlgItem(hW, IDC_SEARCHFOR), CB_GETCURSEL, 0, 0) == SEARCH_RANGE) {\r
- ShowWindow(GetDlgItem(hW, IDC_LABEL_TO), SW_SHOW);\r
- ShowWindow(GetDlgItem(hW, IDC_VALUETO), SW_SHOW);\r
- }\r
- else {\r
- ShowWindow(GetDlgItem(hW, IDC_LABEL_TO), SW_HIDE);\r
- ShowWindow(GetDlgItem(hW, IDC_VALUETO), SW_HIDE);\r
-\r
- if (SendMessage(GetDlgItem(hW, IDC_SEARCHFOR), CB_GETCURSEL, 0, 0) >= SEARCH_INC) {\r
- EnableWindow(GetDlgItem(hW, IDC_VALUEFROM), FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case IDC_DATABASE:\r
- if (SendMessage(GetDlgItem(hW, IDC_DATABASE), CB_GETCURSEL, 0, 0) == SEARCHBASE_DEC) {\r
- if (current_searchbase == SEARCHBASE_HEX) {\r
- GetWindowText(GetDlgItem(hW, IDC_VALUEFROM), (LPTSTR)buf, 255);\r
- sscanf(buf, "%x", &i);\r
- sprintf(buf, "%u", i);\r
- SetWindowText(GetDlgItem(hW, IDC_VALUEFROM), (LPCTSTR)buf);\r
-\r
- GetWindowText(GetDlgItem(hW, IDC_VALUETO), (LPTSTR)buf, 255);\r
- sscanf(buf, "%x", &i);\r
- sprintf(buf, "%u", i);\r
- SetWindowText(GetDlgItem(hW, IDC_VALUETO), (LPCTSTR)buf);\r
- }\r
- }\r
- else if (current_searchbase == SEARCHBASE_DEC){\r
- GetWindowText(GetDlgItem(hW, IDC_VALUEFROM), (LPTSTR)buf, 255);\r
- sscanf(buf, "%u", &i);\r
- sprintf(buf, "%X", i);\r
- SetWindowText(GetDlgItem(hW, IDC_VALUEFROM), (LPCTSTR)buf);\r
-\r
- GetWindowText(GetDlgItem(hW, IDC_VALUETO), (LPTSTR)buf, 255);\r
- sscanf(buf, "%u", &i);\r
- sprintf(buf, "%X", i);\r
- SetWindowText(GetDlgItem(hW, IDC_VALUETO), (LPCTSTR)buf);\r
- }\r
- current_searchbase = SendMessage(GetDlgItem(hW, IDC_DATABASE), CB_GETCURSEL, 0, 0);\r
- break;\r
-\r
- case IDC_RESLIST:\r
- switch (HIWORD(wParam)) {\r
- case LBN_SELCHANGE:\r
- Button_Enable(GetDlgItem(hW, IDC_FREEZE), TRUE);\r
- Button_Enable(GetDlgItem(hW, IDC_MODIFY), TRUE);\r
- Button_Enable(GetDlgItem(hW, IDC_COPY), TRUE);\r
- break;\r
-\r
- case LBN_SELCANCEL:\r
- Button_Enable(GetDlgItem(hW, IDC_FREEZE), FALSE);\r
- Button_Enable(GetDlgItem(hW, IDC_MODIFY), FALSE);\r
- Button_Enable(GetDlgItem(hW, IDC_COPY), FALSE);\r
- break;\r
- }\r
- break;\r
- }\r
- break;\r
-\r
- case WM_CLOSE:\r
- EndDialog(hW, FALSE);\r
- return TRUE;\r
- }\r
-\r
- return FALSE;\r
-}\r