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