亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
日日摸夜夜添夜夜添精品视频| 粉嫩av亚洲一区二区图片| 久久电影国产免费久久电影| 成av人片一区二区| 91精品国产麻豆| 亚洲精品国产无天堂网2021 | 97se亚洲国产综合自在线观| 欧美一卡在线观看| 亚洲日本在线观看| 国产乱子伦视频一区二区三区 | 欧美最新大片在线看| 精品日韩在线观看| 香蕉成人伊视频在线观看| 成人白浆超碰人人人人| 精品国产乱码久久久久久闺蜜| 亚洲最新视频在线观看| 国产成人亚洲综合a∨婷婷图片| 欧美美女一区二区在线观看| 亚洲精选视频在线| 国产91在线看| 欧美国产日本韩| 国产精品自拍在线| 欧美tickling挠脚心丨vk| 午夜国产精品影院在线观看| 色综合久久综合网欧美综合网| 欧美国产日韩亚洲一区| 国产精品一区免费在线观看| 精品国产自在久精品国产| 日韩成人精品在线观看| 欧美天天综合网| 亚洲午夜国产一区99re久久| 91久久免费观看| 一个色妞综合视频在线观看| 日本韩国欧美在线| 亚洲另类一区二区| 在线一区二区三区四区五区| 亚洲乱码精品一二三四区日韩在线 | 亚洲高清免费在线| 欧美综合久久久| 亚洲国产精品一区二区久久| 欧美日本一区二区在线观看| 亚洲成人tv网| 欧美日韩免费不卡视频一区二区三区| 亚洲精品午夜久久久| 99免费精品在线| 日韩理论片中文av| 97精品久久久午夜一区二区三区 | 日本欧美韩国一区三区| 欧美一区二区三区四区五区| 美美哒免费高清在线观看视频一区二区| 欧美一区二区在线免费播放 | 亚洲国产视频在线| 色就色 综合激情| 亚洲成人免费电影| 欧美一区二区女人| 国产福利不卡视频| 国产精品久久久久一区二区三区 | 欧美怡红院视频| 天天综合天天综合色| 精品国产乱码久久久久久1区2区| 国产精品18久久久久久久网站| 国产精品乱人伦中文| 欧美亚洲国产一区二区三区| 蜜桃在线一区二区三区| 国产精品久久久久久福利一牛影视| 一本一道综合狠狠老| 午夜精品福利视频网站| 国产亚洲欧洲997久久综合| 91碰在线视频| 日韩av在线播放中文字幕| 国产人成一区二区三区影院| 91久久精品一区二区二区| 五月综合激情网| 精品国产乱码久久久久久久久 | 欧美tickling挠脚心丨vk| 亚洲一区二区中文在线| 欧美午夜精品久久久| 国产成人午夜精品影院观看视频| 久久久www免费人成精品| 中文字幕五月欧美| 91精品久久久久久蜜臀| 久久国产欧美日韩精品| 欧美日韩高清在线| 国产成人午夜视频| 国产精品久久久爽爽爽麻豆色哟哟 | 国产高清久久久久| 亚洲特级片在线| 高清beeg欧美| 免费观看日韩av| 久久精品在线免费观看| 久久久精品综合| 欧美日韩一区精品| 精品在线观看视频| 精品处破学生在线二十三| 欧洲激情一区二区| 久久精品国产澳门| 精品99久久久久久| 91国产精品成人| 经典三级视频一区| 日本vs亚洲vs韩国一区三区 | 337p粉嫩大胆噜噜噜噜噜91av| 日韩精品电影在线观看| 欧美午夜在线一二页| 成人一级片在线观看| 午夜欧美在线一二页| 日本精品一区二区三区高清 | 久久午夜色播影院免费高清| 国产xxx精品视频大全| 激情文学综合丁香| 国产精品日日摸夜夜摸av| 亚洲成人精品一区二区| 亚洲精品少妇30p| 精品久久久久久久人人人人传媒 | 久久久99久久精品欧美| 在线免费一区三区| 色呦呦国产精品| 国产aⅴ精品一区二区三区色成熟| 亚洲一区二区四区蜜桃| 亚洲狠狠爱一区二区三区| 91精品国产欧美日韩| 91香蕉国产在线观看软件| 91九色02白丝porn| 北岛玲一区二区三区四区| 国产成人免费av在线| 九一九一国产精品| 亚洲国产aⅴ天堂久久| 日本亚洲最大的色成网站www| 亚洲男女毛片无遮挡| 国产性色一区二区| 久久久噜噜噜久久人人看| 日韩欧美色综合| 欧美三级午夜理伦三级中视频| 欧美日韩精品欧美日韩精品一综合| caoporm超碰国产精品| 国产主播一区二区| 99久久精品99国产精品| 成人毛片在线观看| 亚洲一区二区在线观看视频| 亚洲激情av在线| 亚洲精品精品亚洲| 亚洲人成网站在线| 国产精品卡一卡二卡三| 国产精品视频九色porn| 五月婷婷激情综合| 亚洲主播在线播放| 欧美国产日韩精品免费观看| 国产偷国产偷精品高清尤物 | 不卡在线视频中文字幕| 国产99久久久国产精品免费看| 国产自产v一区二区三区c| 色婷婷综合久久久久中文一区二区 | 国产精品毛片久久久久久久| 日本欧美在线看| 99久久免费视频.com| 日本vs亚洲vs韩国一区三区二区| 午夜久久福利影院| 久草中文综合在线| 国产盗摄精品一区二区三区在线 | 亚洲国产婷婷综合在线精品| 亚洲精选视频免费看| 久久精品国产999大香线蕉| 蜜臀va亚洲va欧美va天堂| 亚洲激情图片qvod| 亚洲国产成人tv| 日本成人中文字幕| 午夜精品一区二区三区三上悠亚| 亚洲一区二区三区小说| 亚洲h在线观看| proumb性欧美在线观看| 欧美性猛片aaaaaaa做受| 欧美日本在线看| 日本一区二区三区电影| 国产日产欧美一区二区三区| 国产91在线观看| 日韩一级大片在线观看| 久久亚洲一级片| 亚洲视频香蕉人妖| 亚洲福中文字幕伊人影院| 成人av资源在线观看| 精品视频1区2区| 中文字幕一区二区三| 日韩国产精品久久久| 日韩国产在线一| 欧美日韩一区二区三区在线| 日韩一级二级三级| 视频一区视频二区中文字幕| 国产成人av电影免费在线观看| 国产露脸91国语对白| 精品久久久久香蕉网| 亚洲综合激情网| 一本久久a久久精品亚洲| 欧美zozozo| 国产亚洲欧美日韩在线一区| 捆绑调教一区二区三区| 色综合视频在线观看| 亚洲精品视频在线| 国产一二精品视频| 欧美乱妇20p| 麻豆精品新av中文字幕| 91精彩视频在线观看|