1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 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 "
+ + + "
|