diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/vt102.c | 94 | ||||
-rw-r--r-- | src/vt102.h | 10 |
2 files changed, 61 insertions, 43 deletions
diff --git a/src/vt102.c b/src/vt102.c index 598e4a3..f378c16 100644 --- a/src/vt102.c +++ b/src/vt102.c @@ -10,6 +10,9 @@ static char rcsid[] = "$Id$"; /* * $Log$ + * Revision 1.37 2008/02/24 12:22:53 james + * *** empty log message *** + * * Revision 1.36 2008/02/24 12:22:42 james * *** empty log message *** * @@ -280,7 +283,7 @@ ESC+B #include "syslog.h" //static char terminal_reply[]={033,0133,077,066,0143}; -static char terminal_reply[]={'v','t','1','0','2'}; +static char terminal_reply[] = { 'v', 't', '1', '0', '2' }; static inline int safe_ch (int c) @@ -957,17 +960,17 @@ vt102_parse_esc (Context * c, int ch) switch (ch) { case 'A': - vt102_cursor_relative (v, 0, -1); - break; + vt102_cursor_relative (v, 0, -1); + break; case 'B': - vt102_cursor_relative (v, 0, 1); - break; + vt102_cursor_relative (v, 0, 1); + break; case 'C': - vt102_cursor_relative (v, 1, 0); - break; + vt102_cursor_relative (v, 1, 0); + break; case 'D': - vt102_cursor_relative (v, -1, 0); - break; + vt102_cursor_relative (v, -1, 0); + break; case 'E': if (v->pos.y == v->bottom_margin.y) { @@ -984,18 +987,18 @@ vt102_parse_esc (Context * c, int ch) case 'H': v->tabs[v->pos.x]++; break; - case 'I': - vt102_cursor_retreat_line (c); - break; - case 'J': - crt_erase (&v->crt, v->pos, v->screen_end, 1, v->color); - break; + case 'I': + vt102_cursor_retreat_line (c); + break; + case 'J': + crt_erase (&v->crt, v->pos, v->screen_end, 1, v->color); + break; case 'K': - { - CRT_Pos le = { VT102_COLS - 1, v->pos.y }; - crt_erase (&v->crt, v->pos, le, 1, v->color); - } - break; + { + CRT_Pos le = { VT102_COLS - 1, v->pos.y }; + crt_erase (&v->crt, v->pos, le, 1, v->color); + } + break; case 'M': if (v->pos.y == v->top_margin.y) { @@ -1007,18 +1010,19 @@ vt102_parse_esc (Context * c, int ch) vt102_cursor_relative (v, 0, -1); } break; - case 'Y': - v->parser.in_dca++; - v->parser.dca_ptr=0; - break; - case 'Z': - if (c->t) { - c->t->xmit (c->t, terminal_reply,sizeof(terminal_reply)); - } - break; - case '<': - /*Set ansi mode - ignored*/ - break; + case 'Y': + v->parser.in_dca++; + v->parser.dca_ptr = 0; + break; + case 'Z': + if (c->t) + { + c->t->xmit (c->t, terminal_reply, sizeof (terminal_reply)); + } + break; + case '<': + /*Set ansi mode - ignored */ + break; case '7': vt102_save_state (v); @@ -1389,13 +1393,18 @@ vt102_parse_char (Context * c, int ch) if (ch == SYM_CHAR_RESET) { vt102_reset_state (v); - } else if (p->in_dca) { - p->dca_buf[p->dca_ptr++]=ch; - if (p->dca_ptr==2) { - vt102_cursor_absolute (v, p->dca_buf[0] - 040, p->dca_buf[1]-040); - p->in_dca=0; - } - }else if (p->ignore_until_bell) { + } + else if (p->in_dca) + { + p->dca_buf[p->dca_ptr++] = ch; + if (p->dca_ptr == 2) + { + vt102_cursor_absolute (v, p->dca_buf[0] - 040, p->dca_buf[1] - 040); + p->in_dca = 0; + } + } + else if (p->ignore_until_bell) + { if (ch == 7) p->ignore_until_bell = 0; } @@ -1455,9 +1464,10 @@ vt102_parse_char (Context * c, int ch) /*EOT*/ case 4: break; /*ENQ*/ case 5: - if (c->t) { - c->t->xmit (c->t, "vt102", 5); - } + if (c->t) + { + c->t->xmit (c->t, "vt102", 5); + } break; /*ACK*/ case 6: /*BEL*/ case 7: diff --git a/src/vt102.h b/src/vt102.h index d12182a..2f7867d 100644 --- a/src/vt102.h +++ b/src/vt102.h @@ -12,6 +12,9 @@ /* * $Log$ + * Revision 1.16 2008/02/24 12:22:42 james + * *** empty log message *** + * * Revision 1.15 2008/02/24 00:42:53 james * *** empty log message *** * @@ -69,15 +72,20 @@ #define VT102_STATUS_ROW 24 #define VT102_NMODES 32 +#define VT102_DCA_LEN 16 typedef struct { int in_escape; int in_csi; - int csi_ptr; + int in_dca; int ignore_until_bell; + + int csi_ptr; char csi_buf[VT102_CSI_LEN]; + int dca_ptr; + char dca_buf[VT102_DCA_LEN]; } VT102_parser; typedef struct |