vector<pair<uint16, uint16> > H86Project::Get_BPList(){ vector<pair<uint16, uint16> > bpList(0); try{ xml_node<>* node=m_doc->first_node("Hard86Project"); if(!node){ OUT_DEBUG("RapidXML failed to locate node"); return vector<pair<uint16, uint16> >(0); } node=node->first_node("BPList"); if(!node){ OUT_DEBUG("RapidXML failed to locate node"); return vector<pair<uint16, uint16> >(0); } node=node->first_node(); while(node){ xml_attribute<> *name, *path; name=node->first_attribute("seg"); path=node->first_attribute("addr"); bpList.push_back(make_pair((uint16)strtol(name->value(), NULL, 16), (uint16)strtol(path->value(), NULL, 16))); node=node->next_sibling(); } return bpList; } catch(rapidxml::parse_error e){ OUT_DEBUG("RapidXML parse error encountered"); return vector<pair<uint16, uint16> >(0); } }
void Plus4EmuGUI_DebugWindow::applyBreakPointList() { const char *buf = (char *) 0; try { buf = bpEditBuffer->text(); if (!buf) throw std::bad_alloc(); std::string bpListText(buf); std::free(const_cast<char *>(buf)); buf = (char *) 0; Plus4Emu::BreakPointList bpList(bpListText); gui.vm.clearBreakPoints(); gui.vm.setBreakPoints(bpList); } catch (std::exception& e) { if (buf) std::free(const_cast<char *>(buf)); gui.errorMessage(e.what()); } }
void XDGetBreakpoints::HandleSuccess ( const JString& data ) { XDLink* link = dynamic_cast<XDLink*>(CMGetLink()); xmlNode* root; if (link == NULL || !link->GetParsedData(&root)) { return; } (CMGetLink()->GetBreakpointManager())->SetUpdateWhenStop(kJFalse); JPtrArray<CMBreakpoint> bpList(JPtrArrayT::kForgetAll); // ownership taken by CMBreakpointManager bpList.SetCompareFunction(CMBreakpointManager::CompareBreakpointLocations); bpList.SetSortOrder(JOrderedSetT::kSortAscending); JPtrArray<CMBreakpoint> otherList(JPtrArrayT::kForgetAll); // ownership taken by CMBreakpointManager xmlNode* node = root->children; JString type, idStr, fileName, lineStr, state; while (node != NULL) { type = JGetXMLNodeAttr(node, "type"); if (type == "line") { idStr = JGetXMLNodeAttr(node, "id"); fileName = JGetXMLNodeAttr(node, "filename"); lineStr = JGetXMLNodeAttr(node, "lineno"); state = JGetXMLNodeAttr(node, "state"); JIndex bpIndex; JBoolean ok = idStr.ConvertToUInt(&bpIndex); assert( ok ); if (fileName.BeginsWith("file://")) { fileName.RemoveSubstring(1, 7); } JIndex lineNumber; ok = lineStr.ConvertToUInt(&lineNumber); assert( ok ); const JBoolean enabled = JI2B(state == "enabled"); CMBreakpoint* bp = new CMBreakpoint(bpIndex, fileName, lineNumber, "", "", enabled, CMBreakpoint::kKeepBreakpoint, "", 0); assert( bp != NULL ); bpList.InsertSorted(bp); if (true) // no way to know if it is temporary -- may be deleted or other status change { (CMGetLink()->GetBreakpointManager())->SetUpdateWhenStop(kJTrue); } } node = node->next; } (CMGetLink()->GetBreakpointManager())->UpdateBreakpoints(bpList, otherList); }