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

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

?? file.cpp

?? 游戲c++開發簡例
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include <direct.h>
#include <errno.h>
#include <fcntl.h>
#include <io.h>
#include <malloc.h>
#include <stdio.h>
#include <string.h>
#include "gl.h"

#define UPROUND( a, b )	((a)+((b)-1))/(b)*(b)

#define DIRITEM_UNIT	64

#define NONE    0
#define ARCHIVE 1
#define DIR_DISK 2
#define DIR_RAM 4

PackFile cfile;

Directory*  PackSubdir( DWORD& fp, char *dpath, char *spath );

/////////////////////////////////////////////////////////////////////
Directory::~Directory()
{
	delete[] items;
}

// read directory from disk
int Directory::ReadDisk( FILE *fp )
{
	if( items )
		delete[] items;

	fread( &cur, sizeof( long ), 1, fp );
	fread( &num, sizeof( long ), 1, fp );
	fread( &items, sizeof( DirItem* ), 1, fp );
	
	items = new DirItem[num];
	if( items == NULL )
		return -1;
	for( int i=0; i<num; i++ ){
		fread( &items[i].type, sizeof( BYTE ), 1, fp );
		fread( items[i].filename, 13, 1, fp );
//		puts( items[i].filename );
		fread( &items[i].address, sizeof( DWORD ), 1, fp );
		fread( &items[i].length, sizeof( DWORD ), 1, fp );
	}
	if( errno ){
		delete[] items;
		return -1;
	}
	return 0;
}

// whether the dname is in this directory
int Directory::SearchDir( char dname[13], int type )
{
	if( strcmp( items[cur].filename, dname ) == 0
		&& ( items[cur].type & type ))
		return cur;
		
	for( int i=2; i<num; i++ ){
		if( strcmp( items[i].filename, dname ) == 0 
			&& ( items[i].type & type ))
			return i;
	}
	return 0;
}
/////////////////////////////////////////////////////////////////////
File::File(){
	fp = NULL;
	count = 0;
};

File::~File()
{
	if( fp != NULL )
		fclose( fp );
}

int File::Close( void ){
	if( fp ) return fclose( fp );
	return -1;
}
	
char* File::Gets( char* buf, int size )
{
	fpos_t pos1, pos2;
	char *temp;
	fgetpos( fp, &pos1 );
	temp = fgets( buf, size, fp );
	fgetpos( fp, &pos2 );
	count += (DWORD)(pos2 - pos1);
	return temp;
}

int File::Getw( void )
{
	int w;
	if( length - count - 2 < 0 )
		return EOF;
	count += fread( &w, 1, 2, fp );
	return w;
}

int File::Getdw( void )
{
	int dw;
	if( length - count - 4 < 0 )
		return EOF;
	count += fread( &dw, 1, 4, fp );
	return dw;
}

int File::Read( void* buffer, DWORD size )
{
	int rs;
	if( length - count - size < 0 )
		size = length - count;
	rs = fread( buffer, 1, size, fp );
	count += rs;
	return rs;
}

int File::Seek( DWORD d, int mode )
{
	switch( mode ){
	case SEEK_SET:
	break;
	
	case SEEK_CUR:
	default:
		d += count;
	break;
	
	case SEEK_END:
		d += length - 1;
	break;
	}

	if( d > length ){
		d = length - count - 1;
		count = length - 1;
	}
	else if( d < 0 ){
		d = 0 - count;
		count = 0;
	}
	else{
		d = d - count;
		count += d;
	}

	return fseek( fp, d, SEEK_CUR );

	fpos_t t;
	fgetpos( fp, &t );
	printf( "fpos: %u\n", t );
	return 0;
}

/////////////////////////////////////////////////////////////////////
// helper functions
int FileCount( char *path )
{
	_finddata_t fd;
	long hFile;
	int i = 0;

	if(( hFile = _findfirst( "*.*", &fd )) == -1 )
		return 0;
	i++;
	while( (_findnext( hFile, &fd )) == 0 ){
		if( fd.name[0] != '.' )
			i++;
	}

	return i;
}

