diff options
Diffstat (limited to 'compiler/count_lines')
-rw-r--r-- | compiler/count_lines | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/compiler/count_lines b/compiler/count_lines new file mode 100644 index 0000000000..43ca79e68a --- /dev/null +++ b/compiler/count_lines @@ -0,0 +1,63 @@ +#! /usr/bin/perl +# +%DirCount = (); +%ModCount = (); +%DirComments = (); +%ModComments = (); + +foreach $f ( @ARGV ) { + + if ( $f =~ /\.lhs$/ ) { + open(INF, "../utils/unlit/unlit $f - |") || die "Couldn't unlit $f!\n"; + } else { + open(INF, "< $f") || die "Couldn't open $f!\n"; + } + $cnt = 0; + while (<INF>) { + 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; +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; |