loadkmap.c revision 1.8
11.8Schristos/*	$NetBSD: loadkmap.c,v 1.8 2011/05/20 01:28:40 christos Exp $	*/
21.2Schopps
31.1Smw#include <sys/types.h>
41.1Smw#include <sys/stat.h>
51.1Smw#include <sys/ioctl.h>
61.1Smw#include "../../dev/iteioctl.h"
71.1Smw#include "../../dev/kbdmap.h"
81.1Smw#include <stdio.h>
91.6Stsutsui#include <stdlib.h>
101.7Schristos#include <unistd.h>
111.8Schristos#include <fcntl.h>
121.1Smw
131.1Smw
141.5Saymericvoid load_kmap(const char *);
151.5Saymericvoid dump_kmap(void);
161.1Smw
171.1Smwint
181.5Saymericmain(int argc, char *argv[])
191.1Smw{
201.1Smw  if (argc > 2)
211.1Smw    {
221.1Smw      fprintf (stderr, "%s keymap\n", argv[0]);
231.1Smw      exit (1);
241.1Smw    }
251.1Smw
261.1Smw  if (argc == 1)
271.1Smw    dump_kmap ();
281.1Smw  else
291.1Smw    load_kmap (argv[1]);
301.1Smw
311.1Smw  exit (0);
321.1Smw}
331.1Smw
341.1Smw
351.1Smwvoid
361.5Saymericload_kmap(const char *file)
371.1Smw{
381.1Smw  int fd;
391.1Smw  char buf[sizeof (struct kbdmap)];
401.1Smw
411.1Smw  if ((fd = open (file, 0)) >= 0)
421.1Smw    {
431.1Smw      if (read (fd, buf, sizeof (buf)) == sizeof (buf))
441.1Smw	{
451.3Schopps	  if (ioctl (0, ITEIOCSKMAP, buf) == 0)
461.1Smw	    return;
471.1Smw	  else
481.3Schopps	    perror ("ITEIOCSKMAP");
491.1Smw	}
501.1Smw      else
511.1Smw	perror ("read kmap");
521.1Smw
531.1Smw      close (fd);
541.1Smw    }
551.1Smw  else
561.1Smw    perror ("open kmap");
571.1Smw}
581.1Smw
591.1Smwvoid
601.5Saymericdump_kmap(void)
611.1Smw{
621.1Smw  char buf[sizeof (struct kbdmap)];
631.3Schopps  if (ioctl (0, ITEIOCGKMAP, buf) == 0)
641.1Smw    write (1, buf, sizeof (buf));
651.1Smw  else
661.3Schopps    perror ("ITEIOCGKMAP");
671.1Smw}
68