From 72edf07ad51eb10ed344b344ffdd7ac376899224 Mon Sep 17 00:00:00 2001 From: hatal175 Date: Wed, 24 Jan 2024 01:05:15 +0200 Subject: [PATCH] A little work on jstudio (#2045) --- ...zRyFRCQ47JStudio3ctb4data13TParse_TBlock.s | 25 --- .../ctb/__ct__Q37JStudio3ctb8TControlFv.s | 13 -- .../ctb/__dt__Q37JStudio3ctb7TObjectFv.s | 20 -- ...oryFRCQ47JStudio3ctb4data13TParse_TBlock.s | 30 --- ...dio3ctb8TControlFPQ37JStudio3ctb7TObject.s | 21 -- ...dio3ctb8TFactoryFPQ37JStudio3ctb7TObject.s | 17 -- ...ck_next__Q37JStudio3ctb6TParseFPPCvPUlUl.s | 64 ------ ...er_next__Q37JStudio3ctb6TParseFPPCvPUlUl.s | 42 ---- ...dio3ctb8TControlFPQ37JStudio3ctb7TObject.s | 13 -- include/JSystem/JGadget/linklist.h | 41 +++- include/JSystem/JStudio/JStudio/ctb.h | 107 +++++++++- include/JSystem/JStudio/JStudio/object-id.h | 9 +- libs/JSystem/JStudio/JStudio/ctb-data.cpp | 3 +- libs/JSystem/JStudio/JStudio/ctb.cpp | 191 +++++++++++------- libs/JSystem/JStudio/JStudio/object-id.cpp | 62 ++++-- .../MSL/MSL_C++/MSL_Common/Include/iterator.h | 14 ++ 16 files changed, 326 insertions(+), 346 deletions(-) delete mode 100644 asm/JSystem/JStudio/JStudio/ctb/__ct__Q37JStudio3ctb14TObject_TxyzRyFRCQ47JStudio3ctb4data13TParse_TBlock.s delete mode 100644 asm/JSystem/JStudio/JStudio/ctb/__ct__Q37JStudio3ctb8TControlFv.s delete mode 100644 asm/JSystem/JStudio/JStudio/ctb/__dt__Q37JStudio3ctb7TObjectFv.s delete mode 100644 asm/JSystem/JStudio/JStudio/ctb/create__Q37JStudio3ctb8TFactoryFRCQ47JStudio3ctb4data13TParse_TBlock.s delete mode 100644 asm/JSystem/JStudio/JStudio/ctb/destroyObject__Q37JStudio3ctb8TControlFPQ37JStudio3ctb7TObject.s delete mode 100644 asm/JSystem/JStudio/JStudio/ctb/destroy__Q37JStudio3ctb8TFactoryFPQ37JStudio3ctb7TObject.s delete mode 100644 asm/JSystem/JStudio/JStudio/ctb/parseBlock_next__Q37JStudio3ctb6TParseFPPCvPUlUl.s delete mode 100644 asm/JSystem/JStudio/JStudio/ctb/parseHeader_next__Q37JStudio3ctb6TParseFPPCvPUlUl.s delete mode 100644 asm/JSystem/JStudio/JStudio/ctb/removeObject__Q37JStudio3ctb8TControlFPQ37JStudio3ctb7TObject.s create mode 100644 libs/PowerPC_EABI_Support/MSL/MSL_C++/MSL_Common/Include/iterator.h diff --git a/asm/JSystem/JStudio/JStudio/ctb/__ct__Q37JStudio3ctb14TObject_TxyzRyFRCQ47JStudio3ctb4data13TParse_TBlock.s b/asm/JSystem/JStudio/JStudio/ctb/__ct__Q37JStudio3ctb14TObject_TxyzRyFRCQ47JStudio3ctb4data13TParse_TBlock.s deleted file mode 100644 index 9b3f31d85a..0000000000 --- a/asm/JSystem/JStudio/JStudio/ctb/__ct__Q37JStudio3ctb14TObject_TxyzRyFRCQ47JStudio3ctb4data13TParse_TBlock.s +++ /dev/null @@ -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 diff --git a/asm/JSystem/JStudio/JStudio/ctb/__ct__Q37JStudio3ctb8TControlFv.s b/asm/JSystem/JStudio/JStudio/ctb/__ct__Q37JStudio3ctb8TControlFv.s deleted file mode 100644 index 03e4e8c814..0000000000 --- a/asm/JSystem/JStudio/JStudio/ctb/__ct__Q37JStudio3ctb8TControlFv.s +++ /dev/null @@ -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 diff --git a/asm/JSystem/JStudio/JStudio/ctb/__dt__Q37JStudio3ctb7TObjectFv.s b/asm/JSystem/JStudio/JStudio/ctb/__dt__Q37JStudio3ctb7TObjectFv.s deleted file mode 100644 index dd6890ed8f..0000000000 --- a/asm/JSystem/JStudio/JStudio/ctb/__dt__Q37JStudio3ctb7TObjectFv.s +++ /dev/null @@ -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 diff --git a/asm/JSystem/JStudio/JStudio/ctb/create__Q37JStudio3ctb8TFactoryFRCQ47JStudio3ctb4data13TParse_TBlock.s b/asm/JSystem/JStudio/JStudio/ctb/create__Q37JStudio3ctb8TFactoryFRCQ47JStudio3ctb4data13TParse_TBlock.s deleted file mode 100644 index 93c209048e..0000000000 --- a/asm/JSystem/JStudio/JStudio/ctb/create__Q37JStudio3ctb8TFactoryFRCQ47JStudio3ctb4data13TParse_TBlock.s +++ /dev/null @@ -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 diff --git a/asm/JSystem/JStudio/JStudio/ctb/destroyObject__Q37JStudio3ctb8TControlFPQ37JStudio3ctb7TObject.s b/asm/JSystem/JStudio/JStudio/ctb/destroyObject__Q37JStudio3ctb8TControlFPQ37JStudio3ctb7TObject.s deleted file mode 100644 index b3c62685cf..0000000000 --- a/asm/JSystem/JStudio/JStudio/ctb/destroyObject__Q37JStudio3ctb8TControlFPQ37JStudio3ctb7TObject.s +++ /dev/null @@ -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 diff --git a/asm/JSystem/JStudio/JStudio/ctb/destroy__Q37JStudio3ctb8TFactoryFPQ37JStudio3ctb7TObject.s b/asm/JSystem/JStudio/JStudio/ctb/destroy__Q37JStudio3ctb8TFactoryFPQ37JStudio3ctb7TObject.s deleted file mode 100644 index 4679f94a7e..0000000000 --- a/asm/JSystem/JStudio/JStudio/ctb/destroy__Q37JStudio3ctb8TFactoryFPQ37JStudio3ctb7TObject.s +++ /dev/null @@ -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 diff --git a/asm/JSystem/JStudio/JStudio/ctb/parseBlock_next__Q37JStudio3ctb6TParseFPPCvPUlUl.s b/asm/JSystem/JStudio/JStudio/ctb/parseBlock_next__Q37JStudio3ctb6TParseFPPCvPUlUl.s deleted file mode 100644 index 951ffc2e73..0000000000 --- a/asm/JSystem/JStudio/JStudio/ctb/parseBlock_next__Q37JStudio3ctb6TParseFPPCvPUlUl.s +++ /dev/null @@ -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 diff --git a/asm/JSystem/JStudio/JStudio/ctb/parseHeader_next__Q37JStudio3ctb6TParseFPPCvPUlUl.s b/asm/JSystem/JStudio/JStudio/ctb/parseHeader_next__Q37JStudio3ctb6TParseFPPCvPUlUl.s deleted file mode 100644 index ad5e5746d7..0000000000 --- a/asm/JSystem/JStudio/JStudio/ctb/parseHeader_next__Q37JStudio3ctb6TParseFPPCvPUlUl.s +++ /dev/null @@ -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 diff --git a/asm/JSystem/JStudio/JStudio/ctb/removeObject__Q37JStudio3ctb8TControlFPQ37JStudio3ctb7TObject.s b/asm/JSystem/JStudio/JStudio/ctb/removeObject__Q37JStudio3ctb8TControlFPQ37JStudio3ctb7TObject.s deleted file mode 100644 index c6620bf96a..0000000000 --- a/asm/JSystem/JStudio/JStudio/ctb/removeObject__Q37JStudio3ctb8TControlFPQ37JStudio3ctb7TObject.s +++ /dev/null @@ -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 diff --git a/include/JSystem/JGadget/linklist.h b/include/JSystem/JGadget/linklist.h index 5d18293601..6c89cbeb75 100644 --- a/include/JSystem/JGadget/linklist.h +++ b/include/JSystem/JGadget/linklist.h @@ -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 @@ -161,6 +182,16 @@ bool operator!=(const typename TLinkList::const_iterator iter1, const type return !(iter1 == iter2); } +// template +// inline bool operator==(typename TLinkList::iterator iter1, typename TLinkList::iterator iter2) { +// return iter1->node == iter2->node; +// } + +// template +// inline bool operator!=(typename TLinkList::iterator iter1, typename TLinkList::iterator iter2) { +// return !(iter1 == iter2); +// } + template struct TLinkList_factory : public TLinkList { virtual ~TLinkList_factory() {} diff --git a/include/JSystem/JStudio/JStudio/ctb.h b/include/JSystem/JStudio/JStudio/ctb.h index dfc2cff02b..85caa0d2cd 100644 --- a/include/JSystem/JStudio/JStudio/ctb.h +++ b/include/JSystem/JStudio/JStudio/ctb.h @@ -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 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_; }; diff --git a/include/JSystem/JStudio/JStudio/object-id.h b/include/JSystem/JStudio/JStudio/object-id.h index 7a536762a4..87ca81d26b 100644 --- a/include/JSystem/JStudio/JStudio/object-id.h +++ b/include/JSystem/JStudio/JStudio/object-id.h @@ -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) {} }; 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 -void find_if(/* ... */); -/* 802815B4 */ /* std::find_if::iterator, - JStudio::object::TPRObject_ID_equal> */ void func_802815B4(void* _this, JGadget::TLinkList::iterator, JGadget::TLinkList::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::iterator local_3c = mList.begin(); + JGadget::TLinkList::iterator local_40 = mList.end(); + object::TPRObject_ID_equal aTStack_38(param_0, param_1); + JGadget::TLinkList::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::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: -// - -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 \ 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