1 /* 2 * Copyright 2012 Ran Benita <ran234 (at) gmail.com> 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice (including the next 12 * paragraph) shall be included in all copies or substantial portions of the 13 * Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21 * DEALINGS IN THE SOFTWARE. 22 */ 23 24 #include <unistd.h> 25 26 #include "test.h" 27 28 int 29 main(int argc, char *argv[]) 30 { 31 int ret = EXIT_FAILURE; 32 int opt; 33 struct xkb_context *ctx; 34 struct xkb_keymap *keymap; 35 const char *rules = NULL; 36 const char *model = NULL; 37 const char *layout = NULL; 38 const char *variant = NULL; 39 const char *options = NULL; 40 const char *keymap_path = NULL; 41 char *dump; 42 43 while ((opt = getopt(argc, argv, "r:m:l:v:o:k:h")) != -1) { 44 switch (opt) { 45 case 'r': 46 rules = optarg; 47 break; 48 case 'm': 49 model = optarg; 50 break; 51 case 'l': 52 layout = optarg; 53 break; 54 case 'v': 55 variant = optarg; 56 break; 57 case 'o': 58 options = optarg; 59 break; 60 case 'k': 61 keymap_path = optarg; 62 break; 63 case 'h': 64 case '?': 65 fprintf(stderr, "Usage: %s [-r <rules>] [-m <model>] " 66 "[-l <layout>] [-v <variant>] [-o <options>]\n", 67 argv[0]); 68 fprintf(stderr, " or: %s -k <path to keymap file>\n", 69 argv[0]); 70 exit(EXIT_FAILURE); 71 } 72 } 73 74 ctx = test_get_context(0); 75 if (!ctx) { 76 fprintf(stderr, "Couldn't create xkb context\n"); 77 goto err_out; 78 } 79 80 if (keymap_path) 81 keymap = test_compile_file(ctx, keymap_path); 82 else 83 keymap = test_compile_rules(ctx, rules, model, layout, variant, 84 options); 85 if (!keymap) { 86 fprintf(stderr, "Couldn't create xkb keymap\n"); 87 goto err_ctx; 88 } 89 90 dump = xkb_keymap_get_as_string(keymap, XKB_KEYMAP_FORMAT_TEXT_V1); 91 if (!dump) { 92 fprintf(stderr, "Couldn't get the keymap string\n"); 93 goto err_map; 94 } 95 96 fputs(dump, stdout); 97 98 ret = EXIT_SUCCESS; 99 free(dump); 100 err_map: 101 xkb_keymap_unref(keymap); 102 err_ctx: 103 xkb_context_unref(ctx); 104 err_out: 105 return ret; 106 } 107