tsol_standard_foomatic revision f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
11e9368a226272085c337e9e74b79808c16fbdbaTinderbox User# CDDL HEADER START
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# The contents of this file are subject to the terms of the
4a14ce5ba00ab7bc55c99ffdcf59c7a4ab902721Automatic Updater# Common Development and Distribution License (the "License").
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# You may not use this file except in compliance with the License.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# or http://www.opensolaris.org/os/licensing.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# See the License for the specific language governing permissions
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# and limitations under the License.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# When distributing Covered Code, include this CDDL HEADER in each
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# If applicable, add the following below this CDDL HEADER, with the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# fields enclosed by brackets "[]" replaced with your own identifying
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# information: Portions Copyright [yyyy] [name of copyright owner]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# CDDL HEADER END
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User#
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt#ident "%Z%%M% %I% %E% SMI"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Use is subject to license terms.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein###########
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein##
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein## Standard printer interface program.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein##
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein###########
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#####
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Until we get to the point below where the printer port
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# and physical printer are initialized, we can't do much
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# except exit if the Spooler/Scheduler cancels us.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#####
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeintrap 'exit' 15
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User#####
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# We can be clever about getting a hangup or interrupt, though, at least
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# until the filter runs. Do this early, even though $LPTELL
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# isn't defined, so that we're covered.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt#####
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntcatch_hangup () {
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt if [ -n "${LPTELL}" ]
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt then
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User echo \
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User"The connection to the printer dropped; perhaps the printer went off-line?" \
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt | ${LPTELL} ${printer}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User return 0
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User}
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox Usercatch_interrupt () {
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User if [ -n "${LPTELL}" ]
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo \
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User"Received an interrupt from the printer. The reason is unknown,
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Useralthough a common cause is that the baud rate is too high." \
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt | ${LPTELL} ${printer}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User return 0
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User}
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Usertrap 'catch_hangup; exit_code=129 exit 129' 1
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updatertrap 'catch_interrupt; exit_code=129 exit 129' 2 3
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater#####
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User#
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# Most of the time we don't want the standard error to be captured
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# by the Spooler, mainly to avoid "Terminated" messages that the
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# shell puts out when we get a SIGTERM. We'll save the standard
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# error channel under another number, so we can use it when it
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# should be captured.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User#
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# Open another channel to the printer port, for use when the
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# regular standard output won't be directed there, such as in
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# command substitution (`cmd`).
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User#####
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userexec 5>&2 2>/dev/null 3>&1
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater#####
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt#
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater# Set some globally used variables and functions.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User#####
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User: ${TMPDIR:=/tmp}
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt: ${SPOOLDIR:=/usr/spool/lp}
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User: ${TERMINFO:=/usr/lib/terminfo}
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User: ${CHARSETDIR:=/usr/lib/charsets}
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User: ${LOCALPATH:=${SPOOLDIR}/bin}
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox UserPATH="/bin:/usr/bin:${LOCALPATH}"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox UserMAX_COLS_SMALL_BANNER=40
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater#####
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt#
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater# On the 3.2 release of the 386unix product, the parallel port does
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# not support any ioctl calls. As a result, we cannot set the opost
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# and onlcr attributes to have <NL>'s expanded to <CR><NL>. This
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User# "filter" gets the job done for us.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt#####
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User: ${FIX386BD:=${LOCALPATH}/386parallel}
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userif [ -n "${FIX386BD}" -a -x "${FIX386BD}" ]
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userthen
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User FIX386BD="| ${FIX386BD}"
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox Userelse
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User FIX386BD=""
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox Userfi
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User#####
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User# Use ${TMPPREFIX} as the prefix for all temporary files, so
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User# that cleanup is easy. The prefix may be up to 13 characters
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User# long, so you only have space for one more character to make
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User# a file name. If necessary, make a directory using this prefix
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User# for better management of unique temporary file names.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#####
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinTMPPREFIX=${TMPDIR}/`uname -n`$$
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User#####
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Before exiting, set ${exit_code} to the value with which to exit.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Otherwise, the exit from this script will be 0.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User#####
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrewstrap 'rm -fr ${TMPPREFIX}*; exit ${exit_code}' 0
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt#####
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# ${LPTELL} is the name of a program that will send its
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# standard input to the Spooler. It is used to forward
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# the description of a printer fault to the Spooler,
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# which uses it in an alert to the administrator.
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews#####
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntif [ ! -x "${LPTELL:=${LOCALPATH}/lp.tell}" ]
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntthen
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt fake_lptell () {
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt header="no"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein while read line
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein do
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User if [ "no" = "${header}" ]
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews then
dec590a3deb8e87380a8bd3a77d535dba3729bf6Tinderbox User errmsg ERROR ${E_IP_UNKNOWN} \
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt "unknown printer/interface failure" \
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt "consult your system administrator;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt reasons for failure (if any) follow:"
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt header=yes
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews fi
dec590a3deb8e87380a8bd3a77d535dba3729bf6Tinderbox User echo "${line}" >&2
dec590a3deb8e87380a8bd3a77d535dba3729bf6Tinderbox User done
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User return 1
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein LPTELL=fake_lptell
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinfi
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#####
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# ${DRAIN} is the name of a program that will wait
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# long enough for data sent to the printer to print.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#####
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinif [ -x "${LOCALPATH}/drain.output" ]
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userthen
acb72d5e2c83b597332e3eb0c7d59e1142f1adfdMark Andrews DRAIN="${LOCALPATH}/drain.output 5" # wait only five seconds
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntelse
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt DRAIN=
852ccdd42a71550c974111b49415204ffeca6573Automatic Updaterfi
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt#####
3cddb2c552ee6582e8db0849c28747f6b6ca57feAutomatic Updater# ${LPTSOLSEPARATOR} is the name of a program to put banner and trailer
3cddb2c552ee6582e8db0849c28747f6b6ca57feAutomatic Updater# pages around the job.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt#####
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntif [ -x ${LOCALPATH}/lp.tsol_separator ]
852ccdd42a71550c974111b49415204ffeca6573Automatic Updaterthen
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User LPTSOLSEPARATOR=${LOCALPATH}/lp.tsol_separator
66f25f2ceeb589e67efe7af2413baaa3426b0042Automatic Updaterelse
66f25f2ceeb589e67efe7af2413baaa3426b0042Automatic Updater echo "${LOCALPATH}/lp.tsol_separator not found." >&2
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt exit 1
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntfi
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
66f25f2ceeb589e67efe7af2413baaa3426b0042Automatic Updater#####
66f25f2ceeb589e67efe7af2413baaa3426b0042Automatic Updater# ${LPCAT} is the name of a program to use as a default
66f25f2ceeb589e67efe7af2413baaa3426b0042Automatic Updater# filter. Minimally it should copy its standard input to
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# the standard output, but it should also trap printer
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# faults. The current LPCAT traps hangups (DCD dropping, SIGHUP),
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater# interrupts (SIGINT, SIGQUIT), broken pipe (SIGPIPE), and
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater# excess delays in sending data to the printer, interpreting all
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater# as printer faults.
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater#####
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updaterif [ ! -x "${LPCAT:=${LOCALPATH}/lp.cat}" ]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinthen
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User LPCAT="cat"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinfi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User#####
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# ${LPSET} is the name of a program that will set the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# character pitch, line pitch, page width, page length,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# and character set. It helps to have this in a single
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# binary program so that (1) it's faster than calls
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# to "tput"; and (2) it can access the new Terminfo
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# capabilities for printers (on pre SVR3.2 machines, tput can't).
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#####
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinif [ ! -x "${LPSET:=${LOCALPATH}/lp.set}" ]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinthen
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User fake_lpset () {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo H V W L S >&2
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein false
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein LPSET=fake_lpset
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinfi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
3a5fe5abf08f16b8d31ab8ee9a788063110ef000Automatic Updaterinternal_lpset () {
3a5fe5abf08f16b8d31ab8ee9a788063110ef000Automatic Updater #####
3a5fe5abf08f16b8d31ab8ee9a788063110ef000Automatic Updater #
3a5fe5abf08f16b8d31ab8ee9a788063110ef000Automatic Updater # The funny business with the "2>&1 1>&3" is to let us capture
3a5fe5abf08f16b8d31ab8ee9a788063110ef000Automatic Updater # the standard ERROR, not the standard OUTPUT as is the usual case
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # with foo=`cmd`. The standard output will go to the printer.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User #####
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein [ -n "${stty1}" ] && stty ${stty1} 0<&1
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein chk=`${LPSET} "$1" "$2" "$3" "$4" "$5" 2>&1 1>&3`
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein [ -n "${stty2}" ] && stty ${stty2} 0<&1
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein #####
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User #
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # The standard error of the delivered ${LPSET} program
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # is a string of letters, H, V, W, L, S, which correspond
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # to cpi, lpi, width, length, and character set. A letter
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # is present only if the corresponding attribute could not
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User # be set.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein #####
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein for err in ${chk}
b05bdb520d83f7ecaad708fe305268c3420be01dMark Andrews do
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein case ${err} in
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt H )
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein errmsg WARNING ${E_IP_BADCPI} \
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User "can't select the character pitch \"${cpi}\"" \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "check the valid pitches for the printer,
794b79e6bbc3f5db1ea6ae154d739b9f1ef1a375Tinderbox User or consult your system administrator;
794b79e6bbc3f5db1ea6ae154d739b9f1ef1a375Tinderbox User printing continues"
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt ;;
794b79e6bbc3f5db1ea6ae154d739b9f1ef1a375Tinderbox User V )
794b79e6bbc3f5db1ea6ae154d739b9f1ef1a375Tinderbox User errmsg WARNING ${E_IP_BADLPI} \
794b79e6bbc3f5db1ea6ae154d739b9f1ef1a375Tinderbox User "can't select the line pitch \"${lpi}\"" \
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt "check the valid pitches for the printer,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein or consult your system administrator;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein printing continues"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User ;;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt W )
794b79e6bbc3f5db1ea6ae154d739b9f1ef1a375Tinderbox User width=${cols}
794b79e6bbc3f5db1ea6ae154d739b9f1ef1a375Tinderbox User errmsg WARNING ${E_IP_BADWIDTH} \
794b79e6bbc3f5db1ea6ae154d739b9f1ef1a375Tinderbox User "can't select the page width \"${width}\"" \
794b79e6bbc3f5db1ea6ae154d739b9f1ef1a375Tinderbox User "check the valid widths for the printer,
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt or consult your system administrator;
794b79e6bbc3f5db1ea6ae154d739b9f1ef1a375Tinderbox User printing continues"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User ;;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User L )
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User length=${lines}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein errmsg WARNING ${E_IP_BADLENGTH} \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "can't select the page length \"${length}\"" \
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User "check the valid lengths for the printer,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein or consult your system administrator;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein printing continues"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ;;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt S )
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein errmsg WARNING ${E_IP_BADCHARSET} \
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User "can't select the character set \"${CHARSET}\"" \
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews "check the name given in the -S option,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein or consult your system administrator;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein printing continues"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ;;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein esac
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein done
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#####
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# ${TPUT} is "tput" IF it works. We'll disable it if we get an
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews# ugly error message the first time we use it. See the TERM variable
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# later in the script.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# NOTE: The check we use to see if "tput" works is to use an OLD
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# Terminfo capability, like "lines". If it works with that it may
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# still fail with some of the newer capabilities like "init" (SVR3.0)
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# or "swidm" (SVR3.2), because the version of "tput" we have on your
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# machine is older. Thus, on some of the code where ${TPUT} is used
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# you'll see "2>/dev/null" being used to avoid ugly error messages.
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User#####
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox UserTPUT=tput
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews#####
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews# Error message formatter:
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Invoke as
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# errmsg severity message-number problem help
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# where severity is "ERROR" or "WARNING", message-number is
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# a unique identifier, problem is a short description of the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# problem, and help is a short suggestion for fixing the problem.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#####
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark AndrewsLP_ERR_LABEL="UX:lp"
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark AndrewsE_IP_ARGS=1
a1b05dea35aa30b152a47115e18bbe679d3fcf19Mark AndrewsE_IP_OPTS=2
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews#E_IP_FILTER=3
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinE_IP_STTY=4
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox UserE_IP_UNKNOWN=5
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinE_IP_BADFILE=6
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinE_IP_BADCHARSET=7
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinE_IP_BADCPI=8
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinE_IP_BADLPI=9
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinE_IP_BADWIDTH=10
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinE_IP_BADLENGTH=11
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox UserE_IP_ERRORS=12 # (in slow.filter)
bea931e17b7567f09107f93ab7e25c7f00abeb9cMark Andrews
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Usererrmsg () {
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User case $1 in
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User ERROR )
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User sev=" ERROR";
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User ;;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User WARNING )
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User sev="WARNING";
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User ;;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User esac
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# tag=`expr "${LP_ERR_LABEL}" : "\(.*\):"``expr "${LP_ERR_LABEL}" : ".*:\(.*\)"`
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User echo "${LP_ERR_LABEL}: ${sev}: $3
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User TO FIX: $4" >&5
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User}
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User###########
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User##
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User## Check arguments
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User###########
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Userparse () {
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User echo "`expr \"$1\" : \"^[^=]*=\(.*\)\"`"
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User}
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User#####
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User#
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User# This program is invoked as
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User#
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User# ${SPOOLDIR}/.../printer request-id user title copies options files...
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User#
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User# The first three arguments are simply reprinted on the banner page,
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User# the fourth (copies) is used to control the number of copies to print,
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User# the fifth (options) is a blank separated list (in a single argument)
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# of user or Spooler supplied options (without the -o prefix),
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User# and the last arguments are the files to print.
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User#####
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Userif [ $# -lt 5 ]
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Userthen
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User errmsg ERROR ${E_IP_ARGS} \
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User "wrong number of arguments to interface program" \
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User "consult your system administrator"
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User exit 1
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Userfi
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Userprinter=`basename $0`
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userrequest_id=$1
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Useruser_name=$2
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Usertitle=$3
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Usercopies=$4
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Useroption_list=$5
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Usershift 5
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Userfiles="$*"
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Usernobanner="no"
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Usernofilebreak="no"
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Usernolabels="no"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userstty=
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Userinlist=
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Userfor i in ${option_list}
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Userdo
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User case "${inlist}${i}" in
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User nobanner )
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User nobanner="yes"
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User ;;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User nofilebreak )
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User nofilebreak="yes"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User ;;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User nolabels )
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User nolabels="yes"
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User ;;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User #
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User # The IPP/PAPI attributes are handled by the foomatic-rip filter so
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User # all we need to do here is ignore them so that they don't invoke the
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User # "unrecognized option" message.
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User #
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt finishing=* | page-ranges=* | sides=* )
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User ;;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User number-up=* | orientation-requested=* | media=* )
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User ;;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User printer-resolution=* | print-quality=* )
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt ;;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User #####
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User #
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User # If you want to add simple options (e.g. -o simple)
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User # identify them here.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein #####
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# simple )
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User# simple="yes"
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User# ;;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User cpi=pica )
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User cpi=10
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User ;;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User cpi=elite )
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt cpi=12
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User ;;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User cpi=* )
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User cpi=`parse ${i}`
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ;;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User lpi=* )
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User lpi=`parse ${i}`
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User ;;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User length=* )
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User length=`parse ${i}`
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User ;;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein width=* )
c71787bd6356c92e9c7d0a174cd63ab17fcf34c6Eric Luce width=`parse ${i}`
c71787bd6356c92e9c7d0a174cd63ab17fcf34c6Eric Luce ;;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
c71787bd6356c92e9c7d0a174cd63ab17fcf34c6Eric Luce #####
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce #
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce # If you want to add simple-value options (e.g. -o value=a)
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce # identify them here.
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce #####
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater# value=* )
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater# value=`parse ${i}`
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews# ;;
c71787bd6356c92e9c7d0a174cd63ab17fcf34c6Eric Luce
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater #####
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater #
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater # If you want to add options that, like "stty",
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater # take a list (e.g. -o lopt='a b c'), identify
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater # them here and below (look for LOPT).
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce #####
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce stty=* | flist=* | lpd=* )
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce#LOPT stty=* | flist=* | lpd=* | lopt=* )
c71787bd6356c92e9c7d0a174cd63ab17fcf34c6Eric Luce
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater inlist=`expr "${inlist}${i}" : "^\([^=]*=\)"`
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater case "${i}" in
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce ${inlist}\'*\' )
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce item=`expr "${i}" : "^[^=]*='*\(.*\)'\$"`
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater ;;
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater ${inlist}\' )
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce continue
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce ;;
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce ${inlist}\'* )
c71787bd6356c92e9c7d0a174cd63ab17fcf34c6Eric Luce item=`expr "${i}" : "^[^=]*='*\(.*\)\$"`
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater ;;
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater ${inlist}* )
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce item=`expr "${i}" : "^[^=]*=\(.*\)\$"`
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce ;;
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce *\' )
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce item=`expr "${i}" : "^\(.*\)'\$"`
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce ;;
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce * )
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce item="${i}"
c71787bd6356c92e9c7d0a174cd63ab17fcf34c6Eric Luce ;;
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce esac
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce #####
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce #
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce # We don't dare use "eval" because a clever user could
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce # put something in an option value that we'd end up
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce # exec'ing.
c71787bd6356c92e9c7d0a174cd63ab17fcf34c6Eric Luce #####
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce case "${inlist}" in
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce stty= )
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce stty="${stty} ${item}"
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce ;;
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce flist= )
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce flist="${flist} ${item}"
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce ;;
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce lpd= )
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein lpd="${lpd} ${item}"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User ;;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User#LOPT lopt= )
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User#LOPT lopt="${lopt} ${item}"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#LOPT ;;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein esac
c71787bd6356c92e9c7d0a174cd63ab17fcf34c6Eric Luce
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce case "${i}" in
c71787bd6356c92e9c7d0a174cd63ab17fcf34c6Eric Luce ${inlist}\'*\' )
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce inlist=
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce ;;
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce ${inlist}\'* )
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater ;;
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater *\' | ${inlist}* )
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater inlist=
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater ;;
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater esac
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater ;;
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater * )
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce errmsg WARNING ${E_IP_OPTS} \
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce "unrecognized \"-o ${i}\" option" \
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce "check the option, resubmit if necessary
c71787bd6356c92e9c7d0a174cd63ab17fcf34c6Eric Luce printing continues"
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater ;;
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater esac
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Lucedone
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce#####
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce#
c71787bd6356c92e9c7d0a174cd63ab17fcf34c6Eric Luce# Additional ``parameters'' are passed via Shell environment
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce# variables:
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce#
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce# TERM The printer type (used for Terminfo access)
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce# CHARSET The character set to choose
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce# FILTER The filter to run
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce#####
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User#####
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User# Set defaults for unset variables.
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User#####
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein: ${TERM:=unknown}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeintput lines 1>/dev/null 2>&1 || TPUT=:
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce: ${CHARSET:=cs0}
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinPPDFILTER=/usr/lib/lp/bin/foomatic-rip
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox UserPPDFILTERA="${PPDFILTER} ${request_id} ${user_name} \"${title}\" ${copies} \"${option_list}\""
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userif [ -z "${FILTER}" ]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinthen
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein #####
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User #
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # If no filter is being used, we have a little routine that
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # will push the data to the printer. It traps hangups (loss
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # of carrier) and checks for excessive delays in sending the
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # data to the printer. The lesser of the print rate of the printer
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # (obtained from Terminfo) or the baud rate is used to compute
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # the expected delay. If neither of these is correct, you
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # may be experiencing false alarms. If so, give the correct
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # rate, in characters per second, as a single argument.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # An argument of 0 means don't check for delays.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # Give an -r option to get a printout of actual delays.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User # (QUOTES ARE IMPORTANT!)
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User #####
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User case "$TERM" in
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User PS )
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # make the "postscript" printers use postio to
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User # talk to the printer and periodically get a
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # status from them
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User FILTER="/usr/lib/lp/postscript/postio"
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User ;;
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User PSR )
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # make the "reverse postscript" printers reverse the
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # output and the use postio to talk to the printer
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User FILTER="/usr/lib/lp/postscript/postreverse | \
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User /usr/lib/lp/postscript/postio"
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User ;;
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User * )
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # we don't know the type, so just assume that the
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # input and output are the same
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User if [ `basename "${LPCAT}"` = "lp.cat" ] ; then
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User FILTER="${LPCAT} 0" # infinite delays
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # FILTER="${LPCAT} 120" # e.g. 120 CPS
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # FILTER="${LPCAT} -r 0 2>/tmp/delays"
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # FILTER=${LPCAT}
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User fi
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User ;;
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User esac
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinfi
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinlogger -p lpr.debug -t "tsol_standard_foomatic: ${request_id}" "filter : ${FILTER}"
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox Userlogger -p lpr.debug -t "tsol_standard_foomatic: ${request_id}" "ppdfilter : ${PPDFILTERA}"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User#
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User# Append the PPD foomatic-rip filter
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User#
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox UserFILTER="${FILTER} | ${PPDFILTERA}"
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein###########
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User##
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User## Initialize the printer port
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User###########
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User#####
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User#
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User# SERIAL PORTS:
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User# Initialize everything.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User#
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# PARALLEL PORTS:
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User# Don't initialize baud rate.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User#
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User# It's not obvious how to tell if a port is parallel or serial.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User# However, by splitting the initialization into two steps and letting
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User# the serial-only part fail nicely, it'll work.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User#
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# Another point: The output must be a ``tty'' device. If not, don't
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User# bother with any of this.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User#####
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox Userstty1= stty2=
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox Usertty 0<&1 1>/dev/null 2>&1 && {
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein #####
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User #
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User # First set the default parameters,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # then the requested parameters.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User #####
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User stty \
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User 9600 \
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User 0<&1 2>/dev/null 1>&2
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User stty \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein cs8 -cstopb -parenb -parodd \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ixon -ixany \
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User opost -olcuc onlcr -ocrnl -onocr -onlret -ofill \
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User nl0 cr0 tab0 bs0 vt0 ff0 \
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User 0<&1 2>/dev/null 1>&2
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if [ -n "${stty}" ]
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User then
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User if stty ${stty} 0<&1 1>/dev/null 2>&5
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein :
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User else
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User errmsg ERROR ${E_IP_STTY} \
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User "stty option list failed" \
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User "check the \"-o stty\" option you used,
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User or consult your system administrator"
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User exit 1
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User fi
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User fi
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User #####
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User #
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # Here you may want to add other port initialization code.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # Some examples:
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User #
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # estty # for printer needing hardware flow control (3B2/EPORTS)
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # fctty # for printer needing hardware flow control (3B15,3B20)
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User #####
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User #estty 0<&1
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein #fctty 0<&1
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ##########
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User #
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User # Find out if we have to turn off opost before initializing the
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # printer and on after. Likewise, check clocal.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User #
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # Turning OFF opost (output postprocessing) keeps the UNIX system
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # from changing what we try to send to the printer. Turning ON
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # clocal keeps the UNIX system from dropping what we are trying to
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # send if the printer drops DTR. An example of the former is the
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # AT&T 479, which wants to send a linefeed (ASCII 10) when a page
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # width of 10 is set; with opost on, this COULD BE turned into a
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # carriage-return/linefeed pair. An example of the latter is the
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # AT&T 455, which momentarily drops DTR when it gets the
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # initialization string, is2; with clocal off, the UNIX system
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User # stops sending the rest of the initialization sequence at that
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # point.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User #
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User # THIS CODE MUST FOLLOW THE REST OF THE PORT INITIALIZATION CODE.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User ##########
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User cur_stty=`stty -a 0<&3`
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User expr "${cur_stty}" : '.*-opost' 1>/dev/null 2>&1 \
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User || stty1="${stty1} -opost" stty2="${stty2} opost"
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User expr "${cur_stty}" : '.*-clocal' 1>/dev/null 2>&1 \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein && stty1="${stty1} clocal" stty2="${stty2} -clocal"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein expr "${cur_stty}" : '.* opost.*' 1>/dev/null 2>&1 \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein || banner_filter=${FIX386BD}
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User###########
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User##
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User## Initialize the physical printer (Part I).
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein## Here we bring the printer to a sane state and set the page size.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User###########
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User##########
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User#
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User# WARNING! The "echo" command will catch backslashes (\) and
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# try to interpret the characters following it. Thus, using
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# "echo" to print string values obtained from "tput" is dangerous.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User##########
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User#####
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User# We're confident that most printers don't have backslashes
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# in the control sequences for carriage return and form-feed.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# We're also confident that these don't contain newlines.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# We're also confident that most printers have a linefeed
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# in the control sequence for doing a newline (move to beginning
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User# of next line), but we can't capture it like we do the
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# carriage return or form-feed. Thus we set it unconditionally.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User# We don't set form-feed if it isn't defined, however, because
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User# maybe the printer doesn't have a formfeed. If not set, we're
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User# out of luck.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User#####
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinCR=`${TPUT} cr`
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User[ -z "${CR}" ] && CR="\r"
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox UserFF=`${TPUT} ff`
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinBFF=$FF
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein[ -z "${BFF}" ] && BFF="\f"
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinNL="${CR}\n"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox Userlines=`${TPUT} lines`
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User[ -z "${lines}" -o 0 -ge "${lines}" ] && lines=66
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox Usercols=`${TPUT} cols`
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein[ -z "${cols}" -o 0 -ge "${cols}" ] && cols=132
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt#####
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Basic initialization. The ``else'' clause is equivalent,
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# but covers cases where old Terminal Information Utilities are present.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User#####
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein[ -n "${stty1}" ] && stty ${stty1} 0<&1
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User#
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User# "tput init" will return an "^M" in many cases to "stdout", i.e., printer!
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User# This creates problems for some PS printers
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User#
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox Userif [ "${TERM}" = "PS" -o "${TERM}" = "PSR" ]
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox Userthen
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User :
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox Userelif ${TPUT} init 2>/dev/null
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox Userthen
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User :
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox Userelse
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User pgm=`${TPUT} iprog`
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User if [ -x "${pgm}" ]
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User then
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User eval ${pgm}
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User fi
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User ${TPUT} is1
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User ${TPUT} is2
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User tabset=
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User if [ "8" != "`${TPUT} it`" ]
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User then
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User stty tab3 0<&1 1>/dev/null 2>&1
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein elif `${TPUT} ht >/dev/null`
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User then
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User tabset="/usr/lib/tabset/${TERM}"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User if [ -r ${tabset} ]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein then
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User cat -s ${tabset}
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User fi
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User stty tab3 0<&1 1>/dev/null 2>&1
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User fi
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User file=`${TPUT} if`
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User if [ "${tabset}" != "${file}" -a -r "${file}" ]
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User then
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User cat -s "${file}"
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User fi
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User ${TPUT} is3
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User echo "${CR}\c"
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox Userfi
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User[ -n "${stty2}" ] && stty ${stty2} 0<&1
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User#####
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User#
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User# Set the page size and print spacing, but not the character set.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User# We will be doing the character set later (after the header).
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User#####
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox Userinternal_lpset "${cpi}" "${lpi}" "${width}" "${length}" ""
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User#####
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User#
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User# The banner page (and cancellation page) will
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User# use double width characters if they're available.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#####
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox UserWIDE_CS=`${TPUT} swidm 2>/dev/null` && NORM_CS=`${TPUT} rwidm 2>/dev/null`
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox UserPAD="#####${NL}"
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User#####
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Some printers need to have the banner page filtered.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User#####
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Usercase "${TERM}" in
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox UserPS | PSR )
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User banner_filter="/usr/lib/lp/postscript/postprint | /usr/lib/lp/postscript/postio"
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User LPTELL_OPTS="-l"
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User ;;
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinesac
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox Userif [ -n "${banner_filter}" ]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinthen
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User banner_filter="| ${banner_filter}"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinfi
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User#####
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Now that the printer is ready for printing, we're able
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# to record on paper a cancellation.
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User#####
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Usercancel_banner () {
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews echo "${PAD}${PAD}\c"
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt echo "#####${WIDE_CS} Job ${request_id}${NORM_CS}${NL}\c"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "#####${WIDE_CS} suspended or canceled${NORM_CS}${NL}\c"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User echo "${PAD}${PAD}\c"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeincanceled () {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User ${TPUT} scs 0 2>/dev/null
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "${CR}\c"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if [ "${width:-${cols}}" -lt "${MAX_COLS_SMALL_BANNER}" ]
bea931e17b7567f09107f93ab7e25c7f00abeb9cMark Andrews then
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews WIDE_CS= NORM_CS=
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User cancel_banner
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if [ -n "${BFF}" ]
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "${CR}${BFF}\c"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeintrap 'eval canceled ${banner_filter}; exit_code=0 exit' 15
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein###########
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein##
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein## Print the banner page
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User###########
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#####
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
47012ae6dbf18a2503d7b33c1c9583dc38625cb7Mark Andrews# You may want to change the following code to get a custom banner.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#####
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinregular_banner () {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "${CR}\c"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User echo "${PAD}${PAD}${PAD}${PAD}${PAD}\c"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "#####${WIDE_CS} User: ${user_name}${NORM_CS}${NL}\c"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if [ -n "$ALIAS_USERNAME" ]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "${PAD}\c"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User echo "#####${WIDE_CS} Alias: ${ALIAS_USERNAME}${NORM_CS}${NL}\c"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User if [ -n "${title}" ]
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User then
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt echo "${PAD}\c"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "#####${WIDE_CS} Title: ${title}${NORM_CS}${NL}\c"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User echo "${PAD}\c"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "#####${WIDE_CS} Printed: `LANG=C date '+%a %H:%M %h %d, %Y'`${NORM_CS}${NL}\c"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "${PAD}\c"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "#####${WIDE_CS} Job number: ${request_id}${NORM_CS}${NL}\c"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "${PAD}${PAD}${PAD}${PAD}${PAD}\c"
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt if [ -n "${BFF}" ]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "${CR}${BFF}\c"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Usersmall_banner () {
b05bdb520d83f7ecaad708fe305268c3420be01dMark Andrews echo "${CR}\c"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "${PAD}\c"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "##### User: ${user_name}${NL}\c"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User if [ -n "${title}" ]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "##### Title: ${title}${NL}\c"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "##### Date: `LANG=C date '+%a %H:%M %h %d, %Y'`${NL}\c"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "##### Job: ${request_id}${NL}\c"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "${PAD}\c"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if [ -n "${BFF}" ]
bea931e17b7567f09107f93ab7e25c7f00abeb9cMark Andrews then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "${CR}${BFF}\c"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinif [ "${width:-${cols}}" -lt "${MAX_COLS_SMALL_BANNER}" ]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinthen
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein banner=small_banner
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinelse
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein banner=regular_banner
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinfi
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein## Skip this for PS/PSR in TSOL, since lp.tsol_separator handles the banners
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinif [ "no" = "${nobanner}" -a "${TERM}" != "PSR" -a "${TERM}" != "PS" ]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinthen
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User ( eval "${banner} ${banner_filter}" 2>&1 1>&3 ) \
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt | ${LPTELL} ${LPTELL_OPTS} ${printer}
28b3569d6248168e6c00caab951521cc8141a49dAutomatic Updaterfi
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
28b3569d6248168e6c00caab951521cc8141a49dAutomatic Updater###########
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User##
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein## Surround the job by PostScript code to produce banner
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein## and trailerpages and page headers and footers.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt##
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein###########
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox UserBANNER_EXIT_CODE=${TMPPREFIX}.banner.exit_code
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinecho 0 > ${BANNER_EXIT_CODE}
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox UserTSOLSEPARATOR_LOG=${TMPPREFIX}.banner.errmsg
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunttsol_bannerize () {
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater TSOLSEPARATOR_OPTS="-e ${TSOLSEPARATOR_LOG}"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User if [ "yes" = "${nolabels}" ]
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater then
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater TSOLSEPARATOR_OPTS="${TSOLSEPARATOR_OPTS} -l"
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater fi
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater if [ "yes" = "${nobanner}" ]
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater then
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater TSOLSEPARATOR_OPTS="${TSOLSEPARATOR_OPTS} -t /dev/null -b /dev/null"
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User if [ "${TERM}" = "PSR" ]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein TSOLSEPARATOR_OPTS="${TSOLSEPARATOR_OPTS} -r"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # Get rid of the #, TAB and NL characters in the title
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User tsol_title=`echo $title`
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein tsol_title=`echo $tsol_title | sed 's/#//g'`
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User LC_TIME=C ${LPTSOLSEPARATOR} ${TSOLSEPARATOR_OPTS} "${printer}" \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "${request_id}" "${user_name}" "${tsol_title}" "${file}"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo $? > ${BANNER_EXIT_CODE}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein true
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinbannerize=tsol_bannerize
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userif [ "yes" = "${nobanner}" -a "yes" = "${nolabels}" ]
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrewsthen
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein bannerize=cat
a1b05dea35aa30b152a47115e18bbe679d3fcf19Mark Andrewsfi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinif [ "${TERM}" != "PSR" -a "${TERM}" != "PS" ]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinthen
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User bannerize=cat
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userfi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User###########
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt##
b05bdb520d83f7ecaad708fe305268c3420be01dMark Andrews## Initialize the physical printer (Part II)
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt## Here we select the character set.
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater## One could argue that this should be done before the banner is printed,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein## but we don't, to keep the banner page looking consistent for the
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User## operator. You can move this code before the banner code if you
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt## disagree. If you do, combine it with the other call to "internal_lpset"
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt## to do everything in one shot.
ebabe300b615154d08f5577822cfd8726d2643c8Automatic Updater###########
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntinternal_lpset "" "" "" "" "${CHARSET}"
ebabe300b615154d08f5577822cfd8726d2643c8Automatic Updater
ebabe300b615154d08f5577822cfd8726d2643c8Automatic Updater###########
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User##
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt## Print some copies of the file(s)
ebabe300b615154d08f5577822cfd8726d2643c8Automatic Updater###########
ebabe300b615154d08f5577822cfd8726d2643c8Automatic Updater
ebabe300b615154d08f5577822cfd8726d2643c8Automatic Updater#####
ebabe300b615154d08f5577822cfd8726d2643c8Automatic Updater#
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# The protocol between the interface program and the Spooler
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# is fairly simple:
ebabe300b615154d08f5577822cfd8726d2643c8Automatic Updater#
ebabe300b615154d08f5577822cfd8726d2643c8Automatic Updater# All standard error output is assumed to indicate a
ebabe300b615154d08f5577822cfd8726d2643c8Automatic Updater# fault WITH THE REQUEST. The output is mailed to the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# user who submitted the print request and the print
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# request is finished.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt#
47012ae6dbf18a2503d7b33c1c9583dc38625cb7Mark Andrews# If the interface program sets a zero exit code,
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews# it is assumed that the file printed correctly.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# If the interface program sets a non-zero exit code
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews# less than 128, it is assumed that the file did not
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews# print correctly, and the user will be notified.
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews# In either case the print request is finished.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User#
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# If the interface program sets an exit code greater
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater# than 128, it is assumed that the file did not print
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater# because of a printer fault. If an alert isn't already
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater# active (see below) one will be activated. (Exit code
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# 128 should not be used at all. The shell, which executes
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# this program, turns SIGTERM, used to kill this program
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# for a cancellation or disabling, into exit 128. The
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews# Spooler thus interpretes 128 as SIGTERM.)
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews#
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# A message sent to the standard input of the ${LPTELL}
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews# program is assumed to describe a fault WITH THE PRINTER.
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews# The output is used in an alert (if alerts are defined).
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews# If the fault recovery is "wait" or "begin", the printer
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews# is disabled (killing the interface program if need be),
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews# and the print request is left on the queue.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# If the fault recovery is "continue", the interface program
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews# is allowed to wait for the printer fault to be cleared so
d3907d27cc138f45772d3d63082ae02c7659148aAutomatic Updater# it can resume printing.
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews#
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews# This interface program relies on filters to detect printer faults.
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews# In absence of a filter provided by the customer, it uses a simple
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# filter (${LPCAT}) to detect the class of faults that cause DCD
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater# (``carrier'') drop. The protocol between the interface program and
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews# the filter:
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews#
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews# The filter should exit with zero if printing was
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater# successful and non-zero if printing failed because
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews# of a printer fault. This interface program turns a
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater# non-zero exit of the filter into an "exit 129" from
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater# itself, thus telling the Spooler that a printer fault
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater# (still) exists.
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater#
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater# The filter should report printer faults via a message
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater# to its standard error. This interface program takes all
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater# standard error output from the filter and feeds it as
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater# standard input to the ${LPTELL} program.
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater#
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater# The filter should wait for a printer fault to clear,
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater# and should resume printing when the fault clears.
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews# Preferably it should resume at the top of the page
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater# that was being printed when the fault occurred.
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater# If it waits and finishes printing, it should exit
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater# with a 0 exit code. If it can't wait, it should exit
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater# with a non-zero exit code.
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater#
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater# The interface program expects that ANY message on the
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater# standard error from the filter indicates a printer fault.
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater# Therefore, a filter should not put user (input) error
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater# messages on the standard error, but on the standard output
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater# (where the user can read them when he or she examines
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater# the print-out).
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater#
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater#####
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updaterbadfileyet=
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updateri=1
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updaterwhile [ $i -le $copies ]
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updaterdo
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater for file in ${files}
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater do
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater if [ -r "${file}" ]
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater then
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater #####
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater #
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater # Here's where we set up the $LPTELL program to
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater # capture fault messages, and...
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater #
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater # Here's where we print the file.
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater #
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews # We set up a pipeline to $LPTELL, but play a trick
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews # to get the filter's standard ERROR piped instead of
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews # its standard OUTPUT: Divert the standard error (#2) to
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews # the standard output (#1) IN THE PIPELINE. The shell
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews # will have changed #1 to be the pipe, not the
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews # printer, so diverting #2 connects it to the pipe.
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews # We then change the filter's #1 to a copy of the real
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews # standard output (the printer port) made earlier,
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User # so that is connected back to the printer again.
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews #
dec590a3deb8e87380a8bd3a77d535dba3729bf6Tinderbox User # We do all this inside a parenthesized expression
47012ae6dbf18a2503d7b33c1c9583dc38625cb7Mark Andrews # so that we can get the exit code; this is necessary
6101b9f0d904a708e900a74abc16d1e0eda67264Mark Andrews # because the exit code of a pipeline is the exit
dec590a3deb8e87380a8bd3a77d535dba3729bf6Tinderbox User # code of the right-most command, which isn't the
dec590a3deb8e87380a8bd3a77d535dba3729bf6Tinderbox User # filter.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User #
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater # These two tricks could be avoided by using a named
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater # pipe to connect the standard error to $LPTELL. In
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater # fact an early prototype of this script did just
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater # that; however, the named pipe introduced a timing
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User # problem. The processes that open a named pipe hang
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater # until both ends of the pipe are opened. Cancelling
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater # a request or disabling the printer often killed one
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater # of the processes, causing the other process to hang
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater # forever waiting for the other end of the pipe to
5d564da348e890e42f63eebf2dced9a05b41f4fbTinderbox User # be opened.
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater #####
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User EXIT_CODE=${TMPPREFIX}e
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater trap '' 1 # Let the filter handle a hangup
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User trap '' 2 3 # and interrupts
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater (
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater #####
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater # Put the 0<${file} before the "eval" to keep
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater # clever users from giving a file name that
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater # evaluates as something to execute.
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater #####
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User 0<${file} $bannerize | eval ${FILTER} 2>&1 1>&3
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater echo $? >${EXIT_CODE}
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater ) | ${LPTELL} ${LPTELL_OPTS} ${printer}
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater # if lp.tsol_separator had an error, send its logged
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater # error message to LPTELL.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User banner_exit_code=`cat ${BANNER_EXIT_CODE}`
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater if [ -n "${banner_exit_code}" -a \
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater 0 -ne "${banner_exit_code}" -a \
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater -n "${LPTELL}" -a \
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater -r "${TSOLSEPARATOR_LOG}" ]
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater then
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User cat ${TSOLSEPARATOR_LOG} | ${LPTELL} ${printer}
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User echo 77 > ${EXIT_CODE}
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User fi
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater trap 'catch_hangup; exit_code=129 exit 129' 1
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater trap 'catch_interrupt; exit_code=129 exit 129' 2 3
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User exit_code=`cat ${EXIT_CODE}`
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater if [ -n "${exit_code}" -a 0 -ne "${exit_code}" ]
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User then
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User trap '' 15 # Avoid dying from disable
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User sleep 4 # Give $LPTELL a chance to tell
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User exit ${exit_code}
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt fi
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User if [ -n "${FF}" -a "no" = "${nofilebreak}" ]
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater then
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater echo "${CR}${FF}\c"
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User fi
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User else
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User #####
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt #
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt # Don't complain about not being able to read
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt # a file on second and subsequent copies, unless
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt # we've not complained yet. This removes repeated
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt # messages about the same file yet reduces the
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt # chance that the user can remove a file and not
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater # know that we had trouble finding it.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User #####
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater if [ "${i}" -le 1 -o -z "${badfileyet}" ]
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater then
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater errmsg WARNING ${E_IP_BADFILE} \
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater "cannot read file \"${file}\"" \
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User "see if the file still exists and is readable,
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User or consult your system administrator;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User printing continues"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User badfileyet=yes
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt fi
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt fi
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt done
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater i=`expr $i + 1`
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox Userdone
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater# Skip this for TSOL, since lp.tsol_separator handles the banners
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater#
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater# if [ "no" = "${nobanner}" -a "${TERM}" = "PSR" ]
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# then
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater# ( eval "${banner} ${banner_filter}" 2>&1 1>&3 ) \
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater# | ${LPTELL} ${LPTELL_OPTS} ${printer}
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater# fi
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntif [ -n "${exit_code}" -a 0 -ne "${exit_code}" ]
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntthen
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt exit ${exit_code}
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntfi
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt#####
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater#
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# Always ensure the complete job ends with a ``formfeed'', to
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User# let the next job start on a new page. (If someone wants to
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# concatenate files, they can give them in one job.)
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater# So, if we haven't been putting out a ``formfeed'' between files,
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater# it means we haven't followed the last file with a formfeed,
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater# so we do it here.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User#####
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updaterif [ -n "${FF}" -a "yes" = "${nofilebreak}" ]
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userthen
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User echo "${CR}${FF}\c"
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox Userfi
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User${DRAIN}
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox Userexit_code=0 exit 0
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater