56 if (sector[0] ==
'F' && sector[1] ==
'S') {
59 int ofst = 3 + i * 36;
61 for (
int j = 0; j < 32; j++) {
62 files[i].name[j] = (char)sector[ofst + j];
64 files[i].lba = (sector[ofst + 32] << 24) |
65 (sector[ofst + 33] << 16) |
66 (sector[ofst + 34] << 8) |
75 if (lba >= 100 && ((lba - 100) % 2) == 0) {
113 for (
int i = 0; i < 512; i++) sector[i] = 0;
119 int offset = 3 + i * 36;
120 for (
int j = 0; j < 32 &&
files[i].name[j]; j++) {
123 sector[offset + 32] = (
uint8_t)(
files[i].lba >> 24) & 0xFF;
124 sector[offset + 33] = (
files[i].lba >> 16) & 0xFF;
125 sector[offset + 34] = (
files[i].lba >> 8) & 0xFF;
126 sector[offset + 35] =
files[i].lba & 0xFF;
175 static char buff[512];
184 for (
int j = 0;
files[i].name[j]; j++) {
185 if (pos < 511) buff[pos++] =
files[i].name[j];
187 if (pos < 511) buff[pos++] =
'\n';
218 assert(0,
"fsnextlba: no free lbas available");
242 if (lba == 0)
return NULL;
244 static char content[512];
251 for (i = 0; i < 511 && sector[i] != 0; i++) {
252 content[i] = (char)sector[i];
287 for (
int i = 0; i < 512; i++) sector[i] = 0;
288 for (
int i = 0; content[i] && i < 511; i++) sector[i] = (
uint8_t)content[i];
294 fsadd(heap, name, lba);
327 assert(index != -1,
"fsdelete: file not found");
338 for (
int i = index; i <
file_count - 1; i++) {
347 for (
int i = 0; i < 512; i++) sector[i] = 0;
353 int offset = 3 + i * 36;
354 for (
int j = 0; j < 32 &&
files[i].name[j]; j++) {
357 sector[offset + 32] = (
uint8_t)(
files[i].lba >> 24) & 0xFF;
358 sector[offset + 33] = (
files[i].lba >> 16) & 0xFF;
359 sector[offset + 34] = (
files[i].lba >> 8) & 0xFF;
360 sector[offset + 35] =
files[i].lba & 0xFF;
367 for (
int i = 0; i < 512; i++) zero_sector[i] = 0;
399 for (
int i = 0; i < 512; i++) sector[i] = 0;
401 uint32_t btw = (size > 511) ? 511 : size;
402 for (
uint32_t i = 0; i < btw; i++) {
409 fsadd(heap, name, lba);
435 if (lba == 0)
return 0;
440 uint32_t btr = (max_size > 512) ? 512 : max_size;
441 for (
uint32_t i = 0; i < btr; i++) {
442 buffer[i] = sector[i];
char * __fsread(const char *name)
fsread reads a files contents from disk into memory
static fs_entry_t files[32]
char * __fslist(void)
fslist returns a newline-separated listing of all files
void __fsinit(arena_t *heap)
fsinit initializes the filesystem table from disk
void __fsdelete(const char *name)
fsdelete removes a file from the filesystem
uint32_t __fsnextlba(void)
fsnextlba finds the next unused lba for a new file
uint32_t __fsfind(const char *name)
fsfind searches the filesystem for a file by name
int __fswriteb(arena_t *heap, const char *name, uint8_t *data, uint32_t size)
fswriteb writes raw byte data to a file on disk
int __fswrite(arena_t *heap, const char *name, const char *content)
fswrite writes text content to a file on disk
static uint32_t lba_map[32]
int __fsreadb(const char *name, uint8_t *buffer, uint32_t max_size)
fsreadb reads raw byte data from a file off disk
void __fsadd(arena_t *heap, const char *name, uint32_t lba)
fsadd adds a new file entry to the filesystem
int strcmp(const char *a, const char *b)
void strcpy(char *dest, const char *src)