#!/usr/bin/perl
eval 'exec perl -S $0 "$@"'
	if (1 == 0);

# psmerge: merge PostScript files produced by same application and setup
# usage: psmerge [-oout.ps] file1.ps file2.ps ...
#
# Copyright (C) Angus J. C. Duggan 1991-1995
# See file LICENSE for details.
# 
# Unbroken (or, broken in a different way that at least sometimes
# works) by Peter Williams 2003 <peter@newton.cx>


$prog = $0;
$prog =~ s=.*/==;

while ($ARGV[0] =~ /^-/) {
   $_ = shift;
   if (/^-o(.+)/) {
      if (!close(STDOUT) || !open(STDOUT, ">$1")) {
	 print STDERR "$prog: can't open $1 for output\n";
	 exit 1;
      }
   } else {
      print STDERR "Usage: $prog [-oout] file1 file2...\n";
      exit 1;
   }
}

$page = 0;
$first = 1;
$seenpages = 0;
$nesting = 0;

@trailer = ();
$trailermode = 0;

while (<>) {
    if ($seenpages == 0) {
	if (/^%%Page:/) {
	    if ($nesting == 0) {
		$seenpages = 1;
		$page++;
		print "%%Page: ($page) $page\n";
	    } else {
		print $_;
	    }
	} elsif ($first) {
	    if (/^%%Pages: /) {
		print "%%Pages: (atend)\n";
	    } else {
		print $_;
	    }
	}
    } elsif ($trailermode) {
	if (/^%!/ || /%%EOF/) {
	    $seenpages = 0;
	    $first = 0;
	    $trailermode = 0;
	} elsif ($first) {
	    push (@trailer, $_)
		unless (/^%%Pages/);
	}
    } else {
	if (/^%%Page:/) {
	    if ($nesting == 0) {
		$seenpages = 1;
		$page++;
		print "%%Page: ($page) $page\n";
	    } else {
		print $_;
	    }
	} elsif (/^%%Trailer/ && $nesting == 0) {
	    $trailermode = 1;
	} elsif (/^%%BeginDocument/ || /^%%BeginBinary/ || /^%%BeginFile/) {
	    push(@body, $_);
	    $nesting++;
	    print $_;
	} elsif (/^%%EndDocument/ || /^%%EndBinary/ || /^%%EndFile/) {
	    push(@body, $_);
	    $nesting--;
	    print $_;
	} else {
	    print $_;
	}
    }
}

print "%%Trailer\n";
print @trailer;
print "%%Pages: $page\n";
print "%%EOF\n";

exit 0;

