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

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

?? filesystem.c

?? blackfin平臺實(shí)現(xiàn)對SD卡的支持
?? C
?? 第 1 頁 / 共 2 頁
字號:
* Return   :DWORD amount of files and directories
*******************************************************************/	
DWORD fnDetectDirectory(DWORD startcluster)
{
	BYTE item;
	WORD recordoffset;
	DWORD x=0;
	BYTE stringnum=0;
	DWORD filenum=0;
	currentcluster_t current_cluster;
	
	current_cluster.value=startcluster;
	current_cluster.offset=0;
	
	while (current_cluster.value!= 0xFFFFFFFF) // Do while not end of cluster chain
	{
		// Read Sector
		current_cluster = fnFAT32_SectorReader(current_cluster, x++);

		if (current_cluster.value!=0xFFFFFFFF)
		{
			for (item=0; item<=15;item++)
			{
		 		recordoffset = (32*item);
 		 		if ( fnFATMisc_If_LFN_Exists(recordoffset,stringnum) )
		 		{
 	   	      			filenum++; //File / Dir Count
 	   	      		}
 	   	      		else if ( fnFATMisc_If_noLFN_SFN_Only(recordoffset) )
		 		{
			  		filenum++; //File / Dir Count
			  	}
			}// end of for
		}
	}
	return filenum;
} 

/******************************************************************
* Function     : fnListDirectory
* Description : open a directory, get all file pointers of all files in the directory and store them in FILELIST_t.
* Input     : 
*              DWORD startcluster-starting sector of curret directory
* Return   :FILELIST_t file list pointer
*******************************************************************/
FILELIST_t* fnListDirectory(DWORD startcluster)
{
	BYTE i,item,index;
	WORD recordoffset;
	BYTE LFNIndex=0;
	DWORD x=0;
	currentcluster_t current_cluster;
	
	BYTE stringnum=0,next_num=0;
	BYTE chksum;
	DWORD filenumber=0;
	BYTE String_buffer[20*13];
	BYTE short_name[11];
	WORD name_size=0;
	
	current_cluster.value=startcluster;
	current_cluster.offset=0;
	
	FILELIST_t *filelist=NULL;
	
	
       //get numbers of files in current directory
	filenumber = fnDetectDirectory(startcluster);
	
	
	filelist=(FILELIST_t *)malloc(sizeof(FILELIST_t));
	filelist->list=(FILE_t **)malloc(sizeof(FILE_t *)*(filenumber));
	filelist->num=filenumber;
	
	if(filenumber==0)
	{
		
		return NULL;
	}
	
	filenumber=0;
	
	  
	while (current_cluster.value!= 0xFFFFFFFF) // Do while not end of cluster chain
	{
		// Read Sector
		current_cluster = fnFAT32_SectorReader(current_cluster, x++);

		if (current_cluster.value!=0xFFFFFFFF)
		{
			LFNIndex=0;
			for (item=0; item<=15;item++)
			{
		 		recordoffset = (32*item);
				//check entry type
 				if ( fnFATMisc_If_LFN_Invalid(recordoffset) ) 	
 				{
                                   //invalid entry
		 			stringnum = 0;
		 			name_size = 0;
		 			next_num =0 ;
		 			continue;
		 		} 
				// Long File Name Text Found
				else if ( fnFATMisc_If_LFN_TextOnly(recordoffset) )
				{
					// if file name entry
					if(stringnum==0)
					{	
                                     //check last entry by checking bit-7, first byte in file name entry
						if((fnIDE_SectorByte(recordoffset)&0x40)!=0)
						{
							LFNIndex  =fnIDE_SectorByte(recordoffset)&0x1F;
							stringnum = LFNIndex;
							next_num  = stringnum;
							chksum	  = fnIDE_SectorByte(recordoffset+0x0D);
						}
						else
						{
                                                 // do nothing if bit-7 is not '1'.
							continue;
						}
					}
					else
					{      
					       // check file name serial number and check code, correct-get file name charaters, error-reset with 0
						if(((fnIDE_SectorByte(recordoffset)&0x1F)==next_num)&&(fnIDE_SectorByte(recordoffset+0x0D)==chksum))
						{
							LFNIndex =(fnIDE_SectorByte(recordoffset)&0x1F);
						}
						else
						{
							stringnum = 0;
		 					name_size = 0;
		 					next_num =0 ;
		 					continue;
		 				}
		 			}
					name_size += fnFATMisc_cacheLFN(recordoffset,LFNIndex,String_buffer);
					next_num--;
				} 
		 		// Normal Entry and Long text exists 
		 		else if ( fnFATMisc_If_LFN_Exists(recordoffset,stringnum) )
		 		{
		 			filelist->list[filenumber]=(FILE_t*)malloc(sizeof(FILE_t));
		 			fnIDE_SectorData(recordoffset,short_name,11);
					// check file name serial number and check code, correct-get long file name charaters, error-get short file name
		 			if((next_num!=0)||(chksum!=fnGetChksum(short_name)))
		 				fnFindFile_ShortName(x-1,item,startcluster,filelist->list[filenumber]);
		 			else
		 				fnFindFile_LongName(x-1,item,startcluster,String_buffer,name_size,filelist->list[filenumber]);
		 			filenumber++;
		 			stringnum = 0;
		 			name_size = 0;
		 			next_num =0 ;		
 	   	      					  
		 		}
		 
		 		// Normal Entry, only 8.3 Text		 
		 		else if ( fnFATMisc_If_noLFN_SFN_Only(recordoffset) )
		 		{
		 			filelist->list[filenumber]=(FILE_t*)malloc(sizeof(FILE_t));
		 			fnFindFile_ShortName(x-1,item,startcluster,filelist->list[filenumber]);
       		  			filenumber++;
		 			stringnum = 0;
		 			name_size = 0;
		 			next_num =0 ; 
		 		}
			}// end of for
		}
	}
	return filelist;
	
}

