// // Generated by dtk // Translation Unit: processor.cpp // #include "JSystem/JMessage/processor.h" #include "JSystem/JMessage/control.h" namespace JMessage { namespace { /* 8029EDA4-8029EDCC .text process_setMessageIndex_reserved___Q28JMessage23@unnamed@processor_cpp@FUs */ bool process_setMessageIndex_reserved_(u16 messageIndex) { switch (messageIndex) { case 0xFFFF: return false; default: return false; } } /* 8029EDCC-8029EE18 .text process_setMessage_index___Q28JMessage23@unnamed@processor_cpp@FPQ28JMessage8TControlUs */ bool process_setMessage_index_(TControl* control, u16 index) { if (index >= 0xFF00) { return process_setMessageIndex_reserved_(index); } else { control->mMessageIndex = index; return !!control->setMessageCode_flush_(); } } /* 8029EE18-8029EE6C .text process_setMessage_code___Q28JMessage23@unnamed@processor_cpp@FPQ28JMessage8TControlUl */ bool process_setMessage_code_(TControl* control, u32 code) { /* Nonmatching */ u16 messageIndex = code & 0xFFFF; if (messageIndex >= 0xFF00) { return process_setMessageIndex_reserved_(code); } else { return !!control->setMessageCode(code); } } }; // namespace /* 8029EE6C-8029EEA4 .text pushCurrent__Q28JMessage10TProcessorFPCc */ void TProcessor::pushCurrent(const char* v) { if (v == NULL) return; if (!mStack.IsStorable()) return; mStack.push(mCurrent); mCurrent = v; } /* 8029EEA4-8029EEC8 .text popCurrent__Q28JMessage10TProcessorFv */ const char* TProcessor::popCurrent() { mCurrent = mStack.top(); mStack.pop(); } struct SelectCallBackWork { /* 0x00 */ TProcessor::OnSelectBeginCallBack mCallBack; /* 0x04 */ const char* mBase; /* 0x08 */ const void* mTable; /* 0x0C */ u32 mRest; }; /* 8029EEC8-8029EF54 .text on_select_begin__Q28JMessage10TProcessorFPFPQ28JMessage10TProcessor_PCcPCvPCcUl */ void TProcessor::on_select_begin(OnSelectBeginCallBack callback, const void* offs, const char* base, u32 rest) { if (mStack.IsStorable()) { mProcess.reset_select(); SelectCallBackWork* work = (SelectCallBackWork*)&mProcess.mCallBackWork; work->mCallBack = callback; work->mBase = base; work->mTable = offs; work->mRest = rest; const char *v = work->mCallBack(this); pushCurrent(v); do_select_begin(rest); } } /* 8029EF54-8029EFA0 .text on_select_end__Q28JMessage10TProcessorFv */ void TProcessor::on_select_end() { mProcess.reset_normal(); popCurrent(); do_select_end(); } /* 8029EFA0-8029EFFC .text on_select_separate__Q28JMessage10TProcessorFv */ void TProcessor::on_select_separate() { popCurrent(); SelectCallBackWork* work = (SelectCallBackWork*)&mProcess.mCallBackWork; const char *v = work->mCallBack(this); pushCurrent(v); do_select_separate(); } /* 8029EFFC-8029F000 .text do_character__Q28JMessage10TProcessorFi */ void TProcessor::do_character(int) { } /* 8029F000-8029F008 .text do_tag__Q28JMessage10TProcessorFUlPCvUl */ bool TProcessor::do_tag(u32, const void*, u32) { return false; } /* 8029F008-8029F010 .text do_systemTagCode__Q28JMessage10TProcessorFUsPCvUl */ bool TProcessor::do_systemTagCode(u16, const void*, u32) { return false; } /* 8029F010-8029F014 .text do_select_begin__Q28JMessage10TProcessorFUl */ void TProcessor::do_select_begin(u32) { } /* 8029F014-8029F018 .text do_select_end__Q28JMessage10TProcessorFv */ void TProcessor::do_select_end() { } /* 8029F018-8029F01C .text do_select_separate__Q28JMessage10TProcessorFv */ void TProcessor::do_select_separate() { } /* 8029F01C-8029F064 .text __dt__Q28JMessage10TProcessorFv */ TProcessor::~TProcessor() { } /* 8029F064-8029F080 .text reset___Q28JMessage10TProcessorFPCc */ void TProcessor::reset_(const char* v) { mCurrent = v; mStack.clear(); mProcess.reset_normal(); } /* 8029F080-8029F120 .text on_tag___Q28JMessage10TProcessorFv */ void TProcessor::on_tag_() { u32 size; const u8* current = (const u8*)getCurrent(); size = current[1]; mCurrent = (const char*)current + size; u32 tag = (current[2] << 16 | current[3] << 8); tag |= current[4]; if (!do_tag(tag, ¤t[5], size - 5)) { do_tag_(tag, ¤t[5], size - 5); } } /* 8029F120-8029F248 .text do_tag___Q28JMessage10TProcessorFUlPCvUl */ bool TProcessor::do_tag_(u32 tag, const void* data, u32 size) { u16 code = data::getTagCode(tag); u8 group = data::getTagGroup(tag); switch (group) { case 0xFF: if (!do_systemTagCode(code, data, size)) { do_systemTagCode_(code, data, size); } break; case 0xFE: pushCurrent(mControl->on_word(code)); break; case 0xFD: pushCurrent(mControl->on_message_limited(code)); break; case 0xF6: on_select_begin(process_select_limited_, data, (char*)data + size, code); break; case 0xF5: on_select_begin(process_select_, data, (char*)data + size, code); break; } } /* 8029F248-8029F2A0 .text do_systemTagCode___Q28JMessage10TProcessorFUsPCvUl */ void TProcessor::do_systemTagCode_(u16 code, const void* data, u32 size) { switch (code) { case 0x05: pushCurrent(mControl->on_message(JGadget::binary::TParseValue::parse(data))); break; } } /* 8029F2A0-8029F37C .text process_character___Q28JMessage10TProcessorFv */ bool TProcessor::process_character_() { /* Nonmatching */ const char * current = getCurrent(); switch (current[0]) { case 0: if (!mProcess.mCallBack(this)) return false; break; case 0x1A: on_tag_(); break; default: // mControl->do_word(current[0]); break; } return true; } /* 8029F37C-8029F3C4 .text process_onCharacterEnd_normal___Q28JMessage10TProcessorFPQ28JMessage10TProcessor */ bool TProcessor::process_onCharacterEnd_normal_(TProcessor* proc) { if (!proc->mStack.empty()) { proc->popCurrent(); return true; } else { proc->do_end_(); return false; } } /* 8029F3C4-8029F40C .text process_onCharacterEnd_select___Q28JMessage10TProcessorFPQ28JMessage10TProcessor */ bool TProcessor::process_onCharacterEnd_select_(TProcessor* proc) { SelectCallBackWork* work = (SelectCallBackWork*) &proc->mProcess.mCallBackWork; work->mRest--; if (work->mRest != 0) { proc->on_select_separate(); return true; } else { proc->on_select_end(); return true; } } /* 8029F40C-8029F428 .text process_select_limited___Q28JMessage10TProcessorFPQ28JMessage10TProcessor */ const char* TProcessor::process_select_limited_(TProcessor* proc) { SelectCallBackWork* work = (SelectCallBackWork*) &proc->mProcess.mCallBackWork; u16 offs = ((const u16*)work->mTable)[0]; work->mTable = (const char*)work->mTable + sizeof(offs); return &work->mBase[offs]; } /* 8029F428-8029F444 .text process_select___Q28JMessage10TProcessorFPQ28JMessage10TProcessor */ const char* TProcessor::process_select_(TProcessor* proc) { /* Nonmatching */ SelectCallBackWork* work = (SelectCallBackWork*) &proc->mProcess.mCallBackWork; u32 offs = ((const u32*)work->mTable)[0]; work->mTable = (const char*)work->mTable + sizeof(offs); return &work->mBase[offs]; } struct JumpCallBackWork { /* 0x00 */ u32 mTarget; }; struct BranchCallBackWork { /* 0x00 */ const void* mTable; /* 0x04 */ u32 mTarget; }; /* 8029F444-8029F480 .text __ct__Q28JMessage18TSequenceProcessorFPQ28JMessage8TControl */ TSequenceProcessor::TSequenceProcessor(TControl* control) : TProcessor(control) { mStatus = kStatus_Begin; } /* 8029F480-8029F4E0 .text __dt__Q28JMessage18TSequenceProcessorFv */ TSequenceProcessor::~TSequenceProcessor() { } /* 8029F4E0-8029F658 .text process__Q28JMessage18TSequenceProcessorFPCc */ const char* TSequenceProcessor::process(const char* stop) { /* Nonmatching */ do { switch (mStatus) { case kStatus_Normal: break; case kStatus_Jump: if (!on_jump_isReady()) return mCurrent; mStatus = kStatus_Normal; if (mProcess.mCallBack(this)) on_jump(mControl->getMessageEntry(), mControl->getMessageData_begin()); break; case kStatus_Branch: { BranchCallBackWork* work = (BranchCallBackWork*) &mProcess.mCallBackWork; u32 rt = on_branch_queryResult(); if (rt > 0xFFFF) { switch (rt) { case -1: return mCurrent; case -2: mStatus = kStatus_Normal; break; } } else { mStatus = kStatus_Normal; if (rt < work->mTarget && mProcess.mCallBack(this)) on_branch(mControl->getMessageEntry(), mControl->getMessageData_begin()); } } break; } if (mCurrent == stop) { do_end_(); return NULL; } if (!on_isReady()) return mCurrent; } while (process_character_()); return NULL; } /* 8029F658-8029F684 .text on_isReady__Q28JMessage18TSequenceProcessorFv */ bool TSequenceProcessor::on_isReady() { return do_isReady(); } /* 8029F684-8029F698 .text on_jump_register__Q28JMessage18TSequenceProcessorFPFPQ28JMessage18TSequenceProcessor_bUl */ void TSequenceProcessor::on_jump_register(OnJumpRegisterCallBack callback, u32 target) { mStatus = kStatus_Jump; mProcess.mCallBack = (ProcessorCallBack)callback; JumpCallBackWork* work = (JumpCallBackWork*) &mProcess.mCallBackWork; work->mTarget = target; } /* 8029F698-8029F6C4 .text on_jump_isReady__Q28JMessage18TSequenceProcessorFv */ bool TSequenceProcessor::on_jump_isReady() { return do_jump_isReady(); } /* 8029F6C4-8029F720 .text on_jump__Q28JMessage18TSequenceProcessorFPCvPCc */ void TSequenceProcessor::on_jump(const void* target, const char* v) { reset_(v); do_jump(target, v); } /* 8029F720-8029F730 .text on_branch_register__Q28JMessage18TSequenceProcessorFPFPQ28JMessage18TSequenceProcessorUl_bPCvUl */ void TSequenceProcessor::on_branch_register(OnBranchRegisterCallBack callback, const void* offset, u32 target) { mProcess.mCallBack = (ProcessorCallBack)callback; BranchCallBackWork* work = (BranchCallBackWork*) &mProcess.mCallBackWork; work->mTable = offset; work->mTarget = target; } /* 8029F730-8029F764 .text on_branch_query__Q28JMessage18TSequenceProcessorFUs */ void TSequenceProcessor::on_branch_query(u16 branch) { mStatus = 4; do_branch_query(branch); } /* 8029F764-8029F790 .text on_branch_queryResult__Q28JMessage18TSequenceProcessorFv */ int TSequenceProcessor::on_branch_queryResult() { return do_branch_queryResult(); } /* 8029F790-8029F7EC .text on_branch__Q28JMessage18TSequenceProcessorFPCvPCc */ void TSequenceProcessor::on_branch(const void* target, const char* v) { reset_(v); do_branch(target, v); } /* 8029F7EC-8029F7F0 .text do_begin__Q28JMessage18TSequenceProcessorFPCvPCc */ void TSequenceProcessor::do_begin(const void*, const char*) { } /* 8029F7F0-8029F7F4 .text do_end__Q28JMessage18TSequenceProcessorFv */ void TSequenceProcessor::do_end() { } /* 8029F7F4-8029F7FC .text do_isReady__Q28JMessage18TSequenceProcessorFv */ bool TSequenceProcessor::do_isReady() { return true; } /* 8029F7FC-8029F804 .text do_jump_isReady__Q28JMessage18TSequenceProcessorFv */ bool TSequenceProcessor::do_jump_isReady() { return true; } /* 8029F804-8029F808 .text do_jump__Q28JMessage18TSequenceProcessorFPCvPCc */ void TSequenceProcessor::do_jump(const void*, const char*) { } /* 8029F808-8029F80C .text do_branch_query__Q28JMessage18TSequenceProcessorFUs */ void TSequenceProcessor::do_branch_query(u16) { } /* 8029F80C-8029F814 .text do_branch_queryResult__Q28JMessage18TSequenceProcessorFv */ int TSequenceProcessor::do_branch_queryResult() { return -2; } /* 8029F814-8029F818 .text do_branch__Q28JMessage18TSequenceProcessorFPCvPCc */ void TSequenceProcessor::do_branch(const void*, const char*) { } /* 8029F818-8029F868 .text reset___Q28JMessage18TSequenceProcessorFPCc */ void TSequenceProcessor::reset_(const char* v) { TProcessor::reset_(v); mStatus = kStatus_Begin; if (v != NULL) mStatus = kStatus_Normal; } /* 8029F868-8029F894 .text do_begin___Q28JMessage18TSequenceProcessorFPCvPCc */ void TSequenceProcessor::do_begin_(const void* target, const char* v) { do_begin(target, v); } /* 8029F894-8029F8C8 .text do_end___Q28JMessage18TSequenceProcessorFv */ void TSequenceProcessor::do_end_() { mStatus = kStatus_End; do_end(); } /* 8029F8C8-8029F9D4 .text do_tag___Q28JMessage18TSequenceProcessorFUlPCvUl */ bool TSequenceProcessor::do_tag_(u32 tag, const void* data, u32 size) { const char* datap = (const char*)data; u16 code = data::getTagCode(tag); u8 group = data::getTagGroup(tag); switch (group) { case 0xFC: on_jump_register(process_jump_limited_, code); break; case 0xFB: on_branch_register(process_branch_limited_, datap, code); break; case 0xFA: on_branch_register(process_branch_, datap, code); break; case 0xF9: on_branch_query(code); break; case 0xF8: on_branch_register(process_branch_limited_, datap + 2, JGadget::binary::TParseValue::parse(datap)); on_branch_query(code); break; case 0xF7: on_branch_register(process_branch_, datap + 2, JGadget::binary::TParseValue::parse(datap)); on_branch_query(code); break; default: TProcessor::do_tag_(tag, data, size); break; } } /* 8029F9D4-8029FA2C .text do_systemTagCode___Q28JMessage18TSequenceProcessorFUsPCvUl */ void TSequenceProcessor::do_systemTagCode_(u16 code, const void* data, u32 size) { switch (code) { case 0: case 1: case 2: case 3: break; case 6: u32 target = JGadget::binary::TParseValue::parse(data); on_jump_register(process_jump_, target); break; case 4: case 5: default: TProcessor::do_systemTagCode_(code, data, size); break; } } /* 8029FA2C-8029FA5C .text process_jump_limited___Q28JMessage18TSequenceProcessorFPQ28JMessage18TSequenceProcessor */ bool TSequenceProcessor::process_jump_limited_(TSequenceProcessor* proc) { JumpCallBackWork* work = (JumpCallBackWork*) &proc->mProcess.mCallBackWork; process_setMessage_index_(proc->mControl, work->mTarget); } /* 8029FA5C-8029FA88 .text process_jump___Q28JMessage18TSequenceProcessorFPQ28JMessage18TSequenceProcessor */ bool TSequenceProcessor::process_jump_(TSequenceProcessor* proc) { JumpCallBackWork* work = (JumpCallBackWork*) &proc->mProcess.mCallBackWork; process_setMessage_code_(proc->mControl, work->mTarget); } /* 8029FA88-8029FAB8 .text process_branch_limited___Q28JMessage18TSequenceProcessorFPQ28JMessage18TSequenceProcessorUl */ bool TSequenceProcessor::process_branch_limited_(TSequenceProcessor* proc, u32 choice) { /* Nonmatching */ BranchCallBackWork* work = (BranchCallBackWork*) &proc->mProcess.mCallBackWork; process_setMessage_index_(proc->mControl, ((u16*)work->mTable)[choice]); } /* 8029FAB8-8029FAE8 .text process_branch___Q28JMessage18TSequenceProcessorFPQ28JMessage18TSequenceProcessorUl */ bool TSequenceProcessor::process_branch_(TSequenceProcessor* proc, u32 choice) { /* Nonmatching */ BranchCallBackWork* work = (BranchCallBackWork*) &proc->mProcess.mCallBackWork; process_setMessage_code_(proc->mControl, ((u32*)work->mTable)[choice]); } /* 8029FAE8-8029FB20 .text __ct__Q28JMessage19TRenderingProcessorFPQ28JMessage8TControl */ TRenderingProcessor::TRenderingProcessor(TControl* control) : TProcessor(control) { } /* 8029FB20-8029FB80 .text __dt__Q28JMessage19TRenderingProcessorFv */ TRenderingProcessor::~TRenderingProcessor() { } /* 8029FB80-8029FBF0 .text process__Q28JMessage19TRenderingProcessorFPCc */ const char* TRenderingProcessor::process(const char* stop) { /* Nonmatching */ do { if (mCurrent == stop) { do_end_(); return NULL; } } while(process_character_()); return NULL; } /* 8029FBF0-8029FBF4 .text do_begin__Q28JMessage19TRenderingProcessorFPCvPCc */ void TRenderingProcessor::do_begin(const void*, const char*) { } /* 8029FBF4-8029FBF8 .text do_end__Q28JMessage19TRenderingProcessorFv */ void TRenderingProcessor::do_end() { } /* 8029FBF8-8029FC24 .text do_begin___Q28JMessage19TRenderingProcessorFPCvPCc */ void TRenderingProcessor::do_begin_(const void* entry, const char* data) { do_begin(entry, data); } /* 8029FC24-8029FC50 .text do_end___Q28JMessage19TRenderingProcessorFv */ void TRenderingProcessor::do_end_() { do_end(); } /* 8029FC50-8029FC84 .text do_tag___Q28JMessage19TRenderingProcessorFUlPCvUl */ bool TRenderingProcessor::do_tag_(u32 tag, const void* data, u32 size) { u8 group = data::getTagGroup(tag); switch (group) { case 0xFC: case 0xFB: case 0xFA: case 0xF9: case 0xF8: case 0xF7: break; default: TProcessor::do_tag_(tag, data, size); break; } } /* 8029FC84-8029FCC4 .text do_systemTagCode___Q28JMessage19TRenderingProcessorFUsPCvUl */ void TRenderingProcessor::do_systemTagCode_(u16 code, const void* data, u32 size) { switch (code) { case 0x06: case 0x03: case 0x02: case 0x01: case 0x00: break; default: TProcessor::do_systemTagCode_(code, data, size); break; } } }; // namespace JMessage