aboutsummaryrefslogtreecommitdiffstats
path: root/src/vt102.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vt102.c')
-rw-r--r--src/vt102.c173
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);
}