Files
2024-10-14 00:08:40 +02:00

78 lines
1.5 KiB
Perl

package menu;
require Exporter;
use functions;
use vars qw($VERSION @ISA @EXPORT);
$VERSION = 1.00;
@ISA = qw(Exporter);
###############################################################################
@EXPORT = qw/
show_menu
menu_back
/;
######## Menu Funktionen und Beispielnutzung
# x|y|z x:reihenfolge y:zeichen für die auswahl z:Text im Menü
# my %menu = (
# '1|1|P1' => \&ebene1_a,
# '97' => 'blank',
# '98' => 'line',
# '99|0|ende' => \&ebene1_quit,
# );
#show_menu(\%menu, "Hauptmenü");
#sub ebene1_a {
# my %menu = (
# '1|1|blabla' => \&ebene1_b,
# '97' => 'blank',
# '98' => 'line',
# '99|0|zurück' => \&menu_back,
# );
# show_menu(\%menu, "Untermenü");
#}
#sub ebene1_b {
#}
#sub ebene1_quit {
# exit 0;
#}
sub show_menu {
my $m=shift;
my $t=shift;
my %m=%{$m};
my %menu;
my $k, $e;
while (1) {
clrscr();
printf "\n $t\n\n";
foreach my $l (sort keys %m) {
if ($m{$l} eq "blank") {
printf "\n";
}
elsif ($m{$l} eq "line") {
for (1..26) { printf "-"; } printf "\n";
}
else {
my ($r,$k,$e) = split /\|/, $l;
$menu{$k}=$m{$l};
printf " %2s %-20s\n", $k, $e;
}
}
print "\nAuswahl: ";
my $in = <STDIN>;
chomp $in;
$menu{$in}->() unless ($menu{$in} == "");
}
}
sub menu_back {
# call: nur in Verwendung mit show_menu sinnvoll
last;
}
1;