mirror of
https://github.com/RPCSX/rpcsx.git
synced 2026-04-06 23:15:18 +00:00
Implemented small tool for generating id of HLE-Function. Fixed small issue in PADManager dialog.
This commit is contained in:
parent
8183ee4d56
commit
770ebaf271
10 changed files with 148 additions and 12 deletions
100
rpcs3/Gui/FnIdGenerator.cpp
Normal file
100
rpcs3/Gui/FnIdGenerator.cpp
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
#include "stdafx.h"
|
||||
#include "FnIdGenerator.h"
|
||||
|
||||
FnIdGenerator::FnIdGenerator(wxWindow* parent)
|
||||
: wxDialog(parent, wxID_ANY, "FunctionID Generator", wxDefaultPosition)
|
||||
, m_list(nullptr)
|
||||
{
|
||||
wxBoxSizer* s_panel(new wxBoxSizer(wxHORIZONTAL));
|
||||
wxBoxSizer* s_subpanel(new wxBoxSizer(wxVERTICAL));
|
||||
wxBoxSizer* s_subpanel2(new wxBoxSizer(wxHORIZONTAL));
|
||||
|
||||
m_list = new wxListView(this, wxID_ANY, wxDefaultPosition, wxSize(300, 450));
|
||||
m_list->InsertColumn(0, "Function Name", 0, 200);
|
||||
m_list->InsertColumn(1, "Function ID", 0, 100);
|
||||
|
||||
wxButton *b_input_name = new wxButton(this, wxID_ANY, "Input Function Name", wxDefaultPosition, wxSize(140, -1));
|
||||
wxButton *b_clear = new wxButton(this, wxID_ANY, "Clear List", wxDefaultPosition, wxSize(140, -1));
|
||||
|
||||
s_subpanel2->Add(b_input_name);
|
||||
s_subpanel2->AddSpacer(10);
|
||||
s_subpanel2->Add(b_clear);
|
||||
|
||||
s_subpanel->AddSpacer(5);
|
||||
s_subpanel->Add(m_list);
|
||||
s_subpanel->AddSpacer(5);
|
||||
s_subpanel->Add(s_subpanel2);
|
||||
|
||||
s_panel->AddSpacer(5);
|
||||
s_panel->Add(s_subpanel);
|
||||
s_panel->AddSpacer(5);
|
||||
|
||||
this->SetSizerAndFit(s_panel);
|
||||
|
||||
Connect(b_input_name->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FnIdGenerator::OnInput));
|
||||
Connect(b_clear->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FnIdGenerator::OnClear));
|
||||
}
|
||||
|
||||
FnIdGenerator::~FnIdGenerator()
|
||||
{
|
||||
m_func_name.Clear();
|
||||
m_func_id.Clear();
|
||||
delete m_list;
|
||||
}
|
||||
|
||||
void FnIdGenerator::OnInput(wxCommandEvent &event)
|
||||
{
|
||||
PrintId();
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
void FnIdGenerator::OnClear(wxCommandEvent &event)
|
||||
{
|
||||
m_list->DeleteAllItems();
|
||||
m_func_name.Clear();
|
||||
m_func_id.Clear();
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
u32 FnIdGenerator::GenerateFnId(const std::string& func_name)
|
||||
{
|
||||
static const char* suffix = "\x67\x59\x65\x99\x04\x25\x04\x90\x56\x64\x27\x49\x94\x89\x74\x1A"; //symbol name suffix
|
||||
std::string input = func_name + suffix;
|
||||
unsigned char output[20];
|
||||
|
||||
sha1((unsigned char*)input.c_str(), input.length(), output); //compute SHA-1 hash
|
||||
|
||||
return (be_t<u32>&) output[0];
|
||||
}
|
||||
|
||||
void FnIdGenerator::PrintId()
|
||||
{
|
||||
const std::string temp;
|
||||
TextInputDialog dial(0, temp, "Please input function name");
|
||||
if (dial.ShowModal() == wxID_OK)
|
||||
{
|
||||
dial.GetResult();
|
||||
}
|
||||
|
||||
const std::string& func_name = dial.GetResult();
|
||||
|
||||
if (func_name.length() == 0)
|
||||
return;
|
||||
|
||||
const be_t<u32> result = GenerateFnId(func_name);
|
||||
m_func_name.AddCpy(func_name);
|
||||
m_func_id.AddCpy(result);
|
||||
|
||||
ConLog.Write("Function: %s, Id: 0x%08x ", func_name.c_str(), result);
|
||||
UpdateInformation();
|
||||
}
|
||||
|
||||
void FnIdGenerator::UpdateInformation()
|
||||
{
|
||||
for(u32 i = 0; i < m_func_name.GetCount(); i++)
|
||||
{
|
||||
m_list->InsertItem(m_func_name.GetCount(), wxEmptyString);
|
||||
m_list->SetItem(i, 0, m_func_name[i]);
|
||||
m_list->SetItem(i, 1, wxString::Format("0x%08x", re(m_func_id[i])));
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue