mirror of
https://github.com/zeldaret/tp
synced 2026-07-07 14:13:27 -04:00
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:
@@ -1,47 +1,157 @@
|
||||
#include "JSystem/JKernel/JKRFileLoader/JKRFileLoader.h"
|
||||
#include "global.h"
|
||||
|
||||
asm JKRFileLoader::JKRFileLoader(void) {
|
||||
nofralloc
|
||||
#include "JSystem/JKernel/JKRFileLoader/asm/func_802D40F0.s"
|
||||
JKRFileLoader::JKRFileLoader(void) : mFileLoaderLink(this) {
|
||||
mVolumeName = NULL;
|
||||
mVolumeType = 0;
|
||||
mMountCount = 0;
|
||||
}
|
||||
|
||||
asm JKRFileLoader::~JKRFileLoader() {
|
||||
nofralloc
|
||||
#include "JSystem/JKernel/JKRFileLoader/asm/func_802D4148.s"
|
||||
JKRFileLoader::~JKRFileLoader() {
|
||||
// lbl_80451418 = JKRFileLoader::sCurrentVolume
|
||||
if (lbl_80451418 == this) {
|
||||
lbl_80451418 = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
asm void JKRFileLoader::unmount(void) {
|
||||
nofralloc
|
||||
#include "JSystem/JKernel/JKRFileLoader/asm/func_802D41D4.s"
|
||||
void JKRFileLoader::unmount(void) {
|
||||
s32 count = mMountCount;
|
||||
if (mMountCount != 0) {
|
||||
count--;
|
||||
mMountCount = count;
|
||||
if (count == 0) {
|
||||
delete this;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
asm void* JKRFileLoader::getGlbResource(char const*) {
|
||||
nofralloc
|
||||
#include "JSystem/JKernel/JKRFileLoader/asm/func_802D4224.s"
|
||||
void* JKRFileLoader::getGlbResource(const char* name) {
|
||||
const char* name_reference[1];
|
||||
name_reference[0] = name;
|
||||
|
||||
JKRFileLoader* fileLoader = findVolume(name_reference);
|
||||
void* resource;
|
||||
if (fileLoader == NULL) {
|
||||
resource = NULL;
|
||||
} else {
|
||||
resource = fileLoader->getResource(name_reference[0]);
|
||||
}
|
||||
|
||||
return resource;
|
||||
}
|
||||
|
||||
asm void* JKRFileLoader::getGlbResource(char const*, JKRFileLoader*) {
|
||||
nofralloc
|
||||
#include "JSystem/JKernel/JKRFileLoader/asm/func_802D4270.s"
|
||||
void* JKRFileLoader::getGlbResource(const char* name, JKRFileLoader* fileLoader) {
|
||||
// lbl_80434354 = JKRFileLoader::sVolumeList
|
||||
|
||||
void* resource = NULL;
|
||||
if (fileLoader) {
|
||||
return fileLoader->getResource(0, name);
|
||||
}
|
||||
|
||||
JSUListIterator<JKRFileLoader> iterator;
|
||||
for (iterator = lbl_80434354.getFirst(); iterator != lbl_80434354.getEnd(); ++iterator) {
|
||||
resource = iterator->getResource(0, name);
|
||||
if (resource)
|
||||
break;
|
||||
}
|
||||
return resource;
|
||||
}
|
||||
|
||||
asm bool JKRFileLoader::removeResource(void*, JKRFileLoader*) {
|
||||
nofralloc
|
||||
#include "JSystem/JKernel/JKRFileLoader/asm/func_802D4308.s"
|
||||
bool JKRFileLoader::removeResource(void* resource, JKRFileLoader* fileLoader) {
|
||||
// lbl_80434354 = JKRFileLoader::sVolumeList
|
||||
|
||||
if (fileLoader) {
|
||||
return fileLoader->removeResource(resource);
|
||||
}
|
||||
|
||||
JSUListIterator<JKRFileLoader> iterator;
|
||||
for (iterator = lbl_80434354.getFirst(); iterator != lbl_80434354.getEnd(); ++iterator) {
|
||||
if (iterator->removeResource(resource)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
asm bool JKRFileLoader::detachResource(void*, JKRFileLoader*) {
|
||||
nofralloc
|
||||
#include "JSystem/JKernel/JKRFileLoader/asm/func_802D43A0.s"
|
||||
bool JKRFileLoader::detachResource(void* resource, JKRFileLoader* fileLoader) {
|
||||
// lbl_80434354 = JKRFileLoader::sVolumeList
|
||||
|
||||
if (fileLoader) {
|
||||
return fileLoader->detachResource(resource);
|
||||
}
|
||||
|
||||
JSUListIterator<JKRFileLoader> iterator;
|
||||
for (iterator = lbl_80434354.getFirst(); iterator != lbl_80434354.getEnd(); ++iterator) {
|
||||
if (iterator->detachResource(resource)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
asm JKRFileLoader* JKRFileLoader::findVolume(char const**) {
|
||||
nofralloc
|
||||
#include "JSystem/JKernel/JKRFileLoader/asm/func_802D4438.s"
|
||||
JKRFileLoader* JKRFileLoader::findVolume(const char** volumeName) {
|
||||
// lbl_80451418 = JKRFileLoader::sCurrentVolume
|
||||
|
||||
if (*volumeName[0] != '/') {
|
||||
return lbl_80451418;
|
||||
}
|
||||
|
||||
char volumeNameBuffer[0x101];
|
||||
*volumeName = fetchVolumeName(volumeNameBuffer, ARRAY_SIZE(volumeNameBuffer), *volumeName);
|
||||
|
||||
JSUListIterator<JKRFileLoader> iterator;
|
||||
for (iterator = lbl_80434354.getFirst(); iterator != lbl_80434354.getEnd(); ++iterator) {
|
||||
if (strcmp(volumeNameBuffer, iterator->mVolumeName) == 0) {
|
||||
return iterator.getObject();
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
asm char* JKRFileLoader::fetchVolumeName(char*, long, char const*) {
|
||||
// matches, but lbl_804508C0 is accessed through r13
|
||||
#ifdef NONMATCHING
|
||||
const char* JKRFileLoader::fetchVolumeName(char* buffer, long bufferSize, const char* path) {
|
||||
// lbl_803D2D18 = MSL_C.PPCEABI.bare.H::__lower_map
|
||||
// lbl_8039D150 = JKernel::@stringBase0 "/"
|
||||
// lbl_804508C0 = JKernel::rootPath$2498 "/"
|
||||
// lbl_803D2D18 = MSL_C.PPCEABI.bare.H::__lower_map
|
||||
|
||||
if (strcmp(path, lbl_8039D150) == 0) {
|
||||
strcpy(buffer, lbl_804508C0);
|
||||
return lbl_804508C0;
|
||||
}
|
||||
|
||||
path++;
|
||||
while (*path != 0 && *path != '/') {
|
||||
if (1 < bufferSize) {
|
||||
u8 lower_char;
|
||||
int ch = (int)*path;
|
||||
if (ch == -1) {
|
||||
lower_char = -1;
|
||||
} else {
|
||||
lower_char = lbl_803D2D18[ch & 0xFF];
|
||||
}
|
||||
|
||||
*buffer = lower_char;
|
||||
buffer++;
|
||||
bufferSize--;
|
||||
}
|
||||
path++;
|
||||
}
|
||||
|
||||
*buffer = '\0';
|
||||
if (*path == '\0') {
|
||||
path = lbl_804508C0;
|
||||
}
|
||||
|
||||
return path;
|
||||
}
|
||||
#else
|
||||
asm const char* JKRFileLoader::fetchVolumeName(char* buffer, long bufferSize, const char* path) {
|
||||
nofralloc
|
||||
#include "JSystem/JKernel/JKRFileLoader/asm/func_802D44C4.s"
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user