loadkmap.c revision 1.8
11.8Scegger/* $NetBSD: loadkmap.c,v 1.8 2009/03/18 10:22:26 cegger 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.1Sleo 111.1Sleo 121.5Sdslint load_kmap(const char *, int); 131.3Sleoint dump_kmap(); 141.1Sleo 151.1Sleoint 161.7Sdslmain(int argc, char *argv[]) 171.1Sleo{ 181.2Sleo int set_sysmap = 0; 191.2Sleo char *mapfile; 201.3Sleo int rc = 0; 211.1Sleo 221.2Sleo if (argc > 2) { 231.2Sleo if ((argc == 3) && !strcmp(argv[1], "-f")) { 241.2Sleo mapfile = argv[2]; 251.2Sleo set_sysmap = 1; 261.2Sleo } 271.2Sleo else { 281.2Sleo fprintf(stderr, "%s [-f] keymap\n", argv[0]); 291.2Sleo exit(1); 301.2Sleo } 311.2Sleo } 321.2Sleo else mapfile = argv[1]; 331.2Sleo 341.2Sleo if (argc == 1) 351.3Sleo rc = dump_kmap(); 361.3Sleo else rc = load_kmap(mapfile, set_sysmap); 371.2Sleo 381.3Sleo exit (rc); 391.1Sleo} 401.1Sleo 411.1Sleo 421.3Sleoint 431.6Sdslload_kmap(const char *file, int set_sysmap) 441.1Sleo{ 451.2Sleo int fd; 461.2Sleo char buf[sizeof (struct kbdmap)]; 471.2Sleo int ioc; 481.2Sleo 491.2Sleo ioc = set_sysmap ? ITEIOCSSKMAP : ITEIOCSKMAP; 501.2Sleo 511.2Sleo if ((fd = open (file, 0)) >= 0) { 521.2Sleo if (read (fd, buf, sizeof (buf)) == sizeof (buf)) { 531.3Sleo if (ioctl (0, ioc, buf) == 0) { 541.3Sleo close(fd); 551.3Sleo return 0; 561.3Sleo } 571.2Sleo else perror("ITEIOCSKMAP"); 581.2Sleo } 591.2Sleo else perror("read kmap"); 601.1Sleo 611.2Sleo close(fd); 621.1Sleo } 631.2Sleo else perror("open kmap"); 641.3Sleo return 1; 651.1Sleo} 661.1Sleo 671.3Sleoint 681.8Sceggerdump_kmap(void) 691.1Sleo{ 701.2Sleo char buf[sizeof (struct kbdmap)]; 711.2Sleo 721.3Sleo if (ioctl (0, ITEIOCGKMAP, buf) == 0) { 731.2Sleo write (1, buf, sizeof (buf)); 741.3Sleo return 0; 751.3Sleo } 761.3Sleo perror ("ITEIOCGKMAP"); 771.3Sleo return 1; 781.1Sleo} 79