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

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

?? filelib.c

?? blackfin平臺實現對SD卡的支持
?? C
字號:
/************************************************************************
* File         : filelib.c
* Processor    : ADSP-BF533  
* IDDE         : VisualDSP++3.5
* Description  : Define standarded file operating functions includes:
*                  
*            fopen();
*            fread();
*            fwrite();
*            fseek();
*            fclose();
*            frename();
*            fdelete();
*            fsearch();
*            fcloselist();
*            fcreatedir();
*
*************************************************************************/

#include "FAT/filesystem.h"
#include "type.h"
//#include <stdlib.h>
#include <string.h>

 /******************************************************************
* Function     : fnSystemInit
* Description : initialize HD
* Input     : none
* Return   : none
*******************************************************************/
void fnSystemInit()
{
	fnIDE_InitDrive();
	fnDetect_Partition();
}

 /******************************************************************
* Function     : flist
* Description : list directory contents with given path
* Input     : BYTE *name - given path
* Return   : FILELIST_t * file list pointer
*******************************************************************/

FILELIST_t* flist(BYTE *name)
{
	BYTE nsize,i;
	BYTE pn;
	BYTE path[256];
	
	BYTE startcluster = 2;
	BYTE* sub_name;
	char char_lib[]="/";
	
	FILE_t *fp;
	FILELIST_t *filelist;
	
	fp=(FILE_t*)malloc(sizeof(FILE_t));
	nsize=strlen((char *)path);
	//path format must be "C:/"
	if(nsize<3)
	{
#ifdef DEBUG
		printf("Error path!");
#endif
		filelist=NULL;
		return filelist;
	}
	memcpy(path,name,strlen((char *)name)+1);
	//partition num
 	pn = path[0]-'C';
	if(partition_table[pn]==NULL)
	{
#ifdef DEBUG
		printf("Error partition!");
#endif
		filelist=NULL;
		return filelist;
	}
	
	current_fs = partition_table[pn]->fs;
	// path valid or not?
	if(strncmp((char *)path+1,":/",2)!=0)
	{
#ifdef DEBUG
		printf("Error path!");
#endif
		filelist=NULL;
		return filelist;
	}

	sub_name=(BYTE*)strtok((char*)path,char_lib);
	sub_name=(BYTE*)strtok(NULL,char_lib);
	
	fp->type=FILE_ATTR_DIRECTORY;
	fp->startcluster=startcluster;
	fp->currentcluster.value=startcluster;
	fp->currentcluster.offset=0;

	// NULL means root directory
	if(sub_name==NULL)
	{
		filelist=fnListDirectory(fp->startcluster);
		return filelist;
	}

	while(1)
	{
		fp = fnFindFile(startcluster,sub_name,FIND_DIR_MODE);
		sub_name=(BYTE*)strtok(NULL,char_lib);
		if(fp==NULL)
		{
#ifdef DEBUG
			printf("There file not exist!");
#endif
			filelist=NULL;
			return filelist;
		}
		else
		{
			if(sub_name==NULL)
			{
				if(fp->type&FILE_ATTR_DIRECTORY)
				{
					filelist=fnListDirectory(fp->startcluster);
					return filelist;
				}
				else
				{
#ifdef DEBUG
					printf("There is a file!");
#endif
					filelist=NULL;
					return filelist;
				}
			}
			else
			{	
				if(fp->type&FILE_ATTR_DIRECTORY)
				{
					continue;
				}
			
				else
				{
#ifdef DEBUG
					printf("Path error!");
#endif	
					filelist=NULL;
					return filelist;
				}
				
			}
		}
	}
}


 /******************************************************************
* Function     : __fopen
* Description : open file with given path and open mode
* Input     : BYTE *name - given path
*                BYTE *mode - open mode
* Return   : FILE_t * file pointer
*******************************************************************/
FILE_t * __fopen(BYTE *name,BYTE *mode)
{
	FILE_t *fp;
	
	BYTE path[256];
	BYTE* sub_name;
	char sub_name_temp[256];
	char char_lib[]="/\\";
	WORD fopen_mode=0;
	WORD open_mode=0;
	
	BYTE pn;
	
	WORD nsize,i;
	DWORD upfolder;
	DWORD startcluster=2;

	//config open mode
	while(*mode)
	{
		switch(*mode)
		{
			case 'r':
				fopen_mode |=MODE_READ;
				break;
			case 'w':
				fopen_mode |=MODE_WRITE;
				open_mode = (O_CREAT|O_TRUNC);
				break;
			case 'a':
				fopen_mode |=MODE_WRITE;
				open_mode = (O_CREAT|O_APPEND);
				break;
			case '+':
				fopen_mode|=MODE_RDWR;
				break;
		}
		mode++;
	}
	
	switch(fopen_mode &(MODE_READ|MODE_WRITE))
	{
		case 0:
			return 0;
		case MODE_READ:
			open_mode|=O_RDONLY;
			break;
		case MODE_WRITE:
			open_mode|=O_WRONLY;
			break;
		default:
			open_mode |=O_RDWR;
			break;
	}
	
	memcpy(path,name,strlen((char*)name)+1);
	
	fp=(FILE_t *)malloc(sizeof(FILE_t));
	
	nsize=strlen((char*)path);

	if(nsize<3)
	{
#ifdef DEBUG
		printf("Error path!\n");
#endif
		fp=NULL;
		return fp;
	}
	
	//check partition
	
	sub_name=(BYTE*)strtok((char*)path,char_lib);
	if(strlen((char*)sub_name)!=2||sub_name[1]!=':')
	{
		fp=NULL;
		return fp;
	}
	pn = sub_name[0]-'C';
	if(partition_table[pn]==0)
	{
#ifdef DEBUG
		printf("Error partition!\n");
#endif
		fp=NULL;
		return fp;
	}
	current_fs = partition_table[pn]->fs;
	
	sub_name=(BYTE*)strtok(NULL,char_lib);
	
	fp->type=FILE_ATTR_DIRECTORY;
	fp->startcluster=startcluster;
	fp->currentcluster.value=startcluster;
	fp->currentcluster.offset=0;

	if(sub_name==NULL)
	{
#ifdef DEBUG
		printf("There is a folder!\n");
#endif
		fp=NULL;
		return fp;
	}
	

	while(1)
	{
		upfolder = fp->startcluster;
		fp = fnFindFile(fp->startcluster,sub_name,FIND_ALL_MODE);
		memcpy(sub_name_temp,sub_name,strlen((char*)sub_name)+1);
		sub_name=(BYTE*)strtok(NULL,char_lib);	
		if(fp==NULL)
		{

			if(sub_name==NULL)
			{

				//create a new file if the file doesn't exist
				if(open_mode&O_CREAT)
				{
					fp=fnCreateFile(upfolder,(BYTE*)sub_name_temp);
					if(fp==NULL)
					{
						return fp;
					}
#ifdef DEBUG
					printf("Create a new file!\n");
#endif
					break;
				}
				else
				{
#ifdef DEBUG
					printf("There file not exist!");
#endif
					fp=NULL;
					return fp;

				}
			}
			else
			{
#ifdef DEBUG
				printf("Error path!\n");
#endif
				return NULL;
			}
		}
		else
		{
			if(sub_name==NULL)
			{
				if(fp->type&FILE_ATTR_DIRECTORY)
				{
#ifdef DEBUG
					printf("There is a folder!\n");
#endif
					return NULL;
				}
				else
				{
					break;
				}
			}
			else
			{
				if(fp->type&FILE_ATTR_DIRECTORY)
				{
					continue;
				}
				else
				{
					return NULL;	
				}
			}
		}
	}

	//find the file, open it
	fp=fnOpenFile(fp,open_mode);
	if(fp!=NULL)
	{
		fp->flag|=fopen_mode;
		return fp;
	}
	
	return NULL;
	
}

 /******************************************************************
* Function     : __fread
* Description : read file to target buffer
* Input     : BYTE *size - file size
*                DWORD count - number of read data
*                FILE_t *fp - file pointer
* Return   : DWORD  size of read data
*******************************************************************/

