#!/usr/bin/perl -w 
#
# Copyright (C) 2012, 2017: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html
#
#####################################################################
# Name          : find_textfiles                                    #
# Full path     : /home/umesh/bin/find_textfiles                    #
# Type          : Perl Script. Needs Perl 5.                        #
# Description   : Finds the text files under a directory            #
#                 Prunes CVS directories if -nocvs is provided      #
#                 Prunes RCS directories if -norcs is provided      #
#                 Prunes SCCS directories if -nosccs is provided    #
# Author        : Umesh Nair (umesh@google.com)                     #
#                                                                   #
#-------------------------------------------------------------------#
# Maintenance Block:                                                #
# Date            Changed by        Description                     #
# ----            ----------        -----------                     #
# May 2000        Umesh Nair        Initial version of the script   #
# Mar 2002        Umesh Nair        Added -h option                 #
# May 2008        Umesh Nair        Added -nosvn and -novc          #
#                                                                   #
#####################################################################

use strict;
use File::Find;

my ($skipCvs, $skipRcs, $skipSccs, $skipSvn, $skipVc, $skipEclipse) = (0, 0, 0, 0, 0);
my $help = 0;

while ((defined $ARGV[0]) and ($ARGV[0] =~ /\A\-/)) {
   my $option = shift;
   chomp $option;
   ($skipCvs = 1) if ($option =~ /nocvs/);
   ($skipSccs = 1) if ($option =~ /nosccs/);
   ($skipSvn = 1) if ($option =~ /nosvn/);
   ($skipVc = 1) if ($option =~ /novc/);
   ($skipEclipse = 1) if ($option =~ /noeclipse/);
   ($help = 1) if ($option =~ /h/);
}

if ($help) {
    exec "pod2man $0 | nroff -man |". ($ENV{"PAGER"} || 'more -s');
}

if (@ARGV == 0) {
   find (\&wanted, '.');
} else {
   find (\&wanted, @ARGV);
}

sub wanted {
  unless (($skipVc and (/\.vcproj$/ or /\.vcxproj$/ or /\.sln$/ or /\.dsp$/ or /\.dsw$/ or /\.filters$/))
    or ($skipEclipse and (/\.project$/ or /\.classpath$/ or /\.prefs$/ or /\.launch$/))) {
    print "$File::Find::name\n" if (-f and -T );
  }
  ($File::Find::prune = 1) 
    if (
        ($skipCvs and /^CVS$/) or
        ($skipRcs and /^RCS$/) or
        ($skipSccs and /^SCCS$/) or
        ($skipSvn and /^\.svn$/) 
       );
}

__END__

=head1 NAME

find_textfiles - Finds the text files under a directory

=head1 SYNOPSIS

find_textfiles [C<-nocvs>] [C<-norcs>] [C<-nosccs>]  [C<-nosvn>]  [C<-novc>] [C<-noeclipse>] [ dir1 [ dir2 ] .... ]

find_textfiles [C<-h>]

=head1 DESCRIPTION

This script recursively searches the specified directories (current
directory if no parameter is passed) for text files, and lists the
filenames on the standard output, one file per line.

The directories named 'CVS', 'RCS' and 'SCCS' may be skipped by
specifying the switches -nocvs, -norcs and -nosccs respectively.

=head1 OPTIONS

=over 4

=item C<-h> 

Displays this help document.

=item C<-nocvs>

Prunes all directories named 'CVS' and everything under that.

=item C<-norcs>

Prunes all directories named 'RCS' and everything under that.

=item C<-nosccs>

Prunes all directories named 'SCCS' and everything under that.

=item C<-nosvn>

Prunes all directories named '.svn' and everything under that.

=item C<-novc>

Excludes all VC++ files, i.e., *.vcproj, *vcxproj, *.dsw, *.dsp, *.filters.

=item C<-noeclipse>

Excludes all Eclipse files, i.e., .project, .classpath, *.prefs, *.launch.

=back

=head1 SEE ALSO

find_binaries

=head1 AUTHOR

Umesh Nair, 2000.

=cut

