亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? savefile.cpp

?? 十分經典的開源反編譯工具
?? CPP
字號:
/************************************************************************
*                   savefile.cpp                                        *
* File I/O for saving to and reading from database files only.          *
* Added in version 2.11. Compression is implemented based on rle, but   *
* it is nibble based (2*nibbles=byte) rather than byte based. I decided *
* on this after closer examination of the database files. It results in *
* around a 30% reduction to the database file size.                     *
************************************************************************/

#include <windows.h>

#include "savefile.h"
#include "dasm.h"
#include "debug.h"

/************************************************************************
* Constructor - sets up some variables used in the compression and save *
************************************************************************/
savefile::savefile()
{	sfile=INVALID_HANDLE_VALUE;
	rbufflen=0;
   rbuffptr=0;
   rbhigh=true;
   rlecount=0;
   rlemode=false;
   rlestart=true;
}

/************************************************************************
* Destructor - closes the database file if it is still open             *
************************************************************************/
savefile::~savefile()
{  sclose();
}

/************************************************************************
* sopen                                                                 *
* - opens the database file and returns true on success                 *
************************************************************************/
bool savefile::sopen(LPCTSTR lpFileName,DWORD dwDesiredAccess,DWORD dwShareMode,
			DWORD dwCreationDistribution,DWORD dwFlagsAndAttributes)
{	sfile=CreateFile(lpFileName,dwDesiredAccess,dwShareMode,NULL,
				dwCreationDistribution,dwFlagsAndAttributes,NULL);
   if(sfile==INVALID_HANDLE_VALUE)
   { MessageBox(mainwindow,"File open failed ?",lpFileName,MB_OK|MB_ICONEXCLAMATION);
	  return false;
   }
   if(GetFileType(sfile)!=FILE_TYPE_DISK)
   { MessageBox(mainwindow,"File open failed ?",lpFileName,MB_OK|MB_ICONEXCLAMATION);
	  sclose();
	  return false;
   }
	return true;
}

/************************************************************************
* sclose                                                                *
* - closes the database file if still open                              *
************************************************************************/
void savefile::sclose(void)
{ if(sfile!=INVALID_HANDLE_VALUE)
    CloseHandle(sfile);
}

/************************************************************************
* getnibble                                                             *
* - This function sets n to the next nibble from the file, it uses      *
*   buffering and reads from the file as required                       *
************************************************************************/
bool savefile::getnibble(byte *n)
{  BOOL rval;
	if(rbuffptr<rbufflen)
	{	if(rbhigh)
   	{	(*n)=(byte)(rbuff[rbuffptr]>>4);
      	rbhigh=false;
      	return true;
      }
      (*n)=(byte)(rbuff[rbuffptr]&0x0f);
      rbhigh=true;
      rbuffptr++;
      return true;
   }
   else
   {  rval=ReadFile(sfile,rbuff,RBUFF_MAXLEN,&rbufflen,NULL);
   	  rbhigh=true;
      rbuffptr=0;
      if((rval)&&(rbufflen))
        return getnibble(n);
      return false;
   }
}

/************************************************************************
* getrlenibble                                                          *
* - this function sets n to the next nibble from the file, taking into  *
*   account rle encoding. So this returns the next uncompressed nibble  *
* - rle encoding is:                                                    *
*   rle_code count nibble                                               *
*   count is number-1 (so it can encode from 2 to 16 nibbles)           *
*   or rle_code 0 signifies a nibble equal to rle_code                  *
* - note that rle_code is a constant specified in the savefile.h which  *
*   indicates an rle encoding, and is currently 0x0f. Do not set this   *
*   constant to 0 as this would be inefficient....                      *
************************************************************************/
bool savefile::getrlenibble(byte *n)
{	if(rlemode)
	{	rlecount--;
   	if(!rlecount)
         rlemode=false;
      (*n)=(byte)(rlebyte);
      return true;
   }
   if(!getnibble(&rlebyte))
      return false;
   if(rlebyte==rle_code)
   {	if(!getnibble(&rlebyte))
         return false;
   	if(rlebyte)
      {	rlecount=rlebyte;
      	rlemode=true;
         if(!getnibble(&rlebyte))
            return false;
   	   (*n)=rlebyte;
         return true;
      }
   	(*n)=rle_code;
	   return true;
   }
   (*n)=rlebyte;
   return true;
}

