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