/******************************************************************
* Function     : fnFindFile
* Description : search a file or directory.
* Input     : 
*              DWORD startcluster-starting sector of curret directory
*              BYTE* filename-target file name
*              BYTE mode -file type: file or directory
* Return   :FILE_t - file pointer if found, or none
*******************************************************************/
FILE_t *fnFindFile(DWORD startcluster,BYTE *filename,BYTE mode)
{
	BYTE i,item,index;
	WORD recordoffset;
	BYTE LFNIndex=0;
	DWORD x=0;
	currentcluster_t current_cluster;
	
	BYTE stringnum=0,next_num=0;
	BYTE chksum;
	DWORD filenumber=0;
	BYTE String_buffer[20*13];
	BYTE short_name[11];
	WORD name_size=0;
	FILE_t *fp;
	
	
	current_cluster.value = startcluster;
	current_cluster.offset = 0;
	
	fp = (FILE_t*)malloc(sizeof(FILE_t));
	fp->flag=0;  
	//
	while (current_cluster.value!= 0xFFFFFFFF) // Do while not end of cluster chain
	{
		// Read Sector
		current_cluster = fnFAT32_SectorReader(current_cluster, x++);

		if (current_cluster.value!=0xFFFFFFFF)
		{
			LFNIndex=0;
			for (item=0; item<=15;item++)
			{
		 		recordoffset = (32*item);
 					//check entry type
 				if ( fnFATMisc_If_LFN_Invalid(recordoffset) ) 	
 				{
                               // check file name, reset with 0 if invalid
		 			stringnum = 0;
		 			name_size = 0;
		 			next_num =0 ;
		 			continue;
		 		} 
				// Long File Name Text Found
				else if ( fnFATMisc_If_LFN_TextOnly(recordoffset) )
				{
					//if long file name entry
					if(stringnum==0)
					{
						 //check last entry by checking bit-7, first byte in file name entry
						if((fnIDE_SectorByte(recordoffset)&0x40)!=0)
						{
							LFNIndex  =fnIDE_SectorByte(recordoffset)&0x1F;
							stringnum = LFNIndex;
							next_num  = stringnum;
							chksum	  = fnIDE_SectorByte(recordoffset+0x0D);
						}
						else
						{
							continue;
						}
					}
					else
					{
						if(((fnIDE_SectorByte(recordoffset)&0x1F)==next_num)&&(fnIDE_SectorByte(recordoffset+0x0D)==chksum))
						{
							LFNIndex =(fnIDE_SectorByte(recordoffset)&0x1F);
						}
						else
						{
							stringnum = 0;
		 					name_size = 0;
		 					next_num =0 ;
		 					continue;
		 				}
		 			}
					name_size += fnFATMisc_cacheLFN(recordoffset,LFNIndex,String_buffer);
					next_num--;
				} 
		 		// Normal Entry and Long text exists 
		 		else if ( fnFATMisc_If_LFN_Exists(recordoffset,stringnum) )
		 		{
		 			//check search mode and entry type matched or not.
		 			if(((fnIDE_SectorByte(recordoffset+0x0B)&FILE_ATTR_DIRECTORY)==0&&mode==FIND_FILE_MODE)||
		 			   ((fnIDE_SectorByte(recordoffset+0x0B)&FILE_ATTR_DIRECTORY)!=0&&mode==FIND_DIR_MODE)||
		 			   (mode==FIND_ALL_MODE))
		 			{
		 				fnIDE_SectorData(recordoffset,short_name,11);
		 				if((next_num!=0)||(chksum!=fnGetChksum(short_name)))
		 					fnFindFile_ShortName(x-1,item,startcluster,fp);
		 				else
		 					fnFindFile_LongName(x-1,item,startcluster,String_buffer,name_size,fp);
		 				
		 				filenumber++;
			 			stringnum = 0;
		 				name_size = 0;
		 				next_num =0 ;
		 				i=0;
			 			while(1)
			 			{
			 				if(__tolower(filename[i])!=__tolower(fp->filename[i]))
		 					{
		 						break;
		 					}
		 					if(filename[i]=='\0')
		 					{
		 						return fp;
		 					}
			 				i++;
			 			}
		 			}
		 	   	      					  
		 		}
		 
		 		// Normal Entry, only 8.3 Text		 
		 		else if ( fnFATMisc_If_noLFN_SFN_Only(recordoffset) )
		 		{
		 			if(((fnIDE_SectorByte(recordoffset+0x0B)&FILE_ATTR_DIRECTORY)==0&&mode==FIND_FILE_MODE)||
		 			   ((fnIDE_SectorByte(recordoffset+0x0B)&FILE_ATTR_DIRECTORY)!=0&&mode==FIND_DIR_MODE)||
		 			   (mode==FIND_ALL_MODE))
		 			{
		 				fnFindFile_ShortName(x-1,item,startcluster,fp);
       		  				filenumber++;
		 				i=0;
		 				while(1)
		 				{
		 					if(__tolower(filename[i])!=__tolower(fp->filename[i]))
		 					{
		 						break;
		 					}
			 				if(filename[i]=='\0')
			 				{
			 					return fp;
		 					}
		 					i++;
		 				}
		 			
			 			stringnum = 0;
			 			name_size = 0;
			 			next_num =0 ; 
			 		}
			 		
		 			
		 		}
			}// end of for
		}
	}
	free(fp);
	return fp;
} 

