#!/usr/unsupported/bin/perl

require "find.pl";

$dir1 = shift;
$dir2 = shift;
$opts = shift;
$| = 1;
print "perl ~/perl/rcswalk.pl $dir1 $dir2 $opts\n\n";
&find($dir1);

sub wanted {
    $prune = 0;
    $fi = $_;
    $dbase = $dir; $dbase =~ s/^$dir1//;
    print "$_: $dbase\n" if $debug;
##    if ($dbase =~ /CVS$/) {
##	$prune = 1;
    if ($_ eq "CVS") {
	$prune = 1;
    } elsif (! -e "$dir1/$dbase/$fi") {
	print "$dir1/$dbase/$fi doesn't exist\n";
	if ( -d "$dir2/$dbase/$fi") {
	    $prune = 1;
	}
    } elsif (! -e "$dir2/$dbase/$fi") {
	print "$dir2/$dbase/$fi doesn't exist\n";
	if ( -d "$dir1/$dbase/$fi") {
	    $prune = 1;
	}
    } elsif (! -f "$dir1/$dbase/$fi") {
	print "$dir1/$dbase/$fi not a plain file\n";
    } elsif (! -f "$dir2/$dbase/$fi") {
	print "$dir2/$dbase/$fi not a plain file\n";
    } else {
	$res1 = &filter("$dir1/$dbase/$fi","a");
	$res2 = &filter("$dir2/$dbase/$fi","b");
	$tf = "/tmp/rcswalk-$$-result";
	system("diff $opts $res1 $res2 > $tf");
	if (! -z $tf) {
	    print "diff $opts $dir1/$dbase/$fi $dir2/$dbase/$fi\n";
	    system("cat $tf");
	}
	$prune = 1;
    }
}

sub filter {
    local($of,$_);
    open(XXXX, "<$_[0]");
    $of = "/tmp/rcswalk-$$-$_[1]";
    open(YYYY, ">$of");
    while(<XXXX>) {
	s/\$([a-zA-Z]*):.*\$/\$\1\$/;
	print YYYY $_;
    }
    close(XXXX);
    close(YYYY);
    $of;
}

unlink($res1,$res2);
