Files
tp/include/JSystem/JMessage/resource.h
T

172 lines
5.2 KiB
C++
Raw Normal View History

#ifndef JMESSAGE_RESOURCE_H
#define JMESSAGE_RESOURCE_H
2021-03-28 22:49:05 +02:00
#include "JSystem/JGadget/linklist.h"
2023-02-19 09:40:57 -08:00
#include "JSystem/JMessage/data.h"
#include "JSystem/JMessage/locale.h"
2021-03-28 22:49:05 +02:00
2022-03-15 02:25:25 -07:00
namespace JMessage {
2024-04-12 00:10:30 -06:00
/**
* @ingroup jsystem-jmessage
*
*/
2023-10-01 00:24:19 +03:00
struct TResource {
2023-02-19 09:40:57 -08:00
TResource()
2025-06-13 05:33:33 -07:00
: oParse_THeader_(NULL),
oParse_TBlock_info_(NULL),
pMessageText_(NULL),
pStringAttribute_(NULL),
oParse_TBlock_messageID_(NULL)
{}
2023-02-19 09:40:57 -08:00
2025-06-13 05:33:33 -07:00
/* 802A8CDC */ u16 toMessageIndex_messageID(u32 uMsgID, u32, bool* pbValid) const;
2023-02-19 09:40:57 -08:00
2025-06-13 05:33:33 -07:00
bool isContained_messageIndex(u16 uMessageIndex) const {
return uMessageIndex < getMessageEntryNumber();
2023-02-19 09:40:57 -08:00
}
2025-06-13 05:33:33 -07:00
u32 getMessageEntrySize() const { return oParse_TBlock_info_.get_messageEntrySize(); }
u32 getMessageEntryNumber() const { return oParse_TBlock_info_.get_messageEntryNumber(); }
2023-02-19 09:40:57 -08:00
2025-06-13 05:33:33 -07:00
u16 getGroupID() const { return oParse_TBlock_info_.get_groupID(); }
2023-02-19 09:40:57 -08:00
2025-06-13 05:33:33 -07:00
void* getMessageEntry_messageIndex(u16 uMessageIndex) const {
if (!isContained_messageIndex(uMessageIndex)) {
2023-02-19 09:40:57 -08:00
return NULL;
}
2025-06-13 05:33:33 -07:00
void* pEntry = oParse_TBlock_info_.getContent() + (uMessageIndex * getMessageEntrySize());
return pEntry;
2023-02-19 09:40:57 -08:00
}
char* getMessageText_messageEntry(const void* pEntry) const {
JUT_ASSERT(141, pEntry!=NULL);
2025-06-13 05:33:33 -07:00
return pMessageText_ + *(int*)pEntry;
2023-02-19 09:40:57 -08:00
}
2025-06-13 05:33:33 -07:00
const char* getMessageText_messageIndex(u16 uMessageIndex) const {
void* pEntry = getMessageEntry_messageIndex(uMessageIndex);
2023-02-19 09:40:57 -08:00
if (pEntry == NULL) {
return NULL;
}
return getMessageText_messageEntry(pEntry);
}
void setData_header(const void* pData) {
2025-06-13 05:33:33 -07:00
oParse_THeader_.setRaw(pData);
2023-02-19 09:40:57 -08:00
}
void setData_block_info(const void* pData) {
2025-06-13 05:33:33 -07:00
oParse_TBlock_info_.setRaw(pData);
JGADGET_ASSERTWARN(75, oParse_TBlock_info_.get_groupID()<= data::MESSAGEGROUPID_USER_ENUM_MAX);
JGADGET_ASSERTWARN(77, oParse_TBlock_info_.get_messageEntryNumber()<= data::MESSAGEINDEX_USER_ENUM_MAX);
}
void setData_block_messageText(const void* pData) {
2025-06-13 05:33:33 -07:00
pMessageText_ = data::TParse_TBlock_messageText(pData).getContent();
}
void setData_block_stringAttribute(const void* pData) {
2025-06-13 05:33:33 -07:00
pStringAttribute_ = data::TParse_TBlock_stringAttribute(pData).getContent();
}
void setData_block_messageID(const void* pData) {
2025-06-13 05:33:33 -07:00
oParse_TBlock_messageID_.setRaw(pData);
}
2023-10-01 00:24:19 +03:00
JGadget::TLinkListNode ocObject_;
2025-06-13 05:33:33 -07:00
/* 0x08 */ data::TParse_THeader oParse_THeader_;
/* 0x0C */ data::TParse_TBlock_info oParse_TBlock_info_;
/* 0x10 */ char* pMessageText_;
/* 0x14 */ char* pStringAttribute_;
/* 0x18 */ data::TParse_TBlock_messageID oParse_TBlock_messageID_;
2022-03-15 02:25:25 -07:00
};
2024-04-12 00:10:30 -06:00
/**
* @ingroup jsystem-jmessage
*
*/
2023-02-19 09:40:57 -08:00
struct TResource_color {
2025-06-13 05:33:33 -07:00
TResource_color()
: oParse_THeader_(NULL),
oParse_TBlock_color_(NULL)
{}
2024-01-03 05:37:15 +02:00
void reset() {
2025-06-13 05:33:33 -07:00
oParse_THeader_.setRaw(NULL);
oParse_TBlock_color_.setRaw(NULL);
2024-01-03 05:37:15 +02:00
}
2023-02-19 09:40:57 -08:00
2025-06-13 05:33:33 -07:00
/* 0x0 */ data::TParse_THeader oParse_THeader_;
/* 0x4 */ data::TParse_TBlock_color oParse_TBlock_color_;
2023-02-19 09:40:57 -08:00
}; // Size: 0x8
2024-04-12 00:10:30 -06:00
/**
* @ingroup jsystem-jmessage
*
*/
2022-03-15 02:35:30 -07:00
struct TResourceContainer {
2023-02-19 09:40:57 -08:00
struct TCResource : public JGadget::TLinkList_factory<TResource, 0> {
2022-03-15 02:35:30 -07:00
/* 802A8EC0 */ TCResource();
2025-06-13 05:33:33 -07:00
/* 802A8F6C */ TResource* Get_groupID(u16 u16GroupID);
2023-02-19 09:40:57 -08:00
/* 802A8EF8 */ virtual ~TCResource();
/* 802A8FFC */ virtual JMessage::TResource* Do_create();
2025-06-13 05:33:33 -07:00
/* 802A9048 */ virtual void Do_destroy(JMessage::TResource* pResource);
2022-03-15 02:35:30 -07:00
};
/* 802A906C */ TResourceContainer();
2025-06-13 05:33:33 -07:00
/* 802A90B8 */ void setEncoding(u8 e);
/* 802A90F0 */ void setEncoding_(u8 e);
2022-03-15 02:35:30 -07:00
2025-06-13 05:33:33 -07:00
int parseCharacter(const char** ppszText) const {
JUT_ASSERT(330, pfnParseCharacter_!=NULL);
2025-06-13 05:33:33 -07:00
return pfnParseCharacter_(ppszText);
}
2023-02-19 09:40:57 -08:00
2025-06-13 05:33:33 -07:00
TResource* getResource_groupID(u16 u16GroupID) { return resContainer_.Get_groupID(u16GroupID); }
TResource* getResource_groupID(u16 u16GroupID) const { return getResource_groupID(u16GroupID); }
bool isEncodingSettable(u8 e) const { return encodingType_ == e || encodingType_ == 0; }
2023-10-01 00:24:19 +03:00
const TCResource* getResourceContainer() const { return &resContainer_; }
2024-01-03 05:37:15 +02:00
void destroyResource() {
resContainer_.Clear_destroy();
}
void destroyResource_color() {
resColor_.reset();
}
void destroyResource_all() {
destroyResource();
destroyResource_color();
}
2023-02-19 09:40:57 -08:00
static JMessage::locale::parseCharacter_function sapfnParseCharacter_[5];
2025-06-13 05:33:33 -07:00
/* 0x00 */ u8 encodingType_;
2025-04-09 16:45:30 -04:00
/* 0x04 */ JMessage::locale::parseCharacter_function pfnParseCharacter_;
2023-02-19 09:40:57 -08:00
/* 0x08 */ TCResource resContainer_;
/* 0x18 */ TResource_color resColor_;
2022-03-15 02:35:30 -07:00
};
2024-04-12 00:10:30 -06:00
/**
* @ingroup jsystem-jmessage
*
*/
2023-02-19 09:40:57 -08:00
struct TParse : public JGadget::binary::TParse_header_block {
2025-06-13 05:33:33 -07:00
/* 802A9130 */ TParse(JMessage::TResourceContainer* pContainer);
2023-02-19 09:40:57 -08:00
/* 802A9158 */ virtual ~TParse();
2025-06-13 05:33:33 -07:00
/* 802A91B8 */ virtual bool parseHeader_next(const void** ppData_inout, u32* puBlock_out, u32);
/* 802A92F4 */ virtual bool parseBlock_next(const void** ppData_inout, u32* puData_out, u32);
2023-02-19 09:40:57 -08:00
/* 0x4 */ TResourceContainer* pContainer_;
/* 0x8 */ TResource* pResource_;
2022-03-15 02:35:30 -07:00
};
}; // namespace JMessage
#endif /* JMESSAGE_RESOURCE_H */