#!/usr/bin/perl -w
use strict;
use File::Find ();

# -----------------------------------------------------------------------------
#
# Script
#     find-longlines
#
# Description
#     Search for *.[CH] files that exceed the 80-column width
#
#     - print filename lineNumber and offending line (with truncation point)
#
# -----------------------------------------------------------------------------

my $maxlen = 80;
my $re_filespec = qr{^.+\.[CH]$};
my $count;

sub wanted {
    unless ( lstat($_) and -f _ and -r _ and not -l _ and /$re_filespec/ ) {
        return;
    }

    local @ARGV = $_;
    while (<>) {
        chomp;
        s{\s+$}{};        # trim

        if ( $maxlen < length ) {
            $count++;
            substr( $_, $maxlen, 0 ) = "||->>";    # show truncation point
            print "$File::Find::name  $. $_\n";
        }
    }
    close ARGV;
}

## Traverse desired filesystems
for my $dir (@ARGV) {
    no warnings 'File::Find';
    warn "(**) checking '$dir' ...\n";
    File::Find::find( { wanted => \&wanted }, $dir );
}

