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

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

?? tff.i

?? This is the latest VS1053B chip interface routines combined with Elm Chan s FatFs library. Whole cod
?? I
?? 第 1 頁 / 共 5 頁
字號:
	if (ofs > 0) {
		csize = (DWORD)fp->fs->csize * 512U;		/* Cluster size (byte) */
		if (ifptr > 0 &&
			(ofs - 1) / csize >= (ifptr - 1) / csize) {/* When seek to same or following cluster, */
			fp->fptr = (ifptr - 1) & ~(csize - 1);	/* start from the current cluster */
			ofs -= fp->fptr;
			clust = fp->curr_clust;
		} else {									/* When seek to back cluster, */
			clust = fp->org_clust;					/* start from the first cluster */
			if (clust == 0) {						/* If no cluster chain, create a new chain */
				clust = create_chain(0);
				if (clust == 1) goto fk_error;
				fp->org_clust = clust;
			}
			fp->curr_clust = clust;
		}
		if (clust != 0) {
			while (ofs > csize) {					/* Cluster following loop */
				if (fp->flag & 0x02) {			/* Check if in write mode or not */
					clust = create_chain(clust);	/* Force streached if in write mode */
					if (clust == 0) {				/* When disk gets full, clip file size */
						ofs = csize; break;
					}
				} else
					clust = get_cluster(clust);		/* Follow cluster chain if not in write mode */
				if (clust < 2 || clust >= fp->fs->max_clust) goto fk_error;
				fp->curr_clust = clust;
				fp->fptr += csize;
				ofs -= csize;
			}
			fp->fptr += ofs;
			fp->csect = (BYTE)(ofs / 512U);	/* Sector offset in the cluster */
			if (ofs % 512U) fp->csect++;
		}
	}

	if (fp->fptr > fp->fsize) {			/* Set changed flag if the file was extended */
		fp->fsize = fp->fptr;
		fp->flag |= 0x20;
	}

	return FR_OK;

fk_error:	/* Abort this file due to an unrecoverable error */
	fp->flag |= 0x80;
	return FR_RW_ERROR;
}




/*-----------------------------------------------------------------------*/
/* Create a directroy object                                             */
/*-----------------------------------------------------------------------*/

FRESULT f_opendir (
	DIR *dj,			/* Pointer to directory object to create */
	const char *path	/* Pointer to the directory path */
)
{
	FRESULT res;
	BYTE *dir;
	char fn[8+3+1];


	res = auto_mount(&path, 0);
	if (res == FR_OK) {
		res = trace_path(dj, fn, path, &dir);	/* Trace the directory path */
		if (res == FR_OK) {						/* Trace completed */
			if (dir) {							/* It is not the root dir */
				if (dir[11] & 0x10	) {	/* The entry is a directory */
	 				dj->clust =
						((DWORD)((WORD)(((WORD)*(volatile BYTE*)((&dir[20])+1)<<8)|(WORD)*(volatile BYTE*)(&dir[20]))) << 16) |
							(WORD)(((WORD)*(volatile BYTE*)((&dir[26])+1)<<8)|(WORD)*(volatile BYTE*)(&dir[26]));
					dj->sect = clust2sect(dj->clust);
					dj->index = 2;
				} else {						/* The entry is not a directory */
					res = FR_NO_FILE;
				}
			}
			dj->id = dj->fs->id;
		}
	}

	return res;
}




/*-----------------------------------------------------------------------*/
/* Read Directory Entry in Sequense                                      */
/*-----------------------------------------------------------------------*/

FRESULT f_readdir (
	DIR *dj,			/* Pointer to the directory object */
	FILINFO *finfo		/* Pointer to file information to return */
)
{
	FRESULT res;
	BYTE *dir, c;


	res = validate(dj->fs, dj->id);			/* Check validity of the object */
	if (res != FR_OK) return res;

	finfo->fname[0] = 0;
	while (dj->sect) {
		if (!move_window(dj->sect))
			return FR_RW_ERROR;
		dir = &dj->fs->win[(dj->index & 15) * 32];	/* pointer to the directory entry */
		c = dir[0];
		if (c == 0) break;							/* Has it reached to end of dir? */
		if (c != 0xE5 && !(dir[11] & 0x08	))	/* Is it a valid entry? */
			get_fileinfo(finfo, dir);
		if (!next_dir_entry(dj)) dj->sect = 0;		/* Next entry */
		if (finfo->fname[0]) break;					/* Found valid entry */
	}

	return FR_OK;
}




