Espresso 0.0.1b

This commit is contained in:
2025-06-27 14:48:06 -05:00
parent fca025a9bf
commit c336584114
39 changed files with 2676 additions and 936 deletions

View File

@ -3,6 +3,52 @@
#include <types.h>
void duckfs_init(void);
#define DUCKFS_MAGIC "DUCKFS1"
#define DUCKFS_NAME_LEN 32
typedef enum { DUCKFS_TYPE_FILE = 0, DUCKFS_TYPE_DIR = 1, DUCKFS_TYPE_SYMLINK = 2 } duckfs_type_t;
typedef struct {
char name[DUCKFS_NAME_LEN];
duckfs_type_t type;
uint8_t permissions; /* rwxrwxrwx packed into 9 bits */
uint16_t uid;
uint16_t gid;
uint64_t size;
uint64_t created;
uint64_t modified;
uint64_t first_block_lba;
uint64_t next_file_lba;
uint64_t child_lba; /* only for directories */
} __attribute__((packed)) duckfs_file_header_t;
typedef struct {
char magic[8]; /* "DUCKFS1\0" */
uint32_t block_size;
uint64_t total_blocks;
uint64_t root_header_lba;
uint64_t free_list_lba;
uint32_t fs_version;
} __attribute__((packed)) duckfs_superblock_t;
struct free_block {
uint64_t next;
};
/* DuckFS API */
int32_t duckfs_mount(void);
int32_t duckfs_find(const char* path, duckfs_file_header_t* out);
int32_t duckfs_create_file(const char* name, const void* content, size_t size, uint16_t uid, uint16_t gid, uint8_t perms, duckfs_file_header_t* parent_dir);
int32_t duckfs_create_dir(const char* name, uint16_t uid, uint16_t gid, uint8_t perms, duckfs_file_header_t* parent_dir);
int32_t duckfs_delete_file(const char* name, duckfs_file_header_t* parent_dir);
int32_t duckfs_delete_dir(const char* name, duckfs_file_header_t* parent_dir);
int32_t duckfs_read_file(const duckfs_file_header_t* file, void* buffer, size_t size);
int32_t duckfs_write_data(duckfs_file_header_t* file, const void* data, size_t offset, size_t length);
int32_t duckfs_append_data(duckfs_file_header_t* file, const void* data, size_t length);
int32_t duckfs_truncate(duckfs_file_header_t* file, size_t new_size);
#endif

38
include/fs/fat16.h Normal file
View File

@ -0,0 +1,38 @@
#ifndef _FAT16_H
#define _FAT16_H
#include <types.h>
#define FAT16_MAX_FILENAME 256
#define FAT16_ATTR_DIRECTORY 0x10
typedef struct {
uint8_t drive;
uint32_t fat_start;
uint32_t root_dir_start;
uint32_t data_start;
uint16_t bytes_per_sector;
uint8_t sectors_per_cluster;
uint16_t root_entry_count;
uint32_t current_dir_cluster;
} fat16_t;
typedef struct {
char name[FAT16_MAX_FILENAME];
uint8_t attr;
uint32_t cluster;
uint32_t size;
} fat16_dir_entry_t;
int32_t fat16_init(uint8_t drive);
uint32_t cluster_to_lba(uint16_t cluster);
uint16_t fat16_get_fat_entry(uint16_t cluster);
uint16_t fat16_alloc_cluster(void);
int32_t fat16_list_dir(fat16_dir_entry_t* entries, size_t max_entries);
int32_t fat16_change_dir(const char* dirname);
int32_t fat16_read_file(const char* filename, void* buffer, size_t max_size);
int32_t fat16_write_file(const char* filename, const void* data, size_t size);
#endif

View File

@ -8,10 +8,15 @@
int32_t fat32_init(int32_t drive); /* 0 = primary master */
int32_t fat32_list_root(void);
int32_t fat32_read_file(const char *name, uint8_t *buffer, uint32_t max_len);
int32_t fat32_write_file(const char *name, const uint8_t *buffer, uint32_t len);
int32_t fat32_create_file(const char *name);
int32_t fat32_create_directory(const char *name);
int32_t fat32_change_directory(const char *name);
void format_83_name(const char* input, char* output);
#endif

View File

@ -5,16 +5,6 @@
typedef int32_t FILE;
void vfs_init(void);
FILE create_file(char* filename, char type, char encryption, FILE parent);
int32_t delete_file(FILE file);
FILE open_file(char* filename);
FILE write_file(FILE file, void* data, size_t len);
int32_t read_file(FILE file, void* buf, size_t buflen);
int32_t reset_read_offset(FILE file);
#endif