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

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

?? fs.c

?? 基于lpc2148(arm7)的wav音樂格式播放器的設計
?? C
?? 第 1 頁 / 共 2 頁
字號:
 * Return value: If a free cluster is found it's number is returned. If none is 
 * found 0 is returned.
*/
euint32 fs_getNextFreeCluster(FileSystem *fs,euint32 startingcluster)
{
	euint32 r;
	
	while(startingcluster<fs->DataClusterCount){
		r=fat_getNextClusterAddress(fs,startingcluster,0);
		if(r==0){
			return(startingcluster);
		}
		startingcluster++;
	}
	return(0);
}
/*****************************************************************************/ 

/* ****************************************************************************  
 * euint32 fs_giveFreeClusterHint(FileSystem *fs)
 * 
 * Description: This function should return a clusternumber that is free or
 * lies close before free clusters. The result MUST be checked to see if 
 * it is free! Implementationhint: search the largest clusternumber in the
 * files in the rootdirectory.
 * 
 * Return value: Returns it's best guess.
*/
euint32 fs_giveFreeClusterHint(FileSystem *fs)
{
	return(2); /* Now THIS is a hint ;) */
}
/*****************************************************************************/ 

/* ****************************************************************************
 * esint8 fs_findFile(FileSystem *fs,eint8* filename,FileLocation *loc,euint32 *lastDir)
 *
 * Description: This function looks if the given filename is on the given fs
 * and, if found, fills in its location in loc.
 * The function will first check if the pathname starts with a slash. If so it will
 * set the starting directory to the rootdirectory. Else, it will take the firstcluster-
 * currentdir (That you can change with chdir()) as startingpoint.
 * The lastdir pointer will be the first cluster of the last directory fs_findfile
 * enters. It starts out at the root/current dir and then traverses the path along with
 * fs_findFile. 
 * It is set to 0 in case of errors (like dir/dir/dir/file/dir/dir...)
 * Return value: Returns 0 when nothing was found, 1 when the thing found
 * was a file and 2 if the thing found was a directory.
*/

esint8 fs_findFile(FileSystem *fs, eint8* filename, FileLocation *loc, euint32 *lastDir)
{
	euint32 currentDir, tmpclus;
	eint8 ffname[11], *next, it = 0, filefound = 0;
	
	if(*filename=='/')
	{
		currentDir = fs_getFirstClusterRootDir(fs);
		filename++;
		if(lastDir)*lastDir=currentDir;
		if(!*filename)
		{
			return(2);
		}
	}
	else
	{
		currentDir = fs->FirstClusterCurrentDir;
		if(lastDir)
		{
			*lastDir = currentDir;
		}
	}
	
	
	while((next = file_normalToFatName(filename, ffname)) != 0)
	{
		if((tmpclus = dir_findinDir(fs, ffname, currentDir, loc, DIRFIND_FILE)) == 0)
		{
			/* We didn't find what we wanted */
			/* We should check, to see if there is more after it, so that
			 * we can invalidate lastDir
			 */
			if((file_normalToFatName(next,ffname)) != 0)
			{
				if(lastDir)
				{
					*lastDir=0;
				}
			}			 
			return(0);
		}
		it++;
		if(loc->attrib & ATTR_DIRECTORY)
		{
			currentDir = tmpclus;
			filename = next;
			if(lastDir)
			{
				*lastDir = currentDir;

				/* what in the world is this supposed to do? commenting out - edwards 6/15/2008
				if(filefound)
				{
					*lastDir=0;
				}
				*/
			}
		}
		else
		{
			filefound = 1;
			if((file_normalToFatName(next,ffname)) != 0)
			{
				if(lastDir)
				{
					*lastDir=0;
				}
				return(0);
			}
			else
			{
				filename = next;
			}
		}
	}
	
	if(it == 0)
	{
		return(0);
	}
	
	if(loc->attrib & ATTR_DIRECTORY || !filefound)
	{
		return(2);
	}
	
	return(1);
}
/*****************************************************************************/

esint16 fs_findFreeFile(FileSystem *fs,eint8* filename,FileLocation *loc,euint8 mode)
{
	euint32 targetdir=0;
	eint8 ffname[11];
	
	if(fs_findFile(fs,filename,loc,&targetdir))return(0);
	if(!dir_getFatFileName(filename,ffname))return(0);
	if(dir_findinDir(fs,ffname,targetdir,loc,DIRFIND_FREE)){
		return(1);
	}else{
		if(dir_addCluster(fs,targetdir)){
			return(0);
		}else{
			if(dir_findinDir(fs,ffname,targetdir,loc,DIRFIND_FREE)){
				return(1);
			}
		}
	}
		
	return(0);
}
/*****************************************************************************/

