#!/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 = ; 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;