#!/usr/bin/perl -w
# From LaTeX: It's Not Just for Academia, Part 2, Kevin O'Malley
# O'Reilly MacDevCenter, Feb 2004.

use strict;

my $MAKE_PDF_CMD = "pdflatex ";
my $SUM_CMD = "/usr/bin/sum";

if (@ARGV != 2) {
    print "usage: perl watch.pl [file-to-watch] [check-delay-secs]\n";
    exit;
}

my ($filename, $delay, $format) = @ARGV;
my %tex_docs = ();

# Generate the output right off the bat.
system("$MAKE_PDF_CMD $filename");
system("echo \"Word count:\"; detex $filename | wc -w");

$tex_docs{$filename} = getChecksum($filename);

for(;;) {
    foreach my $key (keys %tex_docs) {
	my $lastChecksum = $tex_docs{$key};
	
	my $checksum = getChecksum($key);
	if ($checksum != $lastChecksum) {
	    system("$MAKE_PDF_CMD $filename");
	    system("echo \"Word count:\"; detex $filename | wc -w");
	}
	
	$tex_docs{$key} = $checksum;
    }
    sleep($delay);
}

sub getChecksum {
    my ($file) = @_;

    open(FILE, "$SUM_CMD $file |");
    while(<FILE>) {
	my $line = $_;
	my @chunk = split(/\s+/, $line);
	my $checksum = $chunk[0];
	return $checksum;
    }
}
