mirror of https://github.com/zeldaret/tp.git
243 lines
7.5 KiB
C++
243 lines
7.5 KiB
C++
//
|
|
// Generated By: dol2asm
|
|
// Translation Unit: JKRFileLoader
|
|
//
|
|
|
|
#include "JSystem/JKernel/JKRFileLoader.h"
|
|
#include "MSL_C.PPCEABI.bare.H/MSL_Common/src/string.h"
|
|
#include "dol2asm.h"
|
|
#include "global.h"
|
|
|
|
//
|
|
// Forward References:
|
|
//
|
|
|
|
extern "C" void __ct__13JKRFileLoaderFv();
|
|
extern "C" void __dt__13JKRFileLoaderFv();
|
|
extern "C" void unmount__13JKRFileLoaderFv();
|
|
extern "C" void getGlbResource__13JKRFileLoaderFPCc();
|
|
extern "C" void getGlbResource__13JKRFileLoaderFPCcP13JKRFileLoader();
|
|
extern "C" void removeResource__13JKRFileLoaderFPvP13JKRFileLoader();
|
|
extern "C" void detachResource__13JKRFileLoaderFPvP13JKRFileLoader();
|
|
extern "C" void findVolume__13JKRFileLoaderFPPCc();
|
|
extern "C" void fetchVolumeName__13JKRFileLoaderFPclPCc();
|
|
extern "C" void __sinit_JKRFileLoader_cpp();
|
|
extern "C" void func_802D45E4(void* _this);
|
|
extern "C" extern char const* const JKRFileLoader__stringBase0;
|
|
extern "C" u8 sVolumeList__13JKRFileLoader[12];
|
|
extern "C" u8 sCurrentVolume__13JKRFileLoader[4 + 4 /* padding */];
|
|
|
|
//
|
|
// External References:
|
|
//
|
|
|
|
extern "C" void __dl__FPv();
|
|
extern "C" void __ct__11JKRDisposerFv();
|
|
extern "C" void __dt__11JKRDisposerFv();
|
|
extern "C" void __ct__10JSUPtrLinkFPv();
|
|
extern "C" void __dt__10JSUPtrLinkFv();
|
|
extern "C" void __dt__10JSUPtrListFv();
|
|
extern "C" void initiate__10JSUPtrListFv();
|
|
extern "C" void __register_global_object();
|
|
extern "C" void _savegpr_29();
|
|
extern "C" void _restgpr_29();
|
|
extern "C" extern u8 __lower_map[256];
|
|
|
|
//
|
|
// Declarations:
|
|
//
|
|
|
|
/* ############################################################################################## */
|
|
/* 80451418-80451420 000918 0004+04 2/2 3/3 0/0 .sbss sCurrentVolume__13JKRFileLoader */
|
|
JKRFileLoader* JKRFileLoader::sCurrentVolume;
|
|
/* 80434354-80434360 061074 000C+00 5/5 14/14 0/0 .bss sVolumeList__13JKRFileLoader */
|
|
JSUList<JKRFileLoader> JKRFileLoader::sVolumeList;
|
|
|
|
/* 802D40F0-802D4148 2CEA30 0058+00 0/0 2/2 0/0 .text __ct__13JKRFileLoaderFv */
|
|
JKRFileLoader::JKRFileLoader(void)
|
|
: mFileLoaderLink(this), mVolumeName(NULL), mVolumeType(0), mMountCount(0) {}
|
|
|
|
/* 802D4148-802D41D4 2CEA88 008C+00 1/0 2/2 0/0 .text __dt__13JKRFileLoaderFv */
|
|
JKRFileLoader::~JKRFileLoader() {
|
|
if (getCurrentVolume() == this) {
|
|
setCurrentVolume(NULL);
|
|
}
|
|
}
|
|
|
|
/* 802D41D4-802D4224 2CEB14 0050+00 1/0 6/0 0/0 .text unmount__13JKRFileLoaderFv */
|
|
void JKRFileLoader::unmount(void) {
|
|
s32 count = mMountCount;
|
|
if (mMountCount != 0) {
|
|
count--;
|
|
mMountCount = count;
|
|
if (count == 0) {
|
|
delete this;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 802D4224-802D4270 2CEB64 004C+00 0/0 2/2 0/0 .text getGlbResource__13JKRFileLoaderFPCc
|
|
*/
|
|
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;
|
|
}
|
|
|
|
/* 802D4270-802D4308 2CEBB0 0098+00 0/0 29/29 1/1 .text
|
|
* getGlbResource__13JKRFileLoaderFPCcP13JKRFileLoader */
|
|
void* JKRFileLoader::getGlbResource(const char* name, JKRFileLoader* fileLoader) {
|
|
void* resource = NULL;
|
|
if (fileLoader) {
|
|
return fileLoader->getResource(0, name);
|
|
}
|
|
|
|
JSUList<JKRFileLoader>& volumeList = getVolumeList();
|
|
JSUListIterator<JKRFileLoader> iterator;
|
|
for (iterator = volumeList.getFirst(); iterator != volumeList.getEnd(); ++iterator) {
|
|
resource = iterator->getResource(0, name);
|
|
if (resource)
|
|
break;
|
|
}
|
|
return resource;
|
|
}
|
|
|
|
/* 802D4308-802D43A0 2CEC48 0098+00 0/0 1/1 0/0 .text
|
|
* removeResource__13JKRFileLoaderFPvP13JKRFileLoader */
|
|
bool JKRFileLoader::removeResource(void* resource, JKRFileLoader* fileLoader) {
|
|
if (fileLoader) {
|
|
return fileLoader->removeResource(resource);
|
|
}
|
|
|
|
JSUList<JKRFileLoader>& volumeList = getVolumeList();
|
|
JSUListIterator<JKRFileLoader> iterator;
|
|
for (iterator = volumeList.getFirst(); iterator != volumeList.getEnd(); ++iterator) {
|
|
if (iterator->removeResource(resource)) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/* 802D43A0-802D4438 2CECE0 0098+00 0/0 2/2 0/0 .text
|
|
* detachResource__13JKRFileLoaderFPvP13JKRFileLoader */
|
|
bool JKRFileLoader::detachResource(void* resource, JKRFileLoader* fileLoader) {
|
|
if (fileLoader) {
|
|
return fileLoader->detachResource(resource);
|
|
}
|
|
|
|
JSUList<JKRFileLoader>& volumeList = getVolumeList();
|
|
JSUListIterator<JKRFileLoader> iterator;
|
|
for (iterator = volumeList.getFirst(); iterator != volumeList.getEnd(); ++iterator) {
|
|
if (iterator->detachResource(resource)) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/* 802D4438-802D44C4 2CED78 008C+00 1/1 0/0 0/0 .text findVolume__13JKRFileLoaderFPPCc */
|
|
JKRFileLoader* JKRFileLoader::findVolume(const char** volumeName) {
|
|
if (*volumeName[0] != '/') {
|
|
return getCurrentVolume();
|
|
}
|
|
|
|
char volumeNameBuffer[0x101];
|
|
*volumeName = fetchVolumeName(volumeNameBuffer, ARRAY_SIZE(volumeNameBuffer), *volumeName);
|
|
|
|
JSUList<JKRFileLoader>& volumeList = getVolumeList();
|
|
JSUListIterator<JKRFileLoader> iterator;
|
|
for (iterator = volumeList.getFirst(); iterator != volumeList.getEnd(); ++iterator) {
|
|
if (strcmp(volumeNameBuffer, iterator->mVolumeName) == 0) {
|
|
return iterator.getObject();
|
|
}
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
/* ############################################################################################## */
|
|
/* 8039D150-8039D150 0297B0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_DEAD static char const* const stringBase_8039D150 = "/";
|
|
/* @stringBase0 padding */
|
|
SECTION_DEAD static char const* const pad_8039D152 = "\0\0\0\0\0";
|
|
#pragma pop
|
|
|
|
/* 804508C0-804508C8 000340 0002+06 1/1 0/0 0/0 .sdata rootPath$2498 */
|
|
SECTION_SDATA static u8 rootPath[2 + 6 /* padding */] = {
|
|
0x2F,
|
|
0x00,
|
|
/* padding */
|
|
0x00,
|
|
0x00,
|
|
0x00,
|
|
0x00,
|
|
0x00,
|
|
0x00,
|
|
};
|
|
|
|
/* 802D44C4-802D45A0 2CEE04 00DC+00 1/1 0/0 0/0 .text fetchVolumeName__13JKRFileLoaderFPclPCc */
|
|
// 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
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm const char* JKRFileLoader::fetchVolumeName(char* param_0, s32 param_1, char const* param_2) {
|
|
nofralloc
|
|
#include "asm/JSystem/JKernel/JKRFileLoader/fetchVolumeName__13JKRFileLoaderFPclPCc.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8039D150-8039D150 0297B0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|