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

📄 bgi_gb.cpp

📁 三国志IX武将编辑器
💻 CPP
字号:
// BGI_GB.cpp: implementation of the CBGI_GB class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "BGI_GB.h"

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

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

LPWORD CBGI_GB::pBIGTable=NULL;
LPWORD CBGI_GB::pGBTable=NULL;
HGLOBAL CBGI_GB::hGBTable=NULL;
HGLOBAL CBGI_GB::hBIGTable=NULL;

void CBGI_GB::Release()
{
    UnlockResource(hGBTable); 
	FreeResource(hGBTable);   	
	UnlockResource(hBIGTable); 
	FreeResource(hBIGTable);  
	pBIGTable=NULL;
    pGBTable=NULL;
	hGBTable=NULL;
	hBIGTable=NULL;
}


CBGI_GB::CBGI_GB()
{
	if(pGBTable==NULL)
	{
	hRes=FindResource(NULL,"GBTOBIG",RT_RCDATA);//IDR_GBTOBIG
	hGBTable=LoadResource(0,hRes);
	pGBTable=(LPWORD)LockResource(hGBTable);
	if(pGBTable==NULL)
		AfxMessageBox("fail to load GB2BIG Resource");
	}
	//locate the resource of "BIGTOGB" 定位资源 "BIGTOGB"
	if(pBIGTable==NULL)
	{
	hRes=FindResource(NULL,"BIGTOGB",RT_RCDATA);
	hBIGTable=LoadResource(0,hRes);
	pBIGTable=(LPWORD)LockResource(hBIGTable);
	if(pBIGTable==NULL)
		AfxMessageBox("fail to load Big2GB Resource");
	}
    ///////////////////////////////////////////////////////////
	m_strLine.SetSize(0);
	m_text="\n";
}

CBGI_GB::~CBGI_GB()
{
}

long CBGI_GB::CalLineNumber()
{
	m_strLine.SetSize(0);
	CString strTemp;
	BOOL bReturn=FALSE;
	if(!m_text.GetLength())
		return 0;
	long line_num=0;
	int index=0;
	do
	{
		TCHAR c=m_text.GetAt(index++);
		if(c=='\t')
			strTemp+="        ";
		else if(c!='\n')
			strTemp+=c;
		else
		{	
			bReturn=TRUE;
			line_num++;;
			m_strLine.Add(strTemp.Left(strTemp.GetLength()-1));
			strTemp="\0";
		}
	}
	while(index<m_text.GetLength());
	if(!bReturn)
		m_strLine.Add(strTemp);

	return m_strLine.GetSize();
}


CString CBGI_GB::BigtoGB(CString text) 
{
	if(text=="") text+="\n";
	else
    if(text[text.GetLength()-1]!=10) 
	{
		text+=13;
		text+=10;
	}  
	m_text=text;

    m_objtext="";

	if(m_text=="\n")
		return "";

	m_lineNumber=CalLineNumber();
	for(int Line=0;Line<m_lineNumber;Line++)
	{
		BYTE* SourceSTR;
		SourceSTR=(BYTE* )((LPCTSTR)m_strLine[Line]);
		int size=m_strLine[Line].GetLength();
		if(size)
		{	
			BYTE* DestSTR=new BYTE[size+1];
			unsigned i=0;
			do
			{
				// is English 是英文字符
				if(SourceSTR[i]<0xA1||(SourceSTR[i+1]<0x40)) 
				{
					DestSTR[i]=SourceSTR[i];
					i++;
				}
				else //是BIG5的汉字码
				{
					DestSTR[i+1]=HIBYTE(pBIGTable[(SourceSTR[i]-0xA1)*0xBF+SourceSTR[i+1]-0x40]);
					DestSTR[i]=LOBYTE(pBIGTable[(SourceSTR[i]-0xA1)*0xBF+SourceSTR[i+1]-0x40]);
					i+=2;
				}
			}
			while(i<strlen((char*)(SourceSTR)));
            DestSTR[i]='\0';

			m_strLine[Line]=DestSTR;
			m_objtext+=DestSTR;
			delete DestSTR;
		}
	}

	return m_objtext;
}

CString CBGI_GB::GBtoBig(CString text) 
{
	if(text=="") text+="\n";
	else
    if(text[text.GetLength()-1]!=10) 
	{
		text+=13;
		text+=10;
	}  
	m_text=text;

    m_objtext="";

	if(m_text=="\n")
		return "";

	m_lineNumber=CalLineNumber();
	for(int Line=0;Line<m_lineNumber;Line++)
	{
		BYTE* SourceSTR;
		SourceSTR=(BYTE* )((LPCTSTR)m_strLine[Line]);
		int size=m_strLine[Line].GetLength();
		if(size)
		{	
			BYTE* DestSTR=new BYTE[size+1];
			unsigned i=0;
			do
			{
				// is English 是英文字符
				if(SourceSTR[i]<0xA1||(SourceSTR[i+1]<0xA1)) 
				{
					DestSTR[i]=SourceSTR[i];
					i++;
				}
				else if(SourceSTR[i]>0xA1&&SourceSTR[i]<0xB0) //是GB2312的汉字码
				{
					DestSTR[i+1]=HIBYTE(pGBTable[(SourceSTR[i]-0xA1)*0x5E+SourceSTR[i+1]-0xA1]);
					DestSTR[i]=LOBYTE(pGBTable[(SourceSTR[i]-0xA1)*0x5E+SourceSTR[i+1]-0xA1]);
					i+=2;
				}
				else
				{
					DestSTR[i+1]=HIBYTE(pGBTable[(SourceSTR[i]-0xA7)*0x5E+SourceSTR[i+1]-0xA1]);
					DestSTR[i]=LOBYTE(pGBTable[(SourceSTR[i]-0xA7)*0x5E+SourceSTR[i+1]-0xA1]);
					i+=2;
				}
			}
			while(i<strlen((char*)(SourceSTR)));
	        DestSTR[i]='\0';

			m_strLine[Line]=DestSTR;
			m_objtext+=DestSTR;
			delete DestSTR;
		}
	}
    return m_objtext;
}

⌨️ 快捷键说明

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