From c1ef27cf4cdfca6e978a7ee8eb3ec6fd6e6e9e03 Mon Sep 17 00:00:00 2001 From: james Date: Thu, 7 Feb 2008 13:22:51 +0000 Subject: [PATCH] *** empty log message *** --- src/ansi.c | 196 ++++++++++++++++++++++++++-------------------- src/crt.c | 30 ++++--- src/crt.h | 8 +- src/libsympathy.c | 5 +- src/prototypes.h | 138 ++++++++++++++++---------------- src/vt102.c | 22 ++++++ 6 files changed, 229 insertions(+), 170 deletions(-) diff --git a/src/ansi.c b/src/ansi.c index d575f62..c501ab9 100644 --- a/src/ansi.c +++ b/src/ansi.c @@ -10,6 +10,9 @@ static char rcsid[] = "$Id$"; /* * $Log$ + * Revision 1.16 2008/02/07 13:22:51 james + * *** empty log message *** + * * Revision 1.15 2008/02/07 13:19:48 james * *** empty log message *** * @@ -244,32 +247,39 @@ ansi_set_color (ANSI * a, int color) int dif; char buf[16]; int i; - int fg,bg; + int fg, bg; - if ((a->color == ANSI_INVAL) || (color!=a->color)) { - fg=CRT_COLOR_FG(color); - bg=CRT_COLOR_BG(color); + 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 (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); + 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 - ansi_write (a,buf,i); - a->color=color; - } + ansi_write (a, buf, i); + a->color = color; + } } void @@ -341,7 +351,7 @@ ansi_render (ANSI * a, CRT_CA ca) ca.chr = ' '; ansi_set_attr (a, ca.attr); - ansi_set_color(a,ca.color); + ansi_set_color (a, ca.color); ansi_write (a, &ca.chr, 1); @@ -363,39 +373,48 @@ ansi_cls (ANSI * a) crt_cls (&a->crt); ansi_force_attr_normal (a); - ansi_set_color(a,CRT_COLOR_NORMAL); + ansi_set_color (a, CRT_COLOR_NORMAL); ansi_move (a, p); ansi_write (a, "\033[2J", 4); /*different emulators leave cursor in different places after cls differently*/ a->pos.x = ANSI_INVAL; } -int ansi_scroll_up(ANSI *a,CRT_Pos s,CRT_Pos e) +int +ansi_scroll_up (ANSI * a, CRT_Pos s, CRT_Pos e) { -char buf[16]; -int i; -if (s.x) return -1; -if (e.x!=(CRT_COLS-1)) return -1; -if (s.y) return -1; -if (s.y>=a->size.y) return -1; - -ansi_showhide_cursor (a, 1); -i=sprintf(buf,"\033[%d;%dr",s.y+1,e.y+1); -ansi_write(a,buf,i); -i=sprintf(buf,"\033[%d;%dH",e.y+1,0); -ansi_write(a,buf,i); -ansi_write (a, "\033D",2); -ansi_write(a,"\033[r", 3); - -a->pos.x=ANSI_INVAL; - -return 0; + char buf[16]; + int i; + if (s.x) + return -1; + if (e.x != (CRT_COLS - 1)) + return -1; + if (s.y) + return -1; + if (s.y >= a->size.y) + return -1; + + ansi_showhide_cursor (a, 1); + i = sprintf (buf, "\033[%d;%dr", s.y + 1, e.y + 1); + ansi_write (a, buf, i); + i = sprintf (buf, "\033[%d;%dH", e.y + 1, 0); + ansi_write (a, buf, i); + ansi_write (a, "\033D", 2); + ansi_write (a, "\033[r", 3); + + s.y = e.y; + crt_erase (&a->crt, s, e, 1); + + a->pos.x = ANSI_INVAL; + + return 0; } -void ansi_spot_scroll_up(ANSI * a, CRT * c) +void +ansi_spot_scroll_up (ANSI * a, CRT * c) { -int l,n,p; + int l, n, p; l = c->sh.e.x - c->sh.s.x; l++; @@ -407,11 +426,12 @@ int l,n,p; while (n--) { if (memcmp (&c->screen[p], &a->crt.screen[p + CRT_COLS], l)) - return; + return; p += CRT_COLS; } - if (ansi_scroll_up(a,c->sh.s,c->sh.e)) return; + if (ansi_scroll_up (a, c->sh.s, c->sh.e)) + return; n = c->sh.e.y - c->sh.s.y; p = CRT_ADDR_POS (&c->sh.s); @@ -422,21 +442,23 @@ int l,n,p; p += CRT_COLS; } -c->sh.dir=0; //FIXME: horrid hack + c->sh.dir = 0; //FIXME: horrid hack } -void ansi_spot_scroll(ANSI * a, CRT * c) +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; + return; } @@ -449,7 +471,7 @@ ansi_draw (ANSI * a, CRT * c) int o; int hidden_cursor = 0; - ansi_spot_scroll(a,c); + ansi_spot_scroll (a, c); for (p.y = 0; p.y < CRT_ROWS; ++p.y) { @@ -480,7 +502,7 @@ ansi_draw (ANSI * a, CRT * c) 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_set_color (a, CRT_MAKE_COLOR (CRT_COLOR_WHITE, CRT_COLOR_RED)); ansi_move (a, p); ansi_write (a, msg, sizeof (msg)); @@ -521,14 +543,14 @@ ansi_reset (ANSI * a) } void -ansi_flush_escape (ANSI * a, VT102 * v,TTY *t) +ansi_flush_escape (ANSI * a, VT102 * v, TTY * t) { ANSI_Parser *p = &a->parser; int i; for (i = 0; i < p->escape_ptr; ++i) { - vt102_send (v, p->escape_buf[i],t); + vt102_send (v, p->escape_buf[i], t); } p->escape_ptr = 0; @@ -536,26 +558,26 @@ ansi_flush_escape (ANSI * a, VT102 * v,TTY *t) } void -ansi_parse_deckey (ANSI * a, VT102 * v,TTY *t) +ansi_parse_deckey (ANSI * a, VT102 * v, TTY * t) { ANSI_Parser *p = &a->parser; if ((p->escape_buf[1] != '[') && (p->escape_buf[1] != 'O')) { - ansi_flush_escape (a, v,t); + ansi_flush_escape (a, v, t); return; } if ((p->escape_buf[2] >= 'A') || (p->escape_buf[2] <= 'Z')) { - vt102_send (v, KEY_UP + (p->escape_buf[2] - 'A'),t); + vt102_send (v, KEY_UP + (p->escape_buf[2] - 'A'), t); } else if ((p->escape_buf[2] >= 'a') || (p->escape_buf[2] <= 'z')) { - vt102_send (v, KEY_154 + (p->escape_buf[2] - 'a'),t); + vt102_send (v, KEY_154 + (p->escape_buf[2] - 'a'), t); } else { - ansi_flush_escape (a, v,t); + ansi_flush_escape (a, v, t); return; } p->in_escape = 0; @@ -563,22 +585,22 @@ ansi_parse_deckey (ANSI * a, VT102 * v,TTY *t) } void -ansi_parse_ansikey (ANSI * a, VT102 * v,TTY *t) +ansi_parse_ansikey (ANSI * a, VT102 * v, TTY * t) { ANSI_Parser *p = &a->parser; if ((p->escape_buf[1] != '[') || (p->escape_buf[3] != '~')) { - ansi_flush_escape (a, v,t); + ansi_flush_escape (a, v, t); return; } if ((p->escape_buf[2] >= '0') || (p->escape_buf[2] <= '9')) { - vt102_send (v, KEY_180 + (p->escape_buf[2] - '0'),t); + vt102_send (v, KEY_180 + (p->escape_buf[2] - '0'), t); } else { - ansi_flush_escape (a, v,t); + ansi_flush_escape (a, v, t); return; } @@ -589,7 +611,7 @@ ansi_parse_ansikey (ANSI * a, VT102 * v,TTY *t) void -ansi_parse_escape (ANSI * a, VT102 * v,TTY *t) +ansi_parse_escape (ANSI * a, VT102 * v, TTY * t) { ANSI_Parser *p = &a->parser; switch (p->escape_ptr) @@ -604,41 +626,41 @@ ansi_parse_escape (ANSI * a, VT102 * v,TTY *t) case 'O': break; default: - ansi_flush_escape (a, v,t); + ansi_flush_escape (a, v, t); } break; case 3: switch (p->escape_buf[1]) { case 'O': - ansi_parse_deckey (a, v,t); + ansi_parse_deckey (a, v, t); break; case '[': if ((p->escape_buf[2] >= 'A') && (p->escape_buf[2] <= 'Z')) - ansi_parse_deckey (a, v,t); + ansi_parse_deckey (a, v, t); break; default: - ansi_flush_escape (a, v,t); + ansi_flush_escape (a, v, t); } break; case 4: switch (p->escape_buf[1]) { case '[': - ansi_parse_ansikey (a, v,t); + ansi_parse_ansikey (a, v, t); break; default: - ansi_flush_escape (a, v,t); + ansi_flush_escape (a, v, t); } break; case 5: - ansi_flush_escape (a, v,t); + ansi_flush_escape (a, v, t); } } void -ansi_check_escape (ANSI * a, VT102 * v,TTY *t) +ansi_check_escape (ANSI * a, VT102 * v, TTY * t) { ANSI_Parser *p = &a->parser; struct timeval now, diff; @@ -656,24 +678,24 @@ ansi_check_escape (ANSI * a, VT102 * v,TTY *t) /*Time up? */ if (diff.tv_sec || (diff.tv_usec > ANSI_ESCAPE_TIMEOUT)) - ansi_flush_escape (a, v,t); + ansi_flush_escape (a, v, t); } void -ansi_parse_char (ANSI * a, int c, VT102 * v,TTY *t) +ansi_parse_char (ANSI * a, int c, VT102 * v, TTY * t) { ANSI_Parser *p = &a->parser; /*See if it's time to flush the escape*/ - ansi_check_escape (a, v,t); + ansi_check_escape (a, v, t); if (c == 033) { if (p->in_escape) - ansi_flush_escape (a, v,t); + ansi_flush_escape (a, v, t); p->in_escape++; p->escape_ptr = 0; @@ -683,29 +705,29 @@ ansi_parse_char (ANSI * a, int c, VT102 * v,TTY *t) if (p->in_escape) { p->escape_buf[p->escape_ptr++] = c; - ansi_parse_escape (a, v,t); + ansi_parse_escape (a, v, t); } else { - vt102_send (v, c,t); + vt102_send (v, c, t); } } void -ansi_parse (ANSI * a, char *buf, int len, VT102 * v,TTY *t) +ansi_parse (ANSI * a, char *buf, int len, VT102 * v, TTY * t) { while (len--) - ansi_parse_char (a, *(buf++), v,t); + ansi_parse_char (a, *(buf++), v, t); } int -ansi_dispatch (ANSI * a, VT102 * v,TTY *t) +ansi_dispatch (ANSI * a, VT102 * v, TTY * t) { char buf[1024]; int red; - ansi_check_escape (a, v,t); + ansi_check_escape (a, v, t); red = ansi_read (a, buf, sizeof (buf)); @@ -718,12 +740,12 @@ ansi_dispatch (ANSI * a, VT102 * v,TTY *t) #endif #if 0 - if (*buf == 1) - return 1; + if (*buf == 1) + return 1; #endif - ansi_parse (a, buf, red, v,t); + ansi_parse (a, buf, red, v, t); return 0; } diff --git a/src/crt.c b/src/crt.c index 67d8835..a9e6e86 100644 --- a/src/crt.c +++ b/src/crt.c @@ -10,6 +10,9 @@ static char rcsid[] = "$Id$"; /* * $Log$ + * Revision 1.9 2008/02/07 13:22:51 james + * *** empty log message *** + * * Revision 1.8 2008/02/07 13:19:48 james * *** empty log message *** * @@ -47,10 +50,11 @@ crt_erase (CRT * c, CRT_Pos s, CRT_Pos e, int ea) while (ps <= pe) { ps->chr = ' '; - if (ea){ - ps->attr = CRT_ATTR_NORMAL; - ps->color = CRT_COLOR_NORMAL; - } + if (ea) + { + ps->attr = CRT_ATTR_NORMAL; + ps->color = CRT_COLOR_NORMAL; + } ps++; } @@ -64,7 +68,7 @@ crt_cls (CRT * c) int i; crt_erase (c, s, e, 1); - c->sh.dir=0; + c->sh.dir = 0; } void @@ -77,9 +81,9 @@ crt_scroll_up (CRT * c, CRT_Pos s, CRT_Pos e, int ea) s.x = 0; e.x = CRT_COLS - 1; - c->sh.s=s; - c->sh.e=e; - c->sh.dir=-1; + c->sh.s = s; + c->sh.e = e; + c->sh.dir = -1; l = e.x - s.x; l++; @@ -110,9 +114,9 @@ crt_scroll_down (CRT * c, CRT_Pos s, CRT_Pos e, int ea) s.x = 0; e.x = CRT_COLS - 1; - c->sh.s=s; - c->sh.e=e; - c->sh.dir=1; + c->sh.s = s; + c->sh.e = e; + c->sh.dir = 1; l = e.x - s.x; l++; @@ -142,7 +146,7 @@ crt_reset (CRT * c) c->pos.x = 0; c->pos.y = 0; c->hide_cursor = 1; - c->sh.dir=0; + c->sh.dir = 0; } void @@ -159,5 +163,5 @@ crt_insert (CRT * c, CRT_CA ca) c->screen[CRT_ADDR (c->pos.y, c->pos.x)] = ca; - c->sh.dir=0; + c->sh.dir = 0; } diff --git a/src/crt.h b/src/crt.h index e73e891..da5922c 100644 --- a/src/crt.h +++ b/src/crt.h @@ -12,6 +12,9 @@ /* * $Log$ + * Revision 1.6 2008/02/07 13:22:51 james + * *** empty log message *** + * * Revision 1.5 2008/02/07 12:41:06 james * *** empty log message *** * @@ -46,7 +49,7 @@ #define CRT_ATTR_BOLD 0x8 -#define CRT_COLOR_BLACK 0x0 +#define CRT_COLOR_BLACK 0x0 #define CRT_COLOR_RED 0x1 #define CRT_COLOR_GREEN 0x2 #define CRT_COLOR_YELLOW 0x3 @@ -86,7 +89,8 @@ typedef struct } CRT_Pos; -typedef struct { +typedef struct +{ CRT_Pos s; CRT_Pos e; int dir; diff --git a/src/libsympathy.c b/src/libsympathy.c index cf70750..ffe8d16 100644 --- a/src/libsympathy.c +++ b/src/libsympathy.c @@ -11,6 +11,9 @@ static char rcsid[] = /* * $Log$ + * Revision 1.12 2008/02/07 13:26:35 james + * *** empty log message *** + * * Revision 1.11 2008/02/07 13:22:51 james * *** empty log message *** * @@ -129,7 +132,7 @@ testy (void) if (FD_ISSET (t->fd, &rfd)) { - if (vt102_dispatch (v, t)) + if (vt102_dispatch_one (v, t)) break; } diff --git a/src/prototypes.h b/src/prototypes.h index 7ffe3b2..4468fe8 100644 --- a/src/prototypes.h +++ b/src/prototypes.h @@ -1,76 +1,80 @@ /* ansi.c */ -int ansi_read (ANSI * a, void *buf, int n); -void ansi_write (ANSI * a, char *buf, int n); -void ansi_getsize (ANSI * a); -void ansi_move (ANSI * a, CRT_Pos p); -void ansi_showhide_cursor (ANSI * a, int hide); -void ansi_force_attr_normal (ANSI * a); -void ansi_set_color (ANSI * a, int color); -void ansi_set_attr (ANSI * a, int attr); -void ansi_render (ANSI * a, CRT_CA ca); -void ansi_cls (ANSI * a); -void ansi_draw (ANSI * a, CRT * c); -void ansi_reset (ANSI * a); -void ansi_flush_escape (ANSI * a, VT102 * v, TTY * t); -void ansi_parse_deckey (ANSI * a, VT102 * v, TTY * t); -void ansi_parse_ansikey (ANSI * a, VT102 * v, TTY * t); -void ansi_parse_escape (ANSI * a, VT102 * v, TTY * t); -void ansi_check_escape (ANSI * a, VT102 * v, TTY * t); -void ansi_parse_char (ANSI * a, int c, VT102 * v, TTY * t); -void ansi_parse (ANSI * a, char *buf, int len, VT102 * v, TTY * t); -int ansi_dispatch (ANSI * a, VT102 * v, TTY * t); +int ansi_read(ANSI *a, void *buf, int n); +void ansi_write(ANSI *a, char *buf, int n); +void ansi_getsize(ANSI *a); +void ansi_move(ANSI *a, CRT_Pos p); +void ansi_showhide_cursor(ANSI *a, int hide); +void ansi_force_attr_normal(ANSI *a); +void ansi_set_color(ANSI *a, int color); +void ansi_set_attr(ANSI *a, int attr); +void ansi_render(ANSI *a, CRT_CA ca); +void ansi_cls(ANSI *a); +int ansi_scroll_up(ANSI *a, CRT_Pos s, CRT_Pos e); +void ansi_spot_scroll_up(ANSI *a, CRT *c); +void ansi_spot_scroll(ANSI *a, CRT *c); +void ansi_draw(ANSI *a, CRT *c); +void ansi_reset(ANSI *a); +void ansi_flush_escape(ANSI *a, VT102 *v, TTY *t); +void ansi_parse_deckey(ANSI *a, VT102 *v, TTY *t); +void ansi_parse_ansikey(ANSI *a, VT102 *v, TTY *t); +void ansi_parse_escape(ANSI *a, VT102 *v, TTY *t); +void ansi_check_escape(ANSI *a, VT102 *v, TTY *t); +void ansi_parse_char(ANSI *a, int c, VT102 *v, TTY *t); +void ansi_parse(ANSI *a, char *buf, int len, VT102 *v, TTY *t); +int ansi_dispatch(ANSI *a, VT102 *v, TTY *t); /* crt.c */ -void crt_erase (CRT * c, CRT_Pos s, CRT_Pos e, int ea); -void crt_cls (CRT * c); -void crt_scroll_up (CRT * c, CRT_Pos s, CRT_Pos e, int ea); -void crt_scroll_down (CRT * c, CRT_Pos s, CRT_Pos e, int ea); -void crt_reset (CRT * c); -void crt_insert (CRT * c, CRT_CA ca); +void crt_erase(CRT *c, CRT_Pos s, CRT_Pos e, int ea); +void crt_cls(CRT *c); +void crt_scroll_up(CRT *c, CRT_Pos s, CRT_Pos e, int ea); +void crt_scroll_down(CRT *c, CRT_Pos s, CRT_Pos e, int ea); +void crt_reset(CRT *c); +void crt_insert(CRT *c, CRT_CA ca); /* html.c */ -void html_entity (FILE * f, int c); -void html_render (FILE * f, CRT_CA c); -void html_draw (FILE * f, CRT * c); +void html_entity(FILE *f, int c); +void html_render(FILE *f, CRT_CA c); +void html_draw(FILE *f, CRT *c); /* libsympathy.c */ struct termios old; -void testy (void); +void testy(void); /* render.c */ /* version.c */ /* vt102.c */ -void vt102_log_line (VT102 * v, int line); -void vt102_clip_cursor (VT102 * v, CRT_Pos tl, CRT_Pos br); -void vt102_cursor_normalize (VT102 * v); -void vt102_cursor_carriage_return (VT102 * v); -void vt102_cursor_advance_line (VT102 * v); -void vt102_cursor_advance (VT102 * v); -void vt102_do_pending_wrap (VT102 * v); -void vt102_cursor_retard (VT102 * v); -void vt102_reset_tabs (VT102 * v); -void vt102_cursor_advance_tab (VT102 * v); -int vt102_cursor_home (VT102 * v); -int vt102_cursor_absolute (VT102 * v, int x, int y); -int vt102_cursor_relative (VT102 * v, int x, int y); -void vt102_delete_from_line (VT102 * v, CRT_Pos p); -void vt102_insert_into_line (VT102 * v, CRT_Pos p); -void vt102_change_mode (VT102 * v, int private, char *ns, int set); -void vt102_parse_mode_string (VT102 * v, char *buf, int len); -void vt102_change_attr (VT102 * v, char *na); -void vt102_parse_attr_string (VT102 * v, char *buf, int len); -void vt102_save_state (VT102 * v); -void vt102_restore_state (VT102 * v); -void vt102_scs (VT102 * c, int g, int s); -void vt102_parse_esc (VT102 * v, int c); -void vt102_parse_csi (VT102 * v, char *buf, int len); -void vt102_status_line (VT102 * v, char *str); -void vt102_parse_char (VT102 * v, int c, TTY * tty); -int vt102_parse (VT102 * v, char *buf, int len, TTY * t); -void vt102_parser_reset (VT102_parser * p); -void vt102_send (VT102 * v, uint8_t key, TTY * tty); -void vt102_reset (VT102 * v); -int vt102_dispatch (VT102 * v, TTY * tty); -VT102 *vt102_new (void); -void vt102_free (VT102 * v); +void vt102_log_line(VT102 *v, int line); +void vt102_clip_cursor(VT102 *v, CRT_Pos tl, CRT_Pos br); +void vt102_cursor_normalize(VT102 *v); +void vt102_cursor_carriage_return(VT102 *v); +void vt102_cursor_advance_line(VT102 *v); +void vt102_cursor_advance(VT102 *v); +void vt102_do_pending_wrap(VT102 *v); +void vt102_cursor_retard(VT102 *v); +void vt102_reset_tabs(VT102 *v); +void vt102_cursor_advance_tab(VT102 *v); +int vt102_cursor_home(VT102 *v); +int vt102_cursor_absolute(VT102 *v, int x, int y); +int vt102_cursor_relative(VT102 *v, int x, int y); +void vt102_delete_from_line(VT102 *v, CRT_Pos p); +void vt102_insert_into_line(VT102 *v, CRT_Pos p); +void vt102_change_mode(VT102 *v, int private, char *ns, int set); +void vt102_parse_mode_string(VT102 *v, char *buf, int len); +void vt102_change_attr(VT102 *v, char *na); +void vt102_parse_attr_string(VT102 *v, char *buf, int len); +void vt102_save_state(VT102 *v); +void vt102_restore_state(VT102 *v); +void vt102_scs(VT102 *c, int g, int s); +void vt102_parse_esc(VT102 *v, int c); +void vt102_parse_csi(VT102 *v, char *buf, int len); +void vt102_status_line(VT102 *v, char *str); +void vt102_parse_char(VT102 *v, int c, TTY *tty); +int vt102_parse(VT102 *v, char *buf, int len, TTY *t); +void vt102_parser_reset(VT102_parser *p); +void vt102_send(VT102 *v, uint8_t key, TTY *tty); +void vt102_reset(VT102 *v); +int vt102_dispatch(VT102 *v, TTY *tty); +int vt102_dispatch_one(VT102 *v, TTY *tty); +VT102 *vt102_new(void); +void vt102_free(VT102 *v); /* tty.c */ -TTY *tty_new_test (void); -int tty_read (TTY * t, void *buf, int len); -int tty_write (TTY * t, void *buf, int len); -void tty_free (TTY * t); +TTY *tty_new_test(void); +int tty_read(TTY *t, void *buf, int len); +int tty_write(TTY *t, void *buf, int len); +void tty_free(TTY *t); diff --git a/src/vt102.c b/src/vt102.c index f120d32..f3101bb 100644 --- a/src/vt102.c +++ b/src/vt102.c @@ -10,6 +10,9 @@ static char rcsid[] = "$Id$"; /* * $Log$ + * Revision 1.23 2008/02/07 13:26:35 james + * *** empty log message *** + * * Revision 1.22 2008/02/07 13:22:51 james * *** empty log message *** * @@ -1393,6 +1396,25 @@ vt102_dispatch (VT102 * v, TTY * tty) return 0; } + +int +vt102_dispatch_one (VT102 * v, TTY * tty) +{ + char buf; + int red; + + red = tty_read (tty, &buf, sizeof (buf)); + + if (red < 0) + return -1; + if (!red) + return 0; + + vt102_parse_char (v, buf, tty); + + return 0; +} + VT102 * vt102_new (void) { -- 2.30.2