X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=madtty%2Fmadtty.c;fp=madtty%2Frote.c;h=0d1eba640bc8ea479ae06132e34c7a20829dbb95;hb=7bbe8b9e43d79660594f369b25a1640799e9612d;hp=83dd331d3343e9ad72ebf40822d0f30cfcd19e81;hpb=7e70c122b103e1bb8f4ec1f641249e2b42dc034f;p=apps%2Fmadtty.git diff --git a/madtty/rote.c b/madtty/madtty.c similarity index 83% rename from madtty/rote.c rename to madtty/madtty.c index 83dd331..0d1eba6 100644 --- a/madtty/rote.c +++ b/madtty/madtty.c @@ -259,3 +259,49 @@ int rote_vt_get_pty_fd(RoteTerm *rt) { return rt->pd->pty; } +static const char *keytable[KEY_MAX+1]; +static int initialized = 0; + +static void keytable_init(); + +void rote_vt_keypress(RoteTerm *rt, int keycode) { + char c = (char) keycode; + + if (!initialized) keytable_init(); + + if (keycode >= 0 && keycode < KEY_MAX && keytable[keycode]) + rote_vt_write(rt, keytable[keycode], strlen(keytable[keycode])); + else + rote_vt_write(rt, &c, 1); /* not special, just write it */ +} + +static void keytable_init() { + initialized = 1; + memset(keytable, 0, KEY_MAX+1 * sizeof(const char*)); + + keytable['\n'] = "\r"; + keytable[KEY_UP] = "\e[A"; + keytable[KEY_DOWN] = "\e[B"; + keytable[KEY_RIGHT] = "\e[C"; + keytable[KEY_LEFT] = "\e[D"; + keytable[KEY_BACKSPACE] = "\b"; + keytable[KEY_HOME] = "\e[1~"; + keytable[KEY_IC] = "\e[2~"; + keytable[KEY_DC] = "\e[3~"; + keytable[KEY_END] = "\e[4~"; + keytable[KEY_PPAGE] = "\e[5~"; + keytable[KEY_NPAGE] = "\e[6~"; + keytable[KEY_SUSPEND] = "\x1A"; /* Ctrl+Z gets mapped to this */ + keytable[KEY_F(1)] = "\e[[A"; + keytable[KEY_F(2)] = "\e[[B"; + keytable[KEY_F(3)] = "\e[[C"; + keytable[KEY_F(4)] = "\e[[D"; + keytable[KEY_F(5)] = "\e[[E"; + keytable[KEY_F(6)] = "\e[17~"; + keytable[KEY_F(7)] = "\e[18~"; + keytable[KEY_F(8)] = "\e[19~"; + keytable[KEY_F(9)] = "\e[20~"; + keytable[KEY_F(10)] = "\e[21~"; +} + +