#ifndef __FAT_FILELIB_H__ #define __FAT_FILELIB_H__ #include "fat_opts.h" #include "fat_access.h" #include "fat_list.h" //----------------------------------------------------------------------------- // Defines //----------------------------------------------------------------------------- #ifndef SEEK_CUR #define SEEK_CUR 1 #endif #ifndef SEEK_END #define SEEK_END 2 #endif #ifndef SEEK_SET #define SEEK_SET 0 #endif #ifndef EOF #define EOF (-1) #endif //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- struct sFL_FILE; struct cluster_lookup { uint32 ClusterIdx; uint32 CurrentCluster; }; typedef struct sFL_FILE { uint32 parentcluster; uint32 startcluster; uint32 bytenum; uint32 filelength; int filelength_changed; char path[FATFS_MAX_LONG_FILENAME]; char filename[FATFS_MAX_LONG_FILENAME]; uint8 shortfilename[11]; #ifdef FAT_CLUSTER_CACHE_ENTRIES uint32 cluster_cache_idx[FAT_CLUSTER_CACHE_ENTRIES]; uint32 cluster_cache_data[FAT_CLUSTER_CACHE_ENTRIES]; #endif // Cluster Lookup struct cluster_lookup last_fat_lookup; // Read/Write sector buffer uint8 file_data_sector[FAT_SECTOR_SIZE]; uint32 file_data_address; int file_data_dirty; // File fopen flags uint8 flags; #define FILE_READ (1 << 0) #define FILE_WRITE (1 << 1) #define FILE_APPEND (1 << 2) #define FILE_BINARY (1 << 3) #define FILE_ERASE (1 << 4) #define FILE_CREATE (1 << 5) struct fat_node list_node; } FL_FILE; //----------------------------------------------------------------------------- // Prototypes //----------------------------------------------------------------------------- // External void fl_init(void); void fl_attach_locks(void (*lock)(void), void (*unlock)(void)); int fl_attach_media(fn_diskio_read rd, fn_diskio_write wr); void fl_shutdown(void); // Standard API void* fl_fopen(const char *path, const char *modifiers); void fl_fclose(void *file); int fl_fflush(void *file); int fl_fgetc(void *file); char * fl_fgets(char *s, int n, void *f); int fl_fputc(int c, void *file); int fl_fputs(const char * str, void *file); int fl_fwrite(const void * data, int size, int count, void *file ); int fl_fread(void * data, int size, int count, void *file ); int fl_fseek(void *file , long offset , int origin ); int fl_fgetpos(void *file , uint32 * position); long fl_ftell(void *f); int fl_feof(void *f); int fl_remove(const char * filename); // Equivelant dirent.h typedef struct fs_dir_list_status FL_DIR; typedef struct fs_dir_ent fl_dirent; FL_DIR* fl_opendir(const char* path, FL_DIR *dir); int fl_readdir(FL_DIR *dirls, fl_dirent *entry); int fl_closedir(FL_DIR* dir); // Extensions void fl_listdirectory(const char *path); int fl_createdirectory(const char *path); int fl_is_dir(const char *path); int fl_format(uint32 volume_sectors, const char *name); // Test hooks #ifdef FATFS_INC_TEST_HOOKS struct fatfs* fl_get_fs(void); #endif //----------------------------------------------------------------------------- // Stdio file I/O names //----------------------------------------------------------------------------- #ifdef USE_FILELIB_STDIO_COMPAT_NAMES #define FILE FL_FILE #define fopen(a,b) fl_fopen(a, b) #define fclose(a) fl_fclose(a) #define fflush(a) fl_fflush(a) #define fgetc(a) fl_fgetc(a) #define fgets(a,b,c) fl_fgets(a, b, c) #define fputc(a,b) fl_fputc(a, b) #define fputs(a,b) fl_fputs(a, b) #define fwrite(a,b,c,d) fl_fwrite(a, b, c, d) #define fread(a,b,c,d) fl_fread(a, b, c, d) #define fseek(a,b,c) fl_fseek(a, b, c) #define fgetpos(a,b) fl_fgetpos(a, b) #define ftell(a) fl_ftell(a) #define feof(a) fl_feof(a) #define remove(a) fl_remove(a) #define mkdir(a) fl_createdirectory(a) #define rmdir(a) 0 #endif #endif