/*-----------------------------------------------------------------------*/
/* Get File Status                                                       */
/*-----------------------------------------------------------------------*/

FRESULT f_stat (
	const char *path,	/* Pointer to the file path */
	FILINFO *finfo		/* Pointer to file information to return */
)
{
	FRESULT res;
	DIR dj;
	BYTE *dir;
	char fn[8+3+1];


	res = auto_mount(&path, 0);
	if (res == FR_OK) {
		res = trace_path(&dj, fn, path, &dir);	/* Trace the file path */
		if (res == FR_OK) {						/* Trace completed */
			if (dir)	/* Found an object */
				get_fileinfo(finfo, dir);
			else		/* It is root dir */
				res = FR_INVALID_NAME;
		}
	}

	return res;
}




/*-----------------------------------------------------------------------*/
/* Truncate File                                                         */
/*-----------------------------------------------------------------------*/

FRESULT f_truncate (
	FIL *fp		/* Pointer to the file object */
)
{
	FRESULT res;
	CLUST ncl;


	res = validate(fp->fs, fp->id);		/* Check validity of the object */
	if (res != FR_OK) return res;
	if (fp->flag & 0x80) return FR_RW_ERROR;	/* Check error flag */
	if (!(fp->flag & 0x02)) return FR_DENIED;	/* Check access mode */

	if (fp->fsize > fp->fptr) {
		fp->fsize = fp->fptr;	/* Set file size to current R/W point */
		fp->flag |= 0x20;
		if (fp->fptr == 0) {	/* When set file size to zero, remove entire cluster chain */
			if (!remove_chain(fp->org_clust)) goto ft_error;
			fp->org_clust = 0;
		} else {				/* When truncate a part of the file, remove remaining clusters */
			ncl = get_cluster(fp->curr_clust);
			if (ncl < 2) goto ft_error;
			if (ncl < fp->fs->max_clust) {
				if (!put_cluster(fp->curr_clust, (CLUST)0x0FFFFFFF)) goto ft_error;
				if (!remove_chain(ncl)) goto ft_error;
			}
		}
	}

	return FR_OK;

ft_error:	/* Abort this file due to an unrecoverable error */
	fp->flag |= 0x80;
	return FR_RW_ERROR;
}




/*-----------------------------------------------------------------------*/
/* Get Number of Free Clusters                                           */
/*-----------------------------------------------------------------------*/

FRESULT f_getfree (
	const char *drv,	/* Pointer to the logical drive number (root dir) */
	DWORD *nclust,		/* Pointer to the variable to return number of free clusters */
	FATFS **fatfs		/* Pointer to pointer to corresponding file system object to return */
)
{
	FRESULT res;
	FATFS *fs;
	DWORD n, sect;
	CLUST clust;
	BYTE fat, f, *p;


	/* Get drive number */
	res = auto_mount(&drv, 0);
	if (res != FR_OK) return res;
	*fatfs = fs = FatFs;

	/* If number of free cluster is valid, return it without cluster scan. */
	if (fs->free_clust <= fs->max_clust - 2) {
		*nclust = fs->free_clust;
		return FR_OK;
	}

	/* Get number of free clusters */
	fat = fs->fs_type;
	n = 0;
	if (fat == 1) {
		clust = 2;
		do {
			if ((WORD)get_cluster(clust) == 0) n++;
		} while (++clust < fs->max_clust);
	} else {
		clust = fs->max_clust;
		sect = fs->fatbase;
		f = 0; p = 0;
		do {
			if (!f) {
				if (!move_window(sect++)) return FR_RW_ERROR;
				p = fs->win;
			}
			if (!1 || fat == 2) {
				if ((WORD)(((WORD)*(volatile BYTE*)((p)+1)<<8)|(WORD)*(volatile BYTE*)(p)) == 0) n++;
				p += 2; f += 1;
			} else {
				if ((DWORD)(((DWORD)*(volatile BYTE*)((p)+3)<<24)|((DWORD)*(volatile BYTE*)((p)+2)<<16)|((WORD)*(volatile BYTE*)((p)+1)<<8)|*(volatile BYTE*)(p)) == 0) n++;
				p += 4; f += 2;
			}
		} while (--clust);
	}
	fs->free_clust = n;
	if (fat == 3) fs->fsi_flag = 1;

	*nclust = n;
	return FR_OK;
}




