📄 ufat.h
字号:
/*
* UFAT3 Header File ufat.h
* Copyright (C) 2005 Sunnorth
*
* First Built: Yongliang 2005-8-9
*/
#ifndef _UFAT3_HEADER_UFAT_H_
#define _UFAT3_HEADER_UFAT_H_
#include "ufat_config.h"
#include "ufat_types.h"
#include "error.h"
#ifndef INCLUDE_PLATFORM_ECOS
#include "errno.h"
#endif
#include "vfs.h"
#include "command.h"
/*
* interface layer symbols extern
*/
extern int ufat_posix_errno;
extern int _getfserrcode (void);
extern void _clsfserrcode (void);
extern CLUSTER f_cluster_seq;
extern st_cds CDS[NBLKDEV];
extern UINT8 default_drive;
extern CODE INT16 Cp437[256];
extern dmatch sda_tmp_dm;
extern st_dpb DPB[NBLKDEV]; /* driver list */
extern UINT8 ufat_cache_buffer[NUMBUFF * 512]; /* Added By Ahan on: 2005/09/28 * */
extern st_buffer buffers[NUMBUFF];
extern UINT32 dbg_FATcache_clock;
extern UINT32 dbg_FATcache_hit_clock;
extern UINT32 dbg_FATcache_miss_clock;
extern int dbg_write_back_cnt, dbg_get_fat_cnt;
extern int dbg_write_back_clk, dbg_get_fat_clk;
/* driver layer */
extern RES dskxfer (UINT8 dsk, SECTOR blkno, buf_t buf, RWCOUNT numblocks, MODE mode);
/* logic block layer */
extern st_buffer_ptr firstbuf;
#if DIRECT_DMA_MODE
extern UINT8 xfermode;
#endif
#define b_next(bp) (bp ->b_next)
#define b_prev(bp) (bp ->b_prev)
//#define bufptr(fbp) ((buffer_ptr)(fbp))
extern RES clear_buffers (int dsk);
extern RES flush_buffers (int dsk);
extern RES flush1 (st_buffer_ptr bp);
extern void move_buffer (st_buffer_ptr bp, st_buffer_ptr firstbp);
extern st_buffer_ptr searchblock (SECTOR blkno, int dsk);
extern st_buffer_ptr getblk (UINT32 blkno, UINT8 dsk, UINT8 overwrite);
/* file system layer */
extern st_f_node f_nodes_array[NFILES];
dostime time_encode(st_dostime *t);
void UserGetTime(st_dostime *dt);
void UserGetDate(st_dosdate *dd);
#if (UFAT_WITH_PREFETCH_BUFFER == 0)
st_buffer_ptr getFATblock (struct dpb * dpbp, SECTOR clussec);
#endif
st_buffer_ptr getblock (UINT32 sec, UINT32 buf_type, struct dpb * dpbp, UINT8 bReadFromDSK);
st_buffer_ptr lbl_RefillBuff(SECTOR sect, UINT8 dsk, UINT32 buf_type, UINT8 bReadFromDSK);
#if (UFAT_WITH_PREFETCH_BUFFER == 0)
#define getblock(blkno, dsk) getblk(blkno, dsk, FALSE);
#define getblockOver(blkno, dsk) getblk(blkno, dsk, TRUE);
#endif
void adjust_freeclst(st_dpb_ptr dpbp, INT32 adjust);
/* */
/* special word packing prototypes */
/* */
#if ALIGN
# define getbyte(vp) (*(UINT8 *)(vp))
# define putbyte(vp, b) (*(UINT8 *)(vp)=b)
UINT32 getlong(void *);
UINT16 getword(void *);
void putlong(void *, UINT32);
void putword(void *, UINT16);
# if LITTLE_ENDIAN
# define putdirent(dp, bp) memcpy(bp, dp, DIRENT_SIZE);
# define getdirent(bp, dp) memcpy(dp, bp, DIRENT_SIZE);
# else
void getdirent(UINT8 * bp, struct ufat_dirent * dp);
void putdirent(struct ufat_dirent *dp, UINT8 *bp);
# endif
#else
# define getlong(vp) (*(UINT32 *)(vp))
# define getword(vp) (*(UINT16 *)(vp))
# define getbyte(vp) (*(UINT8 *)(vp))
# define putlong(vp, l) (*(UINT32 *)(vp)=l)
# define putword(vp, w) (*(UINT16 *)(vp)=w)
# define putbyte(vp, b) (*(UINT8 *)(vp)=b)
# define putdirent(dp, bp) memcpy(bp, dp, DIRENT_SIZE);
# define getdirent(bp, dp) memcpy(dp, bp, DIRENT_SIZE);
#endif
CLUSTER extend(st_f_node_ptr);
CLUSTER find_fat_free(st_f_node_ptr fnp);
void write_fsinfo(st_dpb_ptr dpbp);
void setdstart(st_dpb_ptr dpbp, st_dirent_ptr dentry, CLUSTER value);
CLUSTER getdstart(st_dpb_ptr dpbp, st_dirent_ptr dentry);
CLUSTER link_fat(st_dpb_ptr dpbp, CLUSTER Cluster1, CLUSTER Cluster2);
RES map_cluster(st_f_node_ptr fnp, MODE mode);
BOOL checkdstart(st_dpb_ptr dpbp, st_dirent_ptr dentry, CLUSTER value);
CLUSTER next_cluster(st_dpb_ptr dpbp, CLUSTER ClusterNum);
RES dos_extend(st_f_node_ptr);
void shrink_file(st_f_node_ptr);
UINT32 hwDMAExec (UINT32 dram, UINT32 sram, UINT8 dir, UINT32 size);
st_f_node_ptr xlt_fd (int fd);
UINT32 clus2phys(CLUSTER cl_no, st_dpb_ptr dpbp);
BOOL DeleteBlockInBufferCache(UINT32 blknolow, UINT32 blknohigh, UINT8 dsk, MODE mode);
#if DIRECT_DMA_MODE
INT32 rwblock(int fd, UINT32 buffer, RWCOUNT count, MODE mode);
#else
INT32 rwblock(int fd, void *buffer, RWCOUNT count, MODE mode);
#endif
st_dpb_ptr get_dpb(UINT8 dsk);
st_cds_ptr get_cds(UINT8 drive);
UINT8 fat_toupper(INT8 c);
void _5c_to_ff(UINT8 *str);
void _ff_to_5c(UINT8 *str);
void true_current_path(char *path);
RES check_path_length (char *p_name, UINT16 len);
void pre_truename(char *dest);
void pre_truename_dir(char *dest);
RES truename(const char *src, char *dest);
int char2uni(UINT8 **rawstring, UNI_CHAR *uni);
int utf8_to_oemcp(UTF8 *Source, int SourceSize, INT8 *Dest, int DestSize);
void wipe_out(st_f_node_ptr fnp);
/* UTF-16 management functions */
int fd32_utf16to32(const UTF16 *s, UTF32 *Ch);
int fd32_utf32to16(UTF32 Ch, UTF16 *s);
/* UTF-8 management functions */
int fd32_utf8to32(const UTF8 *s, UTF32 *Ch);
int fd32_utf32to8(UTF32 Ch, UTF8 *s);
int utf8_stricmp (const UTF8 *s1, const UTF8 *s2);
int utf8_strupr (UTF8 *Dest, const UTF8 *Source);
/* Conversion functions between UTF-8 and UTF-16 */
int fd32_utf8to16(const UTF8 *Utf8, UTF16 *Utf16);
int fd32_utf16to8(const UTF16 *Utf16, UTF8 *Utf8);
/* Case conversion functions */
UTF32 unicode_toupper(UTF32 Ch);
unsigned int ChartToUTF8(UINT8 *Chart, UINT8 *UTF8Chart);
st_buffer_ptr getblock_from_off(st_f_node_ptr fnp);
st_buffer_ptr getDIRblock_from_off(st_f_node_ptr fnp);
void release_f_node(st_f_node_ptr fnp);
void swap_deleted(UINT8 *name);
void split_path_LFN(char *FullPath, char *Path, char *Name);
UINT8 check_lfn(char *name);
st_f_node_ptr get_f_node (void);
int fd32_gen_short_fname (char *Dest, char *Source, INT32 Flags);
int fd32_build_fcb_name (char *Dest, char *Source);
int fd32_expand_fcb_name (char *Dest, char *Source, UINT8 NTRes);
int fd32_compare_fcb_names(char *Name1, char *Name2);
char lfn_checksum (tDirEntry *D);
RES media_check(st_dpb_ptr dpbp);
int ParseDosName(char *filename, char *fcbname, int bAllowWildcards);
void dir_init_fnode(st_f_node_ptr fnp, CLUSTER dirstart);
int fat_find(st_f_node_ptr fnp, char *FileSpec, INT32 Flags, tFatFind *Ff);
int ufat_readdir(st_f_node_ptr Dir, tFatFind *Ff);
int dir_lfnread(st_f_node_ptr fnp, tDirEntry *shortdir);
int dir_lfnwrite(st_f_node_ptr fnp, tDirEntry *shortdir);
RES dir_write(st_f_node_ptr fnp);
RES dir_read(st_f_node_ptr fnp);
int uni2char(UNI_CHAR uni, unsigned char *out);
int char2uni(unsigned char **rawstring, UNI_CHAR *uni);
int xlt_fnp (st_f_node_ptr fnp);
st_f_node_ptr descend_path(char *Path, tFatFind *D);
dosdate dos_getdate(void);
void init_direntry(st_dirent_ptr dentry, unsigned attrib, CLUSTER cluster);
void dir_close(st_f_node_ptr fnp);
int fetch_lfn(tDirEntry *Buffer, int BufferPos, INT16 *Name);
int fat_creat(st_f_node_ptr fnp, char *Name, INT8 Attr);
int allocate_lfn_dir_entries(st_f_node_ptr fnp, tDirEntry *D, char *FileName);
int allocate_sfn_dir_entry(st_f_node_ptr fnp, tDirEntry *D, char *FileName);
char *itoa(int value, char *string, int radix);
int gen_short_fname(st_f_node_ptr fnp, char *LongName, char *ShortName);
int split_lfn(tLfnEntry *Slot, tDirEntry *D, char *LongName, int *NumSlots);
int find_empty_dir_entries(st_f_node_ptr fnp, int NumEntries);
UTF32 unicode_toupper(UTF32 Ch);
int oemcp_to_utf8(char *Source, UTF8 *Dest);
void copy_char_in_lfn_slot(tLfnEntry *Slot, int SlotPos, UTF16 Ch);
dostime dos_gettime(void);
int handle_error_code (int);
unsigned int UTF8ToChart(char *Dest, char *Source);
RES remove_lfn_entries(st_f_node_ptr fnp);
RES delete_dir_entry(st_f_node_ptr fnp);
char* time_decode(UINT16 *tp, char *timec);
char* date_decode(UINT16 *dp, char *datec);
char *init_dir_startcluster(char *Path, st_f_node_ptr fnp);
BOOL fcbmatch(const char *fcbname1, const char *fcbname2);
st_f_node_ptr dir_open(char *dirname);
BOOL wild_match(char *match, char *dir);
st_f_node_ptr split_path(char * path, char * fcbname);
BOOL find_fname(st_f_node_ptr fnp, char *fcbname, int attr);
//RES Read_DBR(UINT8 dsk);
RES Read_DBR(UINT8 dsk,UINT32 offset1 );
void read_fsinfo(st_dpb_ptr dpbp);
int fat_Format (UINT8 dsk, st_fmt *fmt);
//int fat_Format (UINT8 dsk,UINT8 FATType);
RES alloc_find_free(st_f_node_ptr fnp, char *path, char *fcbname);
int fs_findnext(struct f_info *f_info);
BOOL fcmp_wild(const char * match, const char * dir, unsigned n);
void ConvertName83ToNameSZ(char * destSZ, const char * srcFCBName);
RES extend_dir(st_f_node_ptr fnp);
BOOL find_free(st_f_node_ptr fnp);
void fs_getdiskfree ( UINT32 * total_clusters,
UINT32 * sector_per_cluster,
UINT32 * byte_per_sector, UINT8 dsk);
/* * * * * * * * * * * * * * fat_API define start * * * * * * * * * * * * * */
/* parameter is name string api define */
#if LFN
/* mapping common name to LFN api and short name api */
# define fat_unlink fs_lfndelete
# define fat_mkdir fs_lfnmkdir
# define fat_open fs_lfnopen
# define fat_rename fs_lfnrename
# define fat_rmdir fs_lfnrmdir
# define fat_chdir fs_lfncd
# define fat_findfirst fs_lfnfindfirst
# define fat_findnext fs_lfnfindnext
# define fat_deleteall fs_lfndeleteall
# define fat_opendir fs_lfnopendir
int fs_lfndelete(char * dirpath);
int fs_lfnmkdir(char * dirpath);
int fs_lfnopen(char *path, unsigned flags, unsigned attrib);
int fs_lfnrename(char * path1, char * path2);
int fs_lfnrmdir(char * dirpath);
int fs_lfncd(char * PathName);
int fs_lfnfindfirst(char *name, struct f_info *f_info, unsigned char attr);
int fs_lfnfindnext(struct f_info *f_info);
int fs_lfndeleteall (char *);
#else
# define fat_unlink fs_delete
# define fat_mkdir fs_mkdir
# define fat_open fs_fopen
# define fat_rename fs_rename
# define fat_rmdir fs_rmdir
# define fat_chdir fs_cd
# define fat_findfirst fs_findfirst
# define fat_findnext fs_findnext
# define fat_deleteall fs_deleteall
# define fat_opendir dir_open
int fs_delete(char * path);
int fs_mkdir(char * dir);
int fs_fopen(char *path, unsigned flags, unsigned attrib);
int fs_rename(char * path1, char * path2);
int fs_rmdir(char * path);
int fs_cd(char * PathName);
int fs_findfirst(char *name, struct f_info *f_info, unsigned char attr);
int fs_findnext(struct f_info *f_info);
int fs_deleteall (char *);
#endif /* end of LFN */
char *fs_getcwd(char *buf, int buflen);
int fs_fclose(int fd);
long fs_fread(int fd, void *bp, RWCOUNT n);
long fs_fwrite(int fd, void *bp, RWCOUNT n);
CLUSTER fs_free(unsigned char disk);
long fs_fseek(int fd, long foffset, int origin);
unsigned long fs_getfsize(int fd);
int fs_setfattr(int fd, unsigned char attrp);
int fs_getfattr(int fd);
BOOL fs_setfsize(int fd, long size);
#ifdef _555_FS_
int fs_setftime(int fd, unsigned short, unsigned short, unsigned short); // 2004-11-23 Yongliang change argument list
int fs_getftime (int fd, unsigned short *, unsigned short *, unsigned short *, unsigned short *, unsigned short *); // 2004-11-23 Yongliang change function
#else
int fs_setftime(int fd, dosdate dp, dostime tp);
int fs_getftime(int fd, dosdate * dp, dostime * tp);
#endif
dostime fs_gettime(void);
dosdate fs_getdate(void);
int fs_format(unsigned char Drv, unsigned char FAT_Type);
int fs_init(void);
int fs_mount (unsigned char);
int fs_unmount (unsigned char);
int fs_getinfo (char *, char *, char *, unsigned long *, unsigned long *, unsigned char dsk);
/* * * * * * * * * * * * * * fat_API define end * * * * * * * * * * * * * */
/* misc api define */
#ifndef __MISC__
void *memcpy(void * d, const void * s, int n);
void *memset(void *, int, int);
int memcmp( const void *buf1, const void *buf2, int count );
char *strcpy(char *, const char *);
char *strcat(char *, const char *);
unsigned int strlen(const char *);
char *strrchr( const char *string, int c );
char *strchr( const char *string, int c );
int strcmp( const char *string1, const char *string2 );
char *strpbrk( const char *string, const char *strCharSet );
#endif
#endif /* _UFAT3_HEADER_UFAT_H_ */
/* end of file */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -