xref: /plan9/sys/lib/lp/process/generic (revision ec59a3ddbfceee0efe34584c2c9981a5e5ff1ec4)
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 images, 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	case *gs!* *gsijs!*;	switch ($FILETYPE(5)) {
23					# Latin1 is for compatibility with old research UNIX systems, doesn't work on Plan 9
24					case Latin1 post; tcs -s -f utf -t latin1 < $TMPFILE |$LPLIB/process/dpost |$LPLIB/process/gspipe
25
26					case UTF; $LPLIB/process/tr2post < $TMPFILE |$LPLIB/process/gspipe
27					}
28
29	case *;		echo $FILETYPE(2) -T$FILETYPE(5) output is improper for $LPDEST >[1=2]
30	}
31case special;
32	switch ($FILETYPE(4)) {
33	case '#b';		switch ($LPCLASS) {
34				case *post*;	$LPLIB/process/p9bitpost < $TMPFILE
35				case *gs!*;	$LPLIB/process/p9bitpost < $TMPFILE |$LPLIB/process/gspipe
36				case *gsijs!*;	$LPLIB/process/p9bitpost < $TMPFILE |$LPLIB/process/gspipeijs
37				}
38
39	case *;		echo $FILETYPE file is improper for $LPDEST >[1=2]
40	}
41case Compressed plan old;	# type is really 'Compressed image' or 'plan 9 image'
42				# or 'old plan 9 image'
43	switch ($LPCLASS) {
44	case *post*;	$LPLIB/process/p9bitpost < $TMPFILE
45	case *gs!*;	$LPLIB/process/p9bitpost < $TMPFILE |$LPLIB/process/gspipe
46	case *gsijs!*;	$LPLIB/process/p9bitpost < $TMPFILE |$LPLIB/process/gspipeijs
47	}
48case jpeg;
49	switch ($LPCLASS) {
50	case *post*;	$LPLIB/process/jpgpost < $TMPFILE
51	case *gs!*;	$LPLIB/process/jpgpost < $TMPFILE |$LPLIB/process/gspipe
52	case *gsijs!*;	$LPLIB/process/jpgpost < $TMPFILE |$LPLIB/process/gspipeijs
53	}
54
55case GIF;
56	switch ($LPCLASS) {
57	case *post*;	$LPLIB/process/gifpost < $TMPFILE
58	case *gs!*;	$LPLIB/process/gifpost < $TMPFILE |$LPLIB/process/gspipe
59	case *gsijs!*;	$LPLIB/process/gifpost < $TMPFILE |$LPLIB/process/gspipeijs
60	}
61
62case ccitt-g31;
63	switch ($LPCLASS) {
64	case *post*;	$LPLIB/process/g3post < $TMPFILE
65	case *gs!*;	$LPLIB/process/g3post < $TMPFILE |$LPLIB/process/gspipe
66	case *gsijs!*;	$LPLIB/process/g3post < $TMPFILE |$LPLIB/process/gspipeijs
67	}
68
69# bitmap for research UNIX compatibility, does not work on Plan 9.
70case bitmap;
71	switch ($LPCLASS) {
72	case *post*;	$LPLIB/process/bpost < $TMPFILE
73	case *mhcc*;	$LPLIB/process/bpost < $TMPFILE | $LPLIB/process/mhcc
74	case *;		echo $FILETYPE(2) file is improper for $LPDEST >[1=2]
75	}
76case tex;
77	mv $TMPFILE $TMPFILE.dvi
78	TMPFILE=$TMPFILE.dvi
79	switch ($LPCLASS) {
80	case *post*;	$LPLIB/process/dvipost $TMPFILE
81	case *gs!*;	$LPLIB/process/dvipost $TMPFILE |$LPLIB/process/gspipe
82	case *gsijs!*;	$LPLIB/process/dvipost $TMPFILE |$LPLIB/process/gspipeijs
83	case *;		echo $FILETYPE(2) file is improper for $LPDEST >[1=2]
84	}
85case postscript;
86	switch ($LPCLASS) {
87	case *post*;		$LPLIB/process/post < $TMPFILE
88	case *gs!*;		$LPLIB/process/post < $TMPFILE |$LPLIB/process/gspipe
89	case *gsijs!*;		$LPLIB/process/post < $TMPFILE |$LPLIB/process/gspipeijs
90	case *;			echo $FILETYPE(2) file is improper for $LPDEST >[1=2]
91	}
92case HPJCL;
93	switch ($LPCLASS) {
94	case *HPJCL*;		$LPLIB/process/noproc < $TMPFILE
95	case *;			echo $FILETYPE(2) file is improper for $LPDEST >[1=2]
96	}
97case daisy;
98	switch ($LPDEST) {
99	case *;		echo $FILETYPE(2) file is improper for $LPDEST >[1=2]
100	}
101case English short extended alef limbo [Aa]scii assembler c latin rc sh as mail email message/rfc822;
102	switch ($LPCLASS) {
103	case *post*;	$LPLIB/process/ppost < $TMPFILE
104	case *gs!*;	$LPLIB/process/ppost < $TMPFILE |$LPLIB/process/gspipe
105	case *gsijs!*;	$LPLIB/process/ppost < $TMPFILE |$LPLIB/process/gspipeijs
106	case *canon*;	$LPLIB/process/can $* < $TMPFILE
107	case *;		echo Unrecognized class of line printer for $LPDEST >[1=2]
108	}
109
110case tiff;
111	switch ($LPCLASS) {
112	case *post*;	$LPLIB/process/tiffpost $TMPFILE
113	case *gs!*;	$LPLIB/process/tiffpost $TMPFILE |$LPLIB/process/gspipe
114	case *gsijs!*;	$LPLIB/process/tiffpost $TMPFILE |$LPLIB/process/gspipeijs
115	case *;		echo Unrecognized class of line printer for $LPDEST >[1=2]
116	}
117case PDF;
118	switch ($LPCLASS) {
119	case *post*;	$LPLIB/process/pdfpost $TMPFILE
120	case *gs!*;	$LPLIB/process/pdfgs $TMPFILE
121	case *gsijs!*;	$LPLIB/process/pdfgsijs $TMPFILE
122	case *;		echo Unrecognized class of line printer for $LPDEST >[1=2]
123	}
124case empty;
125	echo file is empty >[1=2]
126case cannot;
127	echo cannot open file >[1=2]
128case *;
129	echo $FILETYPE(2) file is improper for $LPDEST >[1=2]
130}
131wait
132rv=$status
133rm -f $TMPFILE
134#exit $status
135exit
136