+/**
+ * \brief Handle an escape code beginning with '\x1b'
+ * \return 0 : Insufficient data in buffer, wait for more
+ * \return +ve : Number of bytes in escape sequence
+ */
+int Term_HandleVT100_Short(tTerminal *Term, int Len, const char *Buf)
+{
+ int tmp;
+ switch(Buf[1])
+ {
+ case '[': // Multibyte, funtime starts
+ tmp = Term_HandleVT100_Long(Term, Len-2, Buf+2);
+ assert(tmp >= 0);
+ if( tmp == 0 )
+ return 0;
+ return tmp + 2;
+ case ']':
+ tmp = Term_HandleVT100_OSC(Term, Len-2, Buf+2);
+ assert(tmp >= 0);
+ if( tmp == 0 )
+ return 0;
+ return tmp + 2;
+
+ case '#':
+ if( Len == 2 )
+ return 0;
+ switch(Buf[2])
+ {
+ case 8:
+ _SysDebug("TODO \\e#%c DECALN - Fill screen with 'E'", Buf[2]);
+ break;
+ default:
+ _SysDebug("Unknown \\e#%c", Buf[2]);
+ break;
+ }
+ return 3;
+
+ case '=':
+ _SysDebug("TODO: \\e= Application Keypad");
+ return 2;
+ case '>':
+ _SysDebug("TODO: \\e= Normal Keypad");
+ return 2;
+
+ case '(': // Update G0 charset
+ tmp = 0; if(0)
+ case ')': // Update G1 charset
+ tmp = 1; if(0)
+ case '*':
+ tmp = 2; if(0)
+ case '+':
+ tmp = 3;
+
+ if( Len <= 2 )
+ return 0; // We need more
+ switch(Buf[2])
+ {
+ case '0': // DEC Special Character/Linedrawing set
+ case 'A': // UK
+ case 'B': // US ASCII
+ break;
+ }
+ return 3;
+ case '7':
+ // Save cursor
+ Display_SaveCursor(Term);
+ return 2;
+ case '8':
+ // Restore cursor
+ Display_RestoreCursor(Term);
+ return 2;
+ case 'D':
+ // Cursor down, if at bottom scroll
+ Display_MoveCursor(Term, 1, 0);
+ // TODO: Scroll if at bottom (impl in _MoveCursor)
+ return 2;
+ case 'E':
+ Display_MoveCursor(Term, 1, INT_MIN);
+ // TODO: Scroll if at bottom (impl in _MoveCursor)
+ return 2;
+ case 'M':
+ // Cursor up, scroll if at top
+ Display_MoveCursor(Term, -1, 0);
+ return 2;
+ default:
+ _SysDebug("Unknown VT100 \\e%c", Buf[1]);
+ return 2;
+ }
+}
+
+/**
+ * \brief Handle CSI escape sequences '\x1b['
+ * \return 0 : insufficient data
+ * \return +ve : Number of bytes consumed
+ */