home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.cs.arizona.edu
/
ftp.cs.arizona.edu.tar
/
ftp.cs.arizona.edu
/
icon
/
historic
/
v941.tgz
/
icon.v941src.tar
/
icon.v941src
/
ipl
/
progs
/
psrsplit.icn
< prev
next >
Wrap
Text File
|
2000-07-29
|
2KB
|
65 lines
############################################################################
#
# File: psrsplit.icn
#
# Subject: Program to separate psrecord.icn output pages
#
# Author: Gregg M. Townsend
#
# Date: September 21, 1999
#
############################################################################
#
# This file is in the public domain.
#
############################################################################
#
# usage: psrsplit file
#
# If a file produced by the procedures in psrecord.icn contains multiple
# pages, it cannot be easily incorporated into another document. psrsplit
# reads such a file and breaks it into individual pages. The algorithm
# is frugal of memory and file descriptors at the expense of reading the
# input file multiple times.
#
# For an input file is named xxxx or xxxx.yyy, the output files are
# named xxxx.p01, xxxx.p02, etc. for as many pages as are available.
# It is assumed that the input file was written by psrecord.icn; the
# likelihood of correctly processing anything else is small.
#
############################################################################
procedure main(args)
local ifile, ofile, iname, basename, oname, pageno, line, n
iname := args[1] | stop("usage: ", &progname, " file")
ifile := open(iname) | stop("can't open ", iname)
basename := (iname ? tab(upto('.') | 0))
every pageno := seq() do { # read file once for each page
if pageno < 10 then
oname := basename || ".p0" || pageno
else
oname := basename || ".p" || pageno
ofile := open(oname, "w") | stop("can't open ", oname)
seek(ifile, 1) | stop("can't rewind ", iname)
line := read(ifile) | stop(iname, ": empty file")
line ? ="%!" | stop(iname, ": not a PostScript file")
write(&errout, " writing ", oname)
write(ofile, "%!PS-Adobe-3.0 EPSF-3.0")
n := 0
while n < pageno do { # copy to nth "copypage"
line := read(ifile) | break break
if line ? ="copypage" then
n +:= 1
else
write(ofile, line)
}
write(ofile, "showpage")
write(ofile, "%%EOF")
close(ofile)
}
end