summaryrefslogtreecommitdiffstats
ModeNameSize
-rw-r--r--.cvsignore80logstatsplain
-rw-r--r--Makefile5454logstatsplain
d---------docs829logstatsplain
-rw-r--r--live_update2414logstatsplain
-rwxr-xr-xmake_boot_img15750logstatsplain
-rwxr-xr-xmake_ks_from_floppy306logstatsplain
d---------mdk-stage12469logstatsplain
d---------perl-install3596logstatsplain
d---------rescue710logstatsplain
d---------tools1163logstatsplain
-rwxr-xr-xupdate_kernel4378logstatsplain
f='#n178'>178 179
package interactive::stdio; # $Id$

use diagnostics;
use strict;
use vars qw(@ISA);

@ISA = qw(interactive);

use interactive;
use 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 good_choice {
    my ($def_s, $max) = @_;
    my $i;
    do {
	defined $i and print N("Bad choice, try again\n");
	print N("Your choice? (default %s) ", $def_s);
	$i = readln();
    } until !$i || check_it($i, $max);
    $i;
}

sub ask_fromW {
    my ($_o, $common, $l, $_l2) = @_;

    add2hash_($common, { ok => N("Ok"), cancel => N("Cancel") }) if !exists $common->{ok};

ask_fromW_begin:

    my $already_entries = 0;
    my $predo_widget = sub {
	my ($e) = @_;

	$e->{type} = 'list' if $e->{type} =~ /(icon|tree)list/;
	#- combo does not exist, fallback to a sensible default
	$e->{type} = $e->{not_edit} ? 'list' : 'entry' if $e->{type} eq 'combo';

	if ($e->{type} eq 'entry') {
	    my $t = "\t$e->{label} $e->{text}\n";
	    if ($already_entries) {
		length($already_entries) > 1 and print N("Entries you'll have to fill:\n%s", $already_entries);
		$already_entries = 1;
		print $t;
	    } else {
		$already_entries = $t;
	    }
	}
    };

    my @labels;
    my $format_label = sub { my ($e) = @_; return sprintf("`%s' %s %s\n", ${$e->{val}}, $e->{label}, $e->{text}) };
    my $do_widget = sub {
	my ($e, $ind) = @_;

	if ($e->{type} eq 'bool') {
	    print "$e->{text} $e->{label}\n";
	    print N("Your choice? (0/1, default `%s') ", ${$e->{val}} || '0');
	    my $i = readln();
	    if ($i) {
		to_bool($i) != to_bool(${$e->{val}}) && $e->{changed} and $e->{changed}->();
		${$e->{val}} = $i;
	    }
	} elsif ($e->{type} =~ /list/) {
	    $e->{text} || $e->{label} and print "=> $e->{label} $e->{text}\n";
	    my $n = 0; my $size = 0;
	    foreach (@{$e->{list}}) {
		$n++;
		my $t = "$n: " . may_apply($e->{format}, $_) . "\t";
		if ($size + length($t) >= 80) {
		    print "\n";
		    $size = 0;
		}
		print $t;
		$size += length($t);
	    }
	    print "\n";
	    my $i = good_choice(may_apply($e->{format}, ${$e->{val}}), $n);
	    print "Setting to <", $i ? ${$e->{list}}[$i-1] : ${$e->{val}}, ">\n";
	    if ($i) { 
		${$e->{val}} = ${$e->{list}}[$i-1];
		$e->{changed} and $e->{changed}->();
	    }
	} elsif ($e->{type} eq 'button') {
	    print N("Button `%s': %s", $e->{label}, may_apply($e->{format}, ${$e->{val}})), " $e->{text}\n";
	    print N("Do you want to click on this button?");
	    my $i = readln();
	    if ($i && $i !~ /^n/i) {
		$e->{clicked_may_quit}();
		$e->{changed} and $e->{changed}->();
	    }
	} elsif ($e->{type} eq 'label') {
	    my $t = $format_label->($e);
	    push @labels, $t;
	    print $t;
	} elsif ($e->{type} eq 'entry') {
	    print "$e->{label} $e->{text}\n";
	    print N("Your choice? (default `%s'%s) ", ${$e->{val}}, ${$e->{val}} ? N(" enter `void' for void entry") : '');
	    my $i = readln();