1: #!/bin/ksh
2: #
3: # Wrapper script for postprint on Solaris
4: #
5: # Pass files through the Solaris postprint utility,
6: # but only if they are not already postscript.
7: # Output is then piped directly to lp or lpr
8: #
9: # We do not process any files unless a default printer
10: # has been selected. The search list is $LPDEST,
11: # $PRINTER, the _default line in $HOME/.printers
12: # A printer may also be specified by option "-P printer"
13: #
14: # Any other options are passed on to postprint.
15: # This script knows about the postprint # options so
16: # it can skip over them and get to the filenames
17: #
18: # PROBLEMS
19: # - cat multiple postscript files into lpr is NOT
20: # the same as passing multiple filenames to postprint
21: # and piping the output to lpr. Postprint only generates
22: # one header, then multiple sets of data.
23: # This is why we need to insert each named file into
24: # the print queue directly.
25: #
26: # 2003/10/24 RB
27:
28: # Gather up the program options.
29: ppopts=
30: printer=
31: while getopts :c:f:l:m:n:o:p:r:s:t:x:y:P: opt
32: do
33: case $opt in
34: P)
35: printer=$OPTARG ;;
36: @(c|f|l|m|n|o|p|r|s|t|x|y))
37: ppopts="${ppopts} -${opt}$OPTARG" ;;
38: :)
39: print -u2 "$0: option \"-$OPTARG\" requires a value"
40: exit 2 ;;
41: \?)
42: print -u2 "$0: no such option \"-$OPTARG\""
43: exit 2 ;;
44: esac
45: done
46: shift OPTIND-1
47:
48: # Make sure we have a preferred printer set
49: # - don't rely on a system default.
50: printer=${printer:-$LPDEST}
51: printer=${printer:-$PRINTER}
52: printer=${printer:-$(grep '^_default' $HOME/.printers 2>/dev/null|awk '{print $2}')}
53: if [[ -z "$printer" ]]; then
54: print -u2 "$0: no preferred printer detected in LPDEST, PRINTER or .printers file"
55: exit 3
56: fi
57:
58: # Command to put stdin into the print queue.
59: # Use lpr rather than lp because it is less chatty
60: # printcmd="/usr/bin/lp -d$printer"
61: printcmd="/usr/ucb/lpr -P$printer"
62:
63: # Command to convert plain text to postscript.
64: # Use full path, since postprint, isn't in the path
65: ppcmd="/usr/lib/lp/postscript/postprint $ppopts"
66:
67: if [[ $# -gt 0 ]]; then
68: # we have one or more filenames on the command line
69: print -u2 -n "$0: sending to $printer: "
70: for file in "$@"; do
71: if [[ -f $file && -r $file ]]; then
72: # we have a real file
73: print -u2 -n "$file "
74: read line < $file
75: case $line in
76: %!*) cat $file | $printcmd ;;
77: *) $ppcmd $file | $printcmd ;;
78: esac
79: elif [[ $file = "-" ]]; then
80: # process stdin
81: print -u2 -n "(stdin) "
82: read line
83: case $line in
84: %!*) ( print -R $line; cat; ) | $printcmd ;;
85: *) ( print -R $line; cat; ) | $ppcmd | $printcmd ;;
86: esac
87: else
88: # invalid filename specified - non-fatal error; process remaining files
89: print -u2 "\n$0: invalid filename \"$file\" -- skipping"
90: continue
91: fi
92: done
93: print -u2
94: else
95: # no filenames specified -- process stdin
96: read line
97: case $line in
98: %!*) ( print -R $line; cat; ) | $printcmd ;;
99: *) ( print -R $line; cat; ) | $ppcmd | $printcmd ;;
100: esac
101: fi
102:
103: exit 0
| last modified 09/02/2006 | Introduction | Table of Contents (frame/no frame) |
Printable (single file) |
© Dartmouth College |