#!/usr/local/bin/perl -w
#
# This is orginates from perl's  man (info) pages
# 	where the "-i.bak" switch is explained.

use Getopt::Long;
@knownoptions = ("old|o=s" => \$old_V,
		 "new|n=s" => \$new_V,
		 "debug|d"  => \$DEBUG,
		 "help|h"  => \$do_help,
);
GetOptions(@knownoptions) || usage(1);
usage(0) if $do_help || $#ARGV < 0;
do {
  print STDERR "Must specify  --new NEWVERSION --old OLDVERSION!\n";
  usage(1);
} unless $new_V && $old_V && ($new_V gt $old_V);# `gt' breaks for "10"++

$oldargv = $changed = 0;
## Now do all the files, given as further arguments:
while (<>) {
  if ($ARGV ne $oldargv) {
    if ($oldargv && !$changed) {# last file remained unchanged!
      close(ARGVOUT);
      rename($oldargv . '.bak', $oldargv);
    } else {
      print STDERR " __changed__" if $DEBUG;
    }
    printf STDERR "\nFile %-20s ", $ARGV  if $DEBUG;
    rename($ARGV, $ARGV . '.bak');
    open(ARGVOUT, ">$ARGV") || die "Couldn't open ARGVOUT (> $ARGV): $!\n";
    select(ARGVOUT) || die "Couldn't select ARGVOUT ($ARGV): $!\n";
    $oldargv = $ARGV;
    $changed = 0;
  }
  $changed += s/(ESS-)$old_V/$1$new_V/g;
  $changed += s/(ESS +version +)$old_V/$1$new_V/gi;
}
continue {
	print;	# should print to original filename ARGVOUT / $ARGV
}
print STDERR "\n" if $DEBUG;
select(STDOUT);

##-----------
sub usage {
    print STDERR "\nHelp for $0\n\n";
    print STDERR "Usage: $0 (--old/-o) <oldver.>  (--new/-n) <newversion>";
    print STDERR " [--help/-h] files\n\n";
    exit($_[0]);
}


