summaryrefslogtreecommitdiff
path: root/ipl/progs/psrsplit.icn
diff options
context:
space:
mode:
Diffstat (limited to 'ipl/progs/psrsplit.icn')
-rw-r--r--ipl/progs/psrsplit.icn64
1 files changed, 64 insertions, 0 deletions
diff --git a/ipl/progs/psrsplit.icn b/ipl/progs/psrsplit.icn
new file mode 100644
index 0000000..c0da16d
--- /dev/null
+++ b/ipl/progs/psrsplit.icn
@@ -0,0 +1,64 @@
+############################################################################
+#
+# 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