summaryrefslogtreecommitdiffstats
path: root/perl-install/standalone/mousedrake
blob: 7ac3b927dab670e6dda531dbecf10f905eed4204 (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
#!/usr/bin/perl

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

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

local $_ = join '', @ARGV;

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

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

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

my $mouse = eval { mouse::detect() } unless $::noauto;

if (!(my $name = $mouse && $mouse->{FULLNAME}) || !$::auto) {
    $name ||= "Generic Mouse (serial)";
    $name = $in->ask_from_list_('', _("What is the type of your mouse?"), [ mouse::names() ], $name);
    $mouse = mouse::name2mouse($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));

$mouse->{device} = mouse::serial_ports_names2dev(
	$in->ask_from_list(_("Mouse Port"),
			   _("Which serial port is your mouse connected to?"),
			   [ mouse::serial_ports_names() ])) if $mouse->{device} eq "ttyS";

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

my $f = "/etc/X11/XF86Config";
my $g = "/etc/X11/XF86Config-4";
substInFile {
    if (/^Section "Pointer"/ .. /^EndSection/) {
	s|^(\s*Protocol\s+).*|$1"$mouse->{XMOUSETYPE}"|;
	s|^(\s*Device\s+).*|$1"/dev/mouse"|;
    }
} $f if -e $f && !$::testing;
substInFile {
    if (/^Identifier "Mouse1"/ .. /^EndSection/) {
	s|^(\s*Option\s+"Protocol"\s+).*|$1"$mouse->{XMOUSETYPE}"|;
	s|^(\s*Option\s+"Device"\s+).*|$1"/dev/mouse"|;
    }
} $g if -e $g && !$::testing;

$in->exit(0);