Files
tww/src/JSystem/JMessage/resource.cpp
T
Jasper St. Pierre 3fae1c28c3 some matches
2024-04-14 08:00:40 -07:00

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;
}