DWORD __fread(BYTE *buffer, BYTE size, DWORD count, FILE_t *fp )
{
	DWORD read_num;
	//readable or not?
	if(fp==NULL||((fp->flag&MODE_OPEN)==0)||((fp->flag&MODE_READ)==0)||
	   size==0||
	   count==0)
	{
		return 0;
	}
	if(fp->filesize==0||fp->startcluster==0)
	{
		return 0;
	}
	
	read_num=fnReadFile(buffer,size,count,fp);
	
	return read_num;
}

 /******************************************************************
* Function     : __fwrite
* Description : write file to target buffer
* Input     : BYTE *buffer - buffer address
*                BYTE size - size of read data
*                DWORD count - number of read data
*                FILE_t *fp - file pointer
* Return   : DWORD  size of written data
*******************************************************************/	
DWORD __fwrite(BYTE *buffer,BYTE size,DWORD count,FILE_t *fp)
{
	DWORD write_num;
	DWORD cluster_temp;

	if(fp==NULL||((fp->flag&MODE_OPEN)==0)||((fp->flag&MODE_WRITE)==0)||
	   size==0||
	   count==0)
	{
		return 0;
	}

	//set up starting address of store buffer for empty file
	if(fp->filesize==0||fp->startcluster==0)
	{
		cluster_temp=fnFAT32_NextEmptyCluster(fp->startcluster);
		fnFAT32_EditFat(cluster_temp,0x0FFFFFFF);
		fp->currentcluster.value=cluster_temp;
		
		fp->startcluster=cluster_temp;

	}
	
	//create a new cluster if current file operating pointer reach to the end of file
	else if((fp->curp%(current_fs->bpb.byte_per_sector*current_fs->bpb.sector_per_cluster)==0)&&(fp->curp==fp->filesize))
	{
		cluster_temp = fnFAT32_NextEmptyCluster(fp->currentcluster.value);
				//cycles[0]+=read_cycle();
		if(cluster_temp==0xFFFFFFFF)
		{
			return 0;
		}
		fnFAT32_EditFatChain(fp->currentcluster.value,cluster_temp);
		fnFAT32_EditFatChain(cluster_temp,0x0FFFFFFF);
		fp->currentcluster.value=cluster_temp;
		fp->currentcluster.offset++;
		
	}
	
	write_num=fnWriteFile(buffer,size,count,fp);
	return write_num;
}


 /******************************************************************
* Function     : __fseek
* Description : seek a file
* Input     :
*                FILE_t *fp - file pointer
*                long offset - offset
*                in base - base of offset
* Return   : DWORD  offset of file operating pointer to start of file
*******************************************************************/
DWORD __fseek(FILE_t *fp,long offset,int base)
{
	switch(base)
	{
		case 0:
		{
			if(offset<0||offset>=fp->filesize)
			{
				return 0xFFFFFFFF;
			}
			fp->curp=offset;
			break;
		}
		case 1:
		{
			if(offset+fp->curp>=fp->filesize)
			{
				return 0xFFFFFFFF;
			}
			fp->curp=offset+fp->curp;
			break;
		}
		case 2:
		{
			if(offset>0||offset<=fp->filesize)
			{
				return 0xFFFFFFFF;
			}
			fp->curp=fp->filesize+offset-1;
			break;
		}
	}
	fp->currentcluster=fnGetCurrentCluster(fp->curp,fp->startcluster);
	
	return fp->curp;
}
/******************************************************************
			關閉文件函數
用途: 指定文件指針,把它關閉
輸入: FILE_t *fp  文件指針
輸出: void
******************************************************************/	

 /******************************************************************
* Function     : __fclose
* Description : close a file
* Input     :
*                FILE_t *fp - file pointer
* Return   : void
*******************************************************************/
void __fclose(FILE_t *fp)
{
	free(fp);
	fp=(FILE_t *)0;
}	

 /******************************************************************
* Function     : __frename
* Description : rename a file
* Input     :
*                FILE_t *fp - file pointer
*                BYTE *name - target file name
* Return   : DWORD read data
*******************************************************************/

