1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
//
// Generated By: dol2asm
// Translation Unit: JUTDbPrint
//
#include "JSystem/JUtility/JUTDbPrint.h"
#include "JSystem/J2DGraph/J2DOrthoGraph.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "JSystem/JUtility/JUTVideo.h"
#include "stdio.h"
/* 802E0148-802E0190 2DAA88 0048+00 1/1 0/0 0/0 .text __ct__10JUTDbPrintFP7JUTFontP7JKRHeap */
JUTDbPrint::JUTDbPrint(JUTFont* pFont, JKRHeap* pHeap) {
mFont = pFont;
mFirst = NULL;
mHeap = pHeap != NULL ? pHeap : JKRHeap::getCurrentHeap();
mColor.set(255, 255, 255, 255);
mVisible = true;
}
/* ############################################################################################## */
/* 804514C8-804514D0 0009C8 0004+04 3/3 6/6 0/0 .sbss sDebugPrint__10JUTDbPrint */
JUTDbPrint* JUTDbPrint::sDebugPrint;
/* 802E0190-802E0204 2DAAD0 0074+00 0/0 2/2 0/0 .text start__10JUTDbPrintFP7JUTFontP7JKRHeap */
JUTDbPrint* JUTDbPrint::start(JUTFont* pFont, JKRHeap* pHeap) {
if (sDebugPrint == NULL) {
if (pHeap == NULL) {
pHeap = JKRHeap::getCurrentHeap();
}
sDebugPrint = new JUTDbPrint(pFont, pHeap);
}
return sDebugPrint;
}
/* 802E0204-802E021C 2DAB44 0018+00 0/0 1/1 0/0 .text changeFont__10JUTDbPrintFP7JUTFont
*/
JUTFont* JUTDbPrint::changeFont(JUTFont* pFont) {
JUTFont* old = mFont;
if (pFont != NULL) {
mFont = pFont;
}
return old;
}
/* 802E021C-802E02A4 2DAB5C 0088+00 2/2 0/0 0/0 .text enter__10JUTDbPrintFiiiPCci */
void JUTDbPrint::enter(int param_0, int param_1, int param_2, char const* param_3, int param_4) {
if (param_4 > 0) {
unk_print* ptr = static_cast<unk_print*>(JKRAllocFromHeap(mHeap, param_4 + 0x10, -4));
if (ptr != NULL) {
ptr->unk_0x04 = param_0;
ptr->unk_0x06 = param_1;
ptr->unk_0x08 = param_2;
ptr->unk_0x0A = param_4;
strcpy(ptr->unk_0x0C, param_3);
ptr->mNext = mFirst;
mFirst = ptr;
}
}
}
/* 802E02A4-802E02DC 2DABE4 0038+00 0/0 1/1 0/0 .text flush__10JUTDbPrintFv */
void JUTDbPrint::flush() {
this->flush(0, 0, JUTVideo::getManager()->getFbWidth(), JUTVideo::getManager()->getEfbHeight());
}
/* 802E02DC-802E0440 2DAC1C 0164+00 1/1 0/0 0/0 .text flush__10JUTDbPrintFiiii */
void JUTDbPrint::flush(int param_0, int param_1, int param_2, int param_3) {
// weird cast
unk_print* curPtr = (unk_print*)&mFirst;
unk_print* cur = mFirst;
if (mFont != NULL && cur != NULL) {
J2DOrthoGraph g(param_0, param_1, param_2, param_3, -1, 1);
g.setPort();
mFont->setGX();
mFont->setCharColor(mColor);
while (cur != NULL) {
if (mVisible) {
this->drawString(cur->unk_0x04, cur->unk_0x06, cur->unk_0x0A, (u8*)cur->unk_0x0C);
}
if (--cur->unk_0x08 <= 0) {
unk_print* next = cur->mNext;
JKRFreeToHeap(mHeap, cur);
cur = next;
curPtr->mNext = next;
} else {
curPtr = cur;
cur = cur->mNext;
}
}
}
}
/* 802E0440-802E0530 2DAD80 00F0+00 1/1 0/0 0/0 .text drawString__10JUTDbPrintFiiiPCUc */
void JUTDbPrint::drawString(int param_0, int param_1, int param_2, u8 const* param_3) {
JUTFont* font = mFont;
font->drawString_size_scale(param_0, param_1, font->getWidth(), font->getHeight(),
(const char*)param_3, param_2, true);
}
/* 802E0530-802E0600 2DAE70 00D0+00 0/0 2/2 2/2 .text JUTReport__FiiPCce */
void JUTReport(int param_0, int param_1, char const* fmt, ...) {
va_list args;
va_start(args, fmt);
char buf[0x100];
int ret = vsnprintf(buf, 0x100, fmt, args);
va_end(args);
if (ret < 0) {
return;
}
JUTDbPrint::sDebugPrint->enter(param_0, param_1, 1, buf, ret < 0x100 ? ret : 0xFF);
}
/* 802E0600-802E06DC 2DAF40 00DC+00 0/0 1/1 0/0 .text JUTReport__FiiiPCce */
void JUTReport(int param_0, int param_1, int param_2, char const* fmt, ...) {
va_list args;
va_start(args, fmt);
char buf[0x100];
int ret = vsnprintf(buf, 0x100, fmt, args);
va_end(args);
if (ret < 0) {
return;
}
JUTDbPrint::sDebugPrint->enter(param_0, param_1, param_2, buf, ret < 0x100 ? ret : 0xFF);
}
|