?? swpfile.cpp
字號(hào):
// SwpFile.cpp: implementation of the CSwpFile class.
//
//////////////////////////////////////////////////////////////////////
#include "SwpFile.h"
#include <dos.h>
#include <stdio.h>
#include <mem.h>
extern unsigned long GetFileDataCrc(const void *aData, const unsigned long aSize);
CSwpFile::CSwpFile()
{
m_SwpFile=NULL;
m_UseIndex=0;
}
CSwpFile::~CSwpFile()
{
CloseFile();
}
//////////////////////////////////////////////////////
//////////////////////////////////////////////////////
//重建交換文件。
void CSwpFile::RebuildSwpFile()
{
if(m_SwpFile) fclose(m_SwpFile);
char buffer[256]={0};
m_SwpFile=fopen(SwpFileName,"wb");
for(int i=0;i<MaxIndex;i++) fwrite(buffer,256,1,m_SwpFile);
fclose(m_SwpFile);
m_SwpFile=fopen(SwpFileName,"rb+");
}
void CSwpFile::CloseFile()
{
if(m_SwpFile) fclose(m_SwpFile);
m_SwpFile=NULL;
}
void CSwpFile::ClearSwpFile()
{
char buf[256]={0};
if(!m_SwpFile)
{
fopen(SwpFileName,"rb+");
for(int i=0;i<MaxIndex;i++) fwrite(buf,256,1,m_SwpFile);
}
else
{
fseek(m_SwpFile,-256,SEEK_CUR);
fwrite(buf,256,1,m_SwpFile);
flush(m_SwpFile);
}
}
void CSwpFile::RestoreSwpFileData()
{
m_SwpFile=fopen(SwpFileName,"rb+");
if(!m_SwpFile)
{
RebuildSwpFile();
return ;
}
fseek(m_SwpFile,0,SEEK_END);
if(ftell(m_SwpFile)!=256*MaxIndex)
{
RebuildSwpFile();
return;
}
//開(kāi)始恢復(fù)數(shù)據(jù)
char buf[256]={0};
fseek(m_SwpFile,0,SEEK_SET);
for(int i=0;i<MaxIndex;i++)
{
fread(buf,256,1,m_SwpFile);
if(UShortInt(buf)!=0 && ULongInt(buf+252)==GetFileDataCrc(buf,252))
{
RestoreSwpFileData(buf);
memset(buf,0,256);
fseek(m_SwpFile,-256,SEEK_CUR);
fwrite(buf,256,1,m_SwpFile);
flush(m_SwpFile);
break ;
}
}
return;
}
void CSwpFile::RestoreSwpFileData(char Databuf[256])
{
FILE *fpDBSFile;
fpDBSFile=fopen(DbsFileName,"rb+");
if(!fpDBSFile) return;
switch(UShortInt(Databuf))
{
case 0x0101:
if(UShortInt(Databuf+6)==192)
{
//寫數(shù)據(jù)庫(kù)系統(tǒng)區(qū)開(kāi)始64字節(jié)
fseek(fpDBSFile,ULongInt(Databuf+2),SEEK_SET);
fwrite(Databuf+8,192,1,fpDBSFile);
}
break;
case 0x0202://清空所有表數(shù)。
fseek(fpDBSFile,0,SEEK_END);
if(ftell(fpDBSFile)==LongInt(Databuf+2))
{
char buf[1024]={0};
long k=ULongInt(Databuf+2)/1024-1;
fseek(fpDBSFile,192,SEEK_SET);
fwrite(buf,1024-192,1,fpDBSFile);
for(;k>0;k--) fwrite(buf,1024,1,fpDBSFile);
}
break;
default:
break;
}
fclose(fpDBSFile);
return;
}
void CSwpFile::PreWriteDataToSwpFile(unsigned char data[], int Position)
{
char m_Buf[256]={0};
UShortInt(m_Buf+0)=0x0101;
ULongInt(m_Buf+2)=Position*192L;
UShortInt(m_Buf+6)=192;
memcpy(m_Buf+8,data,192);
ULongInt(m_Buf+252)=GetFileDataCrc(m_Buf,252);
m_UseIndex=(m_UseIndex+1)%MaxIndex;
fseek(m_SwpFile,m_UseIndex*256L,SEEK_SET);
fwrite(m_Buf,256,1,m_SwpFile);
flush(m_SwpFile);
}
void CSwpFile::PreEmptyAllMeter(long FileLen)
{
char m_Buf[256]={0};
UShortInt(m_Buf+0)=0x0202;
ULongInt(m_Buf+2)=FileLen;
ULongInt(m_Buf+252)=GetFileDataCrc(m_Buf,252);
m_UseIndex=(m_UseIndex+1)%MaxIndex;
fseek(m_SwpFile,m_UseIndex*256L,SEEK_SET);
fwrite(m_Buf,256,1,m_SwpFile);
flush(m_SwpFile);
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -