1 /* loadkeys - load national keyboard map Author: Marcus Hampel 2 */ 3 #include <sys/types.h> 4 #include <sys/ioctl.h> 5 #include <minix/keymap.h> 6 #include <fcntl.h> 7 #include <unistd.h> 8 #include <stdlib.h> 9 #include <stdio.h> 10 #include <string.h> 11 #include <errno.h> 12 13 #define KBD_DEVICE "/dev/console" 14 15 void fatal(char *say) 16 { 17 fprintf(stderr, "loadkeys: %s: %s\n", say, strerror(errno)); 18 exit(EXIT_FAILURE); 19 } 20 21 22 void usage(void) 23 { 24 fprintf(stderr, "usage: loadkeys <mapfile>\n"); 25 exit(EXIT_FAILURE); 26 } 27 28 29 int main(int argc, char *argv[]) 30 { 31 char sig[4]; 32 keymap_t keymap; 33 int fd; 34 35 if (argc != 2) 36 usage(); 37 38 if ((fd = open(argv[1], O_RDONLY)) < 0) fatal(argv[1]); 39 40 if (read(fd, sig, sizeof(sig)) < sizeof(sig)) fatal(argv[1]); 41 42 if (memcmp(sig, KEY_MAGIC, sizeof(sig)) != 0) { 43 fprintf(stderr, "loadkeys: %s: not a keymap file\n", argv[1]); 44 return EXIT_FAILURE; 45 } 46 47 if (read(fd, keymap, sizeof(keymap)) < sizeof(keymap)) fatal(argv[1]); 48 49 close(fd); 50 51 if ((fd = open(KBD_DEVICE, O_WRONLY)) < 0) fatal(KBD_DEVICE); 52 53 if (ioctl(fd, KIOCSMAP, keymap) < 0) fatal(KBD_DEVICE); 54 55 return EXIT_SUCCESS; 56 } 57