aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2000-07-11 17:29:36 +0000
committerEric Andersen <andersen@codepoet.org>2000-07-11 17:29:36 +0000
commit61dc0571832b88097192a8c0eab190a44c577371 (patch)
treee8d48007f5e86b1fe04d3b4f4b56d53c6ef35eeb
parentdf5f6ba1159f8c1af500fa1b8eb9c9646e4de2a6 (diff)
downloadbusybox-w32-61dc0571832b88097192a8c0eab190a44c577371.tar.gz
busybox-w32-61dc0571832b88097192a8c0eab190a44c577371.tar.bz2
busybox-w32-61dc0571832b88097192a8c0eab190a44c577371.zip
Added 'dumpkmap' to allow people to dump a binary keymap, which can then be
loaded in by 'loadkmap' -- submitted by Arne Bernin <arne@matrix.loopback.org> -Erik
-rw-r--r--Changelog3
-rw-r--r--applets/busybox.c3
-rw-r--r--busybox.c3
-rw-r--r--busybox.def.h1
-rw-r--r--console-tools/dumpkmap.c100
-rw-r--r--console-tools/loadkmap.c2
-rw-r--r--docs/busybox.pod12
-rw-r--r--docs/busybox.sgml35
-rw-r--r--dumpkmap.c100
-rw-r--r--internal.h1
-rw-r--r--loadkmap.c2
11 files changed, 248 insertions, 14 deletions
diff --git a/Changelog b/Changelog
index 5d8680390..af2320668 100644
--- a/Changelog
+++ b/Changelog
@@ -41,6 +41,9 @@
41 couldn't maintain it very well, so including it was not really 41 couldn't maintain it very well, so including it was not really
42 very appropriate. Those wanting an fdisk are invited to 42 very appropriate. Those wanting an fdisk are invited to
43 grab a copy from util-linux. 43 grab a copy from util-linux.
44 * Added 'dumpkmap' to allow people to dump a binary keymap, which can
45 then be loaded in by 'loadkmap' -- submitted by
46 Arne Bernin <arne@matrix.loopback.org>
44 * Fixed NFS so it supports 2.4.x kernels and NFSv3. 47 * Fixed NFS so it supports 2.4.x kernels and NFSv3.
45 48
46 49
diff --git a/applets/busybox.c b/applets/busybox.c
index 44fa16994..5471db597 100644
--- a/applets/busybox.c
+++ b/applets/busybox.c
@@ -87,6 +87,9 @@ const struct BB_applet applets[] = {
87#ifdef BB_DU 87#ifdef BB_DU
88 {"du", du_main, _BB_DIR_BIN}, 88 {"du", du_main, _BB_DIR_BIN},
89#endif 89#endif
90#ifdef BB_DUMPKMAP
91 {"dumpkmap", dumpkmap_main, _BB_DIR_BIN},
92#endif
90#ifdef BB_DUTMP 93#ifdef BB_DUTMP
91 {"dutmp", dutmp_main, _BB_DIR_USR_SBIN}, 94 {"dutmp", dutmp_main, _BB_DIR_USR_SBIN},
92#endif 95#endif
diff --git a/busybox.c b/busybox.c
index 44fa16994..5471db597 100644
--- a/busybox.c
+++ b/busybox.c
@@ -87,6 +87,9 @@ const struct BB_applet applets[] = {
87#ifdef BB_DU 87#ifdef BB_DU
88 {"du", du_main, _BB_DIR_BIN}, 88 {"du", du_main, _BB_DIR_BIN},
89#endif 89#endif
90#ifdef BB_DUMPKMAP
91 {"dumpkmap", dumpkmap_main, _BB_DIR_BIN},
92#endif
90#ifdef BB_DUTMP 93#ifdef BB_DUTMP
91 {"dutmp", dutmp_main, _BB_DIR_USR_SBIN}, 94 {"dutmp", dutmp_main, _BB_DIR_USR_SBIN},
92#endif 95#endif
diff --git a/busybox.def.h b/busybox.def.h
index 0f2bcefeb..854de1466 100644
--- a/busybox.def.h
+++ b/busybox.def.h
@@ -25,6 +25,7 @@
25#define BB_DMESG 25#define BB_DMESG
26#define BB_DUTMP 26#define BB_DUTMP
27#define BB_DU 27#define BB_DU
28#define BB_DUMPKMAP
28#define BB_ECHO 29#define BB_ECHO
29#define BB_FBSET 30#define BB_FBSET
30#define BB_FDFLUSH 31#define BB_FDFLUSH
diff --git a/console-tools/dumpkmap.c b/console-tools/dumpkmap.c
new file mode 100644
index 000000000..a497a07d1
--- /dev/null
+++ b/console-tools/dumpkmap.c
@@ -0,0 +1,100 @@
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 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 *
21 */
22
23#include "internal.h"
24#include <errno.h>
25#include <fcntl.h>
26#include <stdio.h>
27#include <sys/ioctl.h>
28
29/* From <linux/kd.h> */
30struct kbentry {
31 unsigned char kb_table;
32 unsigned char kb_index;
33 unsigned short kb_value;
34};
35#define KDGKBENT 0x4B46 /* gets one entry in translation table */
36
37/* From <linux/keyboard.h> */
38#define NR_KEYS 128
39#define MAX_NR_KEYMAPS 256
40
41
42static const char dumpkmap_usage[] = "dumpkmap\n"
43#ifndef BB_FEATURE_TRIVIAL_HELP
44 "\nPrints out a binary keyboard translation table to standard input.\n"
45#endif
46 ;
47
48
49int dumpkmap_main(int argc, char **argv)
50{
51 struct kbentry ke;
52 int i, j, fd;
53 char flags[MAX_NR_KEYMAPS], magic[] = "bkeymap";
54
55 if (argc>=2 && *argv[1]=='-') {
56 usage(dumpkmap_usage);
57 }
58
59 fd = open("/dev/tty0", O_RDWR);
60 if (fd < 0) {
61 fprintf(stderr, "Error opening /dev/tty0: %s\n", strerror(errno));
62 return 1;
63 }
64
65 write(1, magic, 7);
66
67 for (i=0; i < MAX_NR_KEYMAPS; i++) flags[i]=0;
68 flags[0]=1;
69 flags[1]=1;
70 flags[2]=1;
71 flags[4]=1;
72 flags[5]=1;
73 flags[6]=1;
74 flags[8]=1;
75 flags[9]=1;
76 flags[10]=1;
77 flags[12]=1;
78
79 /* dump flags */
80 for (i=0; i < MAX_NR_KEYMAPS; i++) write(1,&flags[i],1);
81
82 for (i = 0; i < MAX_NR_KEYMAPS; i++) {
83 if (flags[i] == 1) {
84 for (j = 0; j < NR_KEYS; j++) {
85 ke.kb_index = j;
86 ke.kb_table = i;
87 if (ioctl(fd, KDGKBENT, &ke) < 0) {
88
89 fprintf(stderr, "ioctl returned: %s, %s, %s, %xqq\n",strerror(errno),(char *)&ke.kb_index,(char *)&ke.kb_table,(int)&ke.kb_value);
90 }
91 else {
92 write(1,&ke.kb_value,2);
93 }
94
95 }
96 }
97 }
98 close(fd);
99 return 0;
100}
diff --git a/console-tools/loadkmap.c b/console-tools/loadkmap.c
index 0e8c090d2..c2e4c94ed 100644
--- a/console-tools/loadkmap.c
+++ b/console-tools/loadkmap.c
@@ -41,7 +41,7 @@ struct kbentry {
41 41
42static const char loadkmap_usage[] = "loadkmap\n" 42static const char loadkmap_usage[] = "loadkmap\n"
43#ifndef BB_FEATURE_TRIVIAL_HELP 43#ifndef BB_FEATURE_TRIVIAL_HELP
44 "Loads a binary keyboard translation table from standard input.\n" 44 "\nLoads a binary keyboard translation table from standard input.\n"
45#endif 45#endif
46 ; 46 ;
47 47
diff --git a/docs/busybox.pod b/docs/busybox.pod
index b36619909..0e611deef 100644
--- a/docs/busybox.pod
+++ b/docs/busybox.pod
@@ -56,7 +56,7 @@ terse runtime description of their behavior.
56Currently defined functions include: 56Currently defined functions include:
57 57
58ar, basename, cat, chgrp, chmod, chown, chroot, chvt, clear, cp, cut, date, 58ar, basename, cat, chgrp, chmod, chown, chroot, chvt, clear, cp, cut, date,
59dc, dd, deallocvt, df, dirname, dmesg, du, dutmp, echo, false, fbset, 59dc, dd, deallocvt, df, dirname, dmesg, du, dumpkmap, dutmp, echo, false, fbset,
60fdflush, find, free, freeramdisk, fsck.minix, grep, gunzip, gzip, halt, 60fdflush, find, free, freeramdisk, fsck.minix, grep, gunzip, gzip, halt,
61head, hostid, hostname, id, init, insmod, kill, killall, length, ln, 61head, hostid, hostname, id, init, insmod, kill, killall, length, ln,
62loadacm, loadfont, loadkmap, logger, logname, ls, lsmod, makedevs, mkdir, 62loadacm, loadfont, loadkmap, logger, logname, ls, lsmod, makedevs, mkdir,
@@ -440,6 +440,14 @@ Example:
440 440
441------------------------------- 441-------------------------------
442 442
443=item dumpkmap
444
445Usage: dumpkmap
446
447Prints out a binary keyboard translation table to standard input.
448
449-------------------------------
450
443=item dutmp 451=item dutmp
444 452
445Usage: dutmp [FILE] 453Usage: dutmp [FILE]
@@ -2020,4 +2028,4 @@ Enrique Zanardi <ezanardi@ull.es>
2020 2028
2021=cut 2029=cut
2022 2030
2023# $Id: busybox.pod,v 1.55 2000/07/08 00:09:30 andersen Exp $ 2031# $Id: busybox.pod,v 1.56 2000/07/11 17:29:36 andersen Exp $
diff --git a/docs/busybox.sgml b/docs/busybox.sgml
index ca76b0f59..92b02c9ee 100644
--- a/docs/busybox.sgml
+++ b/docs/busybox.sgml
@@ -132,16 +132,19 @@
132 </para> 132 </para>
133 133
134 <para> 134 <para>
135 ar, basename, cat, chgrp, chmod, chown, chroot, chvt, clear, cp, cut, date, 135 ar, basename, cat, chgrp, chmod, chown, chroot, chvt, clear,
136 dc, dd, deallocvt, df, dirname, dmesg, du, dutmp, echo, false, fbset, 136 cp, cut, date, dc, dd, deallocvt, df, dirname, dmesg, du,
137 fdflush, find, free, freeramdisk, fsck.minix, grep, gunzip, gzip, halt, 137 dumpkmap, dutmp, echo, false, fbset, fdflush, find, free,
138 head, hostid, hostname, id, init, insmod, kill, killall, length, ln, 138 freeramdisk, fsck.minix, grep, gunzip, gzip, halt, head,
139 loadacm, loadfont, loadkmap, logger, logname, ls, lsmod, makedevs, mkdir, 139 hostid, hostname, id, init, insmod, kill, killall, length, ln,
140 mkfifo, mkfs.minix, mknod, mkswap, mktemp, more, mount, mt, mv, nc, 140 loadacm, loadfont, loadkmap, logger, logname, ls, lsmod,
141 nslookup, ping, poweroff, printf, ps, pwd, reboot, rm, rmdir, rmmod, sed, 141 makedevs, mkdir, mkfifo, mkfs.minix, mknod, mkswap, mktemp,
142 setkeycodes, sh, sleep, sort, swapoff, swapon, sync, syslogd, tail, 142 more, mount, mt, mv, nc, nslookup, ping, poweroff, printf, ps,
143 tar, tee, telnet, test, touch, tr, true, tty, umount, uname, uniq, update, 143 pwd, reboot, rm, rmdir, rmmod, sed, setkeycodes, sh, sleep,
144 uptime, usleep, uudecode, uuencode, wc, which, whoami, yes, zcat, [ 144 sort, swapoff, swapon, sync, syslogd, tail, tar, tee, telnet,
145 test, touch, tr, true, tty, umount, uname, uniq, update,
146 uptime, usleep, uudecode, uuencode, wc, which, whoami, yes,
147 zcat, [
145 </para> 148 </para>
146 </sect1> 149 </sect1>
147 150
@@ -783,6 +786,18 @@
783 </para> 786 </para>
784 </sect1> 787 </sect1>
785 788
789 <sect1 id="dumpkmap">
790 <title>dumpkmap</title>
791
792 <para>
793 Usage: dumpkmap
794 </para>
795
796 <para>
797 Prints out a binary keyboard translation table to standard input.
798 </para>
799 </sect1>
800
786 <sect1 id="dutmp"> 801 <sect1 id="dutmp">
787 <title>dutmp</title> 802 <title>dutmp</title>
788 803
diff --git a/dumpkmap.c b/dumpkmap.c
new file mode 100644
index 000000000..a497a07d1
--- /dev/null
+++ b/dumpkmap.c
@@ -0,0 +1,100 @@
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 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 *
21 */
22
23#include "internal.h"
24#include <errno.h>
25#include <fcntl.h>
26#include <stdio.h>
27#include <sys/ioctl.h>
28
29/* From <linux/kd.h> */
30struct kbentry {
31 unsigned char kb_table;
32 unsigned char kb_index;
33 unsigned short kb_value;
34};
35#define KDGKBENT 0x4B46 /* gets one entry in translation table */
36
37/* From <linux/keyboard.h> */
38#define NR_KEYS 128
39#define MAX_NR_KEYMAPS 256
40
41
42static const char dumpkmap_usage[] = "dumpkmap\n"
43#ifndef BB_FEATURE_TRIVIAL_HELP
44 "\nPrints out a binary keyboard translation table to standard input.\n"
45#endif
46 ;
47
48
49int dumpkmap_main(int argc, char **argv)
50{
51 struct kbentry ke;
52 int i, j, fd;
53 char flags[MAX_NR_KEYMAPS], magic[] = "bkeymap";
54
55 if (argc>=2 && *argv[1]=='-') {
56 usage(dumpkmap_usage);
57 }
58
59 fd = open("/dev/tty0", O_RDWR);
60 if (fd < 0) {
61 fprintf(stderr, "Error opening /dev/tty0: %s\n", strerror(errno));
62 return 1;
63 }
64
65 write(1, magic, 7);
66
67 for (i=0; i < MAX_NR_KEYMAPS; i++) flags[i]=0;
68 flags[0]=1;
69 flags[1]=1;
70 flags[2]=1;
71 flags[4]=1;
72 flags[5]=1;
73 flags[6]=1;
74 flags[8]=1;
75 flags[9]=1;
76 flags[10]=1;
77 flags[12]=1;
78
79 /* dump flags */
80 for (i=0; i < MAX_NR_KEYMAPS; i++) write(1,&flags[i],1);
81
82 for (i = 0; i < MAX_NR_KEYMAPS; i++) {
83 if (flags[i] == 1) {
84 for (j = 0; j < NR_KEYS; j++) {
85 ke.kb_index = j;
86 ke.kb_table = i;
87 if (ioctl(fd, KDGKBENT, &ke) < 0) {
88
89 fprintf(stderr, "ioctl returned: %s, %s, %s, %xqq\n",strerror(errno),(char *)&ke.kb_index,(char *)&ke.kb_table,(int)&ke.kb_value);
90 }
91 else {
92 write(1,&ke.kb_value,2);
93 }
94
95 }
96 }
97 }
98 close(fd);
99 return 0;
100}
diff --git a/internal.h b/internal.h
index 4ef15325e..8086aa1ca 100644
--- a/internal.h
+++ b/internal.h
@@ -117,6 +117,7 @@ extern int deallocvt_main(int argc, char** argv);
117extern int df_main(int argc, char** argv); 117extern int df_main(int argc, char** argv);
118extern int dmesg_main(int argc, char** argv); 118extern int dmesg_main(int argc, char** argv);
119extern int du_main(int argc, char** argv); 119extern int du_main(int argc, char** argv);
120extern int dumpkmap_main(int argc, char** argv);
120extern int dutmp_main(int argc, char** argv); 121extern int dutmp_main(int argc, char** argv);
121extern int echo_main(int argc, char** argv); 122extern int echo_main(int argc, char** argv);
122extern int false_main(int argc, char** argv); 123extern int false_main(int argc, char** argv);
diff --git a/loadkmap.c b/loadkmap.c
index 0e8c090d2..c2e4c94ed 100644
--- a/loadkmap.c
+++ b/loadkmap.c
@@ -41,7 +41,7 @@ struct kbentry {
41 41
42static const char loadkmap_usage[] = "loadkmap\n" 42static const char loadkmap_usage[] = "loadkmap\n"
43#ifndef BB_FEATURE_TRIVIAL_HELP 43#ifndef BB_FEATURE_TRIVIAL_HELP
44 "Loads a binary keyboard translation table from standard input.\n" 44 "\nLoads a binary keyboard translation table from standard input.\n"
45#endif 45#endif
46 ; 46 ;
47 47