Viewing file: psmerge (1.8 KB) -rwxr-xr-x Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#!/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;
|