xref: /netbsd/sys/arch/amiga/stand/loadkmap/loadkmap.c (revision bf9ec67e)
1 /*	$NetBSD: loadkmap.c,v 1.5 2002/01/26 13:21:12 aymeric 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 
10 
11 void load_kmap(const char *);
12 void dump_kmap(void);
13 
14 int
15 main(int argc, char *argv[])
16 {
17   if (argc > 2)
18     {
19       fprintf (stderr, "%s keymap\n", argv[0]);
20       exit (1);
21     }
22 
23   if (argc == 1)
24     dump_kmap ();
25   else
26     load_kmap (argv[1]);
27 
28   exit (0);
29 }
30 
31 
32 void
33 load_kmap(const char *file)
34 {
35   int fd;
36   char buf[sizeof (struct kbdmap)];
37 
38   if ((fd = open (file, 0)) >= 0)
39     {
40       if (read (fd, buf, sizeof (buf)) == sizeof (buf))
41 	{
42 	  if (ioctl (0, ITEIOCSKMAP, buf) == 0)
43 	    return;
44 	  else
45 	    perror ("ITEIOCSKMAP");
46 	}
47       else
48 	perror ("read kmap");
49 
50       close (fd);
51     }
52   else
53     perror ("open kmap");
54 }
55 
56 void
57 dump_kmap(void)
58 {
59   char buf[sizeof (struct kbdmap)];
60   if (ioctl (0, ITEIOCGKMAP, buf) == 0)
61     write (1, buf, sizeof (buf));
62   else
63     perror ("ITEIOCGKMAP");
64 }
65