loadkmap.c revision 1.9
11.9Schristos/* $NetBSD: loadkmap.c,v 1.9 2011/05/19 02:56:03 christos Exp $ */ 21.1Sleo 31.1Sleo#include <sys/types.h> 41.1Sleo#include <sys/stat.h> 51.1Sleo#include <sys/ioctl.h> 61.1Sleo#include "../../dev/iteioctl.h" 71.1Sleo#include "../../dev/kbdmap.h" 81.1Sleo#include <stdio.h> 91.4Smhitch#include <stdlib.h> 101.9Schristos#include <unistd.h> 111.9Schristos#include <fcntl.h> 121.1Sleo 131.5Sdslint load_kmap(const char *, int); 141.9Schristosint dump_kmap(void); 151.1Sleo 161.1Sleoint 171.7Sdslmain(int argc, char *argv[]) 181.1Sleo{ 191.2Sleo int set_sysmap = 0; 201.2Sleo char *mapfile; 211.3Sleo int rc = 0; 221.1Sleo 231.2Sleo if (argc > 2) { 241.2Sleo if ((argc == 3) && !strcmp(argv[1], "-f")) { 251.2Sleo mapfile = argv[2]; 261.2Sleo set_sysmap = 1; 271.2Sleo } 281.2Sleo else { 291.2Sleo fprintf(stderr, "%s [-f] keymap\n", argv[0]); 301.2Sleo exit(1); 311.2Sleo } 321.2Sleo } 331.2Sleo else mapfile = argv[1]; 341.2Sleo 351.2Sleo if (argc == 1) 361.3Sleo rc = dump_kmap(); 371.3Sleo else rc = load_kmap(mapfile, set_sysmap); 381.2Sleo 391.3Sleo exit (rc); 401.1Sleo} 411.1Sleo 421.1Sleo 431.3Sleoint 441.6Sdslload_kmap(const char *file, int set_sysmap) 451.1Sleo{ 461.2Sleo int fd; 471.2Sleo char buf[sizeof (struct kbdmap)]; 481.2Sleo int ioc; 491.2Sleo 501.2Sleo ioc = set_sysmap ? ITEIOCSSKMAP : ITEIOCSKMAP; 511.2Sleo 521.2Sleo if ((fd = open (file, 0)) >= 0) { 531.2Sleo if (read (fd, buf, sizeof (buf)) == sizeof (buf)) { 541.3Sleo if (ioctl (0, ioc, buf) == 0) { 551.3Sleo close(fd); 561.3Sleo return 0; 571.3Sleo } 581.2Sleo else perror("ITEIOCSKMAP"); 591.2Sleo } 601.2Sleo else perror("read kmap"); 611.1Sleo 621.2Sleo close(fd); 631.1Sleo } 641.2Sleo else perror("open kmap"); 651.3Sleo return 1; 661.1Sleo} 671.1Sleo 681.3Sleoint 691.8Sceggerdump_kmap(void) 701.1Sleo{ 711.2Sleo char buf[sizeof (struct kbdmap)]; 721.2Sleo 731.3Sleo if (ioctl (0, ITEIOCGKMAP, buf) == 0) { 741.2Sleo write (1, buf, sizeof (buf)); 751.3Sleo return 0; 761.3Sleo } 771.3Sleo perror ("ITEIOCGKMAP"); 781.3Sleo return 1; 791.1Sleo} 80