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

75 lines
1.8 KiB
Perl

#!/bin/perl
# Key: Shortcut im Menü
# Value: Array aus Menüpunkttext und Aktion
# Aktion kann weiterer Menüpunkt sein, oder Funktion die aufgerufen werden soll
# Für Menüpunkt muss ein Hash mit diesem Namen angelegt werden, der ein weiteres
# Menü beschreibt.
# Für Funktion muss das erste Zeichen eine Raute (#) sein. Eine Funktion mit dem
# entspr. Namen muss angelegt sein.
# Bei jedem Menüpunkt kann eine Beschreibung angegeben werden, dazu ist bei dem entspr.
# Menühash ein Key 'desc' mitanzulegen. Der Value ist ein Skalar der den Menünamen enthält.
# Beispielkonfig mit Aufruf
#$haupt{'1'} = ['Adressen', 'adressen'];
#$haupt{'2'} = ['Sagem', 'sagem'];
#$haupt{'3'} = ['Nokia', 'nokia'];
#$haupt{'e'} = ['Ende', '#bye'];
#$haupt{'desc'} = "Hauptmenü";
#$adressen{'1'} = ['Suchen', '#adr_suchen'];
#$adressen{'z'} = ['Zurück', 'haupt'];
#$adressen{'desc'} = "Adressen";
#$sagem{'z'} = ['Zurück', 'haupt'];
#$sagem{'desc'} = "Sagem";
#$nokia{'z'} = ['Zurück', 'haupt'];
#$nokia{'desc'} = "Nokia";
#menue("haupt");
package menu;
use Exporter;
use Win32::Console::ANSI;
use Term::ANSIScreen qw/:color :cursor :screen/;
@ISA = ('Exporter');
@EXPORT = (@EXPORT,'show');
sub show {
no strict;
($me) = @_;
%menu = %$me;
do {
print "\e[2J";
print "----- $menu{'desc'} -----\n\n";
foreach (sort keys %menu) {
if ($_ eq 'desc') { next; }
print " ";
print Term::ANSIScreen::colored(" $_",'black on white');
print " $menu{$_}->[0]\n\n";
}
print "\nAuswahl:";
$auswahl = <STDIN>;
chomp $auswahl;
$ok=0;
foreach (sort keys %menu) {
if ("$_" eq "$auswahl") {
$ok = 1;
}
}
} while (!$ok);
$para = "$menu{$auswahl}->[1]";
if ($para =~ /#/) {
$para =~ s/#//;#,$para;
$fkt="main::$para";
&$fkt;
}
else {
# show(\{%$para});
}
}
1;