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

📄 crortextbuffer.cpp

📁 将exe等可执行文件转化成c程序的反编译程序,先到汇编再到c
💻 CPP
字号:

#include "stdafx.h"
#include <malloc.h>
#include "editcmd.h"
#include "CRorTextBuffer.h"
#include "CRorTextView.h"


#ifndef __AFXPRIV_H__
#pragma message("Include <afxpriv.h> in your stdafx.h to avoid this message")
#include <afxpriv.h>
#endif

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//	Line allocation granularity
#define		CHAR_ALIGN					16
#define		ALIGN_BUF_SIZE(size)		((size) / CHAR_ALIGN) * CHAR_ALIGN + CHAR_ALIGN;

#define		UNDO_BUF_SIZE				1024

const TCHAR crlf[] = _T("\r\n");

#ifdef _DEBUG
#define _ADVANCED_BUGCHECK	1
#endif


/////////////////////////////////////////////////////////////////////////////
// CRorTextBuffer

IMPLEMENT_DYNCREATE(CRorTextBuffer, CCmdTarget)


CRorTextBuffer::CRorTextBuffer()
{
}


CRorTextBuffer::~CRorTextBuffer()
{
}


BEGIN_MESSAGE_MAP(CRorTextBuffer, CCmdTarget)
	//{{AFX_MSG_MAP(CRorTextBuffer)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CRorTextBuffer message handlers


void CRorTextBuffer::FreeAll()
{
}

BOOL CRorTextBuffer::InitNew()
{
    UpdateViews();
	return TRUE;
}

static const char *crlfs[] =
{
	"\x0d\x0a",			//	DOS/Windows style
	"\x0a\x0d",			//	UNIX style
	"\x0a"				//	Macintosh style
};

BOOL CRorTextBuffer::LoadFromFile(LPCTSTR pszFileName)
{
	UpdateViews();
	return true;
}

BOOL CRorTextBuffer::SaveToFile(LPCTSTR pszFileName)
{
	return true;
}

int CRorTextBuffer::GetLineCount()
{
    int n = this->m_xml.GetLineCount();
    if (n == 0)
        return 1;
    return n;
}

int CRorTextBuffer::GetLineLength(int nLine)
{
    return this->m_xml.GetLineLength(nLine);
}

LPTSTR CRorTextBuffer::GetLineChars(int nLine)
{
    return NULL;
}


static int FlagToIndex(DWORD dwFlag)
{
	int nIndex = 0;
	while ((dwFlag & 1) == 0)
	{
		dwFlag = dwFlag >> 1;
		nIndex ++;
		if (nIndex == 32)
			return -1;
	}
	dwFlag = dwFlag & 0xFFFFFFFE;
	if (dwFlag != 0)
		return -1;
	return nIndex;
}

CString CRorTextBuffer::GetText(int nStartLine, int nStartChar, int nEndLine, int nEndChar)
{
    CString text = this->m_xml.GetText(nStartLine, nStartChar, nEndLine, nEndChar);
    return text;
}

void CRorTextBuffer::AddView(CRorTextView *pView)
{
	m_lpViews.AddTail(pView);
}

void CRorTextBuffer::RemoveView(CRorTextView *pView)
{
	POSITION pos = m_lpViews.GetHeadPosition();
	while (pos != NULL)
	{
		POSITION thispos = pos;
		CRorTextView *pvw = m_lpViews.GetNext(pos);
		if (pvw == pView)
		{
			m_lpViews.RemoveAt(thispos);
			return;
		}
	}
	ASSERT(FALSE);
}

void CRorTextBuffer::UpdateViews()
{
    //CRorTextView *pSource, CUpdateContext *pContext, DWORD dwUpdateFlags, int nLineIndex /*= -1*/
    CRorTextView *pSource = NULL;
    CUpdateContext *pContext = NULL;
    DWORD dwUpdateFlags = UPDATE_RESET;
    int nLineIndex = -1;    /*= -1*/
    //NULL, NULL, UPDATE_RESET
	POSITION pos = m_lpViews.GetHeadPosition();
	while (pos != NULL)
	{
		CRorTextView *pView = m_lpViews.GetNext(pos);
		pView->UpdateView();    //pSource, pContext, dwUpdateFlags, nLineIndex);
	}
}

#include "Change.h"

int StrToInt(PCSTR str)
{
    int d = 0;
    sscanf(str, "%d", &d);
    return d;
}

    
bool CRorTextBuffer::SetCurWord(int x, int y)
{//return true 表明换单词了
	return this->m_xml.SetCurWord(x,y);
}
bool CRorTextBuffer::OnChar(int x, int y, UINT nChar)
{
    if (nChar == 'd' || nChar == 'D')
    {
        return true;
    }
    else if (nChar == 'p' || nChar == 'P')
    {
        int n = 0;
        return true;
    }
    else if (nChar == 'n' || nChar == 'N')
    {
        CChange* dlg = new CChange;
		dlg->DoModal();
        CString newname = dlg->name;

        XMLTYPE xmltype = XT_invalid;
        PVOID p = NULL;
        this->m_xml.GetItem(x,y, xmltype, p);
        if (xmltype != XT_invalid)
        {
            return ::g_EXE2C->Rename(xmltype,p,newname);
            //this->Rename(x, y, newname);
        }
        return false;
    }
    else if (nChar == 't' || nChar == 'T')
    {
        CChange* dlg = new CChange;
		dlg->DoModal();
        CString newtype = dlg->name;

        //this->ReType(x, y, newtype);
        return true;
    }
    else if (nChar == 'a' || nChar == 'A')
    {
        CChange* dlg = new CChange;
		dlg->DoModal();
        CString s = dlg->name;

        //this->Change_Array(x, y, StrToInt(s));
        return true;
    }
    return false;
}

void CRorTextBuffer::Parse(int nLineIndex, TEXTBLOCK *pBuf, int &nActualItems)
{
    return;
}


void MyRefreshFuncList();
extern CSampleView *g_VIEW;

void MyRefreshView()
{
	g_VIEW->ResetView();
	g_VIEW->DeleteAll();
    g_VIEW->LocateTextBuffer()->m_xml.Clear();
	g_EXE2C->prtout_cpp(&g_VIEW->LocateTextBuffer()->m_xml);
	g_VIEW->Invalidate();

    MyRefreshFuncList();
}


⌨️ 快捷键说明

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