#!/usr/bin/perl
#use taint; #sanitize backticks
use strict;
use warnings;
use diagnostics;

my $warnings;

#Accept filename from command line or use default. 
my $IN;
my $isOpen=0;
foreach my $arg(@ARGV) {
    if($arg =~ /-w/) {
        shift;
        $warnings = 1;
        printf "Warnings on\n";
        next;
    }
    if(-f $arg) {
        open $IN, '<', $arg or die $!;
        printf "Opened $arg\n";
	$isOpen=1;
        next;
    }
}

my $infile = 'lastx.tmp.sh';
if(!$isOpen){
    open $IN, "<", "$infile" or die $!;
}

warn if(tell($IN)==-1); #Paranoia.

my @cmds;

while(<$IN>) {
    my $row=$_;
    chomp $row;

    next unless $row=~/^\d+\.\d+\s\w*\.\w*/;
    my($rev, $fn)=split /\s/,$row;

    my($maj,$min)=split /\./,$rev;
    if(($maj == 1) and ($min == 1)) {
        printf STDERR "%s is first version\n", $fn if $warnings;
        next;
    }
    $min--;

    my $cmd=sprintf "cvs diff -r%d.%d %s", $maj,$min,$fn;
    push @cmds, $cmd;
}

my $outfile=$infile;
open my $OF,'>',$outfile or die $!;
foreach my $cmnd(@cmds) {
    printf    "%s\n", $cmnd;
    printf $OF "%s\n", $cmnd;
}

printf "Wrote %s\n", $outfile;


__END__
#!/bin/bash
for file in *
do 
cvs st $file 2>/dev/null |grep 'Working rev' |cut -d'  ' -f2 |grep -v 'No entry' |grep -v 'New file!' |sed "s/$/ $file/"
done |tee lastx.tmp.sh
/usr/bin/perl -dw ~/bin/lastx.pl #<lastx.tmp.sh 
