📄 mindex.cpp
字号:
// Mindex.cpp: implementation of the CMindex class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Mindex.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMindex::CMindex()
{
memset( DestPath, 0x0, 256 );
pCombIdx = new IDXINFO[256];
memset( (char *)pCombIdx, 0x0, sizeof(IDXINFO)*256 );
pCombBuf = new char[4000];
memset( pCombBuf, 0x08, 4000 );
Count = 1;
CombBufLen = 4000;
pCombIdx[0].Id = ' ';
pCombIdx[0].Offset = 0;
pCombIdx[0].Length = 4000;
strcpy( pCombIdx[0].Note, "静音" );
}
CMindex::~CMindex()
{
if ( pCombIdx != NULL ) delete pCombIdx;
if ( pCombBuf != NULL ) delete pCombBuf ;
}
void CMindex::ResetComb(void)
{
if ( pCombIdx != NULL ) delete pCombIdx;
if ( pCombBuf != NULL ) delete pCombBuf ;
memset( DestPath, 0x0, 256 );
pCombIdx = new IDXINFO[256];
memset( (char *)pCombIdx, 0x0, sizeof(IDXINFO)*256 );
pCombBuf = new char[4000];
memset( pCombBuf, 0x80, 4000 );
Count = 1;
CombBufLen = 4000;
pCombIdx[0].Id = ' ';
pCombIdx[0].Offset = 0;
pCombIdx[0].Length = 4000;
strcpy( pCombIdx[0].Note, "静音" );
}
void CMindex::SetPath( char *m_Path)
{
int Length;
if( m_Path != NULL )
{
strcpy( DestPath, m_Path );
Length = strlen( DestPath );
if( DestPath[ Length-1 ] != '\\' ) strcat( DestPath, "\\" );
}
}
int CMindex::ReadIdx( void )
{
CFile pFile;
int Length;
char m_File[256], Debugbuf[256];
strcpy( m_File, DestPath );
strcat( m_File, "Combvoc.idx") ;
if ( !pFile.Open( m_File, CFile::modeRead|CFile::typeBinary ) )
{
sprintf( Debugbuf, "Open File %s Error!", m_File );
AfxMessageBox(Debugbuf);
return 0;
}
Length = pFile.GetLength();
Count = Length / sizeof(IDXINFO);
pFile.Read( (char *) pCombIdx, Length );
pFile.Close();
return(Count);
}
int CMindex::WriteIdx( void )
{
CFile pFile;
char m_File[256], Debugbuf[256];
strcpy( m_File, DestPath );
strcat( m_File, "Combvoc.idx") ;
if ( !pFile.Open( m_File, CFile::modeCreate|CFile::modeWrite|CFile::typeBinary ) )
{
sprintf( Debugbuf, "Create File %s Error!", m_File );
AfxMessageBox(Debugbuf);
return 0;
}
pFile.Write( (char *) pCombIdx, Count*sizeof(IDXINFO));
pFile.Close();
return(Count);
}
int CMindex::ReadBuf( void )
{
CFile pFile;
char m_File[256], Debugbuf[256];
strcpy( m_File, DestPath );
strcat( m_File, "Combvoc.vox") ;
if ( !pFile.Open( m_File, CFile::modeRead|CFile::typeBinary ) )
{
sprintf( Debugbuf, "Open File %s Error!", m_File );
AfxMessageBox(Debugbuf);
return 0;
}
CombBufLen = pFile.GetLength();
RallocComb( CombBufLen );
pFile.ReadHuge( pCombBuf, CombBufLen );
pFile.Close();
return(CombBufLen);
}
int CMindex::WriteBuf( void )
{
CFile pFile;
char m_File[256], Debugbuf[256];
strcpy( m_File, DestPath );
strcat( m_File, "Combvoc.vox") ;
if ( !pFile.Open( m_File, CFile::modeCreate|CFile::modeWrite|CFile::typeBinary ) )
{
sprintf( Debugbuf, "Create File %s Error!", m_File );
AfxMessageBox(Debugbuf);
return 0;
}
pFile.WriteHuge( pCombBuf, CombBufLen );
pFile.Close();
return(CombBufLen);
}
int CMindex::FindId( char m_Id, int &m_Offset, int &m_Length )
{
int i = 0;
if( Count == 0 )
{
m_Offset = 0;
m_Length = 0;
return 0;
}
for( i=0; i<Count; i++ )
{
if( pCombIdx[i].Id == m_Id ) break;
}
if( i<Count )
{
m_Offset = pCombIdx[i].Offset;
m_Length = pCombIdx[i].Length;
return (i+1);
}
else
{
m_Offset = pCombIdx[Count-1].Offset + pCombIdx[Count-1].Length;
m_Length = 0;
return 0;
}
}
int CMindex::GetCount( void )
{
return Count;
}
IDXINFO *CMindex::GetCombIdx( void )
{
return pCombIdx;
}
int CMindex::GetCombBufLen( void )
{
return CombBufLen;
}
char *CMindex::GetCombBuf( void )
{
return pCombBuf;
}
int CMindex::RallocComb( int length )
{
char *newBuf;
newBuf = new char[length];
memcpy( newBuf, pCombBuf, CombBufLen );
delete pCombBuf ;
pCombBuf = newBuf ;
return 1;
}
int CMindex::AddNode( char ID, char *TagFile, char *TagNote)
{
CFile pFile;
int m_Length;
char Debugbuf[256];
char DestFile[128];
char *VoxBuf;
strcpy( DestFile, DestPath );
strcat( DestFile, TagFile );
if ( !pFile.Open( DestFile, CFile::modeRead|CFile::typeBinary ) )
{
sprintf( Debugbuf, "Open File %s Error!", DestFile );
AfxMessageBox(Debugbuf);
return 0;
}
pFile.SeekToEnd();
m_Length = pFile.GetLength();
VoxBuf = new char[ m_Length ];
pFile.SeekToBegin();
pFile.Read( VoxBuf, m_Length );
pFile.Close();
Count ++;
pCombIdx[Count-1].Id = ID;
if( Count <2 )
{
pCombIdx[Count-1].Offset = 0;
}
else
{
pCombIdx[Count-1].Offset = pCombIdx[Count-2].Offset + pCombIdx[Count-2].Length;
}
pCombIdx[Count-1].Length = m_Length;
strcpy( pCombIdx[Count-1].Note, TagNote );
//以下处理pCombBuf
RallocComb( CombBufLen + m_Length );
memcpy( &pCombBuf[CombBufLen], VoxBuf, m_Length );
CombBufLen = CombBufLen + m_Length ;
delete VoxBuf;
return 1;
}
int CMindex::DelNode( char ID )
{
int i = 0 , No;
int m_Offset, m_Length;
No = FindId( ID, m_Offset, m_Length );
if( No < 1 ) return (0) ;
for ( i=No-1; i<Count-1 ; i++ )
{
pCombIdx[i].Id = pCombIdx[i+1].Id;
pCombIdx[i].Offset = pCombIdx[i+1].Offset - m_Length;
pCombIdx[i].Length = pCombIdx[i+1].Length;
strcpy( pCombIdx[i].Note, pCombIdx[i+1].Note );
}
Count --;
memset( (char *)&pCombIdx[Count].Id, 0x0, sizeof(IDXINFO) );
//以下处理pCombBuf
memcpy( &pCombBuf[m_Offset], &pCombBuf[m_Offset+m_Length], CombBufLen-m_Offset-m_Length );
CombBufLen = CombBufLen - m_Length ;
return 1;
}
int CMindex::InitCombvox( char *IniFile, char *Section )
{
char COMBTAG[100] = "";
char COMBTAGEU[2] = "";
char TagPath[128] = "";
char TagFile[128] = "";
char TagNote[128] = "";
char TagBuff[128] = "";
int i=0, maxtag=0;
if( GetProfile(IniFile,"PATH", Section, TagPath ) == NULL )
{
GetCurrentDirectory( 128, TagPath );
}
SetPath( TagPath );
if( GetProfile(IniFile,Section, "TAGS", COMBTAG ) == NULL )
{
AfxMessageBox("Read Tags Error !");
return -1;
}
maxtag = strlen( COMBTAG );
for( i=0; i<maxtag; i++ )
{
COMBTAGEU[0] = COMBTAG[i];
if( GetProfile(IniFile,Section,COMBTAGEU, TagBuff ) != NULL )
{
SplitTextAndNote( TagBuff, TagFile, TagNote );
AddNode( COMBTAGEU[0], TagFile, TagNote );
}
}
return 0;
}
int CMindex::ReadEnglish( char *IniFile, char *Section )
{
char COMBTAG[200] = "";
char COMBTAGEU[20] = "";
char TagPath[128] = "";
char TagFile[128] = "";
char TagNote[128] = "";
char TagBuff[128] = "";
int i=0, maxtag=0;
if( GetProfile(IniFile,"PATH", Section, TagPath ) == NULL )
{
GetCurrentDirectory( 128, TagPath );
}
SetPath( TagPath );
if( GetProfile(IniFile,Section, "TAGS", COMBTAG ) == NULL )
{
AfxMessageBox("Read Tags Error !");
return -1;
}
maxtag = atoi( COMBTAG );
for( i=0; i<=maxtag; i++ )
{
sprintf( COMBTAGEU,"%d", i );
if( GetProfile(IniFile,Section,COMBTAGEU, TagBuff ) != NULL )
{
SplitTextAndNote( TagBuff, TagFile, TagNote );
AddNode( i+1, TagFile, TagNote );
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -