summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/file_system.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/file_system.c b/src/file_system.c
index adddb5e..296478d 100644
--- a/src/file_system.c
+++ b/src/file_system.c
@@ -19,6 +19,12 @@ struct FileArchive
struct File *entries;
};
+struct SiroArchive
+{
+ u32 magic;
+ u8 *data;
+};
+
extern struct OpenedFile gUnknown_202D2A8[];
extern u32 gUnknown_203B094;
@@ -27,6 +33,7 @@ extern u32 gUnknown_202D2A4;
extern int sprintf(char *, const char *, ...);
u8 *GetSiroPtr(struct OpenedFile *);
+void NDS_DecompressRLE(void *);
void InitFileSystem(void)
{
@@ -143,3 +150,50 @@ struct OpenedFile *Call_OpenFileAndGetFileDataPtr(char *filename, struct FileArc
{
return OpenFileAndGetFileDataPtr(filename, arc);
}
+
+void CloseFile(struct OpenedFile *openedFile)
+{
+ s32 i;
+
+ for (i = 0; i < 64; i++)
+ {
+ if (&gUnknown_202D2A8[i] == openedFile)
+ {
+ gUnknown_202D2A8[i].file = NULL;
+ gUnknown_202D2A8[i].data = NULL;
+ gUnknown_203B094 = i;
+ return;
+ }
+ }
+}
+
+u8 *GetSiroPtr(struct OpenedFile *openedFile)
+{
+ struct SiroArchive *siro = (struct SiroArchive *)openedFile->data;
+
+ if (siro->magic == 0x30524953)
+ {
+ NDS_DecompressRLE(openedFile->data);
+ }
+ else if (siro->magic != 0x4F524953)
+ {
+ return openedFile->data;
+ }
+
+ openedFile->data = siro->data;
+
+ return openedFile->data;
+}
+
+void *UnusedGetSir0Ptr(struct SiroArchive *siro)
+{
+ if (siro->magic != 0x30524953)
+ return siro;
+
+ NDS_DecompressRLE(siro);
+ return siro->data;
+}
+
+void NDS_DecompressRLE(void *unused)
+{
+}