/******************************************************************
* Function     : fnReadFile
* Description : read a file into data buffer
* Input     : 
*              BYTE *buffer-data buffer addess
*              BYTE size-size of data entry
*              DWORD count -number of data entry
*              FILE_t *fp-file pointer
* Return   :DWORD count of reading data
*******************************************************************/
DWORD fnReadFile(BYTE *buffer, BYTE size, DWORD count, FILE_t *fp)
{

	
	DWORD read_num;
	DWORD  offset,sp1,sp2,length;
	DWORD bytepercluster = current_fs->byte_per_cluster;
	DWORD bytepersector = current_fs->bpb.byte_per_sector;
	BYTE  *rbuffer;
	DWORD remain;
	
	rbuffer=buffers.currentsector.u8data;
	//which sector *fp locates	
	offset=fp->curp/bytepersector;

	//sp1 is starting address of target sector
	sp1=fp->curp-offset*bytepersector;
	
	read_num=size*count;
	//counting  reading data, cut data if overflow
	if((read_num+fp->curp)>fp->filesize)
	{
		read_num=fp->filesize-fp->curp;
	}
	//length: numbers of Byte will be read next operation
	//if length more than one sector, cut length or do next reading operation

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
奇米888四色在线精品| 亚洲激情自拍视频| 久久久久国产免费免费| 久久综合久色欧美综合狠狠| 精品区一区二区| 国产日韩欧美在线一区| 国产精品丝袜在线| 一区二区三区日本| 日韩高清中文字幕一区| 欧美一区二区三区免费| 午夜天堂影视香蕉久久| 日本在线不卡一区| 国产福利精品一区二区| 91麻豆国产在线观看| 这里只有精品免费| 国产拍揄自揄精品视频麻豆| 樱花草国产18久久久久| 国产一区二区调教| 色偷偷久久人人79超碰人人澡| 欧美一区二区播放| 亚洲视频一二三| 激情欧美日韩一区二区| 欧洲人成人精品| 国产精品美日韩| 精品一区二区精品| 欧美偷拍一区二区| 中文字幕亚洲电影| 国产乱子伦一区二区三区国色天香| 91国在线观看| **网站欧美大片在线观看| 国产一区二区三区在线观看免费 | 亚洲一区二区三区在线播放| 国产一区不卡精品| 91麻豆精品91久久久久同性| 国产女主播一区| 国产三级精品三级| 亚洲高清在线视频| 国产v综合v亚洲欧| 欧美久久久一区| 国产精品午夜久久| 免费看欧美女人艹b| av一区二区久久| 久久精品日产第一区二区三区高清版 | 亚洲日穴在线视频| 捆绑紧缚一区二区三区视频| 欧美午夜精品理论片a级按摩| 26uuu久久综合| 亚洲高清不卡在线| 色婷婷综合中文久久一本| 欧美极品另类videosde| 久久不见久久见中文字幕免费| 欧美精品在线视频| 午夜精品123| 欧美男生操女生| 视频一区国产视频| 欧美日韩国产美女| 日韩精品国产精品| 欧美日韩二区三区| 人人狠狠综合久久亚洲| 欧美一区二区三区在线电影| 午夜精品久久久久久不卡8050| 欧美三级乱人伦电影| 婷婷开心激情综合| 欧美久久久久久蜜桃| 美国十次了思思久久精品导航| 欧美一区二区啪啪| 国产一区二三区| 国产精品久久二区二区| 99精品欧美一区二区三区综合在线| 国产精品婷婷午夜在线观看| 不卡在线视频中文字幕| 亚洲一卡二卡三卡四卡| 欧美国产97人人爽人人喊| 欧美电影在线免费观看| 成人av免费在线| 日日夜夜免费精品视频| 欧美年轻男男videosbes| 国产suv精品一区二区6| 视频一区视频二区在线观看| 中文字幕一区二区视频| 日韩欧美国产电影| 在线精品亚洲一区二区不卡| 国产精品亚洲综合一区在线观看| 一区二区欧美国产| 中文字幕第一区二区| 欧美v国产在线一区二区三区| 一本大道久久a久久综合婷婷| 韩国欧美国产1区| 青青草国产精品亚洲专区无| 亚洲国产精品一区二区尤物区| 中文字幕日韩一区二区| 国产欧美日韩综合| 久久精品夜色噜噜亚洲aⅴ| 精品久久久久久久久久久院品网 | 中文字幕欧美国产| 欧美日韩精品一区二区三区| 国产98色在线|日韩| 日韩电影免费一区| 国产精品传媒入口麻豆| 精品国产免费人成电影在线观看四季| 国产不卡视频在线播放| 日韩av二区在线播放| 国产精品电影一区二区三区| 26uuu国产一区二区三区| 在线观看日韩电影| 99精品视频在线免费观看| 六月丁香婷婷久久| 日日噜噜夜夜狠狠视频欧美人| 中文字幕av不卡| 久久精品人人爽人人爽| 精品国产髙清在线看国产毛片| 欧美午夜片在线看| 欧美伊人久久大香线蕉综合69| 成人精品gif动图一区| 国产盗摄一区二区| 国产高清在线观看免费不卡| 黄色日韩三级电影| 国内精品久久久久影院一蜜桃| 五月综合激情日本mⅴ| 亚洲欧美aⅴ...| 国产精品国产三级国产三级人妇 | 国产精品久久久久7777按摩| 久久综合九色综合97_久久久| 欧美成人a视频| 久久综合五月天婷婷伊人| 久久美女艺术照精彩视频福利播放| 欧美一区永久视频免费观看| 欧美一级一级性生活免费录像| 91精品国模一区二区三区| 日韩精品在线看片z| 26uuu国产电影一区二区| 国产视频一区二区三区在线观看| 久久色在线视频| 中文字幕色av一区二区三区| 亚洲欧美日韩中文字幕一区二区三区 | www亚洲一区| 国产精品灌醉下药二区| 亚洲黄色小说网站| 青青草97国产精品免费观看 | 欧美日韩免费高清一区色橹橹 | 91国内精品野花午夜精品 | 9191成人精品久久| 国产欧美一区二区三区沐欲| 国产精品午夜久久| 婷婷成人激情在线网| 国产在线一区二区| 在线视频国内自拍亚洲视频| 日韩欧美高清dvd碟片| 中文字幕亚洲欧美在线不卡| 日韩成人午夜电影| 国产成人精品三级| 日韩一区二区三区三四区视频在线观看 | 国产精品美女久久久久高潮| 午夜a成v人精品| 成人免费高清在线| 日韩视频免费直播| 亚洲狠狠丁香婷婷综合久久久| 久久av中文字幕片| 欧美日本乱大交xxxxx| 1区2区3区国产精品| 国产美女一区二区三区| 欧美片网站yy| 亚洲午夜精品一区二区三区他趣| 成人性视频网站| 日韩你懂的在线播放| 国产精品视频yy9299一区| 狠狠色丁香久久婷婷综合丁香| 欧美日韩久久久一区| 亚洲激情六月丁香| 色综合天天天天做夜夜夜夜做| 国产亚洲综合av| 国产盗摄女厕一区二区三区 | 福利一区福利二区| 国产欧美日韩一区二区三区在线观看| 美国毛片一区二区| 欧美成人伊人久久综合网| 美国毛片一区二区| 欧美成人三级电影在线| 国产一区二区三区蝌蚪| 久久日韩精品一区二区五区| 国产福利91精品| 国产精品久久久久久久第一福利 | 欧美一级久久久久久久大片| 韩国v欧美v亚洲v日本v| 久久久久国产一区二区三区四区 | 91福利小视频| 三级在线观看一区二区| 精品国产sm最大网站免费看| 国产成人夜色高潮福利影视| 中文字幕一区日韩精品欧美| 在线视频亚洲一区| 九九九精品视频| 一区二区在线观看不卡| 欧美mv和日韩mv国产网站| 国产成人a级片| 三级一区在线视频先锋 | 亚洲精品久久久蜜桃| 日韩三级av在线播放| 97精品超碰一区二区三区| 丝袜亚洲精品中文字幕一区|