loadkmap.c revision 1.6
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
12void load_kmap(const char *);
13void dump_kmap(void);
14
15int
16main(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
33void
34load_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
57void
58dump_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