diff options
| author | TakaRikka <38417346+TakaRikka@users.noreply.github.com> | 2024-12-29 07:53:54 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-12-29 17:53:54 +0200 |
| commit | 0e281cb97535523a3d1a4f668bc84321bc39fb46 (patch) | |
| tree | 2f8d939c992c30dcad7a904aa1024041cf3c85fa /src/JSystem | |
| parent | c429ce21eb7cf4687da596c51fbc47249fbe4c13 (diff) | |
various matches / cleanup (#2271)
* cleanup various TUs
* checkpoint
* d_attention doc
Diffstat (limited to 'src/JSystem')
20 files changed, 238 insertions, 621 deletions
diff --git a/src/JSystem/JFramework/JFWSystem.cpp b/src/JSystem/JFramework/JFWSystem.cpp index 03c2f014d8..283804f3ac 100644 --- a/src/JSystem/JFramework/JFWSystem.cpp +++ b/src/JSystem/JFramework/JFWSystem.cpp @@ -15,70 +15,14 @@ #include "JSystem/JUtility/JUTException.h" #include "JSystem/JUtility/JUTResFont.h" #include "JSystem/JUtility/JUTDbPrint.h" -#include "dol2asm.h" -#include "dolphin/types.h" -// -// Forward References: -// - -extern "C" void firstInit__9JFWSystemFv(); -extern "C" void init__9JFWSystemFv(); -extern "C" u32 maxStdHeaps__Q29JFWSystem11CSetUpParam; -extern "C" u32 sysHeapSize__Q29JFWSystem11CSetUpParam; -extern "C" u32 fifoBufSize__Q29JFWSystem11CSetUpParam; -extern "C" u32 aramAudioBufSize__Q29JFWSystem11CSetUpParam; -extern "C" u32 aramGraphBufSize__Q29JFWSystem11CSetUpParam; -extern "C" u32 streamPriority__Q29JFWSystem11CSetUpParam; -extern "C" u32 decompPriority__Q29JFWSystem11CSetUpParam; -extern "C" u32 aPiecePriority__Q29JFWSystem11CSetUpParam; -extern "C" void* systemFontRes__Q29JFWSystem11CSetUpParam; -extern "C" void* renderMode__Q29JFWSystem11CSetUpParam; -extern "C" u32 exConsoleBufferSize__Q29JFWSystem11CSetUpParam[1 + 1 /* padding */]; -extern "C" u8 rootHeap__9JFWSystem[4]; -extern "C" u8 systemHeap__9JFWSystem[4]; -extern "C" u8 mainThread__9JFWSystem[4]; -extern "C" u8 debugPrint__9JFWSystem[4]; -extern "C" u8 systemFont__9JFWSystem[4]; -extern "C" u8 systemConsoleManager__9JFWSystem[4]; -extern "C" u8 systemConsole__9JFWSystem[4]; - -// -// External References: -// +extern u8 const JUTResFONT_Ascfont_fix12[16736]; -extern "C" void alloc__7JKRHeapFUli(); -extern "C" void* __nw__FUl(); -extern "C" void createRoot__10JKRExpHeapFib(); -extern "C" void create__10JKRExpHeapFUlP7JKRHeapb(); -extern "C" void __ct__9JKRThreadFP8OSThreadi(); -extern "C" void create__7JKRAramFUlUllll(); -extern "C" void __ct__12JUTGraphFifoFUl(); -extern "C" void __ct__10JUTResFontFPC7ResFONTP7JKRHeap(); -extern "C" void start__10JUTDbPrintFP7JUTFontP7JKRHeap(); -extern "C" void changeFont__10JUTDbPrintFP7JUTFont(); -extern "C" void init__10JUTGamePadFv(); -extern "C" void create__12JUTExceptionFP14JUTDirectPrint(); -extern "C" void createConsole__12JUTExceptionFPvUl(); -extern "C" void start__14JUTDirectPrintFv(); -extern "C" void create__12JUTAssertionFv(); -extern "C" void createManager__8JUTVideoFPC16_GXRenderModeObj(); -extern "C" void create__10JUTConsoleFUiUiP7JKRHeap(); -extern "C" void createManager__17JUTConsoleManagerFP7JKRHeap(); -extern "C" void OSInit(); -extern "C" void DVDInit(); -extern "C" extern u8 const JUTResFONT_Ascfont_fix12[16736]; - -// -// Declarations: -// - -/* ############################################################################################## */ /* 80450770-80450774 0001F0 0004+00 1/1 1/1 0/0 .sdata maxStdHeaps__Q29JFWSystem11CSetUpParam */ -SECTION_SDATA s32 JFWSystem::CSetUpParam::maxStdHeaps = 2; +s32 JFWSystem::CSetUpParam::maxStdHeaps = 2; /* 80450774-80450778 0001F4 0004+00 1/1 1/1 0/0 .sdata sysHeapSize__Q29JFWSystem11CSetUpParam */ -SECTION_SDATA u32 JFWSystem::CSetUpParam::sysHeapSize = 0x400000; +u32 JFWSystem::CSetUpParam::sysHeapSize = 0x400000; /* 804511A0-804511A4 0006A0 0004+00 2/2 0/0 0/0 .sbss rootHeap__9JFWSystem */ JKRExpHeap* JFWSystem::rootHeap; @@ -94,40 +38,38 @@ void JFWSystem::firstInit() { systemHeap = JKRExpHeap::create(CSetUpParam::sysHeapSize, rootHeap, false); } -/* ############################################################################################## */ /* 80450778-8045077C 0001F8 0004+00 1/1 1/1 0/0 .sdata fifoBufSize__Q29JFWSystem11CSetUpParam */ -SECTION_SDATA u32 JFWSystem::CSetUpParam::fifoBufSize = 0x40000; +u32 JFWSystem::CSetUpParam::fifoBufSize = 0x40000; /* 8045077C-80450780 0001FC 0004+00 1/1 1/1 0/0 .sdata aramAudioBufSize__Q29JFWSystem11CSetUpParam */ -SECTION_SDATA u32 JFWSystem::CSetUpParam::aramAudioBufSize = 0x800000; +u32 JFWSystem::CSetUpParam::aramAudioBufSize = 0x800000; /* 80450780-80450784 000200 0004+00 1/1 1/1 0/0 .sdata aramGraphBufSize__Q29JFWSystem11CSetUpParam */ -SECTION_SDATA u32 JFWSystem::CSetUpParam::aramGraphBufSize = 0x600000; +u32 JFWSystem::CSetUpParam::aramGraphBufSize = 0x600000; /* 80450784-80450788 000204 0004+00 1/1 0/0 0/0 .sdata streamPriority__Q29JFWSystem11CSetUpParam */ -SECTION_SDATA u32 JFWSystem::CSetUpParam::streamPriority = 8; +u32 JFWSystem::CSetUpParam::streamPriority = 8; /* 80450788-8045078C 000208 0004+00 1/1 0/0 0/0 .sdata decompPriority__Q29JFWSystem11CSetUpParam */ -SECTION_SDATA u32 JFWSystem::CSetUpParam::decompPriority = 7; +u32 JFWSystem::CSetUpParam::decompPriority = 7; /* 8045078C-80450790 00020C 0004+00 1/1 0/0 0/0 .sdata aPiecePriority__Q29JFWSystem11CSetUpParam */ -SECTION_SDATA u32 JFWSystem::CSetUpParam::aPiecePriority = 6; +u32 JFWSystem::CSetUpParam::aPiecePriority = 6; /* 80450790-80450794 -00001 0004+00 1/1 0/0 0/0 .sdata systemFontRes__Q29JFWSystem11CSetUpParam */ -SECTION_SDATA ResFONT* JFWSystem::CSetUpParam::systemFontRes = (ResFONT*)&JUTResFONT_Ascfont_fix12; +ResFONT* JFWSystem::CSetUpParam::systemFontRes = (ResFONT*)&JUTResFONT_Ascfont_fix12; /* 80450794-80450798 -00001 0004+00 1/1 1/1 0/0 .sdata renderMode__Q29JFWSystem11CSetUpParam */ -SECTION_SDATA GXRenderModeObj* JFWSystem::CSetUpParam::renderMode = - (GXRenderModeObj*)&GXNtsc480IntDf; +GXRenderModeObj* JFWSystem::CSetUpParam::renderMode = &GXNtsc480IntDf; /* 80450798-804507A0 000218 0004+04 1/1 0/0 0/0 .sdata * exConsoleBufferSize__Q29JFWSystem11CSetUpParam */ -SECTION_SDATA u32 JFWSystem::CSetUpParam::exConsoleBufferSize = 0x24FC; +u32 JFWSystem::CSetUpParam::exConsoleBufferSize = 0x24FC; /* 804511A8-804511AC 0006A8 0004+00 1/1 0/0 0/0 .sbss mainThread__9JFWSystem */ JKRThread* JFWSystem::mainThread; @@ -148,7 +90,7 @@ JUTConsole* JFWSystem::systemConsole; static u8 sInitCalled; /* 80271D18-80272040 26C658 0328+00 0/0 1/1 0/0 .text init__9JFWSystemFv */ -// NONMATCHING - just regalloc in the beginning +// NONMATCHING - regalloc, equivalent void JFWSystem::init() { if (rootHeap == NULL) { firstInit(); @@ -161,9 +103,7 @@ void JFWSystem::init() { mainThread = new JKRThread(OSGetCurrentThread(), 4); JUTVideo::createManager(CSetUpParam::renderMode); - - u32 fifoSize = CSetUpParam::fifoBufSize; - JUTGraphFifo* fifo = new JUTGraphFifo(fifoSize); + JUTCreateFifo(CSetUpParam::fifoBufSize); JUTGamePad::init(); @@ -199,4 +139,4 @@ void JFWSystem::init() { void* buffer = systemHeap->alloc(CSetUpParam::exConsoleBufferSize, 4); JUTException::createConsole(buffer, CSetUpParam::exConsoleBufferSize); -}
\ No newline at end of file +} diff --git a/src/JSystem/JGadget/linklist.cpp b/src/JSystem/JGadget/linklist.cpp index ca42335e24..0c23895a88 100644 --- a/src/JSystem/JGadget/linklist.cpp +++ b/src/JSystem/JGadget/linklist.cpp @@ -119,13 +119,7 @@ JGadget::TNodeLinkList::iterator JGadget::TNodeLinkList::Erase(TLinkListNode* p) /* 802DCBF8-802DCCC8 2D7538 00D0+00 0/0 2/2 0/0 .text * Remove__Q27JGadget13TNodeLinkListFPQ27JGadget13TLinkListNode */ -// missing stack -#ifdef NONMATCHING +// NONMATCHING - missing stack void JGadget::TNodeLinkList::Remove(TLinkListNode* p) { remove_if(TPRIsEqual_pointer_<TLinkListNode>(p)); } -#else -void JGadget::TNodeLinkList::Remove(JGadget::TLinkListNode* param_0) { - // NONMATCHING -} -#endif
\ No newline at end of file diff --git a/src/JSystem/JKernel/JKRDvdAramRipper.cpp b/src/JSystem/JKernel/JKRDvdAramRipper.cpp index b5c370cc23..e62baa6714 100644 --- a/src/JSystem/JKernel/JKRDvdAramRipper.cpp +++ b/src/JSystem/JKernel/JKRDvdAramRipper.cpp @@ -518,8 +518,7 @@ static u8* firstSrcData() { } /* 802DB49C-802DB580 2D5DDC 00E4+00 1/1 0/0 0/0 .text nextSrcData__FPUc */ -// regalloc -#ifdef NONMATCHING +// NONMATCHING - regalloc static u8* nextSrcData(u8* src) { u8* dest; u32 size = szpEnd - src; @@ -547,11 +546,6 @@ static u8* nextSrcData(u8* src) { } return dest; } -#else -static u8* nextSrcData(u8* param_0) { - // NONMATCHING -} -#endif /* 802DB580-802DB5E8 2D5EC0 0068+00 1/1 0/0 0/0 .text dmaBufferFlush__FUl */ static u32 dmaBufferFlush(u32 param_1) { @@ -562,4 +556,4 @@ static u32 dmaBufferFlush(u32 param_1) { JKRAramPiece::orderSync(0, (u32)dmaBuf, param_1, size, NULL); dmaCurrent = dmaBuf; return size; -}
\ No newline at end of file +} diff --git a/src/JSystem/JMessage/control.cpp b/src/JSystem/JMessage/control.cpp index e3597c15b4..4df07dd994 100644 --- a/src/JSystem/JMessage/control.cpp +++ b/src/JSystem/JMessage/control.cpp @@ -66,7 +66,7 @@ int JMessage::TControl::update() { } /* 802A76BC-802A77E8 2A1FFC 012C+00 0/0 5/5 0/0 .text render__Q28JMessage8TControlFv */ -#ifdef NONMATCHING +// NONMATCHING void JMessage::TControl::render() { if (isReady_render_()) { pRenderingProcessor_->setBegin_messageEntryText(pResourceCache_, pEntry_, field_0x20); @@ -74,11 +74,6 @@ void JMessage::TControl::render() { pRenderingProcessor_->process(pszText_update_current_); } } -#else -void JMessage::TControl::render() { - // NONMATCHING -} -#endif /* 802A77E8-802A78F4 2A2128 010C+00 0/0 1/1 0/0 .text setMessageCode__Q28JMessage8TControlFUsUs */ int JMessage::TControl::setMessageCode(u16 param_0, u16 param_1) { @@ -114,4 +109,4 @@ bool JMessage::TControl::setMessageCode_inSequence_(JMessage::TProcessor const* field_0x20 = pMessageText_begin_; oStack_renderingProcessor_.clear(); return true; -}
\ No newline at end of file +} diff --git a/src/JSystem/JMessage/locale.cpp b/src/JSystem/JMessage/locale.cpp index 106d87f419..ad40686faa 100644 --- a/src/JSystem/JMessage/locale.cpp +++ b/src/JSystem/JMessage/locale.cpp @@ -4,6 +4,7 @@ // #include "JSystem/JMessage/locale.h" +#include <dolphin.h> // // Forward References: @@ -22,7 +23,7 @@ extern "C" void parseCharacter_UTF8__Q28JMessage6localeFPPCc(); /* 802A9528-802A958C 2A3E68 0064+00 0/0 1/0 0/0 .text * parseCharacter_ShiftJIS__Q28JMessage6localeFPPCc */ -#ifdef NONMATCHING +// NONMATCHING int JMessage::locale::parseCharacter_ShiftJIS(char const** str) { int c; int ret; @@ -43,14 +44,9 @@ int JMessage::locale::parseCharacter_ShiftJIS(char const** str) { return ret; } -#else -int JMessage::locale::parseCharacter_ShiftJIS(char const** param_0) { - // NONMATCHING -} -#endif /* 802A958C-802A968C 2A3ECC 0100+00 0/0 1/0 0/0 .text parseCharacter_UTF8__Q28JMessage6localeFPPCc */ int JMessage::locale::parseCharacter_UTF8(char const** param_0) { // NONMATCHING -}
\ No newline at end of file +} diff --git a/src/JSystem/JMessage/processor.cpp b/src/JSystem/JMessage/processor.cpp index 068045f4cf..fe33fcddd7 100644 --- a/src/JSystem/JMessage/processor.cpp +++ b/src/JSystem/JMessage/processor.cpp @@ -5,6 +5,7 @@ #include "JSystem/JMessage/processor.h" #include "JSystem/JMessage/control.h" +#include "JSystem/JUtility/JUTAssert.h" // // Forward References: @@ -151,8 +152,7 @@ const JMessage::TResource* JMessage::TProcessor::getResource_groupID(u16 groupID /* 802A7CD4-802A7E38 2A2614 0164+00 0/0 1/1 0/0 .text * toMessageCode_messageID__Q28JMessage10TProcessorCFUlUlPb */ -// TContainerEnumerator_const stack issues -#ifdef NONMATCHING +// NONMATCHING - TContainerEnumerator_const stack issues u32 JMessage::TProcessor::toMessageCode_messageID(u32 param_0, u32 param_1, bool* param_2) const { const TResource* this_00 = getResourceCache(); @@ -177,12 +177,6 @@ u32 JMessage::TProcessor::toMessageCode_messageID(u32 param_0, u32 param_1, } return -1; } -#else -u32 JMessage::TProcessor::toMessageCode_messageID(u32 param_0, u32 param_1, - bool* param_2) const { - // NONMATCHING -} -#endif /* 802A7E38-802A7EDC 2A2778 00A4+00 1/1 0/0 0/0 .text * on_select_begin__Q28JMessage10TProcessorFPFPQ28JMessage10TProcessor_PCcPCvPCcUl */ @@ -611,18 +605,13 @@ void JMessage::TSequenceProcessor::do_tag_(u32 uTag, void const* data, u32 uSize /* 802A892C-802A8944 2A326C 0018+00 1/1 0/0 0/0 .text * process_setMessageIndex_reserved___Q28JMessage18TSequenceProcessorFUs */ -#ifdef NONMATCHING +// NONMATCHING void JMessage::TSequenceProcessor::process_setMessageIndex_reserved_(u16 u16Index) { JUT_ASSERT(890, u16Index >= 0xff00); if (u16Index != -1) { return; } } -#else -void JMessage::TSequenceProcessor::process_setMessageIndex_reserved_(u16 param_0) { - // NONMATCHING -} -#endif /* 802A8944-802A89B8 2A3284 0074+00 4/4 0/0 0/0 .text * process_setMessageCode___Q28JMessage18TSequenceProcessorFPCQ28JMessage18TSequenceProcessorUsUs */ @@ -750,4 +739,4 @@ const char* JMessage::TProcessor::on_message(u32 param_0) const { * getMessageText_messageCode__Q28JMessage10TProcessorCFUl */ const char* JMessage::TProcessor::getMessageText_messageCode(u32 param_0) const { return getMessageText_messageCode(param_0 >> 0x10, param_0 & 0xFFFF); -}
\ No newline at end of file +} diff --git a/src/JSystem/JMessage/resource.cpp b/src/JSystem/JMessage/resource.cpp index aaf809ba81..7c829f5ab7 100644 --- a/src/JSystem/JMessage/resource.cpp +++ b/src/JSystem/JMessage/resource.cpp @@ -247,7 +247,7 @@ JMessage::TParse::~TParse() {} /* 802A91B8-802A92F4 2A3AF8 013C+00 1/0 0/0 0/0 .text * parseHeader_next__Q28JMessage6TParseFPPCvPUlUl */ -#ifdef NONMATCHING +// NONMATCHING bool JMessage::TParse::parseHeader_next(void const** ppData_inout, u32* puBlock_out, u32 param_2) { const void* pData = *ppData_inout; @@ -287,11 +287,6 @@ bool JMessage::TParse::parseHeader_next(void const** ppData_inout, u32* puBlock_ return 1; } } -#else -bool JMessage::TParse::parseHeader_next(void const** param_0, u32* param_1, u32 param_2) { - // NONMATCHING -} -#endif /* 802A92F4-802A9490 2A3C34 019C+00 1/0 0/0 0/0 .text * parseBlock_next__Q28JMessage6TParseFPPCvPUlUl */ diff --git a/src/JSystem/JStudio/JStudio/ctb.cpp b/src/JSystem/JStudio/JStudio/ctb.cpp index 9644dc978a..f24235d5f5 100644 --- a/src/JSystem/JStudio/JStudio/ctb.cpp +++ b/src/JSystem/JStudio/JStudio/ctb.cpp @@ -7,6 +7,7 @@ #include "iterator.h" #include "string.h" #include "dol2asm.h" +#include <algorithm.h> // // Types: @@ -166,8 +167,7 @@ void JStudio::ctb::TControl::destroyObject_all() { } /* 80281190-80281230 27BAD0 00A0+00 1/1 0/0 0/0 .text getObject__Q37JStudio3ctb8TControlFPCvUl */ -// TPRObject_ID_equal issues -#ifdef NONMATCHING +// NONMATCHING - TPRObject_ID_equal issues JStudio::ctb::TObject* JStudio::ctb::TControl::getObject(void const* param_0, u32 param_1) { JGadget::TLinkList<TObject, -12>::iterator begin = mList.begin(); JGadget::TLinkList<TObject, -12>::iterator end = mList.end(); @@ -177,11 +177,6 @@ JStudio::ctb::TObject* JStudio::ctb::TControl::getObject(void const* param_0, u3 } return NULL; } -#else -JStudio::ctb::TObject* JStudio::ctb::TControl::getObject(void const* param_0, u32 param_1) { - // NONMATCHING -} -#endif /* 80281230-80281274 27BB70 0044+00 0/0 1/1 0/0 .text getObject_index__Q37JStudio3ctb8TControlFUl */ diff --git a/src/JSystem/JStudio/JStudio/functionvalue.cpp b/src/JSystem/JStudio/JStudio/functionvalue.cpp index 4c6095c7a0..584bdd0e7a 100644 --- a/src/JSystem/JStudio/JStudio/functionvalue.cpp +++ b/src/JSystem/JStudio/JStudio/functionvalue.cpp @@ -392,8 +392,7 @@ f64 interpolateValue_hermite(f64 c0, f64 c1, f64 x, f64 c2, f64 x2, f64 c3, f64 /* 80281774-802817D8 27C0B4 0064+00 1/1 0/0 0/0 .text * interpolateValue_BSpline_uniform__Q27JStudio13functionvalueFddddd */ -// really minor regalloc. -#ifdef NONMATCHING +// NONMATCHING - really minor regalloc. f64 interpolateValue_BSpline_uniform(f64 f1, f64 f2, f64 f3, f64 f4, f64 f5) { // pow3(1.0 - f1) f64 f6 = (1.0 - f1); @@ -412,12 +411,6 @@ f64 interpolateValue_BSpline_uniform(f64 f1, f64 f2, f64 f3, f64 f4, f64 f5) { return temp5 + (temp * f2 + f8 * f5) * 0.5 + temp3; } -#else -f64 interpolateValue_BSpline_uniform(f64 param_0, f64 param_1, f64 param_2, f64 param_3, - f64 param_4) { - // NONMATCHING -} -#endif /* 802817D8-802818B8 27C118 00E0+00 1/1 0/0 0/0 .text * interpolateValue_BSpline_nonuniform__Q27JStudio13functionvalueFdPCdPCd */ @@ -790,8 +783,7 @@ void TFunctionValue_transition::prepare() { /* 802824F4-802826BC 27CE34 01C8+00 1/0 0/0 0/0 .text * getValue__Q27JStudio25TFunctionValue_transitionFd */ -// regalloc. Maybe return value related. -#ifdef NONMATCHING +// NONMATCHING - regalloc. Maybe return value related. f64 TFunctionValue_transition::getValue(f64 param_1) { f64 progress = range_getParameter_progress(param_1); f64 dVar3 = range_getParameter_outside(progress); @@ -830,11 +822,6 @@ f64 TFunctionValue_transition::getValue(f64 param_1) { } } } -#else -f64 TFunctionValue_transition::getValue(f64 param_0) { - // NONMATCHING -} -#endif TFunctionValue_list::TFunctionValue_list() : _44(NULL), uData_(0), _50(NAN), pfnUpdate_(NULL) {} @@ -1307,4 +1294,4 @@ extern "C" void func_802838C8(void* _this, JStudio::TFunctionValue_hermite::TIterator_data_ param_2, f64 const& param_3, std::less<f64> param_4) { // NONMATCHING -}
\ No newline at end of file +} diff --git a/src/JSystem/JStudio/JStudio/fvb.cpp b/src/JSystem/JStudio/JStudio/fvb.cpp index ec4d0b7cb2..562560d2b6 100644 --- a/src/JSystem/JStudio/JStudio/fvb.cpp +++ b/src/JSystem/JStudio/JStudio/fvb.cpp @@ -302,7 +302,7 @@ namespace fvb { TObject::~TObject() {} -#ifdef NONMATCHING +// NONMATCHING void TObject::prepare(data::TParse_TBlock const& rBlock, TControl* pControl) { ASSERT(pfv_ != 0); @@ -449,14 +449,6 @@ void TObject::prepare(data::TParse_TBlock const& rBlock, TControl* pControl) { JUT_EXPECT(pData == pNext); pfv_->prepare(); } -#else -/* 80283FC8-802841EC 27E908 0224+00 2/1 0/0 0/0 .text - * prepare__Q37JStudio3fvb7TObjectFRCQ47JStudio3fvb4data13TParse_TBlockPQ37JStudio3fvb8TControl */ -void TObject::prepare(data::TParse_TBlock const& param_0, TControl* param_1) { - // NONMATCHING -} - -#endif namespace { TFunctionValue_composite::TData getCompositeData_raw_(const void* arg1) { @@ -790,4 +782,4 @@ bool TParse::parseBlock_next(void const** ppData_inout, u32* puData_out, u32 fla } } // namespace fvb -} // namespace JStudio
\ No newline at end of file +} // namespace JStudio diff --git a/src/JSystem/JStudio/JStudio/jstudio-math.cpp b/src/JSystem/JStudio/JStudio/jstudio-math.cpp index 00ff6216c1..81a876131b 100644 --- a/src/JSystem/JStudio/JStudio/jstudio-math.cpp +++ b/src/JSystem/JStudio/JStudio/jstudio-math.cpp @@ -4,6 +4,8 @@ // #include "JSystem/JStudio/JStudio/jstudio-math.h" +#include "JSystem/JGeometry.h" +#include "JSystem/TPosition3.hh" #include "dol2asm.h" #include "math.h" @@ -41,8 +43,7 @@ SECTION_SDATA2 static u8 lit_489[4] = { }; /* 802859DC-80285B44 28031C 0168+00 1/1 0/0 0/0 .text getRotation_xyz__Q27JStudio4mathFPA4_ffff */ -// regalloc -#ifdef NONMATCHING +// NONMATCHING - regalloc void JStudio::math::getRotation_xyz(MtxP param_1, f32 x, f32 y, f32 z) { x = DEG_TO_RAD(x); f32 cosx = cos(x); @@ -71,11 +72,6 @@ void JStudio::math::getRotation_xyz(MtxP param_1, f32 x, f32 y, f32 z) { param_1[1][3] = 0.0f; param_1[2][3] = 0.0f; } -#else -void JStudio::math::getRotation_xyz(MtxP param_0, f32 param_1, f32 param_2, f32 param_3) { - // NONMATCHING -} -#endif /* 80285B44-80285BCC 280484 0088+00 0/0 2/2 0/0 .text * getTransformation_SRxyzT__Q27JStudio4mathFPA4_fRC3VecRC3VecRC3Vec */ @@ -115,8 +111,7 @@ SECTION_SDATA2 static f64 lit_628 = 57.29577951308232; /* 80285BCC-80285E0C 28050C 0240+00 0/0 2/2 0/0 .text * getFromTransformation_SRxyzT__Q27JStudio4mathFP3VecP3VecP3VecPA4_Cf */ -// getEulerXYZ is not inlined -#ifdef NONMATCHING +// NONMATCHING - getEulerXYZ is not inlined void JStudio::math::getFromTransformation_SRxyzT(Vec* param_1, Vec* param_2, Vec* param_3, CMtxP param_4) { getFromTransformation_S(param_4, param_1); @@ -145,9 +140,3 @@ void JStudio::math::getFromTransformation_SRxyzT(Vec* param_1, Vec* param_2, Vec param_2->y = local_a0.y; param_2->z = local_a0.z; } -#else -void JStudio::math::getFromTransformation_SRxyzT(Vec* param_0, Vec* param_1, Vec* param_2, - CMtxP param_3) { - // NONMATCHING -} -#endif
\ No newline at end of file diff --git a/src/JSystem/JStudio/JStudio/jstudio-object.cpp b/src/JSystem/JStudio/JStudio/jstudio-object.cpp index bba128613e..f021932f03 100644 --- a/src/JSystem/JStudio/JStudio/jstudio-object.cpp +++ b/src/JSystem/JStudio/JStudio/jstudio-object.cpp @@ -1589,19 +1589,13 @@ void JStudio::TObject::forward_value(u32 param_0) { } /* 8028679C-802867D4 2810DC 0038+00 9/0 0/0 0/0 .text do_begin__Q27JStudio7TObjectFv */ -#ifdef NONMATCHING +// NONMATCHING void JStudio::TObject::do_begin() { TAdaptor* adaptor = getAdaptor(); if (adaptor != NULL) { adaptor->adaptor_do_begin(); } } -#else -// void JStudio::TObject::do_begin() { -extern "C" void do_begin__Q27JStudio7TObjectFv() { - // NONMATCHING -} -#endif /* 802867D4-8028680C 281114 0038+00 9/0 0/0 0/0 .text do_end__Q27JStudio7TObjectFv */ void JStudio::TObject::do_end() { @@ -1633,14 +1627,9 @@ JStudio::TObject::TObject(JStudio::stb::data::TParse_TBlock_object const& param_ /* 802868B0-80286910 2811F0 0060+00 0/0 1/1 0/0 .text __dt__Q27JStudio14TAdaptor_actorFv */ -#ifdef NONMATCHING +// NONMATCHING JStudio::TAdaptor_actor::~TAdaptor_actor() { } -#else -JStudio::TAdaptor_actor::~TAdaptor_actor() { - // NONMATCHING -} -#endif /* 80286910-8028694C 281250 003C+00 0/0 1/1 0/0 .text * __ct__Q27JStudio13TObject_actorFRCQ47JStudio3stb4data20TParse_TBlock_objectPQ27JStudio14TAdaptor_actor @@ -1686,13 +1675,8 @@ void JStudio::TObject_actor::do_paragraph(u32 param_0, void const* param_1, u32 } /* 80286C9C-80286CFC 2815DC 0060+00 0/0 1/1 0/0 .text __dt__Q27JStudio21TAdaptor_ambientLightFv */ -#ifdef NONMATCHING +// NONMATCHING JStudio::TAdaptor_ambientLight::~TAdaptor_ambientLight() {} -#else -JStudio::TAdaptor_ambientLight::~TAdaptor_ambientLight() { - // NONMATCHING -} -#endif /* 80286CFC-80286D38 28163C 003C+00 0/0 1/1 0/0 .text * __ct__Q27JStudio20TObject_ambientLightFRCQ47JStudio3stb4data20TParse_TBlock_objectPQ27JStudio21TAdaptor_ambientLight @@ -1740,13 +1724,8 @@ void JStudio::TObject_ambientLight::do_paragraph(u32 param_0, void const* param_ /* 80286E1C-80286E7C 28175C 0060+00 0/0 1/1 0/0 .text __dt__Q27JStudio15TAdaptor_cameraFv */ -#ifdef NONMATCHING +// NONMATCHING JStudio::TAdaptor_camera::~TAdaptor_camera() {} -#else -JStudio::TAdaptor_camera::~TAdaptor_camera() { - // NONMATCHING -} -#endif /* 80286E7C-80286EB8 2817BC 003C+00 0/0 1/1 0/0 .text * __ct__Q27JStudio14TObject_cameraFRCQ47JStudio3stb4data20TParse_TBlock_objectPQ27JStudio15TAdaptor_camera @@ -1803,13 +1782,8 @@ void JStudio::TObject_camera::do_paragraph(u32 param_0, void const* param_1, u32 } /* 8028717C-802871DC 281ABC 0060+00 0/0 1/1 0/0 .text __dt__Q27JStudio12TAdaptor_fogFv */ -#ifdef NONMATCHING +// NONMATCHING JStudio::TAdaptor_fog::~TAdaptor_fog() {} -#else -JStudio::TAdaptor_fog::~TAdaptor_fog() { - // NONMATCHING -} -#endif /* 802871DC-80287218 281B1C 003C+00 0/0 1/1 0/0 .text * __ct__Q27JStudio11TObject_fogFRCQ47JStudio3stb4data20TParse_TBlock_objectPQ27JStudio12TAdaptor_fog @@ -1846,13 +1820,8 @@ void JStudio::TObject_fog::do_paragraph(u32 param_0, void const* param_1, u32 pa /* 80287308-80287368 281C48 0060+00 0/0 1/1 0/0 .text __dt__Q27JStudio14TAdaptor_lightFv */ -#ifdef NONMATCHING +// NONMATCHING JStudio::TAdaptor_light::~TAdaptor_light() {} -#else -JStudio::TAdaptor_light::~TAdaptor_light() { - // NONMATCHING -} -#endif /* 80287368-802873A4 281CA8 003C+00 0/0 1/1 0/0 .text * __ct__Q27JStudio13TObject_lightFRCQ47JStudio3stb4data20TParse_TBlock_objectPQ27JStudio14TAdaptor_light @@ -1895,8 +1864,7 @@ JStudio::TObject_message::TObject_message(JStudio::stb::data::TParse_TBlock_obje /* 8028767C-8028770C 281FBC 0090+00 1/0 0/0 0/0 .text * do_paragraph__Q27JStudio15TObject_messageFUlPCvUl */ -// param_1 &= 0x1f is out of place + unsure about the pmfn -#ifdef NONMATCHING +// NONMATCHING - param_1 &= 0x1f is out of place + unsure about the pmfn void JStudio::TObject_message::do_paragraph(u32 param_1, void const* param_2, u32 param_3) { TAdaptor* adaptor = getAdaptor(); if (adaptor != NULL) { @@ -1915,20 +1883,10 @@ void JStudio::TObject_message::do_paragraph(u32 param_1, void const* param_2, u3 } } -#else -void JStudio::TObject_message::do_paragraph(u32 param_0, void const* param_1, u32 param_2) { - // NONMATCHING -} -#endif /* 8028770C-8028776C 28204C 0060+00 0/0 1/1 0/0 .text __dt__Q27JStudio17TAdaptor_particleFv */ -#ifdef NONMATCHING +// NONMATCHING JStudio::TAdaptor_particle::~TAdaptor_particle() {} -#else -JStudio::TAdaptor_particle::~TAdaptor_particle() { - // NONMATCHING -} -#endif /* 8028776C-802877A8 2820AC 003C+00 0/0 1/1 0/0 .text * __ct__Q27JStudio16TObject_particleFRCQ47JStudio3stb4data20TParse_TBlock_objectPQ27JStudio17TAdaptor_particle @@ -1944,13 +1902,8 @@ void JStudio::TObject_particle::do_paragraph(u32 param_0, void const* param_1, u /* 80287B3C-80287B9C 28247C 0060+00 0/0 1/1 0/0 .text __dt__Q27JStudio14TAdaptor_soundFv */ -#ifdef NONMATCHING +// NONMATCHING JStudio::TAdaptor_sound::~TAdaptor_sound() {} -#else -JStudio::TAdaptor_sound::~TAdaptor_sound() { - // NONMATCHING -} -#endif /* 80287B9C-80287BD8 2824DC 003C+00 0/0 1/1 0/0 .text * __ct__Q27JStudio13TObject_soundFRCQ47JStudio3stb4data20TParse_TBlock_objectPQ27JStudio14TAdaptor_sound @@ -2376,4 +2329,4 @@ SECTION_DEAD static char const* const pad_8039AB82 = "\0\0\0\0\0"; // extern u8 data_804511F8[8]; // u8 data_804511F8[8]; -/* 8039AB78-8039AB78 0271D8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
\ No newline at end of file +/* 8039AB78-8039AB78 0271D8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/JSystem/JStudio/JStudio/stb.cpp b/src/JSystem/JStudio/JStudio/stb.cpp index 52b6c1d798..1f13b25cb5 100644 --- a/src/JSystem/JStudio/JStudio/stb.cpp +++ b/src/JSystem/JStudio/JStudio/stb.cpp @@ -359,8 +359,7 @@ void TControl::destroyObject_all() { } /* 80289364-80289404 283CA4 00A0+00 1/1 0/0 0/0 .text getObject__Q37JStudio3stb8TControlFPCvUl */ -// TPRObject_ID_equal copy issue -#ifdef NONMATCHING +// NONMATCHING - TPRObject_ID_equal copy issue TObject* TControl::getObject(void const* param_0, u32 param_1) { JGadget::TLinkList<TObject, -12>::iterator begin = mObjectContainer.begin(); JGadget::TLinkList<TObject, -12>::iterator end = mObjectContainer.end(); @@ -370,11 +369,6 @@ TObject* TControl::getObject(void const* param_0, u32 param_1) { } return NULL; } -#else -TObject* TControl::getObject(void const* param_0, u32 param_1) { - // NONMATCHING -} -#endif /* 80289404-802894B4 283D44 00B0+00 0/0 1/1 0/0 .text reset__Q37JStudio3stb8TControlFv */ void TControl::reset() { @@ -388,8 +382,7 @@ void TControl::reset() { /* 802894B4-802895B4 283DF4 0100+00 0/0 2/2 0/0 .text forward__Q37JStudio3stb8TControlFUl */ -// regalloc -#ifdef NONMATCHING +// NONMATCHING - regalloc u8 TControl::forward(u32 param_0) { _54 = mObject_control.getSuspend(); u8 rv = mObject_control.forward(param_0); @@ -411,11 +404,6 @@ u8 TControl::forward(u32 param_0) { setStatus_(uVar7 | (uVar6 << 0x10)); return rv; } -#else -u8 TControl::forward(u32 param_0) { - // NONMATCHING -} -#endif TFactory::~TFactory() {} @@ -545,4 +533,4 @@ extern "C" void func_80289928(void* _this, JGadget::TLinkList<JStudio::stb::TObject, 12>::iterator param_1, JStudio::object::TPRObject_ID_equal param_2) { // NONMATCHING -}
\ No newline at end of file +} diff --git a/src/JSystem/JStudio/JStudio_JStage/object-actor.cpp b/src/JSystem/JStudio/JStudio_JStage/object-actor.cpp index 73afde1c9d..7ba626bac4 100644 --- a/src/JSystem/JStudio/JStudio_JStage/object-actor.cpp +++ b/src/JSystem/JStudio/JStudio_JStage/object-actor.cpp @@ -322,8 +322,7 @@ void JStudio_JStage::TAdaptor_actor::adaptor_do_prepare() { /* 8028A7B4-8028A8D8 2850F4 0124+00 1/0 0/0 0/0 .text * adaptor_do_begin__Q214JStudio_JStage14TAdaptor_actorFv */ -// instruction order -#ifdef NONMATCHING +// NONMATCHING - instruction order void JStudio_JStage::TAdaptor_actor::adaptor_do_begin() { adaptor_object_begin_(); JStage::TActor* pActor = get_pJSG_(); @@ -345,11 +344,6 @@ void JStudio_JStage::TAdaptor_actor::adaptor_do_begin() { pAnimOutput++; } } -#else -void JStudio_JStage::TAdaptor_actor::adaptor_do_begin() { - // NONMATCHING -} -#endif /* 8028A8D8-8028A92C 285218 0054+00 1/0 0/0 0/0 .text * adaptor_do_end__Q214JStudio_JStage14TAdaptor_actorFv */ @@ -676,14 +670,9 @@ void JStudio_JStage::TAdaptor_actor::TVVOutput_ANIMATION_FRAME_::operator()( /* 8028B138-8028B198 285A78 0060+00 2/1 0/0 0/0 .text * __dt__Q314JStudio_JStage14TAdaptor_actor26TVVOutput_ANIMATION_FRAME_Fv */ -#ifdef NONMATCHING +// NONMATCHING JStudio_JStage::TAdaptor_actor::TVVOutput_ANIMATION_FRAME_::~TVVOutput_ANIMATION_FRAME_() { } -#else -JStudio_JStage::TAdaptor_actor::TVVOutput_ANIMATION_FRAME_::~TVVOutput_ANIMATION_FRAME_() { - // NONMATCHING -} -#endif /* ############################################################################################## */ /* 803C5864-803C5888 022984 0010+14 2/2 0/0 0/0 .data @@ -731,4 +720,4 @@ extern "C" void func_8028B580(void* _this) { extern "C" void func_8028B5E0(void* _this, f32 param_0, JStudio::TAdaptor* param_1) /* const */ { // NONMATCHING -}
\ No newline at end of file +} diff --git a/src/JSystem/JStudio/JStudio_JStage/object-light.cpp b/src/JSystem/JStudio/JStudio_JStage/object-light.cpp index a40be19f86..6bc49090c8 100644 --- a/src/JSystem/JStudio/JStudio_JStage/object-light.cpp +++ b/src/JSystem/JStudio/JStudio_JStage/object-light.cpp @@ -125,8 +125,7 @@ SECTION_SDATA2 static f32 lit_850 = 57.295780181884766f; /* 8028CCB0-8028CF68 2875F0 02B8+00 1/0 0/0 0/0 .text * adaptor_do_begin__Q214JStudio_JStage14TAdaptor_lightFv */ -// regalloc -#ifdef NONMATCHING +// NONMATCHING - regalloc void JStudio_JStage::TAdaptor_light::adaptor_do_begin() { adaptor_object_begin_(); JStage::TLight* pLightObj = get_pJSG_(); @@ -154,11 +153,6 @@ void JStudio_JStage::TAdaptor_light::adaptor_do_begin() { VECAdd(&finalTransform->position, &finalTransform->direction, &VStack_c4); adaptor_setVariableValue_Vec(sauVariableValue_3_TARGET_POSITION_XYZ, VStack_c4); } -#else -void JStudio_JStage::TAdaptor_light::adaptor_do_begin() { - // NONMATCHING -} -#endif /* 8028CF68-8028CFBC 2878A8 0054+00 1/0 0/0 0/0 .text * adaptor_do_end__Q214JStudio_JStage14TAdaptor_lightFv */ @@ -172,8 +166,7 @@ SECTION_SDATA2 static f32 lit_898 = 0.01745329238474369f; /* 8028CFBC-8028D18C 2878FC 01D0+00 1/0 0/0 0/0 .text * adaptor_do_update__Q214JStudio_JStage14TAdaptor_lightFUl */ -// float regalloc -#ifdef NONMATCHING +// NONMATCHING - float regalloc void JStudio_JStage::TAdaptor_light::adaptor_do_update(u32 param_1) { JStage::TLight* lightObj = get_pJSG_(); const JStudio::TObject* pObject = adaptor_getObject(); @@ -209,11 +202,6 @@ void JStudio_JStage::TAdaptor_light::adaptor_do_update(u32 param_1) { lightObj->JSGSetDirection(pTrans->direction); pJSGObject_->JSGUpdate(); } -#else -void JStudio_JStage::TAdaptor_light::adaptor_do_update(u32 param_0) { - // NONMATCHING -} -#endif /* 8028D18C-8028D1B0 287ACC 0024+00 1/0 0/0 0/0 .text * adaptor_do_data__Q214JStudio_JStage14TAdaptor_lightFPCvUlPCvUl */ @@ -263,4 +251,4 @@ void JStudio_JStage::TAdaptor_light::adaptor_do_ENABLE(JStudio::data::TEOperatio void JStudio_JStage::TAdaptor_light::TVVOutput_direction_::operator()( f32 param_0, JStudio::TAdaptor* param_1) const { ((JStudio_JStage::TAdaptor_light*)param_1)->field_0x11c = field_0x8; -}
\ No newline at end of file +} diff --git a/src/JSystem/JUtility/JUTAssert.cpp b/src/JSystem/JUtility/JUTAssert.cpp index 61bed4e37e..e6715ef1c4 100644 --- a/src/JSystem/JUtility/JUTAssert.cpp +++ b/src/JSystem/JUtility/JUTAssert.cpp @@ -9,6 +9,9 @@ #include "JSystem/JUtility/JUTDirectPrint.h" #include "stdio.h" +/* 804508F8-80450900 000378 0008+00 0/0 3/3 0/0 .sdata None */ +bool sAssertVisible = true; + namespace JUTAssertion { /* 802E495C-802E4960 2DF29C 0004+00 0/0 1/1 0/0 .text create__12JUTAssertionFv */ @@ -222,4 +225,4 @@ void setMessageCount(int msg_count) { sMessageLife = msg_count <= 0 ? 0 : msg_count; } -}; // namespace JUTAssertion
\ No newline at end of file +}; // namespace JUTAssertion diff --git a/src/JSystem/JUtility/JUTConsole.cpp b/src/JSystem/JUtility/JUTConsole.cpp index 63cdf38f0a..27a941cc9b 100644 --- a/src/JSystem/JUtility/JUTConsole.cpp +++ b/src/JSystem/JUtility/JUTConsole.cpp @@ -1,118 +1,44 @@ -// -// Generated By: dol2asm -// Translation Unit: JUTConsole -// - #include "JSystem/JUtility/JUTConsole.h" #include "JSystem/J2DGraph/J2DOrthoGraph.h" #include "JSystem/JKernel/JKRHeap.h" #include "JSystem/JUtility/JUTAssert.h" #include "JSystem/JUtility/JUTDirectPrint.h" #include "JSystem/JUtility/JUTVideo.h" -#include "dol2asm.h" -#include "stdio.h" - -// -// Forward References: -// - -extern "C" void create__10JUTConsoleFUiUiP7JKRHeap(); -extern "C" void create__10JUTConsoleFUiPvUl(); -extern "C" void __ct__10JUTConsoleFUiUib(); -extern "C" void __dt__10JUTConsoleFv(); -extern "C" void getObjectSizeFromBufferSize__10JUTConsoleFUiUi(); -extern "C" void getLineFromObjectSize__10JUTConsoleFUlUi(); -extern "C" void clear__10JUTConsoleFv(); -extern "C" void doDraw__10JUTConsoleCFQ210JUTConsole12EConsoleType(); -extern "C" void print_f__10JUTConsoleFPCce(); -extern "C" void print__10JUTConsoleFPCc(); -extern "C" void dumpToTerminal__10JUTConsoleFUi(); -extern "C" void scroll__10JUTConsoleFi(); -extern "C" void getUsedLine__10JUTConsoleCFv(); -extern "C" void getLineOffset__10JUTConsoleCFv(); -extern "C" void __ct__17JUTConsoleManagerFv(); -extern "C" void createManager__17JUTConsoleManagerFP7JKRHeap(); -extern "C" void appendConsole__17JUTConsoleManagerFP10JUTConsole(); -extern "C" void removeConsole__17JUTConsoleManagerFP10JUTConsole(); -extern "C" void draw__17JUTConsoleManagerCFv(); -extern "C" void drawDirect__17JUTConsoleManagerCFb(); -extern "C" void setDirectConsole__17JUTConsoleManagerFP10JUTConsole(); -extern "C" void JUTReportConsole(const char* message); -extern "C" void JUTWarningConsole_f(const char* fmt, ...); -extern "C" void JUTWarningConsole(const char*); -extern "C" extern char const* const JUTConsole__stringBase0; -extern "C" u8 sManager__17JUTConsoleManager[4]; - -// -// External References: -// - -extern "C" void alloc__7JKRHeapFUliP7JKRHeap(); -extern "C" void* __nw__FUlP7JKRHeapi(); -extern "C" void __dl__FPv(); -extern "C" void __ct__11JKRDisposerFv(); -extern "C" void __dt__11JKRDisposerFv(); -extern "C" void -Insert__Q27JGadget13TNodeLinkListFQ37JGadget13TNodeLinkList8iteratorPQ27JGadget13TLinkListNode(); -extern "C" void Remove__Q27JGadget13TNodeLinkListFPQ27JGadget13TLinkListNode(); -extern "C" void setCharColor__7JUTFontFQ28JUtility6TColor(); -extern "C" void drawString_size_scale__7JUTFontFffffPCcUlb(); -extern "C" void erase__14JUTDirectPrintFiiii(); -extern "C" void drawString__14JUTDirectPrintFUsUsPc(); -extern "C" void setCharColor__14JUTDirectPrintFQ28JUtility6TColor(); -extern "C" void __ct__13J2DOrthoGraphFffffff(); -extern "C" void setPort__13J2DOrthoGraphFv(); -extern "C" void J2DFillBox__FffffQ28JUtility6TColor(); -extern "C" u32 VIGetRetraceCount(); -extern "C" void _savegpr_20(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_20(); -extern "C" void _restgpr_27(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" extern void* __vt__14J2DGrafContext[10]; -extern "C" extern void* __vt__13J2DOrthoGraph[10]; -extern "C" u8 sCurrentHeap__7JKRHeap[4]; -extern "C" u8 sDirectPrint__14JUTDirectPrint[4 + 4 /* padding */]; -extern "C" u8 sManager__8JUTVideo[4]; - -// -// Declarations: -// - -/* ############################################################################################## */ +#include <stdio.h> + /* 80451570-80451574 000A70 0004+00 4/4 7/7 0/0 .sbss sManager__17JUTConsoleManager */ JUTConsoleManager* JUTConsoleManager::sManager; /* 802E7354-802E73E4 2E1C94 0090+00 0/0 1/1 0/0 .text create__10JUTConsoleFUiUiP7JKRHeap */ -JUTConsole* JUTConsole::create(unsigned int param_0, unsigned int maxLines, JKRHeap* p_heap) { - JUTConsoleManager* pManager = JUTConsoleManager::sManager; +JUTConsole* JUTConsole::create(unsigned int param_0, unsigned int maxLines, JKRHeap* pHeap) { + JUTConsoleManager* pManager = JUTConsoleManager::getManager(); + JUT_ASSERT(33, pManager != 0); - void* buffer = JKRHeap::alloc(getObjectSizeFromBufferSize(param_0, maxLines), 0, p_heap); - u8* tmpBuf = (u8*)buffer; + u8* buffer = (u8*)JKRAllocFromHeap(pHeap, getObjectSizeFromBufferSize(param_0, maxLines), 0); - JUTConsole* newConsole = new (tmpBuf) JUTConsole(param_0, maxLines, true); - newConsole->mBuf = tmpBuf + sizeof(JUTConsole); - newConsole->clear(); + JUTConsole* console = new (buffer) JUTConsole(param_0, maxLines, true); + console->mBuf = buffer + sizeof(JUTConsole); + console->clear(); - pManager->appendConsole(newConsole); - return newConsole; + pManager->appendConsole(console); + return console; } /* 802E73E4-802E746C 2E1D24 0088+00 0/0 1/1 0/0 .text create__10JUTConsoleFUiPvUl */ JUTConsole* JUTConsole::create(unsigned int param_0, void* buffer, u32 bufferSize) { - JUTConsoleManager* pManager = JUTConsoleManager::sManager; + JUTConsoleManager* pManager = JUTConsoleManager::getManager(); + JUT_ASSERT(59, pManager != 0); + + JUT_ASSERT(62, ( (u32)buffer & 0x3 ) == 0); u32 maxLines = getLineFromObjectSize(bufferSize, param_0); - JUTConsole* newConsole = new (buffer) JUTConsole(param_0, maxLines, false); - newConsole->mBuf = (u8*)buffer + sizeof(JUTConsole); - newConsole->clear(); + JUTConsole* console = new (buffer) JUTConsole(param_0, maxLines, false); + console->mBuf = (u8*)buffer + sizeof(JUTConsole); + console->clear(); - pManager->appendConsole(newConsole); - return newConsole; + pManager->appendConsole(console); + return console; } /* 802E746C-802E755C 2E1DAC 00F0+00 2/2 0/0 0/0 .text __ct__10JUTConsoleFUiUib */ @@ -143,6 +69,7 @@ JUTConsole::JUTConsole(unsigned int param_0, unsigned int maxLines, bool param_2 /* 802E755C-802E75CC 2E1E9C 0070+00 1/0 0/0 0/0 .text __dt__10JUTConsoleFv */ JUTConsole::~JUTConsole() { + JUT_ASSERT(154, JUTConsoleManager::getManager()); JUTConsoleManager::getManager()->removeConsole(this); } @@ -167,6 +94,7 @@ void JUTConsole::clear() { for (u32 i = 0; i < mMaxLines; i++) { setLineAttr(i, 0); } + setLineAttr(0, -1); *getLinePtr(0) = 0; } @@ -330,6 +258,8 @@ void JUTConsole::print(char const* str) { /* 802E7F30-802E7F7C 2E2870 004C+00 1/1 1/1 0/0 .text JUTConsole_print_f_va_ */ extern "C" void JUTConsole_print_f_va_(JUTConsole* console, const char* fmt, va_list args) { + JUT_ASSERT(563, console!=0); + char buf[1024]; vsnprintf(buf, sizeof(buf), fmt, args); console->print(buf); @@ -427,8 +357,10 @@ JUTConsoleManager::JUTConsoleManager() { /* 802E81F4-802E8240 2E2B34 004C+00 0/0 1/1 0/0 .text createManager__17JUTConsoleManagerFP7JKRHeap */ JUTConsoleManager* JUTConsoleManager::createManager(JKRHeap* pHeap) { + JUT_ASSERT(0x39c, sManager == 0); + if (pHeap == NULL) { - pHeap = JKRHeap::sCurrentHeap; + pHeap = JKRGetCurrentHeap(); } JUTConsoleManager* manager = new (pHeap, 0) JUTConsoleManager(); @@ -440,6 +372,8 @@ JUTConsoleManager* JUTConsoleManager::createManager(JKRHeap* pHeap) { * appendConsole__17JUTConsoleManagerFP10JUTConsole */ void JUTConsoleManager::appendConsole(JUTConsole* console) { JUT_ASSERT(961, sManager != 0 && console != 0); + + JUT_ASSERT(964, soLink_.Find( console ) == soLink_.end()); soLink_.Push_back(console); if (mActiveConsole == NULL) { @@ -470,8 +404,6 @@ void JUTConsoleManager::removeConsole(JUTConsole* console) { } /* 802E8384-802E8450 2E2CC4 00CC+00 0/0 1/1 0/0 .text draw__17JUTConsoleManagerCFv */ -// missing stack var, different from tww/pik2 -#ifdef NONMATCHING void JUTConsoleManager::draw() const { ConsoleList::const_iterator iter = soLink_.begin(); ConsoleList::const_iterator end = soLink_.end(); @@ -485,11 +417,6 @@ void JUTConsoleManager::draw() const { if (mActiveConsole != NULL) mActiveConsole->doDraw(JUTConsole::CONSOLE_TYPE_0); } -#else -void JUTConsoleManager::draw() const { - // NONMATCHING -} -#endif /* 802E8450-802E84C4 2E2D90 0074+00 0/0 5/5 0/0 .text drawDirect__17JUTConsoleManagerCFb */ @@ -510,24 +437,23 @@ void JUTConsoleManager::drawDirect(bool waitRetrace) const { /* 802E84C4-802E8520 2E2E04 005C+00 0/0 2/2 0/0 .text * setDirectConsole__17JUTConsoleManagerFP10JUTConsole */ -void JUTConsoleManager::setDirectConsole(JUTConsole* p_console) { +void JUTConsoleManager::setDirectConsole(JUTConsole* console) { if (mDirectConsole != NULL) { appendConsole(mDirectConsole); } - if (p_console != NULL) { - removeConsole(p_console); + if (console != NULL) { + removeConsole(console); } - mDirectConsole = p_console; + mDirectConsole = console; } -/* ############################################################################################## */ /* 80451574-80451578 000A74 0004+00 2/1 0/0 0/0 .sbss sReportConsole */ static JUTConsole* sReportConsole; /* 802E8520-802E8528 2E2E60 0008+00 1/1 1/1 0/0 .text JUTSetReportConsole */ -extern "C" void JUTSetReportConsole(JUTConsole* p_console) { - sReportConsole = p_console; +extern "C" void JUTSetReportConsole(JUTConsole* console) { + sReportConsole = console; } /* 802E8528-802E8530 -00001 0008+00 0/0 0/0 0/0 .text JUTGetReportConsole */ @@ -535,13 +461,12 @@ extern "C" JUTConsole* JUTGetReportConsole() { return sReportConsole; } -/* ############################################################################################## */ /* 80451578-80451580 000A78 0004+04 2/1 0/0 0/0 .sbss sWarningConsole */ static JUTConsole* sWarningConsole; /* 802E8530-802E8538 2E2E70 0008+00 1/1 1/1 0/0 .text JUTSetWarningConsole */ -extern "C" void JUTSetWarningConsole(JUTConsole* p_console) { - sWarningConsole = p_console; +extern "C" void JUTSetWarningConsole(JUTConsole* console) { + sWarningConsole = console; } /* 802E8538-802E8540 -00001 0008+00 0/0 0/0 0/0 .text JUTGetWarningConsole */ @@ -571,18 +496,10 @@ extern "C" void JUTReportConsole_f(const char* fmt, ...) { va_end(args); } -/* ############################################################################################## */ -/* 8039D9A8-8039D9A8 02A008 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_8039D9B7 = - "\n:::dump of console[%x]----------------\n"; -SECTION_DEAD static char const* const stringBase_8039D9E0 = - ":::dump of console[%x] END------------\n"; -SECTION_DEAD static char const* const stringBase_8039DA08 = "%s"; -/* @stringBase0 padding */ -SECTION_DEAD static char const* const pad_8039DA0B = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; -#pragma pop +static void dummyString() { + DEAD_STRING("\n:::dump of console[%x]----------------\n"); + DEAD_STRING(":::dump of console[%x] END------------\n"); +} /* 802E8648-802E867C 2E2F88 0034+00 0/0 6/6 0/0 .text JUTReportConsole */ void JUTReportConsole(const char* message) { @@ -614,4 +531,4 @@ void JUTWarningConsole_f(const char* fmt, ...) { /* 802E86FC-802E8730 2E303C 0034+00 0/0 2/2 0/0 .text JUTWarningConsole */ void JUTWarningConsole(const char* message) { JUTReportConsole_f("%s", message); -}
\ No newline at end of file +} diff --git a/src/JSystem/JUtility/JUTException.cpp b/src/JSystem/JUtility/JUTException.cpp index f8fb1c0ac6..e6ee2765d0 100644 --- a/src/JSystem/JUtility/JUTException.cpp +++ b/src/JSystem/JUtility/JUTException.cpp @@ -6,69 +6,20 @@ #include "JSystem/JUtility/JUTException.h" #include "JSystem/JUtility/JUTConsole.h" #include "JSystem/JUtility/JUTDirectPrint.h" -#include "math.h" -#include "stdio.h" -#include "stdlib.h" -#include "dol2asm.h" -#include "dolphin/base/PPCArch.h" -#include "dolphin/os.h" -#include "global.h" - -// -// Forward References: -// - -extern "C" void run__12JUTExceptionFv(); -extern "C" void __dt__12JUTExceptionFv(); -extern "C" void printContext__12JUTExceptionFUsP9OSContextUlUl(); -extern "C" void createFB__12JUTExceptionFv(); -extern "C" void panic_f_va__12JUTExceptionFPCciPCcP16__va_list_struct(); - -extern "C" extern char const* const JUTException__stringBase0; -extern "C" u8 sMessageQueue__12JUTException[32]; -extern "C" u8 sMessageBuffer__12JUTException[4 + 4 /* padding */]; -extern "C" u8 sErrorManager__12JUTException[4]; - -extern "C" u8 msr__12JUTException[4]; -extern "C" u8 fpscr__12JUTException[4]; -extern "C" u8 sPreUserCallback__12JUTException[4]; -extern "C" u8 sConsole__12JUTException[4]; - -// -// External References: -// - -extern "C" void changeFrameBuffer__14JUTDirectPrintFPvUsUs(); -extern "C" void _savegpr_25(); -extern "C" void _restgpr_25(); -extern "C" void _savegpr_28(); -extern "C" void _restgpr_28(); -extern "C" void OSYieldThread(); -extern "C" void OSFillFPUContext(OSContext*); -extern "C" void print_f__10JUTConsoleFPCce(); -extern "C" OSContext* OSGetCurrentContext(); -extern "C" extern _GXRenderModeObj GXNtsc480Int; -extern "C" void _restgpr_16(); -extern "C" void fopen__13JUTDirectFileFPCc(); -extern "C" void fclose__13JUTDirectFileFv(); -extern "C" void fgets__13JUTDirectFileFPvi(); -extern "C" void print__10JUTConsoleFPCc(); -extern "C" void __ct__13JUTDirectFileFv(); -extern "C" void __dt__13JUTDirectFileFv(); -extern "C" void _savegpr_16(); - -// -// Declarations: -// +#include "JSystem/JUtility/JUTDirectFile.h" +#include <math.h> +#include <stdio.h> +#include <stdlib.h> +#include <dolphin.h> /* 803CC620-803CC640 029740 0020+00 3/3 0/0 0/0 .data sMessageQueue__12JUTException */ -SECTION_DATA OSMessageQueue JUTException::sMessageQueue = {0}; +OSMessageQueue JUTException::sMessageQueue = {0}; /* 803CC640-803CC660 029760 0020+00 1/1 0/0 0/0 .data c3bcnt */ -SECTION_DATA static OSTime c3bcnt[4] = {0, 0, 0, 0}; +static OSTime c3bcnt[4] = {0, 0, 0, 0}; /* 803CC660-803CC6A4 -00001 0044+00 1/1 0/0 0/0 .data sCpuExpName__12JUTException */ -SECTION_DATA const char* JUTException::sCpuExpName[17] = { +const char* JUTException::sCpuExpName[17] = { "SYSTEM RESET", "MACHINE CHECK", "DSI", @@ -132,9 +83,8 @@ JUTException* JUTException::create(JUTDirectPrint* directPrint) { return sErrorManager; } -/* ############################################################################################## */ /* 804508F0-804508F8 000370 0004+04 1/1 0/0 0/0 .sdata sMessageBuffer__12JUTException */ -SECTION_SDATA OSMessage JUTException::sMessageBuffer[1 + 1 /* padding */] = {0}; +OSMessage JUTException::sMessageBuffer[1] = {0}; struct CallbackObject { /* 0x00 */ OSErrorHandler callback; @@ -179,9 +129,7 @@ void* JUTException::run() { } } -/* ############################################################################################## */ /* 80434578-8043458C 061298 0014+00 2/2 0/0 0/0 .bss exCallbackObject */ - STATIC_ASSERT(sizeof(CallbackObject) == 0x14); static CallbackObject exCallbackObject; @@ -304,16 +252,6 @@ void JUTException::showFloatSub(int index, f32 value) { } } -/* ############################################################################################## */ -/* 8039D490-8039D490 029AF0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_8039D5B7 = - "-------------------------------- FPR\n"; -SECTION_DEAD static char const* const stringBase_8039D5DD = " "; -SECTION_DEAD static char const* const stringBase_8039D5DF = "\n"; -#pragma pop - /* 802E2454-802E2578 2DCD94 0124+00 1/1 0/0 0/0 .text showFloat__12JUTExceptionFP9OSContext */ void JUTException::showFloat(OSContext* context) { if (!sConsole) { @@ -968,147 +906,132 @@ bool JUTException::queryMapAddress(char* mapPath, u32 address, s32 section_id, u return false; } -/* ############################################################################################## */ -/* 8039D490-8039D490 029AF0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_8039D97E = " [%08X]: .%s [%08X: %XH]\n %s\n"; -/* @stringBase0 padding */ -SECTION_DEAD static char const* const pad_8039D99E = "\0"; -#pragma pop - /* 802E3C90-802E3FEC 2DE5D0 035C+00 1/1 0/0 0/0 .text * queryMapAddress_single__12JUTExceptionFPcUllPUlPUlPcUlbb */ // 2 additional instructions (addi r5,r1,8) related to section_name variable. -#ifdef NONMATCHING bool JUTException::queryMapAddress_single(char* mapPath, u32 address, s32 section_id, u32* out_addr, u32* out_size, char* out_line, u32 line_length, bool print, bool begin_with_newline) { if (!mapPath) { - return false; - } - - char section_name[16]; - char buffer[0x200]; - JUTDirectFile file; - int i = 0; - if (!file.fopen(mapPath)) { - return false; - } - - bool result = 0; - do { - char* src = buffer; - int found_section = 0; - do { - i++; - while (true) { - while (true) { - int length = file.fgets(buffer, ARRAY_SIZE(buffer)); - if (length < 0) - goto next_section; - if (buffer[0] == '.') - break; - } - - int i = 0; - char* src = buffer + 1; - for (; *src != '\0'; i++, src++) { - section_name[i] = *src; - if (*src == ' ' || i == 0xf) - break; - } - - section_name[i] = 0; - if (*src == 0) - break; - - if (src[1] == 's' && src[2] == 'e' && src[3] == 'c' && src[4] == 't') { - found_section = true; - break; - } - } - if ((found_section & 0xFF) == 0) - goto end; - } while (section_id >= 0 && section_id != i); - next_section:; - - u32 addr; - int size; - do { - int length; - do { - length = file.fgets(buffer, ARRAY_SIZE(buffer)); - if (length <= 4) - goto next_symbol; - } while ((length < 28) || (buffer[28] != '4')); - - addr = strtol(buffer + 19, NULL, 16); - addr = ((buffer[18] - '0') << 28) | addr; - size = strtol(buffer + 11, NULL, 16); - } while (addr > address || address >= addr + size); - - if (out_addr) - *out_addr = addr; - - if (out_size) - *out_size = size; - - if (out_line) { - src = buffer + 0x1e; - char* dst = out_line; - u32 length = 0; - for (; length < line_length - 1; src++) { - u32 ch = *(u8*)src; - if (ch < ' ' && ch != '\t') - break; - if (((int)ch == ' ' || ch == '\t') && (length != 0)) { - if (dst[-1] != ' ') { - *dst = ' '; - dst++; - length++; - } - } else { - *dst = ch; - dst++; - length++; - } - } - if (length != 0 && dst[-1] == ' ') { - dst--; - } - *dst = 0; - if (print) { - if (begin_with_newline) { - sConsole->print("\n"); - } - sConsole->print_f(" [%08X]: .%s [%08X: %XH]\n %s\n", address, section_name, addr, - size, out_line); - begin_with_newline = false; - } - } - - result = true; - - next_symbol:; - } while ((result & 0xFF) == 0 && section_id >= 0 && section_id != i); - - if (print && begin_with_newline) { - sConsole->print("\n"); - } - -end: - file.fclose(); - bool bresult = result != false; - return bresult; + return false; + } + + char section_name[16]; + char buffer[0x200]; + JUTDirectFile file; + int section_idx = 0; + if (!file.fopen(mapPath)) { + return false; + } + + bool result = false; + bool found_section; + + while (true) { + section_idx++; + found_section = false; + while (true) { + char* src; + char* dst; + + if (file.fgets(buffer, ARRAY_SIZE(buffer)) < 0) + break; + if (buffer[0] != '.') + continue; + + int i = 0; + src = buffer + 1; + while (*src != '\0') { + section_name[i] = *src; + if (*src == ' ' || i == 0xf) + break; + i++; + src++; + } + + section_name[i] = 0; + if (*src == 0) + break; + + if (src[1] == 's' && src[2] == 'e' && src[3] == 'c' && src[4] == 't') { + found_section = true; + break; + } + } + + if (!found_section) + break; + + if (section_id >= 0 && section_id != section_idx) + continue; + + int length; + + while (true) { + if ((length = file.fgets(buffer, ARRAY_SIZE(buffer))) <= 4) + break; + if ((length < 28)) + continue; + if (buffer[28] == '4') { + u32 addr = ((buffer[18] - '0') << 28) | strtol(buffer + 19, NULL, 16); + int size = strtol(buffer + 11, NULL, 16); + if ((addr <= address && address < addr + size)) { + if (out_addr) + *out_addr = addr; + + if (out_size) + *out_size = size; + + if (out_line) { + const u8* src = (const u8*)&buffer[0x1e]; + u8* dst = (u8*)out_line; + u32 i = 0; + + for (i = 0; i < line_length - 1; ++src) { + if ((u32)(*src) < ' ' && (u32)*src != '\t') + break; + if ((*src == ' ' || (u32)*src == '\t') && (i != 0)) { + if (dst[-1] != ' ') { + *dst = ' '; + dst++; + ++i; + } + } else { + *dst++ = *src; + i++; + } + } + if (i != 0 && dst[-1] == ' ') { + dst--; + i--; + } + *dst = 0; + if (print) { + if (begin_with_newline) { + sConsole->print("\n"); + } + sConsole->print_f(" [%08X]: .%s [%08X: %XH]\n %s\n", address, section_name, addr, size, out_line); + begin_with_newline = false; + } + } + result = true; + break; + } + } + } + + if (!result && (section_id < 0 || section_id != section_idx)) { + continue; + } + if (print && begin_with_newline) { + sConsole->print("\n"); + } + break; + } + + file.fclose(); + return result ? true : false; } -#else -bool JUTException::queryMapAddress_single(char* param_0, u32 param_1, s32 param_2, u32* param_3, - u32* param_4, char* param_5, u32 param_6, - bool param_7, bool param_8) { - // NONMATCHING -} -#endif /* 802E3FEC-802E40CC 2DE92C 00E0+00 0/0 1/1 0/0 .text createConsole__12JUTExceptionFPvUl */ @@ -1146,8 +1069,3 @@ JUTExternalFB::JUTExternalFB(_GXRenderModeObj* renderMode, GXGamma gamma, void* /* 802E40EC-802E414C 2DEA2C 0060+00 1/0 0/0 0/0 .text __dt__12JUTExceptionFv */ JUTException::~JUTException() {} - -/* ############################################################################################## - */ -/* 804508F8-80450900 000378 0008+00 0/0 3/3 0/0 .sdata None */ -SECTION_SDATA extern bool sAssertVisible = true; diff --git a/src/JSystem/JUtility/JUTFontData_Ascfont_fix12.cpp b/src/JSystem/JUtility/JUTFontData_Ascfont_fix12.cpp index 993a74797b..ad5010c3fa 100644 --- a/src/JSystem/JUtility/JUTFontData_Ascfont_fix12.cpp +++ b/src/JSystem/JUtility/JUTFontData_Ascfont_fix12.cpp @@ -1,7 +1,7 @@ #include <dolphin.h> /* 8039DA20-803A1B80 02A080 4160+00 0/0 1/0 0/0 .rodata JUTResFONT_Ascfont_fix12 */ -extern u8 const JUTResFONT_Ascfont_fix12[16736] = { +extern u8 const JUTResFONT_Ascfont_fix12[16736] ALIGN_DECL(32) = { 0x46, 0x4F, 0x4E, 0x54, 0x62, 0x66, 0x6E, 0x31, 0x00, 0x00, 0x41, 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x4E, 0x46, 0x31, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, @@ -1048,4 +1048,4 @@ extern u8 const JUTResFONT_Ascfont_fix12[16736] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -};
\ No newline at end of file +}; diff --git a/src/JSystem/JUtility/JUTXfb.cpp b/src/JSystem/JUtility/JUTXfb.cpp index 9175295484..6032693d36 100644 --- a/src/JSystem/JUtility/JUTXfb.cpp +++ b/src/JSystem/JUtility/JUTXfb.cpp @@ -55,27 +55,22 @@ void JUTXfb::common_init(int bufNum) { /* 802E5260-802E5308 2DFBA0 00A8+00 1/1 0/0 0/0 .text * __ct__6JUTXfbFPC16_GXRenderModeObjP7JKRHeapQ26JUTXfb10EXfbNumber */ -#ifdef NONMATCHING -JUTXfb::JUTXfb(_GXRenderModeObj const* pObj, JKRHeap* pHeap, JUTXfb::EXfbNumber xfbNum) { +// NONMATCHING - regswap, equivalent +JUTXfb::JUTXfb(GXRenderModeObj const* pObj, JKRHeap* pHeap, JUTXfb::EXfbNumber xfbNum) { common_init(xfbNum); if (pObj) { initiate(pObj->fb_width, pObj->xfb_height, pHeap, xfbNum); } else { - //_GXRenderModeObj* renderObj = JUTVideo::getManager()->getRenderMode(); u16 fb_width = JUTVideo::getManager()->getRenderMode()->fb_width; u16 efb_height = JUTVideo::getManager()->getRenderMode()->efb_height; u16 xfb_height = JUTVideo::getManager()->getRenderMode()->xfb_height; f32 scale_factor = GXGetYScaleFactor(efb_height, xfb_height); + u16 xfb_lines = GXGetNumXfbLines(efb_height, scale_factor); - initiate(fb_width, GXGetNumXfbLines(efb_height, scale_factor), pHeap, xfbNum); + initiate(fb_width, xfb_lines, pHeap, xfbNum); } } -#else -JUTXfb::JUTXfb(_GXRenderModeObj const* param_0, JKRHeap* param_1, - JUTXfb::EXfbNumber param_2){// NONMATCHING -} -#endif JUTXfb* JUTXfb::sManager; @@ -132,4 +127,4 @@ void JUTXfb::initiate(u16 width, u16 height, JKRHeap* pHeap, JUTXfb::EXfbNumber mBuffer[2] = NULL; mXfbAllocated[2] = false; } -}
\ No newline at end of file +} |