/* ****************************************************************************  
 * euint32 fs_getLastCluster(FileSystem *fs,ClusterChain *Cache)
 * Description: This function searches the last cluster of a chain.
 * Return value: The LastCluster (also stored in cache);
*/
euint32 fs_getLastCluster(FileSystem *fs,ClusterChain *Cache)
{
	if(Cache->DiscCluster==0){
		Cache->DiscCluster=Cache->FirstCluster;
		Cache->LogicCluster=0;
	}
	
	if(Cache->LastCluster==0)
	{
		while(fat_getNextClusterChain(fs, Cache)==0)
		{
			Cache->LogicCluster+=Cache->Linear;
			Cache->DiscCluster+=Cache->Linear;
			Cache->Linear=0;
		}
	}
	return(Cache->LastCluster);
}
/*****************************************************************************/

euint32 fs_getFirstClusterRootDir(FileSystem *fs)
{
	switch(fs->type){
		case FAT32:
			return(fs->volumeId.RootCluster);
			break;
		default:
				return(1);
				break;
	}
}
/*****************************************************************************/

void fs_initClusterChain(FileSystem *fs,ClusterChain *cache,euint32 cluster_addr)
{
	cache->FirstCluster=cluster_addr;
	cache->DiscCluster=cluster_addr;
	cache->LogicCluster=0;
	cache->LastCluster=0; /* Warning flag here */
	cache->Linear=0;
	cache->ClusterCount=0; /* 0 means NOT known */
}
/*****************************************************************************/

void fs_setFirstClusterInDirEntry(FileRecord *rec,euint32 cluster_addr)
{
	rec->FirstClusterHigh=cluster_addr>>16;
	rec->FirstClusterLow=cluster_addr&0xFFFF;
}
/*****************************************************************************/

esint8 fs_flushFs(FileSystem *fs)
{
	return(part_flushPart(fs->part,0,fs->SectorCount));
}
/*****************************************************************************/

esint8 fs_umount(FileSystem *fs)
{
	return(fs_flushFs(fs));
}
/*****************************************************************************/

esint8 fs_clearCluster(FileSystem *fs,euint32 cluster)
{
	euint16 c;
	euint8* buf;
	
	for(c=0;c<(fs->volumeId.SectorsPerCluster);c++){
		buf = part_getSect(fs->part,fs_clusterToSector(fs,cluster)+c,IOM_MODE_READWRITE);
		memClr(buf,512);
		part_relSect(fs->part,buf);
	}
	return(0);
}

esint8 fs_getFsInfo(FileSystem *fs,euint8 force_update)
{
	euint8 *buf;
		
 	if(!fs->type==FAT32)return(0);
	buf = part_getSect(fs->part,FS_INFO_SECTOR,IOM_MODE_READONLY);
	if(ex_getb32(buf,0)!=FSINFO_MAGIC_BEGIN || ex_getb32(buf,508)!=FSINFO_MAGIC_END){
		part_relSect(fs->part,buf);
		return(-1);
	}
	fs->FreeClusterCount = ex_getb32(buf,488);
	fs->NextFreeCluster  = ex_getb32(buf,492);
	part_relSect(fs->part,buf);
	if(force_update){
		fs->FreeClusterCount=fat_countFreeClusters(fs);
	}
	return(0);
}

