diff --git a/genkeymap/genkeymap.c b/genkeymap/genkeymap.c index f6092245..25383f59 100644 --- a/genkeymap/genkeymap.c +++ b/genkeymap/genkeymap.c @@ -2,22 +2,24 @@ /* * genkeymap.c * Copyright (C) Ádám Wallner 2008 - * + * * You may redistribute it and/or modify it under the terms of the * GNU General Public License, as published by the Free Software * Foundation; either version 2 of the License, or (at your option) * any later version. - * + * * main.cc is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with main.cc. If not, write to: - * The Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor - * Boston, MA 02110-1301, USA. + * The Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor + * Boston, MA 02110-1301, USA + + Updated Jay Sorg 2009 cs czech 0x405 de german 0x407 @@ -32,92 +34,90 @@ #include #include +#include #include #include #include -const char *ProgramName; -Display *dpy; - -int main(int argc, char **argv) { - char *displayname = NULL; - char *outfname; - KeySym ks; - int i, idx; - FILE *outf; - char *ksname = NULL; - XKeyPressedEvent e; - char text[256]; - wchar_t wtext[256]; - int char_count; - int nbytes = 0; - int unicode; - - setlocale(LC_CTYPE, ""); +int main(int argc, char **argv) +{ + const char* programname; + char text[256]; + char* ksname = NULL; + char* displayname = NULL; + char* outfname; + char* sections[5] = {"noshift", "shift", "altgr", "capslock", "shiftcapslock"}; + int states[5] = {0, 1, 0x80, 2, 3}; + int i; + int idx; + int char_count; + int nbytes = 0; + int unicode; + Display* dpy; + KeySym ks; + FILE* outf; + XKeyPressedEvent e; + wchar_t wtext[256]; - /* --------------- */ - - char *sections[5] = {"noshift", "shift", "altgr", "capslock", "shiftcapslock"}; - int states[5] = {0, 1, 0x80, 2, 3}; - - /* --------------- */ - - ProgramName = argv[0]; - - if (argc != 2) { - fprintf(stderr, "Usage: %s out_filename\n", ProgramName); - exit(1); - } - outfname = argv[1]; - - - dpy = XOpenDisplay (displayname); - if (!dpy) { - fprintf(stderr, "%s: unable to open display '%s'\n", - ProgramName, XDisplayName (displayname)); - exit(1); - } - - /* --------------- */ - - e.type = KeyPress; - e.serial = 16; - e.send_event = True; - e.display = dpy; - e.window = (Window) NULL; - e.root = (Window) NULL; - e.time = 0; - e.x = e.y = 0; - e.x_root = e.y_root = 0; - e.same_screen = True; - - outf = fopen(outfname, "w"); - - for (idx=0; idx<5; idx++) { // Sections and states - fprintf(outf, "[%s]\n", sections[idx]); - e.state = states[idx]; - for (i=8; i<=137; i++) { // Keycodes - e.keycode = i; - nbytes = XLookupString (&e, text, 255, &ks, NULL); - - if (ks == NoSymbol) - ksname = "NoSymbol"; - else if (!(ksname = XKeysymToString (ks))) - ksname = "(no name)"; - char_count = mbstowcs(wtext, text, 255); - unicode = 0; - if (char_count == 1) - { - unicode = wtext[0]; - } - //printf("%s %d %x\n", text, char_count, wtext[0]); - fprintf(outf, "Key%d=%d:%d\n", i, (int) ks, unicode); - } - if (idx!=4) fprintf(outf, "\n"); - } - - XCloseDisplay (dpy); - fclose(outf); - - return (0); + setlocale(LC_CTYPE, ""); + programname = argv[0]; + if (argc != 2) + { + fprintf(stderr, "Usage: %s out_filename\n", programname); + fprintf(stderr, "Example: %s /etc/xrdp/km-0409.ini\n", programname); + return 1; + } + outfname = argv[1]; + dpy = XOpenDisplay(displayname); + if (!dpy) + { + fprintf(stderr, "%s: unable to open display '%s'\n", + programname, XDisplayName(displayname)); + return 1; + } + outf = fopen(outfname, "w"); + if (outf == NULL) + { + fprintf(stderr, "%s: unable to create file '%s'\n", programname, outfname); + XCloseDisplay(dpy); + return 1; + } + memset(&e, 0, sizeof(e)); + e.type = KeyPress; + e.serial = 16; + e.send_event = True; + e.display = dpy; + e.same_screen = True; + for (idx = 0; idx < 5; idx++) /* Sections and states */ + { + fprintf(outf, "[%s]\n", sections[idx]); + e.state = states[idx]; + for (i = 8; i <= 137; i++) /* Keycodes */ + { + e.keycode = i; + nbytes = XLookupString(&e, text, 255, &ks, NULL); + if (ks == NoSymbol) + { + ksname = "NoSymbol"; + } + else if (!(ksname = XKeysymToString(ks))) + { + ksname = "(no name)"; + } + char_count = mbstowcs(wtext, text, 255); + unicode = 0; + if (char_count == 1) + { + unicode = wtext[0]; + } + fprintf(outf, "Key%d=%d:%d\n", i, (int) ks, unicode); + } + if (idx != 4) + { + fprintf(outf, "\n"); + } + } + XCloseDisplay(dpy); + fclose(outf); + return 0; }