summaryrefslogtreecommitdiff
path: root/arm9/lib/NitroSDK/include/FS_file.h
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/lib/NitroSDK/include/FS_file.h')
-rw-r--r--arm9/lib/NitroSDK/include/FS_file.h226
1 files changed, 226 insertions, 0 deletions
diff --git a/arm9/lib/NitroSDK/include/FS_file.h b/arm9/lib/NitroSDK/include/FS_file.h
new file mode 100644
index 00000000..f870ad2a
--- /dev/null
+++ b/arm9/lib/NitroSDK/include/FS_file.h
@@ -0,0 +1,226 @@
+#ifndef NITRO_FS_FILE_H_
+#define NITRO_FS_FILE_H_
+
+#include "nitro.h"
+
+#include "FS_archive.h"
+
+#define FS_FILE_STATUS_BUSY 0x00000001
+#define FS_FILE_STATUS_CANCEL 0x00000002
+#define FS_FILE_STATUS_SYNC 0x00000004
+#define FS_FILE_STATUS_ASYNC 0x00000008
+#define FS_FILE_STATUS_IS_FILE 0x00000010
+#define FS_FILE_STATUS_IS_DIR 0x00000020
+#define FS_FILE_STATUS_OPERATING 0x00000040
+
+#define FS_FILE_NAME_MAX 127
+
+typedef enum FSSeekFileMode
+{
+ FS_SEEK_SET = 0,
+ FS_SEEK_CUR,
+ FS_SEEK_END
+} FSSeekFileMode;
+
+struct FSFile;
+
+#define FS_DMA_NOT_USE ((u32)~0)
+
+typedef struct FSDirPos
+{
+ struct FSArchive *arc;
+ u16 own_id;
+ u16 index;
+ u32 pos;
+}
+FSDirPos; // size = 0xC
+
+typedef struct FSFileID
+{
+ struct FSArchive *arc;
+ u32 file_id;
+}
+FSFileID;
+
+typedef struct
+{
+ union
+ {
+ FSFileID file_id;
+ FSDirPos dir_id;
+ };
+ u32 is_directory;
+ u32 name_len;
+ char name[128];
+}
+FSDirEntry;
+
+
+typedef struct
+{
+ FSDirPos pos;
+}
+FSSeekDirInfo;
+
+
+typedef struct
+{
+ FSDirEntry *p_entry;
+ BOOL skip_string;
+}
+FSReadDirInfo;
+
+
+typedef struct
+{
+ FSDirPos pos;
+ const char *path;
+ BOOL find_directory;
+ union
+ {
+ FSFileID *file;
+ FSDirPos *dir;
+ }
+ result;
+}
+FSFindPathInfo;
+
+
+typedef struct
+{
+ u8 *buf;
+ u32 buf_len;
+ u16 total_len;
+ u16 dir_id;
+}
+FSGetPathInfo;
+
+
+typedef struct
+{
+ FSFileID id;
+}
+FSOpenFileFastInfo;
+
+
+typedef struct
+{
+ u32 top;
+ u32 bottom;
+ u32 index;
+}
+FSOpenFileDirectInfo;
+
+
+typedef struct
+{
+ u32 reserved;
+}
+FSCloseFileInfo;
+
+
+typedef struct
+{
+ void *dst;
+ u32 len_org;
+ u32 len;
+}
+FSReadFileInfo;
+
+
+typedef struct
+{
+ const void *src;
+ u32 len_org;
+ u32 len;
+}
+FSWriteFileInfo;
+
+typedef struct FSFile
+{
+ FSFileLink link; // 0x00
+ struct FSArchive *arc; // 0x08
+ u32 stat; // 0xC
+ FSCommandType command; // 0x10
+ FSResult error; // 0x14
+ OSThreadQueue queue[1]; // 0x18
+ union {
+ struct
+ {
+ u32 own_id; // 0x20
+ u32 top; // 0x24
+ u32 bottom; // 0x28
+ u32 pos; // 0x2C
+ } file;
+ struct
+ {
+ FSDirPos pos; // 0x20
+ u32 parent; // 0x2C
+ } dir;
+ } prop; // 0x20
+
+ union {
+ FSReadFileInfo readfile; // 0x30
+ FSWriteFileInfo writefile; // 0x30
+
+ FSSeekDirInfo seekdir; // 0x30
+ FSReadDirInfo readdir; // 0x30
+ FSFindPathInfo findpath; // 0x30
+ FSGetPathInfo getpath; // 0x30
+ FSOpenFileFastInfo openfilefast; // 0x30
+ FSOpenFileDirectInfo openfiledirect; // 0x30
+ FSCloseFileInfo closefile; // 0x30
+ } arg; // 0x30
+}
+FSFile; // size = 0x50
+
+void FS_Init(u32 default_dma_no);
+BOOL FS_IsAvailable(void);
+void FS_InitFile(FSFile * p_file);
+int FSi_ReadFileCore(FSFile * p_file, void * dst, s32 len, BOOL async);
+BOOL FS_ConvertPathToFileID(FSFileID * p_file_id, const char * path);
+BOOL FS_OpenFileDirect(FSFile * p_file, FSArchive * p_arc, u32 image_top, u32 image_bottom, u32 file_index);
+BOOL FS_OpenFileFast(FSFile * p_file, FSFileID file_id);
+BOOL FS_OpenFile(FSFile * p_file, const char * path);
+BOOL FS_CloseFile(FSFile * p_file);
+BOOL FS_WaitAsync(FSFile * p_file);
+int FS_ReadFileAsync(FSFile * p_file, void * dst, s32 len);
+int FS_ReadFile(FSFile * p_file, void * dst, s32 len);
+BOOL FS_SeekFile(FSFile * p_file, s32 offset, FSSeekFileMode origin);
+BOOL FS_ChangeDir(const char * path);
+
+static inline u32 const FS_GetFileImageTop(volatile const FSFile * p_file) {
+ return p_file->prop.file.top;
+}
+
+static inline u32 const FS_GetLength(volatile const FSFile * p_file)
+{
+ return p_file->prop.file.bottom - p_file->prop.file.top;
+}
+
+static inline BOOL FS_IsCanceling(volatile const FSFile * p_file)
+{
+ return (p_file->stat & FS_FILE_STATUS_CANCEL) ? TRUE : FALSE;
+}
+
+static inline BOOL FS_IsFileSyncMode(volatile const FSFile * p_file)
+{
+ return (p_file->stat & FS_FILE_STATUS_SYNC) ? TRUE : FALSE;
+}
+
+static inline BOOL FS_IsBusy(volatile const FSFile * p_file)
+{
+ return p_file->stat & FS_FILE_STATUS_BUSY ? TRUE : FALSE;
+}
+
+static inline BOOL FS_IsSucceeded(volatile const FSFile * p_file)
+{
+ return (p_file->error == FS_RESULT_SUCCESS) ? TRUE : FALSE;
+}
+
+static inline BOOL FS_IsDir(volatile const FSFile * p_file)
+{
+ return (p_file->stat & FS_FILE_STATUS_IS_DIR) ? TRUE : FALSE;
+}
+
+#endif //NITRO_FS_FILE_H_