From ffef8aab08b5bdea53599efbd655a930db3b7e40 Mon Sep 17 00:00:00 2001 From: John Hodge Date: Sun, 18 May 2014 14:05:41 +0800 Subject: [PATCH] Usermode/gui_terminal - Minor touches to VT100 handling --- Usermode/Applications/gui_terminal_src/vt100.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/Usermode/Applications/gui_terminal_src/vt100.c b/Usermode/Applications/gui_terminal_src/vt100.c index cdf53719..4c35bfdd 100644 --- a/Usermode/Applications/gui_terminal_src/vt100.c +++ b/Usermode/Applications/gui_terminal_src/vt100.c @@ -17,6 +17,8 @@ # include # include // malloc/free +# define ASSERTC(a, r, b) assert(a r b) + static inline int MIN(int a, int b) { return a < b ? a : b; @@ -170,7 +172,7 @@ int Term_HandleVT100(tTerminal *Term, int Len, const char *Buf) if( ret <= old_inc_len ) { _SysDebug("Term_HandleVT100: ret(%i) <= old_inc_len(%i), inc_len=%i, '%*C'", ret, old_inc_len, st->cache_len, st->cache_len, st->cache); - assert(ret > old_inc_len); + ASSERTC(ret, >, old_inc_len); } st->cache_len = 0; //_SysDebug("%i bytes of escape code '%.*s' (return %i)", @@ -446,9 +448,13 @@ int Term_HandleVT100_Long(tTerminal *Term, int Len, const char *Buffer) Display_MoveCursor(Term, 0, -(args[0] != 0 ? args[0] : 1)); break; case 'H': - if( argc != 2 ) { + if( argc == 0 ) { + Display_SetCursor(Term, 0, 0); } - else { + else if( argc == 1 ) { + Display_SetCursor(Term, args[0]-1, 0); + } + else if( argc == 2 ) { // Adjust 1-based cursor position to 0-based Display_SetCursor(Term, args[0]-1, args[1]-1); } @@ -631,7 +637,7 @@ int Term_HandleVT100_Long(tTerminal *Term, int Len, const char *Buffer) break; // Set scrolling region case 'r': - Display_SetScrollArea(Term, args[0], (args[1] - args[0])); + Display_SetScrollArea(Term, args[0]-1, (args[1] - args[0])+1); break; case 's': -- 2.20.1