#!c:/perl/bin/perl -w

use strict;
use Getopt::Long();
use File::Find();


my $opt = {
};

sub Convert {
  my $f = shift;
  return unless -f $f  &&  ! -z _;
  print "Loading file $f\n" if $opt->{'verbose'};
  open(FILE, "<$f") || die "Failed to open file $f: $!";
  binmode(FILE) || die "Failed to request binary mode for $f: $!";
  my $contents;
  { local $/ = undef; $contents = <FILE>; }
  die "Failed to read $f: $!" unless defined $contents;
  close(FILE) || die "Failed to close $f: $!";
  my $newcontents = $contents;
  $newcontents =~ s/\r\n/\n/sg;
  if ($contents ne $newcontents) {
    print "Modifying file $f\n" if $opt->{'verbose'};
    (open(FILE, ">$f") && binmode(FILE)  &&  (print FILE $newcontents) &&
     close(FILE))
      || die "Failed to open file $f: $!";
  }
}

Getopt::Long::GetOptions($opt, "dir=s", "verbose");
if (@ARGV) {
  foreach my $f (@ARGV) {
    Convert($f);
  }
} else {
  my $dir = $opt->{'dir'} || ".";
  die "No such directory: $dir" unless -d $dir;
  File::Find::find(sub { Convert($File::Find::name) }, $dir);
}