xref: /netbsd-src/sys/arch/x68k/usr.bin/loadkmap/loadkmap.c (revision 6b664a713479c31d4f17b38b42182a5d5fa21802)
1 /*	$NetBSD: loadkmap.c,v 1.11 2024/01/07 07:58:34 isaki Exp $	*/
2 /*
3  * loadkmap - load keyboard map (for NetBSD/X680x0)
4  * from: amiga/stand/loadkmap/loadkmap.c
5  * Copyright 1994 by Masaru Oki
6  */
7 
8 #include <sys/cdefs.h>
9 __RCSID("$NetBSD: loadkmap.c,v 1.11 2024/01/07 07:58:34 isaki Exp $");
10 
11 #include <stdio.h>
12 #include <stdlib.h>
13 #include <unistd.h>
14 #include <fcntl.h>
15 #include <sys/types.h>
16 #include <sys/ioctl.h>
17 #include <machine/kbdmap.h>
18 #include <machine/iteioctl.h>
19 
20 void load_kmap(const char *);
21 
22 int
main(int argc,char * argv[])23 main(int argc, char *argv[])
24 {
25 
26 	if (argc != 2) {
27 		fprintf(stderr, "Usage: %s kmapfile\n", argv[0]);
28 		exit (1);
29 	}
30 
31 	load_kmap(argv[1]);
32 	exit(0);
33 }
34 
35 void
load_kmap(const char * file)36 load_kmap(const char *file)
37 {
38 	unsigned char buf[sizeof(struct kbdmap)];
39 	int fd;
40 
41 	if ((fd = open(file, 0)) >= 0) {
42 		if (read(fd, buf, sizeof(buf)) == sizeof(buf)) {
43 			if (ioctl(0, ITEIOCSKMAP, buf) == 0)
44 				return;
45 			else
46 				perror("ITEIOCSKMAP");
47 		} else {
48 			perror("read kbdmap");
49 		}
50 
51 		close (fd);
52 	} else {
53 		perror("open kbdmap");
54 	}
55 }
56