summaryrefslogtreecommitdiff
path: root/utils/count_lines/count_lines.pl
blob: a54f163e367e00f77455e67bd9c863e33b2e664e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/usr/bin/env perl

use FindBin;

%DirCount = ();
%ModCount = ();
%DirComments = ();
%ModComments = ();

my $binPath = $FindBin::Bin;

foreach $f ( @ARGV ) {

    if ( $f =~ /\.lhs$/ ) {
        open(INF, "$binPath/../../inplace/lib/unlit $f - |") || die "Couldn't unlit $f!\n";
    } else {
        open(INF, "< $f") || die "Couldn't open $f!\n";
    }
    $cnt = 0;
    while (<INF>) {
        s/--.*//;
        s/{-.*-}//;
        s/\/\/.*//;
        next if /^\s*$/;
        $cnt++;
    }
    close(INF);

    $f_wc = `wc $f`; die "wc failed: $f\n" if $? != 0;
    if ( $f_wc =~ /\s*(\d+)\s*(\d+)\s*(\d+)/ ) {
        $comments = $1 - $cnt;
    } else {
        die "Can't grok wc format: $f_wc";
    }

    if ( $f =~ /(.*)\/(.*)/ ) {
        local($dir) = $1;
        local($mod) = $2;
        $DirCount{$dir} += $cnt;
        $ModCount{$mod} += $cnt;
        $DirComments{$dir} += $comments;
        $ModComments{$mod} += $comments;
    } else {
        print STDERR "not counted in a directory: $f\n";
        $ModCount{$f} += $cnt;
        $ModComments{$f} += $comments;
    }
}

# print the info
$tot = 0;
$totcmts = 0;
printf "\n                      Code  Comments\n";
foreach $d (sort (keys %DirCount)) {
    printf "%-20s %6d %6d\n", $d, $DirCount{$d}, $DirComments{$d};
    $tot     += $DirCount{$d};
    $totcmts += $DirComments{$d};
}
printf "\n%-20s %6d %6d\n\n\n", 'TOTAL:', $tot, $totcmts;

$tot = 0;
$totcmts = 0;
printf "\n                      Code  Comments\n";
foreach $m (sort (keys %ModCount)) {
    printf "%-20s %6d %6d\n", $m, $ModCount{$m}, $ModComments{$m};
    $tot += $ModCount{$m};
    $totcmts += $ModComments{$m};
}
printf "\n%-20s %6d %6d\n", 'TOTAL:', $tot, $totcmts;