xref: /dflybsd-src/share/examples/printing/hpdf (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
186d7f5d3SJohn Marino#!/bin/sh
286d7f5d3SJohn Marino#
386d7f5d3SJohn Marino#  hpdf - Print DVI data on HP/PCL printer
486d7f5d3SJohn Marino#  Installed in /usr/local/libexec/hpdf
586d7f5d3SJohn Marino
686d7f5d3SJohn MarinoPATH=/usr/local/bin:$PATH; export PATH
786d7f5d3SJohn Marino
886d7f5d3SJohn Marino#
986d7f5d3SJohn Marino#  Define a function to clean up our temporary files.  These exist
1086d7f5d3SJohn Marino#  in the current directory, which will be the spooling directory
1186d7f5d3SJohn Marino#  for the printer.
1286d7f5d3SJohn Marino#
1386d7f5d3SJohn Marinocleanup() {
1486d7f5d3SJohn Marino   rm -f hpdf$$.dvi
1586d7f5d3SJohn Marino}
1686d7f5d3SJohn Marino
1786d7f5d3SJohn Marino#
1886d7f5d3SJohn Marino#  Define a function to handle fatal errors: print the given message
1986d7f5d3SJohn Marino#  and exit 2.  Exiting with 2 tells LPD to do not try to reprint the
2086d7f5d3SJohn Marino#  job.
2186d7f5d3SJohn Marino#
2286d7f5d3SJohn Marinofatal() {
2386d7f5d3SJohn Marino    echo "$@" 1>&2
2486d7f5d3SJohn Marino    cleanup
2586d7f5d3SJohn Marino    exit 2
2686d7f5d3SJohn Marino}
2786d7f5d3SJohn Marino
2886d7f5d3SJohn Marino#
2986d7f5d3SJohn Marino#  If user removes the job, LPD will send SIGINT, so trap SIGINT
3086d7f5d3SJohn Marino#  (and a few other signals) to clean up after ourselves.
3186d7f5d3SJohn Marino#
3286d7f5d3SJohn Marinotrap cleanup 1 2 15
3386d7f5d3SJohn Marino
3486d7f5d3SJohn Marino#
3586d7f5d3SJohn Marino#  Make sure we are not colliding with any existing files.
3686d7f5d3SJohn Marino#
3786d7f5d3SJohn Marinocleanup
3886d7f5d3SJohn Marino
3986d7f5d3SJohn Marino#
4086d7f5d3SJohn Marino#  Link the DVI input file to standard input (the file to print).
4186d7f5d3SJohn Marino#
4286d7f5d3SJohn Marinoln -s /dev/fd/0 hpdf$$.dvi || fatal "Cannot symlink /dev/fd/0"
4386d7f5d3SJohn Marino
4486d7f5d3SJohn Marino#
4586d7f5d3SJohn Marino#  Make LF = CR+LF
4686d7f5d3SJohn Marino#
4786d7f5d3SJohn Marinoprintf "\033&k2G" || fatal "Cannot initialize printer"
4886d7f5d3SJohn Marino
4986d7f5d3SJohn Marino#
5086d7f5d3SJohn Marino#  Convert and print.  Return value from dvilj2p does not seem to be
5186d7f5d3SJohn Marino#  reliable, so we ignore it.
5286d7f5d3SJohn Marino#
5386d7f5d3SJohn Marinodvilj2p -M1 -q -e- dfhp$$.dvi
5486d7f5d3SJohn Marino
5586d7f5d3SJohn Marino#
5686d7f5d3SJohn Marino#  Clean up and exit
5786d7f5d3SJohn Marino#
5886d7f5d3SJohn Marinocleanup
5986d7f5d3SJohn Marinoexit 0
60