| /* |
| * (C) Copyright 2002 |
| * Stäubli Faverges - <www.staubli.com> |
| * Pierre AUBERT p.aubert@staubli.com |
| * |
| * SPDX-License-Identifier: GPL-2.0+ |
| */ |
| |
| #ifndef _FDOS_H_ |
| #define _FDOS_H_ |
| |
| |
| #undef FDOS_DEBUG |
| |
| #ifdef FDOS_DEBUG |
| #define PRINTF(fmt,args...) printf (fmt ,##args) |
| #else |
| #define PRINTF(fmt,args...) |
| #endif |
| |
| /* Data structure describing media */ |
| typedef struct fs |
| { |
| unsigned long tot_sectors; |
| |
| int cluster_size; |
| int num_clus; |
| |
| int fat_start; |
| int fat_len; |
| int nb_fat; |
| int num_fat; |
| |
| int dir_start; |
| int dir_len; |
| |
| unsigned char *fat_buf; |
| |
| } Fs_t; |
| |
| /* Data structure describing one file system slot */ |
| typedef struct slot { |
| int (*map) (struct fs *fs, |
| struct slot *file, |
| int where, |
| int *len); |
| unsigned long FileSize; |
| |
| unsigned short int FirstAbsCluNr; |
| unsigned short int PreviousAbsCluNr; |
| unsigned short int PreviousRelCluNr; |
| |
| Directory_t dir; |
| } Slot_t; |
| |
| typedef struct file { |
| char *name; |
| int Case; |
| Fs_t *fs; |
| Slot_t subdir; |
| Slot_t file; |
| } File_t; |
| |
| |
| /* dev.c */ |
| int dev_read (void *buffer, int where, int len); |
| int dev_open (void); |
| int check_dev (BootSector_t *boot, Fs_t *fs); |
| |
| /* fat.c */ |
| unsigned int fat_decode (Fs_t *fs, unsigned int num); |
| int read_fat (BootSector_t *boot, Fs_t *fs); |
| |
| /* vfat.c */ |
| int vfat_lookup (Slot_t *dir, |
| Fs_t *fs, |
| Directory_t *dirent, |
| int *entry, |
| int *vfat_start, |
| char *filename, |
| int flags, |
| char *outname, |
| Slot_t *file); |
| |
| /* subdir.c */ |
| char *basename (char *name); |
| int open_subdir (File_t *desc); |
| int open_file (Slot_t *file, Directory_t *dir); |
| int read_file (Fs_t *fs, |
| Slot_t *file, |
| char *buf, |
| int where, |
| int len); |
| void init_subdir (void); |
| |
| /* fs.c */ |
| int fs_init (Fs_t *fs); |
| |
| |
| #endif |