From f2c620137fa5290d913373e5579a97f0fee25fa3 Mon Sep 17 00:00:00 2001 From: james <> Date: Mon, 3 Mar 2008 06:04:42 +0000 Subject: *** empty log message *** --- src/ansi.c | 716 +++++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 409 insertions(+), 307 deletions(-) (limited to 'src/ansi.c') diff --git a/src/ansi.c b/src/ansi.c index c661243..4671dc4 100644 --- a/src/ansi.c +++ b/src/ansi.c @@ -10,6 +10,9 @@ static char rcsid[] = "$Id$"; /* * $Log$ + * Revision 1.42 2008/03/03 06:04:42 james + * *** empty log message *** + * * Revision 1.41 2008/03/02 12:30:54 staffcvs * *** empty log message *** * @@ -147,52 +150,81 @@ ansi_move (ANSI * a, CRT_Pos p) // a->pos.x = ANSI_INVAL; - if (a->pos.x != ANSI_INVAL) { - - if ((!dx) && (!dy)) - return; + if (a->pos.x != ANSI_INVAL) + { - if (!dy) { - if (dx == 1) { - a->terminal->xmit (a->terminal, "\033[C", 3); - } else if (dx == -1) { - a->terminal->xmit (a->terminal, "\033[D", 3); - } else { - n = snprintf (buf, sizeof (buf), "\033[%dG", p.x + 1); - a->terminal->xmit (a->terminal, buf, n); - } - } else if (!dx) { - if (dy == -1) { - a->terminal->xmit (a->terminal, "\033[A", 3); - } else if (dy == 1) { - a->terminal->xmit (a->terminal, "\033[B", 3); - } else if (dy < 0) { - n = snprintf (buf, sizeof (buf), "\033[%dA", -dy); - a->terminal->xmit (a->terminal, buf, n); - } else { - n = snprintf (buf, sizeof (buf), "\033[%dB", dy); - a->terminal->xmit (a->terminal, buf, n); - } - } else if (!p.x) { - if (dy == 1) { - a->terminal->xmit (a->terminal, "\033[E", 3); - } else if (dy == -1) { - a->terminal->xmit (a->terminal, "\033[F", 3); - } else if (dy > 0) { - n = snprintf (buf, sizeof (buf), "\033[%dE", dy); - a->terminal->xmit (a->terminal, buf, n); - } else { - n = snprintf (buf, sizeof (buf), "\033[%dF", -dy); - a->terminal->xmit (a->terminal, buf, n); - } - } else { + if ((!dx) && (!dy)) + return; + + if (!dy) + { + if (dx == 1) + { + a->terminal->xmit (a->terminal, "\033[C", 3); + } + else if (dx == -1) + { + a->terminal->xmit (a->terminal, "\033[D", 3); + } + else + { + n = snprintf (buf, sizeof (buf), "\033[%dG", p.x + 1); + a->terminal->xmit (a->terminal, buf, n); + } + } + else if (!dx) + { + if (dy == -1) + { + a->terminal->xmit (a->terminal, "\033[A", 3); + } + else if (dy == 1) + { + a->terminal->xmit (a->terminal, "\033[B", 3); + } + else if (dy < 0) + { + n = snprintf (buf, sizeof (buf), "\033[%dA", -dy); + a->terminal->xmit (a->terminal, buf, n); + } + else + { + n = snprintf (buf, sizeof (buf), "\033[%dB", dy); + a->terminal->xmit (a->terminal, buf, n); + } + } + else if (!p.x) + { + if (dy == 1) + { + a->terminal->xmit (a->terminal, "\033[E", 3); + } + else if (dy == -1) + { + a->terminal->xmit (a->terminal, "\033[F", 3); + } + else if (dy > 0) + { + n = snprintf (buf, sizeof (buf), "\033[%dE", dy); + a->terminal->xmit (a->terminal, buf, n); + } + else + { + n = snprintf (buf, sizeof (buf), "\033[%dF", -dy); + a->terminal->xmit (a->terminal, buf, n); + } + } + else + { + n = snprintf (buf, sizeof (buf), "\033[%d;%dH", p.y + 1, p.x + 1); + a->terminal->xmit (a->terminal, buf, n); + } + } + else + { n = snprintf (buf, sizeof (buf), "\033[%d;%dH", p.y + 1, p.x + 1); a->terminal->xmit (a->terminal, buf, n); } - } else { - n = snprintf (buf, sizeof (buf), "\033[%d;%dH", p.y + 1, p.x + 1); - a->terminal->xmit (a->terminal, buf, n); - } a->pos = p; } @@ -204,11 +236,14 @@ ansi_showhide_cursor (ANSI * a, int hide) if (a->hide_cursor == hide) return; - if (hide) { - a->terminal->xmit (a->terminal, "\033[?25l", 6); - } else { - a->terminal->xmit (a->terminal, "\033[?25h", 6); - } + if (hide) + { + a->terminal->xmit (a->terminal, "\033[?25l", 6); + } + else + { + a->terminal->xmit (a->terminal, "\033[?25h", 6); + } a->hide_cursor = hide; } @@ -230,30 +265,37 @@ ansi_set_color (ANSI * a, int color) int i; int fg, bg; - if ((a->color == ANSI_INVAL) || (color != a->color)) { - fg = CRT_COLOR_FG (color); - bg = CRT_COLOR_BG (color); - - if (fg & CRT_COLOR_INTENSITY) { - fg += 90; - } else { - fg += 30; - } - - if (bg & CRT_COLOR_INTENSITY) { - bg += 100; - } else { - bg += 40; - } - - i = sprintf (buf, "\033[%d;%dm", fg, bg); + if ((a->color == ANSI_INVAL) || (color != a->color)) + { + fg = CRT_COLOR_FG (color); + bg = CRT_COLOR_BG (color); + + if (fg & CRT_COLOR_INTENSITY) + { + fg += 90; + } + else + { + fg += 30; + } + + if (bg & CRT_COLOR_INTENSITY) + { + bg += 100; + } + else + { + bg += 40; + } + + i = sprintf (buf, "\033[%d;%dm", fg, bg); #if 0 - fprintf (stderr, "Color set to %d %d %x\n", fg, bg, color); + fprintf (stderr, "Color set to %d %d %x\n", fg, bg, color); #endif - a->terminal->xmit (a->terminal, buf, i); - a->color = color; - } + a->terminal->xmit (a->terminal, buf, i); + a->color = color; + } } static void @@ -269,34 +311,47 @@ ansi_set_attr (ANSI * a, int attr) a->attr = attr; #if 0 - if (attr == CRT_ATTR_NORMAL) { - ansi_force_attr_normal (a); - return; - } + if (attr == CRT_ATTR_NORMAL) + { + ansi_force_attr_normal (a); + return; + } #endif - if (dif & CRT_ATTR_UNDERLINE) { - if (attr & CRT_ATTR_UNDERLINE) { - a->terminal->xmit (a->terminal, "\033[4m", 4); - } else { - a->terminal->xmit (a->terminal, "\033[24m", 5); - } - } - if (dif & CRT_ATTR_REVERSE) { - if (attr & CRT_ATTR_REVERSE) { - a->terminal->xmit (a->terminal, "\033[7m", 4); - } else { - a->terminal->xmit (a->terminal, "\033[27m", 5); - } - } - if (dif & CRT_ATTR_BOLD) { - if (attr & CRT_ATTR_BOLD) { - a->terminal->xmit (a->terminal, "\033[1m", 4); - } else { - a->terminal->xmit (a->terminal, "\033[21m", 5); - a->terminal->xmit (a->terminal, "\033[22m", 5); - } - } + if (dif & CRT_ATTR_UNDERLINE) + { + if (attr & CRT_ATTR_UNDERLINE) + { + a->terminal->xmit (a->terminal, "\033[4m", 4); + } + else + { + a->terminal->xmit (a->terminal, "\033[24m", 5); + } + } + if (dif & CRT_ATTR_REVERSE) + { + if (attr & CRT_ATTR_REVERSE) + { + a->terminal->xmit (a->terminal, "\033[7m", 4); + } + else + { + a->terminal->xmit (a->terminal, "\033[27m", 5); + } + } + if (dif & CRT_ATTR_BOLD) + { + if (attr & CRT_ATTR_BOLD) + { + a->terminal->xmit (a->terminal, "\033[1m", 4); + } + else + { + a->terminal->xmit (a->terminal, "\033[21m", 5); + a->terminal->xmit (a->terminal, "\033[22m", 5); + } + } } @@ -306,33 +361,37 @@ ascii_emit (TTY * t, uint32_t ch) int i; /*Some quick obvious subsititons for quotation marks*/ - switch (ch) { - case 0x2018: - ch = '`'; - break; - case 0x2019: - ch = '\''; - break; - case 0x201c: - case 0x201d: - ch = '"'; - break; - } + switch (ch) + { + case 0x2018: + ch = '`'; + break; + case 0x2019: + ch = '\''; + break; + case 0x201c: + case 0x201d: + ch = '"'; + break; + } /*Short cut the easy stuff*/ - if (ch < 0x7f) { - uint8_t c = ch; - t->xmit (t, &c, 1); - return; - } - - for (i = 0; i < VT102_CHARSET_SIZE; ++i) { - if (vt102_charset_gl[i] == ch) { - uint8_t c[3] = { 016, i, 017 }; - t->xmit (t, &c, 3); + if (ch < 0x7f) + { + uint8_t c = ch; + t->xmit (t, &c, 1); return; } - } + + for (i = 0; i < VT102_CHARSET_SIZE; ++i) + { + if (vt102_charset_gl[i] == ch) + { + uint8_t c[3] = { 016, i, 017 }; + t->xmit (t, &c, 3); + return; + } + } t->xmit (t, "?", 1); @@ -426,11 +485,12 @@ ansi_spot_scroll_up (ANSI * a, CRT * c) n = c->sh.e.y - c->sh.s.y; p = CRT_ADDR_POS (&c->sh.s); - while (n--) { - if (memcmp (&c->screen[p], &a->crt.screen[p + CRT_COLS], l)) - return; - p += CRT_COLS; - } + while (n--) + { + if (memcmp (&c->screen[p], &a->crt.screen[p + CRT_COLS], l)) + return; + p += CRT_COLS; + } if (ansi_scroll_up (a, c->sh.s, c->sh.e)) return; @@ -438,10 +498,11 @@ ansi_spot_scroll_up (ANSI * a, CRT * c) n = c->sh.e.y - c->sh.s.y; p = CRT_ADDR_POS (&c->sh.s); - while (n--) { - memcpy (&a->crt.screen[p], &a->crt.screen[p + CRT_COLS], l); - p += CRT_COLS; - } + while (n--) + { + memcpy (&a->crt.screen[p], &a->crt.screen[p + CRT_COLS], l); + p += CRT_COLS; + } c->sh.dir = 0; //FIXME: horrid hack @@ -451,12 +512,13 @@ static void ansi_spot_scroll (ANSI * a, CRT * c) { - switch (c->sh.dir) { - case -1: + switch (c->sh.dir) + { + case -1: /*we only care about up for the moment */ - ansi_spot_scroll_up (a, c); - break; - } + ansi_spot_scroll_up (a, c); + break; + } return; } @@ -470,21 +532,23 @@ ansi_draw_line (ANSI * a, CRT_CA * cap, int y) CRT_Pos p = { 0, y }; CRT_CA *acap = &a->crt.screen[CRT_ADDR_POS (&p)]; - for (p.x = 0; p.x < a->crt.size.x; ++p.x) { - if (p.x >= a->size.x) - continue; + for (p.x = 0; p.x < a->crt.size.x; ++p.x) + { + if (p.x >= a->size.x) + continue; - if (crt_ca_cmp (*acap, *cap)) { - ansi_showhide_cursor (a, 1); - *acap = *cap; + if (crt_ca_cmp (*acap, *cap)) + { + ansi_showhide_cursor (a, 1); + *acap = *cap; - ansi_move (a, p); - ansi_render (a, *acap); - } + ansi_move (a, p); + ansi_render (a, *acap); + } - acap++; - cap++; - } + acap++; + cap++; + } } static void @@ -492,38 +556,42 @@ ansi_resize_check (ANSI * a, CRT_Pos * size) { if ((size && crt_pos_cmp (a->crt.size, *size)) - || crt_pos_cmp (a->terminal->size, a->size)) { + || crt_pos_cmp (a->terminal->size, a->size)) + { - terminal_getsize (a->terminal); + terminal_getsize (a->terminal); - a->size = a->terminal->size; + a->size = a->terminal->size; - a->pos.x = ANSI_INVAL; - a->hide_cursor = ANSI_INVAL; + a->pos.x = ANSI_INVAL; + a->hide_cursor = ANSI_INVAL; - crt_reset (&a->crt); + crt_reset (&a->crt); - if (size) - a->crt.size = *size; + if (size) + a->crt.size = *size; // FIXME: -- echos back crap? // a->terminal->xmit (a->terminal, "\033[c", 3); // maybe - issue 132 column command if we're 132? - ansi_cls (a); - a->terminal->xmit (a->terminal, "\033=", 2); - a->terminal->xmit (a->terminal, "\033[?6l", 5); - a->terminal->xmit (a->terminal, "\033[r", 3); - if (a->utf8) { - a->terminal->xmit (a->terminal, "\033%G", 3); - } else { - a->terminal->xmit (a->terminal, "\033(B", 3); - a->terminal->xmit (a->terminal, "\033)0", 3); - a->terminal->xmit (a->terminal, "\017", 1); - } + ansi_cls (a); + a->terminal->xmit (a->terminal, "\033=", 2); + a->terminal->xmit (a->terminal, "\033[?6l", 5); + a->terminal->xmit (a->terminal, "\033[r", 3); + if (a->utf8) + { + a->terminal->xmit (a->terminal, "\033%G", 3); + } + else + { + a->terminal->xmit (a->terminal, "\033(B", 3); + a->terminal->xmit (a->terminal, "\033)0", 3); + a->terminal->xmit (a->terminal, "\017", 1); + } - } + } } /*if they haven't then ansi_draw will patch it up*/ @@ -553,52 +621,55 @@ ansi_history (ANSI * a, History * h) a->terminal->xmit (a->terminal, buf, i); - while (a->history_ptr != h->wptr) { - - History_ent *e = &h->lines[a->history_ptr]; - - HISTORY_INC (h, a->history_ptr); - - if (!e->valid) - continue; + while (a->history_ptr != h->wptr) + { - /*If so write the line ot the top of the screen */ - ansi_draw_line (a, e->line, 0); + History_ent *e = &h->lines[a->history_ptr]; + HISTORY_INC (h, a->history_ptr); - /*Roll guess_scroll lines up putting the top line into the xterm's history */ + if (!e->valid) + continue; + /*If so write the line ot the top of the screen */ + ansi_draw_line (a, e->line, 0); - /*Make extra lines a predictable colour */ - ansi_set_color (a, CRT_COLOR_NORMAL); - ansi_showhide_cursor (a, 1); - i = sprintf (buf, "\033[%d;%dH", guess_scroll, 1); - a->terminal->xmit (a->terminal, buf, i); - a->terminal->xmit (a->terminal, "\033D", 2); - a->pos.x = ANSI_INVAL; + /*Roll guess_scroll lines up putting the top line into the xterm's history */ - /*now do the same in our image of the screen */ - { - CRT_Pos s = { 0 } - , e = { - 0}; + /*Make extra lines a predictable colour */ + ansi_set_color (a, CRT_COLOR_NORMAL); - /*scroll lines up */ - for (s.y++; s.y < guess_scroll; s.y++, e.y++) { - memcpy (&a->crt.screen[CRT_ADDR_POS (&e)], - &a->crt.screen[CRT_ADDR_POS (&s)], - sizeof (CRT_CA) * a->crt.size.x); + ansi_showhide_cursor (a, 1); + i = sprintf (buf, "\033[%d;%dH", guess_scroll, 1); + a->terminal->xmit (a->terminal, buf, i); + a->terminal->xmit (a->terminal, "\033D", 2); + a->pos.x = ANSI_INVAL; + + /*now do the same in our image of the screen */ + + { + CRT_Pos s = { 0 } + , e = + { + 0}; + + /*scroll lines up */ + for (s.y++; s.y < guess_scroll; s.y++, e.y++) + { + memcpy (&a->crt.screen[CRT_ADDR_POS (&e)], + &a->crt.screen[CRT_ADDR_POS (&s)], + sizeof (CRT_CA) * a->crt.size.x); + } + + /* erase new line */ + s.y = e.y; + e.x = CRT_COLS - 1; + crt_erase (&a->crt, s, e, 1, CRT_COLOR_NORMAL); } - /* erase new line */ - s.y = e.y; - e.x = CRT_COLS - 1; - crt_erase (&a->crt, s, e, 1, CRT_COLOR_NORMAL); } - - } /*reset margins*/ a->terminal->xmit (a->terminal, "\033[r", 3); a->pos.x = ANSI_INVAL; @@ -618,39 +689,42 @@ ansi_draw (ANSI * a, CRT * c) ansi_resize_check (a, &c->size); - for (p.y = 0; p.y < a->crt.size.y; ++p.y) { - if (p.y >= a->size.y) - continue; + for (p.y = 0; p.y < a->crt.size.y; ++p.y) + { + if (p.y >= a->size.y) + continue; - ansi_draw_line (a, &c->screen[CRT_ADDR (p.y, 0)], p.y); + ansi_draw_line (a, &c->screen[CRT_ADDR (p.y, 0)], p.y); - } + } - if ((c->size.x > a->size.x) || (c->size.y > a->size.y)) { - char msg[1024]; // = "Window is too small"; - int i; - p.x = 0; - p.y = 0; + if ((c->size.x > a->size.x) || (c->size.y > a->size.y)) + { + char msg[1024]; // = "Window is too small"; + int i; + p.x = 0; + p.y = 0; - i = - sprintf (msg, "Window too small (%dx%d need %dx%d)", a->size.x, - a->size.y, c->size.x, c->size.y); + i = + sprintf (msg, "Window too small (%dx%d need %dx%d)", a->size.x, + a->size.y, c->size.x, c->size.y); - ansi_showhide_cursor (a, 1); - ansi_set_attr (a, CRT_ATTR_REVERSE); - ansi_set_color (a, CRT_MAKE_COLOR (CRT_COLOR_WHITE, CRT_COLOR_RED)); - ansi_move (a, p); + ansi_showhide_cursor (a, 1); + ansi_set_attr (a, CRT_ATTR_REVERSE); + ansi_set_color (a, CRT_MAKE_COLOR (CRT_COLOR_WHITE, CRT_COLOR_RED)); + ansi_move (a, p); - a->terminal->xmit (a->terminal, msg, i); - a->pos.x = ANSI_INVAL; - } + a->terminal->xmit (a->terminal, msg, i); + a->pos.x = ANSI_INVAL; + } - if ((c->pos.x >= a->size.x) || (c->pos.y >= a->size.y)) { - ansi_showhide_cursor (a, 1); - return; - } + if ((c->pos.x >= a->size.x) || (c->pos.y >= a->size.y)) + { + ansi_showhide_cursor (a, 1); + return; + } a->crt.pos = c->pos; ansi_move (a, a->crt.pos); @@ -684,17 +758,25 @@ ansi_key (ANSI * a, Context * c, int key) cmd_show_status (c->d, c); - if (c->d->active) { - if (key == CMD_CANCEL_KEY) { - return cmd_deactivate (c->d, c); - } else if (key == CMD_KEY) { - cmd_deactivate (c->d, c); - } else { - return cmd_key (c->d, c, a, key); + if (c->d->active) + { + if (key == CMD_CANCEL_KEY) + { + return cmd_deactivate (c->d, c); + } + else if (key == CMD_KEY) + { + cmd_deactivate (c->d, c); + } + else + { + return cmd_key (c->d, c, a, key); + } + } + else if (key == CMD_KEY) + { + return cmd_activate (c->d, c); } - } else if (key == CMD_KEY) { - return cmd_activate (c->d, c); - } return c->k->key (c->k, c, key); } @@ -706,9 +788,10 @@ ansi_flush_escape (ANSI * a, Context * c) ANSI_Parser *p = &a->parser; int i; - for (i = 0; i < p->escape_ptr; ++i) { - ansi_key (a, c, p->escape_buf[i]); - } + for (i = 0; i < p->escape_ptr; ++i) + { + ansi_key (a, c, p->escape_buf[i]); + } p->escape_ptr = 0; p->in_escape = 0; @@ -718,19 +801,25 @@ static void ansi_parse_deckey (ANSI * a, Context * c) { ANSI_Parser *p = &a->parser; - if ((p->escape_buf[1] != '[') && (p->escape_buf[1] != 'O')) { - ansi_flush_escape (a, c); - return; - } + if ((p->escape_buf[1] != '[') && (p->escape_buf[1] != 'O')) + { + ansi_flush_escape (a, c); + return; + } - if ((p->escape_buf[2] >= 'A') || (p->escape_buf[2] <= 'Z')) { - ansi_key (a, c, KEY_UP + (p->escape_buf[2] - 'A')); - } else if ((p->escape_buf[2] >= 'a') || (p->escape_buf[2] <= 'z')) { - ansi_key (a, c, KEY_154 + (p->escape_buf[2] - 'a')); - } else { - ansi_flush_escape (a, c); - return; - } + if ((p->escape_buf[2] >= 'A') || (p->escape_buf[2] <= 'Z')) + { + ansi_key (a, c, KEY_UP + (p->escape_buf[2] - 'A')); + } + else if ((p->escape_buf[2] >= 'a') || (p->escape_buf[2] <= 'z')) + { + ansi_key (a, c, KEY_154 + (p->escape_buf[2] - 'a')); + } + else + { + ansi_flush_escape (a, c); + return; + } p->in_escape = 0; p->escape_ptr = 0; } @@ -740,16 +829,20 @@ ansi_parse_ansikey (ANSI * a, Context * c) { ANSI_Parser *p = &a->parser; - if ((p->escape_buf[1] != '[') || (p->escape_buf[3] != '~')) { - ansi_flush_escape (a, c); - return; - } - if ((p->escape_buf[2] >= '0') || (p->escape_buf[2] <= '9')) { - ansi_key (a, c, KEY_180 + (p->escape_buf[2] - '0')); - } else { - ansi_flush_escape (a, c); - return; - } + if ((p->escape_buf[1] != '[') || (p->escape_buf[3] != '~')) + { + ansi_flush_escape (a, c); + return; + } + if ((p->escape_buf[2] >= '0') || (p->escape_buf[2] <= '9')) + { + ansi_key (a, c, KEY_180 + (p->escape_buf[2] - '0')); + } + else + { + ansi_flush_escape (a, c); + return; + } p->in_escape = 0; p->escape_ptr = 0; @@ -761,44 +854,48 @@ static void ansi_parse_escape (ANSI * a, Context * c) { ANSI_Parser *p = &a->parser; - switch (p->escape_ptr) { - case 0: - case 1: - return; - case 2: - switch (p->escape_buf[1]) { - case '[': - case 'O': - break; - default: - ansi_flush_escape (a, c); - } - break; - case 3: - switch (p->escape_buf[1]) { - case 'O': - ansi_parse_deckey (a, c); + switch (p->escape_ptr) + { + case 0: + case 1: + return; + case 2: + switch (p->escape_buf[1]) + { + case '[': + case 'O': + break; + default: + ansi_flush_escape (a, c); + } break; - case '[': - if ((p->escape_buf[2] >= 'A') && (p->escape_buf[2] <= 'Z')) - ansi_parse_deckey (a, c); + case 3: + switch (p->escape_buf[1]) + { + case 'O': + ansi_parse_deckey (a, c); + break; + case '[': + if ((p->escape_buf[2] >= 'A') && (p->escape_buf[2] <= 'Z')) + ansi_parse_deckey (a, c); + break; + default: + ansi_flush_escape (a, c); + } break; - default: - ansi_flush_escape (a, c); - } - break; - case 4: - switch (p->escape_buf[1]) { - case '[': - ansi_parse_ansikey (a, c); + case 4: + switch (p->escape_buf[1]) + { + case '[': + ansi_parse_ansikey (a, c); + break; + default: + ansi_flush_escape (a, c); + } break; - default: + case 5: ansi_flush_escape (a, c); } - break; - case 5: - ansi_flush_escape (a, c); - } } @@ -835,21 +932,25 @@ ansi_parse_char (ANSI * a, Context * c, int ch) /*See if it's time to flush the escape*/ ansi_check_escape (a, c); - if (ch == 033) { - if (p->in_escape) - ansi_flush_escape (a, c); + if (ch == 033) + { + if (p->in_escape) + ansi_flush_escape (a, c); - p->in_escape++; - p->escape_ptr = 0; - gettimeofday (&p->last_escape, NULL); - } + p->in_escape++; + p->escape_ptr = 0; + gettimeofday (&p->last_escape, NULL); + } - if (p->in_escape) { - p->escape_buf[p->escape_ptr++] = ch; - ansi_parse_escape (a, c); - } else { - ansi_key (a, c, ch); - } + if (p->in_escape) + { + p->escape_buf[p->escape_ptr++] = ch; + ansi_parse_escape (a, c); + } + else + { + ansi_key (a, c, ch); + } } @@ -882,13 +983,14 @@ ansi_dispatch (ANSI * a, Context * c) #endif #if 0 - if (*buf == 2) { + if (*buf == 2) + { #if 0 - a->history_ptr = c->h->wptr; - HISTORY_INC (c->h, a->history_ptr); + a->history_ptr = c->h->wptr; + HISTORY_INC (c->h, a->history_ptr); #endif - return -1; - } + return -1; + } #endif -- cgit v1.2.3