mirror of
https://github.com/zeldaret/ss
synced 2026-08-19 13:53:25 -04:00
lyt_arcResourceAccessor
This commit is contained in:
@@ -1,197 +1,171 @@
|
||||
|
||||
#include "nw4r/lyt/lyt_arcResourceAccessor.h"
|
||||
#include "nw4r/ut/ut_Font.h"
|
||||
|
||||
namespace {
|
||||
|
||||
// FindNameResource__37@unnamed@lyt_arcResourceAccessor_cpp@FP9ARCHandlePCc
|
||||
s32 FindResourcename(ARCHandle *pArcHandle, const char *resName) {
|
||||
return 1;
|
||||
DECOMP_DONT_INLINE s32 FindNameResource(ARCHandle *pArcHandle, const char *resName) {
|
||||
s32 entryNum = -1;
|
||||
ARCDir dir;
|
||||
ARCDirEntry dirEntry;
|
||||
BOOL bSuccess = ARCOpenDir(pArcHandle, ".", &dir);
|
||||
|
||||
while (ARCReadDir(&dir, &dirEntry)) {
|
||||
if (dirEntry.isDir) {
|
||||
ARCChangeDir(pArcHandle, dirEntry.name);
|
||||
entryNum = FindNameResource(pArcHandle, resName);
|
||||
ARCChangeDir(pArcHandle, "..");
|
||||
|
||||
if (entryNum != -1) {
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
if (stricmp(resName, dirEntry.name) == 0) {
|
||||
entryNum = dirEntry.entryNum;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
bSuccess = ARCCloseDir(&dir);
|
||||
return entryNum;
|
||||
}
|
||||
|
||||
// GetResourceSub__37@unnamed@lyt_arcResourceAccessor_cpp@FP9ARCHandlePCcUlPCcPUl
|
||||
void *GetResourceSub(ARCHandle *pArcHandle, const char *resRootDir, u32 resType, const char *name, u32 *pSize) {}
|
||||
void *GetResourceSub(ARCHandle *pArcHandle, const char *resRootDir, u32 resType, const char *name, u32 *pSize) {
|
||||
s32 entryNum = -1;
|
||||
if (ARCConvertPathToEntrynum(pArcHandle, resRootDir) != -1 && ARCChangeDir(pArcHandle, resRootDir)) {
|
||||
if (resType == 0) {
|
||||
entryNum = FindNameResource(pArcHandle, name);
|
||||
} else {
|
||||
char resTypeStr[5];
|
||||
resTypeStr[0] = resType >> 24;
|
||||
resTypeStr[1] = resType >> 16;
|
||||
resTypeStr[2] = resType >> 8;
|
||||
resTypeStr[3] = resType;
|
||||
resTypeStr[4] = '\0';
|
||||
|
||||
if (ARCConvertPathToEntrynum(pArcHandle, resTypeStr) != -1) {
|
||||
if (ARCChangeDir(pArcHandle, resTypeStr)) {
|
||||
entryNum = ARCConvertPathToEntrynum(pArcHandle, name);
|
||||
ARCChangeDir(pArcHandle, "..");
|
||||
}
|
||||
}
|
||||
}
|
||||
ARCChangeDir(pArcHandle, "..");
|
||||
}
|
||||
if (entryNum != -1) {
|
||||
ARCFileInfo arcFileInfo;
|
||||
ARCFastOpen(pArcHandle, entryNum, &arcFileInfo);
|
||||
void *resPointer = ARCGetStartAddrInMem(&arcFileInfo);
|
||||
if (pSize != nullptr) {
|
||||
*pSize = ARCGetLength(&arcFileInfo);
|
||||
}
|
||||
ARCClose(&arcFileInfo);
|
||||
return resPointer;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
namespace nw4r {
|
||||
namespace lyt {
|
||||
// __ct__Q34nw4r3lyt11FontRefLinkFv
|
||||
FontRefLink::FontRefLink() {}
|
||||
FontRefLink::FontRefLink() : mFont(nullptr) {}
|
||||
|
||||
// Set__Q34nw4r3lyt11FontRefLinkFPCcPQ34nw4r2ut4Font
|
||||
void FontRefLink::Set(const char *name, ut::Font *pFont) {}
|
||||
void FontRefLink::Set(const char *name, ut::Font *pFont) {
|
||||
strcpy(this->mFontName, name);
|
||||
this->mFont = pFont;
|
||||
}
|
||||
|
||||
// __ct__Q34nw4r3lyt19ArcResourceAccessorFv
|
||||
ArcResourceAccessor::ArcResourceAccessor() {}
|
||||
ArcResourceAccessor::ArcResourceAccessor() : mArcBuf(nullptr) {}
|
||||
|
||||
// Attach__Q34nw4r3lyt19ArcResourceAccessorFPvPCc
|
||||
bool ArcResourceAccessor::Attach(void *archiveStart, const char *resourceRootDirectory) {
|
||||
return false;
|
||||
if (!ARCInitHandle(archiveStart, &this->mArcHandle)) {
|
||||
return false;
|
||||
}
|
||||
this->mArcBuf = archiveStart;
|
||||
strncpy(this->mResRootDir, resourceRootDirectory, ROOTPATH_MAX - 1);
|
||||
this->mResRootDir[ROOTPATH_MAX - 1] = '\0';
|
||||
return true;
|
||||
}
|
||||
|
||||
// Detach__Q34nw4r3lyt19ArcResourceAccessorFv
|
||||
void *ArcResourceAccessor::Detach() {
|
||||
void *ret = this->mArcBuf;
|
||||
this->mArcBuf = nullptr;
|
||||
return ret;
|
||||
}
|
||||
|
||||
// GetResource__Q34nw4r3lyt19ArcResourceAccessorFUlPCcPUl
|
||||
void *ArcResourceAccessor::GetResource(u32 resType, const char *name, u32 *pSize) {
|
||||
return GetResourceSub(&this->mArcHandle, this->mResRootDir, resType, name, pSize);
|
||||
}
|
||||
|
||||
// Set__Q34nw4r3lyt15ArcResourceLinkFPvPCc
|
||||
bool ArcResourceLink::Set(void *pFile, const char *name) {
|
||||
if (!ARCInitHandle(pFile, &this->mArcHandle)) {
|
||||
return false;
|
||||
}
|
||||
strncpy(this->mResRootDir, name, ROOTPATH_MAX - 1);
|
||||
this->mResRootDir[ROOTPATH_MAX - 1] = '\0';
|
||||
return true;
|
||||
}
|
||||
|
||||
// RegistFont__Q34nw4r3lyt19ArcResourceAccessorFPQ34nw4r3lyt11FontRefLink
|
||||
void ArcResourceAccessor::RegistFont(FontRefLink *pLink) {
|
||||
mFontList.PushBack(pLink);
|
||||
}
|
||||
|
||||
// UnregistFont__Q34nw4r3lyt19ArcResourceAccessorFPQ34nw4r3lyt11FontRefLink
|
||||
void ArcResourceAccessor::UnregistFont(FontRefLink *pLink) {
|
||||
mFontList.Erase(pLink);
|
||||
}
|
||||
|
||||
// GetFont__Q34nw4r3lyt19ArcResourceAccessorFPCc
|
||||
ut::Font *ArcResourceAccessor::GetFont(const char *name) {
|
||||
return detail::FindFont(&this->mFontList, name);
|
||||
}
|
||||
|
||||
// __ct__Q34nw4r3lyt24MultiArcResourceAccessorFv
|
||||
MultiArcResourceAccessor::MultiArcResourceAccessor() {}
|
||||
|
||||
// __dt__Q34nw4r3lyt24MultiArcResourceAccessorFv
|
||||
MultiArcResourceAccessor::~MultiArcResourceAccessor() {
|
||||
this->mArcList.Clear();
|
||||
}
|
||||
|
||||
// Attach__Q34nw4r3lyt24MultiArcResourceAccessorFPQ34nw4r3lyt15ArcResourceLink
|
||||
void MultiArcResourceAccessor::Attach(ArcResourceLink *pArcResource) {
|
||||
this->mArcList.PushBack(pArcResource);
|
||||
}
|
||||
|
||||
// GetResource__Q34nw4r3lyt24MultiArcResourceAccessorFUlPCcPUl
|
||||
void *MultiArcResourceAccessor::GetResource(u32 resType, const char *name, u32 *pSize) {
|
||||
void *pResource;
|
||||
ut::LinkList<ArcResourceLink, 0>::Iterator it = this->mArcList.GetBeginIter();
|
||||
for (; it != mArcList.GetEndIter(); it++) {
|
||||
pResource = GetResourceSub(it->GetArcHandle(), it->GetResRootDir(), resType, name, pSize);
|
||||
if (pResource != nullptr) {
|
||||
return pResource;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void MultiArcResourceAccessor::RegistFont(FontRefLink *pLink) {
|
||||
this->mFontList.PushBack(pLink);
|
||||
}
|
||||
|
||||
// GetFont__Q34nw4r3lyt24MultiArcResourceAccessorFPCc
|
||||
ut::Font *MultiArcResourceAccessor::GetFont(const char *name) {
|
||||
return detail::FindFont(&this->mFontList, name);
|
||||
}
|
||||
|
||||
} // namespace lyt
|
||||
} // namespace nw4r
|
||||
|
||||
// 29c03b: <88> TAG_global_subroutine
|
||||
// AT_sibling(0x29c0dc)
|
||||
// AT_name("Detach")
|
||||
// AT_lo_user("Detach__Q34nw4r3lyt19ArcResourceAccessorFv")
|
||||
// AT_member(0x16271)
|
||||
// AT_fund_type(FT_pointer)
|
||||
// AT_low_pc(0x802d50c8)
|
||||
// AT_high_pc(0x802d5158)
|
||||
|
||||
// 29c093: <38> TAG_formal_parameter
|
||||
// AT_sibling(0x29c0b9)
|
||||
// AT_name("this")
|
||||
// AT_mod_u_d_type(<6>MOD_const MOD_pointer_to 0x16271)
|
||||
// AT_location(<5>OP_REG(0x1f) )
|
||||
|
||||
// 29c0dc: <105> TAG_global_subroutine
|
||||
// AT_sibling(0x29c1ec)
|
||||
// AT_name("GetResource")
|
||||
// AT_lo_user("GetResource__Q34nw4r3lyt19ArcResourceAccessorFUlPCcPUl")
|
||||
// AT_member(0x16271)
|
||||
// AT_fund_type(FT_pointer)
|
||||
// AT_low_pc(0x802d5158)
|
||||
// AT_high_pc(0x802d51a4)
|
||||
|
||||
// 29c145: <38> TAG_formal_parameter
|
||||
// AT_sibling(0x29c16b)
|
||||
// AT_name("this")
|
||||
// AT_mod_u_d_type(<6>MOD_const MOD_pointer_to 0x16271)
|
||||
// AT_location(<5>OP_REG(0x1f) )
|
||||
|
||||
// 29c16b: <41> TAG_formal_parameter
|
||||
// AT_sibling(0x29c194)
|
||||
// AT_name("resType")
|
||||
// AT_fund_type(FT_unsigned_long)
|
||||
// AT_location(<11>OP_BASEREG(0x1) OP_CONST(0x8) OP_ADD )
|
||||
|
||||
// 29c194: <42> TAG_formal_parameter
|
||||
// AT_sibling(0x29c1be)
|
||||
// AT_name("name")
|
||||
// AT_mod_fund_type(<4>MOD_pointer_to MOD_const FT_char)
|
||||
// AT_location(<11>OP_BASEREG(0x1) OP_CONST(0xc) OP_ADD )
|
||||
|
||||
// 29c1be: <42> TAG_formal_parameter
|
||||
// AT_sibling(0x29c1e8)
|
||||
// AT_name("pSize")
|
||||
// AT_mod_fund_type(<3>MOD_pointer_to FT_unsigned_long)
|
||||
// AT_location(<11>OP_BASEREG(0x1) OP_CONST(0x10) OP_ADD )
|
||||
// 29c1e8: <4>
|
||||
|
||||
// 29c1ec: <116> TAG_global_subroutine
|
||||
// AT_sibling(0x29c2b6)
|
||||
// AT_name("RegistFont")
|
||||
// AT_lo_user("RegistFont__Q34nw4r3lyt19ArcResourceAccessorFPQ34nw4r3lyt11FontRefLink")
|
||||
// AT_member(0x16271)
|
||||
// AT_low_pc(0x802d51a4)
|
||||
// AT_high_pc(0x802d5228)
|
||||
|
||||
// 29c260: <44> TAG_formal_parameter
|
||||
// AT_sibling(0x29c28c)
|
||||
// AT_name("this")
|
||||
// AT_mod_u_d_type(<6>MOD_const MOD_pointer_to 0x16271)
|
||||
// AT_location(<11>OP_BASEREG(0x1) OP_CONST(0x8) OP_ADD )
|
||||
|
||||
// 29c28c: <38> TAG_formal_parameter
|
||||
// AT_sibling(0x29c2b2)
|
||||
// AT_name("pLink")
|
||||
// AT_mod_u_d_type(<5>MOD_pointer_to 0x1613f)
|
||||
// AT_location(<5>OP_REG(0x1d) )
|
||||
// 29c2b2: <4>
|
||||
|
||||
// 29c2b6: <120> TAG_global_subroutine
|
||||
// AT_sibling(0x29c384)
|
||||
// AT_name("UnregistFont")
|
||||
// AT_lo_user("UnregistFont__Q34nw4r3lyt19ArcResourceAccessorFPQ34nw4r3lyt11FontRefLink")
|
||||
// AT_member(0x16271)
|
||||
// AT_low_pc(0x802d5228)
|
||||
// AT_high_pc(0x802d52ac)
|
||||
|
||||
// 29c32e: <44> TAG_formal_parameter
|
||||
// AT_sibling(0x29c35a)
|
||||
// AT_name("this")
|
||||
// AT_mod_u_d_type(<6>MOD_const MOD_pointer_to 0x16271)
|
||||
// AT_location(<11>OP_BASEREG(0x1) OP_CONST(0x8) OP_ADD )
|
||||
|
||||
// 29c35a: <38> TAG_formal_parameter
|
||||
// AT_sibling(0x29c380)
|
||||
// AT_name("pLink")
|
||||
// AT_mod_u_d_type(<5>MOD_pointer_to 0x1613f)
|
||||
// AT_location(<5>OP_REG(0x1d) )
|
||||
// 29c380: <4>
|
||||
|
||||
// 29c384: <97> TAG_global_subroutine
|
||||
// AT_sibling(0x29c43f)
|
||||
// AT_name("GetFont")
|
||||
// AT_lo_user("GetFont__Q34nw4r3lyt19ArcResourceAccessorFPCc")
|
||||
// AT_member(0x16271)
|
||||
// AT_mod_u_d_type(<5>MOD_pointer_to 0x15c72)
|
||||
// AT_low_pc(0x802d52ac)
|
||||
// AT_high_pc(0x802d52e0)
|
||||
|
||||
// 29c3e5: <44> TAG_formal_parameter
|
||||
// AT_sibling(0x29c411)
|
||||
// AT_name("this")
|
||||
// AT_mod_u_d_type(<6>MOD_const MOD_pointer_to 0x16271)
|
||||
// AT_location(<11>OP_BASEREG(0x1) OP_CONST(0x8) OP_ADD )
|
||||
|
||||
// 29c411: <42> TAG_formal_parameter
|
||||
// AT_sibling(0x29c43b)
|
||||
// AT_name("name")
|
||||
// AT_mod_fund_type(<4>MOD_pointer_to MOD_const FT_char)
|
||||
// AT_location(<11>OP_BASEREG(0x1) OP_CONST(0xc) OP_ADD )
|
||||
// 29c43b: <4>
|
||||
|
||||
// 29c43f: <95> TAG_global_subroutine
|
||||
// AT_sibling(0x29c4c8)
|
||||
// AT_name("__dt")
|
||||
// AT_lo_user("__dt__Q34nw4r3lyt24MultiArcResourceAccessorFv")
|
||||
// AT_member(0x63219)
|
||||
// AT_fund_type(FT_pointer)
|
||||
// AT_low_pc(0x802d533c)
|
||||
// AT_high_pc(0x802d53cc)
|
||||
// (0x29c83e)
|
||||
|
||||
// 29c49e: <38> TAG_formal_parameter
|
||||
// AT_sibling(0x29c4c4)
|
||||
// AT_name("this")
|
||||
// AT_mod_u_d_type(<6>MOD_const MOD_pointer_to 0x63219)
|
||||
// AT_location(<5>OP_REG(0x1f) )
|
||||
// 29c4c4: <4>
|
||||
|
||||
// AT_name("DetachAll")
|
||||
// AT_lo_user("DetachAll__Q34nw4r3lyt24MultiArcResourceAccessorFv")
|
||||
|
||||
// AT_name("GetResource")
|
||||
// AT_lo_user("GetResource__Q34nw4r3lyt24MultiArcResourceAccessorFUlPCcPUl")
|
||||
// AT_fund_type(FT_pointer)
|
||||
// AT_name("this")
|
||||
// AT_mod_u_d_type(<6>MOD_const MOD_pointer_to 0x63219)
|
||||
// AT_name("resType")
|
||||
// AT_fund_type(FT_unsigned_long)
|
||||
// AT_name("name")
|
||||
// AT_mod_fund_type(<4>MOD_pointer_to MOD_const FT_char)
|
||||
// AT_name("pSize")
|
||||
// AT_mod_fund_type(<3>MOD_pointer_to FT_unsigned_long)
|
||||
|
||||
// AT_lo_user("GetFont__Q34nw4r3lyt24MultiArcResourceAccessorFPCc")
|
||||
// AT_name("name")
|
||||
// AT_mod_fund_type(<4>MOD_pointer_to MOD_const FT_char)
|
||||
|
||||
// "__vt__Q34nw4r3lyt24MultiArcResourceAccessor"
|
||||
// "__vt__Q34nw4r3lyt19ArcResourceAccessor"
|
||||
|
||||
Reference in New Issue
Block a user