xref: /netbsd/sys/arch/amiga/stand/loadkmap/loadkmap.c (revision 6550d01e)
1 /*	$NetBSD: loadkmap.c,v 1.6 2006/06/27 10:55:16 tsutsui Exp $	*/
2 
3 #include <sys/types.h>
4 #include <sys/stat.h>
5 #include <sys/ioctl.h>
6 #include "../../dev/iteioctl.h"
7 #include "../../dev/kbdmap.h"
8 #include <stdio.h>
9 #include <stdlib.h>
10 
11 
12 void load_kmap(const char *);
13 void dump_kmap(void);
14 
15 int
16 main(int argc, char *argv[])
17 {
18   if (argc > 2)
19     {
20       fprintf (stderr, "%s keymap\n", argv[0]);
21       exit (1);
22     }
23 
24   if (argc == 1)
25     dump_kmap ();
26   else
27     load_kmap (argv[1]);
28 
29   exit (0);
30 }
31 
32 
33 void
34 load_kmap(const char *file)
35 {
36   int fd;
37   char buf[sizeof (struct kbdmap)];
38 
39   if ((fd = open (file, 0)) >= 0)
40     {
41       if (read (fd, buf, sizeof (buf)) == sizeof (buf))
42 	{
43 	  if (ioctl (0, ITEIOCSKMAP, buf) == 0)
44 	    return;
45 	  else
46 	    perror ("ITEIOCSKMAP");
47 	}
48       else
49 	perror ("read kmap");
50 
51       close (fd);
52     }
53   else
54     perror ("open kmap");
55 }
56 
57 void
58 dump_kmap(void)
59 {
60   char buf[sizeof (struct kbdmap)];
61   if (ioctl (0, ITEIOCGKMAP, buf) == 0)
62     write (1, buf, sizeof (buf));
63   else
64     perror ("ITEIOCGKMAP");
65 }
66