xref: /plan9-contrib/sys/lib/lp/process/generic (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1#!/bin/rc
2# Tries to determine what type of file you are printing and do the correct
3# thing with it.
4# It currently knows about bitmaps, troff intermediate, and ascii files.
5TMPFILE=/tmp/lp$pid
6fn sigexit { rm -f $TMPFILE; }
7if (! ~ $DEBUG '') flag x +
8if (~ $LPCLASS *nohead*) NOHEAD=1
9if (~ $LPCLASS *duplex*) DUPLEX=1
10cat >$TMPFILE
11FILETYPE=`{file $TMPFILE}
12switch ($FILETYPE(2)) {
13case troff;
14	switch ($LPCLASS) {
15	case *Latin1* *post* *opost*;	switch ($FILETYPE(5)) {
16					# Latin1 is for compatibility with old research UNIX systems, doesn't work on Plan 9
17					case Latin1 post; tcs -s -f utf -t latin1 < $TMPFILE |$LPLIB/process/dpost
18
19					case UTF; $LPLIB/process/tr2post < $TMPFILE
20					}
21
22	# for Linotronics compatibility, does not work outside Bell Labs
23	case *lino*;	switch ($FILETYPE(5)) {
24			case *Latin1* *post*;	$LPLIB/process/dpost < $TMPFILE|$LPLIB/process/daps
25			case *;		echo $FILETYPE(2) -T$FILETYPE(5) output is improper for $LPDEST >[1=2]
26			}
27
28	# for sending jobs to our Comp Center printers, does not work outside Bell Labs.
29	case *mhcc*;	$LPLIB/process/dpost < $TMPFILE | $LPLIB/process/mhcc
30
31	case *;		echo $FILETYPE(2) -T$FILETYPE(5) output is improper for $LPDEST >[1=2]
32	}
33case special;
34	switch ($FILETYPE(4)) {
35	case '#b';	$LPLIB/process/p9bitpost < $TMPFILE
36	case *;		echo $FILETYPE file is improper for $LPDEST >[1=2]
37	}
38case plan;	# type is really 'plan 9 bitmap'
39	switch ($LPCLASS) {
40	case *post*;	$LPLIB/process/p9bitpost < $TMPFILE
41	}
42case ccitt-g31;
43	switch ($LPCLASS) {
44	case *post*;	$LPLIB/process/g3post < $TMPFILE
45	}
46
47# bitmap for research UNIX compatibility, does not work on Plan 9.
48case bitmap;
49	switch ($LPCLASS) {
50	case *lino*;	$LPLIB/process/bpost < $TMPFILE | $LPLIB/process/daps
51	case *post*;	$LPLIB/process/bpost < $TMPFILE
52	case *mhcc*;	$LPLIB/process/bpost < $TMPFILE | $LPLIB/process/mhcc
53	case *;		echo $FILETYPE(2) file is improper for $LPDEST >[1=2]
54	}
55case tex;
56	mv $TMPFILE $TMPFILE.dvi
57	TMPFILE=$TMPFILE.dvi
58	switch ($LPCLASS) {
59	case *lino*;	$LPLIB/process/dvipost -Tlino $TMPFILE | $LPLIB/process/daps
60	case *post*;	$LPLIB/process/dvipost $TMPFILE
61	case *202*;	dvit -T202 $TMPFILE | $LPLIB/process/d202
62	case *mhcc*;	$LPLIB/process/dvipost $TMPFILE | $LPLIB/process/mhcc
63	case *;		echo $FILETYPE(2) file is improper for $LPDEST >[1=2]
64	}
65case postscript;
66	switch ($LPCLASS) {
67	case *post*;		$LPLIB/process/post < $TMPFILE
68	case *aps* *lino*;	$LPLIB/process/daps < $TMPFILE
69	case *mhcc*;		$LPLIB/process/mhcc < $TMPFILE
70	case *;			echo $FILETYPE(2) file is improper for $LPDEST >[1=2]
71	}
72case daisy;
73	switch ($LPDEST) {
74	case *;		echo $FILETYPE(2) file is improper for $LPDEST >[1=2]
75	}
76case English short extended alef [Aa]scii assembler c latin rc sh as;
77	switch ($LPCLASS) {
78	case *post*;	$LPLIB/process/ppost < $TMPFILE
79	case *canon*;	$LPLIB/process/can $* < $TMPFILE
80	case *lino* *mhcc*; echo you want to send text to $LPDEST^'?' >[1=2]
81	case *;		echo Unrecognized class of line printer for $LPDEST >[1=2]
82	}
83case empty;
84	echo file is empty >[1=2]
85case cannot;
86	echo cannot open file >[1=2]
87case *;
88	echo $FILETYPE(2) file is improper for $LPDEST >[1=2]
89}
90rv=$status
91rm -f $TMPFILE
92exit $status
93