Merge branch 'rr1-maint'
This commit is contained in:
commit
69597313e6
1 changed files with 205 additions and 165 deletions
|
@ -27,9 +27,6 @@
|
||||||
#define wxID_BUTTONS_BASE (wxID_HIGHEST + 128)
|
#define wxID_BUTTONS_BASE (wxID_HIGHEST + 128)
|
||||||
|
|
||||||
#define DATATYPES 8
|
#define DATATYPES 8
|
||||||
#define BROW_SIZE 13
|
|
||||||
#define PRIMITIVES 12
|
|
||||||
|
|
||||||
#define CANDIDATE_LIMIT 512
|
#define CANDIDATE_LIMIT 512
|
||||||
|
|
||||||
class wxwindow_memorysearch;
|
class wxwindow_memorysearch;
|
||||||
|
@ -39,6 +36,7 @@ namespace
|
||||||
const char* watchchars = "bBwWdDqQ";
|
const char* watchchars = "bBwWdDqQ";
|
||||||
|
|
||||||
wxwindow_memorysearch* mwatch;
|
wxwindow_memorysearch* mwatch;
|
||||||
|
|
||||||
const char* datatypes[] = {
|
const char* datatypes[] = {
|
||||||
"signed byte",
|
"signed byte",
|
||||||
"unsigned byte",
|
"unsigned byte",
|
||||||
|
@ -50,57 +48,12 @@ namespace
|
||||||
"unsigned qword"
|
"unsigned qword"
|
||||||
};
|
};
|
||||||
|
|
||||||
const char* searchtypes[] = {
|
typedef void (wxwindow_memorysearch::*search_fn_t)();
|
||||||
"value",
|
|
||||||
"diff.",
|
|
||||||
"<",
|
|
||||||
"<=",
|
|
||||||
"==",
|
|
||||||
"!=",
|
|
||||||
">=",
|
|
||||||
">",
|
|
||||||
"seq<",
|
|
||||||
"seq<=",
|
|
||||||
"seq>=",
|
|
||||||
"seq>",
|
|
||||||
"true"
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef void (memory_search::*primitive_search_t)();
|
struct searchtype
|
||||||
|
{
|
||||||
primitive_search_t primitive_searches[DATATYPES][PRIMITIVES] = {
|
const char* name;
|
||||||
{ &memory_search::byte_slt, &memory_search::byte_sle, &memory_search::byte_seq,
|
search_fn_t searches[DATATYPES];
|
||||||
&memory_search::byte_sne, &memory_search::byte_sge, &memory_search::byte_sgt,
|
|
||||||
&memory_search::byte_seqlt, &memory_search::byte_seqle, &memory_search::byte_seqge,
|
|
||||||
&memory_search::byte_seqgt, &memory_search::update },
|
|
||||||
{ &memory_search::byte_ult, &memory_search::byte_ule, &memory_search::byte_ueq,
|
|
||||||
&memory_search::byte_une, &memory_search::byte_uge, &memory_search::byte_ugt,
|
|
||||||
&memory_search::byte_seqlt, &memory_search::byte_seqle, &memory_search::byte_seqge,
|
|
||||||
&memory_search::byte_seqgt, &memory_search::update },
|
|
||||||
{ &memory_search::word_slt, &memory_search::word_sle, &memory_search::word_seq,
|
|
||||||
&memory_search::word_sne, &memory_search::word_sge, &memory_search::word_sgt,
|
|
||||||
&memory_search::word_seqlt, &memory_search::word_seqle, &memory_search::word_seqge,
|
|
||||||
&memory_search::word_seqgt, &memory_search::update },
|
|
||||||
{ &memory_search::word_ult, &memory_search::word_ule, &memory_search::word_ueq,
|
|
||||||
&memory_search::word_une, &memory_search::word_uge, &memory_search::word_ugt,
|
|
||||||
&memory_search::word_seqlt, &memory_search::word_seqle, &memory_search::word_seqge,
|
|
||||||
&memory_search::word_seqgt, &memory_search::update },
|
|
||||||
{ &memory_search::dword_slt, &memory_search::dword_sle, &memory_search::dword_seq,
|
|
||||||
&memory_search::dword_sne, &memory_search::dword_sge, &memory_search::dword_sgt,
|
|
||||||
&memory_search::dword_seqlt, &memory_search::dword_seqle, &memory_search::dword_seqge,
|
|
||||||
&memory_search::dword_seqgt, &memory_search::update },
|
|
||||||
{ &memory_search::dword_ult, &memory_search::dword_ule, &memory_search::dword_ueq,
|
|
||||||
&memory_search::dword_une, &memory_search::dword_uge, &memory_search::dword_ugt,
|
|
||||||
&memory_search::dword_seqlt, &memory_search::dword_seqle, &memory_search::dword_seqge,
|
|
||||||
&memory_search::dword_seqgt, &memory_search::update },
|
|
||||||
{ &memory_search::qword_slt, &memory_search::qword_sle, &memory_search::qword_seq,
|
|
||||||
&memory_search::qword_sne, &memory_search::qword_sge, &memory_search::qword_sgt,
|
|
||||||
&memory_search::qword_seqlt, &memory_search::qword_seqle, &memory_search::qword_seqge,
|
|
||||||
&memory_search::qword_seqgt, &memory_search::update },
|
|
||||||
{ &memory_search::qword_ult, &memory_search::qword_ule, &memory_search::qword_ueq,
|
|
||||||
&memory_search::qword_une, &memory_search::qword_uge, &memory_search::qword_ugt,
|
|
||||||
&memory_search::qword_seqlt, &memory_search::qword_seqle, &memory_search::qword_seqge,
|
|
||||||
&memory_search::qword_seqgt, &memory_search::update }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
std::string hexformat_address(uint64_t addr)
|
std::string hexformat_address(uint64_t addr)
|
||||||
|
@ -276,11 +229,11 @@ public:
|
||||||
void on_mousedrag(wxMouseEvent& e);
|
void on_mousedrag(wxMouseEvent& e);
|
||||||
void on_mouse(wxMouseEvent& e);
|
void on_mouse(wxMouseEvent& e);
|
||||||
bool update_queued;
|
bool update_queued;
|
||||||
|
template<void(memory_search::*sfn)()> void search_0();
|
||||||
|
template<typename T, typename T2, void(memory_search::*sfn)(T2 val)> void search_1();
|
||||||
private:
|
private:
|
||||||
friend class panel;
|
friend class panel;
|
||||||
template<typename T> void valuesearch(bool diff);
|
template<typename T> T promptvalue(bool& bad);
|
||||||
template<typename T> void valuesearch2(T value);
|
|
||||||
template<typename T> void valuesearch3(T value);
|
|
||||||
void update();
|
void update();
|
||||||
memory_search* msearch;
|
memory_search* msearch;
|
||||||
void on_mouse0(wxMouseEvent& e, bool polarity);
|
void on_mouse0(wxMouseEvent& e, bool polarity);
|
||||||
|
@ -304,6 +257,172 @@ private:
|
||||||
std::set<std::string> vmas_enabled;
|
std::set<std::string> vmas_enabled;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
struct searchtype searchtbl[] = {
|
||||||
|
{
|
||||||
|
"value", {
|
||||||
|
&wxwindow_memorysearch::search_1<int8_t, uint8_t,
|
||||||
|
&memory_search::byte_value>,
|
||||||
|
&wxwindow_memorysearch::search_1<uint8_t, uint8_t,
|
||||||
|
&memory_search::byte_value>,
|
||||||
|
&wxwindow_memorysearch::search_1<int16_t, uint16_t,
|
||||||
|
&memory_search::word_value>,
|
||||||
|
&wxwindow_memorysearch::search_1<uint16_t, uint16_t,
|
||||||
|
&memory_search::word_value>,
|
||||||
|
&wxwindow_memorysearch::search_1<int32_t, uint32_t,
|
||||||
|
&memory_search::dword_value>,
|
||||||
|
&wxwindow_memorysearch::search_1<uint32_t, uint32_t,
|
||||||
|
&memory_search::dword_value>,
|
||||||
|
&wxwindow_memorysearch::search_1<int64_t, uint64_t,
|
||||||
|
&memory_search::qword_value>,
|
||||||
|
&wxwindow_memorysearch::search_1<uint64_t, uint64_t,
|
||||||
|
&memory_search::qword_value>
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"diff.", {
|
||||||
|
&wxwindow_memorysearch::search_1<int8_t, uint8_t,
|
||||||
|
&memory_search::byte_difference>,
|
||||||
|
&wxwindow_memorysearch::search_1<uint8_t, uint8_t,
|
||||||
|
&memory_search::byte_difference>,
|
||||||
|
&wxwindow_memorysearch::search_1<int16_t, uint16_t,
|
||||||
|
&memory_search::word_difference>,
|
||||||
|
&wxwindow_memorysearch::search_1<uint16_t, uint16_t,
|
||||||
|
&memory_search::word_difference>,
|
||||||
|
&wxwindow_memorysearch::search_1<int32_t, uint32_t,
|
||||||
|
&memory_search::dword_difference>,
|
||||||
|
&wxwindow_memorysearch::search_1<uint32_t, uint32_t,
|
||||||
|
&memory_search::dword_difference>,
|
||||||
|
&wxwindow_memorysearch::search_1<int64_t, uint64_t,
|
||||||
|
&memory_search::qword_difference>,
|
||||||
|
&wxwindow_memorysearch::search_1<uint64_t, uint64_t,
|
||||||
|
&memory_search::qword_difference>
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"<", {
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::byte_slt>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::byte_ult>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::word_slt>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::word_ult>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::dword_slt>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::dword_ult>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::qword_slt>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::qword_ult>
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"<=", {
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::byte_sle>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::byte_ule>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::word_sle>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::word_ule>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::dword_sle>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::dword_ule>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::qword_sle>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::qword_ule>
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"==", {
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::byte_seq>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::byte_ueq>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::word_seq>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::word_ueq>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::dword_seq>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::dword_ueq>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::qword_seq>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::qword_ueq>
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"!=", {
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::byte_sne>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::byte_une>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::word_sne>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::word_une>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::dword_sne>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::dword_une>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::qword_sne>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::qword_une>
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
">=", {
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::byte_sge>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::byte_uge>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::word_sge>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::word_uge>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::dword_sge>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::dword_uge>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::qword_sge>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::qword_uge>
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
">", {
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::byte_sgt>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::byte_ugt>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::word_sgt>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::word_ugt>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::dword_sgt>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::dword_ugt>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::qword_sgt>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::qword_ugt>
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"seq<", {
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::byte_seqlt>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::byte_seqlt>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::word_seqlt>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::word_seqlt>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::dword_seqlt>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::dword_seqlt>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::qword_seqlt>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::qword_seqlt>
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"seq<=", {
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::byte_seqle>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::byte_seqle>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::word_seqle>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::word_seqle>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::dword_seqle>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::dword_seqle>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::qword_seqle>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::qword_seqle>
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"seq>=", {
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::byte_seqge>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::byte_seqge>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::word_seqge>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::word_seqge>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::dword_seqge>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::dword_seqge>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::qword_seqge>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::qword_seqge>
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"seq>", {
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::byte_seqgt>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::byte_seqgt>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::word_seqgt>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::word_seqgt>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::dword_seqgt>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::dword_seqgt>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::qword_seqgt>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::qword_seqgt>
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"true", {
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::update>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::update>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::update>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::update>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::update>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::update>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::update>,
|
||||||
|
&wxwindow_memorysearch::search_0<&memory_search::update>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
wxwindow_memorysearch::wxwindow_memorysearch()
|
wxwindow_memorysearch::wxwindow_memorysearch()
|
||||||
: wxFrame(NULL, wxID_ANY, wxT("lsnes: Memory Search"), wxDefaultPosition, wxSize(-1, -1),
|
: wxFrame(NULL, wxID_ANY, wxT("lsnes: Memory Search"), wxDefaultPosition, wxSize(-1, -1),
|
||||||
wxMINIMIZE_BOX | wxSYSTEM_MENU | wxCAPTION | wxCLIP_CHILDREN | wxCLOSE_BOX)
|
wxMINIMIZE_BOX | wxSYSTEM_MENU | wxCAPTION | wxCLIP_CHILDREN | wxCLOSE_BOX)
|
||||||
|
@ -337,10 +456,11 @@ wxwindow_memorysearch::wxwindow_memorysearch()
|
||||||
wxCommandEventHandler(wxwindow_memorysearch::on_button_click), NULL, this);
|
wxCommandEventHandler(wxwindow_memorysearch::on_button_click), NULL, this);
|
||||||
toplevel->Add(buttons);
|
toplevel->Add(buttons);
|
||||||
|
|
||||||
wxFlexGridSizer* searches = new wxFlexGridSizer(2, 7, 0, 0);
|
wxFlexGridSizer* searches = new wxFlexGridSizer(0, 6, 0, 0);
|
||||||
for(unsigned j = 0; j < BROW_SIZE; j++) {
|
for(unsigned j = 0; j < sizeof(searchtbl)/sizeof(searchtbl[0]); j++) {
|
||||||
searches->Add(tmp = new wxButton(this, wxID_BUTTONS_BASE + j, towxstring(searchtypes[j])), 1, wxGROW);
|
std::string name = searchtbl[j].name;
|
||||||
tmp->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
|
searches->Add(tmp = new wxButton(this, wxID_BUTTONS_BASE + j, towxstring(name)), 1, wxGROW);
|
||||||
|
tmp->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
|
||||||
wxCommandEventHandler(wxwindow_memorysearch::on_button_click), NULL, this);
|
wxCommandEventHandler(wxwindow_memorysearch::on_button_click), NULL, this);
|
||||||
}
|
}
|
||||||
toplevel->Add(searches);
|
toplevel->Add(searches);
|
||||||
|
@ -643,34 +763,36 @@ void wxwindow_memorysearch::on_button_click(wxCommandEvent& e)
|
||||||
for(auto i : lsnes_memory.get_regions())
|
for(auto i : lsnes_memory.get_regions())
|
||||||
if(memory_search::searchable_region(i) && !vmas_enabled.count(i->name))
|
if(memory_search::searchable_region(i) && !vmas_enabled.count(i->name))
|
||||||
msearch->dq_range(i->base, i->last_address());
|
msearch->dq_range(i->base, i->last_address());
|
||||||
} else if(id == wxID_BUTTONS_BASE || id == wxID_BUTTONS_BASE + 1) {
|
} else if(id >= wxID_BUTTONS_BASE && id < wxID_BUTTONS_BASE + (sizeof(searchtbl)/sizeof(searchtbl[0]))) {
|
||||||
//Value search.
|
int button = id - wxID_BUTTONS_BASE;
|
||||||
bool diff = (id == wxID_BUTTONS_BASE + 1);
|
(this->*(searchtbl[button].searches[typecode]))();
|
||||||
switch(typecode)
|
|
||||||
{
|
|
||||||
case 0: valuesearch<int8_t>(diff); break;
|
|
||||||
case 1: valuesearch<uint8_t>(diff); break;
|
|
||||||
case 2: valuesearch<int16_t>(diff); break;
|
|
||||||
case 3: valuesearch<uint16_t>(diff); break;
|
|
||||||
case 4: valuesearch<int32_t>(diff); break;
|
|
||||||
case 5: valuesearch<uint32_t>(diff); break;
|
|
||||||
case 6: valuesearch<int64_t>(diff); break;
|
|
||||||
case 7: valuesearch<uint64_t>(diff); break;
|
|
||||||
};
|
|
||||||
} else if(id > wxID_BUTTONS_BASE + 1 && id < wxID_BUTTONS_BASE + 2 + PRIMITIVES ) {
|
|
||||||
int button = id - wxID_BUTTONS_BASE - 2;
|
|
||||||
(msearch->*(primitive_searches[typecode][button]))();
|
|
||||||
}
|
}
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T> void wxwindow_memorysearch::valuesearch(bool diff)
|
template<void(memory_search::*sfn)()> void wxwindow_memorysearch::search_0()
|
||||||
|
{
|
||||||
|
(msearch->*sfn)();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T, typename T2, void(memory_search::*sfn)(T2 val)> void wxwindow_memorysearch::search_1()
|
||||||
|
{
|
||||||
|
bool bad = false;
|
||||||
|
T val = promptvalue<T>(bad);
|
||||||
|
if(bad)
|
||||||
|
return;
|
||||||
|
(msearch->*sfn)(static_cast<T2>(val));
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T> T wxwindow_memorysearch::promptvalue(bool& bad)
|
||||||
{
|
{
|
||||||
std::string v;
|
std::string v;
|
||||||
wxTextEntryDialog* d = new wxTextEntryDialog(this, wxT("Enter value to search for:"), wxT("Memory search"),
|
wxTextEntryDialog* d = new wxTextEntryDialog(this, wxT("Enter value to search for:"), wxT("Memory search"),
|
||||||
wxT(""));
|
wxT(""));
|
||||||
if(d->ShowModal() == wxID_CANCEL)
|
if(d->ShowModal() == wxID_CANCEL) {
|
||||||
return;
|
bad = true;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
v = tostdstring(d->GetValue());
|
v = tostdstring(d->GetValue());
|
||||||
d->Destroy();
|
d->Destroy();
|
||||||
T val2;
|
T val2;
|
||||||
|
@ -678,92 +800,10 @@ template<typename T> void wxwindow_memorysearch::valuesearch(bool diff)
|
||||||
val2 = parse_value<T>(v);
|
val2 = parse_value<T>(v);
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
wxMessageBox(towxstring("Bad value '" + v + "'"), _T("Error"), wxICON_WARNING | wxOK, this);
|
wxMessageBox(towxstring("Bad value '" + v + "'"), _T("Error"), wxICON_WARNING | wxOK, this);
|
||||||
|
bad = true;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
if(diff)
|
return val2;
|
||||||
valuesearch3(val2);
|
|
||||||
else
|
|
||||||
valuesearch2(val2);
|
|
||||||
update();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<> void wxwindow_memorysearch::valuesearch3<int8_t>(int8_t val)
|
|
||||||
{
|
|
||||||
msearch->byte_difference(static_cast<uint8_t>(val));
|
|
||||||
}
|
|
||||||
|
|
||||||
template<> void wxwindow_memorysearch::valuesearch3<uint8_t>(uint8_t val)
|
|
||||||
{
|
|
||||||
msearch->byte_difference(static_cast<uint8_t>(val));
|
|
||||||
}
|
|
||||||
|
|
||||||
template<> void wxwindow_memorysearch::valuesearch3<int16_t>(int16_t val)
|
|
||||||
{
|
|
||||||
msearch->word_difference(static_cast<uint16_t>(val));
|
|
||||||
}
|
|
||||||
|
|
||||||
template<> void wxwindow_memorysearch::valuesearch3<uint16_t>(uint16_t val)
|
|
||||||
{
|
|
||||||
msearch->word_difference(static_cast<uint16_t>(val));
|
|
||||||
}
|
|
||||||
|
|
||||||
template<> void wxwindow_memorysearch::valuesearch3<int32_t>(int32_t val)
|
|
||||||
{
|
|
||||||
msearch->dword_difference(static_cast<uint32_t>(val));
|
|
||||||
}
|
|
||||||
|
|
||||||
template<> void wxwindow_memorysearch::valuesearch3<uint32_t>(uint32_t val)
|
|
||||||
{
|
|
||||||
msearch->dword_difference(static_cast<uint32_t>(val));
|
|
||||||
}
|
|
||||||
|
|
||||||
template<> void wxwindow_memorysearch::valuesearch3<int64_t>(int64_t val)
|
|
||||||
{
|
|
||||||
msearch->qword_difference(static_cast<uint64_t>(val));
|
|
||||||
}
|
|
||||||
|
|
||||||
template<> void wxwindow_memorysearch::valuesearch3<uint64_t>(uint64_t val)
|
|
||||||
{
|
|
||||||
msearch->qword_difference(static_cast<uint64_t>(val));
|
|
||||||
}
|
|
||||||
|
|
||||||
template<> void wxwindow_memorysearch::valuesearch2<int8_t>(int8_t val)
|
|
||||||
{
|
|
||||||
msearch->byte_value(static_cast<uint8_t>(val));
|
|
||||||
}
|
|
||||||
|
|
||||||
template<> void wxwindow_memorysearch::valuesearch2<uint8_t>(uint8_t val)
|
|
||||||
{
|
|
||||||
msearch->byte_value(static_cast<uint8_t>(val));
|
|
||||||
}
|
|
||||||
|
|
||||||
template<> void wxwindow_memorysearch::valuesearch2<int16_t>(int16_t val)
|
|
||||||
{
|
|
||||||
msearch->word_value(static_cast<uint16_t>(val));
|
|
||||||
}
|
|
||||||
|
|
||||||
template<> void wxwindow_memorysearch::valuesearch2<uint16_t>(uint16_t val)
|
|
||||||
{
|
|
||||||
msearch->word_value(static_cast<uint16_t>(val));
|
|
||||||
}
|
|
||||||
|
|
||||||
template<> void wxwindow_memorysearch::valuesearch2<int32_t>(int32_t val)
|
|
||||||
{
|
|
||||||
msearch->dword_value(static_cast<uint32_t>(val));
|
|
||||||
}
|
|
||||||
|
|
||||||
template<> void wxwindow_memorysearch::valuesearch2<uint32_t>(uint32_t val)
|
|
||||||
{
|
|
||||||
msearch->dword_value(static_cast<uint32_t>(val));
|
|
||||||
}
|
|
||||||
|
|
||||||
template<> void wxwindow_memorysearch::valuesearch2<int64_t>(int64_t val)
|
|
||||||
{
|
|
||||||
msearch->qword_value(static_cast<uint64_t>(val));
|
|
||||||
}
|
|
||||||
|
|
||||||
template<> void wxwindow_memorysearch::valuesearch2<uint64_t>(uint64_t val)
|
|
||||||
{
|
|
||||||
msearch->qword_value(static_cast<uint64_t>(val));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxwindow_memorysearch_display()
|
void wxwindow_memorysearch_display()
|
||||||
|
|
Loading…
Add table
Reference in a new issue