File: //usr/local/ssl/local/ssl/bin/psmerge
#!/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;