1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
//
// Generated by dtk
// Translation Unit: resource.cpp
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#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) {
JGadget::TContainerEnumerator<TResource, 0> enumerator(this);
while (enumerator) {
const TResource* res = &(*enumerator);
if (res->mInfo.get_groupID() == groupID)
return (TResource*)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 = NULL;
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;
}
|