X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FApplications%2Fgui_shell_src%2Fvt100.c;h=2a87ca4f4bb5d896692e27eba207057101ed0c09;hb=b0da731b2d89b9dd58de2c98eaf6218a41a21920;hp=621cb10a2b14b13477b96eb1bb911ab3482249f1;hpb=450d8178a7ef1708f69f1f3e0def83a78cbd1cee;p=tpg%2Facess2.git diff --git a/Usermode/Applications/gui_shell_src/vt100.c b/Usermode/Applications/gui_shell_src/vt100.c index 621cb10a..2a87ca4f 100644 --- a/Usermode/Applications/gui_shell_src/vt100.c +++ b/Usermode/Applications/gui_shell_src/vt100.c @@ -34,13 +34,12 @@ int Term_HandleVT100(int Len, const char *Buf) if( inc_len > 0 || *Buf == '\x1b' ) { + // Handle VT100 (like) escape sequence int new_bytes = min(MAX_VT100_ESCAPE_LEN - inc_len, Len); - int ret = 0; + int ret = 0, old_inc_len = inc_len; memcpy(inc_buf + inc_len, Buf, new_bytes); - inc_len += new_bytes; - // Handle VT100 (like) escape sequence - _SysDebug("inc_len = %i, new_bytes = %i", inc_len, new_bytes); + inc_len += new_bytes; if( inc_len <= 1 ) return 1; // Skip 1 character (the '\x1b') @@ -49,16 +48,19 @@ int Term_HandleVT100(int Len, const char *Buf) { case '[': // Multibyte, funtime starts ret = Term_HandleVT100_Long(inc_len-2, inc_buf+2); - if( ret > 0 ) + if( ret > 0 ) { ret += 2; + } break; default: ret = 2; break; } - if( ret != 0 ) + if( ret != 0 ) { inc_len = 0; + ret -= old_inc_len; // counter cached bytes + } return ret; } @@ -67,6 +69,8 @@ int Term_HandleVT100(int Len, const char *Buf) case '\b': // TODO: Backspace Display_MoveCursor(-1, 0); + Display_AddText(1, " "); + Display_MoveCursor(-1, 0); return 1; case '\t': // TODO: tab (get current cursor pos, space until multiple of 8) @@ -129,7 +133,7 @@ int Term_HandleVT100_Long(int Len, const char *Buffer) if( !isalpha(c) ) { // Bother. _SysDebug("Unexpected char 0x%x in VT100 escape code", c); - return -1; + return 1; } if( bQuestionMark )