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 = ; chomp $in; $menu{$in}->() unless ($menu{$in} == ""); } } sub menu_back { # call: nur in Verwendung mit show_menu sinnvoll last; } 1;