aboutsummaryrefslogtreecommitdiffstats
path: root/src/filesystem.h
blob: 6439f83ee6a39af954a0f444fdfa5a54c9e37f85 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#ifndef FILESYSTEM_H
#define FILESYSTEM_H

#include "gba/gba.h"

typedef enum {
    FS_OPEN_READ   = (1 << 0),
    FS_OPEN_WRITE  = (1 << 1),
    FS_OPEN_APPEND = (1 << 2),
} OpenMode;

typedef struct File {
    // File index offset.
    u8 index;
    // The offset within the file. Must always be valid, and so the File struct
    // shouldn't be manaully modified unless we are sure we know what we are
    // doing.
    u16 offset;
    // The mode of this file (read/write/append).
    OpenMode mode;
} File;

typedef enum {
    FS_SEEK_SET,
    FS_SEEK_CUR,
    FS_SEEK_END,
} SeekMode;

void fs_init(void);
File fs_open_file(char *name, OpenMode mode);
u16 fs_file_size(File *file);
int fs_seek(File *file, int offset, SeekMode mode);
u16 fs_write(u8 *src, u16 n_bytes, File *file);
u16 fs_read(u8 *dst, u16 n_bytes, File *file);

#endif // FILESYSTEM_H