#!/bin/sh # # convert ps to the format required by the printer on this queue # # if the printer is a PostScript printer, just cat it through # if the printer uses ghostscript, we'll run it now # if the printer is neither, we die (with good message to someone) # # location of the ppaprint script FPIDIR=/usr/lib/rhs/rhs-printfilters/ # # read in PostScript configuration settings # source ${SPOOLDIR}/postscript.cfg # # see if we should reverse order # # support will be added for this in the future # psorder needed and is part of netatalk, which we dont currently ship # if [ "$PAPERSIZE" = "letter" ]; then mpage_paper="Letter" elif [ "$PAPERSIZE" = "a4" ]; then mpage_paper="A4" elif [ "$PAPERSIZE" = "legal" ]; then mpage_paper="Legal" else mpage_paper="Letter" fi # # weird case - some PS doesnt get handled by mpage well # so we allow nup=1 to just cat PS to printer w/o mpage interferring # if [ "$NUP" = "1" ]; then border="-o" mpage_cmd="cat -" else border="" mpage_cmd="mpage -b$mpage_paper $border -$NUP -m${RTLFTMAR}lr -m${TOPBOTMAR}tb" fi # # if the driver is # "POSTSCRIPT" it means the printer handles Postscript natively, # no need to run gs. # "TEXT" it means the printer cannot handle PS input # "uniprint" use the driver set by COLOR in postscript.cfg # "ppa" use the driver and postprocessor returned by ppaprint if [ "$GSDEVICE" = "POSTSCRIPT" ]; then eval $mpage_cmd elif [ "$GSDEVICE" = "TEXT" ]; then echo "Error - ps-to-printer.fpi - this printer cannot print postscript" echo " and ghostscript does not have support" exit 1 # # We're using ghostscript with "uniprint" command line style, # $COLOR holds filename of driver parameters (filename.upp) # Since real driver name is stored in *.upp files, this style can # activate traditional drivers provided you create corresponding # *.upp files, entry to printdb, and compile ghostscript with uniprint. # ( Without compiling uniprint in ghostscript, this script will filter # out all uniprint entries in printdb including fake ones for # traditional drivers ) # elif [ "$GSDEVICE" = "uniprint" ]; then # Set default *.upp driver (your default printer upp driver here) if [ "$COLOR" = "" ]; then COLOR="stcany" echo "No filename for parameters given. Assume $COLOR." fi # eval "$mpage_cmd | gs -q @$COLOR.upp \ -sPAPERSIZE=$PAPERSIZE \ -sOutputFile=- \ $EXTRA_GS_OPTIONS \ -" # support for HP DeskJet PPA printers (710, 720, 820, 1000 series). # assemble the PPA postprocessor command line using the ppaprint script. # GSDEVICE is selected from among the pnm devices. # $EXTRA_GS_OPTIONS is processed to remove PPA options. # PPA configuration is encoded in $COLOR # (use the GSDEVICE=ppa test when Red Hat have modified printtool # to recognise printerdb entries with GSDEVICE=ppa ....) #elif [ "$GSDEVICE" = "ppa" ]; then # (until then, test $COLOR instead ....) elif echo $COLOR | grep -e "ppa" > /dev/null 2>&1 ; then PPA=$FPIDIR/ppaprint PPA_CMD=$(eval "$PPA $COLOR $PAPERSIZE $RESOLUTION $EXTRA_GS_OPTIONS ") if ! echo $PPA_CMD | grep -e "Error" > /dev/null 2>&1 ; then eval "$mpage_cmd | sed \"s/[(]%%.*%%[)].*flush//g\" | \ gs -q \ -r$RESOLUTION \ -sPAPERSIZE=$PAPERSIZE \ -dNOPAUSE \ -dSAFER \ -sOutputFile=- \ $PPA_CMD" else echo "Error - ps-to-printer.fpi - PPA postprocessor error:" echo $PPA_CMD exit 1 fi else # We're using ghostscript in traditional manner eval "$mpage_cmd | sed \"s/[(]%%.*%%[)].*flush//g\" | \ gs -q -sDEVICE=$GSDEVICE \ -r$RESOLUTION \ -sPAPERSIZE=$PAPERSIZE \ -dNOPAUSE \ -dSAFER \ -sOutputFile=- \ $COLOR \ $EXTRA_GS_OPTIONS \ -" fi # # # see if we need to send a form feed to eject the page from printer # if [ "$PS_SEND_EOF" = "YES" ]; then printf "\004" fi exit 0