Term->ViewPos += Term->TextWidth*tmp;
}
break;
-
+ // Set Mode (?)
+ case 'h':
+ if( argc >= 1 )
+ {
+ switch(args[0])
+ {
+ case 2: // Keyboard action mode
+ case 4: // Insert mode
+ case 12: // Send/receive
+ case 20: // Automatic newline
+ break;
+ default: // ?
+ break;
+ }
+ }
+ break;
+
// Set Font flags
case 'm':
for( ; argc--; )
Term->CurColour &= 0xFFFF8000;
Term->CurColour |= caVT100Colours[ colour_idx ];
}
+ // Foreground Colour - bright
+ else if(90 <= args[argc] && args[argc] <= 97 ) {
+ colour_idx = args[argc]-90 + 8;
+ Term->CurColour &= 0x8000FFFF;
+ Term->CurColour |= (Uint32)caVT100Colours[ colour_idx ] << 16;
+ }
+ // Background Colour - bright
+ else if(100 <= args[argc] && args[argc] <= 107 ) {
+ colour_idx = args[argc]-100 + 8;
+ Term->CurColour &= 0xFFFF8000;
+ Term->CurColour |= (Uint32)caVT100Colours[ colour_idx ];
+ }
else {
Log_Warning("VTerm", "Unknown font flag %i", args[argc]);
}
int argc = 0, j = 0;
int args[6] = {0,0,0,0};
int bQuestionMark = 0;
+ const int ofs = Term->EscapeCodeLen;
+ const int sparespace = sizeof(Term->EscapeCodeCache)-Term->EscapeCodeLen;
+ const int copysize = MIN(Bytes, sparespace);
+
+ memcpy( Term->EscapeCodeCache + Term->EscapeCodeLen, Buffer, copysize );
+ Term->EscapeCodeLen += copysize;
+
+ Bytes = Term->EscapeCodeLen;
+ Buffer = Term->EscapeCodeCache;
+
+ if( Bytes == j ) return j-ofs;
+ c = Buffer[j++];
+ if(c != '\x1b') {
+ Term->EscapeCodeLen = 0;
+ return 0;
+ }
- if( Bytes == j ) return j;
+ if( Bytes == j ) return j-ofs;
c = Buffer[j++];
switch(c)
//Large Code
case '[':
// Get Arguments
- if(Bytes == j) return j;
+ if(Bytes == j) return j-ofs;
c = Buffer[j++];
if(c == '?') {
bQuestionMark = 1;
- if(Bytes == j) return j;
+ if(Bytes == j) return j-ofs;
c = Buffer[j++];
}
if( '0' <= c && c <= '9' )
{
do {
if(c == ';') {
- if(Bytes == j) return j;
+ if(Bytes == j) return j-ofs;
c = Buffer[j++];
}
while('0' <= c && c <= '9') {
args[argc] *= 10;
args[argc] += c-'0';
- if(Bytes == j) return j;
+ if(Bytes == j) return j-ofs;
c = Buffer[j++];
}
argc ++;
// Get Command
if( !('a' <= c && c <= 'z') && !('A' <= c && c <= 'Z') )
{
- // Error
- return j;
+ // Error - eat ESC only?
+ // > j : Entire code skipped
+ Term->EscapeCodeLen = 0;
+ return j-ofs;
}
if( bQuestionMark )
}
//Log_Debug("VTerm", "j = %i, Buffer = '%s'", j, Buffer);
- return j;
+ Term->EscapeCodeLen = 0;
+ return j-ofs;
}