Refactor Pattern Match Checker to use ListT
[ghc.git] / utils / count_lines / count_lines.lprl
1 #!/usr/bin/env perl
2
3 \begin{code}
4
5 use FindBin;
6
7 %DirCount = ();
8 %ModCount = ();
9 %DirComments = ();
10 %ModComments = ();
11
12 my $binPath = $FindBin::Bin;
13
14 foreach $f ( @ARGV ) {
15
16     if ( $f =~ /\.lhs$/ ) {
17         open(INF, "$binPath/../../inplace/lib/unlit $f - |") || die "Couldn't unlit $f!\n";
18     } else {
19         open(INF, "< $f") || die "Couldn't open $f!\n";
20     }
21     $cnt = 0;
22     while (<INF>) {
23         s/--.*//;
24         s/{-.*-}//;
25         s/\/\/.*//;
26         next if /^\s*$/;
27         $cnt++;
28     }
29     close(INF);
30
31     $f_wc = `wc $f`; die "wc failed: $f\n" if $? != 0;
32     if ( $f_wc =~ /\s*(\d+)\s*(\d+)\s*(\d+)/ ) {
33         $comments = $1 - $cnt;
34     } else {
35         die "Can't grok wc format: $f_wc";
36     }
37
38     if ( $f =~ /(.*)\/(.*)/ ) {
39         local($dir) = $1;
40         local($mod) = $2;
41         $DirCount{$dir} += $cnt;
42         $ModCount{$mod} += $cnt;
43         $DirComments{$dir} += $comments;
44         $ModComments{$mod} += $comments;
45     } else {
46         print STDERR "not counted in a directory: $f\n";
47         $ModCount{$f} += $cnt;
48         $ModComments{$f} += $comments;
49     }
50 }
51
52 # print the info
53 $tot = 0;
54 $totcmts = 0;
55 printf "\n                      Code  Comments\n";
56 foreach $d (sort (keys %DirCount)) {
57     printf "%-20s %6d %6d\n", $d, $DirCount{$d}, $DirComments{$d};
58     $tot     += $DirCount{$d};
59     $totcmts += $DirComments{$d};
60 }
61 printf "\n%-20s %6d %6d\n\n\n", 'TOTAL:', $tot, $totcmts;
62
63 $tot = 0;
64 $totcmts = 0;
65 printf "\n                      Code  Comments\n";
66 foreach $m (sort (keys %ModCount)) {
67     printf "%-20s %6d %6d\n", $m, $ModCount{$m}, $ModComments{$m};
68     $tot += $ModCount{$m};
69     $totcmts += $ModComments{$m};
70 }
71 printf "\n%-20s %6d %6d\n", 'TOTAL:', $tot, $totcmts;
72
73 \end{code}
74