From 8aadba5156b7fc0118f3039b6868bad29e26c6b9 Mon Sep 17 00:00:00 2001 From: girst Date: Fri, 12 Feb 2016 17:52:21 +0100 Subject: [PATCH] restructuring and more unicode [compiles now] --- main.c | 43 ++++++++++++++----------------------------- 1 file changed, 14 insertions(+), 29 deletions(-) diff --git a/main.c b/main.c index c225792..79549c0 100644 --- a/main.c +++ b/main.c @@ -11,7 +11,7 @@ parameters: #include #include "scancodes.h" -enum params = {//argv-indices: +enum params {//argv-indices: P_EXE, //executable name P_DEV, //device file P_LAY, //layout @@ -19,19 +19,19 @@ enum params = {//argv-indices: P_STR, //string to type NUM_P //number of parameters }; -enum kbdl = { //keyboard layouts: +enum kbdl { //keyboard layouts: na_NA, //reserved en_US, de_AT, de_ND //de_AT-nodeadkeys }; -enum uni_m = {//unicode methods: +enum uni_m {//unicode methods: SKIP, //ignore any keys not on the layout GTK_HOLD, //hold ctrl and shift while entering hex values GTK_SPACE, //end hex sequence with spacebar WINDOWS //use alt+numpad }; -enum errors = { +enum errors { ERR_SUCCESS, //no error ERR_ARGCOUNT, //wrong number of arguments ERR_SYMBOL, //symbol not in look up table @@ -77,7 +77,7 @@ int main (int argc, char** argv) { if (l->key != 0x00) { send_key(hid_dev, l->key, l->mod); send_key(hid_dev, '\0', '\0'); //release all keys - if (l->is_dead && !ignore_deadkey) { + if (l->is_dead) { //dead keys need to be pressed twice to show up send_key(hid_dev, l->key, l->mod); send_key(hid_dev, '\0', '\0'); //release all keys @@ -85,7 +85,7 @@ int main (int argc, char** argv) { } else { //key does not exist in this layout, use unicode method fprintf (stderr, "Warning: Key not in this layout!\n"); - send_unicode (s-> unicode, atoi (argv[P_UNI]); + send_unicode (hid_dev, s->unicode, atoi (argv[P_UNI]), atoi(argv[P_LAY])); } } fclose (hid_dev); @@ -93,22 +93,6 @@ int main (int argc, char** argv) { return ERR_SUCCESS; } -struct layout* get_layout (struct keysym* s, enum kbdl layout) { - switch (layout) { - case na_NA: - fprintf (stderr, "This keyboard layout is reserved.\n"); - return NULL; - case en_US: - return &(s->en_us); - case de_AT: - return &(s->de_at); - case de_ND: - return &(s->de_at); - default: - fprintf (stderr, "Unrecognised keyboard layout.\n"); - return NULL; - } - void send_key (FILE* hid_dev, unsigned short key, unsigned short mod) { fprintf (hid_dev, "%c%c%c%c%c%c%c%c", mod, '\0', key, '\0', '\0', '\0', '\0', '\0'); } @@ -128,7 +112,7 @@ enum errors send_unicode (FILE* hid_dev, unsigned int unicode, enum uni_m method struct layout* l; if (unicode == 0x00) { - printf ("Symbol not in lookup table!\n"); + fprintf (stderr, "Symbol not in lookup table!\n"); return ERR_SYMBOL; } @@ -136,25 +120,26 @@ enum errors send_unicode (FILE* hid_dev, unsigned int unicode, enum uni_m method case SKIP: break; case GTK_HOLD: - fprintf ("Hold-down X11 not implemented!\n"); + fprintf (stderr, "Hold-down X11 not implemented!\n"); return ERR_LAZY; case GTK_SPACE: - sprintf (string, "%x", unicode); + sprintf (buf, "%x", unicode); s = toscan ("u"); l = tolay (s, layout); send_key (hid_dev, l->key, MOD_LCTRL | MOD_LSHIFT); - for (int i = 0; i < strlen (string); i++) { - s = toscan (string); + for (int i = 0; i < strlen (buf); i++) { + s = toscan (buf); l = tolay (s, layout); send_key (hid_dev, l->key, MOD_LCTRL | MOD_LSHIFT); } send_key (hid_dev, '\0', '\0'); break; case WINDOWS: - fprintf ("windows method not implemented!\n"); + fprintf (stderr, "windows method not implemented!\n"); return ERR_LAZY; default: - fprintf ("unknown unicode method!\n"); + fprintf (stderr, "unknown unicode method!\n"); return ERR_LAYOUT; //TODO: better error code } + return ERR_SUCCESS; } -- 2.39.3