-static void rote_es_interpret_csi(RoteTerm *rt);
-
-static void try_interpret_escape_seq(RoteTerm *rt)
-{
- char firstchar = rt->pd->esbuf[0];
- char lastchar = rt->pd->esbuf[rt->pd->esbuf_len-1];
-
- if (!firstchar)
- return; /* too early to do anything */
-
- /* interpret ESC-M as reverse line-feed */
- if (firstchar == 'M') {
- cursor_line_up(rt);
- cancel_escape_sequence(rt);
- return;
- }
-
- if (firstchar != '[' && firstchar != ']') {
- /* unrecognized escape sequence. Let's forget about it. */
- cancel_escape_sequence(rt);
- return;
- }
-
- if (firstchar == '[' && is_valid_csi_ender(lastchar)) {
- /* we have a csi escape sequence: interpret it */
- rote_es_interpret_csi(rt);
- cancel_escape_sequence(rt);
- } else if (firstchar == ']' && lastchar == '\a') {
- /* we have an xterm escape sequence: interpret it */
-
- /* rote_es_interpret_xterm_es(rt); -- TODO!*/
- cancel_escape_sequence(rt);
- }
-
- /* if the escape sequence took up all available space and could
- * not yet be parsed, abort it */
- if (rt->pd->esbuf_len + 1 >= ESEQ_BUF_SIZE)
- cancel_escape_sequence(rt);
-}
-
-int rote_vt_inject(RoteTerm *rt, const char *data, int len)
-{
- int pos;
-
- for (pos = 0; pos < len; pos++) {
- if ((unsigned char)data[pos] <= 31) {
- handle_control_char(rt, data[pos]);
- continue;
- }
-
- if (rt->pd->escaped && rt->pd->esbuf_len < ESEQ_BUF_SIZE) {
- /* append character to ongoing escape sequence */
- rt->pd->esbuf[rt->pd->esbuf_len] = data[pos];
- rt->pd->esbuf[++rt->pd->esbuf_len] = 0;
-
- try_interpret_escape_seq(rt);
- } else
- if (rt->pd->graphmode) {
- put_graphmode_char(rt, data[pos]);
- } else {
- static int8_t const lens[5] = { 1, -1, 2, 3, 4 };
- int bsf = __builtin_clz(~((unsigned char)data[pos] << 24));
-
- if (pos + lens[bsf] > len)
- return pos;
-
- put_normal_char(rt, data + pos, lens[bsf]);
- pos += lens[bsf] - 1;
- }
- }
-
- return len;
-}
-
-/****************************************************************************/
-/* CSI things */
-/****************************************************************************/
-