From 4cd3114c5013aeccd790582f6cd1dd2760be9dd0 Mon Sep 17 00:00:00 2001 From: james <> Date: Fri, 7 Mar 2008 12:37:04 +0000 Subject: *** empty log message *** --- src/ansi.c | 739 +++++++++++++++++++++++++++---------------------------------- 1 file changed, 325 insertions(+), 414 deletions(-) (limited to 'src/ansi.c') diff --git a/src/ansi.c b/src/ansi.c index e1aaeee..a70a51d 100644 --- a/src/ansi.c +++ b/src/ansi.c @@ -1,4 +1,4 @@ -/* +/* * ansi.c: * * Copyright (c) 2008 James McKenzie , @@ -8,8 +8,11 @@ static char rcsid[] = "$Id$"; -/* +/* * $Log$ + * Revision 1.49 2008/03/07 12:37:04 james + * *** empty log message *** + * * Revision 1.48 2008/03/06 22:51:39 james * *** empty log message *** * @@ -167,96 +170,67 @@ ansi_move (ANSI * a, CRT_Pos p) int dy = p.y - a->pos.y; int err = 0; -// a->pos.x = ANSI_INVAL; + // a->pos.x = ANSI_INVAL; - if (a->pos.x != ANSI_INVAL) - { + if (a->pos.x != ANSI_INVAL) { - if ((!dx) && (!dy)) - return 0; - - if (!dy) - { - if (dx == 1) - { - if (a->terminal->xmit (a->terminal, "\033[C", 3) != 3) - err++; - } - else if (dx == -1) - { - if (a->terminal->xmit (a->terminal, "\033[D", 3) != 3) - err++; - } - else - { - n = snprintf (buf, sizeof (buf), "\033[%dG", p.x + 1); - if (a->terminal->xmit (a->terminal, buf, n) != n) - err++; - } - } - else if (!dx) - { - if (dy == -1) - { - if (a->terminal->xmit (a->terminal, "\033[A", 3) != 3) - err++; - } - else if (dy == 1) - { - if (a->terminal->xmit (a->terminal, "\033[B", 3) != 3) - err++; - } - else if (dy < 0) - { - n = snprintf (buf, sizeof (buf), "\033[%dA", -dy); - if (a->terminal->xmit (a->terminal, buf, n) != n) - err++; - } - else - { - n = snprintf (buf, sizeof (buf), "\033[%dB", dy); - if (a->terminal->xmit (a->terminal, buf, n) != n) - err++; - } - } - else if (!p.x) - { - if (dy == 1) - { - if (a->terminal->xmit (a->terminal, "\033[E", 3) != 3) - err++; - } - else if (dy == -1) - { - if (a->terminal->xmit (a->terminal, "\033[F", 3) != 3) - err++; - } - else if (dy > 0) - { - n = snprintf (buf, sizeof (buf), "\033[%dE", dy); - if (a->terminal->xmit (a->terminal, buf, n) != n) - err++; - } - else - { - n = snprintf (buf, sizeof (buf), "\033[%dF", -dy); - if (a->terminal->xmit (a->terminal, buf, n) != n) - err++; - } - } - else - { - n = snprintf (buf, sizeof (buf), "\033[%d;%dH", p.y + 1, p.x + 1); - if (a->terminal->xmit (a->terminal, buf, n) != n) - err++; - } - } - else - { + if ((!dx) && (!dy)) + return 0; + + if (!dy) { + if (dx == 1) { + if (a->terminal->xmit (a->terminal, "\033[C", 3) != 3) + err++; + } else if (dx == -1) { + if (a->terminal->xmit (a->terminal, "\033[D", 3) != 3) + err++; + } else { + n = snprintf (buf, sizeof (buf), "\033[%dG", p.x + 1); + if (a->terminal->xmit (a->terminal, buf, n) != n) + err++; + } + } else if (!dx) { + if (dy == -1) { + if (a->terminal->xmit (a->terminal, "\033[A", 3) != 3) + err++; + } else if (dy == 1) { + if (a->terminal->xmit (a->terminal, "\033[B", 3) != 3) + err++; + } else if (dy < 0) { + n = snprintf (buf, sizeof (buf), "\033[%dA", -dy); + if (a->terminal->xmit (a->terminal, buf, n) != n) + err++; + } else { + n = snprintf (buf, sizeof (buf), "\033[%dB", dy); + if (a->terminal->xmit (a->terminal, buf, n) != n) + err++; + } + } else if (!p.x) { + if (dy == 1) { + if (a->terminal->xmit (a->terminal, "\033[E", 3) != 3) + err++; + } else if (dy == -1) { + if (a->terminal->xmit (a->terminal, "\033[F", 3) != 3) + err++; + } else if (dy > 0) { + n = snprintf (buf, sizeof (buf), "\033[%dE", dy); + if (a->terminal->xmit (a->terminal, buf, n) != n) + err++; + } else { + n = snprintf (buf, sizeof (buf), "\033[%dF", -dy); + if (a->terminal->xmit (a->terminal, buf, n) != n) + err++; + } + } else { n = snprintf (buf, sizeof (buf), "\033[%d;%dH", p.y + 1, p.x + 1); if (a->terminal->xmit (a->terminal, buf, n) != n) err++; } + } else { + n = snprintf (buf, sizeof (buf), "\033[%d;%dH", p.y + 1, p.x + 1); + if (a->terminal->xmit (a->terminal, buf, n) != n) + err++; + } a->pos = p; @@ -271,16 +245,13 @@ ansi_showhide_cursor (ANSI * a, int hide) if (a->hide_cursor == hide) return err; - if (hide) - { - if (a->terminal->xmit (a->terminal, "\033[?25l", 6) != 6) - err++; - } - else - { - if (a->terminal->xmit (a->terminal, "\033[?25h", 6) != 6) - err++; - } + if (hide) { + if (a->terminal->xmit (a->terminal, "\033[?25l", 6) != 6) + err++; + } else { + if (a->terminal->xmit (a->terminal, "\033[?25h", 6) != 6) + err++; + } a->hide_cursor = hide; return err; @@ -329,23 +300,17 @@ ansi_set_color (ANSI * a, int color) fg = CRT_COLOR_FG (color); bg = CRT_COLOR_BG (color); - if (fg & CRT_COLOR_INTENSITY) - { - fg += 90; - } - else - { - fg += 30; - } + if (fg & CRT_COLOR_INTENSITY) { + fg += 90; + } else { + fg += 30; + } - if (bg & CRT_COLOR_INTENSITY) - { - bg += 100; - } - else - { - bg += 40; - } + if (bg & CRT_COLOR_INTENSITY) { + bg += 100; + } else { + bg += 40; + } i = sprintf (buf, "\033[%d;%dm", fg, bg); #if 0 @@ -373,54 +338,41 @@ 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) - { - if (a->terminal->xmit (a->terminal, "\033[4m", 4)!=4) - err++; - } - else - { - if (a->terminal->xmit (a->terminal, "\033[24m", 5)!=5) - err++; - } + if (dif & CRT_ATTR_UNDERLINE) { + if (attr & CRT_ATTR_UNDERLINE) { + if (a->terminal->xmit (a->terminal, "\033[4m", 4) != 4) + err++; + } else { + if (a->terminal->xmit (a->terminal, "\033[24m", 5) != 5) + err++; } - if (dif & CRT_ATTR_REVERSE) - { - if (attr & CRT_ATTR_REVERSE) - { - if (a->terminal->xmit (a->terminal, "\033[7m", 4)!=4) - err++; - } - else - { - if (a->terminal->xmit (a->terminal, "\033[27m", 5)!=5) - err++; - } + } + if (dif & CRT_ATTR_REVERSE) { + if (attr & CRT_ATTR_REVERSE) { + if (a->terminal->xmit (a->terminal, "\033[7m", 4) != 4) + err++; + } else { + if (a->terminal->xmit (a->terminal, "\033[27m", 5) != 5) + err++; } - if (dif & CRT_ATTR_BOLD) - { - if (attr & CRT_ATTR_BOLD) - { - if (a->terminal->xmit (a->terminal, "\033[1m", 4)!=4) - err++; - } - else - { - if (a->terminal->xmit (a->terminal, "\033[21m", 5)!=5) - err++; - if (a->terminal->xmit (a->terminal, "\033[22m", 5)!=5) - err++; - } + } + if (dif & CRT_ATTR_BOLD) { + if (attr & CRT_ATTR_BOLD) { + if (a->terminal->xmit (a->terminal, "\033[1m", 4) != 4) + err++; + } else { + if (a->terminal->xmit (a->terminal, "\033[21m", 5) != 5) + err++; + if (a->terminal->xmit (a->terminal, "\033[22m", 5) != 5) + err++; } + } return err; } @@ -430,36 +382,32 @@ 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; - } - -/*Short cut the easy stuff*/ - if (ch < 0x7f) - { - uint8_t c = ch; - return (t->xmit (t, &c, 1) == 1) ? 0 : -1; - } - - for (i = 0; i < VT102_CHARSET_SIZE; ++i) - { - if (vt102_charset_gl[i] == ch) - { - uint8_t c[3] = { 016, i, 017 }; - return (t->xmit (t, &c, 3) == 3) ? 0 : -1; - } - } + /* Some quick obvious subsititons for quotation marks */ + 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; + return (t->xmit (t, &c, 1) == 1) ? 0 : -1; + } + + for (i = 0; i < VT102_CHARSET_SIZE; ++i) { + if (vt102_charset_gl[i] == ch) { + uint8_t c[3] = { 016, i, 017 }; + return (t->xmit (t, &c, 3) == 3) ? 0 : -1; + } + } return (t->xmit (t, "?", 1) == 1) ? 0 : -1; @@ -480,21 +428,18 @@ ansi_render (ANSI * a, CRT_CA ca) ansi_set_attr (a, ca.attr); ansi_set_color (a, ca.color); - if (a->utf8) - { - if (utf8_emit (a->terminal, ca.chr)) - err++; - } - else - { - if (ascii_emit (a->terminal, ca.chr)) - err++; - } + if (a->utf8) { + if (utf8_emit (a->terminal, ca.chr)) + err++; + } else { + if (ascii_emit (a->terminal, ca.chr)) + err++; + } a->pos.x++; -/*Can't easily wrap round here as don't know size of destination screen*/ -/*so invalidate the cached cursor position*/ + /* Can't easily wrap round here as don't know size of destination screen */ + /* so invalidate the cached cursor position */ if (a->pos.x >= a->size.x) a->pos.x = ANSI_INVAL; @@ -515,7 +460,8 @@ ansi_cls (ANSI * a) err += ansi_move (a, p); if (a->terminal->xmit (a->terminal, "\033[2J", 4) != 4) err++; -/*different emulators leave cursor in different places after cls differently*/ + /* different emulators leave cursor in different places after cls + differently */ a->pos.x = ANSI_INVAL; return err; @@ -529,25 +475,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; - - if (crt_ca_cmp (*acap, *cap)) - { - err += ansi_showhide_cursor (a, 1); + for (p.x = 0; p.x < a->crt.size.x; ++p.x) { + if (p.x >= a->size.x) + continue; - *acap = *cap; + if (crt_ca_cmp (*acap, *cap)) { + err += ansi_showhide_cursor (a, 1); - err += ansi_move (a, p); - err += ansi_render (a, *acap); - } + *acap = *cap; - acap++; - cap++; + err += ansi_move (a, p); + err += ansi_render (a, *acap); } + acap++; + cap++; + } + return err; } @@ -557,49 +501,45 @@ ansi_resize_check (ANSI * a, CRT_Pos * size) int err = 0; 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); + // FIXME: -- echos back crap? + // a->terminal->xmit (a->terminal, "\033[c", 3); -// maybe - issue 132 column command if we're 132? + // maybe - issue 132 column command if we're 132? - ansi_cls (a); - if (a->terminal->xmit (a->terminal, "\033=", 2) != 2) + ansi_cls (a); + if (a->terminal->xmit (a->terminal, "\033=", 2) != 2) + err++; + if (a->terminal->xmit (a->terminal, "\033[?6l", 5) != 5) + err++; + if (a->terminal->xmit (a->terminal, "\033[r", 3) != 3) + err++; + if (a->utf8) { + if (a->terminal->xmit (a->terminal, "\033%G", 3) != 3) err++; - if (a->terminal->xmit (a->terminal, "\033[?6l", 5) != 5) + } else { + if (a->terminal->xmit (a->terminal, "\033(B", 3) != 3) err++; - if (a->terminal->xmit (a->terminal, "\033[r", 3) != 3) + if (a->terminal->xmit (a->terminal, "\033)0", 3) != 3) + err++; + if (a->terminal->xmit (a->terminal, "\017", 1) != 3) err++; - if (a->utf8) - { - if (a->terminal->xmit (a->terminal, "\033%G", 3) != 3) - err++; - } - else - { - if (a->terminal->xmit (a->terminal, "\033(B", 3) != 3) - err++; - if (a->terminal->xmit (a->terminal, "\033)0", 3) != 3) - err++; - if (a->terminal->xmit (a->terminal, "\017", 1) != 3) - err++; - } - } + + } return err; } @@ -611,7 +551,7 @@ ansi_history (ANSI * a, History * h) int i; int guess_scroll; int err = 0; -/*Do we need to catch up on history?*/ + /* Do we need to catch up on history? */ if (a->history_ptr == h->wptr) return err; @@ -621,7 +561,7 @@ ansi_history (ANSI * a, History * h) if ((a->size.x < a->crt.size.x) || (a->size.y < a->crt.size.y)) return err; - guess_scroll = a->crt.size.y - 1; /*Bototm line should be a status line */ + guess_scroll = a->crt.size.y - 1; /* Bototm line should be a status line */ err += ansi_force_attr_normal (a); @@ -632,61 +572,59 @@ ansi_history (ANSI * a, History * h) err++; - while (a->history_ptr != h->wptr) - { - - History_ent *e = &h->lines[a->history_ptr]; + while (a->history_ptr != h->wptr) { - HISTORY_INC (h, a->history_ptr); + History_ent *e = &h->lines[a->history_ptr]; - if (!e->valid) - continue; + HISTORY_INC (h, a->history_ptr); - /*If so write the line ot the top of the screen */ - err += ansi_draw_line (a, e->line, 0); + if (!e->valid) + continue; + /* If so write the line ot the top of the screen */ + err += ansi_draw_line (a, e->line, 0); - /*Roll guess_scroll lines up putting the top line into the xterm's history */ + /* Roll guess_scroll lines up putting the top line into the xterm's + history */ - /*Make extra lines a predictable colour */ - err += ansi_set_color (a, CRT_COLOR_NORMAL); - err += ansi_showhide_cursor (a, 1); + /* Make extra lines a predictable colour */ + err += ansi_set_color (a, CRT_COLOR_NORMAL); - i = sprintf (buf, "\033[%d;%dH", guess_scroll, 1); - if (a->terminal->xmit (a->terminal, buf, i) != i) - err++; + err += ansi_showhide_cursor (a, 1); - if (a->terminal->xmit (a->terminal, "\033D", 2) != 2) - err++; + i = sprintf (buf, "\033[%d;%dH", guess_scroll, 1); + if (a->terminal->xmit (a->terminal, buf, i) != i) + err++; - a->pos.x = ANSI_INVAL; + if (a->terminal->xmit (a->terminal, "\033D", 2) != 2) + err++; - /*now do the same in our image of the screen */ + a->pos.x = ANSI_INVAL; - { - CRT_Pos s = { 0 } - , e = - { - 0}; + /* now do the same in our image of the screen */ - /*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); - } + { + CRT_Pos s = { 0 } + , e = { + 0}; - /* erase new line */ - s.y = e.y; - e.x = CRT_COLS - 1; - crt_erase (&a->crt, s, e, 1, 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); } + /* erase new line */ + s.y = e.y; + e.x = CRT_COLS - 1; + crt_erase (&a->crt, s, e, 1, CRT_COLOR_NORMAL); } -/*reset margins*/ + + } + /* reset margins */ if (a->terminal->xmit (a->terminal, "\033[r", 3) != 3) err++; @@ -709,45 +647,42 @@ ansi_draw (ANSI * a, CRT * c) err += 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; - err += ansi_draw_line (a, &c->screen[CRT_ADDR (p.y, 0)], p.y); + err += 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); - err += ansi_showhide_cursor (a, 1); - err += ansi_set_attr (a, CRT_ATTR_REVERSE); - err += - ansi_set_color (a, CRT_MAKE_COLOR (CRT_COLOR_WHITE, CRT_COLOR_RED)); - err += ansi_move (a, p); + err += ansi_showhide_cursor (a, 1); + err += ansi_set_attr (a, CRT_ATTR_REVERSE); + err += + ansi_set_color (a, CRT_MAKE_COLOR (CRT_COLOR_WHITE, CRT_COLOR_RED)); + err += ansi_move (a, p); - if (a->terminal->xmit (a->terminal, msg, i) != i) - err++; + if (a->terminal->xmit (a->terminal, msg, i) != i) + err++; - a->pos.x = ANSI_INVAL; - } + a->pos.x = ANSI_INVAL; + } - if ((c->pos.x >= a->size.x) || (c->pos.y >= a->size.y)) - { - err += ansi_showhide_cursor (a, 1); - return err; - } + if ((c->pos.x >= a->size.x) || (c->pos.y >= a->size.y)) { + err += ansi_showhide_cursor (a, 1); + return err; + } a->crt.pos = c->pos; err += ansi_move (a, a->crt.pos); @@ -783,25 +718,17 @@ 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); - } - } - else if (key == CMD_KEY) - { - return cmd_activate (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); } + } else if (key == CMD_KEY) { + return cmd_activate (c->d, c); + } return c->k->key (c->k, c, key); } @@ -813,10 +740,9 @@ 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; @@ -826,25 +752,19 @@ 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; } @@ -857,19 +777,17 @@ ansi_parse_ansikey (ANSI * a, Context * c) char *end; int k; - if ((p->escape_buf[1] != '[') || (p->escape_buf[l] != '~')) - { - ansi_flush_escape (a, c); - return; - } + if ((p->escape_buf[1] != '[') || (p->escape_buf[l] != '~')) { + ansi_flush_escape (a, c); + return; + } k = strtol (&p->escape_buf[2], &end, 10); - if (end != &p->escape_buf[l]) - { - ansi_flush_escape (a, c); - return; - } + if (end != &p->escape_buf[l]) { + ansi_flush_escape (a, c); + return; + } ansi_key (a, c, KEY_180 + k); @@ -883,45 +801,42 @@ 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); - } + switch (p->escape_ptr) { + case 0: + case 1: + return; + case 2: + switch (p->escape_buf[1]) { + case '[': + case 'O': break; - 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); - } + default: + ansi_flush_escape (a, c); + } + break; + case 3: + switch (p->escape_buf[1]) { + case 'O': + ansi_parse_deckey (a, c); break; - case 4: - case 5: - case 6: - case 7: - if (p->escape_buf[p->escape_ptr - 1] == '~') - ansi_parse_ansikey (a, c); + 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; + case 4: + case 5: + case 6: + case 7: + if (p->escape_buf[p->escape_ptr - 1] == '~') + ansi_parse_ansikey (a, c); + break; + default: + ansi_flush_escape (a, c); + } } @@ -942,7 +857,7 @@ ansi_check_escape (ANSI * a, Context * c) return; - /*Time up? */ + /* Time up? */ if (diff.tv_sec || (diff.tv_usec > ANSI_ESCAPE_TIMEOUT)) ansi_flush_escape (a, c); @@ -955,28 +870,24 @@ ansi_parse_char (ANSI * a, Context * c, int ch) ANSI_Parser *p = &a->parser; -/*See if it's time to flush the escape*/ + /* 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); - - p->in_escape++; - p->escape_ptr = 0; - gettimeofday (&p->last_escape, NULL); - } + if (ch == 033) { + if (p->in_escape) + ansi_flush_escape (a, c); - if (p->in_escape) - { - p->escape_buf[p->escape_ptr++] = ch; - ansi_parse_escape (a, c); - } - else - { - ansi_key (a, c, ch); - } + 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); + } } -- cgit v1.2.3