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 - (experimental) Allowing THREAD_EVENT_TIMER to wake a semaphore
[tpg/acess2.git]
/
KernelLand
/
Kernel
/
drv
/
vterm_termbuf.c
diff --git
a/KernelLand/Kernel/drv/vterm_termbuf.c
b/KernelLand/Kernel/drv/vterm_termbuf.c
index
2511048
..
525f1a4
100644
(file)
--- a/
KernelLand/Kernel/drv/vterm_termbuf.c
+++ b/
KernelLand/Kernel/drv/vterm_termbuf.c
@@
-15,24
+15,27
@@
*/
void VT_int_PutString(tVTerm *Term, const Uint8 *Buffer, Uint Count)
{
*/
void VT_int_PutString(tVTerm *Term, const Uint8 *Buffer, Uint Count)
{
- Uint32 val;
int i;
// Iterate
for( i = 0; i < Count; i++ )
{
// Handle escape sequences
int i;
// Iterate
for( i = 0; i < Count; i++ )
{
// Handle escape sequences
- if( Buffer[i] == 0x1B )
+ if( Buffer[i] == 0x1B
&& Count - i > 1
)
{
{
- i ++;
- i += VT_int_ParseEscape(Term, (const char*)&Buffer[i]) - 1;
- continue;
+ int ret = VT_int_ParseEscape(Term, (const char*)&Buffer[i+1], Count-(i+1));
+ if( ret > 0 )
+ {
+ i += ret;
+ continue;
+ }
}
// Fast check for non UTF-8
if( Buffer[i] < 128 ) // Plain ASCII
VT_int_PutChar(Term, Buffer[i]);
else { // UTF-8
}
// Fast check for non UTF-8
if( Buffer[i] < 128 ) // Plain ASCII
VT_int_PutChar(Term, Buffer[i]);
else { // UTF-8
+ Uint32 val;
i += ReadUTF8(&Buffer[i], &val) - 1;
VT_int_PutChar(Term, val);
}
i += ReadUTF8(&Buffer[i], &val) - 1;
VT_int_PutChar(Term, val);
}
@@
-70,14
+73,15
@@
void VT_int_PutChar(tVTerm *Term, Uint32 Ch)
write_pos -= write_pos % Term->TextWidth;
break;
write_pos -= write_pos % Term->TextWidth;
break;
- case '\t': { int tmp = write_pos / Term->TextWidth;
+ case '\t': {
+ int line = write_pos / Term->TextWidth;
write_pos %= Term->TextWidth;
do {
buffer[ write_pos ].Ch = '\0';
buffer[ write_pos ].Colour = Term->CurColour;
write_pos ++;
} while(write_pos & 7);
write_pos %= Term->TextWidth;
do {
buffer[ write_pos ].Ch = '\0';
buffer[ write_pos ].Colour = Term->CurColour;
write_pos ++;
} while(write_pos & 7);
- write_pos +=
tmp
* Term->TextWidth;
+ write_pos +=
line
* Term->TextWidth;
break; }
case '\b':
break; }
case '\b':
@@
-85,7
+89,7
@@
void VT_int_PutChar(tVTerm *Term, Uint32 Ch)
if(write_pos == 0) break;
write_pos --;
if(write_pos == 0) break;
write_pos --;
- // Singe Character
+ // Sing
l
e Character
if(buffer[ write_pos ].Ch != '\0') {
buffer[ write_pos ].Ch = 0;
buffer[ write_pos ].Colour = Term->CurColour;
if(buffer[ write_pos ].Ch != '\0') {
buffer[ write_pos ].Ch = 0;
buffer[ write_pos ].Colour = Term->CurColour;
@@
-114,7
+118,6
@@
void VT_int_PutChar(tVTerm *Term, Uint32 Ch)
if(Term->Flags & VT_FLAG_ALTBUF)
{
if(Term->Flags & VT_FLAG_ALTBUF)
{
- Term->AltBuf = buffer;
Term->AltWritePos = write_pos;
if(Term->AltWritePos >= Term->TextWidth*Term->TextHeight)
Term->AltWritePos = write_pos;
if(Term->AltWritePos >= Term->TextWidth*Term->TextHeight)
@@
-126,7
+129,6
@@
void VT_int_PutChar(tVTerm *Term, Uint32 Ch)
}
else
{
}
else
{
- Term->Text = buffer;
Term->WritePos = write_pos;
// Move Screen
// - Check if we need to scroll the entire scrollback buffer
Term->WritePos = write_pos;
// Move Screen
// - Check if we need to scroll the entire scrollback buffer
@@
-134,10
+136,6
@@
void VT_int_PutChar(tVTerm *Term, Uint32 Ch)
{
int base;
{
int base;
- // Update previous line
- Term->WritePos -= Term->TextWidth;
- VT_int_UpdateScreen( Term, 0 );
-
// Update view position
base = Term->TextWidth*Term->TextHeight*(giVT_Scrollback);
if(Term->ViewPos < base)
// Update view position
base = Term->TextWidth*Term->TextHeight*(giVT_Scrollback);
if(Term->ViewPos < base)
@@
-146,16
+144,12
@@
void VT_int_PutChar(tVTerm *Term, Uint32 Ch)
Term->ViewPos = base;
VT_int_ScrollText(Term, 1);
Term->ViewPos = base;
VT_int_ScrollText(Term, 1);
+ Term->WritePos -= Term->TextWidth;
}
// Ok, so we only need to scroll the screen
else if(Term->WritePos >= Term->ViewPos + Term->TextWidth*Term->TextHeight)
{
}
// Ok, so we only need to scroll the screen
else if(Term->WritePos >= Term->ViewPos + Term->TextWidth*Term->TextHeight)
{
- // Update the last line
- Term->WritePos -= Term->TextWidth;
- VT_int_UpdateScreen( Term, 0 );
- Term->WritePos += Term->TextWidth;
-
- VT_int_ScrollText(Term, 1);
+ VT_int_ScrollFramebuffer( Term, 1 );
Term->ViewPos += Term->TextWidth;
}
Term->ViewPos += Term->TextWidth;
}
@@
-189,7
+183,7
@@
void VT_int_ScrollText(tVTerm *Term, int Count)
scroll_height = height;
}
scroll_height = height;
}
- // Scroll text
downwards
+ // Scroll text
upwards (more space at bottom)
if( Count > 0 )
{
int base;
if( Count > 0 )
{
int base;
@@
-370,6
+364,7
@@
void VT_int_ChangeMode(tVTerm *Term, int NewMode, int NewWidth, int NewHeight)
}
// Debug
}
// Debug
+ #if 0
switch(NewMode)
{
case TERM_MODE_TEXT:
switch(NewMode)
{
case TERM_MODE_TEXT:
@@
-384,6
+379,7
@@
void VT_int_ChangeMode(tVTerm *Term, int NewMode, int NewWidth, int NewHeight)
//case TERM_MODE_3DACCEL:
// return;
}
//case TERM_MODE_3DACCEL:
// return;
}
+ #endif
}
}
UCC
git Repository :: git.ucc.asn.au