Term-Menus
view release on metacpan or search on metacpan
lib/Term/Menus.pm view on Meta::CPAN
%email_addresses=%fa_code::email_addresses;
}
our $passwd_file_loc='';
if (defined $fa_code::passwd_file_loc && $fa_code::passwd_file_loc) {
$passwd_file_loc=$fa_code::passwd_file_loc;
}
our $test=0;
if (defined $fa_code::test && $fa_code::test) {
$test=$fa_code::test;
}
our $timeout=30;
if (defined $fa_code::timeout && $fa_code::timeout) {
$timeout=$fa_code::timeout;
}
our $log=0;
if (defined $fa_code::log && $fa_code::log) {
$log=$fa_code::log;
}
our $tosspass=0;
if (defined $fa_code::tosspass && $fa_code::tosspass) {
$tosspass=$fa_code::tosspass;
}
## End Net::FullAuto Settings
##############################################################
##############################################################
## Begin Term::Menus
our $termwidth=0;
our $termheight=0;
our $padwalker=0;
our $term_input=0;
eval { require Term::ReadKey };
unless ($@) {
import Term::ReadKey;
($termwidth,$termheight)=eval {
no strict 'subs';
my ($termwidth,$termheight)=('','');
my ($stdout_capture,$stderr_capture)=
Capture::Tiny::capture {
($termwidth, $termheight) =
Term::ReadKey::GetTerminalSize();
$termwidth||='';$termheight||='';
}; return $termwidth,$termheight;
};
if ($@) {
$termwidth='';$termheight='';
}
} else {
$termwidth='';$termheight='';
}
if ($termwidth) {
eval { require Term::RawInput };
unless ($@) {
$term_input=1;
import Term::RawInput;
}
}
eval { require PadWalker };
unless ($@) {
$padwalker=1;
import PadWalker;
}
eval { require Devel::Symdump };
unless ($@) {
#$devel_symdump=1;
import Devel::Symdump;
}
our $clearpath='';
if ($^O ne 'MSWin32' && $^O ne 'MSWin64') {
if (-e '/usr/bin/clear') {
$clearpath='/usr/bin/';
} elsif (-e '/bin/clear') {
$clearpath='/bin/';
} elsif (-e '/usr/local/bin/clear') {
$clearpath='/usr/local/bin/';
}
}
our %LookUpMenuName=();
our $MenuMap=[];
our $noclear=1; # set to one to turn off clear for debugging
sub check_for_dupe_menus {
my $m_flag=0;
my $s_flag=0;
foreach my $dir (@INC) {
if (!$m_flag && -f "$dir/$Term::Menus::fa_menu") {
$m_flag=1;
open(FH,"<$dir/$Term::Menus::fa_menu");
my $line='';my %menudups=();
while ($line=<FH>) {
if ($line=~/^[ \t]*\%(.*)\s*=/) {
if (!exists $menudups{$1}) {
$menudups{$1}='';
} else {
my $mcmf=$Term::Menus::fa_menu;my $die='';
$die="\n FATAL ERROR! - Duplicate Hash Blocks:"
."\n -> \"%$1\" is defined more than once\n"
." in the $dir/$mcmf file.\n\n"
." Hint: delete or comment-out all duplicates\n\n";
if ($Term::Menus::fullauto) {
print $die if !$Net::FullAuto::FA_Core::cron;
&Net::FullAuto::FA_Core::handle_error($die,'__cleanup__');
} else { die $die }
}
}
}
}
if (!$s_flag && -f "$dir/$Term::Menus::fa_code") {
$s_flag=1;
open(FH,"<$dir/$Term::Menus::fa_code");
my $line='';my %dups=();
while ($line=<FH>) {
if ($line=~/^[ \t]*\%(.*)\s*=/) {
if (!exists $dups{$1}) {
$dups{$1}='';
} else {
my $die="\n FATAL ERROR! - Duplicate Hash Blocks:"
."\n -> \"%$1\" is defined more "
lib/Term/Menus.pm view on Meta::CPAN
if (1==$recurse && ref $pick->[$#{$pick}] eq 'HASH') {
$topmenu=pop @{$pick};
$savpick=pop @{$pick};
}
if (wantarray && 1==$recurse) {
my @choyce=@{$pick};undef @{$pick};undef $pick;
return @choyce
} elsif (ref $pick eq 'ARRAY' && -1<$#{$pick} &&
$pick->[0]=~/^[{](.*)[}][<]$/) {
return $pick,$FullMenu,$Selected,$Conveyed,
$SavePick,$SaveMMap,$SaveNext,$Persists;
} elsif (!$picks_from_parent &&
!(keys %{$MenuUnit_hash_ref->{Select}})) {
if (ref $topmenu eq 'HASH' && (keys %{$topmenu->{Select}} &&
$topmenu->{Select} eq 'Many') || (ref $savpick eq 'HASH' &&
exists $topmenu->{Select}->{(keys %{$savpick})[0]})) {
if (wantarray) {
return @{$pick}
} else {
return $pick;
}
} elsif (-1==$#{$pick} &&
(ref $topmenu eq 'HASH') &&
(grep { /Item_/ } keys %{$topmenu})) {
return [ $topmenu ];
} elsif (0==$#{$pick}) {
return $pick->[0];
} else {
return $pick;
}
} else {
if ($picks_from_parent) {
$pick->[0]=&transform_pmsi($pick->[0],
$Conveyed,$SaveMMap,$picks_from_parent);
}
return $pick
}
} elsif ($pick) { return $pick }
}
}
sub pw {
## pw [p]ad [w]alker
#print "PWCALLER=",caller,"\n";
return $_[0]->{Name} if ref $_[0] eq 'HASH'
&& exists $_[0]->{Name};
my @packages=();
@packages=@{$_[1]} if defined $_[1] && $_[1];
my $name='';
unless (ref $_[0] eq 'HASH') {
return '';
} else {
my $flag=1;
my $n=0;
WH: while (1) {
{
local $SIG{__DIE__}; # No sigdie handler
eval {
$name=PadWalker::var_name($n++,$_[0]);
};
if ($@) {
undef $@;
my $o=0;
while (1) {
eval {
my $vars=PadWalker::peek_our($o++);
foreach my $key (keys %{$vars}) {
if (ref $vars->{$key} eq 'HASH' &&
%{$_[0]} eq %{$vars->{$key}}) {
$name=$key;
last;
}
}
};
if ($@) {
undef $@;
my $s=0;
unshift @packages, 'main';
PK: foreach my $package (@packages) {
my $obj=Devel::Symdump->rnew($package);
foreach my $hash ($obj->hashes) {
next if $hash=~/^_</;
next if $hash=~/^Term::Menus::/;
next if $hash=~/^Config::/;
next if $hash=~/^DynaLoader::/;
next if $hash=~/^warnings::/;
next if $hash=~/^utf8::/;
next if $hash=~/^Carp::/;
next if $hash=~/^fields::attr/;
next if $hash=~/^Text::Balanced::/;
next if $hash=~/^Data::Dump::Streamer/;
next if $hash=~/^re::EXPORT_OK/;
next if $hash=~/^fa_code::email_addresses/;
next if $hash=~/^fa_code::email_defaults/;
next if $hash=~/^PadWalker::/;
next if $hash=~/^Fcntl::/;
next if $hash=~/^B::Utils::/;
next if $hash=~/^ExtUtils::/;
next if $hash=~/^Exporter::/;
next if $hash=~/^Moo::/;
next if $hash=~/^overload::/;
next if $hash=~/^Term::ReadKey::/;
next if $hash=~/^main::INC/;
next if $hash=~/^main::SIG/;
next if $hash=~/^main::ENV/;
next if $hash=~/^main[:][^\w]*$/;
next if $hash=~/^main::[@]$/;
next if $hash=~/^Net::FullAuto::FA_Core::makeplan/;
next if $hash=~
/^Net::FullAuto::FA_Core::admin_menus/;
my %test=eval "%$hash";
$name=$hash if %test eq %{$_[0]};
last PK if $name;
}
}
$name||='';
$name=~s/^.*::(.*)$/$1/;
last WH;
}
last WH if $name;
}
}
last if $name;
};
}
$name||='';
$name=~s/^%//;
return $name if $name;
}
}
sub list_module {
my @modules = @_;
my @result=();
no strict 'refs';
foreach my $module (@modules) {
$module=~s/\.pm$//;
push @result,grep { defined &{"$module\::$_"} } keys %{"$module\::"};
}
return @result;
}
sub test_hashref {
my $hashref_to_test=$_[0];
if (ref $hashref_to_test eq 'HASH') {
if (grep { /Item_/ } keys %{$hashref_to_test}) {
return 1;
} elsif (exists $hashref_to_test->{Input} &&
$hashref_to_test->{Input}) {
return 1;
} elsif (!grep { /Item_/ } keys %{$hashref_to_test}
&& grep { /Banner/ } keys %{$hashref_to_test}) {
return 1;
} else {
( run in 2.743 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )