[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[tyndur-devel] [PATCH 2/3] vterm: Tastaturbelegung aenderbar machen
+ vterm: Ueber die Datei vterm:/keymap kann die Tastaturbelegung
veraendert werden
Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx>
---
src/modules/vterm/include/keymap.h | 18 +++++++++++++
src/modules/vterm/keymap.c | 50 ++++++++++++++++++++++++++++++++++++
src/modules/vterm/lostio.c | 10 +++++++
src/modules/vterm/vterm.c | 4 +++
src/modules/vterm/vterm.h | 1 +
5 files changed, 83 insertions(+), 0 deletions(-)
diff --git a/src/modules/vterm/include/keymap.h b/src/modules/vterm/include/keymap.h
index 668067e..dcbc0ba 100644
--- a/src/modules/vterm/include/keymap.h
+++ b/src/modules/vterm/include/keymap.h
@@ -37,6 +37,7 @@
#define _KEYMAP_H_
#include <stdint.h>
#include <stddef.h>
+#include <lostio.h>
/**
* Eintrag in der Keymap
@@ -55,5 +56,22 @@ typedef struct keymap_entry {
*/
keymap_entry_t* keymap_get(uint8_t keycode);
+/**
+ * Legt die vterm:/keymap im Verzeichnisbaum an
+ */
+void keymap_init(void);
+
+/**
+ * LostIO-Handller um die Tastaturbelegung zu lesen
+ */
+size_t keymap_read(lostio_filehandle_t* file, void* buf,
+ size_t blocksize, size_t blockcount);
+
+/**
+ * LostIO-Handler um die Tastaturbelegung zu aendern
+ */
+size_t keymap_write(lostio_filehandle_t* file, size_t blocksize,
+ size_t blockcount, void* data);
+
#endif // ifndef _KEYMAP_H_
diff --git a/src/modules/vterm/keymap.c b/src/modules/vterm/keymap.c
index 4b5846f..c1881bd 100644
--- a/src/modules/vterm/keymap.c
+++ b/src/modules/vterm/keymap.c
@@ -33,6 +33,10 @@
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include <io.h>
+#include <string.h>
+
+#include "vterm.h"
#include "keymap.h"
keymap_entry_t keymap[] = {
@@ -176,3 +180,49 @@ keymap_entry_t* keymap_get(uint8_t keycode)
return &keymap[keycode];
}
+/**
+ * Legt die vterm:/keymap im Verzeichnisbaum an
+ */
+void keymap_init(void)
+{
+ stdout = NULL;
+ vfstree_create_node("/keymap", LOSTIO_TYPES_KEYMAP, 0, NULL, 0);
+}
+
+/**
+ * LostIO-Handller um die Tastaturbelegung zu lesen
+ */
+size_t keymap_read(lostio_filehandle_t* file, void* buf,
+ size_t blocksize, size_t blockcount)
+{
+ size_t size = blocksize * blockcount;
+
+ if (file->pos + size >= sizeof(keymap)) {
+ size = sizeof(keymap) - file->pos;
+ file->flags |= LOSTIO_FLAG_EOF;
+ }
+
+ memcpy(buf, ((uint8_t*) keymap) + file->pos, size);
+ file->pos += size;
+
+ return size;
+}
+
+/**
+ * LostIO-Handler um die Tastaturbelegung zu aendern
+ */
+size_t keymap_write(lostio_filehandle_t* file, size_t blocksize,
+ size_t blockcount, void* buf)
+{
+ size_t size = blocksize * blockcount;
+
+ if (file->pos + size >= sizeof(keymap)) {
+ size = sizeof(keymap) - file->pos;
+ file->flags |= LOSTIO_FLAG_EOF;
+ }
+
+ memcpy(((uint8_t*) keymap) + file->pos, buf, size);
+ file->pos += size;
+
+ return size;
+}
diff --git a/src/modules/vterm/lostio.c b/src/modules/vterm/lostio.c
index a835d6a..1470fa7 100644
--- a/src/modules/vterm/lostio.c
+++ b/src/modules/vterm/lostio.c
@@ -35,8 +35,11 @@
#include <stdlib.h>
#include <syscall.h>
#include <string.h>
+
#include "vterm.h"
#include "lostio.h"
+#include "keymap.h"
+
/// Handler fuer Lesen aus in
size_t terminal_read(lostio_filehandle_t* handle, void* buf,
size_t blocksize, size_t blockcount);
@@ -83,6 +86,13 @@ void init_lostio_interface()
typehandle->link = NULL;
typehandle->unlink = NULL;
lostio_register_typehandle(typehandle);
+
+ // Typehandle fuer Keymaps
+ typehandle = calloc(1, sizeof(typehandle_t));
+ typehandle->id = LOSTIO_TYPES_KEYMAP;
+ typehandle->read = &keymap_read;
+ typehandle->write = &keymap_write;
+ lostio_register_typehandle(typehandle);
}
/**
diff --git a/src/modules/vterm/vterm.c b/src/modules/vterm/vterm.c
index d3fcd7f..d27fbc6 100644
--- a/src/modules/vterm/vterm.c
+++ b/src/modules/vterm/vterm.c
@@ -41,6 +41,7 @@
#include "vterm.h"
#include "sleep.h"
#include "init.h"
+#include "keymap.h"
/// Hier kommen die Eingaben fuer all die virtuellen Terminals her
@@ -67,6 +68,9 @@ int main(int argc, char* argv[])
return -1;
}
+ // Tastaturbelegung konfigurierbar machen
+ keymap_init();
+
// Auf Anfragen warten
while(TRUE) {
wait_for_rpc();
diff --git a/src/modules/vterm/vterm.h b/src/modules/vterm/vterm.h
index d5149da..0871db9 100644
--- a/src/modules/vterm/vterm.h
+++ b/src/modules/vterm/vterm.h
@@ -39,6 +39,7 @@
#define LOSTIO_TYPES_OUT 255
#define LOSTIO_TYPES_IN 254
+#define LOSTIO_TYPES_KEYMAP 253
#define SCREEN_WIDTH_MAX 80
#define SCREEN_HEIGHT_MAX 25
--
1.6.0.2