+void *Display_GetTermState(tTerminal *Term) {
+ 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);
+ VT_int_PutRawString(Term, (const void*)UTF8Text, Length);
+}
+void Display_Newline(tTerminal *Term, bool bCarriageReturn)
+{
+ LOG("");
+ VT_int_PutChar(Term, '\n');
+}
+void Display_SetScrollArea(tTerminal *Term, int Start, int Count)
+{
+ LOG("(%i,+%i)", Start, Count);
+ Term->ScrollTop = Start;
+ Term->ScrollHeight = Count;
+}
+void Display_ScrollDown(tTerminal *Term, int CountDown)
+{
+ LOG("(%i)", CountDown);
+ VT_int_UpdateScreen(Term, 0);
+ if( Term->Flags & VT_FLAG_ALTBUF )
+ VT_int_ScrollText(Term, -CountDown);
+ else
+ {
+ if(Term->ViewTopRow + CountDown < 0)
+ return ;
+ if(Term->ViewTopRow + CountDown > Term->TextHeight * (giVT_Scrollback + 1))
+ return ;
+
+ Term->ViewTopRow += CountDown;
+ }
+}
+void Display_SetCursor(tTerminal *Term, int Row, int Col)
+{
+ LOG("(R%i,C%i)", Row, Col);
+ VT_int_UpdateScreen(Term, 0);
+ int maxrows = VT_int_GetBufferRows(Term);
+ ASSERTCR( Row, >=, 0, );
+ ASSERTCR( Row, <, maxrows, );
+ ASSERTCR( Col, >=, 0, );
+ ASSERTCR( Col, <, Term->TextWidth, );
+ VT_int_GetWritePosPtr(Term)->Row = Row;
+ VT_int_GetWritePosPtr(Term)->Col = Col;
+}
+void Display_MoveCursor(tTerminal *Term, int RelRow, int RelCol)