2 #include <wx/xml/xml.h>
3 #include "nescartxml.hh"
5 WX_DECLARE_HASH_MAP(unsigned long, wxXmlNode *, wxIntegerHash, wxIntegerEqual, CartridgeHash);
7 RomDb::RomDb(wxString file)
9 m_hash = new CartridgeHash(2200);
10 m_document = new wxXmlDocument();
11 m_document->Load(file);
20 bool RomDb::Generate(void)
22 wxXmlNode *game = m_document->GetRoot()->GetChildren();
27 wxXmlNode *cartridge = game->GetChildren();
28 while(cartridge != NULL){
30 if(cartridge->GetPropVal(wxT("crc"), &crcstr) == true){
32 if(crcstr.ToULong(&crc, 0x10) == true){
33 (*m_hash)[crc] = cartridge;
36 cartridge = cartridge->GetNext();
38 game = game->GetNext();
40 /* wxXmlNode *board = cartdige->GetChildren();
41 wxXmlNode *parts = board->GetChildren();
43 wxString name = parts->GetName();
44 if(name == wxT("prg") || name == wxT("chr")){
45 *log << parts->GetPropVal(wxT("name"), wxT(""));
46 *log << parts->GetPropVal(wxT("crc"), wxT("xx")) << wxT("\n");
48 parts = parts->GetNext();
53 void RomDb::Search(unsigned long crc, wxTextCtrl *log)
55 wxXmlNode *cartridge = (*m_hash)[crc];
56 if(cartridge == NULL){
59 wxXmlNode *game = cartridge->GetParent();
60 const wxString error = wxT("*error*");
62 if(game->GetPropVal(wxT("altname"), &name) == false){
63 name = game->GetPropVal(wxT("name"), error);
65 field = wxT("name:") + name;
66 *log << field << wxT("\n");
68 field = wxT("region:") + game->GetPropVal(wxT("region"), error);
69 field += wxT(" catalog:") + game->GetPropVal(wxT("catalog"), error);
70 field += wxT(" revision:") + cartridge->GetPropVal(wxT("revision"), wxT("(none)"));
71 *log << field << wxT("\n");