((char*)Buffer)[pos] = term->InputBuffer[term->InputRead];
pos ++;
term->InputRead ++;
- while(term->InputRead > MAX_INPUT_CHARS8)
+ while(term->InputRead >= MAX_INPUT_CHARS8)
term->InputRead -= MAX_INPUT_CHARS8;
}
break;
avail = term->InputWrite - term->InputRead;
if(avail < 0)
avail += MAX_INPUT_CHARS32;
+ Length /= 4;
if(avail > Length - pos)
- avail = Length/4 - pos;
+ avail = Length - pos;
codepoint_in = (void*)term->InputBuffer;
codepoint_buf = Buffer;
codepoint_buf[pos] = codepoint_in[term->InputRead];
pos ++;
term->InputRead ++;
- while(term->InputRead > MAX_INPUT_CHARS32)
+ while(term->InputRead >= MAX_INPUT_CHARS32)
term->InputRead -= MAX_INPUT_CHARS32;
}
pos *= 4;
VT_int_UpdateCursor(gpVT_CurTerm, 1);
// Update the screen
-// VT_int_UpdateScreen(gpVT_CurTerm, 1);
+ VT_int_UpdateScreen(gpVT_CurTerm, 1);
}
/**
{
tVTerm *term = gpVT_CurTerm;
- // Key Up
+ // Catch VT binds
switch( Codepoint & KEY_ACTION_MASK )
{
case KEY_ACTION_RELEASE:
case KEY_F10: VT_SetTerminal(9); return;
case KEY_F11: VT_SetTerminal(10); return;
case KEY_F12: VT_SetTerminal(11); return;
+ }
+
+ // Scrolling is only valid in text mode
+ if(gpVT_CurTerm->Mode != TERM_MODE_TEXT)
+ break;
+
+ switch(Codepoint & KEY_CODEPOINT_MASK)
+ {
// Scrolling
case KEY_PGUP:
if( gpVT_CurTerm->Flags & VT_FLAG_ALTBUF )
return ;
- if( gpVT_CurTerm->ViewPos > gpVT_CurTerm->Width )
- gpVT_CurTerm->ViewPos -= gpVT_CurTerm->Width;
- else
- gpVT_CurTerm->ViewPos = 0;
+ gpVT_CurTerm->ViewPos = MAX(
+ 0,
+ gpVT_CurTerm->ViewPos - gpVT_CurTerm->Width
+ );
return;
case KEY_PGDOWN:
if( gpVT_CurTerm->Flags & VT_FLAG_ALTBUF )
return ;
- if( gpVT_CurTerm->ViewPos < gpVT_CurTerm->Width*gpVT_CurTerm->Height*(giVT_Scrollback) )
- gpVT_CurTerm->ViewPos += gpVT_CurTerm->Width;
- else
- gpVT_CurTerm->ViewPos = gpVT_CurTerm->Width*gpVT_CurTerm->Height*(giVT_Scrollback);
+ gpVT_CurTerm->ViewPos = MIN(
+ gpVT_CurTerm->ViewPos + gpVT_CurTerm->Width,
+ gpVT_CurTerm->Width * gpVT_CurTerm->Height*giVT_Scrollback
+ );
return;
}
break;
{
// Encode the raw key event
Uint32 *raw_in = (void*)term->InputBuffer;
+
+ #if 0
+ // Drop new keys
+ if( term->InputWrite == term->InputRead )
+ return ;
+ #endif
+
raw_in[ term->InputWrite ] = Codepoint;
term->InputWrite ++;
- term->InputWrite %= MAX_INPUT_CHARS32;
+ if(term->InputWrite >= MAX_INPUT_CHARS32)
+ term->InputWrite -= MAX_INPUT_CHARS32;
+
+ #if 1
+ // TODO: Should old or new be dropped?
if(term->InputRead == term->InputWrite) {
term->InputRead ++;
- term->InputRead %= MAX_INPUT_CHARS32;
+ if( term->InputRead >= MAX_INPUT_CHARS32 )
+ term->InputRead -= MAX_INPUT_CHARS32;
}
+ #endif
}
VFS_MarkAvaliable(&term->Node, 1);
if(argc != 1) break;
switch(args[0])
{
+ case 25:
+ Term->Flags &= ~VT_FLAG_HIDECSR;
+ break;
case 1047:
VT_int_ToggleAltBuffer(Term, 1);
break;
if(argc != 1) break;
switch(args[0])
{
+ case 25:
+ Term->Flags |= VT_FLAG_HIDECSR;
+ break;
case 1047:
VT_int_ToggleAltBuffer(Term, 0);
break;