Code Search for Developers
 
 
  

report.pl from CQual at Krugle


Show report.pl syntax highlighted

#!/usr/bin/perl
# Generate report on experimental results


# Directories to report on
@dirs = ("out/drivers");

# Flags
$flag_nousage = 0;  # Don't print time/memory usage statisticss

foreach (@ARGV) {
    if (/-nousage/) { $flag_nousage = 1; }
    else {
	printf("Usage: report.pl [ -nousage ]\n");
	printf("-nousage   Don't print time/memory usage statistics\n");
	exit(0);
    }
}


print_header();

while ($dir = shift(@dirs)) {
    opendir(DIR, $dir);
    @files = readdir(DIR);
    closedir(DIR);
    foreach $file (sort(@files)) {
	next if ($file =~ /^\./);
	if (-d "$dir/$file") {
	    push(@dirs, "$dir/$file");
	}
	else {
	    @info = getinfo("$dir/$file");
	    print_info(@info);
	}
    }
}

# Extract analysis summary from file
sub getinfo
{
    my $funcs, $errs, $time, $vmsize, $filename, $finished;

    $filename = shift;
    $funcs = 0;
    $errs = 0;
    $time = "???";
    $finished = 0;
    open(FILE, "<$filename");
    while (<FILE>) {
	if (/^Assuming/) { $funcs++; }
	elsif (/inconsistent/) { $errs++; }
	elsif (/^Elapsed time/) { ($time) = m/^Elapsed time: (.*)s/; }
	elsif (/^VMSize/) { ($vmsize) = m/^VMSize: (.*)K/; }
	elsif (/^Analysis complete/) { $finished = 1; }
    }
    if ($finished) {
	return ($funcs, $errs, $time, $vmsize);
    }
    else {
	return (-1, -1, -1, -1);
    }
}

# Remove $n levels of directories from the left of name
sub shiftdirs
{
    my $n, $name, @path, $i;

    ($n, $name) = @_;
    @path = split(/\//, $name);
    for ($i = 0; $i < $n; $i++) {
	shift(@path);
    }
    $name = join("/", @path);
    return $name;
}

# Printing routines

sub print_header
{
    printf("%-45s %3s %4s", "File", "Fn", "Err");
    if ($flag_nousage) {
	printf("\n");
    }
    else {
#	printf(" %8s %6s\n", "File", "Fn", "Err", "Time", "Mem");
	printf(" %8s %6s\n", "Time", "Mem");
    }
    printf("----------------------------------------------------------------------------\n");
}

sub print_info
{
    my $funcs, $errs, $time, $vmsize, $name;

    ($funcs, $errs, $time, $vmsize) = @_;
    $name = shiftdirs(2, "$dir/$file");
    if ($errs == -1) {
	if ($flag_nousage) {
	    printf("%-45s %s\n", "$name", "ANALYSIS ERROR");
	}
	else {
	    printf("%-45s %24s\n", "$name", "ANALYSIS ERROR");
	}
    }
    else {
	if ($flag_nousage) {
	printf("%-45s %3d %4d\n", "$name", $funcs, $errs);
	}
	else {
	    printf("%-45s %3d %4d %8s %5dM\n", "$name", $funcs, $errs, $time, $vmsize / 1024);
    }
    }
}




See more files for this project here

CQual

CQual - A tool for adding type qualifiers to C

Project homepage: http://sourceforge.net/projects/cqual
Programming language(s): C,Java,Shell Script
License: other

  analyze
  analyze-char
  analyze-file
  analyze-kernel
  analyze-pldi02
  analyze-taint
  analyze_sleepy
  analyze_together
  collected_dependencies
  find-mod.pl
  modules_main.c
  modules_main_sleepy.i
  report
  report-init
  report-man
  report-sendmail
  report-thesis.pl
  report.pl
  report_modules_classified
  strong-upd-errs