xref: /plan9/sys/lib/lp/process/generic (revision d40255d87ccd1acd15b87823a96efd7b6296fadd)
13e12c5d1SDavid du Colombier#!/bin/rc
23e12c5d1SDavid du Colombier# Tries to determine what type of file you are printing and do the correct
33e12c5d1SDavid du Colombier# thing with it.
47dd7cddfSDavid du Colombier# It currently knows about images, troff intermediate, and ascii files.
501a344a2SDavid du Colombierrfork e
601a344a2SDavid du Colombiertemp=/tmp/lp$pid
701a344a2SDavid du Colombierfn sigexit { rm -f $temp }
801a344a2SDavid du Colombierproc=$LPLIB/process
901a344a2SDavid du Colombier
1001a344a2SDavid du Colombierif (! ~ $DEBUG '')
1101a344a2SDavid du Colombier	flag x +
1201a344a2SDavid du Colombiercat >$temp
1301a344a2SDavid du Colombier
1401a344a2SDavid du Colombiertype=`{file $temp}
1501a344a2SDavid du Colombierswitch ($type(2)) {
1601a344a2SDavid du Colombiercase troff
173e12c5d1SDavid du Colombier	switch ($LPCLASS) {
1801a344a2SDavid du Colombier	case *Latin1* *post* *opost*
1901a344a2SDavid du Colombier		switch ($type(5)) {
2001a344a2SDavid du Colombier		# Latin1 is for compatibility with old research UNIX systems,
2101a344a2SDavid du Colombier		# doesn't work on Plan 9
2201a344a2SDavid du Colombier		case Latin1 post
2301a344a2SDavid du Colombier			tcs -s -f utf -t latin1 <$temp | $proc/dpost
2401a344a2SDavid du Colombier		case UTF
2501a344a2SDavid du Colombier			$proc/tr2post <$temp
263e12c5d1SDavid du Colombier		}
2701a344a2SDavid du Colombier	case *gs!* *gsijs!*
2801a344a2SDavid du Colombier		switch ($type(5)) {
2901a344a2SDavid du Colombier		# Latin1 is for compatibility with old research UNIX systems,
3001a344a2SDavid du Colombier		# doesn't work on Plan 9
3101a344a2SDavid du Colombier		case Latin1 post
3201a344a2SDavid du Colombier			tcs -s -f utf -t latin1 <$temp | $proc/dpost |
3301a344a2SDavid du Colombier				$proc/gspipe
3401a344a2SDavid du Colombier		case UTF
3501a344a2SDavid du Colombier			$proc/tr2post <$temp | $proc/gspipe
3659cc4ca5SDavid du Colombier		}
3701a344a2SDavid du Colombier	case *
3801a344a2SDavid du Colombier		echo $type(2) -T$type(5) output is improper for $LPDEST >[1=2]
393e12c5d1SDavid du Colombier	}
4001a344a2SDavid du Colombiercase special
4101a344a2SDavid du Colombier	switch ($type(4)) {
4201a344a2SDavid du Colombier	case '#b'
433e12c5d1SDavid du Colombier		switch ($LPCLASS) {
4401a344a2SDavid du Colombier		case *post*
4501a344a2SDavid du Colombier			$proc/p9bitpost <$temp
4601a344a2SDavid du Colombier		case *gs!*
4701a344a2SDavid du Colombier			$proc/p9bitpost <$temp | $proc/gspipe
4801a344a2SDavid du Colombier		case *gsijs!*
4901a344a2SDavid du Colombier			$proc/p9bitpost <$temp | $proc/gspipeijs
503e12c5d1SDavid du Colombier		}
5101a344a2SDavid du Colombier	case *
5201a344a2SDavid du Colombier		echo $type file is improper for $LPDEST >[1=2]
5301a344a2SDavid du Colombier	}
54c4c15b37SDavid du Colombiercase Compressed plan old subfont
5501a344a2SDavid du Colombier	# type is really 'Compressed image' or 'plan 9 image' or
5601a344a2SDavid du Colombier	# 'old plan 9 image'
57c4c15b37SDavid du Colombier	# 'subfont' is to cope with a bug in png (writing wrong length),
58c4c15b37SDavid du Colombier	# 6 may 2008
597dd7cddfSDavid du Colombier	switch ($LPCLASS) {
6001a344a2SDavid du Colombier	case *post*
6101a344a2SDavid du Colombier		$proc/p9bitpost <$temp
6201a344a2SDavid du Colombier	case *gs!*
6301a344a2SDavid du Colombier		$proc/p9bitpost <$temp | $proc/gspipe
6401a344a2SDavid du Colombier	case *gsijs!*
6501a344a2SDavid du Colombier		$proc/p9bitpost <$temp | $proc/gspipeijs
667dd7cddfSDavid du Colombier	}
6701a344a2SDavid du Colombiercase jpeg
687dd7cddfSDavid du Colombier	switch ($LPCLASS) {
6901a344a2SDavid du Colombier	case *post*
7001a344a2SDavid du Colombier		$proc/jpgpost <$temp
7101a344a2SDavid du Colombier	case *gs!*
7201a344a2SDavid du Colombier		$proc/jpgpost <$temp | $proc/gspipe
7301a344a2SDavid du Colombier	case *gsijs!*
7401a344a2SDavid du Colombier		$proc/jpgpost <$temp | $proc/gspipeijs
757dd7cddfSDavid du Colombier	}
7601a344a2SDavid du Colombiercase GIF
7701a344a2SDavid du Colombier	switch ($LPCLASS) {
7801a344a2SDavid du Colombier	case *post*
7901a344a2SDavid du Colombier		$proc/gifpost <$temp
8001a344a2SDavid du Colombier	case *gs!*
8101a344a2SDavid du Colombier		$proc/gifpost <$temp | $proc/gspipe
8201a344a2SDavid du Colombier	case *gsijs!*
8301a344a2SDavid du Colombier		$proc/gifpost <$temp | $proc/gspipeijs
8401a344a2SDavid du Colombier	}
850dc12738SDavid du Colombiercase PNG
860dc12738SDavid du Colombier	switch ($LPCLASS) {
870dc12738SDavid du Colombier	case *post*
880dc12738SDavid du Colombier		$proc/pngpost <$temp
890dc12738SDavid du Colombier	case *gs!*
900dc12738SDavid du Colombier		$proc/pngpost <$temp | $proc/gspipe
910dc12738SDavid du Colombier	case *gsijs!*
920dc12738SDavid du Colombier		$proc/pngpost <$temp | $proc/gspipeijs
930dc12738SDavid du Colombier	}
940dc12738SDavid du Colombiercase ccitt-g31
95219b2ee8SDavid du Colombier	switch ($LPCLASS) {
9601a344a2SDavid du Colombier	case *post*
9701a344a2SDavid du Colombier		$proc/g3post <$temp
9801a344a2SDavid du Colombier	case *gs!*
9901a344a2SDavid du Colombier		$proc/g3post <$temp | $proc/gspipe
10001a344a2SDavid du Colombier	case *gsijs!*
10101a344a2SDavid du Colombier		$proc/g3post <$temp | $proc/gspipeijs
102219b2ee8SDavid du Colombier	}
10301a344a2SDavid du Colombiercase bitmap
104219b2ee8SDavid du Colombier	# bitmap for research UNIX compatibility, does not work on Plan 9.
1053e12c5d1SDavid du Colombier	switch ($LPCLASS) {
10601a344a2SDavid du Colombier	case *post*
10701a344a2SDavid du Colombier		$proc/bpost <$temp
10801a344a2SDavid du Colombier	case *mhcc*
10901a344a2SDavid du Colombier		$proc/bpost <$temp | $proc/mhcc
11001a344a2SDavid du Colombier	case *
11101a344a2SDavid du Colombier		echo $type(2) file is improper for $LPDEST >[1=2]
1123e12c5d1SDavid du Colombier	}
11301a344a2SDavid du Colombiercase tex
11401a344a2SDavid du Colombier	mv $temp $temp.dvi
11501a344a2SDavid du Colombier	temp=$temp.dvi
1163e12c5d1SDavid du Colombier	switch ($LPCLASS) {
11701a344a2SDavid du Colombier	case *post*
11801a344a2SDavid du Colombier		$proc/dvipost $temp
11901a344a2SDavid du Colombier	case *gs!*
12001a344a2SDavid du Colombier		$proc/dvipost $temp | $proc/gspipe
12101a344a2SDavid du Colombier	case *gsijs!*
12201a344a2SDavid du Colombier		$proc/dvipost $temp | $proc/gspipeijs
12301a344a2SDavid du Colombier	case *
12401a344a2SDavid du Colombier		echo $type(2) file is improper for $LPDEST >[1=2]
1253e12c5d1SDavid du Colombier	}
12601a344a2SDavid du Colombiercase postscript
1273e12c5d1SDavid du Colombier	switch ($LPCLASS) {
12801a344a2SDavid du Colombier	case *post*
12901a344a2SDavid du Colombier		$proc/post <$temp
13001a344a2SDavid du Colombier	case *gs!*
13101a344a2SDavid du Colombier		$proc/post <$temp | $proc/gspipe
13201a344a2SDavid du Colombier	case *gsijs!*
13301a344a2SDavid du Colombier		$proc/post <$temp | $proc/gspipeijs
13401a344a2SDavid du Colombier	case *
13501a344a2SDavid du Colombier		echo $type(2) file is improper for $LPDEST >[1=2]
1363e12c5d1SDavid du Colombier	}
1373b86f2f8SDavid du Colombiercase HPJCL HP
1387dd7cddfSDavid du Colombier	switch ($LPCLASS) {
13901a344a2SDavid du Colombier	case *HPJCL*
14001a344a2SDavid du Colombier		$proc/noproc <$temp
14101a344a2SDavid du Colombier	case *
14201a344a2SDavid du Colombier		echo $type(2) file is improper for $LPDEST >[1=2]
1437dd7cddfSDavid du Colombier	}
14401a344a2SDavid du Colombiercase daisy
1453e12c5d1SDavid du Colombier	switch ($LPDEST) {
14601a344a2SDavid du Colombier	case *
14701a344a2SDavid du Colombier		echo $type(2) file is improper for $LPDEST >[1=2]
1483e12c5d1SDavid du Colombier	}
14901a344a2SDavid du Colombiercase tiff
1503e12c5d1SDavid du Colombier	switch ($LPCLASS) {
15101a344a2SDavid du Colombier	case *post*
15201a344a2SDavid du Colombier		$proc/tiffpost $temp
15301a344a2SDavid du Colombier	case *gs!*
15401a344a2SDavid du Colombier		$proc/tiffpost $temp | $proc/gspipe
15501a344a2SDavid du Colombier	case *gsijs!*
15601a344a2SDavid du Colombier		$proc/tiffpost $temp | $proc/gspipeijs
15701a344a2SDavid du Colombier	case *
15801a344a2SDavid du Colombier		echo Unrecognized class of line printer for $LPDEST >[1=2]
15901a344a2SDavid du Colombier	}
16001a344a2SDavid du Colombiercase PDF
16101a344a2SDavid du Colombier	switch ($LPCLASS) {
162ea005eafSDavid du Colombier	case *pdf*
163ea005eafSDavid du Colombier#		if (~ $LPCLASS *duplex* && ~ $LPCLASS *HPJCL*)
164ea005eafSDavid du Colombier#			echo -n '&l1S'		# HP JCL: duplex on
165ea005eafSDavid du Colombier		if (~ $LPCLASS *duplex* && ~ $LPCLASS *HPJCL*) {
166ea005eafSDavid du Colombier			echo '%-12345X@PJL DEFAULT DUPLEX=ON'	# HP PJL
167ea005eafSDavid du Colombier			echo '%-12345X'
168ea005eafSDavid du Colombier			echo '%-12345X@PJL DEFAULT PS:MBT=ON'	# `memory boost'
169ea005eafSDavid du Colombier			echo '%-12345X'
170ea005eafSDavid du Colombier		}
171ea005eafSDavid du Colombier		cat $temp		# pass pdf unaltered to pdf printer
17201a344a2SDavid du Colombier	case *post*
17301a344a2SDavid du Colombier		$proc/pdfpost $temp
17401a344a2SDavid du Colombier	case *gs!*
17501a344a2SDavid du Colombier		$proc/pdfgs $temp
17601a344a2SDavid du Colombier	case *gsijs!*
17701a344a2SDavid du Colombier		$proc/pdfgsijs $temp
17801a344a2SDavid du Colombier	case *
17901a344a2SDavid du Colombier		echo Unrecognized class of line printer for $LPDEST >[1=2]
18001a344a2SDavid du Colombier	}
18114dd39c1SDavid du Colombiercase microsoft				# office document
18214dd39c1SDavid du Colombier	switch ($LPCLASS) {
18314dd39c1SDavid du Colombier	case *post*
18414dd39c1SDavid du Colombier		doc2ps $temp | $proc/post
18514dd39c1SDavid du Colombier	case *gs!*
18614dd39c1SDavid du Colombier		doc2ps $temp | $proc/post  | $proc/gspipe
18714dd39c1SDavid du Colombier	case *gsijs!*
18814dd39c1SDavid du Colombier		doc2ps $temp | $proc/post | $proc/gspipeijs
18914dd39c1SDavid du Colombier	case *
19014dd39c1SDavid du Colombier		echo $type(2) file is improper for $LPDEST >[1=2]
19114dd39c1SDavid du Colombier	}
19201a344a2SDavid du Colombiercase empty
19301a344a2SDavid du Colombier	echo file is empty >[1=2]
19401a344a2SDavid du Colombiercase cannot
19501a344a2SDavid du Colombier	echo cannot open file >[1=2]
196*d40255d8SDavid du Colombiercase English Cyrillic short extended alef limbo [Aa]scii assembler c latin rc sh \
197c4c15b37SDavid du Colombier    as mail email message/rfc822 manual HTML
19801a344a2SDavid du Colombier	switch ($LPCLASS) {
19901a344a2SDavid du Colombier	case *post*
20001a344a2SDavid du Colombier		$proc/ppost <$temp
20101a344a2SDavid du Colombier	case *gs!*
20201a344a2SDavid du Colombier		$proc/ppost <$temp | $proc/gspipe
20301a344a2SDavid du Colombier	case *gsijs!*
20401a344a2SDavid du Colombier		$proc/ppost <$temp | $proc/gspipeijs
20501a344a2SDavid du Colombier	case *canon*
20601a344a2SDavid du Colombier		$proc/can $* <$temp
20701a344a2SDavid du Colombier	case *
20801a344a2SDavid du Colombier		echo Unrecognized class of line printer for $LPDEST >[1=2]
20901a344a2SDavid du Colombier	}
21001a344a2SDavid du Colombiercase *
21101a344a2SDavid du Colombier	echo $type(2) file is improper for $LPDEST >[1=2]
2129a747e4fSDavid du Colombier}
2139a747e4fSDavid du Colombier
2147dd7cddfSDavid du Colombierwait
2153e12c5d1SDavid du Colombierrv=$status
21601a344a2SDavid du Colombierrm -f $temp
21701a344a2SDavid du Colombier# exit $rv
2189a747e4fSDavid du Colombierexit
219