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

📄 tagtextfile.cpp

📁 BREW 应用
💻 CPP
字号:
// TAGTEXTFILE.cpp: implementation of the CTAGTEXTFILE class.
//
//////////////////////////////////////////////////////////////////////

#include "TAGTEXTFILE.h"

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

CTAGTEXTFILE::CTAGTEXTFILE(CAppMainHandler *pAppMain, int nWidth)
{
	m_pAppMain = pAppMain;	
	m_nViewWidth = nWidth;
	m_pIFile = NULL;
}

CTAGTEXTFILE::~CTAGTEXTFILE()
{

}

bool CTAGTEXTFILE::Open(char *szFileName)
{
	m_szFileName = szFileName;
	
	if(ISHELL_CreateInstance(m_pAppMain->m_pIShell, AEECLSID_FILEMGR,(void **)&m_pIFileMgr))
		return -1; //File 包府磊 积己坷幅
	
	if( IFILEMGR_Test(m_pIFileMgr, szFileName) == EFAILED )
		goto PROC_END;
	
	m_pIFile = IFILEMGR_OpenFile(m_pIFileMgr, szFileName, _OFM_READWRITE );

	if( m_pIFile )
		IFILE_GetInfo(m_pIFile, &m_Fi);
	m_nReadPos = 0;
	return 0;
PROC_END:
	if (m_pIFile) 
		IFILE_Release(m_pIFile);
	else {
		IFILEMGR_Release(m_pIFileMgr);
		return -1;
	}
	IFILEMGR_Release(m_pIFileMgr);
	return 0;
}

void CTAGTEXTFILE::Close()
{
	if( m_pIFile )
		IFILE_Release(m_pIFile);
	if( m_pIFileMgr )
		IFILEMGR_Release(m_pIFileMgr);
}

int CTAGTEXTFILE::Write(char *pText, int nSize)
{
	if( m_pIFile ) {
		IFILE_Seek(m_pIFile, _SEEK_END, 0);
		IFILE_Write( m_pIFile, pText, nSize );
		IFILE_Write( m_pIFile, &SPR, 1);
		return 1;
	}
	return 0;
}

char* CTAGTEXTFILE::Read(bool bNext) //[TEXT]SPR[TEXT]SPR...
{
	int nCount = 0;//备盒磊鳖瘤 佬澜
	char chBuf;

	char *chMsg = new char[LINESIZE];

	( bNext ) ? ( chBuf = Next() ) : ( chBuf = Prev() );
	
	while( chBuf != SPR ) {
		( bNext ) ? ( chMsg[nCount] = chBuf ) : ( chMsg[LINESIZE - nCount -2] = chBuf );
		nCount++;
		( bNext ) ? ( chBuf = Next() ) : ( chBuf = Prev() );
	}

	if( bNext ) {
		chMsg[nCount] = '\0';
		return chMsg;
	}
	else {
		chMsg[LINESIZE-1] = '\0';
		return chMsg + (LINESIZE-nCount);
	}		
}

char CTAGTEXTFILE::Next()
{
	char chBuf;
	if( IFILE_Read(m_pIFile, &chBuf, 1) )
		return chBuf;
	return 0;
}

char CTAGTEXTFILE::Prev()
{
	char chBuf;
	if( IFILE_Read(m_pIFile, &chBuf, 1) )
		return chBuf;
	return 0;
}

char* CTAGTEXTFILE::GetText(int nSize)
{
	char* pBuf = new char[nSize+1];
	IFILE_Seek(m_pIFile, _SEEK_START, m_nReadPos);
	IFILE_Read(m_pIFile, pBuf, nSize);
	pBuf[nSize] = '\0';//备盒磊绰 0栏肺 府悸
	m_nReadPos += nSize;
	return pBuf;
}

void CTAGTEXTFILE::InitText()
{
	if( m_pIFile )
		IFILE_Seek(m_pIFile, _SEEK_START, 0);
}

void CTAGTEXTFILE::MakeTagText(char *pText, int nSize, bool bEnd)
{
	char chBuf[3];
	int nOneSize, nTotalSize, nTextCount;
	int nCount, nTemp;
	char *pStartPos;
	AEEFont font;
	char *pszText = NULL;
	SetSpareText(pszText, pText, nSize);
	
	nOneSize = nTotalSize = nTextCount = 0;
	pStartPos = pszText;
	while( pszText != NULL ) {
		if( *pText & 0x80 ) {
			MEMCPY(chBuf, pszText, 2);
			nCount = 2;
		}
		else {
			MEMCPY(chBuf, pszText, 1);
			if ( chBuf[0] == '\r' ) {				
				Write(pStartPos, nTextCount);
				nTextCount = nTotalSize = 0;
				pStartPos = pszText + 1;
				continue;
			}
			if ( chBuf[0] == '\n' ) 
				*pszText = ' ';
			nCount = 1;
		}
		chBuf[nCount] = '\0';
		nOneSize = IDISPLAY_MeasureTextEx(m_pAppMain->m_pIDisplay, font, (AECHAR*)chBuf, 1, -1, &nTemp);
		nTotalSize += nOneSize;
		if( m_nViewWidth > nTotalSize )
			nTextCount += nCount;
		else {			
			Write(pStartPos, nTextCount);
			nTextCount = nTotalSize = 0;
			pStartPos = pszText+1;
			continue;
		}
		pszText += nCount;
	}
	if ( bEnd ) 
		Write(pStartPos, nTextCount);
	else{
		MEMCPY(m_St.szBuf, pStartPos, nTextCount);
		m_St.nSpare = nTextCount;
	}
}

void CTAGTEXTFILE::SetSpareText(char *pDest, char *pSrc, int nSize)
{
	if( pDest )
		delete pDest;
	pDest = new char[nSize + m_St.nSpare];
	MEMCPY(pDest, (char*)m_St.szBuf, m_St.nSpare);
	MEMCPY(pDest + m_St.nSpare, pSrc, nSize);
	m_St.nSpare = 0;
	if( pSrc )
		delete pSrc;
}

⌨️ 快捷键说明

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