#ifndef _JSYSTEM_JUT_JUTCONSOLE_H #define _JSYSTEM_JUT_JUTCONSOLE_H #include "va_args.h" #include "JSystem/JGadget/linklist.h" #include "JSystem/JKernel/JKRHeap.h" #include "JSystem/JUtility/JUTFont.h" #ifdef __cplusplus inline s32 colorCheck(s32 diff, s32 t) { s32 ret = diff - t; return ret + 1; } class JUTConsole : public JKRDisposer { public: enum EConsoleType { CONSOLE_TYPE_0 = 0, CONSOLE_TYPE_1 = 1, CONSOLE_TYPE_2 = 2, }; enum OutputFlag { /* 0x0 */ OUTPUT_NONE, /* 0x1 */ OUTPUT_OSREPORT, /* 0x2 */ OUTPUT_CONSOLE, /* 0x3 */ OUTPUT_OSR_AND_CONSOLE, }; virtual ~JUTConsole(); // _08 // _00 VTBL static JUTConsole *create(uint, uint, JKRHeap *); static JUTConsole *create(uint, void *, u32); static void destroy(JUTConsole *); // UNUSED JUTConsole(uint, uint, bool); static size_t getObjectSizeFromBufferSize(uint, uint); static size_t getLineFromObjectSize(u32, uint); void clear(); void doDraw(JUTConsole::EConsoleType) const; void print_f(char const *, ...); void print(char const *); void dumpToTerminal(uint); void scroll(int); int getUsedLine() const; int getLineOffset() const; void setOutput(uint output) { mOutput = output; } void setPosition(int x, int y) { mPositionX = x; mPositionY = y; } void setFontSize(f32 x, f32 y) { mFontSizeX = x; mFontSizeY = y; } void setHeight(u32 height) { mHeight = height; if (mHeight > mMaxLines) { mHeight = mMaxLines; } } void setFont(JUTFont *p_font) { mFont = p_font; setFontSize(p_font->getWidth(), p_font->getHeight()); } int nextIndex(int index) const { return ++index >= (int)mMaxLines ? 0 : index; } u32 getOutput() const { return mOutput; } int getPositionY() const { return mPositionY; } int getPositionX() const { return mPositionX; } u32 getHeight() const { return mHeight; } bool isVisible() const { return mIsVisible; } void setVisible(bool visible) { mIsVisible = visible; } void setLineAttr(int param_0, u8 param_1) { mBuf[(_20 + 2) * param_0] = param_1; } u8 *getLinePtr(int param_0) const { return &mBuf[(_20 + 2) * param_0] + 1; } int diffIndex(int param_0, int param_1) const { int diff = param_1 - param_0; if (diff >= 0) { return diff; } return diff += mMaxLines; } void scrollToLastLine() { scroll(mMaxLines); } void scrollToFirstLine() { scroll(-mMaxLines); } // _00 = VTBL // _00-_18 = JKRDisposer JGadget::TLinkListNode mNode; // _18 u32 _20; // _20 u32 mMaxLines; // _24, might be int u8 *mBuf; // _28 bool _2C; // _2C int _30; // _30 int _34; // _34 int _38; // _38 int _3C; // _3C int mPositionX; // _40 int mPositionY; // _44 u32 mHeight; // _48 JUTFont *mFont; // _4C f32 mFontSizeX; // _50 f32 mFontSizeY; // _54 u32 mOutput; // _58 JUtility::TColor _5C; // _5C JUtility::TColor _60; // _60 int _64; // _64 bool mIsVisible; // _68 bool _69; // _69 bool _6A; // _6A bool _6B; // _6B }; // Size: 0x6C class JUTConsoleManager { public: JUTConsoleManager(); static JUTConsoleManager *createManager(JKRHeap *); void appendConsole(JUTConsole *console); void removeConsole(JUTConsole *console); void draw() const; void drawDirect(bool) const; void setDirectConsole(JUTConsole *); static JUTConsoleManager *getManager() { return sManager; } static JUTConsoleManager *sManager; private: JGadget::TLinkList soLink_; // _00 JUTConsole *mActiveConsole; // _0C JUTConsole *mDirectConsole; // _10 }; // Size: 0x14 extern "C" { void JUTConsole_print_f_va_(JUTConsole*, const char*, va_list); JUTConsole* JUTGetReportConsole(); void JUTSetReportConsole(JUTConsole*); JUTConsole* JUTGetWarningConsole(); void JUTSetWarningConsole(JUTConsole*); void JUTReportConsole(const char*); void JUTReportConsole_f(const char*, ...); void JUTReportConsole_f_va(const char*, va_list); void JUTWarningConsole(const char*); void JUTWarningConsole_f(const char*, ...); void JUTWarningConsole_f_va(const char*, va_list); }; #endif #endif