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

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

?? file.cpp

?? 游戲c++開發簡例
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
		}
		
		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( ".." );
	}
	
	fclose( fp );
	chdir( curPath );
	free( curPath );
	return 0;
}

// pack the files in the spath into package, exclude subdirectory
// it's used to create directory tree
Directory*  PackSubdir( DWORD& fpos, char *dpath, char *spath )
{
	printf( "pack subdir %s \n", spath );
	
//	DIR *dirp;
//	dirent *direntp;
	_finddata_t fd;
	long hFile;
	int ftemp;
	int i;
	Directory *dir;
	
	dir = new Directory;
	if( dir == NULL )
		return NULL;
		
	if( _chdir( spath ) == -1 ){
		goto error;
	}
	
	// num includes all files and subdirs and '..' '.' )
	dir->num = FileCount( spath ) + 2;
	printf( "total files:%d\n", dir->num );
	
	dir->items = new DirItem[ dir->num ];
	memset( (char*)dir->items, 0, sizeof( DirItem ) * dir->num );
	if( dir->items == NULL ){
		delete dir;
		return NULL;
	}
	 
	// items[0] is point to this directory
	strcpy( dir->items[0].filename, dpath );
	dir->items[0].address = fpos;
					// sizeof( DirItem ) = 22
	dir->items[0].length = sizeof(Directory) + 22*UPROUND( dir->num, DIRITEM_UNIT );
	dir->items[0].type = DIR_DISK;
	// items[1] is point to the parent directory
	strcpy( dir->items[1].filename, ".." );
	dir->items[1].type = DIR_DISK;

	fpos += dir->items[0].length;
	
	if(( hFile = _findfirst( "*.*", &fd )) == -1 )
		return NULL;
	for( i=2; i<dir->num; i++ ){
		if( fd.name[0] == '.' ){
			i--;
			continue;
		}
		
		if( !( fd.attrib & _A_SUBDIR )){ // file
			if( (ftemp = open( fd.name, O_RDONLY )) == -1 ){
#ifdef _DEBUG
				puts( fd.name );
#endif
				return NULL;
			}
			
			puts( fd.name );
			strcpy( dir->items[i].filename, fd.name );
			dir->items[i].address = fpos;
			dir->items[i].type = ARCHIVE;
			dir->items[i].length = filelength( ftemp );
			fpos += dir->items[i].length;
			
			close( ftemp );
		}
		else if( fd.attrib & _A_SUBDIR ){ // subdirectory
			puts( fd.name );
			dir->items[i].type = DIR_DISK;
			strcpy( dir->items[i].filename, fd.name );
		}
		_findnext( hFile, &fd );
	}
	
	puts( "pack subdir end." );
	return dir;

error:
	delete dir;
	return NULL;
}

Directory* ReadDirFromDisk( FILE *fp, long fpos, Directory* parent )
{
	if( fsetpos( fp, (fpos_t*)&fpos ) != 0 )
		return NULL;

	Directory *dir = new Directory;
	if( dir == NULL )
		return NULL;
	if( dir->ReadDisk( fp ) != 0 ){
		delete dir;
		return NULL;
	}
	dir->items[1].address = ( DWORD )parent;
	
	return dir;
}
/////////////////////////////////////////////////////////////////////

PackFile::PackFile()
{
	for( int i=0; i<MAX_CFILE_NUM; i++ ){
		file[i].fname[0] = 0;
		file[i].root = NULL;
//		file[i].fp = NULL;
//		count[i] = 0;
	}
}

PackFile::~PackFile()
{
	for( int i=0; i<MAX_CFILE_NUM; i++ ){
		if( file[i].root )
			Close( i );
	}
}

// example:convert "aaa.bmp" to "aaa     bmp"
// not been used !!
void PackFile::FixFname( char *newfname, char *fname )
{
	int i = 0;
	memset( newfname, ' ', 11 );
	newfname[11] = 0;
	
	while( *fname ){
		if( *fname != '.' ){
			*newfname++ = *fname;
			i++;
		}
		else{
			newfname += 7 - i;
		}
		fname ++;
	}
}
	
