A little work on jstudio (#2045)

This commit is contained in:
hatal175
2024-01-24 01:05:15 +02:00
committed by GitHub
parent 16ab086b04
commit 72edf07ad5
16 changed files with 326 additions and 346 deletions
@@ -1,25 +0,0 @@
lbl_80280F60:
/* 80280F60 80 A4 00 00 */ lwz r5, 0(r4)
/* 80280F64 A0 85 00 06 */ lhz r4, 6(r5)
/* 80280F68 38 04 00 03 */ addi r0, r4, 3
/* 80280F6C 54 00 00 3A */ rlwinm r0, r0, 0, 0, 0x1d
/* 80280F70 38 C5 00 08 */ addi r6, r5, 8
/* 80280F74 7C A6 02 14 */ add r5, r6, r0
/* 80280F78 38 00 00 00 */ li r0, 0
/* 80280F7C 28 04 00 00 */ cmplwi r4, 0
/* 80280F80 41 82 00 08 */ beq lbl_80280F88
/* 80280F84 7C C0 33 78 */ mr r0, r6
lbl_80280F88:
/* 80280F88 90 03 00 00 */ stw r0, 0(r3)
/* 80280F8C 90 83 00 04 */ stw r4, 4(r3)
/* 80280F90 3C 80 80 3C */ lis r4, __vt__Q37JStudio3ctb7TObject@ha /* 0x803C48D0@ha */
/* 80280F94 38 04 48 D0 */ addi r0, r4, __vt__Q37JStudio3ctb7TObject@l /* 0x803C48D0@l */
/* 80280F98 90 03 00 08 */ stw r0, 8(r3)
/* 80280F9C 38 00 00 00 */ li r0, 0
/* 80280FA0 90 03 00 0C */ stw r0, 0xc(r3)
/* 80280FA4 90 03 00 10 */ stw r0, 0x10(r3)
/* 80280FA8 90 A3 00 14 */ stw r5, 0x14(r3)
/* 80280FAC 3C 80 80 3C */ lis r4, __vt__Q37JStudio3ctb14TObject_TxyzRy@ha /* 0x803C48C0@ha */
/* 80280FB0 38 04 48 C0 */ addi r0, r4, __vt__Q37JStudio3ctb14TObject_TxyzRy@l /* 0x803C48C0@l */
/* 80280FB4 90 03 00 08 */ stw r0, 8(r3)
/* 80280FB8 4E 80 00 20 */ blr
@@ -1,13 +0,0 @@
lbl_80280FC4:
/* 80280FC4 3C 80 80 3C */ lis r4, __vt__Q37JStudio3ctb8TControl@ha /* 0x803C48B4@ha */
/* 80280FC8 38 04 48 B4 */ addi r0, r4, __vt__Q37JStudio3ctb8TControl@l /* 0x803C48B4@l */
/* 80280FCC 90 03 00 00 */ stw r0, 0(r3)
/* 80280FD0 38 00 00 00 */ li r0, 0
/* 80280FD4 90 03 00 04 */ stw r0, 4(r3)
/* 80280FD8 90 03 00 0C */ stw r0, 0xc(r3)
/* 80280FDC 90 03 00 10 */ stw r0, 0x10(r3)
/* 80280FE0 90 03 00 08 */ stw r0, 8(r3)
/* 80280FE4 38 03 00 0C */ addi r0, r3, 0xc
/* 80280FE8 90 03 00 0C */ stw r0, 0xc(r3)
/* 80280FEC 90 03 00 10 */ stw r0, 0x10(r3)
/* 80280FF0 4E 80 00 20 */ blr
@@ -1,20 +0,0 @@
lbl_80280F18:
/* 80280F18 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 80280F1C 7C 08 02 A6 */ mflr r0
/* 80280F20 90 01 00 14 */ stw r0, 0x14(r1)
/* 80280F24 93 E1 00 0C */ stw r31, 0xc(r1)
/* 80280F28 7C 7F 1B 79 */ or. r31, r3, r3
/* 80280F2C 41 82 00 1C */ beq lbl_80280F48
/* 80280F30 3C A0 80 3C */ lis r5, __vt__Q37JStudio3ctb7TObject@ha /* 0x803C48D0@ha */
/* 80280F34 38 05 48 D0 */ addi r0, r5, __vt__Q37JStudio3ctb7TObject@l /* 0x803C48D0@l */
/* 80280F38 90 1F 00 08 */ stw r0, 8(r31)
/* 80280F3C 7C 80 07 35 */ extsh. r0, r4
/* 80280F40 40 81 00 08 */ ble lbl_80280F48
/* 80280F44 48 04 DD F9 */ bl __dl__FPv
lbl_80280F48:
/* 80280F48 7F E3 FB 78 */ mr r3, r31
/* 80280F4C 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 80280F50 80 01 00 14 */ lwz r0, 0x14(r1)
/* 80280F54 7C 08 03 A6 */ mtlr r0
/* 80280F58 38 21 00 10 */ addi r1, r1, 0x10
/* 80280F5C 4E 80 00 20 */ blr
@@ -1,30 +0,0 @@
lbl_802812BC:
/* 802812BC 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802812C0 7C 08 02 A6 */ mflr r0
/* 802812C4 90 01 00 14 */ stw r0, 0x14(r1)
/* 802812C8 93 E1 00 0C */ stw r31, 0xc(r1)
/* 802812CC 7C 9F 23 78 */ mr r31, r4
/* 802812D0 80 64 00 00 */ lwz r3, 0(r4)
/* 802812D4 A0 03 00 04 */ lhz r0, 4(r3)
/* 802812D8 2C 00 00 01 */ cmpwi r0, 1
/* 802812DC 41 82 00 08 */ beq lbl_802812E4
/* 802812E0 48 00 00 28 */ b lbl_80281308
lbl_802812E4:
/* 802812E4 38 60 00 18 */ li r3, 0x18
/* 802812E8 48 04 D9 65 */ bl __nw__FUl
/* 802812EC 7C 60 1B 79 */ or. r0, r3, r3
/* 802812F0 41 82 00 10 */ beq lbl_80281300
/* 802812F4 7F E4 FB 78 */ mr r4, r31
/* 802812F8 4B FF FC 69 */ bl __ct__Q37JStudio3ctb14TObject_TxyzRyFRCQ47JStudio3ctb4data13TParse_TBlock
/* 802812FC 7C 60 1B 78 */ mr r0, r3
lbl_80281300:
/* 80281300 7C 03 03 78 */ mr r3, r0
/* 80281304 48 00 00 08 */ b lbl_8028130C
lbl_80281308:
/* 80281308 38 60 00 00 */ li r3, 0
lbl_8028130C:
/* 8028130C 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 80281310 80 01 00 14 */ lwz r0, 0x14(r1)
/* 80281314 7C 08 03 A6 */ mtlr r0
/* 80281318 38 21 00 10 */ addi r1, r1, 0x10
/* 8028131C 4E 80 00 20 */ blr
@@ -1,21 +0,0 @@
lbl_802810DC:
/* 802810DC 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802810E0 7C 08 02 A6 */ mflr r0
/* 802810E4 90 01 00 14 */ stw r0, 0x14(r1)
/* 802810E8 93 E1 00 0C */ stw r31, 0xc(r1)
/* 802810EC 93 C1 00 08 */ stw r30, 8(r1)
/* 802810F0 7C 7E 1B 78 */ mr r30, r3
/* 802810F4 7C 9F 23 78 */ mr r31, r4
/* 802810F8 4B FF FF B5 */ bl removeObject__Q37JStudio3ctb8TControlFPQ37JStudio3ctb7TObject
/* 802810FC 80 7E 00 04 */ lwz r3, 4(r30)
/* 80281100 7F E4 FB 78 */ mr r4, r31
/* 80281104 81 83 00 00 */ lwz r12, 0(r3)
/* 80281108 81 8C 00 10 */ lwz r12, 0x10(r12)
/* 8028110C 7D 89 03 A6 */ mtctr r12
/* 80281110 4E 80 04 21 */ bctrl
/* 80281114 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 80281118 83 C1 00 08 */ lwz r30, 8(r1)
/* 8028111C 80 01 00 14 */ lwz r0, 0x14(r1)
/* 80281120 7C 08 03 A6 */ mtlr r0
/* 80281124 38 21 00 10 */ addi r1, r1, 0x10
/* 80281128 4E 80 00 20 */ blr
@@ -1,17 +0,0 @@
lbl_80281320:
/* 80281320 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 80281324 7C 08 02 A6 */ mflr r0
/* 80281328 90 01 00 14 */ stw r0, 0x14(r1)
/* 8028132C 28 04 00 00 */ cmplwi r4, 0
/* 80281330 41 82 00 1C */ beq lbl_8028134C
/* 80281334 7C 83 23 78 */ mr r3, r4
/* 80281338 38 80 00 01 */ li r4, 1
/* 8028133C 81 83 00 08 */ lwz r12, 8(r3)
/* 80281340 81 8C 00 08 */ lwz r12, 8(r12)
/* 80281344 7D 89 03 A6 */ mtctr r12
/* 80281348 4E 80 04 21 */ bctrl
lbl_8028134C:
/* 8028134C 80 01 00 14 */ lwz r0, 0x14(r1)
/* 80281350 7C 08 03 A6 */ mtlr r0
/* 80281354 38 21 00 10 */ addi r1, r1, 0x10
/* 80281358 4E 80 00 20 */ blr
@@ -1,64 +0,0 @@
lbl_80281470:
/* 80281470 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 80281474 7C 08 02 A6 */ mflr r0
/* 80281478 90 01 00 24 */ stw r0, 0x24(r1)
/* 8028147C 93 E1 00 1C */ stw r31, 0x1c(r1)
/* 80281480 93 C1 00 18 */ stw r30, 0x18(r1)
/* 80281484 7C DE 33 78 */ mr r30, r6
/* 80281488 80 C4 00 00 */ lwz r6, 0(r4)
/* 8028148C 90 C1 00 08 */ stw r6, 8(r1)
/* 80281490 80 06 00 00 */ lwz r0, 0(r6)
/* 80281494 7C 06 02 14 */ add r0, r6, r0
/* 80281498 90 04 00 00 */ stw r0, 0(r4)
/* 8028149C 80 81 00 08 */ lwz r4, 8(r1)
/* 802814A0 80 04 00 00 */ lwz r0, 0(r4)
/* 802814A4 90 05 00 00 */ stw r0, 0(r5)
/* 802814A8 83 E3 00 04 */ lwz r31, 4(r3)
/* 802814AC 57 C0 06 F7 */ rlwinm. r0, r30, 0, 0x1b, 0x1b
/* 802814B0 41 82 00 38 */ beq lbl_802814E8
/* 802814B4 80 61 00 08 */ lwz r3, 8(r1)
/* 802814B8 A0 03 00 06 */ lhz r0, 6(r3)
/* 802814BC 38 80 00 00 */ li r4, 0
/* 802814C0 28 00 00 00 */ cmplwi r0, 0
/* 802814C4 41 82 00 08 */ beq lbl_802814CC
/* 802814C8 38 83 00 08 */ addi r4, r3, 8
lbl_802814CC:
/* 802814CC 7F E3 FB 78 */ mr r3, r31
/* 802814D0 54 05 04 3E */ clrlwi r5, r0, 0x10
/* 802814D4 4B FF FC BD */ bl getObject__Q37JStudio3ctb8TControlFPCvUl
/* 802814D8 28 03 00 00 */ cmplwi r3, 0
/* 802814DC 41 82 00 0C */ beq lbl_802814E8
/* 802814E0 38 60 00 01 */ li r3, 1
/* 802814E4 48 00 00 58 */ b lbl_8028153C
lbl_802814E8:
/* 802814E8 57 C0 06 B5 */ rlwinm. r0, r30, 0, 0x1a, 0x1a
/* 802814EC 41 82 00 0C */ beq lbl_802814F8
/* 802814F0 38 60 00 01 */ li r3, 1
/* 802814F4 48 00 00 48 */ b lbl_8028153C
lbl_802814F8:
/* 802814F8 80 7F 00 04 */ lwz r3, 4(r31)
/* 802814FC 28 03 00 00 */ cmplwi r3, 0
/* 80281500 40 82 00 0C */ bne lbl_8028150C
/* 80281504 38 60 00 00 */ li r3, 0
/* 80281508 48 00 00 34 */ b lbl_8028153C
lbl_8028150C:
/* 8028150C 38 81 00 08 */ addi r4, r1, 8
/* 80281510 81 83 00 00 */ lwz r12, 0(r3)
/* 80281514 81 8C 00 0C */ lwz r12, 0xc(r12)
/* 80281518 7D 89 03 A6 */ mtctr r12
/* 8028151C 4E 80 04 21 */ bctrl
/* 80281520 7C 64 1B 79 */ or. r4, r3, r3
/* 80281524 40 82 00 0C */ bne lbl_80281530
/* 80281528 57 C3 D7 FE */ rlwinm r3, r30, 0x1a, 0x1f, 0x1f
/* 8028152C 48 00 00 10 */ b lbl_8028153C
lbl_80281530:
/* 80281530 7F E3 FB 78 */ mr r3, r31
/* 80281534 4B FF FB 2D */ bl appendObject__Q37JStudio3ctb8TControlFPQ37JStudio3ctb7TObject
/* 80281538 38 60 00 01 */ li r3, 1
lbl_8028153C:
/* 8028153C 83 E1 00 1C */ lwz r31, 0x1c(r1)
/* 80281540 83 C1 00 18 */ lwz r30, 0x18(r1)
/* 80281544 80 01 00 24 */ lwz r0, 0x24(r1)
/* 80281548 7C 08 03 A6 */ mtlr r0
/* 8028154C 38 21 00 20 */ addi r1, r1, 0x20
/* 80281550 4E 80 00 20 */ blr
@@ -1,42 +0,0 @@
lbl_802813DC:
/* 802813DC 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802813E0 7C 08 02 A6 */ mflr r0
/* 802813E4 90 01 00 14 */ stw r0, 0x14(r1)
/* 802813E8 93 E1 00 0C */ stw r31, 0xc(r1)
/* 802813EC 83 E4 00 00 */ lwz r31, 0(r4)
/* 802813F0 38 1F 00 10 */ addi r0, r31, 0x10
/* 802813F4 90 04 00 00 */ stw r0, 0(r4)
/* 802813F8 80 1F 00 0C */ lwz r0, 0xc(r31)
/* 802813FC 90 05 00 00 */ stw r0, 0(r5)
/* 80281400 7F E3 FB 78 */ mr r3, r31
/* 80281404 38 82 B9 F8 */ la r4, ga4cSignature__Q37JStudio3ctb4data(r2) /* 804553F8-_SDA2_BASE_ */
/* 80281408 38 A0 00 04 */ li r5, 4
/* 8028140C 48 0E 4C 81 */ bl memcmp
/* 80281410 2C 03 00 00 */ cmpwi r3, 0
/* 80281414 41 82 00 0C */ beq lbl_80281420
/* 80281418 38 60 00 00 */ li r3, 0
/* 8028141C 48 00 00 40 */ b lbl_8028145C
lbl_80281420:
/* 80281420 A0 1F 00 04 */ lhz r0, 4(r31)
/* 80281424 28 00 FE FF */ cmplwi r0, 0xfeff
/* 80281428 41 82 00 0C */ beq lbl_80281434
/* 8028142C 38 60 00 00 */ li r3, 0
/* 80281430 48 00 00 2C */ b lbl_8028145C
lbl_80281434:
/* 80281434 A0 1F 00 06 */ lhz r0, 6(r31)
/* 80281438 28 00 00 01 */ cmplwi r0, 1
/* 8028143C 40 80 00 0C */ bge lbl_80281448
/* 80281440 38 60 00 00 */ li r3, 0
/* 80281444 48 00 00 18 */ b lbl_8028145C
lbl_80281448:
/* 80281448 54 04 04 3E */ clrlwi r4, r0, 0x10
/* 8028144C 38 00 00 01 */ li r0, 1
/* 80281450 38 60 FF FF */ li r3, -1
/* 80281454 7C 04 00 10 */ subfc r0, r4, r0
/* 80281458 7C 63 01 90 */ subfze r3, r3
lbl_8028145C:
/* 8028145C 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 80281460 80 01 00 14 */ lwz r0, 0x14(r1)
/* 80281464 7C 08 03 A6 */ mtlr r0
/* 80281468 38 21 00 10 */ addi r1, r1, 0x10
/* 8028146C 4E 80 00 20 */ blr
@@ -1,13 +0,0 @@
lbl_802810AC:
/* 802810AC 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802810B0 7C 08 02 A6 */ mflr r0
/* 802810B4 90 01 00 14 */ stw r0, 0x14(r1)
/* 802810B8 7C 66 1B 78 */ mr r6, r3
/* 802810BC 38 A4 00 0C */ addi r5, r4, 0xc
/* 802810C0 38 61 00 08 */ addi r3, r1, 8
/* 802810C4 38 86 00 08 */ addi r4, r6, 8
/* 802810C8 48 05 BB 0D */ bl Erase__Q27JGadget13TNodeLinkListFPQ27JGadget13TLinkListNode
/* 802810CC 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802810D0 7C 08 03 A6 */ mtlr r0
/* 802810D4 38 21 00 10 */ addi r1, r1, 0x10
/* 802810D8 4E 80 00 20 */ blr
+36 -5
View File
@@ -12,6 +12,7 @@ struct TLinkListNode {
}
TLinkListNode* getNext() { return mNext; }
TLinkListNode* getPrev() { return mPrev; }
/* 0x0 */ TLinkListNode* mNext;
/* 0x4 */ TLinkListNode* mPrev;
@@ -25,8 +26,14 @@ struct TNodeLinkList {
node = node->getNext();
return *this;
}
iterator& operator--() {
node = node->getPrev();
return *this;
}
TLinkListNode* operator->() { return node; }
inline friend bool operator==(iterator a, iterator b) { return a.node == b.node; }
TLinkListNode* node;
};
@@ -91,6 +98,17 @@ struct TLinkList : public TNodeLinkList {
JUT_ASSERT(541, node != 0);
return Element_toValue(node);
}
iterator& operator--() {
TNodeLinkList::iterator::operator--();
return *this;
}
// Stack issues. See JStudio::ctb::TControl::getObject
inline friend bool operator==(iterator a, iterator b) {
TNodeLinkList::iterator ita = a;
TNodeLinkList::iterator itb = b;
return operator==(ita,itb);
}
inline friend bool operator!=(iterator a, iterator b) { return !(a == b); }
};
struct const_iterator : TNodeLinkList::const_iterator {
@@ -110,7 +128,7 @@ struct TLinkList : public TNodeLinkList {
};
TLinkListNode* Element_toNode(T* element) const { return &element->ocObject_; }
static T* Element_toValue(TLinkListNode* node) { return (T*)node; }
static T* Element_toValue(TLinkListNode* node) { return (T*)((char*)node - offsetof(T, ocObject_)); }
iterator Insert(TLinkList::iterator iter, T* element) {
TLinkListNode* node = Element_toNode(element);
@@ -123,9 +141,7 @@ struct TLinkList : public TNodeLinkList {
}
TLinkList::iterator end() {
TNodeLinkList::iterator node_iter = TNodeLinkList::end();
TLinkList::iterator iter(node_iter);
return iter;
return iterator(TNodeLinkList::end());
}
TLinkList::const_iterator end() const {
@@ -141,7 +157,7 @@ struct TLinkList : public TNodeLinkList {
}
void Push_back(T* element) {
TLinkList::iterator iter(TLinkList::end());
TLinkList::iterator iter = TLinkList::end();
this->Insert(iter, element);
}
@@ -149,6 +165,11 @@ struct TLinkList : public TNodeLinkList {
JUT_ASSERT(642, !empty());
return *begin();
}
T& back() {
JUT_ASSERT(652, !empty());
return *--TLinkList::end();
}
};
template<typename T, int I>
@@ -161,6 +182,16 @@ bool operator!=(const typename TLinkList<T, I>::const_iterator iter1, const type
return !(iter1 == iter2);
}
// template<typename T, int I>
// inline bool operator==(typename TLinkList<T, I>::iterator iter1, typename TLinkList<T, I>::iterator iter2) {
// return iter1->node == iter2->node;
// }
// template<typename T, int I>
// inline bool operator!=(typename TLinkList<T, I>::iterator iter1, typename TLinkList<T, I>::iterator iter2) {
// return !(iter1 == iter2);
// }
template <typename T, int I>
struct TLinkList_factory : public TLinkList<T, I> {
virtual ~TLinkList_factory() {}
+98 -9
View File
@@ -8,17 +8,102 @@
namespace JStudio {
namespace ctb {
struct TObject : public object::TObject_ID {
TObject(const void* id, u32 size, const void* param_2) : object::TObject_ID(id, size) {
pData_ = param_2;
JUT_ASSERT(82, pData_!=0);
}
/* 80280F18 */ virtual ~TObject() = 0;
/* 0x08 vtable */
/* 0x0C */ JGadget::TLinkListNode field_0xc;
/* 0x14 */ void* pData_;
/* 0x0C */ JGadget::TLinkListNode ocObject_;
/* 0x14 */ const void* pData_;
};
struct data {
struct TParse_TBlock : public JGadget::binary::TParseData_aligned<4> {};
struct THeaderData {
u32 signature;
u16 byteOrder;
u16 version;
u8 field_0x0[4];
u32 blockNumber;
u8 content[0];
};
static u32 ga4cSignature;
struct TParse_THeader : public JGadget::binary::TParseData_aligned<4> {
TParse_THeader(const void* pContent) : JGadget::binary::TParseData_aligned<4>(pContent) {}
const THeaderData* get() const {
return (THeaderData*) getRaw();
}
const void* get_signature() const {
return &get()->signature;
}
u32 get_blockNumber() const {
return get()->blockNumber;
}
u16 get_byteOrder() const {
return get()->byteOrder;
}
u16 get_version() const {
return get()->version;
}
const void* getContent() const {
const THeaderData* header = (THeaderData*) getRaw();
return header->content;
}
};
struct TBlockData {
u32 size;
u16 scheme;
u16 IDSize;
u32 field_0x8[0];
};
struct TParse_TBlock : public JGadget::binary::TParseData_aligned<4> {
TParse_TBlock(const void* pContent) : JGadget::binary::TParseData_aligned<4>(pContent) {}
const TBlockData* get() const {
return (const TBlockData*)getRaw();
}
u32 get_size() const {
return get()->size;
}
u16 get_scheme() const {
return get()->scheme;
}
u16 get_IDSize() const {
return get()->IDSize;
}
const void* getBlockEnd_() const {
return get()->field_0x8;
}
const void* get_ID() const {
const void* rv = NULL;
if (get_IDSize() != 0) {
rv = getBlockEnd_();
}
return rv;
}
const void* getContent() const {
return (const void*)((char*)getBlockEnd_() + JGadget::binary::align_roundUp((u16)get_IDSize(), 4));
}
const TParse_TBlock* getNext() {
return (TParse_TBlock*)((char*)getRaw() + get_size());
}
};
static const u32 ga4cSignature;
};
struct TObject_TxyzRy : public TObject {
@@ -32,7 +117,7 @@ struct TFactory {
TFactory() {}
/* 80281274 */ virtual ~TFactory();
/* 802812BC */ virtual void create(JStudio::ctb::data::TParse_TBlock const&);
/* 802812BC */ virtual TObject* create(JStudio::ctb::data::TParse_TBlock const&);
/* 80281320 */ virtual void destroy(JStudio::ctb::TObject*);
};
@@ -43,8 +128,10 @@ struct TControl {
/* 802810AC */ void removeObject(JStudio::ctb::TObject*);
/* 802810DC */ void destroyObject(JStudio::ctb::TObject*);
/* 8028112C */ void destroyObject_all();
/* 80281190 */ void getObject(void const*, u32);
/* 80281230 */ void getObject_index(u32);
/* 80281190 */ JStudio::ctb::TObject* getObject(void const*, u32);
/* 80281230 */ JStudio::ctb::TObject* getObject_index(u32);
TFactory* getFactory() { return pFactory_; }
/* 0x4 */ TFactory* pFactory_;
/* 0x8 */ JGadget::TLinkList<TObject, 2> mList;
@@ -53,8 +140,10 @@ struct TControl {
struct TParse : public JGadget::binary::TParse_header_block {
/* 8028135C */ TParse(JStudio::ctb::TControl*);
/* 8028137C */ virtual ~TParse();
/* 802813DC */ virtual void parseHeader_next(void const**, u32*, u32);
/* 80281470 */ virtual void parseBlock_next(void const**, u32*, u32);
/* 802813DC */ virtual bool parseHeader_next(void const**, u32*, u32);
/* 80281470 */ virtual bool parseBlock_next(void const**, u32*, u32);
TControl* getControl() { return pControl_; }
/* 0x4 */ TControl* pControl_;
};
+7 -2
View File
@@ -6,19 +6,24 @@
namespace JStudio {
namespace object {
struct TPRObject_ID_equal {};
struct TIDData {
public:
TIDData(const void* id, u32 id_size) : mID(id), mID_size(id_size) {}
/* 80288988 */ void isEqual(JStudio::object::TIDData const&, JStudio::object::TIDData const&);
/* 80288988 */ bool isEqual(JStudio::object::TIDData const&, JStudio::object::TIDData const&);
inline const void* getID() const { return mID; }
inline u32 getIDSize() const { return mID_size; }
private:
/* 0x00 */ const void* mID;
/* 0x04 */ u32 mID_size;
};
struct TPRObject_ID_equal : public TIDData {
TPRObject_ID_equal(const void* id, u32 id_size) : TIDData(id, id_size) {}
};
struct TObject_ID : public TIDData {
TObject_ID(const void* id, u32 id_size) : TIDData(id, id_size) {}
};
+1 -2
View File
@@ -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';
+120 -71
View File
@@ -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
+50 -12
View File
@@ -6,25 +6,63 @@
#include "JSystem/JStudio/JStudio/object-id.h"
#include "dolphin/types.h"
//
// Forward References:
//
extern "C" void
isEqual__Q37JStudio6object7TIDDataFRCQ37JStudio6object7TIDDataRCQ37JStudio6object7TIDData();
//
// Declarations:
//
/* 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;
}
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;
}
for (bytesRemaining; bytesRemaining >= 4; bytesRemaining -= 4, aStr32++, bStr32++) {
if (*aStr32 != *bStr32) {
return false;
}
}
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
@@ -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