summaryrefslogtreecommitdiffstats
path: root/perl-install/interactive_stdio.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/interactive_stdio.pm')
-rw-r--r--perl-install/interactive_stdio.pm80
1 files changed, 80 insertions, 0 deletions
diff --git a/perl-install/interactive_stdio.pm b/perl-install/interactive_stdio.pm
new file mode 100644
index 000000000..40dcdbb7c
--- /dev/null
+++ b/perl-install/interactive_stdio.pm
@@ -0,0 +1,80 @@
+package interactive_stdio;
+
+use diagnostics;
+use strict;
+use vars qw(@ISA);
+
+@ISA = qw(interactive);
+
+use interactive;
+use common qw(:common);
+
+1;
+
+sub readln {
+ my $l = <STDIN>;
+ chomp $l;
+ $l;
+}
+
+sub check_it {
+ my ($i, $n) = @_;
+ $i =~ /^\s*\d+\s*$/ && 1 <= $i && $i <= $n
+}
+
+sub ask_from_listW {
+ my ($o, $title, $messages, $list, $def) = @_;
+ my $i;
+ print map { "$_\n" } @$messages;
+
+ if (@$list < 10 && sum(map { length $_ } @$list) < 50) {
+ my @l;
+ do {
+ if (defined $i) {
+ @l ? print _("Ambiguity (%s) be more precise\n", join(", ", @l)) :
+ print _("Bad choice, try again\n");
+ }
+ @$list == 1 ? print @$list :
+ print join("/", @$list), _(" ? (default %s) ", $def);
+ $i = readln() || $def;
+ @l = grep { /^$i/ } @$list;
+ } until (@l == 1);
+ $l[0];
+ } else {
+ my $n = 0; foreach (@$list) {
+ $n++;
+ $def eq $_ and $def = $n;
+ print "$n: $_\n";
+ }
+ do {
+ defined $i and print _("Bad choice, try again\n");
+ print _("Your choice? (default %s) ", $def);
+ $i = readln() || $def;
+ } until (check_it($i, $n));
+ $list->[$i - 1];
+ }
+}
+
+sub ask_many_from_listW {
+ my ($o, $title, $messages, $list, $default) = @_;
+ my @defaults;
+ print map { "$_\n" } @$messages;
+ my $n = 0; foreach (@$list) {
+ $n++;
+ print "$n: $_\n";
+ push @defaults, $n if $default->[$n - 1];
+ }
+ my $i;
+ TRY_AGAIN:
+ defined $i and print _("Bad choice, try again\n");
+ 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 }
+
+ my @rr = (0) x @$list;
+ $rr[$_ - 1] = 1 foreach @t;
+ @rr;
+}
+
+