int PackFile::Close( char* fname )
{
	for( int i=0; i<MAX_CFILE_NUM; i++ ){
		if( strcmp( file[i].fname, fname ) == 0 )
			return Close( i );
	}
	return -1;
}

// free the memory occupied by the package file[id]
int PackFile::Close( int id )
{
	if( file[id].root == NULL )
		return 0;
		
	Directory *dirp = file[id].root, *dirtemp;
	
	dirp->cur = 2;
	while( 1 ){
		while( dirp->cur < dirp->num ){
			if( dirp->items[dirp->cur].type == DIR_RAM ){
				dirtemp = ( Directory* )dirp->items[dirp->cur].address;
				if( dirtemp == NULL )
					return -1;
				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;
		delete dirtemp;
	}
	delete file[id].root;
	file[id].root = NULL;
	file[id].fname[0] = 0;
	
	return 0;
}

// open package file
int PackFile::OpenCfile( int id, char *filename )
{
	FILE *fp;
	
	if( (fp = fopen( filename, "rb" )) == NULL )
		return -1;
	if(( file[id].root = ReadDirFromDisk( fp, 0, NULL )) == NULL ){
		fclose( fp );
		return -1;
	}
	strcpy( file[id].fname, filename );
	file[id].currentDir = NULL;
	file[id].currentPath[0] = 0;
	
	fclose( fp );
	return 0;
}

// open subfile in the package file
File* PackFile::OpenSubfile( int id, char* subname )
{
	if( file[id].root == NULL )
		return NULL;
		
	FILE *fp;
	if((fp = fopen( file[id].fname, "rb" )) == NULL )
		return NULL;
	
	int i, j;
	char dname[13], path[MAX_PATH_LEN];
	Directory* dirp, *dirtemp;

	GetPathName( path, subname );
	if( file[id].currentDir && strcmp( file[id].currentPath, path ) == 0 ){
	// currentPath can accelerate the finding speed
		dirp = file[id].currentDir;
		if(( j = dirp->SearchDir( dname, ARCHIVE )) != 0 )
			goto foundsubfile;
	}

	i = 1;	
	dirp = file[id].root;	 
	while( GetDirName( dname, subname, i ) ){
	//	printf( "%s: %d, %s\n", subname, i, dname );
	// find the subdirectory in the directory tree
		if( (j = dirp->SearchDir( dname, DIR_DISK | DIR_RAM )) != 0 ){
			if( dirp->items[j].type == DIR_DISK ){
				dirtemp = ReadDirFromDisk( fp, dirp->items[j].address, dirp );
				if( dirtemp == NULL )
					return NULL;
				dirp->items[j].address = ( DWORD )dirtemp;
				dirp->items[j].type = DIR_RAM;
				dirp = dirtemp;
			}
			else
				dirp = ( Directory* )dirp->items[j].address;
		}
		else{
			puts( "not found " );
			return NULL;
		}
		i ++;
	}

	GetFileName( dname, subname );
#ifdef _DEBUG
	puts( dname );
#endif
	if((j = dirp->SearchDir( dname, ARCHIVE )) != 0 ){
	// find and open the subfile 
		file[id].currentDir = dirp;
		strcpy( file[id].currentPath, path );
foundsubfile:		
		File* subf = new File;
		subf->fp = fp;
		subf->address = dirp->items[j].address;
		subf->length = dirp->items[j].length;
		fseek( fp, subf->address, SEEK_SET );
		return subf;
	}
	else{
		fclose( fp );
		return NULL;
	}
}

// normal file does not occupy PackFile resource
File* PackFile::OpenNormalFile( char* filename )
{
	FILE *fp;
	if(( fp = fopen( filename, "rb" )) == NULL ){
#ifdef _DEBUG
		printf( "in CFil::OpenNormalFile: open file %s error\n", filename );
#endif
		return NULL;
	}
	
	File *subfp = new File;
	if( subfp == NULL )
		goto error;
		
	subfp->fp = fp;
	subfp->address = 0;
	subfp->length = filelength( fileno( fp ));
	return subfp;

error:
	delete subfp;
	fclose( fp );
	return NULL;	
}

// fname format: packagefilename#directory/subfilename
File* PackFile::Open( char* fname )
{
	char *p;
	int i, lessuse;
	
	strupr( fname );
	if(( p = strchr( fname, '#' )) == NULL )
		// the fname isn't a package file's name
		return OpenNormalFile( fname );
	
	// fname include package file name, but with no subfile name	
	if( *( p+1 ) == 0 )
		return NULL;	
		
	*p = 0;

#ifdef _DEBUG
	puts( fname );
#endif
	
	for( i=0; i<MAX_CFILE_NUM; i++ ){
		if( strcmp( file[i].fname, fname ) == 0 ){
		// package file has been opened
			return OpenSubfile( i, p+1 );
		}
	}
	
	// package file hasn't been opened
	for( i=0, lessuse=-1; i<MAX_CFILE_NUM; i++ ){
		if( file[i].root == NULL )
			lessuse = i;
	}
	if( lessuse < 0 )	// no space to open package file
		return NULL;
	OpenCfile( lessuse, fname );
	return OpenSubfile( lessuse, p+1 );
}


/*void main( void )
{
	puts( "package" );
	PackFile cfile;

	
	if( cfile.Open( "d:\\wcpp\\gamedev\\mytext.pak#dat\\wav\\song.wav" ) )
		puts( "OK" );
	else
		puts( "shit" );

	CreatePackage( "d:\\wcpp\\gamedev\\vbe\\text.pak", "d:\\wcpp\\gamedev\\vbe\\pic" );
	puts( "create packgae" );
}

*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久久国产精品免费蜜臀| 亚洲综合一二三区| 日韩一区欧美二区| 色偷偷久久人人79超碰人人澡| 欧美大片一区二区三区| 亚洲va韩国va欧美va精品| 91在线视频在线| 亚洲一二三四在线观看| 国产成人免费视频网站| 精品欧美一区二区久久| 日韩成人免费电影| 日韩一区二区在线看片| 三级成人在线视频| 欧美四级电影网| 亚洲高清视频的网址| 91传媒视频在线播放| 亚洲国产日日夜夜| 精品视频1区2区| 日韩综合小视频| 91麻豆精品国产91| 久久超级碰视频| 日本不卡一二三| 亚洲女女做受ⅹxx高潮| 日韩精品一二区| 欧美亚洲高清一区二区三区不卡| 亚洲欧美日韩一区二区| 日本电影欧美片| 五月婷婷久久综合| 日韩美女视频在线| 国产91精品一区二区| 亚洲欧洲精品一区二区精品久久久 | 亚洲欧洲成人自拍| 91同城在线观看| 亚洲mv在线观看| 欧美精品一区二区三区一线天视频| 粉嫩一区二区三区在线看| 亚洲视频在线一区二区| 色94色欧美sute亚洲线路一ni| 丝袜亚洲精品中文字幕一区| 久久亚区不卡日本| 在线观看日韩电影| 精品一区二区综合| 亚洲男人的天堂一区二区| 欧美一区二区黄| 91精品国产福利在线观看| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲视频综合在线| 久久一二三国产| 欧美日韩视频专区在线播放| 国产91丝袜在线观看| 三级一区在线视频先锋 | 日韩电影在线一区二区三区| 国产日韩精品视频一区| 欧美一卡二卡三卡四卡| 色综合天天综合狠狠| 国产一区欧美日韩| 亚欧色一区w666天堂| 亚洲欧美怡红院| 国产欧美一区在线| 日韩精品中午字幕| 欧美福利电影网| 色老综合老女人久久久| av中文字幕一区| 国产成人一级电影| 蜜桃av一区二区| 日韩精品欧美成人高清一区二区| 日韩美女精品在线| 国产精品久久久久久妇女6080 | 亚洲一区在线观看视频| 国产精品久久久久四虎| 中文字幕av一区二区三区免费看| 欧美成人欧美edvon| 日韩一区二区免费电影| 在线播放91灌醉迷j高跟美女| 欧洲一区二区av| 色婷婷av一区二区三区软件| 色狠狠一区二区三区香蕉| 91小视频免费看| 欧美在线观看视频一区二区三区| 99精品欧美一区二区三区小说| 成人av电影免费在线播放| 制服丝袜激情欧洲亚洲| 日本高清不卡在线观看| 精品1区2区3区| 欧美蜜桃一区二区三区| 日韩精品一区二区三区在线播放 | 欧美裸体一区二区三区| 日韩一区二区免费电影| 日本一区二区在线不卡| 亚洲欧洲精品天堂一级| 性做久久久久久| 国产麻豆视频一区二区| jlzzjlzz亚洲女人18| 欧美日韩一区二区欧美激情| 日韩一区二区三区高清免费看看| 精品国产乱码久久久久久蜜臀| 中文字幕欧美国产| 亚洲一区二区精品视频| 国产电影一区二区三区| 在线中文字幕一区| 欧美精品一区二区三区一线天视频| 中文字幕高清不卡| 日韩极品在线观看| 国产成人av电影| 91精品欧美福利在线观看| 国产精品乱人伦一区二区| 视频一区国产视频| 成年人国产精品| 日韩欧美一区二区不卡| 亚洲最快最全在线视频| 国产成人午夜片在线观看高清观看| 欧美日韩综合在线| 国产午夜精品美女毛片视频| 五月婷婷综合网| 色素色在线综合| 国产精品午夜电影| 狠狠色狠狠色综合系列| 69成人精品免费视频| 亚洲精品视频在线观看免费| 成人激情av网| 久久久久国产精品人| 久久国产麻豆精品| 欧美精品一二三| 午夜a成v人精品| 国产婷婷一区二区| 免费观看日韩电影| 欧美一区二区三区啪啪| 视频一区国产视频| 欧美日韩一区二区在线视频| 亚洲国产精品久久久男人的天堂| 91国偷自产一区二区三区成为亚洲经典 | 91精品在线观看入口| 亚洲国产精品久久人人爱蜜臀 | 欧美在线免费观看视频| 亚洲欧美乱综合| 欧美日韩美女一区二区| 亚洲国产一区视频| 91麻豆精品国产91久久久更新时间| 一区二区三区在线免费视频 | 色噜噜狠狠一区二区三区果冻| 亚洲裸体在线观看| 欧美日韩一区高清| 美女视频免费一区| 国产人伦精品一区二区| 成人午夜激情片| 一区二区三区四区国产精品| 欧美色综合天天久久综合精品| 日韩av网站免费在线| 欧美精品一区二区三区在线| 99久久婷婷国产综合精品| 亚洲国产美女搞黄色| 欧美精品一区二区三区高清aⅴ| 国产福利电影一区二区三区| 日韩美女啊v在线免费观看| 欧美日韩精品欧美日韩精品| 久久er99热精品一区二区| 国产欧美一区二区三区在线老狼| 91免费在线看| 美女网站色91| 一区二区日韩av| 精品福利在线导航| 欧美中文字幕亚洲一区二区va在线| 青青草原综合久久大伊人精品| 亚洲国产精品久久人人爱| 日韩免费观看2025年上映的电影| www.亚洲人| 久久国产精品露脸对白| 国产精品青草综合久久久久99| 亚洲一区在线观看视频| 5858s免费视频成人| 青青草成人在线观看| 国产精品理伦片| 精品久久久久久久久久久久久久久久久| 成人精品高清在线| 国产在线精品不卡| 蜜臂av日日欢夜夜爽一区| 一区二区久久久| 亚洲人成在线播放网站岛国| 久久久不卡网国产精品二区 | 久久精子c满五个校花| 91精品欧美久久久久久动漫| 在线国产电影不卡| 99久久精品免费| av午夜一区麻豆| 国产mv日韩mv欧美| 国产一区日韩二区欧美三区| 久久99久久99| 美女视频网站久久| 麻豆久久一区二区| 日本一道高清亚洲日美韩| 亚洲国产另类av| 亚洲观看高清完整版在线观看| 亚洲精品水蜜桃| 亚洲综合在线电影| 一区av在线播放| 午夜av一区二区| 麻豆成人91精品二区三区| 韩国在线一区二区| 国产麻豆成人精品| 成人av手机在线观看|