+ 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->ViewPos/Term->TextWidth + CountDown < 0)
+ return ;
+ if(Term->ViewPos/Term->TextWidth + CountDown > Term->TextHeight * (giVT_Scrollback + 1))
+ return ;
+
+ Term->ViewPos += Term->TextWidth * CountDown;
+ }
+}
+void Display_SetCursor(tTerminal *Term, int Row, int Col)
+{
+ LOG("(R%i,C%i)", Row, Col);
+ VT_int_UpdateScreen(Term, 0);
+ int maxrows = ((Term->Flags & VT_FLAG_ALTBUF) ? 1 : (giVT_Scrollback+1))*Term->TextHeight;
+ ASSERTCR( Row, >=, 0, );
+ ASSERTCR( Row, <, maxrows, );
+ ASSERTCR( Col, >=, 0, );
+ ASSERTCR( Col, <, Term->TextWidth, );
+ *(Term->Flags & VT_FLAG_ALTBUF ? &Term->AltWritePos : &Term->WritePos) = Row*Term->TextWidth + Col;
+}
+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 )