diff options
Diffstat (limited to 'libs/JSystem/JUtility/JUTResource.cpp')
| -rw-r--r-- | libs/JSystem/JUtility/JUTResource.cpp | 81 |
1 files changed, 45 insertions, 36 deletions
diff --git a/libs/JSystem/JUtility/JUTResource.cpp b/libs/JSystem/JUtility/JUTResource.cpp index 8748ee49c6..b8ab260551 100644 --- a/libs/JSystem/JUtility/JUTResource.cpp +++ b/libs/JSystem/JUtility/JUTResource.cpp @@ -5,7 +5,9 @@ #include "JSystem/JUtility/JUTResource.h" #include "JSystem/JKernel/JKRFileLoader.h" -#include "dol2asm.h" +#include "JSystem/JKernel/JKRArchive.h" +#include "JSystem/JSupport/JSUInputStream.h" +#include "MSL_C/MSL_Common/Src/string.h" #include "dolphin/types.h" // @@ -16,57 +18,64 @@ // Forward References: // -extern "C" void getResource__15JUTResReferenceFP14JSUInputStreamUlP10JKRArchive(); -extern "C" void getResource__15JUTResReferenceFPCvUlP10JKRArchive(); -extern "C" void getResource__15JUTResReferenceFUlP10JKRArchive(); - // // External References: // -SECTION_INIT void memcpy(); -extern "C" void getGlbResource__13JKRFileLoaderFPCc(); -extern "C" void getGlbResource__13JKRFileLoaderFPCcP13JKRFileLoader(); -extern "C" void getGlbResource__10JKRArchiveFUlPCcP10JKRArchive(); -extern "C" void read__14JSUInputStreamFPvl(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); - // // Declarations: // /* 802DE078-802DE120 2D89B8 00A8+00 0/0 1/1 0/0 .text * getResource__15JUTResReferenceFP14JSUInputStreamUlP10JKRArchive */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void* JUTResReference::getResource(JSUInputStream* param_0, u32 param_1, JKRArchive* param_2) { - nofralloc -#include "asm/JSystem/JUtility/JUTResource/getResource__15JUTResReferenceFP14JSUInputStreamUlP10JKRArchive.s" +void *JUTResReference::getResource(JSUInputStream *stream, u32 resType, JKRArchive *archive) { + stream->read(&mType, 1); + stream->read(&mNameLength, 1); + stream->read(&mName, mNameLength); + + if (mType == RESTYPE_Unk2 || mType == RESTYPE_Unk3 || mType == RESTYPE_Unk4) + { + mName[mNameLength] = 0; + } + + return getResource(resType, archive); } -#pragma pop /* 802DE120-802DE1BC 2D8A60 009C+00 0/0 2/2 0/0 .text * getResource__15JUTResReferenceFPCvUlP10JKRArchive */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void* JUTResReference::getResource(void const* param_0, u32 param_1, JKRArchive* param_2) { - nofralloc -#include "asm/JSystem/JUtility/JUTResource/getResource__15JUTResReferenceFPCvUlP10JKRArchive.s" + +void *JUTResReference::getResource(const void *data, u32 resType, JKRArchive *archive) { + mType = *(u8*)data; + mNameLength = *((u8*)data + 1); + + if (mNameLength != 0) { + memcpy(&mName, &((u8 *)data)[2], mNameLength); + } + + if (mType == RESTYPE_Unk2 || mType == RESTYPE_Unk3 || mType == RESTYPE_Unk4) { + mName[mNameLength] = 0; + } + + return getResource(resType, archive); } -#pragma pop /* 802DE1BC-802DE234 2D8AFC 0078+00 2/2 0/0 0/0 .text * getResource__15JUTResReferenceFUlP10JKRArchive */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void* JUTResReference::getResource(u32 param_0, JKRArchive* param_1) { - nofralloc -#include "asm/JSystem/JUtility/JUTResource/getResource__15JUTResReferenceFUlP10JKRArchive.s" +void *JUTResReference::getResource(u32 resType, JKRArchive *archive) { + void *res = NULL; + switch (mType) { + case RESTYPE_Unk1: + break; + case RESTYPE_Unk2: + res = JKRArchive::getGlbResource(resType, mName, archive); + break; + case RESTYPE_Unk3: + res = JKRFileLoader::getGlbResource(mName, archive); + break; + case RESTYPE_Unk4: + res = JKRFileLoader::getGlbResource(mName); + break; + } + + return res; } -#pragma pop |
