diff options
Diffstat (limited to 'src/ansi.c')
| -rw-r--r-- | src/ansi.c | 34 | 
1 files changed, 19 insertions, 15 deletions
@@ -10,6 +10,9 @@ static char rcsid[] = "$Id$";  /*   * $Log$ + * Revision 1.43  2008/03/06 01:41:48  james + * *** empty log message *** + *   * Revision 1.42  2008/03/03 06:04:42  james   * *** empty log message ***   * @@ -828,22 +831,26 @@ static void  ansi_parse_ansikey (ANSI * a, Context * c)  {    ANSI_Parser *p = &a->parser; +  int l = p->escape_ptr - 1; +  char *end; +  int k; -  if ((p->escape_buf[1] != '[') || (p->escape_buf[3] != '~')) +  if ((p->escape_buf[1] != '[') || (p->escape_buf[l] != '~'))      {        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 + +  k = strtol (&p->escape_buf[2], &end, 10); + +  if (end != &p->escape_buf[l])      {        ansi_flush_escape (a, c);        return;      } +  ansi_key (a, c, KEY_180 + k); +    p->in_escape = 0;    p->escape_ptr = 0;  } @@ -884,16 +891,13 @@ ansi_parse_escape (ANSI * a, Context * c)          }        break;      case 4: -      switch (p->escape_buf[1]) -        { -        case '[': -          ansi_parse_ansikey (a, c); -          break; -        default: -          ansi_flush_escape (a, c); -        } -      break;      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);      }  }  | 
