示例#1
0
	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);
		}
	}
示例#2
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);
}