From 28ada307834eebe27c17c138ca23fd46b1c6bd16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=BCseyin=20ASLIT=C3=9CRK?= Date: Sat, 23 Nov 2019 10:47:50 +0300 Subject: [PATCH] Userland: Add keymap program. --- Userland/keymap.cpp | 78 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 Userland/keymap.cpp diff --git a/Userland/keymap.cpp b/Userland/keymap.cpp new file mode 100644 index 00000000000..add55f43656 --- /dev/null +++ b/Userland/keymap.cpp @@ -0,0 +1,78 @@ +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +char* read_map(const JsonObject& json, const String& name) +{ + char* map = new char[80]; + + auto map_arr = json.get(name).as_array(); + for(int i=0; iopen(CIODevice::ReadOnly)) { + fprintf(stderr, "Failed to open %s: %s\n", filename.characters(), file->error_string()); + return 1; + } + + auto file_contents = file->read_all(); + auto json = JsonValue::from_string(file_contents).as_object(); + + char* map = read_map(json, "map"); + char* shift_map = read_map(json, "shift_map"); + char* alt_map = read_map(json, "alt_map"); + + return syscall(SC_setkeymap, map, shift_map, alt_map); +} + +int main(int argc, char** argv) +{ + if (argc != 2) { + fprintf(stderr, "usage: keymap \n"); + return 0; + } + + String filename = argv[1]; + int ret_val = read_map_from_file(filename); + + if(ret_val == -EPERM) + fprintf(stderr, "Permission denied.\n"); + + if(ret_val == 0) + fprintf(stderr, "New keymap loaded from \"%s\".\n", filename.characters()); + + return ret_val; +} \ No newline at end of file