From ba8f663f16c3e8c4abd2ef7ec5966a7dc338b962 Mon Sep 17 00:00:00 2001 From: "David A. Wheeler" Date: Sun, 25 Aug 2013 08:16:13 -0400 Subject: Initial commit of version 2.26. --- modula3_count | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 modula3_count (limited to 'modula3_count') diff --git a/modula3_count b/modula3_count new file mode 100644 index 0000000..fa2921d --- /dev/null +++ b/modula3_count @@ -0,0 +1,65 @@ +#!/usr/bin/perl -w +# modula3_count - count physical lines of code +# Strips out (* .. *) and counts the rest. +# Usage: modula3_count [-f file] [list_of_files] +# file: file with a list of files to count (if "-", read list from stdin) +# list_of_files: list of files to count +# -f file or list_of_files can be used, or both + +$total_sloc = 0; + +# Do we have "-f" (read list of files from second argument)? +if (($#ARGV >= 1) && ($ARGV[0] eq "-f")) { + # Yes, we have -f + if ($ARGV[1] eq "-") { + # The list of files is in STDIN + while () { + chomp ($_); + &count_file ($_); + } + } else { + # The list of files is in the file $ARGV[1] + open (FILEWITHLIST, $ARGV[1]) || die "Error: Could not open $ARGV[1]\n"; + while () { + chomp ($_); + &count_file ($_); + } + close FILEWITHLIST; + } + shift @ARGV; shift @ARGV; +} +# Process all (remaining) arguments as file names +while ($file = shift @ARGV) { + &count_file ($file); +} + +print "Total:\n"; +print "$total_sloc\n"; + +sub count_file { + my ($file) = @_; + my $sloc = 0; + my $incomment = 0; + + open (FILE, $file); + while () { + if ($incomment) { + if (m/\*\)/) { s/^.*?\*\)//; $incomment = 0;} + else { s/.*//; } + } + if (!$incomment) { + s!\(\*.*?\*\)!!g; + if (m/\(\*/) { + s/\(\*.*//; + $incomment = 1; + } + } + if (m/\S/) {$sloc++;} + } + print "$sloc $file\n"; + if ($incomment) {print "ERROR: ended in comment in $file\n";} + $total_sloc += $sloc; + $sloc = 0; + $incomment = 0; + close (FILE); +} -- cgit v1.2.1