53 lines
1.1 KiB
C
53 lines
1.1 KiB
C
#ifndef FAT12_INTERNALS_H__
|
|
#define FAT12_INTERNALS_H__
|
|
|
|
struct fat_directory_entry {
|
|
uint8_t file_name[8];
|
|
uint8_t extension[3];
|
|
uint8_t file_attributes;
|
|
uint8_t reserved1;
|
|
uint8_t ctime_ms;
|
|
uint8_t ctime_hms[2];
|
|
uint8_t ctime_date[2];
|
|
uint8_t atime_date[2];
|
|
uint8_t ea_index[2];
|
|
uint8_t mtime_hms[2];
|
|
uint8_t mtime_date[2];
|
|
uint8_t first_cluster[2];
|
|
uint8_t file_size[4];
|
|
};
|
|
|
|
|
|
struct fat12_partition
|
|
{
|
|
struct pang_io *io;
|
|
|
|
// Number of bytes in a sector (512)
|
|
uint32_t sector_size;
|
|
uint8_t sector_buffer[512];
|
|
|
|
// These units are "sectors"
|
|
uint32_t fat_offset;
|
|
uint32_t fat_size;
|
|
uint32_t root_offset;
|
|
uint32_t first_offset;
|
|
uint32_t cluster_size;
|
|
|
|
// These are in single-unit quantities
|
|
uint32_t root_entries;
|
|
uint32_t cluster_count;
|
|
uint32_t cluster_bytes;
|
|
uint32_t sector_count;
|
|
|
|
void *fat;
|
|
uint16_t *taf;
|
|
};
|
|
|
|
enum fat_attributes {
|
|
FAT_ATTR_DIR = 0x10,
|
|
FAT_ATTR_FILE = 0x20,
|
|
};
|
|
|
|
uint32_t fat12_find_free_cluster(struct fat12_partition *part, uint32_t start);
|
|
|
|
#endif /* FAT12_INTERNALS_H__ */ |