diff options
Diffstat (limited to 'src/vt102.c')
-rw-r--r-- | src/vt102.c | 173 |
1 files changed, 95 insertions, 78 deletions
diff --git a/src/vt102.c b/src/vt102.c index 000ef7b..713ff42 100644 --- a/src/vt102.c +++ b/src/vt102.c @@ -10,6 +10,9 @@ static char rcsid[] = "$Id$"; /* * $Log$ + * Revision 1.12 2008/02/07 00:39:13 james + * *** empty log message *** + * * Revision 1.11 2008/02/06 20:26:58 james * *** empty log message *** * @@ -463,6 +466,12 @@ vt102_change_mode (VT102 * v, int private, char *ns, int set) v->private_modes[m] = set; switch (m) { + case VT102_PRIVATE_MODE_CURSOR_MODE: + if (v->application_keypad_mode) + v->private_modes[m] = 0; + fprintf (stderr, "APPLICATION CURSOR MODE %d\n", + v->private_modes[m]); + break; case VT102_PRIVATE_MODE_ORIGIN_MODE: vt102_cursor_home (v); break; @@ -674,10 +683,10 @@ vt102_parse_esc (VT102 * v, int c) vt102_restore_state (v); break; case '=': - v->application_keypad_mode=1; + v->application_keypad_mode = 1; break; case '>': - v->application_keypad_mode=0; + v->application_keypad_mode = 0; break; default: #if 0 @@ -905,6 +914,7 @@ vt102_parse_char (VT102 * v, int c) { VT102_parser *p = &v->parser; + #if 0 fprintf (stderr, "char %c pc %d %d %d %d %d\n", (c < 32) ? 32 : c, c, p->in_csi, p->in_escape, v->pos.x, v->pos.y); @@ -1013,10 +1023,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) { -while (len--) - vt102_parse_char(v,*(buf++)); + while (len--) + vt102_parse_char (v, *(buf++)); } @@ -1033,9 +1043,10 @@ void vt102_send (VT102 * v, uint8_t key) { uint8_t c; - if ((key > 31) || (key < 127)) + fprintf(stderr,"vts: %d(%c)\n",key,(key>31)?key:' '); + if ((key > 31) && (key < 127)) { - tty_write (v->t, &key, 1); + tty_write (v->tty, &key, 1); return; } @@ -1054,14 +1065,14 @@ vt102_send (VT102 * v, uint8_t key) /*LF*/ case 10: /*VT*/ case 11: /*FF*/ case 12: - tty_write (v->t, &key, 1); + tty_write (v->tty, &key, 1); break; /*CR*/ case 13: - tty_write (v->t, &key, 1); + tty_write (v->tty, &key, 1); if (v->modes[VT102_MODE_NEWLINE_MODE]) { c = 10; - tty_write (v->t, &c, 1); + tty_write (v->tty, &c, 1); } break; /*SO*/ case 14: @@ -1077,7 +1088,7 @@ vt102_send (VT102 * v, uint8_t key) /*CAN*/ case 24: /*EM*/ case 25: /*SUB*/ case 26: - tty_write (v->t, &key, 1); + tty_write (v->tty, &key, 1); break; /*ESC*/ case 27: /*FS*/ case 28: @@ -1085,24 +1096,33 @@ vt102_send (VT102 * v, uint8_t key) /*RS*/ case 30: /*US*/ case 31: /*DEL*/ case 127: - tty_write (v->t, &key, 1); + tty_write (v->tty, &key, 1); break; case KEY_UP: case KEY_DOWN: case KEY_RIGHT: case KEY_LEFT: + case KEY_HOME: + case KEY_MIDDLE: + case KEY_END: + if (v->private_modes[VT102_PRIVATE_MODE_CURSOR_MODE]) { - uint8_t buf[] = { 033, '[', 'A' + (key - KEY_UP) }; - tty_write (v->t, &key, sizeof (buf)); + uint8_t buf[] = { 033, 'O', 'A' + (key - KEY_UP) }; + tty_write (v->tty, &buf, sizeof (buf)); } else { - uint8_t buf[] = { 033, '[', 'O' + (key - KEY_UP) }; - tty_write (v->t, &key, sizeof (buf)); + uint8_t buf[] = { 033, '[', 'A' + (key - KEY_UP) }; + tty_write (v->tty, &buf, sizeof (buf)); } break; + case KEY_STAR: + case KEY_PLUS: + case KEY_COMMA: + case KEY_PERIOD: + case KEY_DIVIDE: case KEY_0: case KEY_1: case KEY_2: @@ -1115,65 +1135,47 @@ vt102_send (VT102 * v, uint8_t key) case KEY_9: if (v->application_keypad_mode) { - uint8_t buf[] = { 033, 'O', 'p' + (key - KEY_0) }; - tty_write (v->t, &key, sizeof (buf)); - } - else - { - c = '0' + (key - KEY_0); - tty_write (v->t, &c, 1); - } - break; - case KEY_MINUS: - if (v->application_keypad_mode) - { - uint8_t buf[] = { 033, 'O', 'm' }; - tty_write (v->t, &key, sizeof (buf)); - } - else - { - c = '-'; - tty_write (v->t, &c, 1); - } - break; - case KEY_COMMA: - if (v->application_keypad_mode) - { - uint8_t buf[] = { 033, 'O', 'l' }; - tty_write (v->t, &key, sizeof (buf)); + uint8_t buf[] = { 033, 'O', 'a' + (key - KEY_154) }; + tty_write (v->tty, &buf, sizeof (buf)); } else { - c = ','; - tty_write (v->t, &c, 1); - } - break; - case KEY_PERIOD: - if (v->application_keypad_mode) - { - uint8_t buf[] = { 033, 'O', 'n' }; - tty_write (v->t, &key, sizeof (buf)); - } - else - { - c = '.'; - tty_write (v->t, &c, 1); + static char kpoff[KEY_NUM] = { + [KEY_STAR] = '*', + [KEY_PLUS] = '+', + [KEY_COMMA] = ',', + [KEY_MINUS] = '-', + [KEY_PERIOD] = '.', + [KEY_DIVIDE] = '/', + [KEY_0] = '0', + [KEY_1] = '1', + [KEY_2] = '2', + [KEY_3] = '3', + [KEY_4] = '4', + [KEY_5] = '5', + [KEY_6] = '6', + [KEY_7] = '7', + [KEY_8] = '8', + [KEY_9] = '9' + }; + + tty_write (v->tty, &kpoff[key], 1); } break; case KEY_ENTER: if (v->application_keypad_mode) { uint8_t buf[] = { 033, 'O', 'M' }; - tty_write (v->t, &key, sizeof (buf)); + tty_write (v->tty, &buf, sizeof (buf)); } else { c = 13; - tty_write (v->t, &c, 1); + tty_write (v->tty, &c, 1); if (v->modes[VT102_MODE_NEWLINE_MODE]) { c = 10; - tty_write (v->t, &c, 1); + tty_write (v->tty, &c, 1); } } break; @@ -1183,10 +1185,18 @@ vt102_send (VT102 * v, uint8_t key) case KEY_PF4: { uint8_t buf[] = { 033, 'O', 'P' + (key - KEY_PF1) }; - tty_write (v->t, &key, sizeof (buf)); + tty_write (v->tty, &buf, sizeof (buf)); + } + break; + case KEY_INSERT: + case KEY_DELETE: + case KEY_PGUP: + case KEY_PGDN: + { + uint8_t buf[] = { 033, '[', '0' + (key - KEY_180), '~' }; + tty_write (v->tty, &buf, sizeof (buf)); } break; - } } @@ -1200,7 +1210,7 @@ vt102_reset (VT102 * v) crt_cls (&v->crt); - v->application_keypad_mode=0; + v->application_keypad_mode = 0; v->current_line = v->pos; v->pending_wrap = 0; @@ -1231,34 +1241,41 @@ vt102_reset (VT102 * v) } -int vt102_dispatch(VT102 *v) +int +vt102_dispatch (VT102 * v) { -char buf[1024]; -int red; + char buf[1024]; + int red; -red=tty_read(v->t,buf,sizeof(buf)); -if (red<0) return -1; -if (!red) return 0; + red = tty_read (v->tty, buf, sizeof (buf)); -vt102_parse(v,buf,red); + if (red < 0) + return -1; + if (!red) + return 0; + + + vt102_parse (v, buf, red); -return 0; + return 0; } -VT102 *vt102_new(TTY *t) +VT102 * +vt102_new (TTY * t) { -VT102 *v; + VT102 *v; -v=(VT102 *) malloc(sizeof(VT102)); + v = (VT102 *) malloc (sizeof (VT102)); -vt102_reset(v); + vt102_reset (v); -v->tty=t; + v->tty = t; -return v; + return v; } -void vt102_free(VT102 *v) +void +vt102_free (VT102 * v) { -free(v); + free (v); } |