xref: /netbsd-src/sys/arch/amiga/stand/loadkmap/loadkmap.c (revision 5f7096188587a2c7c95fa3c69b78e1ec9c7923d0)
1 #include <sys/types.h>
2 #include <sys/stat.h>
3 #include <sys/ioctl.h>
4 #include "../../dev/iteioctl.h"
5 #include "../../dev/kbdmap.h"
6 #include <stdio.h>
7 
8 
9 void load_kmap __P((const char *));
10 void dump_kmap();
11 
12 int
13 main(argc, argv)
14      int argc;
15      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 (file)
34      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, ITELOADKMAP, buf) == 0)
44 	    return;
45 	  else
46 	    perror ("ITELOADKMAP");
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()
59 {
60   char buf[sizeof (struct kbdmap)];
61   if (ioctl (0, ITEGETKMAP, buf) == 0)
62     write (1, buf, sizeof (buf));
63   else
64     perror ("ITEGETKMAP");
65 }
66