BYTE __frename(FILE_t* fp,BYTE *name)
{
	FILE_t *fp_temp;
	char name_temp[256];
	char char_lib[]="%/\\:";//
	BYTE *temp;
	if(fp==NULL)
	{
		return 0;
	}
	if(strlen((char*)name)>=255)
	{
		return 0;
	}
	
	memcpy(name_temp,name,strlen((char*)name)+1);
	temp=(BYTE*)strtok(name_temp,char_lib);
	if(strlen(name_temp)<256&&(strtok(NULL,char_lib)==NULL))
	{
		fp_temp=fnFindFile(fp->up_folder,(BYTE*)name_temp,FIND_FILE_MODE);
	}
	else
	{
		return 0;
	}
	if(fp_temp!=NULL||(strlen(strtok(name_temp,char_lib))!=strlen((char*)name)))
	{
		return 0;
	}
	else
	{
		memcpy(fp->filename,name,strlen((char*)name)+1);
		fnUpdateFILE(fp);
	}
	return 1;
}

 /******************************************************************
* Function     : __fdelete
* Description : remove a file
* Input     :
*                FILE_t *fp - file pointer
* Return   : 1 or 0-error
*******************************************************************/
BYTE __fdelete(FILE_t* fp)
{
	if(fp==NULL)
	{
		return 0;
	}

	fnFreeFile(fp);

	fnDeleteFileLabel(fp);
	
	return 1;
}


 /******************************************************************
* Function     : __fsearch
* Description : search a file
* Input     :
*                FBYTE *name - target file name
* Return   : FILELIST_t * file list pointer of target file
*******************************************************************/
FILELIST_t * __fsearch(BYTE *name)
{
	int i;
	FILELIST_t *file_list;
	char name_temp[256];
	char char_lib[]="%/\\:";
	BYTE searchlevel=0;
	BYTE num=0;
	BYTE *temp;
	
	file_list=(FILELIST_t *)malloc(sizeof(FILELIST_t));
	file_list->list=(FILE_t **)malloc(sizeof(FILE_t *)*256);//at most found 256 files
	file_list->num=256;
	
	
	
	memcpy(name_temp,name,strlen((char*)name)+1);
	temp=(BYTE*)strtok(name_temp,char_lib);
	if(strlen(name_temp)<=255&&(strtok(NULL,char_lib)==NULL))
	{	
		//start searching here
		fnSearchFile(2,name,searchlevel,&num,file_list);
	}
	else
	{
		
		return NULL;
	}
	for(i=num;i<file_list->num;i++)
	{
		file_list->list[i]=NULL;
	}
	
	return file_list;
}


 /******************************************************************
* Function     : __fcloselist
* Description : free FILELIST_t and fp
* Input     :
*                FILELIST_t * variable need to be free 
* Return   : NULL
*******************************************************************/
FILELIST_t * __fcloselist(FILELIST_t *filelist)
{
	DWORD i=0;
	if(filelist==NULL)
		return NULL;
	for(i=0;i<filelist->num;i++)
	{
		free(filelist->list[i]);
	}
	free(filelist->list);
	free(filelist);
	return NULL;
	
}

 /******************************************************************
* Function     : __fcreatedir
* Description :create a directory
* Input     :
*                FILELIST_t * path - path of the directory
*                BYTE *dir - name of directory
* Return   : 1 or 0-error
*******************************************************************/

