summaryrefslogtreecommitdiffstats
path: root/perl-install/standalone/mousedrake
blob: 5736f79ee8205c05e45faabeb36803f3e9247417 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/usr/bin/perl

use lib qw(/usr/lib/libDrakX);

use common qw(:common :system);
use interactive;
use mouse;
use c;

local $_ = join '', @ARGV;

/-h/ and die "usage: mousedrake [--auto] [--testing]\n";

$::auto = /-auto/;
$::testing = /-testing/;
$::isStandalone = 1;

my $in = vnew interactive('su');

my ($mouse) = mouse::detect() unless $::noauto;

if (!$mouse || !$::auto) {
    $mouse ||= mouse::fullname2mouse("serial|Generic 2 Button Mouse");
    my $name = $in->ask_from_treelistf('', _("Please, choose the type of your mouse."), '|',
				       sub { join '|', map { translate($_) } split '\|', $_[0] },
				       [ mouse::fullnames ], 
				       $mouse->{type} . '|' . $mouse->{name});
    $mouse = mouse::fullname2mouse($name);

    if ($mouse->{device} eq "usbmouse") {
	require pci_probing::main;
	my ($c) = pci_probing::main::probe("serial_usb") or die _("no serial_usb found\n");
	eval { modules::load($c->[1], "serial_usb") };
    }
}

$mouse->{XEMU3} = 'yes' if $mouse->{nbuttons} < 3 && (!$::noauto || $in->ask_yesorno('', _("Emulate third button?"), 1));

$o->{mouse}{device} = 
  $o->ask_from_listf(_("Mouse Port"),
		     _("Please choose on which serial port your mouse is connected to."),
		     \&mouse::serial_port2text,
		     [ mouse::serial_ports ]) if $mouse->{type} eq 'serial';

mouse::write('', $mouse);
modules::write_conf('') if $mouse->{device} eq "usbmouse" && !$::testing;

my $f = "/etc/X11/XF86Config";
my $g = "/etc/X11/XF86Config-4";

my @zaxis = (
  $mouse->{nbuttons} > 3 ? [ "ZAxisMapping", "4 5" ] : (),
  $mouse->{nbuttons} > 5 ? [ "ZAxisMapping", "6 7" ] : (),
  $mouse->{nbuttons} < 3 ? ([ "Emulate3Buttons" ], [ "Emulate3Timeout", "50" ]) : ()
);

my $zaxis = join('', map { qq(\n    $_->[0]) . ($_->[1] && qq( $_->[1])) } @zaxis);
substInFile {
    if (/^Section\s+"Pointer"/ .. /^EndSection/) {
	$_ = '' if /(ZAxisMapping|Emulate3)/; #- remove existing line
	s|^(\s*Protocol\s+).*|$1"$mouse->{XMOUSETYPE}"|;
	s|^(\s*Device\s+).*|$1"/dev/mouse"$zaxis|;
    }
} $f if -e $f && !$::testing;

$zaxis = join('', map { qq(\n    Option "$_->[0]") . ($_->[1] && qq( "$_->[1]")) } @zaxis);
substInFile {
    if (/Identifier\s+"Mouse1"/ .. /^EndSection/) {
	$_ = '' if /(ZAxisMapping|Emulate3)/; #- remove existing line
	s|^(\s*Option\s+"Protocol"\s+).*|$1"$mouse->{XMOUSETYPE}"|;
	s|^(\s*Option\s+"Device"\s+).*|$1"/dev/mouse"$zaxis|;
    }
} $g if -e $g && !$::testing;

$in->exit(0);