X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fvt102.c;h=2cae51d43cd3d5c70d9106dfe6a47935bc84efe0;hb=3684640e6bdec97cb1b60a34d03e8cde63149215;hp=0253cdfdb76b1a9087212047e0ab05f303b04591;hpb=0daf8487b7ce04368a0a8e33231a547161f444e7;p=sympathy.git diff --git a/src/vt102.c b/src/vt102.c index 0253cdf..2cae51d 100644 --- a/src/vt102.c +++ b/src/vt102.c @@ -10,6 +10,18 @@ static char rcsid[] = "$Id$"; /* * $Log$ + * Revision 1.21 2008/02/07 12:21:16 james + * *** empty log message *** + * + * Revision 1.20 2008/02/07 12:16:04 james + * *** empty log message *** + * + * Revision 1.19 2008/02/07 11:27:02 james + * *** empty log message *** + * + * Revision 1.18 2008/02/07 01:59:25 james + * *** empty log message *** + * * Revision 1.17 2008/02/07 01:58:28 james * *** empty log message *** * @@ -457,6 +469,7 @@ vt102_insert_into_line (VT102 * v, CRT_Pos p) v->crt.screen[CRT_ADDR (p.y, v->bottom_margin.x)].chr = ' '; v->crt.screen[CRT_ADDR (p.y, v->bottom_margin.x)].attr = CRT_ATTR_NORMAL; + v->crt.screen[CRT_ADDR (p.y, v->bottom_margin.x)].color = CRT_COLOR_NORMAL; } @@ -489,7 +502,7 @@ vt102_change_mode (VT102 * v, int private, char *ns, int set) case VT102_PRIVATE_MODE_CURSOR_MODE: if (v->application_keypad_mode) v->private_modes[m] = 0; -#if 1 +#if 0 fprintf (stderr, "APPLICATION CURSOR MODE %d wanted %d\n", v->private_modes[m],set); #endif @@ -576,6 +589,7 @@ vt102_change_attr (VT102 * v, char *na) { case 0: v->attr = CRT_ATTR_NORMAL; + v->color= CRT_COLOR_NORMAL; break; case 1: v->attr |= CRT_ATTR_BOLD; @@ -602,6 +616,61 @@ vt102_change_attr (VT102 * v, char *na) case 27: v->attr &= ~CRT_ATTR_REVERSE; break; + case 30: + case 31: + case 32: + case 33: + case 34: + case 35: + case 36: + case 37: + v->color &= ~CRT_COLOR_FG_MASK; + v->color |= ((a-30) << CRT_COLOR_FG_SHIFT) & CRT_COLOR_FG_MASK; + break; + case 90: + case 91: + case 92: + case 93: + case 94: + case 95: + case 96: + case 97: + v->color &= ~CRT_COLOR_FG_MASK; + v->color |= (((a-90)|CRT_COLOR_INTENSITY) << CRT_COLOR_FG_SHIFT) & CRT_COLOR_FG_MASK; + break; + case 39: + case 99: + v->color &= ~CRT_COLOR_FG_MASK; + v->color |= (CRT_FGCOLOR_NORMAL << CRT_COLOR_FG_SHIFT) & CRT_COLOR_FG_MASK; + break; + case 40: + case 41: + case 42: + case 43: + case 44: + case 45: + case 46: + case 47: + v->color &= ~CRT_COLOR_BG_MASK; + v->color |= ((a-40) << CRT_COLOR_BG_SHIFT) & CRT_COLOR_BG_MASK; + break; + case 100: + case 101: + case 102: + case 103: + case 104: + case 105: + case 106: + case 107: + v->color &= ~CRT_COLOR_BG_MASK; + v->color |= (((a-100)|CRT_COLOR_INTENSITY) << CRT_COLOR_BG_SHIFT) & CRT_COLOR_BG_MASK; + break; + case 49: + case 109: + v->color &= ~CRT_COLOR_BG_MASK; + v->color |= (CRT_BGCOLOR_NORMAL << CRT_COLOR_BG_SHIFT) & CRT_COLOR_BG_MASK; + break; + default: ; #if 0 @@ -656,6 +725,7 @@ vt102_save_state (VT102 * v) { v->saved.pos = v->pos; v->saved.attr = v->attr; + v->saved.color= v->color; v->saved.origin_mode = v->private_modes[VT102_PRIVATE_MODE_ORIGIN_MODE]; } @@ -664,6 +734,7 @@ vt102_restore_state (VT102 * v) { v->pos = v->saved.pos; v->attr = v->saved.attr; + v->color= v->saved.color; v->private_modes[VT102_PRIVATE_MODE_ORIGIN_MODE] = v->saved.origin_mode; vt102_cursor_normalize (v); v->pending_wrap = 0; @@ -927,6 +998,7 @@ vt102_status_line (VT102 * v, char *str) while (i--) { ca->attr = CRT_ATTR_REVERSE; + ca->color=CRT_COLOR_NORMAL; ca->chr = *str; if (*str) str++; @@ -937,7 +1009,7 @@ vt102_status_line (VT102 * v, char *str) void -vt102_parse_char (VT102 * v, int c) +vt102_parse_char (VT102 * v, int c,TTY *tty) { VT102_parser *p = &v->parser; @@ -990,7 +1062,7 @@ vt102_parse_char (VT102 * v, int c) /*EOT*/ case 4: break; /*ENQ*/ case 5: - tty_write (v->tty, "vt102", 5); + tty_write (tty, "vt102", 5); break; /*ACK*/ case 6: /*BEL*/ case 7: @@ -1047,6 +1119,7 @@ vt102_parse_char (VT102 * v, int c) v->crt.screen[CRT_ADDR_POS (&v->pos)].chr = c; v->crt.screen[CRT_ADDR_POS (&v->pos)].attr = v->attr; + v->crt.screen[CRT_ADDR_POS (&v->pos)].color = v->color; vt102_cursor_advance (v); } } @@ -1064,10 +1137,10 @@ vt102_parse_char (VT102 * v, int c) vt102_status_line (v, "VT102 foo bar baz I'm the urban spaceman baby"); } -vt102_parse (VT102 * v, char *buf, int len) +vt102_parse (VT102 * v, char *buf, int len,TTY *t) { while (len--) - vt102_parse_char (v, *(buf++)); + vt102_parse_char (v, *(buf++),t); } @@ -1082,7 +1155,7 @@ vt102_parser_reset (VT102_parser * p) void -vt102_send (VT102 * v, uint8_t key) +vt102_send (VT102 * v, uint8_t key,TTY *tty) { uint8_t c; #if 0 @@ -1090,7 +1163,7 @@ vt102_send (VT102 * v, uint8_t key) #endif if ((key > 31) && (key < 127)) { - tty_write (v->tty, &key, 1); + tty_write (tty, &key, 1); return; } @@ -1109,14 +1182,14 @@ vt102_send (VT102 * v, uint8_t key) /*LF*/ case 10: /*VT*/ case 11: /*FF*/ case 12: - tty_write (v->tty, &key, 1); + tty_write (tty, &key, 1); break; /*CR*/ case 13: - tty_write (v->tty, &key, 1); + tty_write (tty, &key, 1); if (v->modes[VT102_MODE_NEWLINE_MODE]) { c = 10; - tty_write (v->tty, &c, 1); + tty_write (tty, &c, 1); } break; /*SO*/ case 14: @@ -1132,7 +1205,7 @@ vt102_send (VT102 * v, uint8_t key) /*CAN*/ case 24: /*EM*/ case 25: /*SUB*/ case 26: - tty_write (v->tty, &key, 1); + tty_write (tty, &key, 1); break; /*ESC*/ case 27: /*FS*/ case 28: @@ -1140,7 +1213,7 @@ vt102_send (VT102 * v, uint8_t key) /*RS*/ case 30: /*US*/ case 31: /*DEL*/ case 127: - tty_write (v->tty, &key, 1); + tty_write (tty, &key, 1); break; case KEY_UP: @@ -1154,12 +1227,12 @@ vt102_send (VT102 * v, uint8_t key) if (v->private_modes[VT102_PRIVATE_MODE_CURSOR_MODE]) { uint8_t buf[] = { 033, 'O', 'A' + (key - KEY_UP) }; - tty_write (v->tty, &buf, sizeof (buf)); + tty_write (tty, &buf, sizeof (buf)); } else { uint8_t buf[] = { 033, '[', 'A' + (key - KEY_UP) }; - tty_write (v->tty, &buf, sizeof (buf)); + tty_write (tty, &buf, sizeof (buf)); } break; case KEY_STAR: @@ -1180,7 +1253,7 @@ vt102_send (VT102 * v, uint8_t key) if (v->application_keypad_mode) { uint8_t buf[] = { 033, 'O', 'a' + (key - KEY_154) }; - tty_write (v->tty, &buf, sizeof (buf)); + tty_write (tty, &buf, sizeof (buf)); } else { @@ -1203,23 +1276,23 @@ vt102_send (VT102 * v, uint8_t key) [KEY_9] = '9' }; - tty_write (v->tty, &kpoff[key], 1); + tty_write (tty, &kpoff[key], 1); } break; case KEY_ENTER: if (v->application_keypad_mode) { uint8_t buf[] = { 033, 'O', 'M' }; - tty_write (v->tty, &buf, sizeof (buf)); + tty_write (tty, &buf, sizeof (buf)); } else { c = 13; - tty_write (v->tty, &c, 1); + tty_write (tty, &c, 1); if (v->modes[VT102_MODE_NEWLINE_MODE]) { c = 10; - tty_write (v->tty, &c, 1); + tty_write (tty, &c, 1); } } break; @@ -1229,7 +1302,7 @@ vt102_send (VT102 * v, uint8_t key) case KEY_PF4: { uint8_t buf[] = { 033, 'O', 'P' + (key - KEY_PF1) }; - tty_write (v->tty, &buf, sizeof (buf)); + tty_write (tty, &buf, sizeof (buf)); } break; case KEY_INSERT: @@ -1238,7 +1311,7 @@ vt102_send (VT102 * v, uint8_t key) case KEY_PGDN: { uint8_t buf[] = { 033, '[', '0' + (key - KEY_180), '~' }; - tty_write (v->tty, &buf, sizeof (buf)); + tty_write (tty, &buf, sizeof (buf)); } break; } @@ -1253,6 +1326,8 @@ vt102_reset (VT102 * v) vt102_parser_reset (p); crt_cls (&v->crt); + v->attr=CRT_ATTR_NORMAL; + v->color=CRT_COLOR_NORMAL; v->application_keypad_mode = 0; @@ -1286,12 +1361,12 @@ vt102_reset (VT102 * v) } int -vt102_dispatch (VT102 * v) +vt102_dispatch (VT102 * v,TTY *tty) { char buf[1024]; int red; - red = tty_read (v->tty, buf, sizeof (buf)); + red = tty_read (tty, buf, sizeof (buf)); if (red < 0) return -1; @@ -1299,13 +1374,13 @@ vt102_dispatch (VT102 * v) return 0; - vt102_parse (v, buf, red); + vt102_parse (v, buf, red,tty); return 0; } VT102 * -vt102_new (TTY * t) +vt102_new (void) { VT102 *v; @@ -1313,7 +1388,6 @@ vt102_new (TTY * t) vt102_reset (v); - v->tty = t; return v; }