diff options
Diffstat (limited to 'perl-install/interactive_stdio.pm')
-rw-r--r-- | perl-install/interactive_stdio.pm | 51 |
1 files changed, 34 insertions, 17 deletions
diff --git a/perl-install/interactive_stdio.pm b/perl-install/interactive_stdio.pm index 40dcdbb7c..284194a11 100644 --- a/perl-install/interactive_stdio.pm +++ b/perl-install/interactive_stdio.pm @@ -1,4 +1,4 @@ -package interactive_stdio; +package interactive_stdio; # $Id$ use diagnostics; use strict; @@ -9,7 +9,7 @@ use vars qw(@ISA); use interactive; use common qw(:common); -1; +$| = 1; sub readln { my $l = <STDIN>; @@ -19,19 +19,20 @@ sub readln { sub check_it { my ($i, $n) = @_; - $i =~ /^\s*\d+\s*$/ && 1 <= $i && $i <= $n + $i =~ /^\s*\d+\s*$/ && 1 <= $i && $i <= $n } sub ask_from_listW { - my ($o, $title, $messages, $list, $def) = @_; - my $i; + my ($o, $title_, $messages, $list, $def) = @_; + my ($title, @okcancel) = ref $title_ ? @$title_ : ($title_, _("Ok"), _("Cancel")); print map { "$_\n" } @$messages; + my $i; if (@$list < 10 && sum(map { length $_ } @$list) < 50) { my @l; do { if (defined $i) { - @l ? print _("Ambiguity (%s) be more precise\n", join(", ", @l)) : + @l ? print _("Ambiguity (%s), be more precise\n", join(", ", @l)) : print _("Bad choice, try again\n"); } @$list == 1 ? print @$list : @@ -41,10 +42,10 @@ sub ask_from_listW { } until (@l == 1); $l[0]; } else { - my $n = 0; foreach (@$list) { + my $n = 0; foreach (@$list) { $n++; $def eq $_ and $def = $n; - print "$n: $_\n"; + print "$n: $_\n"; } do { defined $i and print _("Bad choice, try again\n"); @@ -56,13 +57,14 @@ sub ask_from_listW { } sub ask_many_from_listW { - my ($o, $title, $messages, $list, $default) = @_; + my ($o, $title, $messages, $l) = @_; + my ($list, $val) = ($l->{labels}, $l->{ref}); my @defaults; print map { "$_\n" } @$messages; - my $n = 0; foreach (@$list) { - $n++; - print "$n: $_\n"; - push @defaults, $n if $default->[$n - 1]; + my $n = 0; foreach (@$list) { + $n++; + print "$n: $_\n"; + push @defaults, $n if ${$val->[$n - 1]}; } my $i; TRY_AGAIN: @@ -70,11 +72,26 @@ sub ask_many_from_listW { print _("Your choice? (default %s enter `none' for none) ", join(',', @defaults)); $i = readln(); my @t = split ',', $i; - foreach (@t) { check_it($_, $n) or goto TRY_AGAIN } + if ($i =~ /^none$/i) { + @t = (); + } else { + foreach (@t) { check_it($_, $n) or goto TRY_AGAIN } + } - my @rr = (0) x @$list; - $rr[$_ - 1] = 1 foreach @t; - @rr; + $$_ = 0 foreach @$val; + ${$val->[$_ - 1]} = 1 foreach @t; + $val; } +sub wait_messageW { + my ($o, $title, $message) = @_; + print join "\n", @$message; +} +sub wait_message_nextW { + my $m = join "\n", @{$_[1]}; + print "\r$m", ' ' x (60 - length $m); +} +sub wait_message_endW { print "\nDone\n" } + +1; |