+ tVT100State *st = Display_GetTermState(Term);
+
+ if( st == NULL ) {
+ st = malloc( sizeof(*st) );
+ memset(st, 0, sizeof(*st));
+ Display_SetTermState(Term, st);
+ }
+
+ if( st->Mode == MODE_IGNORE ) {
+ st->Mode = MODE_NORMAL;
+ // Used for multi-byte EOS
+ return 1;
+ }
+ if( st->Mode == MODE_STRING )
+ {
+ // We're in a string mode
+ int pos = _locate_eos(Len, Buf);
+ size_t bytes = (pos >= 0 ? pos : Len);
+ char *tmp = realloc(st->StringCache, st->StringLen + bytes+1);
+ if(!tmp) return bytes;
+ memcpy(tmp+st->StringLen, Buf, bytes);
+ tmp[st->StringLen+bytes] = 0;
+
+ _SysDebug("pos=%i", pos);
+ _SysDebug("'%.*s'", bytes, Buf);
+ // Only apply when we hit EOS at the start
+ if( pos != 0 )
+ return bytes;
+ switch(st->StringType)
+ {
+ case STRING_TITLE:
+ Display_SetTitle(Term, st->StringCache);
+ break;
+ case STRING_IGNORE:
+ break;
+ }
+ free(st->StringCache);
+ st->StringCache = 0;
+ st->StringLen = 0;
+
+ if( *Buf == '\x1b' ) {
+ st->Mode = MODE_IGNORE;
+ // skip the '\\'
+ }
+ else
+ st->Mode = MODE_NORMAL;
+ return 1;
+ }