Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 37 additions & 46 deletions libctru/source/console.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ static void consoleCls(int mode) {
colTemp = currentConsole->cursorX ;
rowTemp = currentConsole->cursorY ;

while(i++ < ((currentConsole->windowHeight * currentConsole->windowWidth) - (rowTemp * currentConsole->consoleWidth + colTemp)))
while(i++ < ((currentConsole->windowHeight * currentConsole->windowWidth) - (rowTemp * currentConsole->windowWidth + colTemp)))
consolePrintChar(' ');

currentConsole->cursorX = colTemp;
Expand All @@ -107,8 +107,8 @@ static void consoleCls(int mode) {
colTemp = currentConsole->cursorX ;
rowTemp = currentConsole->cursorY ;

currentConsole->cursorY = 0;
currentConsole->cursorX = 0;
currentConsole->cursorY = 1;
currentConsole->cursorX = 1;

while (i++ < (rowTemp * currentConsole->windowWidth + colTemp))
consolePrintChar(' ');
Expand All @@ -119,14 +119,14 @@ static void consoleCls(int mode) {
}
case 2:
{
currentConsole->cursorY = 0;
currentConsole->cursorX = 0;
currentConsole->cursorY = 1;
currentConsole->cursorX = 1;

while(i++ < currentConsole->windowHeight * currentConsole->windowWidth)
consolePrintChar(' ');

currentConsole->cursorY = 0;
currentConsole->cursorX = 0;
currentConsole->cursorY = 1;
currentConsole->cursorX = 1;
break;
}
}
Expand All @@ -136,51 +136,44 @@ static void consoleCls(int mode) {
static void consoleClearLine(int mode) {
//---------------------------------------------------------------------------------

int i = 0;
int colTemp;
int i, colTemp;

switch (mode)
{
case 0:
{
colTemp = currentConsole->cursorX ;
colTemp = currentConsole->cursorX;

while(i++ < (currentConsole->windowWidth - colTemp)) {
for (i=0; i < currentConsole->windowWidth - colTemp + 1; i++) {
consolePrintChar(' ');
}

currentConsole->cursorX = colTemp;

break;
}
case 1:
{
colTemp = currentConsole->cursorX ;

currentConsole->cursorX = 0;
currentConsole->cursorX = 1;

while(i++ < ((currentConsole->windowWidth - colTemp)-2)) {
for(i=0; i < colTemp - 1; i++) {
consolePrintChar(' ');
}

currentConsole->cursorX = colTemp;

break;
}
case 2:
{
colTemp = currentConsole->cursorX ;

currentConsole->cursorX = 0;
currentConsole->cursorX = 1;

while(i++ < currentConsole->windowWidth) {
for(i=0; i < currentConsole->windowWidth; i++) {
consolePrintChar(' ');
}

currentConsole->cursorX = colTemp;

break;
}
}
gfxFlushBuffers();
}
Expand Down Expand Up @@ -355,6 +348,10 @@ static void consoleSetColorState(int code)

static void consoleHandleColorEsc(int argCount)
{
escapeSeq.color.bg = currentConsole->bg;
escapeSeq.color.fg = currentConsole->fg;
escapeSeq.color.flags = currentConsole->flags;

for (int arg = 0; arg < argCount; arg++)
{
int code = escapeSeq.args[arg];
Expand Down Expand Up @@ -433,23 +430,22 @@ static void consoleHandleColorEsc(int argCount)
if(escapeSeq.colorArgCount == 3)
{
escapeSeq.color.bg = RGB8_to_565(escapeSeq.colorArgs[0], escapeSeq.colorArgs[1], escapeSeq.colorArgs[2]);
escapeSeq.color.flags |= CONSOLE_FG_CUSTOM;
escapeSeq.color.flags |= CONSOLE_BG_CUSTOM;
escapeSeq.state = ESC_BUILDING_UNKNOWN;
}
default:
break;
}
}
escapeSeq.argIdx = 0;
}

static void consoleColorApply(void)
{
currentConsole->bg = escapeSeq.color.bg;
currentConsole->fg = escapeSeq.color.fg;
currentConsole->flags = escapeSeq.color.flags;

}


//---------------------------------------------------------------------------------
ssize_t con_write(struct _reent *r,void *fd,const char *ptr, size_t len) {
//---------------------------------------------------------------------------------
Expand Down Expand Up @@ -531,7 +527,7 @@ ssize_t con_write(struct _reent *r,void *fd,const char *ptr, size_t len) {
if (!escapeSeq.hasArg && !escapeSeq.argIdx)
escapeSeq.args[0] = 1;
currentConsole->cursorY = currentConsole->cursorY + escapeSeq.args[0];
if (currentConsole->cursorY >= currentConsole->windowHeight)
if (currentConsole->cursorY > currentConsole->windowHeight)
currentConsole->cursorY = currentConsole->windowHeight;
escapeSeq.state = ESC_NONE;
break;
Expand All @@ -556,14 +552,7 @@ ssize_t con_write(struct _reent *r,void *fd,const char *ptr, size_t len) {
//---------------------------------------
case 'H':
case 'f':
if (escapeSeq.argIdx == 0 && !escapeSeq.hasArg)
{
escapeSeq.args[0] = 1;
escapeSeq.args[1] = 1;
}
if (escapeSeq.argIdx == 1 && !escapeSeq.hasArg)
escapeSeq.args[1] = 1;
consolePosition(escapeSeq.args[0], escapeSeq.args[1]);
consolePosition(escapeSeq.args[1], escapeSeq.args[0]);
escapeSeq.state = ESC_NONE;
break;
//---------------------------------------
Expand Down Expand Up @@ -609,7 +598,6 @@ ssize_t con_write(struct _reent *r,void *fd,const char *ptr, size_t len) {
if (escapeSeq.argIdx == 0 && !escapeSeq.hasArg) escapeSeq.args[escapeSeq.argIdx++] = 0;
if (escapeSeq.hasArg) escapeSeq.argIdx++;
consoleHandleColorEsc(escapeSeq.argIdx);
consoleColorApply();
escapeSeq.state = ESC_NONE;
break;
default:
Expand Down Expand Up @@ -762,17 +750,17 @@ static void newRow() {
currentConsole->cursorY ++;


if(currentConsole->cursorY >= currentConsole->windowHeight) {
currentConsole->cursorY --;
u16 *dst = &currentConsole->frameBuffer[(currentConsole->windowX * 8 * 240) + (239 - (currentConsole->windowY * 8))];
if(currentConsole->cursorY > currentConsole->windowHeight) {
currentConsole->cursorY = currentConsole->windowHeight;
u16 *dst = &currentConsole->frameBuffer[((currentConsole->windowX - 1 ) * 8 * 240) + (239 - ((currentConsole->windowY) * 8))];
u16 *src = dst - 8;

int i,j;

for (i=0; i<currentConsole->windowWidth*8; i++) {
for (i=0; i<(currentConsole->windowWidth)*8; i++) {
u32 *from = (u32*)((int)src & ~3);
u32 *to = (u32*)((int)dst & ~3);
for (j=0;j<(((currentConsole->windowHeight-1)*8)/2);j++) *(to--) = *(from--);
for (j=0;j<(((currentConsole->windowHeight-2)*8)/2);j++) *(to--) = *(from--);
dst += 240;
src += 240;
}
Expand Down Expand Up @@ -829,8 +817,8 @@ void consoleDrawChar(int c) {

int i;

int x = (currentConsole->cursorX + currentConsole->windowX) * 8;
int y = ((currentConsole->cursorY + currentConsole->windowY) *8 );
int x = (currentConsole->cursorX - 1 + currentConsole->windowX - 1 ) * 8;
int y = ((currentConsole->cursorY - 1 + currentConsole->windowY - 1 ) *8 );

u16 *screen = &currentConsole->frameBuffer[(x * 240) + (239 - (y + 7))];

Expand Down Expand Up @@ -873,7 +861,7 @@ void consolePrintChar(int c) {

if(currentConsole->cursorX < 1) {
if(currentConsole->cursorY > 1) {
currentConsole->cursorX = currentConsole->windowX - 1;
currentConsole->cursorX = currentConsole->windowWidth;
currentConsole->cursorY--;
} else {
currentConsole->cursorX = 1;
Expand All @@ -884,7 +872,7 @@ void consolePrintChar(int c) {
break;

case 9:
currentConsole->cursorX += currentConsole->tabSize - ((currentConsole->cursorX)%(currentConsole->tabSize));
for(int i=0; i<currentConsole->tabSize; i++) consolePrintChar(' ');
break;
case 10:
newRow();
Expand Down Expand Up @@ -916,12 +904,15 @@ void consoleSetWindow(PrintConsole* console, int x, int y, int width, int height

if(!console) console = currentConsole;

if (x < 1) x = 1;
if (y < 1) y = 1;

console->windowWidth = width;
console->windowHeight = height;
console->windowX = x;
console->windowY = y;

console->cursorX = 0;
console->cursorY = 0;
console->cursorX = 1;
console->cursorY = 1;

}