int GetDirName( char* dname, char* fullname, int level )
{
	if( level <= 0 ){
		dname[0] = 0;
		return false;
	}
	char *temp = fullname;
	
	while( *fullname ){
		if( *fullname == '\\' ){
			level --;
			if( level == 0 ){
				while( *temp != '\\' )
					*dname++ = *temp ++;
				*dname = 0;
				return true;
			}
			temp = fullname + 1;
		}
		fullname ++;
	}
	
	return false;
}

int GetFileName( char* dname, char *fullname )
{
	char *temp = fullname;
	
	while( *fullname ){
		if( *fullname == '\\' )
			temp = fullname + 1;
		fullname ++;
	}
	while( *temp )
		*dname++ = *temp++;
	*dname = 0;
		
	return true;
}

int GetPathName( char* dname, char *fullname )
{
	char *temp = NULL, *pname = fullname;
	
	while( *pname ){
		if( *pname == '\\' )
			temp = pname;
		pname ++;
	}
	pname = fullname;
	while( pname <= temp )
		*dname++ = *pname++;
	*dname = 0;
		
	return true;
}

/////////////////////////////////////////////////////////////////////
//將一個目錄下的所有文件(包括子目錄)打包成一個文件.
/////////////////////////////////////////////////////////////////////
// filename: destination package filename
// mode: CFILE_APPEND, CFILE_DELETE, CFILE_CREATE

static int WriteDirToDisk( FILE *fp, Directory *dir )
{
	FILE *file;
	int j;
	Directory *dirtemp;
	
	fwrite( &(dir->cur), sizeof( long ), 1, fp );
	fwrite( &(dir->num), sizeof( long ), 1, fp );
	fwrite( &(dir->items), sizeof( DirItem* ), 1, fp );
	
// write items[0] to disk
	fwrite( &(dir->items[0].type), sizeof( BYTE ), 1, fp );
	fwrite( dir->items[0].filename, 13, 1, fp );
	fwrite( &(dir->items[0].address), sizeof( DWORD ), 1, fp );
	fwrite( &(dir->items[0].length), sizeof( DWORD ), 1, fp );
// write items[1] to disk
	fwrite( &(dir->items[1].type), sizeof( BYTE ), 1, fp );
	fwrite( dir->items[1].filename, 13, 1, fp );
	dirtemp = ( Directory* )(dir->items[1].address);
	if( dirtemp )
		fwrite( &(dirtemp->items[0].address), sizeof( DWORD ), 1, fp );
	else
		fwrite( &(dir->items[1].address), sizeof( DWORD ), 1, fp );
	fwrite( &(dir->items[1].length), sizeof( DWORD ), 1, fp );

	for( int i=2; i<dir->num; i++ ){
		if( dir->items[i].type == DIR_DISK ){
			fwrite( &(dir->items[i].type), sizeof( BYTE ), 1, fp );
			fwrite( dir->items[i].filename, 13, 1, fp );
			dirtemp = ( Directory* )dir->items[i].address;
			fwrite( &(dirtemp->items[0].address), sizeof( DWORD ), 1, fp );
			fwrite( &(dir->items[i].length), sizeof( DWORD ), 1, fp );
		}
		else{
			fwrite( &(dir->items[i].type), sizeof( BYTE ), 1, fp );
			fwrite( dir->items[i].filename, 13, 1, fp );
			fwrite( &(dir->items[i].address), sizeof( DWORD ), 1, fp );
			fwrite( &(dir->items[i].length), sizeof( DWORD ), 1, fp );
		}
	}

	char *buf = new char[4096];
	if( buf == NULL )
		return -1;
	for( i=2; i<dir->num; i++ ){
		if( dir->items[i].type == ARCHIVE ){
			puts( dir->items[i].filename );
			fflush( fp );
			if( ( file = fopen( dir->items[i].filename, "rb" )) == NULL )
				return -1;
			fseek( fp, dir->items[i].address, SEEK_SET );
			while( (j = fread( buf, 1, 4096, file )) != 0 )
				fwrite( buf, 1, j, fp );
			fclose( file );
		}
	}
	if( errno )
		return -1;
		
	return 0;
}

