summaryrefslogtreecommitdiff
path: root/lib/lprsetup.sh
diff options
context:
space:
mode:
Diffstat (limited to 'lib/lprsetup.sh')
-rwxr-xr-xlib/lprsetup.sh223
1 files changed, 223 insertions, 0 deletions
diff --git a/lib/lprsetup.sh b/lib/lprsetup.sh
new file mode 100755
index 000000000..673cba81c
--- /dev/null
+++ b/lib/lprsetup.sh
@@ -0,0 +1,223 @@
+#!/bin/sh
+#
+# BSD PRINT FILTER SETUP utility for Ghostscript - used and tested on
+# SunOS 4.1.3, but I hope it will be useful on other BSD systems
+# See documentation for usage
+#
+
+GSPATH=
+while [ $# -gt 0 ]
+do
+ case "$1" in
+ -p) GSPATH="$2"/lib/ghostscript; shift;;
+ -h) echo >&2 \
+ "usage: $0 [-p <gs install prefix>]\n"\
+ "Where <gs install prefix> is the ""prefix""\n"\
+ "for the Ghostscript install - the default is\n"\
+ """/usr/local"""
+ exit 1;;
+ -*) echo >&2 \
+ "usage: $0 [-p <gs install prefix>]"
+ exit 1;;
+ *) break;; # terminate while loop
+ esac
+ shift
+done
+
+DEVICES="bjt600.32 bjc600.32 bjc600.24 bjc600.24.3 bjc600.16 bjc600.8 bjc600.8.1 bjc600.1 bjc600.dq"
+#FILTERS="if nf tf gf vf df cf rf"
+FILTERS="if"
+
+# The port your printer is on
+PRINTERDEV=/dev/lp1
+# The kind of printer (accepted values: 'parallel' and 'serial')
+PRINTERTYPE=parallel
+
+if [ "x$GSPATH"="x" ] ; then
+ GSDIR=`which gs | awk -F / 'sub(FS $NF,x)' | awk -F / 'sub(FS $NF,x)'`/lib/ghostscript
+else
+ GSDIR=$GSPATH
+fi
+
+GSFILTERDIR=$GSDIR/filt
+SPOOLDIR=/var/spool
+GSIF=unix-lpr.sh
+PCAP=printcap.insert
+
+if [ "x$GSPATH"="x" ] ; then
+ echo "Warning: Writing filters to $GSFILTERDIR"
+ echo "if you do not want this, you have 10 seconds to hit ^c to abort this script:"
+ for i in 10 09 08 07 06 05 04 03 02 01 continuing....; do
+ sleep 1
+ echo -n 
+ echo -n $i
+ done
+ echo
+fi
+
+PATH=/bin:/usr/bin:/usr/ucb
+export PATH
+
+if [ ! -w $GSDIR ]; then
+ echo "$GSDIR must be writable to create filter directory"
+ exit 1
+fi
+
+echo "
+Making links in the filter directory $GSFILTERDIR ...
+"
+
+#
+# Make the directory for holding the filter and links
+#
+if [ -d $GSFILTERDIR ]; then
+ echo "$GSFILTERDIR already exists - not created"
+else
+ mkdir $GSFILTERDIR
+fi
+rm -f $GSFILTERDIR/direct
+ln -s . $GSFILTERDIR/direct
+rm -f $GSFILTERDIR/indirect
+ln -s . $GSFILTERDIR/indirect
+
+#
+# Create a link from each filtertype to the real filter script
+#
+for filter in $FILTERS
+do
+ rm -f $GSFILTERDIR/gs$filter
+ ln -s ../$GSIF $GSFILTERDIR/gs$filter
+done
+
+#
+# Create a link from each device to the filter directory
+#
+for device in $DEVICES
+do
+ dualqueue=
+ case "$device" in
+ *.dq) device=`basename $device .dq` ; dualqueue=t ;;
+ esac
+ rm -f $GSFILTERDIR/$device
+ if [ $dualqueue ]; then
+ rm -f $GSFILTERDIR/indirect/$device
+ ln -s . $GSFILTERDIR/indirect/$device
+ else
+ rm -f $GSFILTERDIR/direct/$device
+ ln -s . $GSFILTERDIR/direct/$device
+ fi
+done
+
+#
+# Create a basic printcap insert - this is made in the CURRENT directory
+#
+rm -f $PCAP
+cat > $PCAP << EOF
+# This is an example printcap insert for Ghostscript printers
+# You will probably want either to change the names for each printer
+# below (first line for each device) to something more sensible, or
+# to add additional name entries (eg cdjcolor for cdj500.24)
+# The example is shown set up for $PRINTERTYPE printers - you will need
+# to alter the entries for different or networked remote printer,
+# eg. a remote network printer would have a line something like:
+# :lp=:rm=artemis:rp=LPT1:
+# for a PC called artemis, replacing the serial port settings
+#
+# NB/ This is only an example - it is unlikely to be complete or exactly
+# correct for your system, but is designed to illustrate filter names
+# corresponding to the accompanying bsd-if print filter
+#
+EOF
+
+(
+previous=undefined
+for device in $DEVICES
+do
+ dualqueue=
+ case "$device" in
+ *.dq) device=`basename $device .dq` ; dualqueue=t ;;
+ esac
+ base="`echo $device | sed 's/\.[0-9][0-9]*$//'`"
+ base="`echo $base | sed 's/\.[0-9][0-9]*$//'`"
+#
+# If device listed with '.dq' suffix, we set up a separate output queue
+#
+ if [ $dualqueue ]; then
+ if [ $base != $previous ]; then
+ previous=$base
+ echo "\
+# Entry for raw device $base.raw
+$base.raw|Raw output device $base:\\
+ :lp=$PRINTERDEV:\\"
+ if test "$PRINTERTYPE" = serial
+ then
+ echo "br#19200:xc#0177777:\\"
+ echo ":ms=-parity,ixon,-opost:\\"
+ fi
+ echo ":sd=$SPOOLDIR/$base/raw:\\
+ :mx#0:sf:sh:rs:"
+ fi
+ echo "\
+# Entry for device $device (output to $base.raw)
+$device|Ghostscript device $device:\\
+ :lp=/dev/null:\\"
+ else
+ echo "\
+# Entry for device $device
+$device|Ghostscript device $device:\\
+ :lp=$PRINTERDEV:\\"
+ if test "$PRINTERTYPE" = serial
+ then
+ echo "br#19200:xc#0177777:\\"
+ echo ":ms=-parity,ixon,-opost:\\"
+ fi
+ fi
+ echo "\
+ :sd=$SPOOLDIR/$base:\\
+ :lf=$SPOOLDIR/$base/logfile:\\
+ :af=$SPOOLDIR/$base/acct:\\"
+ for filter in $FILTERS
+ do
+ if [ $dualqueue ]; then
+ echo "\
+ :$filter=$GSFILTERDIR/indirect/$device/gs$filter:\\"
+ else
+ echo "\
+ :$filter=$GSFILTERDIR/direct/$device/gs$filter:\\"
+ fi
+ done
+ echo "\
+ :mx#0:sf:sh:rs:"
+done
+) >> $PCAP
+
+echo "
+Example printcap insert file \"$PCAP\" now created"
+
+#
+# Remind the user what's still to do
+#
+
+echo "
+NB/ You will need to create the following directories, with
+appropriate permissions, and do 'touch logfile' and 'touch acct'
+in the top level directories (ie. not the 'raw' ones):
+"
+(
+for device in $DEVICES
+do
+ dualqueue=
+ case "$device" in
+ *.dq) device=`basename $device .dq` ; dualqueue=t ;;
+ esac
+ base="`echo $device | sed 's/\.[0-9][0-9]*$//'`"
+ base="`echo $base | sed 's/\.[0-9][0-9]*$//'`"
+ echo " $SPOOLDIR/$base"
+ if [ $dualqueue ]; then
+ echo " $SPOOLDIR/$base/raw"
+ fi
+done
+) | sort -u
+
+echo "
+ + + + "