⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cxmlprt.cpp

📁 将exe等可执行文件转化成c程序的反编译程序,先到汇编再到c
💻 CPP
字号:
// Copyright(C) 1999-2005 LiuTaoTao,bookaa@rorsoft.com

//	CXmlPrt.cpp

#include "stdafx.h"
#include	"00000.h"
#include	"CXmlPrt.h"
#include <assert.h>

CXmlPrt::CXmlPrt()
{
	m_xmllist = CXmlList::new_CXmlList(XT_invalid,NULL,0);
	m_str = new CMyString;

	m_curword_type = XT_invalid;
	m_curword_p = NULL;
}

CXmlPrt::~CXmlPrt()
{
	SAFE_DELETE(m_xmllist);
    SAFE_DELETE(m_str);
}
void CXmlPrt::Clear() 
{
	this->~CXmlPrt();
	
    m_xmllist = CXmlList::new_CXmlList(XT_invalid,NULL,0);
	m_str = new CMyString;
}

void CXmlPrt::prtt(PCSTR str)
{
	this->m_str->strcat(str);
}

void CXmlOutPro::prtslen(PCSTR s, int len)
{
	char buf[280];
    assert(len<280);
    strncpy(buf,s,len);
    buf[len] = 0;
    this->prtt(buf);
}
void CXmlOutPro::prtf(PCSTR fmt, ...)
{
    va_list argptr;
    int cnt;
	char buf[280];

    va_start(argptr, fmt);
    cnt = vsprintf(buf, fmt, argptr);
    va_end(argptr);

	this->prtt(buf);

    return;	//(cnt);
}

void CXmlOutPro::prtl(PCSTR fmt, ...)
{
    va_list argptr;
    int cnt;
	char buf[280];

    va_start(argptr, fmt);
    cnt = vsprintf(buf, fmt, argptr);
    va_end(argptr);

	this->prtt(buf);

	if (!this->m_f_prt_in_1line)
		this->prtt("\n");

    return;	//(cnt);
}
void	CXmlOutPro::ident_add1()
{
	this->m_nIdent++;
}
void	CXmlOutPro::ident_sub1()
{
	assert(this->m_nIdent);
	this->m_nIdent--;
}
void    CXmlOutPro::ident()
{
	if (m_f_prt_in_1line)
		return;
	for (UINT i=0; i<m_nIdent; i++)
		m_out->prtt("    ");
}
void 	CXmlOutPro::prtl_ident(PSTR fmt,...)
{
	ident();

    va_list argptr;
	char buf[280];

    va_start(argptr, fmt);
    vsprintf(buf, fmt, argptr);
    va_end(argptr);

	prtl("%s",buf);
}

void 	CXmlOutPro::prtf_ident(PSTR fmt,...)
{
	ident();

    va_list argptr;
	char buf[280];

    va_start(argptr, fmt);
    vsprintf(buf, fmt, argptr);
    va_end(argptr);

	prtf("%s",buf);
}

void CXmlOutPro::endline()
{
	if (!this->m_f_prt_in_1line)
		this->prtt("\n");
}
void CXmlOutPro::EOL()
{	//	一般情况下,是";\n"
    this->nospace();
	if (this->m_f_prt_in_comma)
		prtl(",");
	else
		prtl(";");
}


void CXmlPrt::XMLbegin(XMLTYPE xmltype, PVOID p0)
{
	long pos = m_str->GetLength();
	this->m_xmllist->XMLbegin(xmltype, p0, pos);
}

void CXmlPrt::XMLend(XMLTYPE xmltype)
{
	long pos = m_str->GetLength();
	XMLTYPE type1 = this->m_xmllist->XMLend(xmltype, pos);
}


//	---------------------------------------------------