int CreatePackage( char *filename, char *spath )
{
	FILE *fp;
	Directory *dirp, *dirtemp, *dirsave;
	char *curPath;
	DWORD fpos = 0;
	
	if( (fp = fopen( filename, "wb+" )) == NULL )
		return -1;
		
	if( (curPath = getcwd( NULL, 0 )) == NULL )
		return -1;

	if( chdir( spath ) != 0 )
		return -1;
	
	dirp = PackSubdir( fpos, "\\", "." );
	dirsave = dirp;
	dirp->items[0].address = dirp->items[1].address = 0;
	dirp->cur = 2;
	
//create dirctory tree first
	while( 1 ){
		while( dirp->cur < dirp->num ){
			if( dirp->items[dirp->cur].type == DIR_DISK ){
			
				chdir( dirp->items[dirp->cur].filename );
				dirtemp = PackSubdir( fpos, dirp->items[dirp->cur].filename, "." );
				if( dirtemp == NULL )
					return -1;
				dirtemp->items[1].address = ( DWORD )dirp;
				dirtemp->items[1].length = dirp->items[0].length;
				dirp->items[dirp->cur].address = ( DWORD )dirtemp;
				dirp->items[dirp->cur].length = dirtemp->items[0].length;
				dirp = dirtemp;
				dirp->cur = 2;
			}
			else
				dirp->cur ++;
		}
		
		dirtemp = dirp;
		dirp = ( Directory* )dirp->items[1].address;
		if( dirp == NULL )
			break;
		dirp->cur ++;
		if( dirp->items[1].address == 0 && dirp->cur >= dirp->num )
			break;
		chdir( ".." );
	}
	
// then, we write directory tree and its files to disk
	puts( "write to disk." );
	dirp = dirsave;
	dirp->cur = 2;
	chdir( spath );
	WriteDirToDisk( fp, dirp );
	while( 1 ){
		while( dirp->cur < dirp->num ){
			if( dirp->items[dirp->cur].type == DIR_DISK ){
			
				chdir( dirp->items[dirp->cur].filename );
				dirtemp = ( Directory* )dirp->items[dirp->cur].address;
				dirp = dirtemp;
				dirp->cur = 2;
				
				WriteDirToDisk( fp, dirtemp );
			}
			else
				dirp->cur ++;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久二区二区| 成人精品视频一区| 91麻豆精品国产91久久久资源速度| 亚洲人成网站色在线观看| 成人激情电影免费在线观看| 国产精品情趣视频| 99国产精品国产精品久久| 亚洲自拍与偷拍| 欧美一区二区性放荡片| 国模少妇一区二区三区| 国产精品视频九色porn| 国产日韩成人精品| 成人视屏免费看| 亚洲在线中文字幕| 欧美一级在线视频| 成人做爰69片免费看网站| 一区二区高清免费观看影视大全 | 久久久不卡网国产精品一区| 成人免费视频一区| 亚洲国产精品天堂| 久久免费电影网| 91视频免费观看| 免费高清在线一区| 中文字幕视频一区| 欧美老年两性高潮| 成人午夜伦理影院| 日本在线播放一区二区三区| 国产欧美精品区一区二区三区| 色爱区综合激月婷婷| 美女在线观看视频一区二区| 国产精品全国免费观看高清 | 在线观看视频91| 美女视频黄a大片欧美| 国产精品网友自拍| 日韩小视频在线观看专区| 成人免费看的视频| 免费亚洲电影在线| 亚洲综合在线观看视频| 国产日韩影视精品| 欧美三级电影在线观看| 成人午夜电影小说| 久久成人免费网| 午夜国产不卡在线观看视频| 国产精品久久久久久久久晋中| 欧美一区二区视频免费观看| 一本一道久久a久久精品 | 日韩一区二区三区在线| 色天使色偷偷av一区二区 | 91在线播放网址| 国产呦萝稀缺另类资源| 视频一区视频二区中文| 一区二区三区欧美| 中文字幕中文乱码欧美一区二区 | 亚洲乱码国产乱码精品精小说| 精品国产伦一区二区三区免费| 欧美日本韩国一区| 色婷婷亚洲综合| 99在线精品免费| 成人国产电影网| 国产精品自在欧美一区| 老鸭窝一区二区久久精品| 婷婷亚洲久悠悠色悠在线播放| 一区二区三区国产精品| 自拍偷拍国产精品| **性色生活片久久毛片| 国产精品短视频| 国产精品三级在线观看| 国产午夜精品一区二区三区视频| 日韩精品资源二区在线| 日韩一区二区在线观看视频| 欧美日韩aaaaaa| 欧美精品自拍偷拍动漫精品| 欧美天天综合网| 欧美日韩一区不卡| 欧美日韩高清一区| 91麻豆精品91久久久久同性| 欧美精品少妇一区二区三区| 精品视频一区三区九区| 欧美日韩日本视频| 欧美日韩亚洲另类| 欧美伦理电影网| 日韩三级中文字幕| 久久影院午夜论| 国产亚洲成年网址在线观看| 国产精品视频免费看| 亚洲欧美激情小说另类| 一区二区三区在线播| 亚洲成人av一区二区三区| 日韩国产成人精品| 国产在线视频一区二区| 床上的激情91.| 91亚洲国产成人精品一区二三| 色婷婷久久综合| 777久久久精品| 久久日韩精品一区二区五区| 亚洲国产精品精华液2区45| 中文字幕日韩一区| 亚洲一区二区三区免费视频| 五月婷婷综合网| 国产在线精品国自产拍免费| 亚洲成人激情社区| 天堂va蜜桃一区二区三区| 久久福利视频一区二区| 国产.精品.日韩.另类.中文.在线.播放| 成人久久视频在线观看| 色香蕉成人二区免费| 欧美电影在哪看比较好| www久久久久| 亚洲精品国产高清久久伦理二区| 亚洲r级在线视频| 国产在线播精品第三| 成人黄色一级视频| 精品1区2区3区| 国产人成亚洲第一网站在线播放 | 91免费观看视频| 91 com成人网| 久久―日本道色综合久久| 亚洲激情图片一区| 韩国成人在线视频| 在线一区二区视频| 2017欧美狠狠色| 亚洲一区免费观看| 国产资源在线一区| 在线观看免费一区| 国产亚洲一本大道中文在线| 亚洲一本大道在线| 成人性视频网站| 日韩一区二区三区在线| 伊人开心综合网| 国产精品一品二品| 制服丝袜亚洲色图| 最好看的中文字幕久久| 美国十次综合导航| 欧美三级在线视频| 中文字幕永久在线不卡| 久久国产精品99精品国产| 欧美探花视频资源| 国产精品国产三级国产aⅴ中文| 免费观看在线综合色| 欧洲精品在线观看| 中文字幕免费不卡| 国内不卡的二区三区中文字幕| 欧美情侣在线播放| 亚洲免费色视频| 国产成人综合精品三级| 欧美一区二区女人| 亚洲图片欧美一区| 一本到三区不卡视频| 国产精品午夜久久| 国产高清精品网站| 久久久久久99久久久精品网站| 蜜臀av亚洲一区中文字幕| 欧美日韩成人一区| 亚洲午夜一区二区三区| 在线国产亚洲欧美| 亚洲视频精选在线| 99国产精品99久久久久久| 国产精品色婷婷久久58| 白白色亚洲国产精品| 国产精品久久777777| 波多野结衣亚洲一区| 国产亚洲欧美色| 风流少妇一区二区| 欧美极品xxx| 国产不卡视频在线观看| 久久精子c满五个校花| 国产一区二区成人久久免费影院| 欧美xxxxxxxxx| 国产综合色在线| 久久亚洲精品国产精品紫薇| 韩国av一区二区三区在线观看| 久久综合色一综合色88| 国产在线不卡一区| 中文字幕欧美三区| 91网站视频在线观看| 亚洲一区在线视频观看| 5566中文字幕一区二区电影| 日韩国产在线一| 精品电影一区二区| 国产二区国产一区在线观看| 国产精品乱人伦| 日本乱码高清不卡字幕| 日韩高清在线观看| 久久人人爽人人爽| 99在线热播精品免费| 一个色在线综合| 欧美一区二区三区视频在线观看| 久久电影网站中文字幕| 国产精品丝袜久久久久久app| 91麻豆成人久久精品二区三区| 亚洲一区二区精品3399| 欧美一区二视频| 成人网在线免费视频| 亚洲国产一区二区三区| 欧美视频在线观看一区| 日韩不卡一二三区| 国产视频一区二区在线| 色综合久久久网| 日本美女一区二区三区| 国产丝袜美腿一区二区三区|