diff options
| author | hatal175 <hatal175@users.noreply.github.com> | 2024-01-24 01:05:15 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-23 15:05:15 -0800 |
| commit | b2310b84b65e62d9f1a82a5b9e52766b325b765f (patch) | |
| tree | 2f36e6d42f8729400b2f9685cd6eee63d7dbe400 /libs | |
| parent | 69328d71ed0db6abc53fad41352c448685d29d51 (diff) | |
A little work on jstudio (#2045)
Diffstat (limited to 'libs')
| -rw-r--r-- | libs/JSystem/JStudio/JStudio/ctb-data.cpp | 3 | ||||
| -rw-r--r-- | libs/JSystem/JStudio/JStudio/ctb.cpp | 191 | ||||
| -rw-r--r-- | libs/JSystem/JStudio/JStudio/object-id.cpp | 60 | ||||
| -rw-r--r-- | libs/PowerPC_EABI_Support/MSL/MSL_C++/MSL_Common/Include/iterator.h | 14 |
4 files changed, 184 insertions, 84 deletions
diff --git a/libs/JSystem/JStudio/JStudio/ctb-data.cpp b/libs/JSystem/JStudio/JStudio/ctb-data.cpp index 25fe3ad90a..a140d4909a 100644 --- a/libs/JSystem/JStudio/JStudio/ctb-data.cpp +++ b/libs/JSystem/JStudio/JStudio/ctb-data.cpp @@ -1,7 +1,6 @@ #include "JSystem/JStudio/JStudio/ctb.h" -#include "dol2asm.h" /* ############################################################################################## */ /* 804553F8-80455400 0039F8 0004+04 0/0 1/1 0/0 .sdata2 ga4cSignature__Q37JStudio3ctb4data */ -SECTION_SDATA2 u32 JStudio::ctb::data::ga4cSignature = 'CTB\0'; +const u32 JStudio::ctb::data::ga4cSignature = 'CTB\0'; diff --git a/libs/JSystem/JStudio/JStudio/ctb.cpp b/libs/JSystem/JStudio/JStudio/ctb.cpp index 5b98f3f732..b3aac66046 100644 --- a/libs/JSystem/JStudio/JStudio/ctb.cpp +++ b/libs/JSystem/JStudio/JStudio/ctb.cpp @@ -4,6 +4,9 @@ // #include "JSystem/JStudio/JStudio/ctb.h" +#include "algorithm.h" +#include "iterator.h" +#include "string.h" #include "dol2asm.h" // @@ -11,10 +14,6 @@ // namespace std { -template <typename A1, typename B1> -void find_if(/* ... */); -/* 802815B4 */ /* std::find_if<JGadget::TLinkList<JStudio::ctb::TObject, 12>::iterator, - JStudio::object::TPRObject_ID_equal> */ void func_802815B4(void* _this, JGadget::TLinkList<JStudio::ctb::TObject, 12>::iterator, JGadget::TLinkList<JStudio::ctb::TObject, 12>::iterator, JStudio::object::TPRObject_ID_equal); }; // namespace std @@ -61,7 +60,6 @@ Insert__Q27JGadget13TNodeLinkListFQ37JGadget13TNodeLinkList8iteratorPQ27JGadget1 extern "C" void Erase__Q27JGadget13TNodeLinkListFPQ27JGadget13TLinkListNode(); extern "C" void _savegpr_28(); extern "C" void _restgpr_28(); -extern "C" void memcmp(); extern "C" u32 ga4cSignature__Q37JStudio3ctb4data[1 + 1 /* padding */]; // @@ -117,25 +115,14 @@ SECTION_DATA extern void* __vt__Q37JStudio3ctb7TObject[4] = { }; /* 80280F18-80280F60 27B858 0048+00 1/1 0/0 0/0 .text __dt__Q37JStudio3ctb7TObjectFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::ctb::TObject::~TObject() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/ctb/__dt__Q37JStudio3ctb7TObjectFv.s" +JStudio::ctb::TObject::~TObject() { } -#pragma pop /* 80280F60-80280FBC 27B8A0 005C+00 1/1 0/0 0/0 .text * __ct__Q37JStudio3ctb14TObject_TxyzRyFRCQ47JStudio3ctb4data13TParse_TBlock */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::ctb::TObject_TxyzRy::TObject_TxyzRy(JStudio::ctb::data::TParse_TBlock const& param_0) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/ctb/__ct__Q37JStudio3ctb14TObject_TxyzRyFRCQ47JStudio3ctb4data13TParse_TBlock.s" +JStudio::ctb::TObject_TxyzRy::TObject_TxyzRy(JStudio::ctb::data::TParse_TBlock const& param_0) : TObject(param_0.get_ID(), param_0.get_IDSize(), param_0.getContent()) { + } -#pragma pop /* 80280FBC-80280FC4 27B8FC 0008+00 1/0 0/0 0/0 .text getScheme__Q37JStudio3ctb14TObject_TxyzRyCFv */ @@ -144,14 +131,7 @@ bool JStudio::ctb::TObject_TxyzRy::getScheme() const { } /* 80280FC4-80280FF4 27B904 0030+00 0/0 1/1 0/0 .text __ct__Q37JStudio3ctb8TControlFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::ctb::TControl::TControl() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/ctb/__ct__Q37JStudio3ctb8TControlFv.s" -} -#pragma pop +JStudio::ctb::TControl::TControl() : pFactory_(NULL) {} /* 80280FF4-80281060 27B934 006C+00 1/0 1/1 0/0 .text __dt__Q37JStudio3ctb8TControlFv */ #pragma push @@ -166,6 +146,12 @@ extern "C" asm void __dt__Q37JStudio3ctb8TControlFv() { /* 80281060-802810AC 27B9A0 004C+00 1/1 0/0 0/0 .text * appendObject__Q37JStudio3ctb8TControlFPQ37JStudio3ctb7TObject */ +// Push_back stack issues +#ifdef NONMATCHING +void JStudio::ctb::TControl::appendObject(JStudio::ctb::TObject* param_0) { + mList.Push_back(param_0); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -174,31 +160,34 @@ asm void JStudio::ctb::TControl::appendObject(JStudio::ctb::TObject* param_0) { #include "asm/JSystem/JStudio/JStudio/ctb/appendObject__Q37JStudio3ctb8TControlFPQ37JStudio3ctb7TObject.s" } #pragma pop +#endif /* 802810AC-802810DC 27B9EC 0030+00 1/1 0/0 0/0 .text * removeObject__Q37JStudio3ctb8TControlFPQ37JStudio3ctb7TObject */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::ctb::TControl::removeObject(JStudio::ctb::TObject* param_0) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/ctb/removeObject__Q37JStudio3ctb8TControlFPQ37JStudio3ctb7TObject.s" +void JStudio::ctb::TControl::removeObject(JStudio::ctb::TObject* param_0) { + mList.Erase(param_0); } -#pragma pop /* 802810DC-8028112C 27BA1C 0050+00 1/1 0/0 0/0 .text * destroyObject__Q37JStudio3ctb8TControlFPQ37JStudio3ctb7TObject */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::ctb::TControl::destroyObject(JStudio::ctb::TObject* param_0) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/ctb/destroyObject__Q37JStudio3ctb8TControlFPQ37JStudio3ctb7TObject.s" +void JStudio::ctb::TControl::destroyObject(JStudio::ctb::TObject* param_0) { + removeObject(param_0); + getFactory()->destroy(param_0); } -#pragma pop /* 8028112C-80281190 27BA6C 0064+00 0/0 2/2 0/0 .text destroyObject_all__Q37JStudio3ctb8TControlFv */ +// Stack +#ifdef NONMATCHING +void JStudio::ctb::TControl::destroyObject_all() { + TObject* pTVar1; + int iVar2; + + while (!mList.empty()) { + destroyObject(&mList.back()); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -207,27 +196,54 @@ asm void JStudio::ctb::TControl::destroyObject_all() { #include "asm/JSystem/JStudio/JStudio/ctb/destroyObject_all__Q37JStudio3ctb8TControlFv.s" } #pragma pop +#endif /* 80281190-80281230 27BAD0 00A0+00 1/1 0/0 0/0 .text getObject__Q37JStudio3ctb8TControlFPCvUl */ +// end issues +#ifdef NONMATCHING +JStudio::ctb::TObject* JStudio::ctb::TControl::getObject(void const* param_0, u32 param_1) { + JGadget::TLinkList<TObject, 2>::iterator local_3c = mList.begin(); + JGadget::TLinkList<TObject, 2>::iterator local_40 = mList.end(); + object::TPRObject_ID_equal aTStack_38(param_0, param_1); + JGadget::TLinkList<TObject, 2>::iterator local_50 = std::find_if(local_3c, local_40, object::TPRObject_ID_equal(param_0, param_1)); + if ((local_50 != local_40) != false) { + return &*local_50; + } + return NULL; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::ctb::TControl::getObject(void const* param_0, u32 param_1) { +asm JStudio::ctb::TObject* JStudio::ctb::TControl::getObject(void const* param_0, u32 param_1) { nofralloc #include "asm/JSystem/JStudio/JStudio/ctb/getObject__Q37JStudio3ctb8TControlFPCvUl.s" } #pragma pop +#endif /* 80281230-80281274 27BB70 0044+00 0/0 1/1 0/0 .text getObject_index__Q37JStudio3ctb8TControlFUl */ +// Stack issues +#ifdef NONMATCHING +JStudio::ctb::TObject* JStudio::ctb::TControl::getObject_index(u32 param_0) { + if (param_0 >= mList.size()) { + return 0; + } + JGadget::TLinkList<TObject, 2>::iterator aiStack_14 = mList.begin(); + std::advance(aiStack_14, param_0); + return &*aiStack_14; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::ctb::TControl::getObject_index(u32 param_0) { +asm JStudio::ctb::TObject* JStudio::ctb::TControl::getObject_index(u32 param_0) { nofralloc #include "asm/JSystem/JStudio/JStudio/ctb/getObject_index__Q37JStudio3ctb8TControlFUl.s" } #pragma pop +#endif /* 80281274-802812BC 27BBB4 0048+00 1/0 1/1 0/0 .text __dt__Q37JStudio3ctb8TFactoryFv */ #pragma push @@ -242,25 +258,20 @@ extern "C" asm void __dt__Q37JStudio3ctb8TFactoryFv() { /* 802812BC-80281320 27BBFC 0064+00 1/0 0/0 0/0 .text * create__Q37JStudio3ctb8TFactoryFRCQ47JStudio3ctb4data13TParse_TBlock */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::ctb::TFactory::create(JStudio::ctb::data::TParse_TBlock const& param_0) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/ctb/create__Q37JStudio3ctb8TFactoryFRCQ47JStudio3ctb4data13TParse_TBlock.s" +JStudio::ctb::TObject* JStudio::ctb::TFactory::create(JStudio::ctb::data::TParse_TBlock const& param_0) { + switch(param_0.get_scheme()) { + case 1: + return new TObject_TxyzRy(param_0); + default: + return NULL; + } } -#pragma pop /* 80281320-8028135C 27BC60 003C+00 1/0 0/0 0/0 .text * destroy__Q37JStudio3ctb8TFactoryFPQ37JStudio3ctb7TObject */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::ctb::TFactory::destroy(JStudio::ctb::TObject* param_0) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/ctb/destroy__Q37JStudio3ctb8TFactoryFPQ37JStudio3ctb7TObject.s" +void JStudio::ctb::TFactory::destroy(JStudio::ctb::TObject* param_0) { + delete param_0; } -#pragma pop /* 8028135C-8028137C 27BC9C 0020+00 0/0 1/1 0/0 .text * __ct__Q37JStudio3ctb6TParseFPQ37JStudio3ctb8TControl */ @@ -286,25 +297,63 @@ extern "C" asm void __dt__Q37JStudio3ctb6TParseFv() { /* 802813DC-80281470 27BD1C 0094+00 1/0 0/0 0/0 .text * parseHeader_next__Q37JStudio3ctb6TParseFPPCvPUlUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::ctb::TParse::parseHeader_next(void const** param_0, u32* param_1, u32 param_2) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/ctb/parseHeader_next__Q37JStudio3ctb6TParseFPPCvPUlUl.s" +bool JStudio::ctb::TParse::parseHeader_next(void const** ppData_inout, u32* puBlock_out, u32 param_3) { + JUT_ASSERT(221, ppData_inout!=0); + JUT_ASSERT(222, puBlock_out!=0); + void const* pData = *ppData_inout; + JUT_ASSERT(224, pData!=0); + data::TParse_THeader aTStack_478(pData); + *ppData_inout = aTStack_478.getContent(); + *puBlock_out = aTStack_478.get_blockNumber(); + if (memcmp(aTStack_478.get_signature(), &JStudio::ctb::data::ga4cSignature, sizeof(JStudio::ctb::data::ga4cSignature)) != 0) { + return false; + } + if (aTStack_478.get_byteOrder() != 0xfeff) { + return false; + } + u16 version = aTStack_478.get_version(); + if (version < 1) { + return false; + } + return version <= 1; } -#pragma pop /* 80281470-80281554 27BDB0 00E4+00 1/0 0/0 0/0 .text * parseBlock_next__Q37JStudio3ctb6TParseFPPCvPUlUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::ctb::TParse::parseBlock_next(void const** param_0, u32* param_1, u32 param_2) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/ctb/parseBlock_next__Q37JStudio3ctb6TParseFPPCvPUlUl.s" +bool JStudio::ctb::TParse::parseBlock_next(void const** ppData_inout, u32* puData_out, u32 param_3) { + JUT_ASSERT(260, ppData_inout!=0); + JUT_ASSERT(261, puData_out!=0); + void const* pData = *ppData_inout; + JUT_ASSERT(263, pData!=0); + data::TParse_TBlock aTStack_260(pData); + *ppData_inout = aTStack_260.getNext(); + *puData_out = aTStack_260.get_size(); + JStudio::ctb::TControl* pControl = getControl(); + JUT_ASSERT(269, pControl!=0); + if ((param_3 & 0x10) != 0) { + if (pControl->getObject(aTStack_260.get_ID(), aTStack_260.get_IDSize()) != NULL) { + return true; + } + } + if ((param_3 & 0x20) != 0) { + return true; + } + JStudio::ctb::TFactory* pFactory = pControl->getFactory(); + if (pFactory == NULL) { + return false; + } + + JStudio::ctb::TObject* pTVar6 = pFactory->create(aTStack_260); + if (pTVar6 == NULL) { + if ((param_3 & 0x40) == 0) { + return false; + } else { + return true; + } + } + pControl->appendObject(pTVar6); + return true; } -#pragma pop /* 80281554-802815B4 27BE94 0060+00 1/0 0/0 0/0 .text __dt__Q37JStudio3ctb14TObject_TxyzRyFv */ #pragma push diff --git a/libs/JSystem/JStudio/JStudio/object-id.cpp b/libs/JSystem/JStudio/JStudio/object-id.cpp index 93d78fb754..936f06f676 100644 --- a/libs/JSystem/JStudio/JStudio/object-id.cpp +++ b/libs/JSystem/JStudio/JStudio/object-id.cpp @@ -6,25 +6,63 @@ #include "JSystem/JStudio/JStudio/object-id.h" #include "dolphin/types.h" -// -// Forward References: -// +/* 80288988-80288A78 2832C8 00F0+00 0/0 3/3 0/0 .text + * isEqual__Q37JStudio6object7TIDDataFRCQ37JStudio6object7TIDDataRCQ37JStudio6object7TIDData */ +// regalloc +#ifdef NONMATCHING +bool JStudio::object::TIDData::isEqual(JStudio::object::TIDData const& a, + JStudio::object::TIDData const& b) { + if (a.getIDSize() != b.getIDSize()) { + return false; + } -extern "C" void -isEqual__Q37JStudio6object7TIDDataFRCQ37JStudio6object7TIDDataRCQ37JStudio6object7TIDData(); + u32 bytesRemaining = a.mID_size; + const void* aStr = a.getID(); + u32* aStr32 = (u32*)aStr; + const void* bStr = b.getID(); + u32* bStr32 = (u32*)bStr; + if (aStr == bStr) { // mismatch here + // they point to the same id + return true; + } -// -// Declarations: -// + for (bytesRemaining; bytesRemaining >= 4; bytesRemaining -= 4, aStr32++, bStr32++) { + if (*aStr32 != *bStr32) { + return false; + } + } -/* 80288988-80288A78 2832C8 00F0+00 0/0 3/3 0/0 .text - * isEqual__Q37JStudio6object7TIDDataFRCQ37JStudio6object7TIDDataRCQ37JStudio6object7TIDData */ + u8* aStrBytes = (u8*)aStr32; + u8* bStrBytes = (u8*)bStr32; + switch (bytesRemaining) { + case 3: + if (*aStrBytes != *bStrBytes) { + return false; + } + aStrBytes++; + bStrBytes++; + case 2: + if (*aStrBytes != *bStrBytes) { + return false; + } + aStrBytes++; + bStrBytes++; + case 1: + if (*aStrBytes != *bStrBytes) { + return false; + } + } + + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::object::TIDData::isEqual(JStudio::object::TIDData const& param_0, +asm bool JStudio::object::TIDData::isEqual(JStudio::object::TIDData const& param_0, JStudio::object::TIDData const& param_1) { nofralloc #include "asm/JSystem/JStudio/JStudio/object-id/func_80288988.s" } #pragma pop +#endif
\ No newline at end of file diff --git a/libs/PowerPC_EABI_Support/MSL/MSL_C++/MSL_Common/Include/iterator.h b/libs/PowerPC_EABI_Support/MSL/MSL_C++/MSL_Common/Include/iterator.h new file mode 100644 index 0000000000..82e799a576 --- /dev/null +++ b/libs/PowerPC_EABI_Support/MSL/MSL_C++/MSL_Common/Include/iterator.h @@ -0,0 +1,14 @@ +#ifndef MSL_ITERATOR_H_ +#define MSL_ITERATOR_H_ + +namespace std { +template< class InputIt, class Distance > +inline void advance( InputIt& it, Distance n) { + while (n > 0) { + --n; + ++it; + } +} +} + +#endif
\ No newline at end of file |
