summaryrefslogtreecommitdiff
path: root/tools/generate-input-keycodes.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tools/generate-input-keycodes.sh')
-rwxr-xr-xtools/generate-input-keycodes.sh71
1 files changed, 71 insertions, 0 deletions
diff --git a/tools/generate-input-keycodes.sh b/tools/generate-input-keycodes.sh
new file mode 100755
index 0000000..96f28ff
--- /dev/null
+++ b/tools/generate-input-keycodes.sh
@@ -0,0 +1,71 @@
+#!/bin/bash
+
+INPUT_HEADER="/usr/include/linux/input.h"
+OUTPUT_ENUM="linux-input-enum.h"
+OUTPUT_MAP="linux-input-keycodes.h"
+SKIP="KEY_MIN_INTERESTING KEY_MAX KEY_CNT"
+
+if [ ! -e "$INPUT_HEADER" ]; then
+ echo "Can't find input header: $INPUT_HEADER" >&2
+ exit 1
+fi
+
+cat > "$OUTPUT_ENUM" <<EOF
+#ifndef foolinuxinputenumhfoo
+#define foolinuximputenumhfoo
+
+/* AUTOGENERATED: DO NOT EDIT */
+
+enum linux_input_keyval {
+EOF
+
+cat > "$OUTPUT_MAP" <<EOF
+#ifndef foolinuxinputkeycodesfoo
+#define foolinuxinputkeycodesfoo
+
+/* AUTOGENERATED: DO NOT EDIT */
+
+#include "$OUTPUT_ENUM"
+
+struct linux_input_keycode {
+ const char *name;
+ enum linux_input_keyval value;
+ bool alias;
+ GtkWidget *img;
+};
+
+struct linux_input_keycode linux_input_keycodes[] = {
+EOF
+
+cat "$INPUT_HEADER" | grep "^#define[[:space:]]*KEY_" | while read DEF NAME VALUE COMMENTS; do
+ for WORD in $SKIP; do
+ if [ "$NAME" = "$WORD" ]; then
+ continue
+ fi
+ done
+
+ if [ "${VALUE##KEY_}" != "$VALUE" ]; then
+ ALIAS="true"
+ else
+ ALIAS="false"
+ fi
+
+ echo " $NAME = $VALUE," >> "$OUTPUT_ENUM"
+ echo " { \"$NAME\", $NAME, $ALIAS, NULL }," >> "$OUTPUT_MAP"
+done
+
+cat >> "$OUTPUT_ENUM" << EOF
+};
+#endif
+EOF
+
+cat >> "$OUTPUT_MAP" << EOF
+ { NULL, 0, false, NULL }
+};
+#endif
+EOF
+
+
+exit 0
+
+