www.pudn.com > [Server]Distribute.rar > MHFile.cpp


// MHFile.cpp: implementation of the CMHFile class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
#include "MHFile.h" 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
 
CMHFile::CMHFile() 
{ 
	fp = NULL; 
	m_bReadMode = MHFILE_NORMALMODE; 
	memset( &m_Header, 0, sizeof(m_Header) ); 
	m_crc1 = m_crc2 = 0; 
	m_pData = NULL; 
	m_Dfp = 0; 
	m_bInit = FALSE; 
} 
 
CMHFile::~CMHFile() 
{ 
	Release(); 
} 
 
 
BOOL CMHFile::Init(char* filename,char* mode, DWORD dwFlag) 
{ 
	if( strcmp( "rb", mode ) == 0 ) 
		m_bReadMode = MHFILE_PACKEDFILE; 
	else 
		m_bReadMode = MHFILE_NORMALMODE; 
 
	if( m_bReadMode == MHFILE_PACKEDFILE ) 
		return OpenBin( filename ); 
	else if( m_bReadMode == MHFILE_NORMALMODE ) 
	{		 
		fp = fopen(filename,mode); 
		if(fp) 
			return TRUE; 
		else 
		{ 
			if(!(dwFlag & MHFILE_FLAG_DONOTDISPLAY_NOTFOUNDERROR)) 
			{			 
				char buffer[255]; 
				sprintf(buffer, "[%s] file is not found",filename); 
				MessageBox(NULL, buffer, 0,0); 
			}		 
			return FALSE; 
		} 
	} 
 
	return TRUE; 
} 
 
void CMHFile::Release() 
{ 
	if(fp) 
	{ 
		fclose(fp); 
		fp = NULL; 
	} 
	Clear(); 
} 
 
char* CMHFile::GetString() 
{ 
	static char buf[256]; 
	GetString( buf ); 
	return buf; 
} 
 
void CMHFile::GetString(char* pBuf) 
{ 
	if( m_bReadMode == MHFILE_PACKEDFILE ) 
	{ 
		DWORD j = 0; 
		BOOL bStart, bEnd; 
		bStart = bEnd = FALSE; 
		 
		if( m_Dfp == (int)m_Header.dwFileSize ) return; 
		 
		for( DWORD i = m_Dfp; i < m_Header.dwFileSize; ++i ) 
		{ 
			if( m_pData[i] == 0x0d && m_pData[i+1] == 0x0a )	// return 
			{ 
				if( bStart ) 
					break; 
				else 
				{ 
					m_Dfp += 2; 
					++i; 
				} 
			} 
			else if( m_pData[i] == 0x20 || m_pData[i] == 0x09 )	// spacebar, tab 
			{ 
				m_Dfp++; 
				if( bStart ) 
					bEnd = TRUE; 
			} 
			else 
			{ 
				if( bEnd ) break; 
				pBuf[j] = m_pData[i]; 
				j++; 
				m_Dfp++; 
				bStart = TRUE; 
			} 
		} 
		pBuf[j] = 0;	 
	} 
	else if( m_bReadMode == MHFILE_NORMALMODE ) 
		fscanf(fp,"%s",pBuf); 
} 
 
void CMHFile::GetLine(char * pBuf, int len) 
{ 
	if( m_bReadMode == MHFILE_PACKEDFILE ) 
	{		 
		DWORD j = 0; 
		 
		for( DWORD i = m_Dfp; i < m_Header.dwFileSize; ++i ) 
		{ 
			if( m_pData[i] == 0x0d && m_pData[i+1] == 0x0a )	// return 
			{ 
				m_Dfp += 2; 
				break; 
			} 
			else 
			{ 
				pBuf[j] = m_pData[i]; 
				j++; 
				m_Dfp++; 
			} 
		} 
		pBuf[j] = 0; 
	} 
	else if( m_bReadMode == MHFILE_NORMALMODE ) 
		fgets(pBuf, len, fp); 
} 
 
void CMHFile::GetLineX(char * pBuf, int len) 
{ 
	if( m_bReadMode == MHFILE_PACKEDFILE ) 
	{ 
		DWORD j = 0; 
		 
		if( m_Dfp > 2 ) m_Dfp -= 2; 
		for( DWORD i = m_Dfp; i < m_Header.dwFileSize; ++i ) 
		{ 
			if( m_pData[i] == 0x0d && m_pData[i+1] == 0x0a )	// return 
			{ 
				m_Dfp += 2; 
				break; 
			} 
			else 
			{ 
				pBuf[j] = m_pData[i]; 
				j++; 
				m_Dfp++; 
			} 
		} 
		pBuf[j] = 0; 
	} 
	else if( m_bReadMode == MHFILE_NORMALMODE ) 
		fgets(pBuf, len, fp); 
} 
 
int CMHFile::GetInt() 
{ 
	return atoi(GetString()); 
} 
LONG CMHFile::GetLong() 
{ 
	return (LONG)atoi(GetString()); 
} 
float CMHFile::GetFloat() 
{ 
	return (float)atof(GetString()); 
} 
DWORD CMHFile::GetDword() 
{ 
	return (DWORD)atoi(GetString()); 
} 
WORD CMHFile::GetWord() 
{ 
	return (WORD)atoi(GetString()); 
} 
BYTE CMHFile::GetByte() 
{ 
	return (BYTE)atoi(GetString()); 
} 
BOOL CMHFile::GetBool() 
{ 
	return (BOOL)atoi(GetString()); 
} 
BOOL CMHFile::GetExpPoint() 
{ 
	return (EXPTYPE)atoi(GetString()); 
} 
BOOL CMHFile::GetLevel() 
{ 
	return (LEVELTYPE)atoi(GetString()); 
} 
 
void CMHFile::GetFloat(float* pArray,int count) 
{ 
	for(int n=0;n