Term-Menus

 view release on metacpan or  search on metacpan

lib/Term/Menus.pm  view on Meta::CPAN

      eval {
         $banner=$eval_banner_code->();
      };
      if ($@) {
         if (10<length $@ && unpack('a11',$@) eq 'FATAL ERROR') {
            if (wantarray) {
               return '',$@
            }
            if (defined $log_handle &&
                  -1<index $log_handle,'*') {
               print $log_handle $@;
               close($log_handle);
            }
            if ($Term::Menus::fullauto) {
               &Net::FullAuto::FA_Core::handle_error($@);
            } else { die $@ }
         } else {
            if (wantarray) {
               return '',$die.'       '.$@
            }
            if (defined $log_handle &&
                  -1<index $log_handle,'*') {
               print $log_handle $die.'       '.$@;
               close($log_handle);
            }
            if ($Term::Menus::fullauto) {
               &Net::FullAuto::FA_Core::handle_error(
                  $die.'       '.$@);
            } else { die $die.'       '.$@ }
         }
      }
   } elsif (keys %{$Conveyed} || $picks_from_parent) {
      $banner=&transform_pmsi($banner,
         $Conveyed,$SaveMMap,$picks_from_parent);
   } else {
      chomp($banner);
   }
   if ($banner && ($banner=~/^&?(?:.*::)*(\w+)\s*[(]?.*[)]?\s*$/
         && grep { $1 eq $_ } list_module('main',$Term::Menus::fa_code)) &&
         defined $picks_from_parent &&
         !ref $picks_from_parent) {
      my @banner=();
      if ($banner!~/::/) {
         $banner=~s/^[&]//;
         eval "\@banner=main::$banner";
      } else {
         eval "\@banner=$banner";
      }
      $banner=join '',@banner;
   }
   return transform_mboi(transform_mbii(transform_mbir(
             $banner,$Conveyed,$MenuUnit_hash_ref,
             $log_handle),$numbor,$ikey,$input,
             $MenuUnit_hash_ref,$Conveyed,$log_handle),$MenuUnit_hash_ref,
             $Conveyed,$SaveMMap,$picks_from_parent,$log_handle);

}

sub Menu
{
#print "MENUCALLER=",(caller)[0]," and ",__PACKAGE__,"\n";<STDIN>;
#print "MENUCALLER=",caller,"\n";
   my $MenuUnit_hash_ref=$_[0];
#print "WHAT IS THIS=",&Data::Dump::Streamer::Dump($MenuUnit_hash_ref)->Out(),"\n";
   $MenuUnit_hash_ref->{Name}=&pw($MenuUnit_hash_ref);
   my $select_many=0;
   if (exists $MenuUnit_hash_ref->{Select}) {
      if (exists $MenuUnit_hash_ref->{Select} &&
            $MenuUnit_hash_ref->{Select} &&
            $MenuUnit_hash_ref->{Select}=~/many/i) {
         $select_many='Many';
         $MenuUnit_hash_ref->{Select}={};
      } elsif (exists $MenuUnit_hash_ref->{Select} &&
            $MenuUnit_hash_ref->{Select} &&
            $MenuUnit_hash_ref->{Select}=~/one/i) {
         $MenuUnit_hash_ref->{Select}={};
      } 
   } else {
      $MenuUnit_hash_ref->{Select}={};
   }
   my $picks_from_parent=$_[1]||'';
   my $log_handle='';
   if ($picks_from_parent && -1<index $picks_from_parent,'*') {
      $log_handle=$picks_from_parent;
      $picks_from_parent='';
   }
   my $unattended=0;
   if ($picks_from_parent=~/\](Cron|Batch|Unattended|FullAuto)\[/i) {
      $unattended=1;
      undef $picks_from_parent;
   }
   my $recurse = (defined $_[2]) ? $_[2] : 0;
   my $FullMenu= (defined $_[3]) ? $_[3] : {};
   my $Selected= (defined $_[4]) ? $_[4] : {};
   my $Conveyed= (defined $_[5]) ? $_[5] : {};
   my $SavePick= (defined $_[6]) ? $_[6] : {};
   my $SaveMMap= (defined $_[7]) ? $_[7] : {};
   my $SaveNext= (defined $_[8]) ? $_[8] : {};
   my $Persists= (defined $_[9]) ? $_[9] : {};
   my $parent_menu= (defined $_[10]) ? $_[10] : '';
   my $no_wantarray=0;

   if ((defined $_[11] && $_[11]) ||
         ((caller)[0] ne __PACKAGE__ && !wantarray)) {
      $no_wantarray=1;
   }
   if (defined $_[12] && $_[12]) {
      return '','','','','','','','','','','',$_[12];
   }
   if (defined $_[13] && $_[13]) {
      $log_handle=$_[13];
   }
   my %Items=();my %negate=();my %result=();my %convey=();
   my %chosen=();my %default=();my %select=();my %mark=();
   my $pick='';my $picks=[];my %num__=();
   my $display_this_many_items=10;my $die_err='';
   my $master_substituted='';my $convey='';$mark{BLANK}=1;
   my $show_banner_only=0;
   my $num=0;my @convey=();my $filtered=0;my $sorted='';
   foreach my $key (keys %{$MenuUnit_hash_ref}) {
      if (4<length $key && substr($key,0,4) eq 'Item') {
         $Items{substr($key,5)}=$MenuUnit_hash_ref->{$key};
      }
   }
   $Persists->{unattended}=$unattended if $unattended;
   my $start=($FullMenu->{$MenuUnit_hash_ref}[11])?
             $FullMenu->{$MenuUnit_hash_ref}[11]:0;

   ############################################
   # Breakdown the MenuUnit into its Components
   ############################################

      # Breakdown Each Item into its Components
      #########################################

   my $got_item_flag=0;
   while (++$num) {
      $start=$FullMenu->{$MenuUnit_hash_ref}[11]||0;
      @convey=();
      unless (exists $Items{$num}) {
         if (exists $MenuUnit_hash_ref->{Banner} && !$got_item_flag) {
            $show_banner_only=1;
         } else { last }
      } else {
         $got_item_flag=1;
      }
      if (exists $Items{$num}->{Negate} &&
            !(keys %{$MenuUnit_hash_ref->{Select}})) {
         my $die="Can Only Use \"Negate =>\""
                ."\n\t\tElement in ".__PACKAGE__.".pm when the"
                ."\n\t\t\"Select =>\" Element is set to \'Many\'\n\n";
         &Net::FullAuto::FA_Core::handle_error($die)
            if $Term::Menus::fullauto;
         die $die;
      }
      my $con_regex=qr/\]c(o+nvey)*\[/i;
      if (exists $Items{$num}->{Convey}) {
         my $convey_test=$Items{$num}->{Convey};
         if (ref $Items{$num}->{Convey} eq 'ARRAY') {
            foreach my $line (@{$Items{$num}->{Convey}}) {
               push @convey, $line;
            }
         } elsif (ref $Items{$num}->{Convey} eq 'CODE') {
            my $convey_code=$Items{$num}->{Convey};



( run in 2.681 seconds using v1.01-cache-2.11-cpan-364913b4093 )