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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? savefile.cpp

?? 反匯編工具borg2.27源碼
?? 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);
	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;
}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲美州欧州综合国| 亚洲国产成人va在线观看天堂| 91精品国产欧美一区二区成人| 色婷婷狠狠综合| 91在线视频在线| 99re66热这里只有精品3直播| 成人看片黄a免费看在线| 紧缚捆绑精品一区二区| 国产一区二区主播在线| 韩国成人精品a∨在线观看| 另类小说综合欧美亚洲| 激情欧美一区二区| 精品一区二区三区在线视频| 韩国视频一区二区| 国产精品99久久久久久久女警| 国产麻豆视频一区| 国产黄色精品视频| 成人高清在线视频| 成人免费高清视频| 99久久综合狠狠综合久久| 97久久精品人人澡人人爽| 91国产丝袜在线播放| 欧洲av在线精品| 在线播放日韩导航| 日韩精品一区国产麻豆| 久久久国产综合精品女国产盗摄| 国产精品亲子乱子伦xxxx裸| 成人免费在线播放视频| 亚洲一区二区三区在线播放| 午夜亚洲国产au精品一区二区| 日韩中文字幕麻豆| 激情综合色播激情啊| 国产成人av影院| 一本大道av伊人久久综合| 欧美日韩一区在线| 久久综合久久综合九色| 中文字幕一区三区| 午夜精品久久一牛影视| 免费人成在线不卡| 不卡的av在线播放| 在线不卡a资源高清| 国产亚洲精品aa| 亚洲自拍偷拍图区| 国产一区二区三区最好精华液| 99国产精品国产精品久久| 91精品国产综合久久香蕉的特点 | 麻豆成人在线观看| 国产999精品久久久久久绿帽| 色偷偷久久一区二区三区| 欧美一区二区三区免费在线看| 亚洲h精品动漫在线观看| 麻豆精品一区二区综合av| gogogo免费视频观看亚洲一| 欧美军同video69gay| 中文字幕乱码亚洲精品一区| 午夜视频在线观看一区二区| 国产盗摄精品一区二区三区在线 | 欧美日韩视频第一区| 久久综合九色综合欧美亚洲| 亚洲精品久久7777| 国产电影精品久久禁18| 欧美日韩国产大片| 中文字幕制服丝袜一区二区三区| 奇米色一区二区三区四区| 9色porny自拍视频一区二区| 日韩欧美卡一卡二| 亚洲图片自拍偷拍| 成人免费三级在线| 精品国产区一区| 亚洲高清视频中文字幕| 国产精品一区二区91| 在线观看91精品国产麻豆| 亚洲欧美aⅴ...| 国产成人综合在线观看| 欧美一二区视频| 亚洲一区二区三区精品在线| 成a人片国产精品| 精品国产精品网麻豆系列| 亚洲综合激情小说| 99re这里都是精品| 中文字幕精品一区| 国产精品一二三四区| 欧美美女黄视频| 亚洲一区二区三区视频在线播放| www.性欧美| 日本一区二区不卡视频| 精品中文字幕一区二区| 91麻豆精品国产91久久久资源速度 | 国产在线一区二区综合免费视频| 欧美视频三区在线播放| 最好看的中文字幕久久| 国产 欧美在线| 久久综合九色综合欧美98| 久久激五月天综合精品| 在线观看91av| 日日噜噜夜夜狠狠视频欧美人| 色菇凉天天综合网| 亚洲色图制服诱惑| 99国产精品久久久久| 国产精品亲子伦对白| 成人免费看黄yyy456| 国产精品理伦片| a级精品国产片在线观看| 国产精品三级电影| 成人av网站免费| 日韩理论片一区二区| 色综合久久久久综合体桃花网| 亚洲图片欧美激情| 色婷婷精品久久二区二区蜜臀av | 色综合久久久久综合体| 亚洲免费资源在线播放| 在线观看亚洲精品| 亚洲国产中文字幕在线视频综合| 欧美日韩高清一区二区| 天天av天天翘天天综合网色鬼国产 | 色婷婷综合五月| 亚洲一区国产视频| 欧美绝品在线观看成人午夜影视| 天天色综合天天| 精品欧美一区二区久久| 国产尤物一区二区| 国产女人18毛片水真多成人如厕| 成人av免费在线播放| 亚洲欧美另类小说| 欧美美女直播网站| 狠狠色狠狠色合久久伊人| 中文字幕巨乱亚洲| 在线亚洲精品福利网址导航| 亚洲成人精品一区二区| 欧美一二三四在线| 粉嫩13p一区二区三区| 亚洲丝袜美腿综合| 欧美日韩国产高清一区二区三区| 看片的网站亚洲| 日本一区二区免费在线| 色婷婷久久一区二区三区麻豆| 亚洲午夜影视影院在线观看| 欧美二区三区的天堂| 国产精品白丝jk白祙喷水网站| 亚洲视频在线一区二区| 欧美精品粉嫩高潮一区二区| 国内一区二区视频| 亚洲精品国产成人久久av盗摄| 欧美视频一区二区三区在线观看| 麻豆专区一区二区三区四区五区| 国产视频一区二区在线| 色88888久久久久久影院野外| 香蕉影视欧美成人| 欧美国产综合色视频| 欧美日韩国产乱码电影| 国产在线日韩欧美| 亚洲最大成人网4388xx| 日韩精品一区二| 日本韩国一区二区三区视频| 蜜臀av性久久久久蜜臀aⅴ四虎 | 日韩电影在线观看电影| 中文字幕av不卡| 欧美剧情片在线观看| 成人av电影在线网| 日本vs亚洲vs韩国一区三区二区| 国产日韩精品一区二区三区在线| 欧美色倩网站大全免费| 国产福利一区二区三区| 日韩精品色哟哟| 亚洲三级免费电影| 久久综合久久久久88| 欧美日韩亚洲综合在线| 成人在线视频一区二区| 久久精品国产亚洲a| 亚洲欧美日本韩国| 久久久久久久久97黄色工厂| 7777精品伊人久久久大香线蕉的 | 亚洲激情第一区| 久久九九久久九九| 91精品国产综合久久久久久漫画 | 成人免费观看男女羞羞视频| 日本美女视频一区二区| 亚洲精选免费视频| 久久久久久久久久电影| 欧美一区二区三区系列电影| 色猫猫国产区一区二在线视频| 国内成人精品2018免费看| 亚洲精品视频免费观看| 亚洲国产精品激情在线观看| 日韩精品专区在线| 91麻豆精品国产91久久久使用方法| 91九色最新地址| av成人动漫在线观看| 国产91精品一区二区麻豆亚洲| 蜜桃av噜噜一区| 日韩成人精品在线| 亚洲国产精品久久一线不卡| 亚洲男同性视频| 成人欧美一区二区三区白人| 亚洲国产精品国自产拍av| 精品成人a区在线观看| 日韩一区二区在线播放| 5月丁香婷婷综合| 欧美日韩成人在线一区| 精品视频1区2区3区|