/************************************************************************
* putnibble                                                             *
* - The opposite function to getnibble, it writes one nibble to the     *
*   file using buffering                                                *
************************************************************************/
bool savefile::putnibble(byte n)
{	BOOL rval;
	dword num;
	if(rbuffptr<RBUFF_MAXLEN)
   {	if(rbhigh)
   	{	rbuff[rbuffptr]=(byte)((n&0x0f)<<4);
      	rbhigh=false;
         rbufflen++;
         return true;
      }
      rbuff[rbuffptr]+=(byte)(n&0x0f);
      rbhigh=true;
      rbuffptr++;
      return true;
   }
   else
   {  rval=WriteFile(sfile,rbuff,RBUFF_MAXLEN,&num,NULL);
   	rbhigh=true;
      rbuffptr=0;
      rbufflen=0;
      if(rval)
         return putnibble(n);
      return false;
   }
}

/************************************************************************
* flushnibble                                                           *
* - A necessity of buffered writing, this flushes the remainder of the  *
*   buffer, writing it out to file                                      *
************************************************************************/
bool savefile::flushnibble(void)
{	dword num;
 	if(rbufflen)
		return WriteFile(sfile,rbuff,rbufflen,&num,NULL)!=0;
	return true;
}

/************************************************************************
* putrlenibble                                                          *
* - This is the opposite function to getrlenibble. It writes nibbles to *
*   file whilst performing the compression. The rle encoding happens    *
*   here and when nibbles are ready to be written the putnibble         *
*   function is called                                                  *
************************************************************************/
bool savefile::putrlenibble(byte n)
{  if(rlestart)
	{	rlestart=false;
   	rlebyte=n;
      return true;
   }
	if(rlemode)
	{	if((rlebyte==n)&&(rlecount<0x0f))
   	{	rlecount++;
      	return true;
      }
      if(!putnibble(rle_code))
         return false;
      if(!putnibble(rlecount))
         return false;
      if(!putnibble(rlebyte))
         return false;
      rlemode=false;
      rlebyte=n;
      return true;
   }
   if(rlebyte==n)
   {	rlemode=true;
   	rlecount=1;
      return true;
   }
   if(!putnibble(rlebyte))
      return false;
   if(rlebyte==rle_code)
   	if(!putnibble(0))
         return false;
   rlebyte=n;
   return true;
}

/************************************************************************
* flushrlenibble                                                        *
* - This flushes any partial rle at the end of a file and forces it to  *
*   the putnibble function                                              *
************************************************************************/
bool savefile::flushrlenibble(void)
{  if(rlemode)
   {  if(!putnibble(rle_code))
         return false;
      if(!putnibble(rlecount))
         return false;
      if(!putnibble(rlebyte))
         return false;
   }
	else
   {	if(!putnibble(rlebyte))
         return false;
		if(rlebyte==rle_code)
   		if(!putnibble(0))
            return false;
   }
   return true;
}

/************************************************************************
* flushfilewrite                                                        *
* - The function to flush writing which should be called at the end of  *
*   the save. It flushes any partial encoding and then flushes the      *
*   buffered write                                                      *
************************************************************************/
bool savefile::flushfilewrite(void)
{	if(!flushrlenibble())
      return false;
	return flushnibble();
}

