summaryrefslogtreecommitdiff
path: root/libs/JSystem/JUtility/JUTConsole.cpp
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2022-06-29 13:19:09 -0700
committerGitHub <noreply@github.com>2022-06-29 22:19:09 +0200
commit046d178003035ea87d3042a61917c2d482c68c74 (patch)
tree4240e760d8d40201ca4ec96634da8abff211f6bb /libs/JSystem/JUtility/JUTConsole.cpp
parentcd5b02450cf278cbeb2c8bb90be1ad22518938c7 (diff)
work on daalink, fop actor, mDo machine, msg_scrn, + various (#201)
* work on fop actor / actor mng, daalink, d_a_obj_item * d_a_title mostly decompiled * daalink / d_event / JMessage / dmsg_out_font work * msg_scrn_base / msg_scrn_boss * some work on mDo machine, d_menu_save, d_tresure, and various * remove asm * progress
Diffstat (limited to 'libs/JSystem/JUtility/JUTConsole.cpp')
-rw-r--r--libs/JSystem/JUtility/JUTConsole.cpp194
1 files changed, 116 insertions, 78 deletions
diff --git a/libs/JSystem/JUtility/JUTConsole.cpp b/libs/JSystem/JUtility/JUTConsole.cpp
index a8d8eab20e..02f6d398ae 100644
--- a/libs/JSystem/JUtility/JUTConsole.cpp
+++ b/libs/JSystem/JUtility/JUTConsole.cpp
@@ -5,32 +5,14 @@
#include "JSystem/JUtility/JUTConsole.h"
#include "JSystem/JKernel/JKRHeap.h"
+#include "JSystem/JUtility/JUTDirectPrint.h"
+#include "JSystem/JUtility/JUTVideo.h"
+#include "JSystem/J2DGraph/J2DOrthoGraph.h"
#include "MSL_C/MSL_Common/Src/printf.h"
#include "dol2asm.h"
#include "dolphin/types.h"
//
-// Types:
-//
-
-struct JUTVideo {
- static u8 sManager[4];
-};
-
-struct JUTDirectPrint {
- /* 802E4288 */ void erase(int, int, int, int);
- /* 802E46D8 */ void drawString(u16, u16, char*);
- /* 802E4798 */ void setCharColor(JUtility::TColor);
-
- static u8 sDirectPrint[4 + 4 /* padding */];
-};
-
-struct J2DOrthoGraph {
- /* 802E96D0 */ J2DOrthoGraph(f32, f32, f32, f32, f32, f32);
- /* 802E97B4 */ void setPort();
-};
-
-//
// Forward References:
//
@@ -106,47 +88,45 @@ JUTConsoleManager* JUTConsoleManager::sManager;
/* 802E7354-802E73E4 2E1C94 0090+00 0/0 1/1 0/0 .text create__10JUTConsoleFUiUiP7JKRHeap
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm JUTConsole* JUTConsole::create(unsigned int param_0, unsigned int param_1, JKRHeap* param_2) {
- nofralloc
-#include "asm/JSystem/JUtility/JUTConsole/create__10JUTConsoleFUiUiP7JKRHeap.s"
+JUTConsole* JUTConsole::create(unsigned int param_0, unsigned int maxLines, JKRHeap* p_heap) {
+ JUTConsoleManager* pManager = JUTConsoleManager::sManager;
+
+ void* buffer = JKRHeap::alloc(getObjectSizeFromBufferSize(param_0, maxLines), 0, p_heap);
+ u8* tmpBuf = (u8*)buffer;
+
+ JUTConsole* newConsole = new (tmpBuf) JUTConsole(param_0, maxLines, true);
+ newConsole->mBuf = tmpBuf + sizeof(JUTConsole);
+ newConsole->clear();
+
+ pManager->appendConsole(newConsole);
+ return newConsole;
}
-#pragma pop
/* 802E73E4-802E746C 2E1D24 0088+00 0/0 1/1 0/0 .text create__10JUTConsoleFUiPvUl */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm JUTConsole* JUTConsole::create(unsigned int param_0, void* param_1, u32 param_2) {
- nofralloc
-#include "asm/JSystem/JUtility/JUTConsole/create__10JUTConsoleFUiPvUl.s"
-}
-#pragma pop
+JUTConsole* JUTConsole::create(unsigned int param_0, void* buffer, u32 bufferSize) {
+ JUTConsoleManager* pManager = JUTConsoleManager::sManager;
+ u32 maxLines = getLineFromObjectSize(bufferSize, param_0);
-/* ############################################################################################## */
-/* 803CC9A8-803CC9B8 029AC8 000C+04 2/2 0/0 0/0 .data __vt__10JUTConsole */
-SECTION_DATA extern void* __vt__10JUTConsole[3 + 1 /* padding */] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__10JUTConsoleFv,
- /* padding */
- NULL,
-};
+ JUTConsole* newConsole = new (buffer) JUTConsole(param_0, maxLines, false);
+ newConsole->mBuf = (u8*)buffer + sizeof(JUTConsole);
+ newConsole->clear();
+
+ pManager->appendConsole(newConsole);
+ return newConsole;
+}
/* 802E746C-802E755C 2E1DAC 00F0+00 2/2 0/0 0/0 .text __ct__10JUTConsoleFUiUib */
-JUTConsole::JUTConsole(unsigned int param_0, unsigned int param_1, bool param_2) {
+JUTConsole::JUTConsole(unsigned int param_0, unsigned int maxLines, bool param_2) {
field_0x2c = param_2;
field_0x20 = param_0;
- field_0x24 = param_1;
+ mMaxLines = maxLines;
mPositionX = 30;
mPositionY = 50;
mHeight = 20;
- if (mHeight > field_0x24) {
- mHeight = field_0x24;
+ if (mHeight > mMaxLines) {
+ mHeight = mMaxLines;
}
mFont = NULL;
@@ -168,13 +148,13 @@ JUTConsole::~JUTConsole() {
/* 802E75CC-802E75DC 2E1F0C 0010+00 1/1 0/0 0/0 .text
* getObjectSizeFromBufferSize__10JUTConsoleFUiUi */
-size_t JUTConsole::getObjectSizeFromBufferSize(unsigned int param_0, unsigned int param_1) {
- return (param_0 + 2) * param_1 + sizeof(JUTConsole);
+size_t JUTConsole::getObjectSizeFromBufferSize(unsigned int param_0, unsigned int maxLines) {
+ return (param_0 + 2) * maxLines + sizeof(JUTConsole);
}
/* 802E75DC-802E75EC 2E1F1C 0010+00 1/1 1/1 0/0 .text getLineFromObjectSize__10JUTConsoleFUlUi */
-size_t JUTConsole::getLineFromObjectSize(u32 param_0, unsigned int param_1) {
- return (param_0 - sizeof(JUTConsole)) / (param_1 + 2);
+size_t JUTConsole::getLineFromObjectSize(u32 bufferSize, unsigned int param_1) {
+ return (bufferSize - sizeof(JUTConsole)) / (param_1 + 2);
}
/* 802E75EC-802E7648 2E1F2C 005C+00 2/2 2/2 0/0 .text clear__10JUTConsoleFv */
@@ -184,7 +164,7 @@ void JUTConsole::clear() {
field_0x38 = 0;
field_0x3c = 0;
- for (int i = 0; i < field_0x24; i++) {
+ for (int i = 0; i < mMaxLines; i++) {
setLineAttr(i, 0);
}
setLineAttr(0, -1);
@@ -230,6 +210,63 @@ SECTION_SDATA2 static f64 lit_2471 = 4503601774854144.0 /* cast s32 to float */;
/* 802E7648-802E7BB8 2E1F88 0570+00 2/2 0/0 0/0 .text
* doDraw__10JUTConsoleCFQ210JUTConsole12EConsoleType */
+#ifdef NONMATCHING
+void JUTConsole::doDraw(JUTConsole::EConsoleType consoleType) const {
+ if (mVisible && (mFont != NULL || consoleType == CONSOLE_TYPE_2)) {
+ if (mHeight != 0) {
+ bool temp_r30 = consoleType == CONSOLE_TYPE_0;
+ f32 temp_f31 = 2.0f + mFontSizeY;
+
+ if (consoleType != CONSOLE_TYPE_2) {
+ if (JUTVideo::getManager() == NULL) {
+ J2DOrthoGraph ortho(0.0f, 0.0f, 640.0f, 480.0f, -1.0f, 1.0f);
+ ortho.setPort();
+ } else {
+ J2DOrthoGraph ortho(0.0f, 0.0f, JUTVideo::getManager()->getFbWidth(), JUTVideo::getManager()->getEfbHeight(), -1.0f, 1.0f);
+ ortho.setPort();
+ }
+
+ const JUtility::TColor* color;
+ if (temp_r30) {
+ color = &field_0x60;
+ } else {
+ color = &field_0x5c;
+ }
+
+ J2DFillBox(mPositionX - 2, (f32)(mPositionY - temp_f31), 4.0f + (mFontSizeX * (f32)field_0x20), temp_f31 * (f32)mHeight, *color);
+ mFont->setGX();
+
+ if (temp_r30) {
+ if ((diffIndex(field_0x30, field_0x38) - mHeight) + 1 <= 1) {
+ mFont->setCharColor(JUtility::TColor(255, 255, 255, 255));
+ } else if (field_0x30 == field_0x34) {
+ mFont->setCharColor(JUtility::TColor(255, 230, 230, 255));
+ } else {
+ mFont->setCharColor(JUtility::TColor(230, 230, 255, 255));
+ }
+ } else {
+ mFont->setCharColor(JUtility::TColor(230, 230, 230, 255));
+ }
+ } else {
+ JUTDirectPrint::getManager()->erase(mPositionX - 3, mPositionY - 2, (field_0x20 * 6) + 6, (temp_f31 * mHeight) + 4);
+ JUTDirectPrint::getManager()->setCharColor(JUtility::TColor(255, 255, 255, 255));
+ }
+
+ for (int i = 0, j = field_0x30; i > mHeight && j != field_0x34; i++, j = nextIndex(j)) {
+ char* str = (char*)getLinePtr(j);
+
+ if (str[-1] != 0) {
+ if (consoleType != CONSOLE_TYPE_2) {
+ mFont->drawString_scale(mPositionX, (mPositionY + i) * temp_f31, mFontSizeX, mFontSizeY, str, true);
+ } else {
+ JUTDirectPrint::getManager()->drawString(mPositionX, (mPositionY + i) * temp_f31, str);
+ }
+ }
+ }
+ }
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -238,6 +275,7 @@ asm void JUTConsole::doDraw(JUTConsole::EConsoleType param_0) const {
#include "asm/JSystem/JUtility/JUTConsole/doDraw__10JUTConsoleCFQ210JUTConsole12EConsoleType.s"
}
#pragma pop
+#endif
/* 802E7BB8-802E7C38 2E24F8 0080+00 0/0 13/13 0/0 .text print_f__10JUTConsoleFPCce */
void JUTConsole::print_f(char const* fmt, ...) {
@@ -283,31 +321,31 @@ asm void JUTConsole::dumpToTerminal(unsigned int param_0) {
#pragma pop
/* 802E80A8-802E8184 2E29E8 00DC+00 0/0 3/3 0/0 .text scroll__10JUTConsoleFi */
-void JUTConsole::scroll(int param_0) {
- if (param_0 < 0) {
+void JUTConsole::scroll(int scrollAmnt) {
+ if (scrollAmnt < 0) {
int diff = diffIndex(field_0x34, field_0x30);
- if (param_0 < -diff) {
- param_0 = -diff;
+ if (scrollAmnt < -diff) {
+ scrollAmnt = -diff;
}
} else {
- if (param_0 > 0) {
+ if (scrollAmnt > 0) {
int diff = diffIndex(field_0x34, field_0x38);
if (diff + 1 <= mHeight) {
- param_0 = 0;
+ scrollAmnt = 0;
} else {
diff = diffIndex(field_0x30, field_0x38);
- if (param_0 > (int)(diff - mHeight) + 1) {
- param_0 = (int)(diff - mHeight) + 1;
+ if (scrollAmnt > (int)(diff - mHeight) + 1) {
+ scrollAmnt = (int)(diff - mHeight) + 1;
}
}
}
}
- field_0x30 += param_0;
+ field_0x30 += scrollAmnt;
if (field_0x30 < 0) {
- field_0x30 += field_0x24;
+ field_0x30 += mMaxLines;
}
- if (field_0x30 >= field_0x24) {
- field_0x30 -= field_0x24;
+ if (field_0x30 >= mMaxLines) {
+ field_0x30 -= mMaxLines;
}
}
@@ -381,9 +419,9 @@ asm void JUTConsoleManager::draw() const {
/* 802E8450-802E84C4 2E2D90 0074+00 0/0 5/5 0/0 .text drawDirect__17JUTConsoleManagerCFb
*/
-void JUTConsoleManager::drawDirect(bool param_0) const {
+void JUTConsoleManager::drawDirect(bool waitRetrace) const {
if (mDirectConsole != NULL) {
- if (param_0) {
+ if (waitRetrace) {
s32 interrupt_status = OSEnableInterrupts();
u32 retrace_count = VIGetRetraceCount();
u32 new_count;
@@ -392,21 +430,21 @@ void JUTConsoleManager::drawDirect(bool param_0) const {
} while (retrace_count == new_count);
OSRestoreInterrupts(interrupt_status);
}
- mDirectConsole->doDraw(JUTConsole::UNK_TYPE2);
+ mDirectConsole->doDraw(JUTConsole::CONSOLE_TYPE_2);
}
}
/* 802E84C4-802E8520 2E2E04 005C+00 0/0 2/2 0/0 .text
* setDirectConsole__17JUTConsoleManagerFP10JUTConsole */
-void JUTConsoleManager::setDirectConsole(JUTConsole* pConsole) {
+void JUTConsoleManager::setDirectConsole(JUTConsole* p_console) {
if (mDirectConsole != NULL) {
appendConsole(mDirectConsole);
}
- if (pConsole != NULL) {
- removeConsole(pConsole);
+ if (p_console != NULL) {
+ removeConsole(p_console);
}
- mDirectConsole = pConsole;
+ mDirectConsole = p_console;
}
/* ############################################################################################## */
@@ -414,8 +452,8 @@ void JUTConsoleManager::setDirectConsole(JUTConsole* pConsole) {
static JUTConsole* sReportConsole;
/* 802E8520-802E8528 2E2E60 0008+00 1/1 1/1 0/0 .text JUTSetReportConsole */
-extern "C" void JUTSetReportConsole(JUTConsole* pConsole) {
- sReportConsole = pConsole;
+extern "C" void JUTSetReportConsole(JUTConsole* p_console) {
+ sReportConsole = p_console;
}
/* 802E8528-802E8530 -00001 0008+00 0/0 0/0 0/0 .text JUTGetReportConsole */
@@ -428,8 +466,8 @@ extern "C" JUTConsole* JUTGetReportConsole() {
static JUTConsole* sWarningConsole;
/* 802E8530-802E8538 2E2E70 0008+00 1/1 1/1 0/0 .text JUTSetWarningConsole */
-extern "C" void JUTSetWarningConsole(JUTConsole* pConsole) {
- sWarningConsole = pConsole;
+extern "C" void JUTSetWarningConsole(JUTConsole* p_console) {
+ sWarningConsole = p_console;
}
/* 802E8538-802E8540 -00001 0008+00 0/0 0/0 0/0 .text JUTGetWarningConsole */
@@ -443,7 +481,7 @@ extern "C" void JUTReportConsole_f_va(const char* fmt, va_list args) {
if (JUTGetReportConsole() == NULL) {
vsnprintf(buf, sizeof(buf), fmt, args);
- } else if (JUTGetReportConsole()->getOutput() & 3) {
+ } else if (JUTGetReportConsole()->getOutput() & (JUTConsole::OUTPUT_CONSOLE | JUTConsole::OUTPUT_OSREPORT)) {
vsnprintf(buf, sizeof(buf), fmt, args);
JUTGetReportConsole()->print(buf);
}