source: MondoRescue/branches/3.3/mindi-busybox/console-tools/dumpkmap.c@ 3901

Last change on this file since 3901 was 3621, checked in by Bruno Cornec, 10 years ago

New 3?3 banch for incorporation of latest busybox 1.25. Changing minor version to handle potential incompatibilities.

File size: 2.3 KB
Line 
1/* vi: set sw=4 ts=4: */
2/*
3 * Mini dumpkmap implementation for busybox
4 *
5 * Copyright (C) Arne Bernin <arne@matrix.loopback.org>
6 *
7 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
8 *
9 */
10/* no options, no getopt */
11
12//usage:#define dumpkmap_trivial_usage
13//usage: "> keymap"
14//usage:#define dumpkmap_full_usage "\n\n"
15//usage: "Print a binary keyboard translation table to stdout"
16//usage:
17//usage:#define dumpkmap_example_usage
18//usage: "$ dumpkmap > keymap\n"
19
20#include "libbb.h"
21#include "common_bufsiz.h"
22
23/* From <linux/kd.h> */
24struct kbentry {
25 unsigned char kb_table;
26 unsigned char kb_index;
27 unsigned short kb_value;
28};
29#define KDGKBENT 0x4B46 /* gets one entry in translation table */
30
31/* From <linux/keyboard.h> */
32#define NR_KEYS 128
33#define MAX_NR_KEYMAPS 256
34
35int dumpkmap_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
36int dumpkmap_main(int argc UNUSED_PARAM, char **argv)
37{
38 struct kbentry ke;
39 int i, j, fd;
40#define flags bb_common_bufsiz1
41 setup_common_bufsiz();
42
43 /* When user accidentally runs "dumpkmap FILE"
44 * instead of "dumpkmap >FILE", we'd dump binary stuff to tty.
45 * Let's prevent it:
46 */
47 if (argv[1])
48 bb_show_usage();
49/* bb_warn_ignoring_args(argv[1]);*/
50
51 fd = get_console_fd_or_die();
52
53#if 0
54 write(STDOUT_FILENO, "bkeymap", 7);
55 /* Here we want to set everything to 0 except for indexes:
56 * [0-2] [4-6] [8-10] [12]
57 */
58 /*memset(flags, 0x00, MAX_NR_KEYMAPS); - already is */
59 memset(flags, 0x01, 13);
60 flags[3] = flags[7] = flags[11] = 0;
61 /* dump flags */
62 write(STDOUT_FILENO, flags, MAX_NR_KEYMAPS);
63#define flags7 flags
64#else
65 /* Same effect */
66 /* 0 1 2 3 4 5 6 7 8 9 a b c=12 */
67 memcpy(flags, "bkeymap\1\1\1\0\1\1\1\0\1\1\1\0\1",
68 /* Can use sizeof, or sizeof-1. sizeof is even, using that */
69 /****/ sizeof("bkeymap\1\1\1\0\1\1\1\0\1\1\1\0\1")
70 );
71 write(STDOUT_FILENO, flags, 7 + MAX_NR_KEYMAPS);
72#define flags7 (flags + 7)
73#endif
74
75 for (i = 0; i < 13; i++) {
76 if (flags7[i]) {
77 for (j = 0; j < NR_KEYS; j++) {
78 ke.kb_index = j;
79 ke.kb_table = i;
80 if (!ioctl_or_perror(fd, KDGKBENT, &ke,
81 "ioctl(KDGKBENT{%d,%d}) failed",
82 j, i)
83 ) {
84 write(STDOUT_FILENO, &ke.kb_value, 2);
85 }
86 }
87 }
88 }
89 if (ENABLE_FEATURE_CLEAN_UP) {
90 close(fd);
91 }
92 return EXIT_SUCCESS;
93}
Note: See TracBrowser for help on using the repository browser.