/*-----------------------------------------------------------------------*/
/* Delete a File or Directory                                            */
/*-----------------------------------------------------------------------*/

FRESULT f_unlink (
	const char *path		/* Pointer to the file or directory path */
)
{
	FRESULT res;
	DIR dj;
	BYTE *dir, *sdir;
	DWORD dsect;
	char fn[8+3+1];
	CLUST dclust;


	res = auto_mount(&path, 1);
	if (res != FR_OK) return res;
	res = trace_path(&dj, fn, path, &dir);	/* Trace the file path */
	if (res != FR_OK) return res;			/* Trace failed */
	if (!dir) return FR_INVALID_NAME;		/* It is the root directory */
	if (dir[11] & 0x01	) return FR_DENIED;	/* It is a R/O object */
	dsect = dj.fs->winsect;
	dclust =
		((DWORD)((WORD)(((WORD)*(volatile BYTE*)((&dir[20])+1)<<8)|(WORD)*(volatile BYTE*)(&dir[20]))) << 16) |
		(WORD)(((WORD)*(volatile BYTE*)((&dir[26])+1)<<8)|(WORD)*(volatile BYTE*)(&dir[26]));
	if (dir[11] & 0x10	) {			/* It is a sub-directory */
		dj.clust = dclust;					/* Check if the sub-dir is empty or not */
		dj.sect = clust2sect(dclust);
		dj.index = 2;
		do {
			if (!move_window(dj.sect)) return FR_RW_ERROR;
			sdir = &dj.fs->win[(dj.index & 15) * 32];
			if (sdir[0] == 0) break;
			if (sdir[0] != 0xE5 && !(sdir[11] & 0x08	))
				return FR_DENIED;	/* The directory is not empty */
		} while (next_dir_entry(&dj));
	}

	if (!move_window(dsect)) return FR_RW_ERROR;	/* Mark the directory entry 'deleted' */
	dir[0] = 0xE5;
	dj.fs->winflag = 1;
	if (!remove_chain(dclust)) return FR_RW_ERROR;	/* Remove the cluster chain */

	return sync();
}




/*-----------------------------------------------------------------------*/
/* Create a Directory                                                    */
/*-----------------------------------------------------------------------*/

