xref: /netbsd/sys/arch/atari/stand/loadkmap/loadkmap.c (revision bf9ec67e)
1 /*	$NetBSD: loadkmap.c,v 1.3 2002/04/12 22:09:28 leo 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 int load_kmap __P((const char *, int));
12 int dump_kmap();
13 
14 int
15 main(argc, argv)
16      int argc;
17      char *argv[];
18 {
19 	int	set_sysmap = 0;
20 	char	*mapfile;
21 	int	rc = 0;
22 
23 	if (argc > 2) {
24 		if ((argc == 3) && !strcmp(argv[1], "-f")) {
25 			mapfile = argv[2];
26 			set_sysmap = 1;
27 		}
28 		else {
29 			fprintf(stderr, "%s [-f] keymap\n", argv[0]);
30 			exit(1);
31 		}
32 	}
33 	else mapfile = argv[1];
34 
35 	if (argc == 1)
36 		rc = dump_kmap();
37 	else rc = load_kmap(mapfile, set_sysmap);
38 
39 	exit (rc);
40 }
41 
42 
43 int
44 load_kmap(file, set_sysmap)
45 const char	*file;
46 int		set_sysmap;
47 {
48 	int	fd;
49 	char	buf[sizeof (struct kbdmap)];
50 	int	ioc;
51 
52 	ioc = set_sysmap ? ITEIOCSSKMAP : ITEIOCSKMAP;
53 
54 	if ((fd = open (file, 0)) >= 0) {
55 		if (read (fd, buf, sizeof (buf)) == sizeof (buf)) {
56 			if (ioctl (0, ioc, buf) == 0) {
57 				close(fd);
58 				return 0;
59 			}
60 			else perror("ITEIOCSKMAP");
61 		}
62 		else perror("read kmap");
63 
64 		close(fd);
65 	}
66 	else perror("open kmap");
67 	return 1;
68 }
69 
70 int
71 dump_kmap()
72 {
73 	char buf[sizeof (struct kbdmap)];
74 
75 	if (ioctl (0, ITEIOCGKMAP, buf) == 0) {
76 		write (1, buf, sizeof (buf));
77 		return 0;
78 	}
79 	perror ("ITEIOCGKMAP");
80 	return 1;
81 }
82