summaryrefslogtreecommitdiffstats
path: root/src/input.cpp
diff options
context:
space:
mode:
authorJon Santmyer <jon@jonsantmyer.com>2022-06-22 17:41:59 -0400
committerJon Santmyer <jon@jonsantmyer.com>2022-06-22 17:41:59 -0400
commit5e3a2492c7bb73daa4e27398daaf490d09980ff3 (patch)
tree75178d823d596b6a898002c3f1d45b9ceede0e1e /src/input.cpp
downloadsystemviewer-5e3a2492c7bb73daa4e27398daaf490d09980ff3.tar.gz
systemviewer-5e3a2492c7bb73daa4e27398daaf490d09980ff3.tar.bz2
systemviewer-5e3a2492c7bb73daa4e27398daaf490d09980ff3.zip
Base system viewer with data loaded from csv files
Diffstat (limited to 'src/input.cpp')
-rw-r--r--src/input.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/input.cpp b/src/input.cpp
new file mode 100644
index 0000000..5cbedb2
--- /dev/null
+++ b/src/input.cpp
@@ -0,0 +1,37 @@
+#include "input.hpp"
+namespace input {
+
+int getcode() {
+ int r = 0;
+ char c;
+ if(read(STDIN_FILENO, &c, 1) != 1) return -1;
+ if(c == '\x1b') {
+ char seq[3];
+ if(read(STDIN_FILENO, &seq[0], 1) != 1) return '\x1b';
+ if(read(STDIN_FILENO, &seq[1], 1) != 1) return '\x1b';
+ if(seq[0] == '[') {
+ if(seq[1] >= 0 && seq[1] <= '9') {
+ if(read(STDIN_FILENO, &seq[2], 1) != 1) return '\x1b';
+ if(seq[2] == '~') {
+ switch(seq[1]) {
+ case '1':
+ case '7': return CTRL_KEY_HOME;
+ case '4':
+ case '8': return CTRL_KEY_END;
+ default: return CTRL_RANGE_START + seq[1] + 20;
+ }
+ }
+ }else{
+ switch(seq[1]) {
+ default: return CTRL_RANGE_START + seq[1];
+ }
+ }
+ }else if(seq[0] == 'O') {
+ return CTRL_RANGE_START + seq[1];
+ }
+ return '\x1b';
+ }else{
+ return c;
+ }
+}
+}