FRESULT f_mkdir (
	const char *path		/* Pointer to the directory path */
)
{
	FRESULT res;
	DIR dj;
	BYTE *dir, *fw, n;
	char fn[8+3+1];
	DWORD sect, dsect, tim;
	CLUST dclust, pclust;


	res = auto_mount(&path, 1);
	if (res != FR_OK) return res;
	res = trace_path(&dj, fn, path, &dir);	/* Trace the file path */
	if (res == FR_OK) return FR_EXIST;		/* Any file or directory is already existing */
	if (res != FR_NO_FILE) return res;

	res = reserve_direntry(&dj, &dir); 		/* Reserve a directory entry */
	if (res != FR_OK) return res;
	sect = dj.fs->winsect;
	dclust = create_chain(0);				/* Allocate a cluster for new directory table */
	if (dclust == 1) return FR_RW_ERROR;
	dsect = clust2sect(dclust);
	if (!dsect) return FR_DENIED;
	if (!move_window(dsect)) return FR_RW_ERROR;

	fw = dj.fs->win;
	memset(fw, 0, 512U);					/* Clear the directory table */
	for (n = 1; n < dj.fs->csize; n++) {
		if (disk_write(0, fw, ++dsect, 1) != RES_OK)
			return FR_RW_ERROR;
	}

	memset(&fw[0], ' ', 8+3);		/* Create "." entry */
	fw[0] = '.';
	fw[11] = 0x10	;
	tim = get_fattime();
	*(volatile BYTE*)(&fw[22])=(BYTE)(tim); *(volatile BYTE*)((&fw[22])+1)=(BYTE)((WORD)(tim)>>8); *(volatile BYTE*)((&fw[22])+2)=(BYTE)((DWORD)(tim)>>16); *(volatile BYTE*)((&fw[22])+3)=(BYTE)((DWORD)(tim)>>24);
	memcpy(&fw[32], &fw[0], 32); fw[33] = '.';	/* Create ".." entry */
	pclust = dj.sclust;
	*(volatile BYTE*)(&fw[   20])=(BYTE)(dclust >> 16); *(volatile BYTE*)((&fw[   20])+1)=(BYTE)((WORD)(dclust >> 16)>>8);
	if (dj.fs->fs_type == 3 && pclust == dj.fs->dirbase) pclust = 0;
	*(volatile BYTE*)(&fw[32+20])=(BYTE)(pclust >> 16); *(volatile BYTE*)((&fw[32+20])+1)=(BYTE)((WORD)(pclust >> 16)>>8);
	*(volatile BYTE*)(&fw[   26])=(BYTE)(dclust); *(volatile BYTE*)((&fw[   26])+1)=(BYTE)((WORD)(dclust)>>8);
	*(volatile BYTE*)(&fw[32+26])=(BYTE)(pclust); *(volatile BYTE*)((&fw[32+26])+1)=(BYTE)((WORD)(pclust)>>8);
	dj.fs->winflag = 1;

	if (!move_window(sect)) return FR_RW_ERROR;
	memset(&dir[0], 0, 32);						/* Clean-up the new entry */
	memcpy(&dir[0], fn, 8+3);			/* Name */
	dir[12] = fn[11];
	dir[11] = 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文乱码免费一区二区| 午夜欧美电影在线观看| 亚洲一区二区偷拍精品| 麻豆高清免费国产一区| 91电影在线观看| 国产精品网站在线| 久久精品99久久久| 日韩欧美视频一区| 亚洲成人高清在线| 91精品办公室少妇高潮对白| 国产亚洲欧美在线| 国产一区美女在线| 日韩你懂的在线观看| 天天综合天天综合色| 欧美午夜视频网站| 亚洲伦理在线精品| 成人av综合在线| 国产精品午夜在线观看| 国产精品综合二区| 久久色在线观看| 国产一区二区精品久久99| 精品国产第一区二区三区观看体验| 视频在线在亚洲| 在线不卡免费欧美| 日韩精品久久久久久| 欧美精品在线观看播放| 午夜精品久久久久久不卡8050| 欧美日韩三级在线| 亚洲电影你懂得| 欧美一区二区成人6969| 免费观看日韩av| 欧美r级在线观看| 国产一区二区伦理片| 国产午夜亚洲精品理论片色戒 | 欧美日韩综合在线| 亚洲精品乱码久久久久久久久| 色先锋aa成人| 午夜影院久久久| 日韩视频一区二区| 国产在线一区二区综合免费视频| 2020国产精品| 成人av网站免费| 亚洲欧美视频在线观看| 欧美亚州韩日在线看免费版国语版| 亚洲一区二区三区在线播放| 欧美日韩国产免费一区二区 | 国产精品91xxx| 国产精品少妇自拍| 在线亚洲高清视频| 蜜桃av一区二区三区电影| 精品日韩欧美一区二区| 国产成人综合在线播放| 亚洲日本电影在线| 91精品国产综合久久久久久久久久| 久久不见久久见免费视频7| 国产日韩欧美高清在线| 91猫先生在线| 亚洲在线视频网站| 成人免费高清视频在线观看| 中文字幕在线观看一区| 在线视频观看一区| 国产一区欧美一区| 一区二区三区高清在线| 欧美变态口味重另类| 99re热这里只有精品免费视频| 亚洲综合丁香婷婷六月香| 日韩欧美国产高清| 91小视频在线免费看| 裸体一区二区三区| 亚洲男人电影天堂| 欧美精品一区二区三区久久久| 91亚洲精品久久久蜜桃| 日本欧美久久久久免费播放网| 欧美国产日韩a欧美在线观看 | 久久久久高清精品| 一本大道久久a久久精二百| 麻豆精品国产传媒mv男同| 国产精品成人一区二区三区夜夜夜| 欧美丰满少妇xxxbbb| 成人天堂资源www在线| 播五月开心婷婷综合| 日韩黄色一级片| 亚洲色图视频网| 国产三级精品三级| 日韩欧美一区在线| 欧美在线制服丝袜| 成人激情小说乱人伦| 韩国欧美国产1区| 午夜视频一区二区| 亚洲在线视频网站| 国产精品视频一区二区三区不卡| 欧美大片顶级少妇| 欧美一区二区三区四区五区| 91网上在线视频| caoporn国产精品| 国产精品456| 韩国理伦片一区二区三区在线播放 | 亚洲精品视频在线观看网站| 国产欧美一区二区精品忘忧草| 日韩一级视频免费观看在线| 欧美视频一区二区三区在线观看 | 欧美性生活影院| 一本大道av一区二区在线播放| www.亚洲人| av电影在线观看完整版一区二区| 国产一区二区精品在线观看| 精品一区二区日韩| 国内精品免费**视频| 国产麻豆视频精品| 国产福利精品一区二区| 国产精品18久久久久久久网站| 精品一区二区精品| 国产麻豆成人精品| 欧美日韩一区二区三区高清| 色天天综合久久久久综合片| 色成人在线视频| 欧美在线三级电影| 777奇米四色成人影色区| 欧美精品高清视频| 欧美一区二区三区思思人| 91精品国产麻豆国产自产在线| 日韩一区二区不卡| www国产精品av| 国产精品久久久久四虎| 亚洲人快播电影网| 日韩在线一二三区| 国产精一区二区三区| 国产精品毛片无遮挡高清| 欧美日韩一区在线| 99re成人精品视频| 一本色道亚洲精品aⅴ| 欧美亚洲国产怡红院影院| 欧美日韩国产在线播放网站| 欧美精品99久久久**| 精品少妇一区二区三区视频免付费 | 欧美日韩一区视频| 日韩精品一区二区三区在线播放| 精品国产三级电影在线观看| 国产精品视频线看| 亚洲成人精品影院| 国产一区二区在线观看视频| 99热99精品| 91精品国产综合久久精品麻豆| 精品国产乱码久久久久久浪潮| 国产精品天干天干在观线| 亚洲午夜一区二区| 国产乱码精品一区二区三区忘忧草| 黄色小说综合网站| 久久爱另类一区二区小说| 99久久er热在这里只有精品15| 91成人国产精品| 久久久午夜精品| 亚洲一区中文在线| 国产美女视频一区| 色婷婷精品大在线视频| 精品盗摄一区二区三区| 一区二区三区四区不卡在线 | 成人av网站在线观看免费| 欧美美女喷水视频| 国产精品久久久久aaaa樱花| 丝袜美腿亚洲综合| 99久久精品99国产精品| 欧美videofree性高清杂交| 一区二区三区蜜桃| 国产不卡免费视频| 日韩精品专区在线影院观看| 一区二区三区国产豹纹内裤在线| 国产成人自拍网| 欧美精品精品一区| 一区二区三区高清不卡| 国产99久久久精品| 日韩你懂的在线播放| 亚洲综合在线第一页| eeuss鲁片一区二区三区在线看| 精品美女一区二区三区| 亚洲不卡一区二区三区| 色综合天天视频在线观看| 中文乱码免费一区二区| 国产酒店精品激情| 久久无码av三级| 国产在线国偷精品产拍免费yy| 欧美精品色一区二区三区| 自拍视频在线观看一区二区| 国产91色综合久久免费分享| 精品区一区二区| 另类综合日韩欧美亚洲| 欧美一区二区三区视频免费| 日韩中文字幕1| 欧美一区二区人人喊爽| 天天色综合天天| 欧美一区二区女人| 精品综合久久久久久8888| 日韩精品一区二区三区蜜臀 | 美女尤物国产一区| 4438x亚洲最大成人网| 日韩综合小视频| 日韩免费在线观看| 国产麻豆精品视频| 国产精品青草久久| 99久久精品费精品国产一区二区|