home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / root / usr / sbin / xkbctrl < prev    next >
Text File  |  2006-11-29  |  3KB  |  142 lines

  1. #!/usr/bin/perl
  2. # Copyright (c) 2002 SuSE GmbH Nuernberg, Germany.  All rights reserved.
  3. #
  4. # Author: Marcus Schaefer <sax@suse.de>, 2002
  5. # SaX2 script: get console -> x11 xkb mapping information
  6. # --
  7. # CVS ID:
  8. # --------
  9. # Status: Up-to-date
  10. #
  11. use strict;
  12.  
  13. #=================================
  14. # Globals...
  15. #---------------------------------
  16. my $CFGMap = "/usr/share/sax/sysp/maps/Keyboard.map";
  17.  
  18. #=================================
  19. # The magic main :-)
  20. #---------------------------------
  21. sub main {
  22. #------------------------------------------------
  23. # check for all the keyboard information needed    
  24. # to setup X11 XKB keyboard:
  25. # --
  26.     my $XkbVariant;
  27.     my $XkbLayout;
  28.     my $XkbModel;
  29.     my $Protocol;
  30.     my $XkbRules;
  31.     my $XkbOptions;
  32.     my $MapName;
  33.     my $XkbKeyCodes;
  34.     my $LeftAlt;
  35.     my $RightAlt;
  36.     my $ScrollLock;
  37.     my $RightCtl;
  38.     my $Apply;
  39.  
  40.     my %map;
  41.     my %opt;
  42.     
  43.     if (! defined $ARGV[0]) {
  44.         die "xkbctrl: no console name given";
  45.     }
  46.     if ($ARGV[0] =~ /(.*)\.map\.gz.*/) {
  47.         $ARGV[0] = $1;
  48.     }
  49.     %map = ReadDataConfigMap ($CFGMap);
  50.     foreach (keys %map) {
  51.     if ($_ eq $ARGV[0]) {
  52.         my @list = split (/:/,$map{$_});
  53.         $XkbModel    = Tr (shift(@list));
  54.         $XkbLayout   = Tr (shift(@list));
  55.         $XkbVariant  = Tr (shift(@list));
  56.         $XkbKeyCodes = Tr (shift(@list));
  57.         $LeftAlt     = Tr (shift(@list));
  58.         $RightAlt    = Tr (shift(@list));
  59.         $ScrollLock  = Tr (shift(@list));
  60.         $RightCtl    = Tr (shift(@list));
  61.         $XkbOptions  = Tr (join(":",@list));
  62.     }
  63.     }
  64.     $opt{-model}   = $XkbModel;
  65.     $opt{-layout}  = $XkbLayout;
  66.     $opt{-option}  = $XkbOptions;
  67.     $opt{-variant} = $XkbVariant;
  68.     foreach (keys %opt) {
  69.     if (($opt{$_} ne "x") && ($opt{$_} ne "")) {
  70.         $Apply = "$Apply $_ $opt{$_}";
  71.     }
  72.     }
  73.     $Apply =~ s/^ +//;
  74.  
  75.     print "\$[\n";
  76.     if ($XkbVariant ne "x") {
  77.     print "   \"XkbVariant\"   : \"$XkbVariant\",\n";
  78.     }
  79.     print "   \"XkbLayout\"    : \"$XkbLayout\",\n";
  80.     print "   \"XkbModel\"     : \"$XkbModel\",\n";
  81.     if ($XkbOptions ne "x") {
  82.     print "   \"XkbOptions\"   : \"$XkbOptions\",\n";
  83.     }
  84.     if ($XkbKeyCodes !~ /xfree86/) {
  85.     print "   \"XkbKeyCodes\"  : \"$XkbKeyCodes\",\n";
  86.     }
  87.     if ($LeftAlt ne "x") {
  88.     print "   \"LeftAlt\"      : \"$LeftAlt\",\n";
  89.     }
  90.     if ($RightAlt ne "x") {
  91.     print "   \"RightAlt\"     : \"$RightAlt\",\n";
  92.     }
  93.     if ($ScrollLock ne "x") {
  94.     print "   \"ScrollLock\"   : \"$ScrollLock\",\n";
  95.     }
  96.     if ($RightCtl ne "x") {
  97.     print "   \"RightCtl\"     : \"$RightCtl\",\n";
  98.     }
  99.     print "   \"Apply\"        : \"$Apply\"\n";
  100.     print "]\n"
  101. }
  102.  
  103. #----[ ReadDataConfigMap ]----------#
  104. sub ReadDataConfigMap {
  105. #--------------------------------------------
  106. # read Keyboard.map information file...
  107. # return a hash
  108. #
  109.     my $filename = $_[0];
  110.  
  111.     my $consoleName;
  112.     my $stuff;
  113.     my %result;
  114.  
  115.     if (! open (DATA,$filename)) {
  116.         die "could not open file: $filename";
  117.     }
  118.     while (my $line=<DATA>) {
  119.         chomp ($line);
  120.         my @list = split (/:/,$line);
  121.         $consoleName = shift (@list);
  122.         $consoleName =~ s/ +//g;
  123.         $consoleName =~ s/\t+//g;
  124.         $stuff = join(":",@list);
  125.         $result{$consoleName} = $stuff;
  126.     }
  127.     return (%result);
  128. }
  129.  
  130. #---[ tr ]----#
  131. sub Tr {
  132. #----------------------------------------------
  133. # translate item into a non whitespace format
  134.     my $item = $_[0];
  135.     $item =~ s/^\t+//g; $item =~ s/\t+$//g;
  136.     $item =~ s/^ +//g; $item =~ s/ +$//g;
  137.     return ($item);
  138. }
  139.  
  140. main();
  141.