summaryrefslogtreecommitdiffstats
path: root/lib/readkey.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2007-07-05 18:02:13 +0200
committerSascha Hauer <sha@octopus.labnet.pengutronix.de>2007-07-05 18:02:13 +0200
commit4b07af6730d2811363f158f5175138116038f7b9 (patch)
tree206044270884f80204a2da69e02ca3b6f5803185 /lib/readkey.c
parentd08c60e9d77dc0f83946cd702d383451865e66dd (diff)
downloadbarebox-4b07af6730d2811363f158f5175138116038f7b9.tar.gz
barebox-4b07af6730d2811363f158f5175138116038f7b9.tar.xz
svn_rev_643
structure cleanup
Diffstat (limited to 'lib/readkey.c')
-rw-r--r--lib/readkey.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/lib/readkey.c b/lib/readkey.c
new file mode 100644
index 0000000000..d4e86ed3eb
--- /dev/null
+++ b/lib/readkey.c
@@ -0,0 +1,58 @@
+
+#include <common.h>
+#include <linux/ctype.h>
+#include <readkey.h>
+
+struct esc_cmds {
+ const char *seq;
+ char val;
+};
+
+static const struct esc_cmds esccmds[] = {
+ {"OA", KEY_UP}, // cursor key Up
+ {"OB", KEY_DOWN}, // cursor key Down
+ {"OC", KEY_RIGHT}, // Cursor Key Right
+ {"OD", KEY_LEFT}, // cursor key Left
+ {"OH", KEY_HOME}, // Cursor Key Home
+ {"OF", KEY_END}, // Cursor Key End
+ {"[A", KEY_UP}, // cursor key Up
+ {"[B", KEY_DOWN}, // cursor key Down
+ {"[C", KEY_RIGHT}, // Cursor Key Right
+ {"[D", KEY_LEFT}, // cursor key Left
+ {"[H", KEY_HOME}, // Cursor Key Home
+ {"[F", KEY_END}, // Cursor Key End
+ {"[1~", KEY_HOME}, // Cursor Key Home
+ {"[2~", KEY_INSERT}, // Cursor Key Insert
+ {"[3~", KEY_DEL}, // Cursor Key Delete
+ {"[4~", KEY_END}, // Cursor Key End
+ {"[5~", KEY_PAGEUP}, // Cursor Key Page Up
+ {"[6~", KEY_PAGEDOWN},// Cursor Key Page Down
+};
+
+char read_key(void)
+{
+ char c;
+ char esc[5];
+ c = getc();
+
+ if (c == 27) {
+ int i = 0;
+ esc[i++] = getc();
+ esc[i++] = getc();
+ if (isdigit(esc[1])) {
+ while(1) {
+ esc[i] = getc();
+ if (esc[i++] == '~')
+ break;
+ }
+ }
+ esc[i] = 0;
+ for (i = 0; i < 18; i++){
+ if (!strcmp(esc, esccmds[i].seq))
+ return esccmds[i].val;
+ }
+ return -1;
+ }
+ return c;
+}
+