checkifd.pl to HTML.

index -|- end

Generated: Tue Feb 2 17:54:23 2010 from checkifd.pl 2009/03/13 1.9 KB.

#!c:\perl -w
# NAME: checkifd.pl
# AIM: To check the openning and closing of #if #ifdef #ifndef #else #endif blocks in a C/C++ file
# 3/13/2009 - geoff mclane - http://geoffair.net/mperl/
use strict;
use warnings;
my $BN = $0;
my @warnings = ();
# debug
my $dbg1 = 1;   # use a default name
sub prt($) {
   print shift;
}
sub prtw($) {
   my ($t) = shift;
   prt($t);
   $t =~ s/\n$//;
   push @warnings, $t;
}
sub process_file($) {
   my ($fil) = shift;
   my (@lines, $lncnt, $line, $itxt, $lnnum, $dep, $ln);
   my @depth = ();
   if (open INF, "<$fil") {
      @lines = <INF>;
      $lncnt = scalar @lines;
      prt( "$BN: Processing $lncnt lines, from $fil...\n" );
      $lnnum = 0;
      foreach $line (@lines) {
         chomp $line;
         $lnnum++;
         $dep = scalar @depth;
         $ln = "$lnnum:$dep";
         if ($line =~ /^\s*#\s*if.*\s+(.+)$/) {
            $itxt = $1;
            prt( "$ln: $line ($itxt)\n" );
            push(@depth, "$ln: $itxt");
         } elsif ($line =~ /^\s*#\s*else\s*(.*)$/) {
            $itxt = '';
            $itxt = $1 if ($1);
            prt( "$ln: $line ($itxt)\n" );
           } elsif ($line =~ /^\s*#\s*endif/) {
            if (@depth) {
               $itxt = pop @depth;
               $dep = scalar @depth;
               $ln = "$lnnum:$dep";
               prt( "$ln: $line ($itxt)\n" );
            } else {
               $itxt = "***WARNING*** NO DEPTH!";
               prtw( "$ln: $line ($itxt)\n" );
            }
         }
      }
   } else {
      prt( "$BN: ERROR: failed to open $fil!\n" );
   }
}
my $in_file ='';
if ($dbg1) {
   $in_file = 'C:\FG\30\pthreads\ptw32_InterlockedCompareExchange.c';
}
if (@ARGV) {
   $in_file = shift @ARGV;
   if ( ! -f $in_file ) {
      die "$BN: Can not locate [$in_file]\n";
   }
}
if (length($in_file)==0) {
   die "$BN: Give input file to check...\n";
}
process_file($in_file);
if (@warnings) {
   prt( "Got ".scalar @warnings." warnings...\n" );
   foreach my $w (@warnings) {
      prt( "$w\n" );
   }
}
exit 0;
# eof - checkifd.pl

index -|- top

checked by tidy  Valid HTML 4.01 Transitional