git.ucc.asn.au
/
tpg
/
acess2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
| inline |
side by side
Kernel/VTerm - Code cleanup and VT100 bugfixes
[tpg/acess2.git]
/
KernelLand
/
Kernel
/
drv
/
vterm_vt100.c
diff --git
a/KernelLand/Kernel/drv/vterm_vt100.c
b/KernelLand/Kernel/drv/vterm_vt100.c
index
ccb0c52
..
3450536
100644
(file)
--- a/
KernelLand/Kernel/drv/vterm_vt100.c
+++ b/
KernelLand/Kernel/drv/vterm_vt100.c
@@
-59,17
+59,17
@@
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
;
+ int maxrows =
VT_int_GetBufferRows(Term)
;
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;
+ *
VT_int_GetWritePosPtr(Term
) = 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
);
+
size_t *wrpos = VT_int_GetWritePosPtr(Term
);
// TODO: Support scrolling if cursor goes offscreen
// if( bScrollIfNeeded )
@@
-82,22
+82,22
@@
void Display_MoveCursor(tTerminal *Term, int RelRow, int RelCol)
//
if( RelCol < 0 )
{
- int
avail
= *wrpos % Term->TextWidth;
- if( RelCol < -
avail
)
- RelCol = -
avail
;
+ int
max
= *wrpos % Term->TextWidth;
+ if( RelCol < -
max
)
+ RelCol = -
max
;
}
else
{
- size_t
avail = Term->TextWidth - (*wrpos % Term->TextWidth)
;
- if(RelCol >
avail
)
- RelCol =
avail
;
+ size_t
max = Term->TextWidth - (*wrpos % Term->TextWidth) - 1
;
+ if(RelCol >
max
)
+ RelCol =
max
;
}
*wrpos += RelCol;
}
if( RelRow != 0 )
{
int currow = *wrpos / Term->TextWidth;
- int maxrows =
((Term->Flags & VT_FLAG_ALTBUF) ? 1 : (giVT_Scrollback+1))*Term->TextHeight
;
+ int maxrows =
VT_int_GetBufferRows(Term)
;
if( RelRow < 0 )
{
if( RelRow < -currow )
@@
-114,23
+114,20
@@
void Display_MoveCursor(tTerminal *Term, int RelRow, int RelCol)
}
void Display_SaveCursor(tTerminal *Term)
{
- Term->SavedWritePos =
(Term->Flags & VT_FLAG_ALTBUF) ? Term->AltWritePos : Term->WritePos
;
+ Term->SavedWritePos =
*VT_int_GetWritePosPtr(Term)
;
LOG("Saved = %i", Term->SavedWritePos);
}
void Display_RestoreCursor(tTerminal *Term)
{
- int max = ((Term->Flags & VT_FLAG_ALTBUF) ? 1 : (giVT_Scrollback+1))*Term->TextHeight * Term->TextWidth;
- int *wrpos = ((Term->Flags & VT_FLAG_ALTBUF) ? &Term->AltWritePos : &Term->WritePos);
- if( Term->SavedWritePos >= max )
- *wrpos = max-1;
- else
- *wrpos = Term->SavedWritePos;
+ size_t max = VT_int_GetBufferRows(Term) * Term->TextWidth;
+ size_t *wrpos = VT_int_GetWritePosPtr(Term);
+ *wrpos = MIN(Term->SavedWritePos, max-1);
LOG("Restored %i", *wrpos);
}
// 0: All, 1: Forward, -1: Reverse
void Display_ClearLine(tTerminal *Term, int Dir)
{
- const
int wrpos = (Term->Flags & VT_FLAG_ALTBUF ? Term->AltWritePos : Term->WritePos
);
+ const
size_t wrpos = *VT_int_GetWritePosPtr(Term
);
const int row = wrpos / Term->TextWidth;
const int col = wrpos % Term->TextWidth;
@@
-160,8
+157,8
@@
void Display_ClearLine(tTerminal *Term, int Dir)
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
);
+
size_t *wrpos = VT_int_GetWritePosPtr(Term
);
+
size_t height = VT_int_GetBufferRows(Term
);
// All
if( Dir == 0 ) {
UCC
git Repository :: git.ucc.asn.au