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