#!/usr/local/bin/perl

use POSIX;

$ver = "0.3";

$indexprefix = "index";
$thumbdir = "thumb";
$numrow = 5;
$numcol = 5;
$height = 100;
$title = "Thumb v$ver Contact Sheet";

$tableopt = "width=\"100\%\"";
$bodyopt = "bgcolor=\"\#ffffff\"";

open(HTML, ">$indexprefix.html");

if (!(-e $thumbdir) || !(-d $thumbdir)) {
	print "making $thumbdir directory...\n";
	`mkdir thumb`;
}

$total = $#ARGV+1;
$current = 1;
$page = 1;
$row = 1;
$num = 1;
$totalpages = ceil($total / ($numrow * $numcol));

sub top {
	print HTML "<html><head><title>$title - page $page</title></head>\n";
	if($bodyopt ne ""){
		print HTML "<body $bodyopt>\n"
	} else {
		print HTML "<body>\n";
	}
}

sub tableopen {
	if($tableopt ne ""){
		print HTML "<table $tableopt>\n";
	} else {
		print HTML "<table>\n";
	}
}

sub tableclose {
	print HTML "</table>\n";
}

sub rowstart {
	print HTML "<tr>";
}

sub rowend {
	print HTML "</tr>";
}

&top;
&tableopen;
&rowstart;

foreach $i (sort(@ARGV)) {
	$info = "";
	$i =~ /(.*)\.(.*)/;
	$format = $2;
	$base = $1;


	if(($format eq "jpg") || ($format eq "jpeg") || ($format eq "JPG")) {
		$dprog = 'djpeg';
	} else {
		$dprog = 'anytopnm';
	}

	open(INFO, "$dprog $i | pnmfile 2>/dev/null |");
	$info = <INFO>;
	close(INFO);
	$info =~ /(\d*) by (\d*)/;
	$w = $1; $h = $2;

	($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
		$blksize,$blocks) = stat($i);

	$kb = int($size / 1024);

	print "($current/$total)\t$base.$format\t($w"."x"."$h)\n";

	if(!(-e "$thumbdir/$base.gif")) { 
		`$dprog $i | pnmscale -xysize $height $height | ppmquant 256 2>/dev/null | ppmtogif > $thumbdir/$base.gif 2>/dev/null`;
	}

	print HTML "<td align=center><a href=\"$base.$format\"><img border=0 src=\"thumb/$base.gif\"><br>$base.$format ($w"."x"."$h/$kb"."kb)</td>\n";
	$num++; $current++;

	if($num > $numcol) {
		&rowend;
		&rowstart;
		$num = 1;
		$row++;
		print "[ ]\tmoving to row $row\n" unless $row > $numrow;
	}

	if($row > $numrow) {
		&tableclose;
		&end;
		close(HTML);
		$page++;
		open(HTML, ">$indexprefix-$page.html");
		&top;
		&tableopen;
		&rowstart;
		$row = 1;
		print "[ ]\tmoving to page $page\n";
	}	


}

print HTML "</tr></table>\n";
&end;

sub end {
print HTML <<EOF;
<p>
<hr>
EOF

&pageindex;

print HTML <<EOF;
<hr>
<i>
index generated by <a href="http://www.spilk.org/thumb/">thumb</a> v$ver
</body>
</html>
EOF
}


sub pageindex {
	print HTML "<h5>";
	if($page == 1) {
		print HTML "[prev]";
	} elsif ($page == 2) {
		print HTML "<a href=\"$indexprefix.html\">[prev]</a>";
	} else {
		print HTML "<a href=\"$indexprefix-".($page-1).".html\">[prev]</a>";
	}
	
	for($i=1;$i<=$totalpages;$i++) {
		if($i == 1) {
			if($page == $i) {
				print HTML "[$i]";
			} else {
				print HTML "<a href=\"$indexprefix.html\">[$i]</a>";
			}
		} elsif ($i == $page) {
			print HTML "[$i]";
		} else {
			print HTML "<a href=\"$indexprefix-$i.html\">[$i]</a>";
		}
	}

	if($page == $totalpages) {
		print HTML "[next]";
	} else {
		print HTML "<a href=\"$indexprefix-".($page+1).".html\">[next]</a>";
	}
	print HTML "</h5>\n";
}
