mirror of
https://github.com/zeldaret/tww.git
synced 2026-05-23 06:54:16 -04:00
144 lines
4.2 KiB
C++
144 lines
4.2 KiB
C++
//
|
|
// Generated by dtk
|
|
// Translation Unit: resource.cpp
|
|
//
|
|
|
|
#include "JSystem/JMessage/resource.h"
|
|
#include "JSystem/JMessage/data.h"
|
|
#include "JSystem/JUtility/JUTResFont.h"
|
|
#include "dolphin/types.h"
|
|
|
|
/* 8029FCC4-8029FD04 .text __ct__Q28JMessage18TResourceContainerFv */
|
|
JMessage::TResourceContainer::TResourceContainer() {
|
|
mEncoding = 0;
|
|
mIsLeadByteFunc = NULL;
|
|
}
|
|
|
|
/* 8029FD04-8029FD90 .text Get_groupID__Q28JMessage18TResourceContainerFUs */
|
|
JMessage::TResource* JMessage::TResourceContainer::Get_groupID(u16 groupID) {
|
|
/* Nonmatching */
|
|
for (iterator iter = begin(); iter != end(); iter++) {
|
|
TResource* res = &(*iter);
|
|
if (res->mInfo.get_groupID() == groupID)
|
|
return res;
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
/* 8029FD90-8029FDC8 .text SetEncoding__Q28JMessage18TResourceContainerFUc */
|
|
void JMessage::TResourceContainer::SetEncoding(u8 encoding) {
|
|
if (encoding == 0) {
|
|
mEncoding = encoding;
|
|
mIsLeadByteFunc = NULL;
|
|
} else {
|
|
SetEncoding_(encoding);
|
|
}
|
|
}
|
|
|
|
/* 8029FDC8-8029FE14 .text Do_create__Q28JMessage18TResourceContainerFv */
|
|
JMessage::TResource* JMessage::TResourceContainer::Do_create() {
|
|
return new TResource();
|
|
}
|
|
|
|
/* 8029FE14-8029FE38 .text Do_destroy__Q28JMessage18TResourceContainerFPQ28JMessage9TResource */
|
|
void JMessage::TResourceContainer::Do_destroy(JMessage::TResource* resource) {
|
|
delete resource;
|
|
}
|
|
|
|
namespace JMessage {
|
|
namespace {
|
|
IsLeadByte_func gapfnIsLeadByte_[4] = {
|
|
NULL,
|
|
JUTFont::isLeadByte_1Byte,
|
|
JUTFont::isLeadByte_2Byte,
|
|
JUTFont::isLeadByte_ShiftJIS,
|
|
};
|
|
}
|
|
}
|
|
|
|
/* 8029FE38-8029FE68 .text SetEncoding___Q28JMessage18TResourceContainerFUc */
|
|
void JMessage::TResourceContainer::SetEncoding_(u8 param_1) {
|
|
mEncoding = param_1;
|
|
u32 r4 = param_1;
|
|
mIsLeadByteFunc = 0;
|
|
if (r4 >= 4) {
|
|
return;
|
|
}
|
|
mIsLeadByteFunc = gapfnIsLeadByte_[r4];
|
|
}
|
|
|
|
/* 8029FE68-8029FE90 .text __ct__Q28JMessage6TParseFPQ28JMessage18TResourceContainer */
|
|
JMessage::TParse::TParse(JMessage::TResourceContainer* container) : mResourceContainer(container), mResource(NULL) {
|
|
}
|
|
|
|
/* 8029FE90-8029FEF0 .text __dt__Q28JMessage6TParseFv */
|
|
JMessage::TParse::~TParse() {
|
|
}
|
|
|
|
/* 8029FEF0-802A0024 .text parseHeader_next__Q28JMessage6TParseFPPCvPUlUl */
|
|
bool JMessage::TParse::parseHeader_next(const void** ppData, u32* pOutSize, u32 flag) {
|
|
/* Nonmatching */
|
|
const void* pData = *ppData;
|
|
data::TParse_THeader header(pData);
|
|
*ppData = header.getContent();
|
|
*pOutSize = header.get_blockNumber();
|
|
|
|
if (memcmp(header.get_signature(), &data::ga4cSignature, sizeof(data::ga4cSignature)) != 0)
|
|
return false;
|
|
|
|
if (header.get_type() != 'bmg1')
|
|
return false;
|
|
|
|
u8 encoding = header.get_encoding();
|
|
if (encoding != 0) {
|
|
if (!mResourceContainer->IsEncodingSettable(encoding))
|
|
return false;
|
|
|
|
mResourceContainer->SetEncoding(encoding);
|
|
}
|
|
|
|
if (flag & 0x10)
|
|
return true;
|
|
|
|
mResource = mResourceContainer->Do_create();
|
|
if (mResource == NULL)
|
|
return flag & 0x20 ? true : false;
|
|
|
|
mResource->setData_header(header.getRaw());
|
|
mResourceContainer->Push_back(mResource);
|
|
return true;
|
|
}
|
|
|
|
/* 802A0024-802A0170 .text parseBlock_next__Q28JMessage6TParseFPPCvPUlUl */
|
|
bool JMessage::TParse::parseBlock_next(const void** ppData, u32* pOutSize, u32 flag) {
|
|
/* Nonmatching */
|
|
JUTDataBlockHeader* pHeader = *(JUTDataBlockHeader**)ppData;
|
|
*(char**)ppData += pHeader->mSize;
|
|
*pOutSize = pHeader->mSize;
|
|
|
|
switch (pHeader->mType) {
|
|
case 'INF1':
|
|
mResource->setData_block_info(pHeader);
|
|
break;
|
|
case 'DAT1':
|
|
mResource->setData_block_messageData((char*)&pHeader[1]);
|
|
TResource* res = mResourceContainer->Get_groupID(mResource->mInfo.get_groupID());
|
|
if (res != mResource && !!(flag & 0x80)) {
|
|
mResourceContainer->Erase_destroy(res);
|
|
}
|
|
break;
|
|
case 'STR1':
|
|
mResource->setData_block_stringAttribute((char*)&pHeader[1]);
|
|
break;
|
|
case 'MID1':
|
|
mResource->setData_block_messageID(pHeader);
|
|
break;
|
|
default:
|
|
if (!(flag & 0x40))
|
|
return false;
|
|
break;
|
|
}
|
|
|
|
return true;
|
|
}
|