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

  1. #!/usr/bin/perl
  2. # Copyright (c) 1996 SuSE GmbH Nuernberg, Germany.  All rights reserved.
  3. #
  4. # Author: Marcus Schaefer <ms@suse.de>, 2003
  5. # xupdate will exchange the InputDevice section for the mouse
  6. # with a new one created involving the libhd data
  7. #   
  8. # Status: Up-to-date
  9. #
  10. use strict;
  11.  
  12. #---[ readConfig ]-----#
  13. sub readConfig {
  14. #--------------------------------------------------
  15. # read config file and save lines as perl list
  16. # return this list and close the descriptor
  17. #
  18.     my @config = ();
  19.     while (my $line = <>) {
  20.         push (@config,$line);
  21.     }
  22.     close (FD);
  23.     return (@config);
  24. }
  25.  
  26. #---[ getMouseSection ]-----#
  27. sub getMouseSection {
  28. #--------------------------------------------------
  29. # get mouse section coordinates
  30. #
  31.     my @point = ();
  32.     my $count = 0;
  33.     my $start = 0;
  34.     foreach my $line (@_) {
  35.     $count++;
  36.     if ($line =~ /Section.*InputDevice.*/) {
  37.         $start = $count;
  38.         next;
  39.     }
  40.     if ($line =~ /Driver.*mouse.*/) {
  41.         $point[0] = $start;
  42.     }
  43.     if ((defined $point[0]) && ($line =~ "EndSection")) {
  44.         $point[1] = $count;
  45.         return @point;
  46.     }
  47.     }
  48. }
  49.  
  50. #---[ getMonitorSection ]-----#
  51. sub getMonitorSection {
  52. #--------------------------------------------------
  53. # get monitor section coordinates
  54. #
  55.     my @point = ();
  56.     my $count = 0;
  57.     my $start = 0;
  58.     foreach my $line (@_) {
  59.     $count++;
  60.     if ($line =~ /Section.*Monitor.*/) {
  61.         $start = $count;
  62.         next;
  63.     }
  64.     if ($line =~ /Identifier.*Monitor\[0\].*/) {
  65.         $point[0] = $start;
  66.     }
  67.     if ((defined $point[0]) && ($line =~ "EndSection")) {
  68.         $point[1] = $count;
  69.         return @point;
  70.     }
  71.     }
  72. }
  73.  
  74. #---[ getServerLayoutSection ]-----#
  75. sub getServerLayoutSection {
  76. #--------------------------------------------------
  77. # get server layout section coordinates
  78. #
  79.     my @point = ();
  80.     my $count = 0;
  81.     my $start = 0;
  82.     foreach my $line (@_) {
  83.     $count++;
  84.     if ($line =~ /Section.*ServerLayout.*/) {
  85.         $start = $count;
  86.         next;
  87.     }
  88.     if ($line =~ /InputDevice.*CorePointer.*/) {
  89.         $point[0] = $count;
  90.     }
  91.     if ((defined $point[0]) && ($line =~ "EndSection")) {
  92.         $point[1] = $count;
  93.         return @point;
  94.     }
  95.     }
  96. }
  97.  
  98. #---[ getPointerLayout ]-----#
  99. sub getPointerLayout {
  100. #--------------------------------------------------
  101. # get InputDevice section entries
  102. #
  103.     my @result = ();
  104.     my @list;
  105.     foreach my $line (@_) {
  106.         if ($line =~ /.*Device.*\"(.*)\"/) {
  107.             push (@list,$1);
  108.         }
  109.         if ($line =~ /.*Driver.*\"(.*)\"/) {
  110.             push (@list,$1);
  111.         }
  112.     }
  113.     my %entity;
  114.     foreach my $line (@_) {
  115.         if ($line =~ /.*Mouse\[(.*)\].*/) {
  116.             my $count  = $1;
  117.             my $driver = $list[$count - 1];
  118.             my $device = $list[$count];
  119.             if ($count eq 1) {
  120.                 my $pointer = "CorePointer";
  121.                 push (@result,"InputDevice  \"Mouse[$count]\" \"$pointer\"");
  122.             } else {
  123.             if (! defined $entity{$driver}{$device}) {
  124.                 my $pointer = "SendCoreEvents";
  125.                 push (@result,"InputDevice  \"Mouse[$count]\" \"$pointer\"");
  126.             }
  127.             }
  128.             $entity{$driver}{$device} = $count;
  129.         }
  130.     }
  131.     return @result;
  132. }
  133.  
  134. # /.../
  135. # now exchange the mouse section with the real detected
  136. # input device section using xmset -c feature
  137. # ---
  138. my @list   = readConfig();
  139. my @point1 = getMouseSection (@list);
  140. my @point2 = getMonitorSection (@list);
  141. my @point3 = getServerLayoutSection (@list);
  142. my @detect = split (/\n/,qx (/usr/sbin/xmset -c));
  143. my $size   = qx (/usr/sbin/xmset -m);
  144. my @layout = getPointerLayout (@detect);
  145.  
  146. for (my $i=0;$i < $point1[0] - 1;$i++) {
  147.     print $list[$i];
  148. }
  149. foreach my $line (@detect) {
  150.     print "$line\n";
  151. }
  152. for (my $i=$point1[1];$i <= $point2[1];$i++) {
  153.     if ($list[$i] !~ /DisplaySize/) {
  154.         print $list[$i];
  155.     }
  156.     if ($list[$i] =~ /Identifier/) {
  157.     if ($size ne "") {
  158.         print "  $size\n";
  159.     }
  160.     }
  161. }
  162. for (my $i=$point2[1];$i <= $point3[0] - 2;$i++) {
  163.     print $list[$i];
  164. }
  165. foreach (@layout) {
  166.    print "  $_\n";
  167. }
  168. for (my $i=$point3[0];$i <= @list;$i++) {
  169.     print "$list[$i]";
  170. }
  171.