/************************************************************************
* sread                                                                 *
* - This is the external call for reading from a file. Its a similar    *
*   format to ReadFile, and uses the rle compression routines           *
************************************************************************/
bool savefile::sread(LPVOID lpBuffer,DWORD nNumberOfBytesToRead,LPDWORD lpNumberOfBytesRead)
{  byte n;
	dword num;
   (*lpNumberOfBytesRead)=0;
   for(num=0;num<nNumberOfBytesToRead;num++)
   {  if(!getrlenibble(&n))
         return false;
   	((byte *)lpBuffer)[num]=(byte)(n<<4);
      if(!getrlenibble(&n))
         return false;
      ((byte *)lpBuffer)[num]+=n;
      (*lpNumberOfBytesRead)++;
   }
   return true;
}

/************************************************************************
* swrite                                                                *
* - This is the external call for writing to a file. Its a similar      *
*   format to WriteFile, and uses the rle compression routines          *
************************************************************************/
bool savefile::swrite(LPCVOID lpBuffer,DWORD nNumberOfBytesToWrite)
{  dword num;
	for(num=0;num<nNumberOfBytesToWrite;num++)
   {	if(!putrlenibble((byte)(((byte *)lpBuffer)[num]>>4)))
         return false;
   	if(!putrlenibble((byte)(((byte *)lpBuffer)[num]&0x0f)))
         return false;
   }
   return true;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久蜜桃精品| 国产精品久久久久久户外露出| 日韩一区精品字幕| 亚洲综合免费观看高清完整版在线| 欧美国产综合一区二区| 久久久久9999亚洲精品| 国产欧美一区二区三区在线老狼| 久久这里只有精品6| 精品美女在线观看| 久久中文娱乐网| 欧美激情在线一区二区| 国产精品福利一区二区三区| 中文天堂在线一区| 亚洲男人天堂一区| 亚洲国产精品一区二区久久| 青娱乐精品视频在线| 久久国产夜色精品鲁鲁99| 国产乱一区二区| 99这里都是精品| 欧美日韩中文字幕一区| 欧美二区在线观看| 久久久久久久久99精品| 国产精品久久福利| 亚洲综合精品久久| 久久精品国产一区二区三 | 不卡高清视频专区| 色成人在线视频| 337p亚洲精品色噜噜噜| 久久色在线观看| 亚洲黄色小视频| 九九精品视频在线看| 99精品欧美一区| 日韩欧美国产综合| 中文字幕综合网| 另类小说一区二区三区| 91免费视频大全| 日韩一区二区在线免费观看| 亚洲人成网站在线| 久久爱另类一区二区小说| 91在线观看美女| 欧美sm极限捆绑bd| 一区二区三区四区国产精品| 欧美bbbbb| 91黄视频在线观看| 国产色产综合产在线视频| 午夜国产精品影院在线观看| 99re这里都是精品| 精品国产一区二区在线观看| 亚洲伊人色欲综合网| 国产成人精品综合在线观看 | 欧美tickling挠脚心丨vk| 亚洲欧洲一区二区三区| 麻豆成人av在线| 欧美视频你懂的| 亚洲免费av网站| 国产一区二区在线看| 在线成人小视频| 亚洲综合成人在线| 99视频一区二区三区| 国产亚洲综合在线| 久久精品国产一区二区三| 欧美日韩精品二区第二页| 亚洲啪啪综合av一区二区三区| 国产69精品久久99不卡| 日韩免费高清电影| 免费xxxx性欧美18vr| 欧美肥胖老妇做爰| 三级亚洲高清视频| 欧美精品日韩一本| 午夜视黄欧洲亚洲| 欧美乱妇15p| 日本亚洲欧美天堂免费| 欧美区一区二区三区| 亚洲成a人片综合在线| 欧美日韩精品高清| 亚洲福利视频导航| 91精品国产入口| 蜜臀av性久久久久蜜臀aⅴ流畅| 91精品在线免费| 日韩国产欧美在线播放| 日韩你懂的在线播放| 免费成人美女在线观看.| 日韩欧美视频一区| 国产精品99久久久| 国产欧美精品一区aⅴ影院| 成人av电影免费观看| 亚洲色图视频网| 欧美日本免费一区二区三区| 亚洲韩国精品一区| 在线不卡一区二区| 国产在线精品视频| 欧美国产欧美亚州国产日韩mv天天看完整| 国产精品一区在线观看你懂的| 国产精品丝袜黑色高跟| 一本到三区不卡视频| 五月综合激情日本mⅴ| 日韩欧美国产成人一区二区| 成人一区在线观看| 亚洲一区视频在线观看视频| 日韩无一区二区| 国产成人av福利| 亚洲五月六月丁香激情| 日韩欧美123| 色综合亚洲欧洲| 日本亚洲三级在线| 中文字幕在线视频一区| 欧美日韩视频在线观看一区二区三区 | 黄色小说综合网站| 国产精品大尺度| 91精品久久久久久蜜臀| 国产一区不卡精品| 亚洲大片精品永久免费| 精品国产免费人成在线观看| 色综合av在线| 国产尤物一区二区在线| 亚洲人成精品久久久久| 精品国产免费久久| 欧美色视频在线观看| 国产精一区二区三区| 亚欧色一区w666天堂| 国产精品国产三级国产三级人妇| 91精品在线麻豆| 欧美性高清videossexo| 成人黄色电影在线| 激情六月婷婷综合| 视频一区二区中文字幕| 亚洲天堂福利av| 国产日韩一级二级三级| 91精品福利在线一区二区三区| 色久综合一二码| eeuss国产一区二区三区| 国产一区视频网站| 免费三级欧美电影| 亚洲午夜久久久| 亚洲精品免费播放| 中文字幕欧美一| 国产精品久久久久久久久动漫 | 91久久精品午夜一区二区| 国产乱妇无码大片在线观看| 免费成人结看片| 午夜精品爽啪视频| 一区二区三区在线影院| 亚洲国产精品二十页| 国产校园另类小说区| 精品国产露脸精彩对白| 欧美一区二区网站| 欧美一区二区三区精品| 欧美电影一区二区| 欧美日本在线一区| 欧美乱熟臀69xxxxxx| 欧美丰满一区二区免费视频 | 精品福利在线导航| 日韩一级黄色大片| 日韩女优制服丝袜电影| 欧美mv日韩mv亚洲| 精品欧美一区二区在线观看| 欧美一区二区免费观在线| 欧美一区二区三区日韩| 日韩一级精品视频在线观看| 日韩一级成人av| 久久亚洲精华国产精华液 | 亚洲愉拍自拍另类高清精品| 一区二区欧美在线观看| 亚洲成人免费av| 久久66热re国产| 国产一级精品在线| 不卡的电影网站| 在线观看国产一区二区| 欧美一区二区观看视频| 精品乱人伦小说| 国产精品免费人成网站| 亚洲麻豆国产自偷在线| 视频一区欧美日韩| 国产一区二区三区不卡在线观看| 成人激情综合网站| 欧美性xxxxxx少妇| 欧美本精品男人aⅴ天堂| 国产喂奶挤奶一区二区三区| 亚洲日本电影在线| 日韩精品电影一区亚洲| 国产一区二区三区免费观看| 91丨九色丨尤物| 91精品欧美福利在线观看| 久久久精品国产免大香伊| 亚洲欧美国产毛片在线| 免费成人av资源网| 99久久精品国产精品久久| 91精品国产综合久久精品app| 337p日本欧洲亚洲大胆精品| 亚洲欧美日韩综合aⅴ视频| 日韩 欧美一区二区三区| 粉嫩av一区二区三区粉嫩| 欧美中文字幕一区| 国产亚洲成aⅴ人片在线观看| 亚洲一区二区三区在线看| 国产激情视频一区二区三区欧美 | 日韩精品中午字幕| 亚洲欧美日韩久久| 国产综合久久久久久久久久久久| 日本精品裸体写真集在线观看|