BYTE __fcreatedir(BYTE *path,BYTE* dir)
{
	FILE_t * fp;
	char path_temp[256];
	BYTE* sub_name;
	BYTE* temp;
	char sub_name_temp[256];
	
	BYTE pn;
	DWORD upfolder;
	char char_lib[]="/\\";
	char invalid_char[]="%/\\:";
	
	
	memcpy(path_temp,path,strlen((char*)path)+1);
	
	sub_name=(BYTE*)strtok(path_temp,char_lib);
	if(strlen((char*)sub_name)!=2||sub_name[1]!=':')
	{
		return 0;
	}
	pn = sub_name[0]-'C';
	if(partition_table[pn]==0)
	{
#ifdef DEBUG
		printf("Error partition!\n");
#endif
		return 0;
	}
	current_fs = partition_table[pn]->fs;
      
	
	memcpy(sub_name_temp,dir,strlen((char*)dir)+1);
	temp=(BYTE*)strtok(sub_name_temp,invalid_char);
	if(strlen(sub_name_temp)>=255||(strtok(NULL,invalid_char)!=NULL))
	{
		return 0;
	}
	
	fp=(FILE_t *)malloc(sizeof(FILE_t));
	sub_name=(BYTE*)strtok(NULL,char_lib);
	
	fp->type=FILE_ATTR_DIRECTORY;
	fp->startcluster=2;
	fp->currentcluster.value=2;
	fp->currentcluster.offset=0;
		
	//there is directory with the same name

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产曰批免费观看久久久| 欧美日韩精品系列| 精品一二三四区| 国内精品伊人久久久久av影院 | 国产精品国产三级国产aⅴ中文| 日韩欧美国产一区二区三区| 欧美日本免费一区二区三区| 制服视频三区第一页精品| 精品国内片67194| 在线观看日韩毛片| 国产在线播放一区三区四| 蜜桃av一区二区| 亚洲成在线观看| 亚洲国产精品一区二区www在线 | 日韩欧美黄色影院| 精品国产精品网麻豆系列 | 色综合久久综合| 青青青爽久久午夜综合久久午夜 | 无码av免费一区二区三区试看| 蜜臀va亚洲va欧美va天堂| 国产精品一区二区91| 91精彩视频在线| 国产午夜亚洲精品羞羞网站| 亚洲成人黄色小说| 99视频一区二区| 欧美电视剧在线观看完整版| 中文字幕中文字幕在线一区| 日韩电影在线看| 色综合天天天天做夜夜夜夜做| 欧美精品一区视频| 理论片日本一区| 正在播放亚洲一区| 亚洲高清久久久| 久99久精品视频免费观看| caoporm超碰国产精品| 久久蜜桃一区二区| 国产91精品露脸国语对白| 欧美tickle裸体挠脚心vk| 激情五月婷婷综合| 日韩精品一区二区三区视频播放 | 91首页免费视频| 国产精品美女久久福利网站| 中文字幕一区视频| 国产成人在线视频播放| 久久综合九色综合97婷婷女人| 麻豆精品在线播放| 国产亚洲视频系列| 粉嫩一区二区三区在线看| 中文字幕免费不卡在线| 大陆成人av片| 亚洲一区免费观看| 91精品国产一区二区三区| 国产精品三级久久久久三级| 一本大道久久精品懂色aⅴ| 亚洲成av人片| 欧美国产综合一区二区| 色综合天天综合网国产成人综合天| 亚洲.国产.中文慕字在线| 在线成人午夜影院| 久草中文综合在线| 亚洲欧洲精品成人久久奇米网| www.成人在线| 免费看精品久久片| 亚洲激情中文1区| 国产亚洲欧美一区在线观看| 欧洲激情一区二区| 成人黄色在线看| 久99久精品视频免费观看| 中文字幕乱码一区二区免费| 欧美日韩五月天| 色综合久久六月婷婷中文字幕| 蜜桃一区二区三区在线| 亚洲激情一二三区| 国产精品日日摸夜夜摸av| 91精品国产色综合久久| 99久久伊人精品| 成人的网站免费观看| 国内精品视频一区二区三区八戒| 五月天视频一区| 亚洲精品乱码久久久久久久久| 夜夜嗨av一区二区三区中文字幕| 国产日韩av一区| 国产三级一区二区| 久久精品一区二区三区不卡| 精品国产乱码久久久久久图片| 日韩小视频在线观看专区| 欧美色大人视频| 久久久久久一级片| 欧美极品aⅴ影院| 国产精品视频麻豆| 国产午夜精品一区二区三区嫩草 | 91精品国产一区二区三区香蕉| 日韩视频中午一区| 日韩欧美不卡一区| 2019国产精品| 欧美精彩视频一区二区三区| 1024精品合集| 亚洲另类在线一区| 奇米在线7777在线精品| 国产精品一区二区无线| 99热国产精品| 欧美一区二区三区影视| 久久综合九色综合欧美亚洲| 国产精品区一区二区三| 亚洲一二三四在线| 国产精一区二区三区| 91高清视频免费看| 26uuu精品一区二区在线观看| 自拍偷拍亚洲欧美日韩| 国产乱色国产精品免费视频| 色综合色狠狠综合色| 精品国产乱码久久久久久影片| 一区二区三区不卡视频| 国产成人亚洲综合a∨婷婷图片| 色哟哟国产精品免费观看| 久久一区二区三区四区| 日韩电影在线免费观看| 一本一本大道香蕉久在线精品| 精品少妇一区二区三区免费观看 | 美女看a上一区| 色88888久久久久久影院野外| 久久先锋影音av| 青青草原综合久久大伊人精品| 99re热视频这里只精品| 欧美高清在线精品一区| 国产福利视频一区二区三区| 日韩欧美在线观看一区二区三区| 亚洲精品成a人| 成人免费视频视频在线观看免费 | 欧美成人综合网站| 美女视频黄久久| 日韩免费成人网| 激情文学综合网| 久久久不卡网国产精品二区| 国产69精品久久久久777| 国产欧美日韩久久| 不卡av在线网| 中文字幕在线不卡视频| 色久综合一二码| 丝袜亚洲精品中文字幕一区| 91精品国产91综合久久蜜臀| 国模无码大尺度一区二区三区 | 欧美国产一区视频在线观看| 一区二区免费在线| 欧美综合天天夜夜久久| 亚洲成av人影院在线观看网| 欧美一二三四区在线| 国产精品一区二区三区网站| 亚洲日本一区二区| 日韩欧美中文一区二区| 99re成人精品视频| 天堂成人免费av电影一区| 久久精品视频在线看| 97久久超碰国产精品电影| 日本特黄久久久高潮| 国产精品日韩成人| 91精品欧美综合在线观看最新| 国产女人aaa级久久久级| 成人99免费视频| 伊人性伊人情综合网| 精品国产一区二区三区久久久蜜月| 国产黑丝在线一区二区三区| 一片黄亚洲嫩模| 国产精品初高中害羞小美女文| 制服丝袜亚洲网站| 日本电影欧美片| 99这里只有精品| 麻豆专区一区二区三区四区五区| 日韩精品中文字幕在线一区| 91福利视频久久久久| 91视频com| 欧美无人高清视频在线观看| 91福利精品视频| 欧美精品aⅴ在线视频| 日韩亚洲国产中文字幕欧美| 日韩欧美精品在线视频| 久久久夜色精品亚洲| 国产精品久久久久三级| 亚洲制服丝袜在线| 美女高潮久久久| 91网上在线视频| 日韩午夜精品电影| ●精品国产综合乱码久久久久| 一区二区三区高清在线| 日本91福利区| 99re8在线精品视频免费播放| 欧美三级欧美一级| 国产欧美久久久精品影院 | 麻豆精品蜜桃视频网站| 99久久伊人精品| 91精品国产综合久久福利| 久久九九久精品国产免费直播| 亚洲精品欧美激情| 国产一区久久久| 欧美精品国产精品| 一区二区三区四区蜜桃| 国产成人aaa| 久久婷婷国产综合国色天香| 日本在线播放一区二区三区| 国产精品一区二区久激情瑜伽|