#!/usr/bin/perl -w
use strict;
my $dir;
my $pre="";
my $page="";
my $opts="";
my $format="pngmono";
$format="png16m" if(@ARGV and $ARGV[0] eq "-c" and shift @ARGV);
my $delim="/";
$delim="",shift @ARGV if(@ARGV and $ARGV[0] eq "-d");
my $nopng=0;
$nopng=shift @ARGV if(@ARGV and $ARGV[0] eq "-p");
$opts.=" -r".shift(@ARGV) if(@ARGV>1 and $ARGV[0] eq "-r" and $ARGV[1] =~ /^[1-9][0-9]*$/s and shift @ARGV);
my @thumbs=('yes');
@thumbs=() if(@ARGV and $ARGV[0] eq "-t" and shift @ARGV);
my $pagelen=0;
die "usage: $0 [-cdpt] [-r <dpi>] <file.ps>\n" if($#ARGV);
if($ARGV[0] =~ /([^\/]+)\.ps$/s) {
   $dir=$1;
   open(INPUT,"<",$ARGV[0]) or die "open: $!";
} elsif($ARGV[0] =~ /([^\/]+)\.pdf$/s) {
   $dir=$1;
   my $filename=$ARGV[0];
   $filename =~ s/'/'"'"'/gs;
   open(INPUT,"pdftops '$filename' -|") or die "open: $!";
} else {
   die $ARGV[0];
}
$dir =~ s/ /_/g;
mkdir($dir,0777) or die "mkdir: $!" if($delim);
unless($nopng) {
   open(HTML,">$dir".($delim?"${delim}index":"").".html") or die "open: $!";
   print HTML "<HTML><HEAD><TITLE>Pages from $dir</TITLE></HEAD><BODY>\n";
   print HTML "<OL>\n" unless(@thumbs);
   if($delim) {
      open(INLINE,">$dir${delim}inline.html") or die "open: $!";
      print INLINE "<HTML><HEAD><TITLE>Pages from $dir (inline)</TITLE></HEAD><BODY>\n";
   }
}
while(defined(my $line=<INPUT>)) {
   if($line =~ /^%%Page: (.*) (\d+)\r?\n?$/s) {
      $page=$2;
      $page=sprintf "%0${pagelen}u",$page if($pagelen);
      if($nopng) {
         open(OUTPUT,">$dir$delim$page.ps") or die "open: $!";
      } else {
         if(@thumbs) {
            print HTML "<A HREF=\"".($delim?"":$dir)."$page.png\"><IMG SRC=\"".($delim?"":$dir)."${page}t.png\"></A>\n";
         } else {
            print HTML "<LI><A HREF=\"".($delim?"":$dir)."$page.png\">$1</A>\n";
         }
         print INLINE "<IMG SRC=\"$page.png\">\n" if($delim);
         open(OUTPUT,"|gs$opts -sDEVICE=$format -sOutputFile='$dir$delim$page.png' -q - >/dev/null 2>&1") or die "open: $!";
         push @thumbs,$page if(@thumbs);
      }
      print OUTPUT $pre;
      print OUTPUT $line;
   } elsif(length $page) {
      print OUTPUT $line;
   } else {
      $pre.=$line;
      $pagelen=length($1) if($line =~ /^%%Pages: (\d+)$/);
   }
}
close(OUTPUT) if(length $page);
close(INPUT);
unless($nopng) {
   print INLINE "</BODY></HTML>";
   close(INLINE);
   print HTML "</OL>\n" unless(@thumbs);
   print HTML "</BODY></HTML>";
   close(HTML);
   shift @thumbs;
   while(@thumbs) {
      system("convert -sample 100x100 $dir$delim$thumbs[0].png $dir$delim$thumbs[0]t.png") and die "system: $!";
      shift @thumbs;
   }
}
0;
