psf
is an
lpd
filter for PostScript printing.
psf
interprets the name it was called with to determine what filters to
invoke. First, if the string ``pap'' appears anywhere in the name,
psf
invokes
pap
to talk to a printer via AppleTalk. Next, if the string ``rev'' appears,
psf
invokes
psorder
to reverse the pages of the job. Finally, if
psf
was called with a filter's name as the leading string, it invokes that
filter. If there is no filter to run,
psf
examines the magic number of the input, and if the input is not
PostScript, converts it to PostScript.
KLUDGE
In the default configuration,
psf
supports two kludges. The first causes
psf
to check its name for the letter `m'. If this letter is found and accounting
is turned on,
psf
calls
pap
twice, once to get an initial page count and to print the job, and
another time to get a final page count. This is a work-around for bugs
in a variety of PAP implementions that cause printers to never properly
close the PAP output file. A notable example is any printer by
Hewlett-Packard.
The second kludge causes
psf
to examine its name for the letter `w'. If this letter is found and
accounting is turned on,
psf
calls
pap
with the
-w
flag. This flag causes
pap
to wait until the printer's status contains the string `idle'. Once
this string is found, the job is printed as normal. This kludge is a
work-around for printers, notably Hewlett-Packard's LaserJet IV, which
will report a page count while a previous jobs is still printing.
EXAMPLE
The sample
printcap
entry below invokes
psf
to print text files, PostScript files,
troff's
C/A/T output, and
TeX's
DVI output, to an AppleTalk connected LaserWriter Plus. Since the
LaserWriter Plus stacks pages in descending order, we reverse the pages
and print the burst page last.
laser|lp|LaserWriter Plus on AppleTalk:\
:sd=/usr/spool/lpd/laser:\
:lp=/usr/spool/lpd/laser/null:\
:lf=/var/adm/lpd-errs:pw#80:hl:\
:of=/usr/lib/filters/ofpap:\
:if=/usr/lib/filters/ifpaprev:\
:tf=/usr/lib/filters/tfpaprev:\
:df=/usr/lib/filters/dfpaprev:
Note that if the host in question spools to more than one AppleTalk
printer,
/dev/null
should not be used for the
lp
capability. Instead, a null device should be created with
mknod
for each printer, as has been done above.
Finally, there is a file in the spool directory,
/var/spool/lpd/laser,
called
.paprc,
which
pap
reads for the AppleTalk name of the printer.