void CXmlPrt::Clicked(long x1, long x2)
{
	this->m_xmllist->Clicked(x1,x2);

}
BOOL CXmlPrt::GetCurWord(long curpos, long &posfrom, long &posto)
{
	if (NULL != this->m_xmllist->GetCurWord(curpos, posfrom, posto))	
		return TRUE;
	posfrom = curpos;
	posto = curpos+1;
	return FALSE;
}
BOOL CXmlPrt::GetLeftWord(long curpos, long &posfrom, long &posto)
{
	if (NULL != this->m_xmllist->GetLeftWord(curpos, posfrom, posto))	
		return TRUE;
	posfrom = curpos;
	posto = curpos+1;
	return FALSE;
}
BOOL CXmlPrt::GetRightWord(long curpos, long &posfrom, long &posto)
{
	if (NULL != this->m_xmllist->GetRightWord(curpos, posfrom, posto))	
		return TRUE;
	posfrom = curpos;
	posto = curpos+1;
	return FALSE;
}

void	CXmlPrt::prtprtout(CXmlOutPro* prt)
{
    PCSTR pstr = this->m_str->GetString();

    if (this->m_xmllist == NULL || this->m_xmllist->m_xmltype == XT_invalid)
    {
        prt->prtt(pstr);
        return;
    }

    if (m_xmllist->m_posfrom != 0)
    {
        prt->prtslen(pstr, m_xmllist->m_posfrom);
        pstr += m_xmllist->m_posfrom;
    }
    m_xmllist->prtprtout(pstr, prt);

    int len = m_xmllist->m_posto - m_xmllist->m_posfrom;

    pstr += len;
    if (pstr[0] != 0)
    {
        prt->prtt(pstr);
    }
}

void CXmlPrt::Display(I_COLOROUT* iColorOut)
{
    
	PCSTR pstr = this->m_str->GetString();

    if (this->m_xmllist == NULL || this->m_xmllist->m_xmltype == XT_invalid)
    {
        iColorOut->ColorOut(pstr,strlen(pstr),RGB(255,255,255));
        return;
    }
    if (m_xmllist->m_posfrom != 0)
    {
        iColorOut->ColorOut(pstr, m_xmllist->m_posfrom, RGB(255,255,255));
        pstr += m_xmllist->m_posfrom;
    }
	m_xmllist->Display(pstr, iColorOut, this->m_curword_type, this->m_curword_p);

    int len = m_xmllist->m_posto - m_xmllist->m_posfrom;

    pstr += len;
    if (pstr[0] != 0)
    {
        iColorOut->ColorOut(pstr,strlen(pstr),RGB(255,255,255));
    }
}


    
CString CXmlPrt::GetString()
{
    return this->m_str->GetString();
}
    
    
void CXmlPrt::CommaLast()
{//把最后的,换为;
    PSTR p = this->m_str->GetWritableString();
    int len = strlen(p);
    len -= 2;
    if (len < 0)
        len = 0;
    p+=len;
    if (*p == ',')
    {
        *p = ';';
        return;
    }
    p++;
    if (*p == ',')
    {
        *p = ';';
        return;
    }
}

int CXmlPrt::MoveHome(int nLine)
{
	CString str = this->GetLine(nLine);
	for (int i=0; i<str.GetLength(); i++)
	{
		if (str[i] != ' ')
			return i;
	}
	return 0;
}

int CXmlPrt::MoveLeftWord(int x, int y)
{
    if (x > 0)
        x--;
	CString str = this->GetLine(y);
    while (x > 0)
    {
        char c = str[x];
        if (c != ' ')
            break;
        x--;
    }
    while (x > 0)
    {
        char c = str[x];
        if (c == ' ')
            break;
        x--;
    }
	return x+1;
}
int CXmlPrt::MoveRightWord(int x, int y)
{
	CString str = this->GetLine(y);
    int len = str.GetLength();
    while (x < len)
    {
        char c = str[x];
        if (c == ' ')
            break;
        x++;
    }
    while (x < len)
    {
        char c = str[x];
        if (c != ' ')
            break;
        x++;
    }
	return x;
}
int CXmlPrt::WordToLeft(int x, int y)
{
	CString str = this->GetLine(y);
	if (x >= str.GetLength())
	{
		return str.GetLength();
	}
    while (x > 0)
    {
        char c = str[x];
        if (c == ' ')
            break;
        x--;
    }
    return x+1;
}
int CXmlPrt::WordToRight(int x, int y)
{
	CString str = this->GetLine(y);
    int len = str.GetLength();
    while (x < len)
    {
        char c = str[x];
        if (c == ' ')
            break;
        x++;
    }
	return x;
}
int CXmlPrt::GetLineLength(int nLine)
{
	CString str = this->GetLine(nLine);
	return str.GetLength();
}

