📄 tagtextfile.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 + -