Hi all,

 I've sent it to the perl-unix group but didn't get much help.
 Can someone one here figure what's wrong?
 
 This program 'info.pl' takes 2 different input file format
 ( file1.txt or file2.txt) and display information about the
 Boot and the Boot Processor.
 
 It works file file 'file1.txt' as it get some information
 on the "BOOT INFORMATION" but when running it with
 'file2.txt' , it only get
 information on "BOOT PROCESSOR INFORMATION" but not the
 "BOOT INFORMATION"
 
 Can someone tell me what's wrong with my &bootInfo
 subroutine ?
 I think the problem might in line 43
 while ( $idx <= $#{$data} and $data->[$idx] !~ m/(The
 current root cell is)|AutoBoot/)
 but I am not sure.
 
 Thanks
 J
 
 
 
> 
> 
> 
> 
>       


      
use strict;
use warnings;
use Tie::File;

sub makeWord {
    my $word = shift;
    if ($word =~ /[\/ ]/) {
        $word =~ s/\/|_/ /g;
        $word = join '', map {ucfirst lc} split / /, $word;
        $word =~ s/ //g;
    }
    return $word;
}

sub bootInfo 
 {
    my $section     = shift;
    my $data        = shift;

    my $idx  = 0;
    my $curr_list;
    my $curr_tool;
    my $name;
    my $value;
    my ($cell, $current, $preferred, $warnings); 

    $idx++ while ($idx <= $#{$data} && $data->[$idx] !~ /$section/);
    if ($idx >= $#{$data}) 
     {
       print ("$0: Section $section does not appear to have any data!\n");      
        
       return;
     }
        
    $idx++ while ($idx <= $#{$data} && $data->[$idx] !~ /^[- ]+$/);
    if ($idx >= $#{$data}) 
     {
        ptint ("$0: Section $section is missing its header!\n");                
        return;
     }

$curr_tool = makeWord($section);

   while ( $idx <= $#{$data} and $data->[$idx] !~ m/(The current root cell 
is)|AutoBoot/)
    {
      next if $data->[$idx] =~ /^$/;
      next if $data->[$idx] =~ /^[- ]+$/;

      if ( $data->[$idx] =~ m{\s+
                                        (\d+)\s+                # Cell
                                        (\d+/\d+)\s+    # Current Monarch
                                        (\d+/\d+)\s*    # Preferred Monarch
                                        (\S+(?:\s+\S+)*)?\s*    # Warnings
                                        $}xms ) 
        {

            ($cell, $current, $preferred, $warnings) = ($1,$2,$3,$4);

                print "    $curr_tool=>MonarchInfo\n";
                print "\t$curr_tool=>Cell->$cell\n";
                print "\t$curr_tool=>CurrentMonarch->$current\n";
                print "\t$curr_tool=>PreferredMonarch->$preferred\n";
                print "\t$curr_tool=>Warnings->$warnings\n" if ( defined 
$warnings);

        } 
      elsif ( $data->[$idx] =~ m{\s+
                                        (\d+/\d+)\s+    # Current Monarch
                                        (\d+/\d+)\s*    # Preffered Monarch
                                        (\S+(?:\s+\S+)*)?\s*    # Warnings
                                        $}xms ) 
       {
            ($current, $preferred, $warnings) =($1,$2,$3);

                print "    $curr_tool=>MonarchInfo\n";
                print "\t$curr_tool=>CurrentMonarch->$current\n";
                print "\t$curr_tool=>PreferredMonarch->$preferred\n";
                print "\t$curr_tool=>Warnings->$warnings\n" if ( defined 
$warnings);

        }
      elsif ( $data->[$idx] =~ m{\s+
                                        (\d+)\s+        # Current Monarch
                                        (\d+)\s*        # Preffered Monarch
                                        (\S+(?:\s+\S+)*)?\s*    # Warnings
                                        $}xms ) 
        {

            ($current, $preferred, $warnings) = ($1,$2,$3);

                print "    $curr_tool=>MonarchInfo\n";
                print "\t$curr_tool=>CurrentMonarch->$current\n";
                print "\t$curr_tool=>PreferredMonarch->$preferred\n";
                print "\t$curr_tool=>Warnings->$warnings\n" if ( defined 
$warnings);

        }
      else 
        {
           #print ("$0:$section:Line $idx >$data->[$idx]< failed to match 
anything INF FILE1\n");
        }

    } 
   continue
    {
      $idx++;
    }

    while ($idx <= $#{$data} && $data->[$idx] !~ /LAN Address Information:/) 
     {
        if ($idx >= $#{$data}) 
         {
            print ("$0: Section $section is missing selftest info!\n");
            return;
         }
        next if $data->[$idx] =~ /^$/;
        next if $data->[$idx] =~ /Boottest:$/xms;
        next if $data->[$idx] =~ /Boottest\s+Settings/xims;
        next if $data->[$idx] =~ /Selftest\s+Setting/xims;
        next if $data->[$idx] =~ /^[- ]+$/;

        if ($data->[$idx] =~ 
m/The\s+(current\s+root\s+cell)\s+is\s+(\d+)[.]\s*$/xms ) 
         {
           ($name,$value) = (makeWord($1), $2);
           print "    $curr_tool=>RootCellInfo\n";
           print "\t$curr_tool=>$name->$value\n";
         }
        elsif ($data->[$idx] =~ 
m/The\s+(preferred\s+root\s+cell)\s+is\s+(\d+)[.]\s*$/xms ) 
         {
           ($name,$value) = (makeWord($1), $2);
            print "\t$curr_tool=>$name->$value\n";
         }
        elsif ($data->[$idx] =~ m/AutoBoot\s*:\s+
                                (\S+)\s+                # On or off
                                -\s+Timeout\s+is\s+
                                (\S+(?:\s+\S+)*)\s*     # timeout 
                                $/xms ) 
         {
            my $autoboot = $1;
            my $timeout = $2;

            print "    $curr_tool=>AutoBootSettings\n";
            print "\t$curr_tool=>AutoBoot->$autoboot\n";
            if ($autoboot=~ /ON/i ) 
             {
                $timeout =~ m/:\s*(\d+\s+sec)/xms ;
                print "\t$curr_tool=>Timeout->$1\n";
             }  

        }
       elsif ($data->[$idx] =~ m/\s*
                                                (Os\s+(?:is|is\s+not)\s+        
# value
                                                speedy\s+boot\s+aware)[.]\s*
                                                $/xims ) 
        {
           my $speedyboot = $1;
                                
        }
       elsif ($data->[$idx] =~ m/\s*
                                        (\S+)\s+        #Selftest
                                        (\S+(?:\s+\S+)*)\s*     # Setting
                                        /xms ) 
        {
           my ($selftest, $setting) = (makeWord($1), $2);
           print "\t$curr_tool=>$selftest->$setting\n";
        } 
       else 
        {
          print ("$0:$section:Line $idx >$data->[$idx]< doesn't match anything 
IN FILE2.\n");
        }
     } 
    continue 
     {
        $idx++;
     }  # end of while

        # supposedly at LanAddress section

    while ($idx <= $#{$data} && $data->[$idx] !~ /.* INFORMATION/) 
     {
        if ($idx >= $#{$data})
          {
                print ("$0: Section $section is missing LanInfo data!\n");
                return;
          }
        next if $data->[$idx] =~ /^$/;
        next if $data->[$idx] =~ /LAN\s+Address/;
        next if $data->[$idx] =~ /^[- ]+$/;

        if ( $data->[$idx] =~ /\s*
                                ([*]?)                  # a * marks the default
                                Mac[(](\p{IsXDigit}+)[)]\s+     # mac addr
                                (Acpi\S+(?:\s+\S+)*)\s*         # path
                                        /xms ) 
         {

            my ($default, $mac, $path) = ($1, $2, $3);

            print "    $curr_tool=>LanInfo\n";
            print "\t$curr_tool=>LanAddress->$mac\n";
            print "\t$curr_tool=>Path->$path\n";
            print "\t$curr_tool=>Default_LAN->True\n" if ($default);
         }
        elsif ( $data->[$idx] =~ /\s*
                                ([*]?)                  # a * marks the default
                                M\s*\d+\s+Mac[(](\p{IsXDigit}+)[)]\s+   # mac 
addr
                                (Acpi\S+(?:\s+\S+)*)\s*         # path
                                                /xms ) 
        {
          my ($default, $mac, $path) = ($1, $2, $3);

          print "    $curr_tool=>LanInfo\n";
          print "\t$curr_tool=>LanAddress->$mac\n";
          print "\t$curr_tool=>Path->$path\n";
          print "\t$curr_tool=>Default_LAN->True\n" if ($default);
        }
       else 
        {
          print ("$0:$section:Line $idx >$data->[$idx]< doesn't match anything. 
in FILE3\n");
        }
    } 
   continue 
    {
      $idx++;
    }
    
}

sub bootCpuInfo 
 {
    my $section     = shift;
    my $data        = shift;

    my $idx  = 0;
    my $curr_list;
    my $curr_tool;
    my $name;
    my $value;
    my ($cell, $current, $preferred, $warnings); 

    $idx++ while ($idx <= $#{$data} && $data->[$idx] !~ /$section/);
    if ($idx >= $#{$data}) 
     {
        print ("$0: Section $section does not appear to have any data!\n");     
        
        return;
     }
        
    $idx++ while ($idx <= $#{$data} && $data->[$idx] !~ /^[- ]+$/);
    if ($idx >= $#{$data}) 
     {
        print("$0: Section $section is missing its header!\n");         
        return;
     }

        $curr_tool =  makeWord($section);

   $idx++;
   while ( $idx <= $#{$data} and $data->[$idx] !~ m/.*INFORMATION/) 
    {
       next if $data->[$idx] =~ /^$/;
       next if $data->[$idx] =~ /^[- ]+$/;

       if ( $data->[$idx] =~ m!\s*([-\d]+/\d+/\d+/\d+)! )
        { # Current Monarch
           ($current) = ($1);

           print "    $curr_tool=>MonarchInfo\n";
           print "\t$curr_tool =>EncBaySocket-> $current \n";
        }
       else 
        {
          #print ("$0:$section:Line $idx >$data->[$idx]< failed to MAtch 
anything\n");
        }
    } 
   continue 
    {
      $idx++;
    }
 }
 
my $InFileName ;  
my @data;
my $idx;

$InFileName = $ARGV[0] || $InFileName;

open(INF, "$InFileName") or die ("Could not open file $InFileName: $!");
close INF;


tie @data, 'Tie::File', $InFileName or die "cannot open $InFileName: $!\n";

if (grep (/
/,@data)) 
 {
    chop(@data);
 }

my @sectionList = grep {/INFORMATION|DEVICE|CAPABILITIES/} @data;


foreach (@sectionList) 
 {
   print "--$_--\n";

    next if ( m/FABRIC\s+INFORMATION\s+is\s+unavailable/);
        
        #warn "Checking section $_\n";
   
    if (m/^\s*BOOT INFORMATION/)  
     {
        bootInfo( $_,\...@data) ;
     }
    elsif (m/^\s*BOOT PROCESSOR INFORMATION/)  
     {
        bootCpuInfo($_,\...@data) ;
     }
    else 
     {
       #print "$0:Section >$_< ERR: failed to match anything.\n";
     }  
 }
SYSTEM INFORMATION
Date/Time:  May  8, 2009  19:08:15  (20:09:05:08:19:08:15)
Serial Number:  USE6482EMN
UUID:  554D7ABC-96EE-11DB-8267-7EF96A3F174C
System Bus Frequency:  266 MHz
BOOT INFORMATION
   Monarch CPU:
   Current  Preferred
   Monarch   Monarch
     CPU       CPU
   Module/   Module/
   Logical   Logical   Warnings
   -------  ---------  --------
     0/0       0/0
   AutoBoot: OFF - Timeout is disabled
   Boottest:
   BOOTTEST Settings Default Variable
   Selftest     Setting
   ---------    --------------
   early_cpu    Run this test
   io_hw        Run this test
   mem_test     Run this test

   LAN Address Information:

   LAN Address        Path
   -----------------  ----------------------------------------
  *Mac(0017A4770008)  Acpi(HWP0002,PNP0A03,100)/Pci(1|0)/Mac(0017A4770008) 
   Mac(0017A477000A)  Acpi(HWP0002,PNP0A03,100)/Pci(1|1)/Mac(0017A477000A) 

FIRMWARE INFORMATION


   System Firmware A Revision: 4.11 [4842]
  *System Firmware B Revision: 4.21
BOOT INFORMATION

   AutoBoot: OFF - Timeout: Disabled - Retries: 0
   Boottest:
   BOOTTEST Settings Default Variable
   OS is not speedy boot aware.
   Selftest     Setting
   ---------    --------------
   early_cpu    Run this test
   io_init      Skip this test
   mem_test     Run this test

   LAN Address Information:
      LAN Address       Path
      ----------------- ----------------------------------------
M 001 Mac(002264FE719E) 
AcpiEx(PNP0A08,0x30304352,PNP0A03)/Pci(0x3,0x0)/Pci(0x0,0x0)/MAC(002264FE719E,0x0)
M 002 Mac(002264FE71A2) 
AcpiEx(PNP0A08,0x30304352,PNP0A03)/Pci(0x3,0x0)/Pci(0x0,0x1)/MAC(002264FE71A2,0x0)

CPU INFORMATION
   Enc/    Active             Core
   Bay/    Cores/             L3      Family/
   CPU     Logical            Cache   Model         CPU
   Socket  CPUs     Speed     Size    (hex.)   Rev  State
   ------  -------  --------  ------  -------  ---  -------------
    -/2/0    2/4    --------  ------  -------  ---          Mixed *
    -/2/1    2/4    --------  ------  -------  ---          Mixed *

   CPU threads are turned on.
   * CPU socket contains cores with different states.
     Use 'info -cores cpu' for more details.

BOOT PROCESSOR INFORMATION
   Enc/Bay/
   CPU Socket/
   Core
   -----------
       -/2/0
_______________________________________________
Perl-Win32-Users mailing list
Perl-Win32-Users@listserv.ActiveState.com
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to