home *** CD-ROM | disk | FTP | other *** search
/ Inter.Net 55-2 / Inter.Net 55-2.iso / Mandrake / mdkinst / usr / bin / perl-install / mouse.pm < prev    next >
Encoding:
Perl POD Document  |  2000-01-12  |  5.0 KB  |  126 lines

  1. package mouse;
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9. use common qw(:common :system :functional :file);
  10. use modules;
  11. use detect_devices;
  12. use run_program;
  13. use devices;
  14. use commands;
  15. use modules;
  16. use log;
  17.  
  18. my @mouses_fields = qw(nbuttons device MOUSETYPE XMOUSETYPE FULLNAME);
  19. my @mouses = (
  20.   [ 0, "none",  "none",         "Microsoft",      __("No Mouse") ],
  21.   [ 2, "ttyS",  "pnp",          "Auto",           __("Microsoft Rev 2.1A or higher (serial)") ],
  22.   [ 3, "ttyS",  "logim",        "MouseMan",       __("Logitech CC Series (serial)") ],
  23.   [ 5, "ttyS",  "pnp",          "IntelliMouse",   __("Logitech MouseMan+/FirstMouse+ (serial)") ],
  24.   [ 5, "ttyS",  "ms3",          "IntelliMouse",   __("ASCII MieMouse (serial)") ],
  25.   [ 5, "ttyS",  "ms3",          "IntelliMouse",   __("Genius NetMouse (serial)") ],
  26.   [ 5, "ttyS",  "ms3",          "IntelliMouse",   __("Microsoft IntelliMouse (serial)") ],
  27.   [ 2, "ttyS",  "MMSeries",     "MMSeries",       __("MM Series (serial)") ],
  28.   [ 2, "ttyS",  "MMHitTab",     "MMHittab",       __("MM HitTablet (serial)") ],
  29.   [ 3, "ttyS",  "Logitech",     "Logitech",       __("Logitech Mouse (serial, old C7 type)") ],
  30.   [ 3, "ttyS",  "MouseMan",     "MouseMan",       __("Logitech MouseMan/FirstMouse (serial)") ],
  31.   [ 2, "ttyS",  "Microsoft",    "Microsoft",        __("Generic Mouse (serial)") ],
  32.   [ 2, "ttyS",  "Microsoft",    "Microsoft",      __("Microsoft compatible (serial)") ],
  33.   [ 3, "ttyS",  "Microsoft",    "Microsoft",        __("Generic 3 Button Mouse (serial)") ],
  34.   [ 2, "ttyS",  "MouseSystems", "MouseSystems",   __("Mouse Systems (serial)") ],
  35.   [ 2, "psaux", "ps/2",         "PS/2",           __("Generic Mouse (PS/2)") ],
  36.   [ 3, "psaux", "ps/2",         "PS/2",           __("Logitech MouseMan/FirstMouse (ps/2)") ],
  37.   [ 3, "psaux", "ps/2",         "PS/2",           __("Generic 3 Button Mouse (PS/2)") ],
  38.   [ 2, "psaux", "ps/2",      "GlidePointPS/2",    __("ALPS GlidePoint (PS/2)") ],
  39.   [ 5, "psaux", "ps/2",      "MouseManPlusPS/2",  __("Logitech MouseMan+/FirstMouse+ (PS/2)") ],
  40.   [ 5, "psaux", "ps/2",      "ThinkingMousePS/2", __("Kensington Thinking Mouse (PS/2)") ],
  41.   [ 5, "psaux", "ps/2",         "NetMousePS/2",   __("ASCII MieMouse (PS/2)") ],
  42.   [ 5, "psaux", "netmouse",     "NetMousePS/2",   __("Genius NetMouse (PS/2)") ],
  43.   [ 5, "psaux", "netmouse",     "NetMousePS/2",   __("Genius NetMouse Pro (PS/2)") ],
  44.   [ 5, "psaux", "netmouse",     "NetScrollPS/2",  __("Genius NetScroll (PS/2)") ],
  45.   [ 5, "psaux", "imps2",        "IMPS/2",         __("Microsoft IntelliMouse (PS/2)") ],
  46.   [ 2, "atibm",    "Busmouse",  "BusMouse",         __("ATI Bus Mouse") ],
  47.   [ 2, "inportbm", "Busmouse",  "BusMouse",       __("Microsoft Bus Mouse") ],
  48.   [ 3, "logibm",   "Busmouse",  "BusMouse",       __("Logitech Bus Mouse") ],
  49.   [ 2, "usbmouse", "ps/2",      "PS/2",           __("USB Mouse") ],
  50.   [ 3, "usbmouse", "ps/2",      "PS/2",           __("USB Mouse (3 buttons or more)") ],
  51. );
  52. map_index {
  53.     my %l; @l{@mouses_fields} = @$_;
  54.     $mouses[$::i] = \%l;
  55. } @mouses;
  56.  
  57. sub names { map { $_->{FULLNAME} } @mouses }
  58.  
  59. sub name2mouse {
  60.     my ($name) = @_;
  61.     foreach (@mouses) {
  62.     return { %$_ } if $name eq $_->{FULLNAME};
  63.     }
  64.     die "$name not found";
  65. }
  66.  
  67. sub serial_ports_names() {
  68.     map { "ttyS" . ($_ - 1) . " / COM$_" } 1..4;
  69. }
  70. sub serial_ports_names2dev {
  71.     local ($_) = @_;
  72.     first(/(\w+)/);
  73. }
  74.  
  75. sub read($) {
  76.     my ($prefix) = @_;
  77.     my %mouse = getVarsFromSh "$prefix/etc/sysconfig/mouse";
  78.     $mouse{device} = readlink "$prefix/dev/mouse" or log::l("reading $prefix/dev/mouse symlink failed");
  79.     %mouse;
  80. }
  81.  
  82. sub write($;$) {
  83.     my ($prefix, $mouse) = @_;
  84.     local $mouse->{FULLNAME} = qq("$mouse->{FULLNAME}");
  85.     setVarsInSh("$prefix/etc/sysconfig/mouse", $mouse, qw(MOUSETYPE XMOUSETYPE FULLNAME XEMU3));
  86.     symlinkf $mouse->{device}, "$prefix/dev/mouse" or log::l("creating $prefix/dev/mouse symlink failed");
  87. }
  88.  
  89. sub mouseconfig {
  90.     my ($t, $mouse, $wacom);
  91.  
  92.     foreach (0..1) { 
  93.     $t = detect_devices::probe_device("/dev/ttyS$_");
  94.     if ($t->{CLASS} =~ /MOUSE/i) {
  95.         $t->{MFG} ||= $t->{MANUFACTURER};
  96.  
  97.         $mouse = name2mouse("Microsoft IntelliMouse (serial)") if $t->{MFG} eq 'MSH' && $t->{MODEL} eq '0001';
  98.         $mouse = name2mouse("Logitech MouseMan/FirstMouse (serial)") if $t->{MFG} eq 'LGI' && $t->{MODEL} =~ /^80/;
  99.         $mouse = name2mouse("Genius NetMouse (serial)") if $t->{MFG} eq 'KYE' && $t->{MODEL} eq '0003';
  100.  
  101.         $mouse ||= name2mouse("Generic Mouse (serial)"); 
  102.         $mouse->{device} = "ttyS$_";
  103.         last;
  104.     } elsif ($t->{CLASS} eq "PEN" || $t->{MANUFACTURER} eq "WAC") {
  105.         $wacom = "ttyS$_";
  106.     }
  107.     }
  108.     $mouse, $wacom;
  109. }
  110.  
  111. sub detect() {
  112.     detect_devices::hasMousePS2 and return name2mouse("Generic Mouse (PS/2)");
  113.  
  114.     eval { commands::modprobe("serial") };
  115.     my ($r, $wacom) = mouseconfig(); return ($r, $wacom) if $r;
  116.  
  117.     require pci_probing::main;
  118.     if (my ($c) = pci_probing::main::probe("serial_usb")) {
  119.     eval { modules::load($c->[1], "serial_usb") };
  120.     sleep(1);
  121.     do { $wacom or modules::unload("serial"); return name2mouse("USB Mouse"), $wacom } if !$@ && detect_devices::tryOpen("usbmouse");
  122.     modules::unload($c->[1], 'remove_alias');
  123.     }
  124.     die "mouseconfig failed";
  125. }
  126.