CString CXmlPrt::GetLine(int nLine)
{
	PCSTR pstr = this->m_str->GetString();
	if (pstr == NULL)
		return "";

	int n = 0;
	for (;;)
	{
		PCSTR p = strchr(pstr,'\n');
		if (p != NULL)
		{
			if (n == nLine)
			{
				return CString(pstr, p-pstr);
			}
			n++;
			pstr = p+1;
			continue;
		}
		break;
	}
	if (n == nLine)
		return pstr;
	return "";
}

int CXmlPrt::GetPosXY(int x, int y)
{//输入二唯的行列,返回一唯的pos
    PCSTR pstr_org = this->m_str->GetString();
    PCSTR pstr = pstr_org;
    if (pstr == NULL)
        return 0;

    int n = 0;
    for (;;)
    {
        if (n == y)
        {
            return (pstr - pstr_org)+x;
        }
        PCSTR p = strchr(pstr,'\n');
        if (p != NULL)
        {
            n++;
            pstr = p+1;
            continue;
        }
        break;
    }
    return 0;
}

void CXmlPrt::GetItem(int x, int y, OUT enum XMLTYPE& xmltype, OUT PVOID& h)
{
    int pos = GetPosXY(x,y);
    long posfrom, posto;
    CXmlList* p = this->m_xmllist->GetCurWord(pos,posfrom,posto);
    if (p != NULL)
    {
        xmltype = p->m_xmltype;
        h = p->m_p;
    }
}
    
CString CXmlPrt::GetText(int y1, int x1, int y2, int x2)
{
    CString retn;
    if (y1 > y2)
        return "";
    
    PCSTR pstr = this->m_str->GetString();
    if (pstr == NULL)
        return "";

    int n = 0;
    for (;;)
    {
        PCSTR p = strchr(pstr,'\n');
        if (p != NULL)
        {
            if (n == y1)
            {
                if (y1 == y2)
                {
                    return CString(pstr+x1, x2-x1);
                }
                retn += CString(pstr+x1, p-pstr-x1);
                retn += '\n';
            }
            else if (n > y1 && n < y2)
            {
                retn += CString(pstr, p-pstr);
                retn += '\n';
            }
            else if (n == y2)
            {
                retn += CString(pstr, x2);
                return retn;
            }
            n++;
            pstr = p+1;
            continue;
        }
        break;
    }
    if (n == y2)
    {
        retn += CString(pstr, x2);
        return retn;
    }
    return "";
}
int CXmlPrt::GetLineCount()
{
	PCSTR pstr = this->m_str->GetString();
    if (pstr == NULL)
        return 0;
    
    int n = 0;
    for (;;)
    {
        PCSTR p = strchr(pstr,'\n');
        if (p != NULL)
        {
            n++;
            pstr = p+1;
            continue;
        }
        if (*pstr != '\0')
            n++;
        break;
    }

    return n;
}

UINT GetPosFromXY(PCSTR p0, int x, int y)
{
	PCSTR p = p0;
	while (y)
	{
		PCSTR p1 = strchr(p,'\n');
		if (p1 == NULL)
		{
			return p-p0;
		}
		p = p1+1;
		y--;
	}

	return (p-p0)+x;
}
bool CXmlPrt::SetCurWord(int x, int y)
{
	this->m_curword_type = XT_invalid;
	this->m_curword_p = 0;

	UINT pos = GetPosFromXY(this->m_str->GetString(), x, y);
	long posfrom, posto;
	CXmlList* p1 = this->m_xmllist->GetCurWord(pos, posfrom, posto);
	if (p1 == NULL)
		return true;

	this->m_curword_type = p1->m_xmltype;
	this->m_curword_p = p1->m_p;
	return true;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -