summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/TODO7
-rw-r--r--perl-install/Xconfig.pm28
-rw-r--r--perl-install/Xconfigurator.pm90
-rw-r--r--perl-install/Xconfigurator_consts.pm27
-rw-r--r--perl-install/commands.pm3
-rw-r--r--perl-install/common.pm6
-rw-r--r--perl-install/install2.pm17
-rw-r--r--perl-install/install_any.pm6
-rw-r--r--perl-install/install_steps.pm4
-rw-r--r--perl-install/install_steps_interactive.pm38
-rw-r--r--perl-install/interactive_gtk.pm4
-rw-r--r--perl-install/modules.pm25
-rw-r--r--perl-install/my_gtk.pm6
-rw-r--r--perl-install/pkgs.pm3
-rw-r--r--perl-install/printer.pm16
15 files changed, 165 insertions, 115 deletions
diff --git a/docs/TODO b/docs/TODO
index 8024c59b1..11b668325 100644
--- a/docs/TODO
+++ b/docs/TODO
@@ -7,13 +7,6 @@ update the list of modules (in update_kernel)
look at the pcmcia case
-Xconfigurator:
- simplify Monitors
- possibility to show card autodetected
- too slow at startup (when card autodetected)
- the wait_message is nasty (just pops half second)
- use the VideoRam for skeeping some tests (not all the 32 24 16 15 8)
-
merge the install(1) of redhat
in package choosing, the group (on the left) is no more `selected' (gtk focus) when clicking on a package (on the right)
diff --git a/perl-install/Xconfig.pm b/perl-install/Xconfig.pm
index acab3ca55..48b1cddca 100644
--- a/perl-install/Xconfig.pm
+++ b/perl-install/Xconfig.pm
@@ -1,6 +1,7 @@
package Xconfig;
use common qw(:common :file :system);
+use mouse;
# otherwise uses the rule substr($keymap, 0, 2)
my %keymap_translate = (
@@ -17,18 +18,14 @@ sub keymap_translate {
sub getinfo {
- my $o = {};
+ my $o = { monitor => { hsyncrange => "30-54" } };
# getinfoFromXF86Config($o);
getinfoFromDDC($o);
getinfoFromSysconfig($o);
- $o->{mouse}{emulate3buttons} = 1;
- unless ($o->{mouse}{XMOUSETYPE}) {
- my ($type, $dev) = split("\n", `mouseconfig --nointeractive 2>/dev/null`) or die "mouseconfig failed";
- $o->{mouse}{XMOUSETYPE} ||= $type;
- $o->{mouse}{device} ||= "/dev/$dev";
- }
- $o->{mouse}{device} ||= "/dev/mouse" if -e "/dev/mouse";
+ add2hash($o->{mouse}, mouse::detect()) unless $o->{mouse}{XMOUSETYPE};
+
+ $o->{mouse}{device} ||= "mouse" if -e "/dev/mouse";
$o;
}
@@ -45,7 +42,7 @@ sub getinfoFromXF86Config {
$o->{keyboard}{xkb_keymap} ||= $1 if /^\s*XkbLayout\s+"(.*?)"/;
} elsif (/^Section "Pointer"/ .. /^EndSection/) {
$o->{mouse}{XMOUSETYPE} ||= $1 if /^\s*Protocol\s+"(.*?)"/;
- $o->{mouse}{device} ||= $1 if /^\s*Device\s+"(.*?)"/;
+ $o->{mouse}{device} ||= $1 if m|^\s*Device\s+"/dev/(.*?)"|;
} elsif (my $i = /^Section "Device"/ .. /^EndSection/) {
if ($i = 1 && $c{type} && $c{type} ne "Generic VGA") {
add2hash($o->{card} ||= {}, \%c);
@@ -81,9 +78,9 @@ sub getinfoFromXF86Config {
sub getinfoFromSysconfig {
my $o = shift || {};
- if (my %mouse = getVarsFromSh "/etc/sysconfig/mouse") {
- $o->{mouse}{XMOUSETYPE} ||= $mouse{XMOUSETYPE};
- }
+
+ add2hash($o->{mouse}, mouse::read("/etc/sysconfig/mouse"));
+
if (my %keyboard = getVarsFromSh "/etc/sysconfig/keyboard") {
$keyboard{KEYTABLE} or last;
$o->{keyboard}{xkb_keymap} ||= keymap_translate($keyboard{KEYTABLE});
@@ -98,7 +95,7 @@ sub getinfoFromDDC {
my ($m, @l) = `ddcxinfos`;
$? == 0 or return $o;
- $o->{card}{memory} = to_int($m);
+ $o->{card}{memory} ||= to_int($m);
while (($_ = shift @l) ne "\n") {
my ($depth, $x, $y) = split;
$depth = int(log($depth) / log(2));
@@ -107,11 +104,12 @@ sub getinfoFromDDC {
push @{$o->{card}{depth}{32}}, [ $x, $y ] if $depth == 24;
}
}
- my ($h, $v, @m) = @l;
+ my ($h, $v, $size, @m) = @l;
chop $h; chop $v;
$O->{hsyncrange} ||= $h;
$O->{vsyncrange} ||= $v;
- $O->{modelines} ||= join '', @l;
+ $O->{size} ||= to_float($size);
+ $O->{modelines} ||= join '', @m;
$o;
}
diff --git a/perl-install/Xconfigurator.pm b/perl-install/Xconfigurator.pm
index 41edd3e3d..05d5983b1 100644
--- a/perl-install/Xconfigurator.pm
+++ b/perl-install/Xconfigurator.pm
@@ -2,10 +2,10 @@ package Xconfigurator;
use diagnostics;
use strict;
-use vars qw($in $install $resolution_wanted @depths @hsyncranges @vsyncranges %depths @resolutions @svgaservers @accelservers @allservers %videomemory @ramdac_name @ramdac_id @clockchip_name @clockchip_id %keymap_translate %standard_monitors $intro_text $finalcomment_text $s3_comment $cirrus_comment $probeonlywarning_text $monitorintro_text $hsyncintro_text $vsyncintro_text $XF86firstchunk_text $keyboardsection_start $keyboardsection_part2 $keyboardsection_end $pointersection_text1 $pointersection_text2 $monitorsection_text1 $monitorsection_text2 $monitorsection_text3 $monitorsection_text4 $modelines_text_Trident_TG_96xx $modelines_text $devicesection_text $screensection_text1);
+use vars qw($in $install $resolution_wanted @depths @monitorSize2resolution @hsyncranges %min_hsync4wres @vsyncranges %depths @resolutions @svgaservers @accelservers @allservers %videomemory @ramdac_name @ramdac_id @clockchip_name @clockchip_id %keymap_translate %standard_monitors $intro_text $finalcomment_text $s3_comment $cirrus_comment $probeonlywarning_text $monitorintro_text $hsyncintro_text $vsyncintro_text $XF86firstchunk_text $keyboardsection_start $keyboardsection_part2 $keyboardsection_end $pointersection_text1 $pointersection_text2 $monitorsection_text1 $monitorsection_text2 $monitorsection_text3 $monitorsection_text4 $modelines_text_Trident_TG_96xx $modelines_text $devicesection_text $screensection_text1);
use pci_probing::main;
-use common qw(:common :file);
+use common qw(:common :file :functional);
use log;
use Xconfigurator_consts;
@@ -125,12 +125,18 @@ sub rewriteInittab {
}
sub keepOnlyLegalModes {
- my ($card) = @_;
- my $mem = 1024 * ($card->{memory} || return);
+ my ($card, $monitor) = @_;
+ my $mem = 1024 * ($card->{memory} || 99999);
+ my $hsync = max(split(/[,-]/, $monitor->{hsyncrange}));
while (my ($depth, $res) = each %{$card->{depth}}) {
- @$res = grep { $mem >= product(@$_, $depth / 8) } @$res;
+ @$res = grep {
+ $mem >= product(@$_, $depth / 8) &&
+ $hsync >= ($min_hsync4wres{$_->[0]} || 0)
+ } @$res;
+ delete $card->{depth}{$depth} if @$res == 0;
}
+
}
sub cardConfigurationAuto() {
@@ -217,6 +223,8 @@ sub testConfig($) {
write_XF86Config($o, $tmpconfig);
+ unlink "/tmp/.X9-lock";
+
local *F;
open F, "$prefix$o->{card}{prog} :9 -probeonly -pn -xf86config $tmpconfig 2>&1 |";
foreach (<F>) {
@@ -253,6 +261,8 @@ sub testFinalConfig($;$) {
or $in->ask_yesorno(_("Test configuration"), _("Do you want to test the configuration?"))
or return 1;
+ unlink "$prefix/tmp/.X9-lock";
+
my $pid; unless ($pid = fork) {
my @l = "X";
@l = ($o->{card}{prog}, "-xf86config", $tmpconfig) if $::testing;
@@ -330,8 +340,7 @@ You can switch if off if you want, you'll hear a beep when it's over")) or retur
}
sub autoDefaultDepth($$) {
- my ($card, $resolution_wanted) = @_;
- my ($wres_wanted) = split 'x', $resolution_wanted;
+ my ($card, $wres_wanted) = @_;
my ($best, $depth);
while (my ($d, $r) = each %{$card->{depth}}) {
@@ -343,13 +352,17 @@ sub autoDefaultDepth($$) {
$best || $depth or die "no valid modes";
}
-sub chooseResolutions($$) {
- my ($card, $chosen_depth) = @_;
+sub autoDefaultResolution(;$) {
+ my $size = round(shift || 14); #- assume a small monitor (size is in inch)
+ $monitorSize2resolution[$size] ||
+ $monitorSize2resolution[$#monitorSize2resolution]; #- no corresponding resolution for this size. It means a big monitor, take biggest we have
+}
+sub chooseResolutions($$;$) {
+ my ($card, $chosen_depth, $chosen_w) = @_;
my $W = my_gtk->new(_("Resolution"));
my %txt2depth = reverse %depths;
- my $chosen_w = 9999999; #- will be set by the combo callback
- my ($r, $depth_combo, %w2depth, %w2h, %w2widget);
+ my ($r, $best_w, $depth_combo, %w2depth, %w2h, %w2widget);
my $set_depth = sub { $depth_combo->entry->set_text(translate($depths{$chosen_depth})) };
@@ -361,11 +374,15 @@ sub chooseResolutions($$) {
foreach (@$res) {
$w2h{$_->[0]} = $_->[1];
push @{$w2depth{$_->[0]}}, $depth;
+
+ $best_w = max($_->[0], $best_w) if $_->[0] <= $chosen_w;
}
}
+ $chosen_w = $best_w;
while (my ($w, $h) = each %w2h) {
my $V = $w . "x" . $h;
$w2widget{$w} = $r = new Gtk::RadioButton($r ? ($V, $r) : $V);
+ &$set($r) if $chosen_w == $w;
$r->signal_connect("clicked" => sub {
$ignore and return;
$chosen_w = $w;
@@ -397,18 +414,16 @@ sub chooseResolutions($$) {
$chosen_w > $w and &$set($w2widget{$chosen_w = $w});
});
&$set_depth();
+ $W->{ok}->grab_focus;
$W->main or return;
($chosen_depth, $chosen_w);
}
-sub resolutionsConfiguration($$) {
- my ($o, $option) = @_;
+sub resolutionsConfiguration($%) {
+ my ($o, %options) = @_;
my $card = $o->{card};
- my $auto = $option eq 'auto';
- my $nowarning = $auto || $option eq 'nowarning';
- my $noauto = $option eq 'noauto';
#- For the mono and vga16 server, no further configuration is required.
if (member($card->{server}, "Mono", "VGA16")) {
@@ -445,35 +460,38 @@ sub resolutionsConfiguration($$) {
$card->{depth}{$_} = [ map { [ split "x" ] } @resolutions ]
foreach @depths;
- if ($nowarning || (!$noauto && $in->ask_okcancel(_("Automatic resolutions"),
+ unless ($options{noauto}) {
+ if ($options{nowarning} || $in->ask_okcancel(_("Automatic resolutions"),
_("I can try to find the available resolutions (eg: 800x600).
Alas it can freeze sometimes
-Do you want to try?")))) {
- autoResolutions($o, $nowarning);
- is_empty_hash_ref($card->{depth}) and $in->ask_warn('',
+Do you want to try?"))) {
+ autoResolutions($o, $options{nowarning});
+ is_empty_hash_ref($card->{depth}) and $in->ask_warn('',
_("No valid modes found
Try with another video card or monitor")), return;
+ }
}
}
#- sort resolutions in each depth
foreach (values %{$card->{depth}}) {
- my $i;
+ my $i = 0;
@$_ = grep { first($i != $_->[0], $i = $_->[0]) }
sort { $b->[0] <=> $a->[0] } @$_;
}
- #- remove unusable resolutions (based on the video memory size)
- keepOnlyLegalModes($card);
+ #- remove unusable resolutions (based on the video memory size and the monitor hsync rate)
+ keepOnlyLegalModes($card, $o->{monitor});
- my $res = $o->{resolution_wanted} || $resolution_wanted;
- my $depth = eval { $card->{default_depth} || autoDefaultDepth($card, $res) };
+ my $res = $o->{resolution_wanted} || autoDefaultResolution($o->{monitor}{size});
+ my $wres = first(split 'x', $res);
+ my $depth = eval { $card->{default_depth} || autoDefaultDepth($card, $wres) };
- $auto or ($depth, $res) = chooseResolutions($card, $depth) or return;
+ $options{auto} or ($depth, $wres) = chooseResolutions($card, $depth, $wres) or return;
- unless ($res) {
+ unless ($wres) {
delete $card->{depth};
- return resolutionsConfiguration($o, 'noauto');
+ return resolutionsConfiguration($o, noauto => 1);
}
#- needed in auto mode when all has been provided by the user
@@ -481,7 +499,7 @@ Try with another video card or monitor")), return;
#- remove all biggest resolution (keep the small ones for ctl-alt-+)
#- otherwise there'll be a virtual screen :(
- $card->{depth}{$depth} = [ grep { $_->[0] <= $res } @{$card->{depth}{$depth}} ];
+ $card->{depth}{$depth} = [ grep { $_->[0] <= $wres } @{$card->{depth}{$depth}} ];
$card->{default_depth} = $depth;
1;
}
@@ -510,15 +528,15 @@ sub write_XF86Config {
$O = $o->{mouse};
print F $pointersection_text1;
print F qq( Protocol "$O->{XMOUSETYPE}"\n);
- print F qq( Device "$O->{device}"\n);
+ print F qq( Device "/dev/$O->{device}"\n);
#- this will enable the "wheel" or "knob" functionality if the mouse supports it
print F " ZAxisMapping 4 5\n" if
member($O->{XMOUSETYPE}, qw(IntelliMouse IMPS/2 ThinkingMousePS/2 NetScrollPS/2 NetMousePS/2 MouseManPlusPS/2));
print F $pointersection_text2;
- print F "#" unless $O->{emulate3buttons};
+ print F "#" unless $O->{XEMU3};
print F " Emulate3Buttons\n";
- print F "#" unless $O->{emulate3buttons};
+ print F "#" unless $O->{XEMU3};
print F " Emulate3Timeout 50\n\n";
print F "# ChordMiddle is an option for some 3-button Logitech mice\n\n";
print F "#" unless $O->{chordmiddle};
@@ -593,7 +611,7 @@ Section "Screen"
print F qq( EndSubsection\n);
}
print F "EndSection\n";
- };
+ }; #-"
#- SVGA screen section.
print F qq(
@@ -660,7 +678,7 @@ sub main {
$o->{monitor} = monitorConfiguration($o->{monitor});
- my $ok = resolutionsConfiguration($o, $::auto && 'auto' || $::noauto && 'noauto' || '');
+ my $ok = resolutionsConfiguration($o, auto => $::auto, noauto => $::noauto);
$ok &&= testFinalConfig($o, $::auto);
@@ -670,10 +688,10 @@ sub main {
my %c = my @c = (
__("Change Monitor") => sub { $o->{monitor} = monitorConfiguration() },
__("Change Graphic card") => sub { $o->{card} = cardConfiguration('', 'noauto') },
- __("Change Resolution") => sub { resolutionsConfiguration($o, 'noauto') },
+ __("Change Resolution") => sub { resolutionsConfiguration($o, noauto => 1) },
__("Automatical resolutions search") => sub {
delete $o->{card}{depth};
- resolutionsConfiguration($o, 'nowarning');
+ resolutionsConfiguration($o, nowarning => 1);
},
__("Show information") => sub { show_info($o) },
__("Test again") => sub { $ok = testFinalConfig($o, 1) },
diff --git a/perl-install/Xconfigurator_consts.pm b/perl-install/Xconfigurator_consts.pm
index 9429342eb..b44acf52b 100644
--- a/perl-install/Xconfigurator_consts.pm
+++ b/perl-install/Xconfigurator_consts.pm
@@ -16,6 +16,25 @@ $resolution_wanted = "1024x768";
@accelservers = qw(S3 Mach32 Mach8 8514 P9000 AGX W32 Mach64 I128 S3V 3DLabs);
@allservers = (qw(Mono VGA16), @svgaservers, @accelservers);
+{ #- @monitorSize2resolution
+ my %l = my @l = ( #- size in inch
+ 13 => "640x480",
+ 14 => "800x600",
+ 15 => "800x600",
+ 16 => "1024x768",
+ 17 => "1152x864",
+ 18 => "1280x1024",
+ 19 => "1280x1024",
+ 20 => "1600x1200",
+ );
+ for (my $i = 0; $i < $l[0]; $i++) {
+ $monitorSize2resolution[$i] = $l[1];
+ }
+ while (my ($s, $r) = each %l) {
+ $monitorSize2resolution[$s] = $r;
+ }
+}
+
%videomemory = (
__("256 kb") => 256,
__("512 kb") => 512,
@@ -59,6 +78,14 @@ $resolution_wanted = "1024x768";
"31.5-94.0",
);
+%min_hsync4wres = (
+ 640 => 31.5,
+ 800 => 35.1,
+ 1024 => 35.5,
+ 1152 => 44.0,
+ 1280 => 51.0,
+ 1600 => 75.0,
+);
#- * Screen/video card configuration.
%ramdacs = (
diff --git a/perl-install/commands.pm b/perl-install/commands.pm
index 2ae11bf8e..a0a9053d6 100644
--- a/perl-install/commands.pm
+++ b/perl-install/commands.pm
@@ -40,9 +40,10 @@ sub rmdir_ { foreach (@_) { rmdir $_ or die "rmdir: can't remove $_\n" } }
sub lsmod { print "Module Size Used by\n"; cat("/proc/modules"); }
sub grep_ {
- my ($h, $v) = getopts(\@_, qw(hv));
+ my ($h, $v, $i) = getopts(\@_, qw(hvi));
@_ == 0 || $h and die "usage: grep <regexp> [files...]\n";
my $r = shift;
+ $r = qr/$r/i if $i;
@ARGV = @_; (/$r/ ? $v || print : $v && print) while <>
}
diff --git a/perl-install/common.pm b/perl-install/common.pm
index e2a135cdc..8b158f010 100644
--- a/perl-install/common.pm
+++ b/perl-install/common.pm
@@ -6,7 +6,7 @@ use vars qw(@ISA %EXPORT_TAGS @EXPORT_OK $printable_chars $sizeof_int $bitof_int
@ISA = qw(Exporter);
%EXPORT_TAGS = (
- common => [ qw(__ min max sum sign product bool listlength bool2text to_int ikeys member divide is_empty_array_ref is_empty_hash_ref add2hash set_new set_add round_up round_down first second top uniq translate untranslate warp_text) ],
+ common => [ qw(__ min max sum sign product bool listlength bool2text to_int to_float ikeys member divide is_empty_array_ref is_empty_hash_ref add2hash set_new set_add round round_up round_down first second top uniq translate untranslate warp_text) ],
functional => [ qw(fold_left map_index map_tab_hash mapn mapn_ difference2 before_leaving catch_cdie cdie) ],
file => [ qw(dirname basename touch all glob_ cat_ chop_ mode) ],
system => [ qw(sync makedev unmakedev psizeof strcpy gettimeofday syscall_ crypt_ getVarsFromSh setVarsInSh) ],
@@ -46,7 +46,8 @@ sub first { $_[0] }
sub second { $_[1] }
sub top { $_[$#_] }
sub uniq { my %l; @l{@_} = (); keys %l }
-sub to_int { $_[0] =~ /(\d+)/; $1 }
+sub to_int { $_[0] =~ /(\d*)/; $1 }
+sub to_float { $_[0] =~ /(\d*(\.\d*)?)/; $1 }
sub ikeys { my %l = @_; sort { $a <=> $b } keys %l }
sub add2hash { my ($a, $b) = @_; while (my ($k, $v) = each %{$b || {}}) { $a->{$k} ||= $v } }
sub member { my $e = shift; foreach (@_) { $e eq $_ and return 1 } 0 }
@@ -59,6 +60,7 @@ sub strcpy { substr($_[0], $_[2] || 0, length $_[1]) = $_[1] }
sub cat_ { local *F; open F, $_[0] or $_[1] ? die "cat of file $_[0] failed: $!\n" : return; my @l = <F>; wantarray ? @l : join '', @l }
sub chop_ { map { my $l = $_; chomp $l; $l } @_ }
sub divide { my $d = int $_[0] / $_[1]; wantarray ? ($d, $_[0] % $_[1]) : $d }
+sub round { int ($_[0] + 0.5) }
sub round_up { my ($i, $r) = @_; $i += $r - ($i + $r - 1) % $r - 1; }
sub round_down { my ($i, $r) = @_; $i -= $i % $r; }
sub is_empty_array_ref { my $a = shift; !defined $a || @$a == 0 }
diff --git a/perl-install/install2.pm b/perl-install/install2.pm
index 50809e007..67c13df6a 100644
--- a/perl-install/install2.pm
+++ b/perl-install/install2.pm
@@ -16,6 +16,7 @@ use help;
use network;
use lang;
use keyboard;
+use mouse;
use fs;
use fsedit;
use devices;
@@ -36,13 +37,13 @@ my @installSteps = (
selectLanguage => [ __("Choose your language"), 1, 1 ],
selectPath => [ __("Choose install or upgrade"), 0, 0 ],
selectInstallClass => [ __("Select installation class"), 1, 1, "selectPath" ],
+ selectMouse => [ __("Configure mouse"), 1, 1 ],
selectKeyboard => [ __("Choose your keyboard"), 1, 1 ],
setupSCSI => [ __("Setup SCSI"), 1, 0 ],
partitionDisks => [ __("Setup filesystems"), 1, 0 ],
formatPartitions => [ __("Format partitions"), 1, -1, "partitionDisks" ],
choosePackages => [ __("Choose packages to install"), 1, 1, "selectInstallClass" ],
doInstallStep => [ __("Install system"), 1, -1, ["formatPartitions", "selectPath"] ],
- configureMouse => [ __("Configure mouse"), 1, 1, "formatPartitions" ],
configureNetwork => [ __("Configure networking"), 1, 1, "formatPartitions" ],
configureTimezone => [ __("Configure timezone"), 1, 1, "doInstallStep" ],
#- configureServices => [ __("Configure services"), 0, 0 ],
@@ -205,6 +206,12 @@ sub selectLanguage {
}
#------------------------------------------------------------------------------
+sub selectMouse {
+ $o->selectMouse($_[0]);
+ addToBeDone { mouse::write($o->{mouse}, $o->{prefix}); } 'formatPartitions';
+}
+
+#------------------------------------------------------------------------------
sub selectKeyboard {
my ($clicked) = $_[0];
return if $::beginner && !$clicked;
@@ -240,7 +247,7 @@ sub setupSCSI {
my ($clicked) = $_[0];
$o->{autoSCSI} ||= $::beginner;
- $o->setupSCSI($o->{autoSCSI} && !$clicked);
+ $o->setupSCSI($o->{autoSCSI} && !$clicked, $clicked);
}
#------------------------------------------------------------------------------
@@ -306,8 +313,6 @@ sub doInstallStep {
}
#------------------------------------------------------------------------------
-sub configureMouse { $o->mouseConfig }
-#------------------------------------------------------------------------------
sub configureNetwork {
my ($clicked, $entered) = @_;
$o->configureNetwork($entered == 1 && !$clicked)
@@ -432,7 +437,7 @@ sub main {
$ENV{LD_LIBRARY_PATH} = "";
#- needed very early for install_steps_graphical
- $o->{mouse} = install_any::mouse_detect() unless $::testing || $o->{mouse};
+ $o->{mouse} ||= mouse::detect() unless $::testing;
$::o = $o = $::auto_install ?
install_steps->new($o) :
@@ -455,7 +460,7 @@ sub main {
MAIN: for ($o->{step} = $o->{steps}{first};; $o->{step} = getNextStep()) {
$o->{steps}{$o->{step}}{entered}++;
$o->enteringStep($o->{step});
- eval {
+ eval {
&{$install2::{$o->{step}}}($clicked, $o->{steps}{$o->{step}}{entered});
};
$o->kill_action;
diff --git a/perl-install/install_any.pm b/perl-install/install_any.pm
index 07480df6c..d0b6c2fa9 100644
--- a/perl-install/install_any.pm
+++ b/perl-install/install_any.pm
@@ -86,12 +86,6 @@ sub spawnShell {
exec {"/bin/sh"} "-/bin/sh" or log::l("exec of /bin/sh failed: $!");
}
-sub mouse_detect() {
- my %l;
- @l{qw(MOUSETYPE XMOUSETYPE DEVICE)} = split("\n", `mouseconfig --nointeractive 2>/dev/null`) or die "mouseconfig failed";
- \%l;
-}
-
sub shells($) {
my ($o) = @_;
my @l = grep { -x "$o->{prefix}$_" } @{$o->{shells}};
diff --git a/perl-install/install_steps.pm b/perl-install/install_steps.pm
index 1cb0cca1e..e61e8bba9 100644
--- a/perl-install/install_steps.pm
+++ b/perl-install/install_steps.pm
@@ -158,10 +158,8 @@ sub afterInstallPackages($) {
}
#------------------------------------------------------------------------------
-sub mouseConfig($) {
+sub selectMouse($) {
my ($o) = @_;
- setVarsInSh("$o->{prefix}/etc/sysconfig/mouse", $o->{mouse});
- symlink $o->{mouse}{DEVICE}, "$o->{prefix}/dev/mouse" or log::l("creating /dev/mouse symlink failed");
}
#------------------------------------------------------------------------------
diff --git a/perl-install/install_steps_interactive.pm b/perl-install/install_steps_interactive.pm
index a742dc26d..d9800bdea 100644
--- a/perl-install/install_steps_interactive.pm
+++ b/perl-install/install_steps_interactive.pm
@@ -18,6 +18,7 @@ use install_any;
use detect_devices;
use timezone;
use network;
+use mouse;
use modules;
use lang;
use pkgs;
@@ -87,7 +88,26 @@ sub selectInstallClass($@) {
}
#------------------------------------------------------------------------------
-sub setupSCSI { setup_thiskind($_[0], 'scsi', $_[1]) }
+sub selectMouse {
+ my ($o, $force) = @_;
+
+ my $name = $o->{mouse}{FULLNAME};
+ if (!$name || $::expert || $force) {
+ $name = $o->ask_from_list_('', _("Which mouse do you have"), [ mouse::names() ], $name);
+ $o->{mouse} = mouse::name2mouse($name);
+ }
+ my $b = $o->{mouse}{nbuttons} < 3;
+ $o->{mouse}{XEMU3} = 'yes' if $::expert && $o->ask_yesorno('', _("Emulate third button"), $b) || $b;
+
+ $o->{mouse}{device} = mouse::serial_ports_names2dev(
+ $o->ask_from_list(_("Mouse Port"),
+ _("Which serial port is your mouse connected to?"),
+ [ mouse::serial_ports_names() ])) if $o->{mouse}{device} eq "ttyS";
+
+ $o->SUPER::selectMouse;
+}
+#------------------------------------------------------------------------------
+sub setupSCSI { setup_thiskind($_[0], 'scsi', $_[1], $_[2]) }
#------------------------------------------------------------------------------
sub rebootNeeded($) {
my ($o) = @_;
@@ -125,9 +145,6 @@ sub setPackages {
}
#------------------------------------------------------------------------------
-#-mouse
-
-#------------------------------------------------------------------------------
sub configureNetwork($) {
my ($o, $first_time) = @_;
my $r = '';
@@ -617,7 +634,7 @@ sub load_thiskind {
#------------------------------------------------------------------------------
sub setup_thiskind {
my ($o, $type, $auto, $at_least_one) = @_;
- my @l = $o->load_thiskind($type);
+ my @l = $o->load_thiskind($type) unless $::expert && $o->ask_yesorno('', "Skip $type pci probe", 0);
return if $auto && (@l || !$at_least_one);
while (1) {
my $msg = @l ?
@@ -627,14 +644,15 @@ sub setup_thiskind {
my $opt = [ __("Yes"), __("No") ];
push @$opt, __("See hardware info") if $::expert;
- my $r = $o->ask_from_list_('', $msg, $opt);
- $r eq "No" and return;
- if ($r eq "Yes") {
+ my $r = "Yes";
+ $r = $o->ask_from_list_('', $msg, $opt) unless $at_least_one && @l == 0;
+ if ($r eq "No") { return }
+ elsif ($r eq "Yes") {
my @r = $o->loadModule($type) or return;
push @l, \@r;
} else {
- $o->ask_warn('', [ pci_probing::main::list() ]);
- }
+ $o->ask_warn('', [ pci_probing::main::list() ]);
+ }
}
}
diff --git a/perl-install/interactive_gtk.pm b/perl-install/interactive_gtk.pm
index 4f01fcbb7..5d328dc7c 100644
--- a/perl-install/interactive_gtk.pm
+++ b/perl-install/interactive_gtk.pm
@@ -28,9 +28,10 @@ sub ask_from_entryW {
sub ask_from_listW {
my ($o, $title, $messages, $l, $def) = @_;
+ my $w = my_gtk->new($title, %$o);
+ $w->{retval} = $def || $l->[0]; #- nearly especially for the X test case (see timeout in Xconfigurator.pm)
if (@$l < 5 && sum(map { length $_ } @$l) < 70) {
my $defW;
- my $w = my_gtk->new($title, %$o);
my $f = sub { $w->{retval} = $_[1]; Gtk->main_quit };
gtkadd($w->{window},
gtkpack(create_box_with_title($w, @$messages),
@@ -46,7 +47,6 @@ sub ask_from_listW {
$defW->grab_focus if $defW;
$w->main;
} else {
- my $w = my_gtk->new($title);
$w->_ask_from_list($messages, $l, $def);
$w->main;
}
diff --git a/perl-install/modules.pm b/perl-install/modules.pm
index 22584aa1b..076feab51 100644
--- a/perl-install/modules.pm
+++ b/perl-install/modules.pm
@@ -295,22 +295,19 @@ sub get_stage1_conf {
sub load_thiskind($;&) {
my ($type, $f) = @_;
- unless ($::testing) {
- my @devs = pci_probing::main::probe($type);
- log::l("pci probe found " . scalar @devs . " $type devices");
+
+ my @devs = pci_probing::main::probe($type);
+ log::l("pci probe found " . scalar @devs . " $type devices");
- my %devs; foreach (@devs) {
- my ($text, $mod) = @$_;
- $devs{$mod}++ and log::l("multiple $mod devices found"), next;
- $drivers{$mod} or log::l("module $mod not in install table"), next;
- log::l("found driver for $mod");
- &$f($text, $mod) if $f;
- load($mod, $type);
- }
- @devs;
- } else {
- ();
+ my %devs; foreach (@devs) {
+ my ($text, $mod) = @$_;
+ $devs{$mod}++ and log::l("multiple $mod devices found"), next;
+ $drivers{$mod} or log::l("module $mod not in install table"), next;
+ log::l("found driver for $mod");
+ &$f($text, $mod) if $f;
+ load($mod, $type);
}
+ @devs;
}
#-#- This assumes only one of each driver type is loaded
diff --git a/perl-install/my_gtk.pm b/perl-install/my_gtk.pm
index f3228358f..5f9159df5 100644
--- a/perl-install/my_gtk.pm
+++ b/perl-install/my_gtk.pm
@@ -38,7 +38,8 @@ sub main($;$) {
my ($o, $f) = @_;
$o->show;
- do {
+ do {
+ local $::setstep = 1;
Gtk->main
} while ($o->{retval} && $f && !&$f());
$o->destroy;
@@ -377,8 +378,9 @@ sub _ask_from_list($$$$) {
$curr++ if $starting_word eq '' || $starting_word eq $c;
$starting_word .= $c unless $starting_word eq $c;
+ my $word = quotemeta $starting_word;
my $j; for ($j = 0; $j < @$l; $j++) {
- $l->[($j + $curr) % @$l] =~ /^$starting_word/i and last;
+ $l->[($j + $curr) % @$l] =~ /^$word/i and last;
}
$j == @$l ?
$starting_word = '' :
diff --git a/perl-install/pkgs.pm b/perl-install/pkgs.pm
index d5330809b..de156d498 100644
--- a/perl-install/pkgs.pm
+++ b/perl-install/pkgs.pm
@@ -275,7 +275,6 @@ sub install {
foreach my $p (@$toInstall) {
eval { getHeader($p) }; $@ and next;
- $p->{installed} = 1;
$p->{file} ||= sprintf "%s-%s-%s.%s.rpm",
$p->{name}, $p->{version}, $p->{release},
c::headerGetEntry(getHeader($p), 'arch');
@@ -313,4 +312,6 @@ sub install {
c::rpmtransFree($trans);
c::rpmdbClose($db);
log::l("rpm database closed");
+
+ $_->{installed} = 1 foreach @$toInstall;
}
diff --git a/perl-install/printer.pm b/perl-install/printer.pm
index 2724b6988..5d3d9bb63 100644
--- a/perl-install/printer.pm
+++ b/perl-install/printer.pm
@@ -266,9 +266,7 @@ $spooldir = "/var/spool/lpd";
#-#####################################################################################
-sub set_prefix($) {
- ($prefix) = @_;
-}
+sub set_prefix($) { $prefix = $_[0]; }
#-*****************************************************************************
#- read function
#-*****************************************************************************
@@ -276,19 +274,17 @@ sub set_prefix($) {
#- Read the printer database from dbpath into memory
#------------------------------------------------------------------------------
sub read_printer_db(;$) {
- my ($dbpath) = @_;
-
- $dbpath = $prefix . ($dbpath || $PRINTER_DB_FILE);
+ my $dbpath = $prefix . ($_[0] || $PRINTER_DB_FILE);
%thedb and return;
local *DBPATH; #-don't have to do close
- open DBPATH, "<$dbpath" or die "An error has occurred on $dbpath : $!";
+ open DBPATH, $dbpath or die "An error has occurred on $dbpath : $!";
while (<DBPATH>) {
if (/^StartEntry:\s(\w*)/) {
my $entryname = $1;
- my $entry = {};
+ my $entry;
$entry->{ENTRY} = $entryname;
@@ -363,7 +359,7 @@ sub create_config_file($$%) {
#-TODO my $oldmask = umask 0755;
- open IN , "<$in" or die "Can't open $in $!";
+ open IN , $in or die "Can't open $in $!";
if ($::testing) {
*OUT = *STDOUT
} else {
@@ -396,7 +392,7 @@ sub copy_master_filter($) {
#- given a PrintCap Entry, create the spool dir and special
#- rhs-printfilters related config files which are required
#------------------------------------------------------------------------------
-my $intro_printcap_test="
+my $intro_printcap_test = "
#
# Please don't edit this file directly unless you know what you are doing!
# Look at the printcap(5) man page for more info.