vc8srcs01.pl to HTML.

index -|- end

Generated: Tue Feb 2 17:54:59 2010 from vc8srcs01.pl 2006/07/25 4.3 KB.

#!/Perl
# AIM: Source list from MSVC8 project file
# First try, using XML::Simple, so
use Data::Dumper;
use XML::Simple;
require "logfile.pl" or die "Missing logfile.pl ...\n"; # my simple log file
my $dbg_on1 = 0;
my $dbg_on2 = 1;
# set a DEFAULT input file name
#my $in_file = 'F:\FG0910-4\PLIB\src\pui\pui.vcproj';
my $in_file = 'F:\FG0910-4\flightgear\projects\VC8\FlightGear.vcproj';
my $in_dir = 'F:\FG0910-4\PLIB\src\pui';
$in_file = pop @ARGV if (@ARGV);
$in_dir = pop @ARGV if (@ARGV);
# log file stuff
my ($LF);
my $outfile = 'temp'.$0.'.txt';
open_log($outfile);
my $file = '';
my $ff = '';
my $fl1 = 'Files';
my $fl2 = 'File';
my $fl3 = 'RelativePath';
my $fl4 = 'Filter';
my $cnt = 0;
my @csrc_array = ();
my @hsrc_array = ();
my @osrc_array = ();
my @cdir_array = ();
my @hdir_array = ();
my @odir_array = ();
my @files = ();
prt( "$0 ... Hello, World ...\n" );
if ( ( -f $in_file) && ( -d $in_dir ) ) {
   get_xml_sources($in_file);
   #get_dir_sources();
   #cmp_c_sources();
} else {
   prt( "ERROR: Can not locate [$in_file] or [$in_dir] ... aborting ...\n" );
}
close_log($outfile,1);
exit(0);
##############################################
### utitlity subs
sub cmp_c_sources {
   my ($f1, $f2);
   my $fnd = 0;
   prt( "\nComparing C/C++ sources ...\n" );
   foreach $f1 (@csrc_array) {
      $fnd = 0;
      foreach $f2 (@cdir_array) {
         if ( lc(file_name($f1)) eq lc(file_name($f2)) ) {
            $fnd = 1;
            last;
         }
      }
      if ($fnd == 0) {
         prt( "NOT FOUND [$f1] from \@csrc_array in \@cdir_array!\n" );
      }
   }
   foreach $f1 (@cdir_array) {
      $fnd = 0;
      foreach $f2 (@csrc_array) {
         if ( lc(file_name($f1)) eq lc(file_name($f2)) ) {
            $fnd = 1;
            last;
         }
      }
      if ($fnd == 0) {
         prt( "NOT FOUND [$f1] from \@cdir_array in \@csrc_array!\n" );
      }
   }
}
sub get_dir_sources {
   opendir(DIR, $in_dir) or mydie( "ERROR: Unable to open directory [$in_dir] ...\n" );
   @files = readdir(DIR);
   closedir DIR;
   $cnt = 0;
   foreach $file (@files) {
      if (($file eq '.') || ($file eq '..')) {
         next;
      }
      $cnt++;
      $ff = $in_dir . '\\' . $file;
      prt( "$cnt $file ($ff)\n" );
      if (is_c_source($file)) {
         push(@cdir_array,$file);
      } elsif (is_h_source($file)) {
         push(@hdir_array,$file);
      } else {
         push(@odir_array,$file);
      }
   }
   prt( "Got ".scalar @cdir_array." C/C++ files, ".scalar @hdir_array. " header files" );
   if (@odir_array) {
      prt( " and ".scalar @odir_array." files" );
   }
   prt("\n");
}
sub get_xml_sources {
   my ($in) = shift;
   my $in_fd = file_dirname($in);
   prt( "Loading [$in] in directory [$in_fd] ...\n" );
   # create object
   my $xml = new XML::Simple;
   #my $xml = new XML::Simple (KeyAttr=>[]);
   # read XML file
   my $data = $xml->XMLin($in);
   # print output
   #prt( Dumper($data) );
   prt( "Getting array of $fl1 ...\n" );
   my $files = $data->{$fl1};
   #my $files = $data->{$fl1}->{$fl2};
   #my $files = $data->{$fl1}->{$fl2}->{$fl3};
   prt( Dumper($files) ) if ($dbg_on1);
   prt( "Processing for each $fl2 ...\n" );
   $cnt = 0;
   foreach my $e (@{$files->{$fl2}}) {
      $cnt++;
      #prt( Dumper($e) );
      $file = $e->{$fl3};
      $ff = $in_fd . $file;
      #prt( $e->{$fl3}."\n" );
      prt( "$cnt $file ($ff)\n" );
      if (is_c_source($file)) {
         push(@csrc_array,$file);
      } elsif (is_h_source($file)) {
         push(@hsrc_array,$file);
      } else {
         push(@osrc_array,$file);
      }
   }
   if ($cnt == 0) {
      prt( "\nFAILED using [$fl1][$fl2] ... try [$fl1][$fl4] ...\n" );
      $files = $data->{$fl1}->{$fl4};
      prt( Dumper($files) ) if ($dbg_on2);
      #my $dfiles = $files->{$fl2};
      #prt( Dumper($dfiles) ) if ($dbg_on2);
      foreach my $k (keys %{$files}) {
         $cnt++;
         #my $tmp = $files->{$k};
         if ($k eq $fl2) {
            my $tmp = $data->{$fl1}->{$fl4}->{$k};
            prt( Dumper($tmp) );
         }
         prt( "$cnt $k [".$files{$k}."]\n" );
      }
   }
   prt( "Got ".scalar @csrc_array." C/C++ files, ".scalar @hsrc_array. " header files" );
   if (@osrc_array) {
      prt( " and ".scalar @osrc_array." files" );
   }
   prt("\n");
}
sub is_c_source {
   my $f = shift;
   if ( ($f =~ /\.c$/i) || ($f =~ /\.cpp$/i) || ($f =~ /\.cxx$/i) ) {
      return 1;
   }
   return 0;
}
sub is_h_source {
   my $f = shift;
   if ( ($f =~ /\.h$/i) || ($f =~ /\.hpp$/i) || ($f =~ /\.hxx$/i) ) {
      return 1;
   }
   return 0;
}
# eof - vc8srcs01.pl

index -|- top

checked by tidy  Valid HTML 4.01 Transitional