esint8 fs_setFsInfo(FileSystem *fs)
{
	euint8* buf;

	if(!fs->type==FAT32)return(0);
	buf = part_getSect(fs->part,FS_INFO_SECTOR,IOM_MODE_READWRITE);
	if(ex_getb32(buf,0)!=FSINFO_MAGIC_BEGIN || ex_getb32(buf,508)!=FSINFO_MAGIC_END){
		part_relSect(fs->part,buf);
		return(-1);
	}
	ex_setb32(buf,488,fs->FreeClusterCount);
	ex_setb32(buf,492,fs->NextFreeCluster);
	part_relSect(fs->part,buf);
	return(0);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美激情四射| 5566中文字幕一区二区电影| 久久av资源站| 久久国产乱子精品免费女| 日韩国产精品大片| 日韩精品免费专区| 美女一区二区视频| 精品一区二区三区免费观看| 免费成人性网站| 国产综合色在线| 成人综合日日夜夜| 99免费精品视频| 色婷婷激情久久| 欧美丰满高潮xxxx喷水动漫| 在线播放日韩导航| 欧美videos大乳护士334| 久久久噜噜噜久久人人看 | 2020日本不卡一区二区视频| 欧美xxxxx裸体时装秀| 国产欧美日韩精品在线| 自拍偷拍亚洲激情| 日韩精品三区四区| 国产传媒日韩欧美成人| 日本高清成人免费播放| 精品国产污网站| 国产亚洲综合在线| 玉足女爽爽91| 日韩vs国产vs欧美| jlzzjlzz亚洲女人18| 欧美亚洲丝袜传媒另类| 精品少妇一区二区三区| 亚洲色图都市小说| 久久精品国内一区二区三区| 丰满少妇在线播放bd日韩电影| 99re这里只有精品视频首页| 欧美日韩中文字幕一区| 久久久精品黄色| 夜夜爽夜夜爽精品视频| 国内精品伊人久久久久av影院 | 亚洲综合精品自拍| 麻豆精品一区二区| 欧美一区二区人人喊爽| 国产精品少妇自拍| 日韩成人一区二区三区在线观看| 国产mv日韩mv欧美| 欧美一区二区三区免费在线看| 国产精品久久久久久妇女6080| 日本中文一区二区三区| 91亚洲精品一区二区乱码| 欧美大白屁股肥臀xxxxxx| 亚洲女女做受ⅹxx高潮| 国产成人精品免费看| 日韩无一区二区| 亚洲精品一二三四区| 成人永久免费视频| 欧美xxxxx裸体时装秀| 亚洲一区二区三区视频在线播放| 国产精品99久| 欧美刺激脚交jootjob| 亚洲高清不卡在线观看| 91在线porny国产在线看| 国产午夜亚洲精品羞羞网站| 日本亚洲最大的色成网站www| 91免费观看国产| 中文av字幕一区| 国产成人av影院| 亚洲精品在线一区二区| 奇米综合一区二区三区精品视频| 色婷婷激情久久| 亚洲欧美日韩久久精品| 99久久777色| 亚洲欧洲性图库| av在线一区二区三区| 中文字幕欧美国产| 成人午夜在线播放| 国产精品无码永久免费888| 国产美女精品一区二区三区| 亚洲精品一线二线三线| 国产一区在线精品| 欧美韩国日本综合| 91日韩精品一区| 亚洲国产视频一区二区| 欧美狂野另类xxxxoooo| 亚洲成人激情自拍| 日韩美女在线视频| 国产一区 二区| 中文字幕一区在线| 在线观看视频一区二区欧美日韩| 亚洲福中文字幕伊人影院| 欧美日韩一区高清| 精品一区中文字幕| 久久精品人人爽人人爽| 91蜜桃在线观看| 日韩精品免费专区| 国产人久久人人人人爽| 99久久99久久综合| 婷婷六月综合网| 26uuu国产电影一区二区| 成人精品小蝌蚪| 一区二区成人在线| 欧美一级夜夜爽| 国产成人精品www牛牛影视| 亚洲欧美日韩国产综合| 欧美日韩久久不卡| 国产一区二区网址| 亚洲免费av在线| 日韩一区二区在线看| 成人av影院在线| 五月天国产精品| 国产无遮挡一区二区三区毛片日本| av中文字幕亚洲| 麻豆91在线观看| 蜜臀av一区二区在线免费观看| 国产日产欧美一区二区视频| 色呦呦日韩精品| 久久国产福利国产秒拍| 亚洲欧美在线视频观看| 7777精品伊人久久久大香线蕉经典版下载| 六月丁香综合在线视频| 亚洲免费高清视频在线| 欧美精品一区二区三| 欧美性感一区二区三区| 成人av在线播放网址| 久久国产精品免费| 午夜日韩在线观看| 亚洲欧美日韩国产综合在线| 26uuuu精品一区二区| 欧美欧美午夜aⅴ在线观看| av动漫一区二区| 欧美一级免费大片| 欧洲色大大久久| 久久99国产精品免费| 亚洲视频一二三| 国产精品三级av在线播放| 色久优优欧美色久优优| 日本一区二区不卡视频| 日韩欧美国产精品| 中文字幕av一区二区三区高| 亚洲欧美国产毛片在线| 天天影视色香欲综合网老头| 青青青伊人色综合久久| 国产精品一线二线三线| 91浏览器在线视频| 91精品国产综合久久福利软件| 久久婷婷国产综合国色天香| 亚洲欧美自拍偷拍色图| 日韩高清在线观看| 波多野结衣中文一区| 欧美日韩中字一区| 国产日韩精品视频一区| 亚洲色图19p| 国产在线播放一区三区四| 91老师片黄在线观看| 日韩视频一区在线观看| 亚洲欧美一区二区不卡| 日本不卡不码高清免费观看| 成人美女视频在线看| 3751色影院一区二区三区| 国产亚洲欧美激情| 午夜精品福利视频网站| 欧美一区二区三区在线电影| 中文字幕+乱码+中文字幕一区| 午夜激情一区二区三区| caoporn国产一区二区| 日韩欧美国产综合一区| 亚洲品质自拍视频| 国产成人午夜99999| 欧美日韩激情一区二区| 国产欧美日韩精品一区| 蜜桃av一区二区三区电影| 一本色道a无线码一区v| 久久久亚洲国产美女国产盗摄| 午夜精品一区在线观看| 91丨porny丨在线| 26uuu国产日韩综合| 日韩精品久久理论片| 在线观看一区日韩| 久久久影视传媒| 久久er精品视频| 欧美久久久久久久久久| 亚洲激情五月婷婷| 丁香啪啪综合成人亚洲小说| 日韩午夜小视频| 日韩av电影免费观看高清完整版| 色呦呦一区二区三区| 中文字幕一区二区三区蜜月| 国产美女精品人人做人人爽| 日韩欧美一区二区视频| 天堂久久久久va久久久久| 在线一区二区三区做爰视频网站| 欧美激情一区二区| 国产精品自产自拍| 久久久九九九九| 国产成人综合亚洲网站| 久久奇米777| 国产一区二区三区久久悠悠色av| 欧美v国产在线一区二区三区| 狂野欧美性猛交blacked| 日韩欧美一区二区不卡| 另类小说欧美激情|