5bc9b0c3ca
Fix inconsistencies between programs and their usage messages, correct instances where information seems to be missing or lost. This includes missing arguments, making usage consistent with manuals, and so on.
210 lines
5.1 KiB
Bash
Executable file
210 lines
5.1 KiB
Bash
Executable file
#!/bin/rc
|
|
# lp - enqueues the file to be printed and starts the daemon, when necessary.
|
|
# Make changes to /sys/src/cmd/lp/lp.rc;
|
|
# changes made directly to /rc/bin/lp will be lost.
|
|
|
|
rfork en # so that environment and name space are not polluted
|
|
#
|
|
# put 'fn sigexit { rm /tmp/lpcrap; exit interrupted }' into processes that create /tmp/lpcrap.
|
|
|
|
ifs='
|
|
' # set ifs in case it is munged in user's environment
|
|
|
|
LPLIB=/sys/lib/lp # lp scripts directories and configuration file are here
|
|
LPBIN=/$cputype/bin/aux # lp specific binaries are here
|
|
LPSPOOL=$LPLIB/queue # lp queues
|
|
LPLOGDIR=$LPLIB/log # lp logs
|
|
|
|
$LPLIB/bin/lpscratch
|
|
x=$status
|
|
if(! ~ $x '') exit $x
|
|
|
|
# build /bin from the ground up
|
|
bind /$cputype/bin /bin # general compiled binaries
|
|
bind -a /rc/bin /bin # general rc scripts
|
|
# This needs to be fixed for the real thing
|
|
bind -a $LPLIB/bin /bin # lp specific rc scripts
|
|
bind -a $LPBIN /bin # lp specific compiled binaries
|
|
path=(/bin)
|
|
|
|
USAGE='usage: lp [-d printer] [-p process] [options] [files]
|
|
lp [-d printer] -q
|
|
lp [-d printer] -k jobnos
|
|
|
|
options include:
|
|
-D turn on debugging output
|
|
-H no header
|
|
-L landscape mode
|
|
-M<mach> print on machine <mach>
|
|
-Q put task only into the queue
|
|
-R restart printer daemon
|
|
-c<n> make <n> copies
|
|
-f<font.size> specify font and size
|
|
-i<src> take media from <src> input bin
|
|
-l<n> print <n> lines per logical page
|
|
-m<n> magnify <n> times
|
|
-n<n> print <n> logical pages per physical page
|
|
-o<i-j,k> print only pages i-j and k
|
|
-r reverse pages
|
|
-u<userid> print as <userid>
|
|
-x<n> x page offset in inches
|
|
-y<n> y page offset in inches
|
|
'
|
|
|
|
# umask 000 # this doesn't work in plan 9
|
|
if (~ $#sysname 0)
|
|
THIS_HOST=plan9
|
|
if not {
|
|
THIS_HOST=`{ndb/query sys $sysname dom}
|
|
if(~ $#THIS_HOST 0)
|
|
THIS_HOST=$sysname
|
|
}
|
|
|
|
LPMACHID=$THIS_HOST
|
|
THIS_USERID=$user
|
|
LPUSERID=$THIS_USERID
|
|
LPLOC=''
|
|
|
|
# Set default printer to be output device
|
|
if (~ $#LPDEST 0 && test -f $LPLIB/defdevice) LPDEST=`{cat $LPLIB/defdevice}
|
|
|
|
# option parameters
|
|
COPIES=1
|
|
FONT=''
|
|
IBIN=''
|
|
KILLFLAG=0
|
|
LAND=''
|
|
LINES=''
|
|
LPQ=0
|
|
MAG=''
|
|
NOHEAD=''
|
|
NPAG=''
|
|
OLIST=''
|
|
POINT=''
|
|
RESET=''
|
|
REVERSE=''
|
|
QONLY=''
|
|
TRAY=''
|
|
XOFF=''
|
|
YOFF=''
|
|
|
|
# Process options
|
|
flagfmt='D,H,L,Q,R,r,q,M mach,c copies,d printer,f font.size,i src,k jobnos,l lines,m magnify,n lpages,o pages,p proc,u userid,x offset,y offset'
|
|
argv0=lp
|
|
|
|
if(! ifs=() eval `{aux/getflags $*}) {
|
|
echo $USAGE >[1=2]
|
|
exit usage
|
|
}
|
|
if(~ $flagd '?'){
|
|
awk 'BEGIN {print "device location host class"}
|
|
/^[^#]/ { printf "%-12s %-9s %-22s %s\n", $1, $2, $3, $6 }' $LPLIB/devices
|
|
exit
|
|
}
|
|
if(~ $flagp '?'){
|
|
ls $LPLIB/process
|
|
exit
|
|
}
|
|
|
|
if (! ~ $#flagD 0) { DEBUG=1; flag x + }; if not { DEBUG=''; flag x - }
|
|
if (! ~ $#flagH 0) NOHEAD=1
|
|
if (! ~ $#flagL 0) LAND=1
|
|
if (! ~ $#flagM 0 && ~ $LPUSERID daemon) LPMACHID=$flagM
|
|
if (! ~ $#flagQ 0) QONLY=1
|
|
if (! ~ $#flagR 0) RESET=1
|
|
if (! ~ $#flagc 0) COPIES=$flagc
|
|
if(! ~ $#flagd 0) LPDEST=$flagd
|
|
if (! ~ $#flagf 0) eval `{echo $flagf | sed -e 's/([^.]*)\.([0-9.]*)/FONT=\1;POINT=\2;/'}
|
|
if (! ~ $#flagi 0) IBIN=$flagi
|
|
if (! ~ $#flagk 0) KILLFLAG=1
|
|
if (! ~ $#flagl 0) LINES=$flagl
|
|
if (! ~ $#flagm 0) MAG=$flagm
|
|
if (! ~ $#flagn 0) NPAG=$flagn
|
|
if (! ~ $#flago 0) OLIST=-o^$flago
|
|
if (! ~ $#flagp 0) LPPROC=$flagp
|
|
if (! ~ $#flagq 0) LPQ=1
|
|
if (! ~ $#flagr 0) REVERSE=1
|
|
if (! ~ $#flagu 0) LPUSERID=$flagu
|
|
if (! ~ $#flagx 0) XOFF=$flagx
|
|
if (! ~ $#flagy 0) YOFF=$flagy
|
|
|
|
if (~ $#LPDEST 0) {
|
|
echo 'Set environment variable LPDEST or use the
|
|
''-d printer'' option to set the destination.' >[1=2]
|
|
exit 'LPDEST not set'
|
|
}
|
|
if (~ $LPDEST */*) { # handles MHCC destinations like mh/lino
|
|
LPLOC=`{echo $LPDEST|sed 's/^(.*)\/(.*)/\1/'}
|
|
LPDEST=`{echo $LPDEST|sed 's/^(.*)\/(.*)/\2/'}
|
|
}
|
|
|
|
# look up device, get info
|
|
LPDLINE=`{grep '^'$LPDEST'[ ]' $LPLIB/devices}
|
|
if (! ~ $status '') {
|
|
echo 'device '$LPDEST' is not in '$LPLIB'/devices' >[1=2]
|
|
exit 'LPDEST is bad'
|
|
}
|
|
LOC=$LPDLINE(2)
|
|
DEST_HOST=$LPDLINE(3)
|
|
OUTDEV=$LPDLINE(4)
|
|
SPEED=$LPDLINE(5)
|
|
LPCLASS=$LPDLINE(6)
|
|
if (~ $#LPPROC 0) LPPROC=$LPDLINE(7)
|
|
SPOOLER=$LPDLINE(8)
|
|
STAT=$LPDLINE(9)
|
|
KILL=$LPDLINE(10)
|
|
DAEMON=$LPDLINE(11)
|
|
SCHED=$LPDLINE(12)
|
|
|
|
if (~ $LPCLASS *nohead*)
|
|
NOHEAD=1
|
|
if (~ $LPCLASS *duplex*)
|
|
DUPLEX=1
|
|
|
|
if (~ $#SCHED 0) SCHED=FIFO # everyone uses FIFO
|
|
if (~ $KILLFLAG 1)
|
|
switch ($KILL) {
|
|
case -; echo kill option not available on $LPDEST >[1=2]
|
|
exit 'kill n/a'
|
|
case *; bind -b $LPLIB/kill /bin
|
|
exec $KILL $*
|
|
exit 'kill command '"$KILL"' not found'
|
|
}
|
|
if (~ $LPQ 1)
|
|
switch ($STAT) {
|
|
case -; echo queue status option not available on $LPDEST >[1=2]
|
|
exit 'stat option not available'
|
|
case *; bind -b $LPLIB/stat /bin
|
|
exec $STAT $* < /dev/null
|
|
exit 'stat command '"$STAT"' not found'
|
|
}
|
|
DATE=`{date}
|
|
LPLOG=$LPLOGDIR/$LPDEST
|
|
if (! test -e $LPLOG) {
|
|
>$LPLOG
|
|
chmod +rwa $LPLOG >[2]/dev/null
|
|
}
|
|
|
|
if (~ $RESET '') {
|
|
switch ($SPOOLER) {
|
|
case -; echo spooler does not exist for $LPDEST >[1=2]
|
|
exit 'no spooler'
|
|
case *; bind -b $LPLIB/spooler /bin
|
|
if (~ $#* 0) $SPOOLER
|
|
if not $SPOOLER $*
|
|
}
|
|
}
|
|
if not {
|
|
echo restarting daemon for printer $LPDEST >[1=2]
|
|
UNLOCK $LPSPOOL/$LPDEST
|
|
sleep 5
|
|
}
|
|
|
|
# run daemon
|
|
if (~ $QONLY '') {
|
|
if (! ~ $DAEMON -) {
|
|
bind -b $LPLIB/daemon /bin
|
|
$DAEMON $* >>$LPLOG >[2=1] &
|
|
}
|
|
}
|
|
exit ''
|