JKRFileLoader, JKRFileFinder, and JKRThread (#60)

* JKRFileLoader OK

* JKRFileFinder progress

* JKRFileFinder OK

* JKRFileCache fix virtual function signatures

* added OSThread and OSContext types

* JKRThread fixed nonmatching functions

Co-authored-by: Julgodis <>
Co-authored-by: Pheenoh <pheenoh@gmail.com>
This commit is contained in:
Jonathan Wase
2021-01-03 22:48:07 -05:00
committed by GitHub
co-authored by Julgodis <> Pheenoh
parent 922a0df5ea
commit 0be0a7ea94
18 changed files with 387 additions and 123 deletions
@@ -8,7 +8,16 @@ class JKRHeap;
class JKRDvdFile;
class JKRArchive : public JKRFileLoader {
public:
class SDirEntry {};
struct SDirEntry {
u8 type_flags;
u8 field_0x1;
u16 id;
char* name;
u16 field_0x8;
u16 num_entries;
s32 first_file_index;
};
class SDIFileEntry {};
enum EMountMode {
@@ -73,13 +82,13 @@ public:
public:
/* vt[04] */ virtual void becomeCurrent(char const*); /* override */
/* vt[05] */ virtual void getResource(char const*); /* override */
/* vt[06] */ virtual void getResource(u32, char const*); /* override */
/* vt[05] */ virtual void* getResource(char const*); /* override */
/* vt[06] */ virtual void* getResource(u32, char const*); /* override */
/* vt[07] */ virtual void readResource(void*, u32, char const*); /* override */
/* vt[08] */ virtual void readResource(void*, u32, u32, char const*); /* override */
/* vt[09] */ virtual void removeResourceAll(void); /* override */
/* vt[10] */ virtual void removeResource(void*); /* override */
/* vt[11] */ virtual void detachResource(void*); /* override */
/* vt[10] */ virtual bool removeResource(void*); /* override */
/* vt[11] */ virtual bool detachResource(void*); /* override */
/* vt[12] */ virtual void getResSize(void const*) const; /* override */
/* vt[13] */ virtual void countFile(char const*) const; /* override */
/* vt[14] */ virtual void getFirstFile(char const*) const; /* override */
@@ -12,7 +12,7 @@ public:
void open(long);
/* vt[09] */ void removeResourceAll(void); /* override */
/* vt[10] */ void removeResource(void*); /* override */
/* vt[10] */ bool removeResource(void*); /* override */
/* vt[15] */ void getExpandedResSize(void const*) const; /* override */
/* vt[16] */ void fetchResource(JKRArchive::SDIFileEntry*, u32*); /* override */
@@ -31,13 +31,13 @@ protected:
public:
/* vt[04] */ virtual void becomeCurrent(char const*); /* override */
/* vt[05] */ virtual void getResource(char const*); /* override */
/* vt[06] */ virtual void getResource(u32, char const*); /* override */
/* vt[05] */ virtual void* getResource(char const*); /* override */
/* vt[06] */ virtual void* getResource(u32, char const*); /* override */
/* vt[07] */ virtual void readResource(void*, u32, char const*); /* override */
/* vt[08] */ virtual void readResource(void*, u32, u32, char const*); /* override */
/* vt[09] */ virtual void removeResourceAll(void); /* override */
/* vt[10] */ virtual void removeResource(void*); /* override */
/* vt[11] */ virtual void detachResource(void*); /* override */
/* vt[10] */ virtual bool removeResource(void*); /* override */
/* vt[11] */ virtual bool detachResource(void*); /* override */
/* vt[12] */ virtual void getResSize(void const*) const; /* override */
/* vt[13] */ virtual void countFile(char const*) const; /* override */
/* vt[14] */ virtual void getFirstFile(char const*) const; /* override */
@@ -2,28 +2,36 @@
#define __JKRFILEFINDER_H__
#include "dolphin/types.h"
#include "dvd/dvd.h"
struct JKRFileFinder_UnknownBase {
u32 field_0x0;
u32 field_0x4;
u16 field_0x8;
u16 field_0xa;
const char* mEntryName;
s32 mEntryFileIndex;
u16 mEntryId;
u16 mEntryTypeFlags;
};
class JKRFileFinder : JKRFileFinder_UnknownBase {
class JKRFileFinder : public JKRFileFinder_UnknownBase {
public:
JKRFileFinder();
JKRFileFinder() {
mIsAvailable = false;
mIsFileOrDirectory = false;
}
virtual ~JKRFileFinder();
bool isAvailable() { return this->mIsAvailable; }
bool isAvailable() const { return mIsAvailable; }
bool isFile() const { return mIsFileOrDirectory; }
bool isDirectory() const { return mIsFileOrDirectory; }
public:
/* vt[3] */ virtual bool findNextFile(void) = 0;
private:
bool mIsAvailable;
bool field_0x11;
u8 padding_0x12[2];
protected:
/* 0x00 */ // JKRFileFinder_UnknownBase
/* 0x0C */ // vtable
/* 0x10 */ bool mIsAvailable;
/* 0x11 */ bool mIsFileOrDirectory;
/* 0x12 */ u8 field_0x12[2];
};
class JKRArchive;
@@ -36,24 +44,30 @@ public:
/* vt[3] */ virtual bool findNextFile(void); /* override */
private:
JKRArchive* mArchive;
u32 field_0x18;
u32 field_0x1c;
u32 field_0x20;
/* 0x00 */ // JKRFileFinder_UnknownBase
/* 0x0C */ // vtable
/* 0x10 */ // JKRFileFinder
/* 0x14 */ JKRArchive* mArchive;
/* 0x18 */ s32 mStartIndex;
/* 0x1C */ s32 mEndIndex;
/* 0x20 */ s32 mNextIndex;
};
class JKRDvdFinder : public JKRFileFinder {
public:
JKRDvdFinder(char const*);
JKRDvdFinder(const char*);
virtual ~JKRDvdFinder();
public:
/* vt[3] */ virtual bool findNextFile(void); /* override */
private:
u8 mDvd[12];
bool mDvdIsOpen;
u8 padding_0x21[3];
/* 0x00 */ // JKRFileFinder_UnknownBase
/* 0x0C */ // vtable
/* 0x10 */ // JKRFileFinder
/* 0x14 */ DVDDirectory mDvdDirectory;
/* 0x20 */ bool mDvdIsOpen;
/* 0x21 */ u8 field_0x21[3];
};
#endif
@@ -9,31 +9,33 @@ public:
JKRFileLoader(void);
virtual ~JKRFileLoader();
bool isMounted() { return this->mIsMounted; }
bool isMounted() const { return this->mIsMounted; }
u32 getVolumeType() { return this->mVolumeType; }
u32 getVolumeType() const { return this->mVolumeType; }
public:
/* vt[03] */ virtual void unmount(void);
/* vt[04] */ virtual void becomeCurrent(char const*) = 0;
/* vt[05] */ virtual void getResource(char const*) = 0;
/* vt[06] */ virtual void getResource(u32, char const*) = 0;
/* vt[05] */ virtual void* getResource(char const*) = 0;
/* vt[06] */ virtual void* getResource(u32, char const*) = 0;
/* vt[07] */ virtual void readResource(void*, u32, char const*) = 0;
/* vt[08] */ virtual void readResource(void*, u32, u32, char const*) = 0;
/* vt[09] */ virtual void removeResourceAll(void) = 0;
/* vt[10] */ virtual void removeResource(void*) = 0;
/* vt[11] */ virtual void detachResource(void*) = 0;
/* vt[10] */ virtual bool removeResource(void*) = 0;
/* vt[11] */ virtual bool detachResource(void*) = 0;
/* vt[12] */ virtual void getResSize(void const*) const = 0;
/* vt[13] */ virtual void countFile(char const*) const = 0;
/* vt[14] */ virtual void getFirstFile(char const*) const = 0;
private:
JSULink<JKRFileLoader> mFileLoaderLink;
char* mVolumeName;
u32 mVolumeType;
bool mIsMounted;
u8 padding_0x31[3];
int mMountCount;
/* 0x00 */ // vtable
/* 0x04 */ // JKRDisposer
/* 0x18 */ JSULink<JKRFileLoader> mFileLoaderLink;
/* 0x28 */ char* mVolumeName;
/* 0x2C */ u32 mVolumeType;
/* 0x30 */ bool mIsMounted;
/* 0x31 */ u8 field_0x31[3];
/* 0x34 */ u32 mMountCount;
public:
static void* getGlbResource(char const*);
@@ -41,7 +43,7 @@ public:
static bool removeResource(void*, JKRFileLoader*);
static bool detachResource(void*, JKRFileLoader*);
static JKRFileLoader* findVolume(char const**);
static char* fetchVolumeName(char*, long, char const*);
static const char* fetchVolumeName(char*, long, char const*);
};
#endif
@@ -156,4 +156,12 @@ inline void* JKRAllocFromHeap(JKRHeap* heap, u32 size, int alignment) {
return JKRHeap::alloc(size, alignment, heap);
}
inline void JKRFreeToHeap(JKRHeap* heap, void* ptr) {
JKRHeap::free(ptr, heap);
}
inline void JKRFree(void* ptr) {
JKRHeap::free(ptr, NULL);
}
#endif
@@ -18,7 +18,7 @@ public:
void open(void*, u32, JKRMemBreakFlag);
/* vt[09] */ void removeResourceAll(void); /* override */
/* vt[10] */ void removeResource(void*); /* override */
/* vt[10] */ bool removeResource(void*); /* override */
/* vt[15] */ void getExpandedResSize(void const*) const; /* override */
/* vt[16] */ void fetchResource(JKRArchive::SDIFileEntry*, u32*); /* override */