xref: /plan9/sys/src/cmd/gs/lib/lprsetup.sh (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
17dd7cddfSDavid du Colombier#!/bin/sh
2*593dc095SDavid du Colombier# $Id: lprsetup.sh,v 1.3 2002/02/21 21:49:28 giles Exp $
37dd7cddfSDavid du Colombier#
47dd7cddfSDavid du Colombier# BSD PRINT FILTER SETUP utility for Ghostscript - used and tested on
57dd7cddfSDavid du Colombier# SunOS 4.1.3, but I hope it will be useful on other BSD systems
67dd7cddfSDavid du Colombier# See documentation for usage
77dd7cddfSDavid du Colombier#
87dd7cddfSDavid du Colombier
97dd7cddfSDavid du ColombierDEVICES="bjt600.32 bjc600.32 bjc600.24 bjc600.24.3 bjc600.16 bjc600.8 bjc600.8.1 bjc600.1 bjc600.dq"
107dd7cddfSDavid du Colombier#FILTERS="if nf tf gf vf df cf rf"
117dd7cddfSDavid du ColombierFILTERS="if"
127dd7cddfSDavid du Colombier
137dd7cddfSDavid du Colombier# The port your printer is on
147dd7cddfSDavid du ColombierPRINTERDEV=/dev/lp1
157dd7cddfSDavid du Colombier# The kind of printer (accepted values: 'parallel' and 'serial')
167dd7cddfSDavid du ColombierPRINTERTYPE=parallel
177dd7cddfSDavid du Colombier
187dd7cddfSDavid du ColombierGSDIR=/usr/local/lib/ghostscript
197dd7cddfSDavid du ColombierGSFILTERDIR=$GSDIR/filt
207dd7cddfSDavid du ColombierSPOOLDIR=/var/spool
217dd7cddfSDavid du ColombierGSIF=unix-lpr.sh
227dd7cddfSDavid du ColombierPCAP=printcap.insert
237dd7cddfSDavid du Colombier
247dd7cddfSDavid du ColombierPATH=/bin:/usr/bin:/usr/ucb
257dd7cddfSDavid du Colombierexport PATH
267dd7cddfSDavid du Colombier
277dd7cddfSDavid du Colombierif [ ! -w $GSDIR ]; then
287dd7cddfSDavid du Colombier  echo "$GSDIR must be writable to create filter directory"
297dd7cddfSDavid du Colombier  exit 1
307dd7cddfSDavid du Colombierfi
317dd7cddfSDavid du Colombier
327dd7cddfSDavid du Colombierecho "
337dd7cddfSDavid du ColombierMaking links in the filter directory $GSFILTERDIR ...
347dd7cddfSDavid du Colombier"
357dd7cddfSDavid du Colombier
367dd7cddfSDavid du Colombier#
377dd7cddfSDavid du Colombier# Make the directory for holding the filter and links
387dd7cddfSDavid du Colombier#
397dd7cddfSDavid du Colombierif [ -d $GSFILTERDIR ]; then
407dd7cddfSDavid du Colombier  echo "$GSFILTERDIR already exists - not created"
417dd7cddfSDavid du Colombierelse
427dd7cddfSDavid du Colombier  mkdir $GSFILTERDIR
437dd7cddfSDavid du Colombierfi
447dd7cddfSDavid du Colombierrm -f $GSFILTERDIR/direct
457dd7cddfSDavid du Colombierln -s . $GSFILTERDIR/direct
467dd7cddfSDavid du Colombierrm -f $GSFILTERDIR/indirect
477dd7cddfSDavid du Colombierln -s . $GSFILTERDIR/indirect
487dd7cddfSDavid du Colombier
497dd7cddfSDavid du Colombier#
507dd7cddfSDavid du Colombier# Create a link from each filtertype to the real filter script
517dd7cddfSDavid du Colombier#
527dd7cddfSDavid du Colombierfor filter in $FILTERS
537dd7cddfSDavid du Colombierdo
547dd7cddfSDavid du Colombier  rm -f $GSFILTERDIR/gs$filter
557dd7cddfSDavid du Colombier  ln -s  ../$GSIF $GSFILTERDIR/gs$filter
567dd7cddfSDavid du Colombierdone
577dd7cddfSDavid du Colombier
587dd7cddfSDavid du Colombier#
597dd7cddfSDavid du Colombier# Create a link from each device to the filter directory
607dd7cddfSDavid du Colombier#
617dd7cddfSDavid du Colombierfor device in $DEVICES
627dd7cddfSDavid du Colombierdo
637dd7cddfSDavid du Colombier  dualqueue=
647dd7cddfSDavid du Colombier  case "$device" in
657dd7cddfSDavid du Colombier    *.dq) device=`basename $device .dq` ; dualqueue=t ;;
667dd7cddfSDavid du Colombier  esac
677dd7cddfSDavid du Colombier  rm -f $GSFILTERDIR/$device
687dd7cddfSDavid du Colombier  if [ $dualqueue ]; then
697dd7cddfSDavid du Colombier    rm -f $GSFILTERDIR/indirect/$device
707dd7cddfSDavid du Colombier    ln -s . $GSFILTERDIR/indirect/$device
717dd7cddfSDavid du Colombier  else
727dd7cddfSDavid du Colombier    rm -f $GSFILTERDIR/direct/$device
737dd7cddfSDavid du Colombier    ln -s . $GSFILTERDIR/direct/$device
747dd7cddfSDavid du Colombier  fi
757dd7cddfSDavid du Colombierdone
767dd7cddfSDavid du Colombier
777dd7cddfSDavid du Colombier#
787dd7cddfSDavid du Colombier# Create a basic printcap insert - this is made in the CURRENT directory
797dd7cddfSDavid du Colombier#
807dd7cddfSDavid du Colombierrm -f $PCAP
817dd7cddfSDavid du Colombiercat > $PCAP << EOF
827dd7cddfSDavid du Colombier# This is an example printcap insert for Ghostscript printers
837dd7cddfSDavid du Colombier# You will probably want either to change the names for each printer
847dd7cddfSDavid du Colombier# below (first line for each device) to something more sensible, or
857dd7cddfSDavid du Colombier# to add additional name entries (eg cdjcolor for cdj500.24)
867dd7cddfSDavid du Colombier# The example is shown set up for $PRINTERTYPE printers - you will need
877dd7cddfSDavid du Colombier# to alter the entries for different or networked remote printer,
887dd7cddfSDavid du Colombier# eg. a remote network printer would have a line something like:
897dd7cddfSDavid du Colombier#    :lp=:rm=artemis:rp=LPT1:
907dd7cddfSDavid du Colombier# for a PC called artemis, replacing the serial port settings
917dd7cddfSDavid du Colombier#
927dd7cddfSDavid du Colombier# NB/ This is only an example - it is unlikely to be complete or exactly
937dd7cddfSDavid du Colombier# correct for your system, but is designed to illustrate filter names 
947dd7cddfSDavid du Colombier# corresponding to the accompanying bsd-if print filter
957dd7cddfSDavid du Colombier#
967dd7cddfSDavid du ColombierEOF
977dd7cddfSDavid du Colombier
987dd7cddfSDavid du Colombier(
997dd7cddfSDavid du Colombierprevious=undefined
1007dd7cddfSDavid du Colombierfor device in $DEVICES
1017dd7cddfSDavid du Colombierdo
1027dd7cddfSDavid du Colombier  dualqueue=
1037dd7cddfSDavid du Colombier  case "$device" in
1047dd7cddfSDavid du Colombier    *.dq) device=`basename $device .dq` ; dualqueue=t ;;
1057dd7cddfSDavid du Colombier  esac
1067dd7cddfSDavid du Colombier  base="`echo $device | sed 's/\.[0-9][0-9]*$//'`"
1077dd7cddfSDavid du Colombier  base="`echo $base | sed 's/\.[0-9][0-9]*$//'`"
1087dd7cddfSDavid du Colombier#
1097dd7cddfSDavid du Colombier# If device listed with '.dq' suffix, we set up a separate output queue
1107dd7cddfSDavid du Colombier#
1117dd7cddfSDavid du Colombier  if [ $dualqueue ]; then
1127dd7cddfSDavid du Colombier    if [ $base != $previous ]; then
1137dd7cddfSDavid du Colombier      previous=$base
1147dd7cddfSDavid du Colombier      echo "\
1157dd7cddfSDavid du Colombier# Entry for raw device $base.raw
1167dd7cddfSDavid du Colombier$base.raw|Raw output device $base:\\
1177dd7cddfSDavid du Colombier    :lp=$PRINTERDEV:\\"
1187dd7cddfSDavid du Colombier    if test "$PRINTERTYPE" = serial
1197dd7cddfSDavid du Colombier    then
1207dd7cddfSDavid du Colombier	echo "br#19200:xc#0177777:\\"
1217dd7cddfSDavid du Colombier        echo ":ms=-parity,ixon,-opost:\\"
1227dd7cddfSDavid du Colombier    fi
1237dd7cddfSDavid du Colombier    echo ":sd=$SPOOLDIR/$base/raw:\\
1247dd7cddfSDavid du Colombier    :mx#0:sf:sh:rs:"
1257dd7cddfSDavid du Colombier    fi
1267dd7cddfSDavid du Colombier    echo "\
1277dd7cddfSDavid du Colombier# Entry for device $device (output to $base.raw)
1287dd7cddfSDavid du Colombier$device|Ghostscript device $device:\\
1297dd7cddfSDavid du Colombier    :lp=/dev/null:\\"
1307dd7cddfSDavid du Colombier  else
1317dd7cddfSDavid du Colombier    echo "\
1327dd7cddfSDavid du Colombier# Entry for device $device
1337dd7cddfSDavid du Colombier$device|Ghostscript device $device:\\
1347dd7cddfSDavid du Colombier    :lp=$PRINTERDEV:\\"
1357dd7cddfSDavid du Colombier    if test "$PRINTERTYPE" = serial
1367dd7cddfSDavid du Colombier    then
1377dd7cddfSDavid du Colombier	echo "br#19200:xc#0177777:\\"
1387dd7cddfSDavid du Colombier        echo ":ms=-parity,ixon,-opost:\\"
1397dd7cddfSDavid du Colombier    fi
1407dd7cddfSDavid du Colombier  fi
1417dd7cddfSDavid du Colombier  echo "\
1427dd7cddfSDavid du Colombier    :sd=$SPOOLDIR/$base:\\
1437dd7cddfSDavid du Colombier    :lf=$SPOOLDIR/$base/logfile:\\
1447dd7cddfSDavid du Colombier    :af=$SPOOLDIR/$base/acct:\\"
1457dd7cddfSDavid du Colombier  for filter in $FILTERS
1467dd7cddfSDavid du Colombier  do
1477dd7cddfSDavid du Colombier    if [ $dualqueue ]; then
1487dd7cddfSDavid du Colombier      echo "\
1497dd7cddfSDavid du Colombier    :$filter=$GSFILTERDIR/indirect/$device/gs$filter:\\"
1507dd7cddfSDavid du Colombier    else
1517dd7cddfSDavid du Colombier      echo "\
1527dd7cddfSDavid du Colombier    :$filter=$GSFILTERDIR/direct/$device/gs$filter:\\"
1537dd7cddfSDavid du Colombier    fi
1547dd7cddfSDavid du Colombier  done
1557dd7cddfSDavid du Colombier  echo "\
1567dd7cddfSDavid du Colombier    :mx#0:sf:sh:rs:"
1577dd7cddfSDavid du Colombierdone
1587dd7cddfSDavid du Colombier) >> $PCAP
1597dd7cddfSDavid du Colombier
1607dd7cddfSDavid du Colombierecho "
1617dd7cddfSDavid du ColombierExample printcap insert file \"$PCAP\" now created"
1627dd7cddfSDavid du Colombier
1637dd7cddfSDavid du Colombier#
1647dd7cddfSDavid du Colombier# Remind the user what's still to do
1657dd7cddfSDavid du Colombier#
1667dd7cddfSDavid du Colombier
1677dd7cddfSDavid du Colombierecho "
1687dd7cddfSDavid du ColombierNB/ You will need to create the following directories, with
1697dd7cddfSDavid du Colombierappropriate permissions, and do 'touch logfile' and 'touch acct'
1707dd7cddfSDavid du Colombierin the top level directories (ie. not the 'raw' ones):
1717dd7cddfSDavid du Colombier"
1727dd7cddfSDavid du Colombier(
1737dd7cddfSDavid du Colombierfor device in $DEVICES
1747dd7cddfSDavid du Colombierdo
1757dd7cddfSDavid du Colombier  dualqueue=
1767dd7cddfSDavid du Colombier  case "$device" in
1777dd7cddfSDavid du Colombier    *.dq) device=`basename $device .dq` ; dualqueue=t ;;
1787dd7cddfSDavid du Colombier  esac
1797dd7cddfSDavid du Colombier  base="`echo $device | sed 's/\.[0-9][0-9]*$//'`"
1807dd7cddfSDavid du Colombier  base="`echo $base | sed 's/\.[0-9][0-9]*$//'`"
1817dd7cddfSDavid du Colombier  echo "  $SPOOLDIR/$base"
1827dd7cddfSDavid du Colombier  if [ $dualqueue ]; then
1837dd7cddfSDavid du Colombier    echo "  $SPOOLDIR/$base/raw"
1847dd7cddfSDavid du Colombier  fi
1857dd7cddfSDavid du Colombierdone
1867dd7cddfSDavid du Colombier) | sort -u
1877dd7cddfSDavid du Colombier
1887dd7cddfSDavid du Colombierecho "
1897dd7cddfSDavid du Colombier        + + + "
190