return to first page linux journal archive
keywordscontents

Listing 5. Filter to Recognize Printer Types

#!/bin/sh
# filter script for text, Postscript
# or TIFF printing.
# Uses the file '/tmp/printer' to determine
# which printer is connected
LOG=/tmp/filter.log
if [ ! -f /tmp/printer ]; then
   echo "/tmp/printer file missing" |
      Mail -s "printer problem" markp
   exit 1
fi
PTYPE=`cat /tmp/printer`
#
# uncomment to turn on debug output
#DEBUG=1
if [ -n "$DEBUG" ]; then
   set -x
   exec > $LOG 2>&1
   echo $*
fi
cat - > /tmp/prt.in
FTYPE="`file /tmp/prt.in`"
if [ -n "$DEBUG" ]; then
   echo $FTYPE
fi
if [ -n "`echo $FTYPE | grep text`" ];
then         # TEXT
   echo "$PTYPE text job" >> $LOG
   if [ $PTYPE = epson ]; then
      # takes it straight
      lpr -h -Praw /tmp/prt.in
   elif [ $PTYPE = cdj550 ]; then
      # needs CR+L
      awk '{printf "%s\r\n",$0}' \
   /tmp/prt.in | lpr -h -Praw
   elif [ $PTYPE = ljet4 ]; then
      awk '{printf "%s\r\n",$0}' \
   /tmp/prt.in | lpr -h -P4mvraw
   fi
elif [ -n "`echo $FTYPE | grep -i \
postscript`" ];
then         # POSTSCRIPT
   echo "$PTYPE postscript job" >> $LOG
   if [ $PTYPE = ljet4 ]; then
   lpr -P4mvraw
   else # all others non-postscript
   gs -sDEVICE=$PTYPE -q \
      -sOutputFile=- \
      /tmp/prt.in | lpr -h -Praw
   fi
elif [ -n "`echo $FTYPE | grep TIFF`" ];
then         # TIFF
   echo "$PTYPE TIFF job" >> $LOG
   if [ $PTYPE = ljet4 ]; then
      tiff2ps -ap /tmp/prt.in | \
   lpr -P4mvraw
   else
      tiff2ps -ap /tmp/prt.in | \
   gs -sDEVICE=$PTYPE -q -OutputFile=- \
   - | lpr -h -Praw
   fi
fi
if [ -z "$DEBUG" ]; then
   rm /tmp/prt.in
fi