summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorhatal175 <hatal175@users.noreply.github.com>2024-01-24 01:05:15 +0200
committerGitHub <noreply@github.com>2024-01-23 15:05:15 -0800
commitb2310b84b65e62d9f1a82a5b9e52766b325b765f (patch)
tree2f36e6d42f8729400b2f9685cd6eee63d7dbe400 /libs
parent69328d71ed0db6abc53fad41352c448685d29d51 (diff)
A little work on jstudio (#2045)
Diffstat (limited to 'libs')
-rw-r--r--libs/JSystem/JStudio/JStudio/ctb-data.cpp3
-rw-r--r--libs/JSystem/JStudio/JStudio/ctb.cpp191
-rw-r--r--libs/JSystem/JStudio/JStudio/object-id.cpp60
-rw-r--r--libs/PowerPC_EABI_Support/MSL/MSL_C++/MSL_Common/Include/iterator.h14
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