X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Fdrv%2Fvterm_vt100.c;h=ccb0c520f5c76b174e7ea31ed28559b703546dc8;hb=91cb22a5f21eeca8f84456c1febf79f84a65d30d;hp=fb5e9734e1c02649517822051e2b636431943fbe;hpb=0247bf719b9a610776747221b8ed4c1343f5c93a;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/drv/vterm_vt100.c b/KernelLand/Kernel/drv/vterm_vt100.c index fb5e9734..ccb0c520 100644 --- a/KernelLand/Kernel/drv/vterm_vt100.c +++ b/KernelLand/Kernel/drv/vterm_vt100.c @@ -12,12 +12,17 @@ #include "../../../Usermode/Applications/gui_terminal_src/vt100.c" void *Display_GetTermState(tTerminal *Term) { - return Term->VT100Info;; + return Term->VT100Info; } void Display_SetTermState(tTerminal *Term, void *State) { Term->VT100Info = State; } +void Display_SendInput(tTerminal *Term, const char *String) +{ + PTY_SendInput(Term->PTY, String, strlen(String)); +} + void Display_AddText(tTerminal *Term, size_t Length, const char *UTF8Text) { LOG("'%*C'", Length, UTF8Text); @@ -66,6 +71,12 @@ void Display_MoveCursor(tTerminal *Term, int RelRow, int RelCol) LOG("(R+%i,C+%i)", RelRow, RelCol); int *wrpos = (Term->Flags & VT_FLAG_ALTBUF ? &Term->AltWritePos : &Term->WritePos); + // TODO: Support scrolling if cursor goes offscreen + // if( bScrollIfNeeded ) + // Display_ScrollDown(extra); + // else + // clip + if( RelCol != 0 ) { // @@ -150,18 +161,15 @@ void Display_ClearLines(tTerminal *Term, int Dir) { LOG("(Dir=%i)", Dir); int *wrpos = (Term->Flags & VT_FLAG_ALTBUF ? &Term->AltWritePos : &Term->WritePos); + int height = Term->TextHeight * (Term->Flags & VT_FLAG_ALTBUF ? 1 : giVT_Scrollback + 1); // All if( Dir == 0 ) { - int count; - if( Term->Flags & VT_FLAG_ALTBUF ) { - count = Term->TextHeight; - } - else { - count = Term->TextHeight * (giVT_Scrollback + 1); + if( !(Term->Flags & VT_FLAG_ALTBUF) ) { Term->ViewPos = 0; } + int count = height; while( count -- ) VT_int_ClearLine(Term, count); *wrpos = 0; @@ -169,11 +177,15 @@ void Display_ClearLines(tTerminal *Term, int Dir) } // Downwards else if( Dir == 1 ) { - Log_Warning("VTerm", "TODO: ClearLines Down"); + for( int row = *wrpos / Term->TextWidth; row < height; row ++ ) + VT_int_ClearLine(Term, row); + VT_int_UpdateScreen(Term, 1); } // Upwards else if( Dir == -1 ) { - Log_Warning("VTerm", "TODO: ClearLines Up"); + for( int row = 0; row < *wrpos / Term->TextWidth; row ++ ) + VT_int_ClearLine(Term, row); + VT_int_UpdateScreen(Term, 1); } else { // ERROR!