diff options
-rw-r--r-- | perl-install/any.pm | 116 | ||||
-rw-r--r-- | perl-install/modules/interactive.pm | 117 | ||||
-rw-r--r-- | perl-install/network/ethernet.pm | 6 |
3 files changed, 120 insertions, 119 deletions
diff --git a/perl-install/any.pm b/perl-install/any.pm index 1e62915a2..c50bc4bb6 100644 --- a/perl-install/any.pm +++ b/perl-install/any.pm @@ -426,122 +426,6 @@ sub inspect { $h; } -sub load_category { - my ($in, $category, $auto, $at_least_one) = @_; - - my @l; - { - my $w; - my $wait_message = sub { $w = wait_load_module($in, $category, @_) }; - @l = modules::load_category($category, $wait_message); - @l = modules::load_category($category, $wait_message, 'force') if !@l && $at_least_one; - } - if (my @err = grep { $_ } map { $_->{error} } @l) { - $in->ask_warn('', join("\n", @err)); - } - return @l if $auto && (@l || !$at_least_one); - - @l = map { $_->{description} } @l; - - if ($at_least_one && !@l) { - @l = load_category__prompt($in, $category) or return; - } - - load_category__prompt_for_more($in, $category, @l); -} - -sub load_category__prompt_for_more { - my ($in, $category, @l) = @_; - - (my $msg_type = $category) =~ s/\|.*//; - - while (1) { - my $msg = @l ? - [ N("Found %s %s interfaces", join(", ", @l), $msg_type), - N("Do you have another one?") ] : - N("Do you have any %s interfaces?", $msg_type); - - my $opt = [ N_("Yes"), N_("No") ]; - push @$opt, N_("See hardware info") if $::expert; - my $r = $in->ask_from_list_('', $msg, $opt, "No") or return; - if ($r eq "No") { return @l } - if ($r eq "Yes") { - push @l, load_category__prompt($in, $category) || next; - } else { - $in->ask_warn('', [ detect_devices::stringlist() ]); - } - } -} - -sub wait_load_module { - my ($in, $category, $text, $module) = @_; - $in->wait_message('', - [ - #-PO: the first %s is the card type (scsi, network, sound,...) - #-PO: the second is the vendor+model name - N("Installing driver for %s card %s", $category, $text), if_($::expert, N("(module %s)", $module)) - ]); -} - -sub load_module__ask_options { - my ($in, $module_descr, $parameters) = @_; - - my @parameters = map { [ @$_[0, 1, 2] ] } @$parameters; - - if (@parameters) { - $in->ask_from('', - N("You may now provide its options to module %s.\nNote that any address should be entered with the prefix 0x like '0x123'", $module_descr), - [ map { { label => $_->[0] . ($_->[1] ? " ($_->[1])" : ''), help => $_->[2], val => \$_->[3] } } @parameters ], - ) or return; - [ map { if_($_->[3], "$_->[0]=$_->[3]") } @parameters ]; - } else { - my $s = $in->ask_from_entry('', -N("You may now provide options to module %s. -Options are in format ``name=value name2=value2 ...''. -For instance, ``io=0x300 irq=7''", $module_descr), N("Module options:")) or return; - [ split ' ', $s ]; - } -} - -sub load_category__prompt { - my ($in, $category) = @_; - - (my $msg_type = $category) =~ s/\|.*//; - my %available_modules = map_each { $::a => $::b ? "$::a ($::b)" : $::a } modules::category2modules_and_description($category); - my $module = $in->ask_from_listf('', -#-PO: the %s is the driver type (scsi, network, sound,...) - N("Which %s driver should I try?", $msg_type), - sub { $available_modules{$_[0]} }, - [ keys %available_modules ]) or return; - my $module_descr = $available_modules{$module}; - - my $options; - require modules::parameters; - my @parameters = modules::parameters::parameters($module); - if (@parameters && $in->ask_from_list_('', -formatAlaTeX(N("In some cases, the %s driver needs to have extra information to work -properly, although it normally works fine without. Would you like to specify -extra options for it or allow the driver to probe your machine for the -information it needs? Occasionally, probing will hang a computer, but it should -not cause any damage.", $module_descr)), [ N_("Autoprobe"), N_("Specify options") ], 'Autoprobe') ne 'Autoprobe') { - $options = load_module__ask_options($in, $module_descr, \@parameters) or return; - } - while (1) { - eval { - my $_w = wait_load_module($in, $category, $module_descr, $module); - log::l("user asked for loading module $module (type $category, desc $module_descr)"); - modules::load([ $module, @$options ]); - }; - return $module_descr if !$@; - - $in->ask_yesorno('', -N("Loading module %s failed. -Do you want to try again with other parameters?", $module_descr), 1) or return; - - $options = load_module__ask_options($in, $module_descr, \@parameters) or return; - } -} - sub ask_users { my ($prefix, $in, $users, $security) = @_; diff --git a/perl-install/modules/interactive.pm b/perl-install/modules/interactive.pm index e8b76e77c..c89ad7276 100644 --- a/perl-install/modules/interactive.pm +++ b/perl-install/modules/interactive.pm @@ -1,5 +1,6 @@ package modules::interactive; use interactive; +use modules; use common; sub config_window { @@ -22,4 +23,120 @@ sub config_window { } } +sub load_category { + my ($in, $category, $auto, $at_least_one) = @_; + + my @l; + { + my $w; + my $wait_message = sub { $w = wait_load_module($in, $category, @_) }; + @l = modules::load_category($category, $wait_message); + @l = modules::load_category($category, $wait_message, 'force') if !@l && $at_least_one; + } + if (my @err = grep { $_ } map { $_->{error} } @l) { + $in->ask_warn('', join("\n", @err)); + } + return @l if $auto && (@l || !$at_least_one); + + @l = map { $_->{description} } @l; + + if ($at_least_one && !@l) { + @l = load_category__prompt($in, $category) or return; + } + + load_category__prompt_for_more($in, $category, @l); +} + +sub load_category__prompt_for_more { + my ($in, $category, @l) = @_; + + (my $msg_type = $category) =~ s/\|.*//; + + while (1) { + my $msg = @l ? + [ N("Found %s %s interfaces", join(", ", @l), $msg_type), + N("Do you have another one?") ] : + N("Do you have any %s interfaces?", $msg_type); + + my $opt = [ N_("Yes"), N_("No") ]; + push @$opt, N_("See hardware info") if $::expert; + my $r = $in->ask_from_list_('', $msg, $opt, "No") or return; + if ($r eq "No") { return @l } + if ($r eq "Yes") { + push @l, load_category__prompt($in, $category) || next; + } else { + $in->ask_warn('', [ detect_devices::stringlist() ]); + } + } +} + +sub wait_load_module { + my ($in, $category, $text, $module) = @_; + $in->wait_message('', + [ + #-PO: the first %s is the card type (scsi, network, sound,...) + #-PO: the second is the vendor+model name + N("Installing driver for %s card %s", $category, $text), if_($::expert, N("(module %s)", $module)) + ]); +} + +sub load_module__ask_options { + my ($in, $module_descr, $parameters) = @_; + + my @parameters = map { [ @$_[0, 1, 2] ] } @$parameters; + + if (@parameters) { + $in->ask_from('', + N("You may now provide its options to module %s.\nNote that any address should be entered with the prefix 0x like '0x123'", $module_descr), + [ map { { label => $_->[0] . ($_->[1] ? " ($_->[1])" : ''), help => $_->[2], val => \$_->[3] } } @parameters ], + ) or return; + [ map { if_($_->[3], "$_->[0]=$_->[3]") } @parameters ]; + } else { + my $s = $in->ask_from_entry('', +N("You may now provide options to module %s. +Options are in format ``name=value name2=value2 ...''. +For instance, ``io=0x300 irq=7''", $module_descr), N("Module options:")) or return; + [ split ' ', $s ]; + } +} + +sub load_category__prompt { + my ($in, $category) = @_; + + (my $msg_type = $category) =~ s/\|.*//; + my %available_modules = map_each { $::a => $::b ? "$::a ($::b)" : $::a } modules::category2modules_and_description($category); + my $module = $in->ask_from_listf('', +#-PO: the %s is the driver type (scsi, network, sound,...) + N("Which %s driver should I try?", $msg_type), + sub { $available_modules{$_[0]} }, + [ keys %available_modules ]) or return; + my $module_descr = $available_modules{$module}; + + my $options; + require modules::parameters; + my @parameters = modules::parameters::parameters($module); + if (@parameters && $in->ask_from_list_('', +formatAlaTeX(N("In some cases, the %s driver needs to have extra information to work +properly, although it normally works fine without. Would you like to specify +extra options for it or allow the driver to probe your machine for the +information it needs? Occasionally, probing will hang a computer, but it should +not cause any damage.", $module_descr)), [ N_("Autoprobe"), N_("Specify options") ], 'Autoprobe') ne 'Autoprobe') { + $options = load_module__ask_options($in, $module_descr, \@parameters) or return; + } + while (1) { + eval { + my $_w = wait_load_module($in, $category, $module_descr, $module); + log::l("user asked for loading module $module (type $category, desc $module_descr)"); + modules::load([ $module, @$options ]); + }; + return $module_descr if !$@; + + $in->ask_yesorno('', +N("Loading module %s failed. +Do you want to try again with other parameters?", $module_descr), 1) or return; + + $options = load_module__ask_options($in, $module_descr, \@parameters) or return; + } +} + 1; diff --git a/perl-install/network/ethernet.pm b/perl-install/network/ethernet.pm index f9d97e00c..69135e363 100644 --- a/perl-install/network/ethernet.pm +++ b/perl-install/network/ethernet.pm @@ -2,7 +2,7 @@ package network::ethernet; use network::network; use modules; -use any; +use modules::interactive; use detect_devices; use common; use run_program; @@ -82,7 +82,7 @@ qq( sub conf_network_card { my ($netc, $intf, $type, $ipadr, $netadr) = @_; #-type =static or dhcp - any::load_category($in, 'network/main|usb', !$::expert, 1); + modules::interactive::load_category($in, 'network/main|usb', !$::expert, 1); my @all_cards = conf_network_card_backend($netc, $intf, $type, undef, $ipadr, $netadr); my $interface; @all_cards == () and $in->ask_warn('', N("No ethernet network adapter has been detected on your system. @@ -172,7 +172,7 @@ sub go_ethernet { sub configureNetwork { my ($netc, $intf, $_first_time) = @_; local $_; - any::load_category($in, 'network/main|usb|pcmcia', !$::expert, 1) or return; + modules::interactive::load_category($in, 'network/main|usb|pcmcia', !$::expert, 1) or return; my @l = detect_devices::getNet() or die N("no network card found"); my @all_cards = conf_network_card_backend($netc, $intf, undef, undef, undef, undef); |