#!/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;