aboutsummaryrefslogtreecommitdiff
path: root/lp/process
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2005-08-31 02:15:26 +0000
committerrsc <devnull@localhost>2005-08-31 02:15:26 +0000
commit6174642093bdcef4116ae78dbdf4f2e608494258 (patch)
treeb916d25347295ee15b35434b92011b31fd76862c /lp/process
parent9f1d53a09bdd8f99e9f81a344c7fa6b5161e1359 (diff)
downloadplan9port-6174642093bdcef4116ae78dbdf4f2e608494258.tar.gz
plan9port-6174642093bdcef4116ae78dbdf4f2e608494258.tar.bz2
plan9port-6174642093bdcef4116ae78dbdf4f2e608494258.zip
Initial lp.
Diffstat (limited to 'lp/process')
-rwxr-xr-xlp/process/dvipost120
-rwxr-xr-xlp/process/g3post82
-rwxr-xr-xlp/process/generic108
-rwxr-xr-xlp/process/gifpost83
-rwxr-xr-xlp/process/hpost143
-rwxr-xr-xlp/process/jpgpost82
-rwxr-xr-xlp/process/noproc3
-rwxr-xr-xlp/process/p9bitpost83
-rwxr-xr-xlp/process/pdfgs78
-rwxr-xr-xlp/process/pdfpost76
-rwxr-xr-xlp/process/post68
-rwxr-xr-xlp/process/ppost98
-rwxr-xr-xlp/process/psextract60
-rwxr-xr-xlp/process/tr2post86
14 files changed, 1170 insertions, 0 deletions
diff --git a/lp/process/dvipost b/lp/process/dvipost
new file mode 100755
index 00000000..520aa395
--- /dev/null
+++ b/lp/process/dvipost
@@ -0,0 +1,120 @@
+#!/usr/local/plan9/bin/rc
+if (~ $DEBUG 1) flag x +
+# convert Tex dvi to PostScript
+PATCH='%!PS-Adobe-2.0'
+switch ($LPCLASS) {
+case *hp4simx*;
+ PATCH=$PATCH'
+%% set the default papertray to be the lower tray for HP4siMX printers
+ statusdict begin defaultpapertray end 1 ne {
+ statusdict begin
+ 1 setdefaultpapertray
+ end
+ } if'
+}
+for (i in `{echo $IBIN|awk -F, '{ n=split($0, a, ","); for (i=1;i<=n;i++) print a[i]; }'}) {
+ switch ($i) {
+ case man manual manualfeed;
+ PATCH=$PATCH'
+%%BeginFeature: *Select ManualFeed
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << /ManualFeed true >> setpagedevice
+ } {statusdict begin /manualfeed true def end} ifelse
+ } stopped cleartomark
+%%EndFeature'
+ case simplex;
+ DUPLEX=0
+ case [0-9];
+ switch ($LPCLASS) {
+ case *post2*;
+ switch ($i) {
+ case 0; PATCH=$PATCH'
+systemdict/languagelevel known {languagelevel 2 eq {true (0) startjob dup not
+{/exitserver errordict/invalidaccess get exec}if}{false}ifelse}{false}ifelse
+{
+ currentpagedevice/InputAttributes get {0 get} stopped
+ {pop pop} {2 dict dup /InputAttributes 1 dict dup
+ /Priority[0] put put dup /TraySwitch false put setpagedevice} ifelse
+ false (0) startjob pop
+} if'
+ case 1; PATCH=$PATCH'
+systemdict/languagelevel known {languagelevel 2 eq {true (0) startjob dup not
+{/exitserver errordict/invalidaccess get exec}if}{false}ifelse}{false}ifelse
+{
+ currentpagedevice/InputAttributes get {1 get} stopped
+ {pop pop} {2 dict dup /InputAttributes 1 dict dup
+ /Priority[1] put put dup /TraySwitch false put setpagedevice} ifelse
+ false (0) startjob pop
+} if'
+ }
+ case *; PATCH=$PATCH'
+statusdict begin $i setpapertray end'
+ }
+ case 11x17 ledger; PATCH=$PATCH'
+statusdict begin '$i'tray end'
+ }
+}
+if (! ~ $#DUPLEX 0) {
+ switch ($DUPLEX) {
+ case 0;
+ DUPLEX=false
+ case 1;
+ DUPLEX=true
+ }
+ PATCH=$PATCH'
+%%BeginFeature: *Set DuplexMode
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << /Duplex '$DUPLEX' >> setpagedevice
+ } {statusdict /setduplexmode known {statusdict begin '$DUPLEX' setduplexmode end} if} ifelse
+ } stopped cleartomark
+%%EndFeature'
+}
+if (! ~ $#LAND 0 && ~ $LAND 1)
+ LAND='-tlandscape'
+if (~ $LPCLASS *reverse*) {
+ switch ($REVERSE) {
+ case '';
+ REVFLAG=1
+ case 1;
+ REVFLAG=''
+ }
+}
+switch ($LPCLASS) {
+case *post100*;
+ DPI='-Z -D100'
+case *600dpi*;
+ DPI='-Z -D600'
+case *1200dpi*;
+ DPI='-Z -D1200'
+case *;
+ DPI=''
+}
+if (! ~ $COPIES '' -c*) COPIES=-c^$COPIES
+if (! ~ $OLIST '' '='*) OLIST=`{echo $OLIST | sed 's/-o/=/' | sed 's/-/:/g' }
+switch ($REVFLAG) {
+case 1;
+ echo $PATCH
+ switch ($OLIST) {
+ case '';
+ eval dvips -q -f $DPI -r $LAND $COPIES $1
+ case *;
+ DVIFILE=/tmp/dv$pid.dvi
+ dviselect -s $OLIST $1 > $DVIFILE
+ eval dvips -q -f $DPI -r $LAND $COPIES $DVIFILE
+ rm -f $DVIFILE
+ }
+ $LPLIB/process/hpost </dev/null
+case '';
+ $LPLIB/process/hpost </dev/null
+ echo $PATCH
+ switch ($OLIST) {
+ case '';
+ eval dvips -q -f $DPI $LAND $COPIES $1
+ case *;
+ DVIFILE=/tmp/dv$pid.dvi
+ dviselect -s $OLIST $1 > $DVIFILE
+ eval dvips -q -f $DPI $LAND $COPIES $DVIFILE
+ rm -f $DVIFILE
+ }
+}
+exit
diff --git a/lp/process/g3post b/lp/process/g3post
new file mode 100755
index 00000000..64063fed
--- /dev/null
+++ b/lp/process/g3post
@@ -0,0 +1,82 @@
+#!/usr/local/plan9/bin/rc
+# convert CCITT G3 Fax format to PostScript
+if (! ~ $DEBUG '') flag x +
+PATCH='%%Patch from lp'
+switch ($LPCLASS) {
+case *hp4simx*;
+ PATCH=$PATCH'
+%% set the default papertray to be the lower tray for HP4siMX printers
+ statusdict begin defaultpapertray end 1 ne {
+ statusdict begin
+ 1 setdefaultpapertray
+ end
+ } if'
+}
+for (i in `{echo $IBIN|awk -F, '{ n=split($0, a, ","); for (i=1;i<=n;i++) print a[i]; }'}) {
+ switch ($i) {
+ case -P*;
+ case man manual manualfeed;
+ PATCH=$PATCH'
+%%BeginFeature: *Select ManualFeed
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << /ManualFeed true >> setpagedevice
+ } {statusdict begin /manualfeed true def end} ifelse
+ } stopped cleartomark
+%%EndFeature'
+ case simplex;
+ DUPLEX=0
+ case [0-9];
+ PATCH=$PATCH'
+%%BeginFeature: *Select InputTray
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << '$i' << /MediaType (tray'$i') >> >>
+ << /MediaType (tray'$i') >> setpagedevice
+ } {statusdict begin '$i' setpapertray end} ifelse
+ } stopped cleartomark
+%%EndFeature'
+ case 11x17 [Ll]edger;
+ PATCH=$PATCH'
+%%BeginFeature: *Select Ledger
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << /PageSize [792 1224] >> setpagedevice
+ } {statusdict begin '$i'tray end} ifelse
+ } stopped cleartomark
+%%EndFeature'
+ case transparency vg viewgraph;
+ PATCH=$PATCH'
+%%BeginFeature: *Select Transparency
+[{ << /MediaType (Transparency) >> setpagedevice
+ } stopped cleartomark
+%%EndFeature'
+ case *;
+ echo illegal option ''''-i $i'''' >[1=2]
+ }
+}
+if (! ~ $#DUPLEX 0) {
+ switch ($DUPLEX) {
+ case 0;
+ DUPLEX=false
+ case 1;
+ DUPLEX=true
+ }
+ PATCH=$PATCH'
+%%BeginFeature: *Set DuplexMode
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << /Duplex '$DUPLEX' >> setpagedevice
+ } {statusdict /setduplexmode known {statusdict begin '$DUPLEX' setduplexmode end} if} ifelse
+ } stopped cleartomark
+%%EndFeature'
+}
+PATCH=$PATCH'
+%%EndPatch from lp'
+if (! ~ $PATCH '' -P*)
+ PATCH=-P$PATCH;
+
+if (~ $MAG '') MAG=1
+if (~ $MAG [.0-9]*) MAG=-m^$MAG^,^`{echo $MAG '*' 2 | hoc}
+
+if (! ~ $LAND '') LAND=-L
+if not LAND=()
+
+g3p9bit | p9bitpost $MAG $LAND $PATCH | $LPLIB/process/hpost
+exit
diff --git a/lp/process/generic b/lp/process/generic
new file mode 100755
index 00000000..3b793d2f
--- /dev/null
+++ b/lp/process/generic
@@ -0,0 +1,108 @@
+#!/usr/local/plan9/bin/rc
+# Tries to determine what type of file you are printing and do the correct
+# thing with it.
+# It currently knows about images, troff intermediate, and ascii files.
+TMPFILE=/tmp/lp$pid
+fn sigexit { rm -f $TMPFILE; }
+if (! ~ $DEBUG '') flag x +
+if (~ $LPCLASS *nohead*) NOHEAD=1
+if (~ $LPCLASS *duplex*) DUPLEX=1
+cat >$TMPFILE
+FILETYPE=`{file $TMPFILE}
+switch ($FILETYPE(2)) {
+case troff;
+ switch ($LPCLASS) {
+ case *Latin1* *post* *opost*; switch ($FILETYPE(5)) {
+ # Latin1 is for compatibility with old research UNIX systems, doesn't work on Plan 9
+ case Latin1 post; tcs -s -f utf -t latin1 < $TMPFILE |$LPLIB/process/dpost
+
+ case UTF; $LPLIB/process/tr2post < $TMPFILE
+ }
+
+ case *; echo $FILETYPE(2) -T$FILETYPE(5) output is improper for $LPDEST >[1=2]
+ }
+case special;
+ switch ($FILETYPE(4)) {
+ case '#b'; switch ($LPCLASS) {
+ case *post*; $LPLIB/process/p9bitpost < $TMPFILE
+ }
+
+ case *; echo $FILETYPE file is improper for $LPDEST >[1=2]
+ }
+case Compressed plan old; # type is really 'Compressed image' or 'plan 9 image'
+ # or 'old plan 9 image'
+ switch ($LPCLASS) {
+ case *post*; $LPLIB/process/p9bitpost < $TMPFILE
+ }
+case jpeg;
+ switch ($LPCLASS) {
+ case *post*; $LPLIB/process/jpgpost < $TMPFILE
+ }
+
+case GIF;
+ switch ($LPCLASS) {
+ case *post*; $LPLIB/process/gifpost < $TMPFILE
+ }
+
+case ccitt-g31;
+ switch ($LPCLASS) {
+ case *post*; $LPLIB/process/g3post < $TMPFILE
+ }
+
+# bitmap for research UNIX compatibility, does not work on Plan 9.
+case bitmap;
+ switch ($LPCLASS) {
+ case *post*; $LPLIB/process/bpost < $TMPFILE
+ case *mhcc*; $LPLIB/process/bpost < $TMPFILE | $LPLIB/process/mhcc
+ case *; echo $FILETYPE(2) file is improper for $LPDEST >[1=2]
+ }
+case tex;
+ mv $TMPFILE $TMPFILE.dvi
+ TMPFILE=$TMPFILE.dvi
+ switch ($LPCLASS) {
+ case *post*; $LPLIB/process/dvipost $TMPFILE
+ case *; echo $FILETYPE(2) file is improper for $LPDEST >[1=2]
+ }
+case postscript;
+ switch ($LPCLASS) {
+ case *post*; $LPLIB/process/post < $TMPFILE
+ case *; echo $FILETYPE(2) file is improper for $LPDEST >[1=2]
+ }
+case HPJCL;
+ switch ($LPCLASS) {
+ case *HPJCL*; $LPLIB/process/noproc < $TMPFILE
+ case *; echo $FILETYPE(2) file is improper for $LPDEST >[1=2]
+ }
+case daisy;
+ switch ($LPDEST) {
+ case *; echo $FILETYPE(2) file is improper for $LPDEST >[1=2]
+ }
+case English short extended alef limbo [Aa]scii ASCII assembler c latin rc sh as mail email message/rfc822;
+ switch ($LPCLASS) {
+ case *post*; $LPLIB/process/ppost < $TMPFILE
+ case *canon*; $LPLIB/process/can $* < $TMPFILE
+ case *; echo Unrecognized class of line printer for $LPDEST >[1=2]
+ }
+
+case tiff;
+ switch ($LPCLASS) {
+ case *post*; $LPLIB/process/tiffpost $TMPFILE
+ case *; echo Unrecognized class of line printer for $LPDEST >[1=2]
+ }
+case PDF;
+ switch ($LPCLASS) {
+ case *post*; $LPLIB/process/pdfpost $TMPFILE
+ case *; echo Unrecognized class of line printer for $LPDEST >[1=2]
+ }
+case empty;
+ echo file is empty >[1=2]
+case cannot;
+ echo cannot open file >[1=2]
+case *;
+ echo $FILETYPE(2) file is improper for $LPDEST >[1=2]
+}
+wait
+rv=$status
+rm -f $TMPFILE
+#exit $status
+exit
diff --git a/lp/process/gifpost b/lp/process/gifpost
new file mode 100755
index 00000000..d6afee29
--- /dev/null
+++ b/lp/process/gifpost
@@ -0,0 +1,83 @@
+#!/usr/local/plan9/bin/rc
+# convert CCITT G3 Fax format to PostScript
+if (! ~ $DEBUG '') flag x +
+PATCH='%%Patch from lp'
+switch ($LPCLASS) {
+case *hp4simx*;
+ PATCH=$PATCH'
+%% set the default papertray to be the lower tray for HP4siMX printers
+ statusdict begin defaultpapertray end 1 ne {
+ statusdict begin
+ 1 setdefaultpapertray
+ end
+ } if'
+}
+for (i in `{echo $IBIN|awk -F, '{ n=split($0, a, ","); for (i=1;i<=n;i++) print a[i]; }'}) {
+ switch ($i) {
+ case -P*;
+ case man manual manualfeed;
+ PATCH=$PATCH'
+%%BeginFeature: *Select ManualFeed
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << /ManualFeed true >> setpagedevice
+ } {statusdict begin /manualfeed true def end} ifelse
+ } stopped cleartomark
+%%EndFeature'
+ case simplex;
+ DUPLEX=0
+ case [0-9];
+ PATCH=$PATCH'
+%%BeginFeature: *Select InputTray
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << '$i' << /MediaType (tray'$i') >> >>
+ << /MediaType (tray'$i') >> setpagedevice
+ } {statusdict begin '$i' setpapertray end} ifelse
+ } stopped cleartomark
+%%EndFeature'
+ case 11x17 [Ll]edger;
+ PATCH=$PATCH'
+%%BeginFeature: *Select Ledger
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << /PageSize [792 1224] >> setpagedevice
+ } {statusdict begin '$i'tray end} ifelse
+ } stopped cleartomark
+%%EndFeature'
+ case transparency vg viewgraph;
+ PATCH=$PATCH'
+%%BeginFeature: *Select Transparency
+[{ << /MediaType (Transparency) >> setpagedevice
+ } stopped cleartomark
+%%EndFeature'
+ case *;
+ echo illegal option ''''-i $i'''' >[1=2]
+ }
+}
+if (! ~ $#DUPLEX 0) {
+ switch ($DUPLEX) {
+ case 0;
+ DUPLEX=false
+ case 1;
+ DUPLEX=true
+ }
+ PATCH=$PATCH'
+%%BeginFeature: *Set DuplexMode
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << /Duplex '$DUPLEX' >> setpagedevice
+ } {statusdict /setduplexmode known {statusdict begin '$DUPLEX' setduplexmode end} if} ifelse
+ } stopped cleartomark
+%%EndFeature'
+}
+PATCH=$PATCH'
+%%EndPatch from lp'
+if (! ~ $PATCH '' -P*)
+ PATCH=-P$PATCH;
+
+if (~ $MAG '') MAG=1
+if (~ $MAG [.0-9]*) MAG=-m^$MAG
+
+if (! ~ $LAND '') LAND=-L
+if not LAND=()
+
+/$cputype/bin/gif -t | /$cputype/bin/aux/p9bitpost $MAG $LAND $PATCH | $LPLIB/process/hpost
+exit
+
diff --git a/lp/process/hpost b/lp/process/hpost
new file mode 100755
index 00000000..169cb2ac
--- /dev/null
+++ b/lp/process/hpost
@@ -0,0 +1,143 @@
+#!/usr/local/plan9/bin/rc
+if (! ~ $DEBUG '') flag x +
+REVFLAG=''
+if (~ $LPCLASS *reverse*) {
+ switch ($REVERSE) {
+ case '';
+ REVFLAG=1
+ case 1;
+ REVFLAG=''
+ }
+}
+if (! ~ $REVFLAG '')
+ postreverse
+
+if (~ $NOHEAD '') {
+ DATE=`{date}
+ face='FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'
+ facedom=`{awk '{ if(match("'$LPMACHID'", $1)) {print $2; exit}}' $PLAN9/face/.machinelist}
+ if (~ $#facedom 0) facedom=$LPMACHID
+
+ facefile=`{awk '/^'$facedom'\/'$LPUSERID' /{print $2}' $PLAN9/face/48x48x4/.dict}
+ facedepth=4
+
+ if (~ $#facefile 0) {
+ facefile=`{awk '/^'$facedom'\/'$LPUSERID' /{print $2}' $PLAN9/face/48x48x2/.dict}
+ facedepth=2
+ }
+
+ if (~ $#facefile 0) {
+ facefile=`{awk '/^'$facedom'\/'$LPUSERID' /{print $2}' $PLAN9/face/48x48x1/.dict}
+ facedepth=1
+ }
+
+ if (~ $#facefile 0) {facefile=u/unknown.1; facedepth=1}
+ facefile=$PLAN9/face/48x48x$facedepth/$facefile
+
+ if (! ~ $#facefile 0 1)
+ facefile=$facefile(1)
+
+ if (~ $#facefile 0 || ! test -f $facefile ) {facefile=$PLAN9/face/48x48x2/u/unknown.1; facedepth=2}
+ if (test -r $facefile ) {
+ switch($facedepth){
+ case 1 2
+ face=`{cat $facefile |
+ sed -e 's/0x//g' -e 's/, *//g' |
+ tr 0123456789abcdef fedcba9876543210 };
+ case 4
+ face=`{iconv -u -c k4 $facefile |
+ dd -bs 60 -skip 1 >[2]/dev/null |
+ xd -b | sed 's/^[^ ]+ //;s/ //g' }
+ }
+ }
+}
+
+# We have to make sure the face information is set before rc sees the HERE file
+# so the cat has to be in a separate if statement. This is an rc bug.
+if (~ $NOHEAD '') cat <<EOF
+%!PS-Adobe-2.0 div 112 page header - research!pg
+/banner {
+ /saveobj save def
+ erasepage initgraphics
+ /#copies 1 def
+ /inch {72 mul} bind def
+ /pageborder {
+ 25 747 moveto
+ 590 747 lineto
+ 590 25 lineto
+ 25 25 lineto
+ closepath
+ 2 setlinewidth
+ 0 setgray
+ stroke
+ } def
+
+ /topborder {
+ 25 773 moveto
+ 590 773 lineto
+ 590 747 lineto
+ 25 747 lineto
+ closepath
+ 2 setlinewidth
+ 0 setgray
+ stroke
+ } def
+
+ /toptext {
+ 120 756 moveto
+ /Courier-Bold findfont 14 scalefont setfont
+ ($LPUSERID $DATE) show
+ } def
+
+ /prface {
+ gsave
+ translate rotate scale
+ setgray
+ 48 48 $facedepth [48 0 0 -48 0 48] {<$face>} image
+ grestore
+ } def
+EOF
+if (~ $NOHEAD '') switch ($LPCLASS) {
+case *hp4simx*;
+ echo '
+%% set the default papertray to be the lower tray for HP4siMX printers
+ statusdict begin defaultpapertray end 1 ne {
+ statusdict begin
+ 1 setdefaultpapertray
+ end
+ } if'
+}
+if (~ $NOHEAD '') cat <<EOF
+ statusdict /setduplexmode known {statusdict begin false setduplexmode end} if
+ statusdict begin /manualfeed false def end
+ pageborder
+ topborder
+ toptext
+ 0 14 14 0 94 752 prface
+ .3 180 180 -90 3.0 inch 10.2 inch prface
+ showpage
+ saveobj
+ restore
+} bind def
+banner
+EOF
+
+if (~ $REVFLAG '') cat
+exit ''
diff --git a/lp/process/jpgpost b/lp/process/jpgpost
new file mode 100755
index 00000000..0212ce89
--- /dev/null
+++ b/lp/process/jpgpost
@@ -0,0 +1,82 @@
+#!/usr/local/plan9/bin/rc
+# convert JPG to PostScript
+if (! ~ $DEBUG '') flag x +
+PATCH='%%Patch from lp'
+switch ($LPCLASS) {
+case *hp4simx*;
+ PATCH=$PATCH'
+%% set the default papertray to be the lower tray for HP4siMX printers
+ statusdict begin defaultpapertray end 1 ne {
+ statusdict begin
+ 1 setdefaultpapertray
+ end
+ } if'
+}
+for (i in `{echo $IBIN|awk -F, '{ n=split($0, a, ","); for (i=1;i<=n;i++) print a[i]; }'}) {
+ switch ($i) {
+ case -P*;
+ case man manual manualfeed;
+ PATCH=$PATCH'
+%%BeginFeature: *Select ManualFeed
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << /ManualFeed true >> setpagedevice
+ } {statusdict begin /manualfeed true def end} ifelse
+ } stopped cleartomark
+%%EndFeature'
+ case simplex;
+ DUPLEX=0
+ case [0-9];
+ PATCH=$PATCH'
+%%BeginFeature: *Select InputTray
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << '$i' << /MediaType (tray'$i') >> >>
+ << /MediaType (tray'$i') >> setpagedevice
+ } {statusdict begin '$i' setpapertray end} ifelse
+ } stopped cleartomark
+%%EndFeature'
+ case 11x17 [Ll]edger;
+ PATCH=$PATCH'
+%%BeginFeature: *Select Ledger
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << /PageSize [792 1224] >> setpagedevice
+ } {statusdict begin '$i'tray end} ifelse
+ } stopped cleartomark
+%%EndFeature'
+ case transparency vg viewgraph;
+ PATCH=$PATCH'
+%%BeginFeature: *Select Transparency
+[{ << /MediaType (Transparency) >> setpagedevice
+ } stopped cleartomark
+%%EndFeature'
+ case *;
+ echo illegal option ''''-i $i'''' >[1=2]
+ }
+}
+if (! ~ $#DUPLEX 0) {
+ switch ($DUPLEX) {
+ case 0;
+ DUPLEX=false
+ case 1;
+ DUPLEX=true
+ }
+ PATCH=$PATCH'
+%%BeginFeature: *Set DuplexMode
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << /Duplex '$DUPLEX' >> setpagedevice
+ } {statusdict /setduplexmode known {statusdict begin '$DUPLEX' setduplexmode end} if} ifelse
+ } stopped cleartomark
+%%EndFeature'
+}
+PATCH=$PATCH'
+%%EndPatch from lp'
+if (! ~ $PATCH '' -P*)
+ PATCH=-P$PATCH;
+
+if (~ $MAG '') MAG=1
+if (~ $MAG [.0-9]*) MAG=-m^$MAG
+
+if (! ~ $LAND '') LAND=-L
+if not LAND=()
+
+9 jpg -t9 | p9bitpost $MAG $LAND $PATCH -p 32 26.17 | $LPLIB/process/hpost
+exit
diff --git a/lp/process/noproc b/lp/process/noproc
new file mode 100755
index 00000000..c5cf1a8c
--- /dev/null
+++ b/lp/process/noproc
@@ -0,0 +1,3 @@
+#!/usr/local/plan9/bin/rc
+# No processing, copy file from input to output
+cat
diff --git a/lp/process/p9bitpost b/lp/process/p9bitpost
new file mode 100755
index 00000000..78b7de56
--- /dev/null
+++ b/lp/process/p9bitpost
@@ -0,0 +1,83 @@
+#!/usr/local/plan9/bin/rc
+# convert plan 9 image to PostScript
+if (~ $DEBUG 1) flag x +
+PATCH='%%Patch from lp'
+switch ($LPCLASS) {
+case *hp4simx*;
+ PATCH=$PATCH'
+%% set the default papertray to be the lower tray for HP4siMX printers
+ statusdict begin defaultpapertray end 1 ne {
+ statusdict begin
+ 1 setdefaultpapertray
+ end
+ } if'
+}
+for (i in `{echo $IBIN|awk -F, '{ n=split($0, a, ","); for (i=1;i<=n;i++) print a[i]; }'}) {
+ switch ($i) {
+ case -P*;
+ case man manual manualfeed;
+ PATCH=$PATCH'
+%%BeginFeature: *Select ManualFeed
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << /ManualFeed true >> setpagedevice
+ } {statusdict begin /manualfeed true def end} ifelse
+ } stopped cleartomark
+%%EndFeature'
+ case simplex;
+ DUPLEX=0
+ case [0-9];
+ PATCH=$PATCH'
+%%BeginFeature: *Select InputTray
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << '$i' << /MediaType (tray'$i') >> >>
+ << /MediaType (tray'$i') >> setpagedevice
+ } {statusdict begin '$i' setpapertray end} ifelse
+ } stopped cleartomark
+%%EndFeature'
+ case 11x17 [Ll]edger;
+ PATCH=$PATCH'
+%%BeginFeature: *Select Ledger
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << /PageSize [792 1224] >> setpagedevice
+ } {statusdict begin '$i'tray end} ifelse
+ } stopped cleartomark
+%%EndFeature'
+ case transparency vg viewgraph;
+ PATCH=$PATCH'
+%%BeginFeature: *Select Transparency
+[{ << /MediaType (Transparency) >> setpagedevice
+ } stopped cleartomark
+%%EndFeature'
+ case *;
+ echo illegal option ''''-i $i'''' >[1=2]
+ }
+}
+if (! ~ $#DUPLEX 0) {
+ switch ($DUPLEX) {
+ case 0;
+ DUPLEX=false
+ case 1;
+ DUPLEX=true
+ }
+ PATCH=$PATCH'
+%%BeginFeature: *Set DuplexMode
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << /Duplex '$DUPLEX' >> setpagedevice
+ } {statusdict /setduplexmode known {statusdict begin '$DUPLEX' setduplexmode end} if} ifelse
+ } stopped cleartomark
+%%EndFeature'
+}
+PATCH=$PATCH'
+%%EndPatch from lp'
+if (! ~ $PATCH '' -P*)
+ PATCH=-P$PATCH;
+if (! ~ $LAND '') LAND=-L
+if not LAND=()
+# if (! ~ $COPIES '' -c*) COPIES=-c^$COPIES
+if (! ~ $MAG '') MAG=-m^$MAG
+if (~ $MAG '') MAG=()
+# if (! ~ $NPAG '' -n*) NPAG=-n^$NPAG
+# if (! ~ $XOFF '' -x*) XOFF=-x^$XOFF
+# if (! ~ $YOFF '' -y*) YOFF=-y^$YOFF
+p9bitpost $MAG $LAND $PATCH | $LPLIB/process/hpost
+exit
diff --git a/lp/process/pdfgs b/lp/process/pdfgs
new file mode 100755
index 00000000..90c00c07
--- /dev/null
+++ b/lp/process/pdfgs
@@ -0,0 +1,78 @@
+#!/usr/local/plan9/bin/rc
+
+#
+# we don't go through postscript, because to
+# get to postscript, we send the pdf through gs!
+# much easier to just go directly.
+#
+
+# usage: pdfgs pdffile [gsdev]
+
+switch($#*) {
+case 2
+ GSDEVICE=$2
+case 1
+ GSDEVICE=`{echo $LPCLASS | sed 's/(.*\+)?gs!([^+]*)(\+.*)?/\2/'}
+case *
+ echo 'usage: pdfgs pdffile [gsdev]' >[1=2]
+}
+
+GSTMPFILE=/tmp/pdf^$pid
+GSOPT=('-sDEVICE='$GSDEVICE '-sOutputFile='^$GSTMPFILE -dSAFER -dNOPAUSE -dQUIET -dBATCH -dNOPAUSE)
+
+#
+# RSC: pswrite produces weird overbars on various
+# letters, most notably Times-Roman A and h, unless
+# we use LanguageLevel=1. This doesn't seem to be
+# constrained to hp4simx printers, so just use LanguageLevel 1
+# all the time.
+#
+
+#if(~ $dev pswrite && ~ $LPCLASS *hp4simx*)
+# GSOPT=($GSOPT '-dLanguageLevel=1')
+if(~ $GSDEVICE pswrite)
+ GSOPT=($GSOPT '-dLanguageLevel=1')
+
+if(~ $OLIST '')
+ gs $GSOPT $1
+if not {
+ PGLIST=`{echo $OLIST | sed 's/-o//;s/,/ /g;s/ / /g' | tr -cd '0-9 -'}
+ GSPGLIST=()
+ for(i in $PGLIST){
+ switch($i){
+ case -*
+ GSPGLIST=($GSPGLIST `{seq 1 `{echo $i|tr -d '-'}})
+ case *-
+ # BUG assume 100 >= number of pages
+ GSPGLIST=($GSPGLIST `{seq `{echo $i|tr -d '-'} 100})
+ case *-*
+ GSPGLIST=($GSPGLIST `{seq `{echo $i|tr '-' ' '}})
+ case *
+ GSPGLIST=($GSPGLIST $i)
+ }
+ }
+ GSPGLIST=$"GSPGLIST
+ echo '
+ /Page null def
+ /Page# 0 def
+ /PDFSave null def
+ /DSCPageCount 0 def
+ /DoPDFPage {dup /Page# exch store pdfgetpage pdfshowpage} def
+ GS_PDF_ProcSet begin
+ pdfdict begin
+ ('^$1^') (r) file pdfopen begin
+ /npage pdfpagecount def
+ ['^$GSPGLIST^']
+ {
+ dup dup
+ 1 ge exch npage le and
+ { DoPDFPage }
+ { pop }
+ ifelse
+ } forall
+ ' | gs $GSOPT - >/dev/null >[2=1]
+}
+
+cat $GSTMPFILE
+rm -f $GSTMPFILE
+exit ''
diff --git a/lp/process/pdfpost b/lp/process/pdfpost
new file mode 100755
index 00000000..3abde800
--- /dev/null
+++ b/lp/process/pdfpost
@@ -0,0 +1,76 @@
+#!/usr/local/plan9/bin/rc
+# convert PDF output to PostScript
+if (! ~ $DEBUG '') flag x +
+PATCH='%!PS
+%%Patch from lp'
+switch ($LPCLASS) {
+case *hp4simx*;
+ PATCH=$PATCH'
+%% set the default papertray to be the lower tray for HP4siMX printers
+ statusdict begin defaultpapertray end 1 ne {
+ statusdict begin
+ 1 setdefaultpapertray
+ end
+ } if'
+}
+for (i in `{echo $IBIN|awk -F, '{ n=split($0, a, ","); for (i=1;i<=n;i++) print a[i]; }'}) {
+ switch ($i) {
+ case -P*;
+ case man manual manualfeed;
+ PATCH=$PATCH'
+%%BeginFeature: *Select ManualFeed
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << /ManualFeed true >> setpagedevice
+ } {statusdict begin /manualfeed true def end} ifelse
+ } stopped cleartomark
+%%EndFeature'
+ case simplex;
+ DUPLEX=0
+ case [0-9];
+ PATCH=$PATCH'
+%%BeginFeature: *Select InputTray
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << /MediaType (tray'$i') >> setpagedevice
+ } {statusdict begin '$i' setpapertray end} ifelse
+ } stopped cleartomark
+%%EndFeature'
+ case 11x17 [Ll]edger;
+ PATCH=$PATCH'
+%%BeginFeature: *Select Ledger
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << /PageSize [792 1224] >> setpagedevice
+ } {statusdict begin '$i'tray end} ifelse
+ } stopped cleartomark
+%%EndFeature'
+ case transparency vg viewgraph;
+ PATCH=$PATCH'
+%%BeginFeature: *Select Transparency
+[{ << /MediaType (Transparency) >> setpagedevice
+ } stopped cleartomark
+%%EndFeature'
+ case *;
+ echo illegal option ''''-i $i'''' >[1=2]
+ }
+}
+if (! ~ $#DUPLEX 0) {
+ switch ($DUPLEX) {
+ case 0;
+ DUPLEX=false
+ case 1;
+ DUPLEX=true
+ }
+ PATCH=$PATCH'
+%%BeginFeature: *Set DuplexMode
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << /Duplex '$DUPLEX' >> setpagedevice
+ } {statusdict /setduplexmode known {statusdict begin '$DUPLEX' setduplexmode end} if} ifelse
+ } stopped cleartomark
+%%EndFeature'
+}
+PATCH=$PATCH'
+%%EndPatch from lp
+'
+echo $PATCH
+
+pdfgs $1 pswrite | $LPLIB/process/hpost
+exit ''
diff --git a/lp/process/post b/lp/process/post
new file mode 100755
index 00000000..63bf036b
--- /dev/null
+++ b/lp/process/post
@@ -0,0 +1,68 @@
+#!/usr/local/plan9/bin/rc
+if (! ~ $DEBUG '') flag x +
+PATCH='%!PS
+%%Patch from lp'
+switch ($LPCLASS) {
+case *hp4simx*;
+ PATCH=$PATCH'
+%% set the default papertray to be the lower tray for HP4siMX printers
+ statusdict begin defaultpapertray end 1 ne {
+ statusdict begin
+ 1 setdefaultpapertray
+ end
+ } if'
+}
+for (i in `{echo $IBIN|awk -F, '{ n=split($0, a, ","); for (i=1;i<=n;i++) print a[i]; }'}) {
+ switch ($i) {
+ case -P*;
+ case man manual manualfeed;
+ PATCH=$PATCH'
+%%BeginFeature: *Select ManualFeed
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << /ManualFeed true >> setpagedevice
+ } {statusdict begin /manualfeed true def end} ifelse
+ } stopped cleartomark
+%%EndFeature'
+ case simplex;
+ DUPLEX=0
+ case [0-9];
+ PATCH=$PATCH'
+%%BeginFeature: *Select InputTray
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << '$i' << /MediaType (tray'$i') >> >>
+ << /MediaType (tray'$i') >> setpagedevice
+ } {statusdict begin '$i' setpapertray end} ifelse
+ } stopped cleartomark
+%%EndFeature'
+ case 11x17 [Ll]edger;
+ PATCH=$PATCH'
+%%BeginFeature: *Select Ledger
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << /PageSize [792 1224] >> setpagedevice
+ } {statusdict begin '$i'tray end} ifelse
+ } stopped cleartomark
+%%EndFeature'
+ case transparency vg viewgraph;
+ PATCH=$PATCH'
+%%BeginFeature: *Select Transparency
+[{ << /MediaType (Transparency) >> setpagedevice
+ } stopped cleartomark
+%%EndFeature'
+ case *;
+ echo illegal option ''''-i $i'''' ignored >[1=2]
+ }
+}
+#if (! ~ $#DUPLEX 0) {
+# if (~ $DUPLEX 1 )
+# PATCH=$PATCH'
+#statusdict /setduplexmode known {statusdict begin true setduplexmode end} if';
+# if (~ $DUPLEX 0 )
+# PATCH=$PATCH'
+#statusdict /setduplexmode known {statusdict begin false setduplexmode end} if';
+#}
+PATCH=$PATCH'
+%%EndPatch from lp
+'
+
+{ echo $PATCH; psextract } | $LPLIB/process/hpost
+
diff --git a/lp/process/ppost b/lp/process/ppost
new file mode 100755
index 00000000..67436d3c
--- /dev/null
+++ b/lp/process/ppost
@@ -0,0 +1,98 @@
+#!/usr/local/plan9/bin/rc
+# converts a regular ascii file to PostScript
+if (! ~ $DEBUG '') flag x +
+PATCH='%%Patch from lp'
+switch ($LPCLASS) {
+case *hp4simx*;
+ PATCH=$PATCH'
+%% set the default papertray to be the lower tray for HP4siMX printers
+ statusdict begin defaultpapertray end 1 ne {
+ statusdict begin
+ 1 setdefaultpapertray
+ end
+ } if'
+}
+for (i in `{echo $IBIN | awk -F, '{ n=split($0, a, ","); for (i=1;i<=n;i++) print a[i]; }'}) {
+ switch ($i) {
+ case -P*;
+ case man manual manualfeed;
+ PATCH=$PATCH'
+%%BeginFeature: *Select ManualFeed
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << /ManualFeed true >> setpagedevice
+ } {statusdict begin /manualfeed true def end} ifelse
+ } stopped cleartomark
+%%EndFeature'
+ case simplex;
+ DUPLEX=0
+ case [0-9];
+ PATCH=$PATCH'
+%%BeginFeature: *Select InputTray
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << '$i' << /MediaType (tray'$i') >> >>
+ << /MediaType (tray'$i') >> setpagedevice
+ } {statusdict begin '$i' setpapertray end} ifelse
+ } stopped cleartomark
+%%EndFeature'
+ case 11x17 [Ll]edger;
+ PATCH=$PATCH'
+%%BeginFeature: *Select Ledger
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << /PageSize [792 1224] >> setpagedevice
+ } {statusdict begin '$i'tray end} ifelse
+ } stopped cleartomark
+%%EndFeature'
+ case transparency vg viewgraph;
+ PATCH=$PATCH'
+%%BeginFeature: *Select Transparency
+[{ << /MediaType (Transparency) >> setpagedevice
+ } stopped cleartomark
+%%EndFeature'
+ case *;
+ echo illegal option ''''-i $i'''' >[1=2]
+ }
+}
+if (! ~ $#DUPLEX 0) {
+ switch ($DUPLEX) {
+ case 0;
+ DUPLEX=false
+ case 1;
+ DUPLEX=true
+ }
+ PATCH=$PATCH'
+%%BeginFeature: *Set DuplexMode
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << /Duplex '$DUPLEX' >> setpagedevice
+ } {statusdict /setduplexmode known {statusdict begin '$DUPLEX' setduplexmode end} if} ifelse
+ } stopped cleartomark
+%%EndFeature'
+}
+PATCH=$PATCH'
+%%EndPatch from lp
+'
+if (! ~ $PATCH '' -P*)
+ PATCH=-P''''$PATCH'''';
+switch ($LAND) {
+case -p*;
+case ''; LAND=-pp
+case 1; LAND=-pl
+}
+if (! ~ $COPIES '' -c*) COPIES=-c^$COPIES
+switch ($FONT) {
+case ''; FONT=-f'Courier'
+case -f*;
+case *; FONT=-f$FONT
+}
+switch ($POINT) {
+case ''; POINT=-s10
+case -s*;
+case *; POINT=-s$POINT
+}
+if (! ~ $LINES '' -l*) LINES=-l^$LINES;
+if (! ~ $MAG '' -m*) MAG=-m^$MAG;
+if (! ~ $NPAG '' -n*) NPAG=-n^$NPAG;
+if (! ~ $XOFF '' -x*) XOFF=-x`{echo $XOFF + .4|hoc};
+if not XOFF=-x.4
+if (! ~ $YOFF '' -y*) YOFF=-y^$YOFF;
+eval $PLAN9/bin/text2post $FONT $XOFF $YOFF $COPIES $LINES $MAG $NPAG $POINT $LAND $OLIST $PATCH | $LPLIB/process/hpost
+exit
diff --git a/lp/process/psextract b/lp/process/psextract
new file mode 100755
index 00000000..55695a1c
--- /dev/null
+++ b/lp/process/psextract
@@ -0,0 +1,60 @@
+#!/usr/local/plan9/bin/rc
+
+# extract pages $OLIST from postscript on stdin
+
+if(~ $OLIST '')
+ exec cat
+
+awk '
+BEGIN {
+ x=ENVIRON["OLIST"];
+ gsub(/^-o/, "", x);
+ na = split(x, a, ",");
+ header = 1;
+ goodpage = 0;
+}
+
+header || goodpage {
+ print
+}
+
+/^%%EndSetup[ ]*$/ { header = 0; next }
+
+/^%%Page:/ {
+ header = 0;
+ p=$2+0;
+ goodpage = 0;
+ for(i=1; i<=na; i++){
+ if(aa=match(a[i], "-")){
+ low=substr(a[i], 1, RSTART);
+ high=substr(a[i], RSTART+RLENGTH);
+ if(low == "")
+ low = 0;
+ else
+ low = low+0;
+ if(high == "")
+ high = 100000;
+ else
+ high = high+0;
+ if(low <= p && p <= high){
+ goodpage = 1;
+ break;
+ }
+ }else{
+ if(a[i] == p){
+ goodpage = 1;
+ break;
+ }
+ }
+ }
+}
+
+/^%%EndPage[ ]*$/ {
+ goodpage = 0;
+}
+
+/^%%Trailer[ ]*$/ {
+ goodpage = 1;
+}
+
+'
diff --git a/lp/process/tr2post b/lp/process/tr2post
new file mode 100755
index 00000000..23d45ad3
--- /dev/null
+++ b/lp/process/tr2post
@@ -0,0 +1,86 @@
+#!/usr/local/plan9/bin/rc
+if (~ $DEBUG 1) flag x +
+# convert troff output to PostScript
+PATCH='%%Patch from lp'
+switch ($LPCLASS) {
+case *hp4simx*;
+ PATCH=$PATCH'
+%% set the default papertray to be the lower tray for HP4siMX printers
+ statusdict begin defaultpapertray end 1 ne {
+ statusdict begin
+ 1 setdefaultpapertray
+ end
+ } if'
+}
+for (i in `{echo $IBIN|awk -F, '{ n=split($0, a, ","); for (i=1;i<=n;i++) print a[i]; }'}) {
+ switch ($i) {
+ case -P*;
+ case man manual manualfeed;
+ PATCH=$PATCH'
+%%BeginFeature: *Select ManualFeed
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << /ManualFeed true >> setpagedevice
+ } {statusdict begin /manualfeed true def end} ifelse
+ } stopped cleartomark
+%%EndFeature'
+ case simplex;
+ DUPLEX=0
+ case [0-9];
+ PATCH=$PATCH'
+%%BeginFeature: *Select InputTray
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << '$i' << /MediaType (tray'$i') >> >>
+ << /MediaType (tray'$i') >> setpagedevice
+ } {statusdict begin '$i' setpapertray end} ifelse
+ } stopped cleartomark
+%%EndFeature'
+ case 11x17 [Ll]edger;
+ PATCH=$PATCH'
+%%BeginFeature: *Select Ledger
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << /PageSize [792 1224] >> setpagedevice
+ } {statusdict begin '$i'tray end} ifelse
+ } stopped cleartomark
+%%EndFeature'
+ case transparency vg viewgraph;
+ PATCH=$PATCH'
+%%BeginFeature: *Select Transparency
+[{ << /MediaType (Transparency) >> setpagedevice
+ } stopped cleartomark
+%%EndFeature'
+ case *;
+ echo illegal option ''''-i $i'''' >[1=2]
+ }
+}
+if (! ~ $#DUPLEX 0) {
+ switch ($DUPLEX) {
+ case 0;
+ DUPLEX=false
+ case 1;
+ DUPLEX=true
+ }
+ PATCH=$PATCH'
+%%BeginFeature: *Set DuplexMode
+[{ systemdict /languagelevel known {languagelevel 1 gt product (HP LaserJet 4Si) ne and} if {
+ << /Duplex '$DUPLEX' >> setpagedevice
+ } {statusdict /setduplexmode known {statusdict begin '$DUPLEX' setduplexmode end} if} ifelse
+ } stopped cleartomark
+%%EndFeature'
+}
+PATCH=$PATCH'
+%%EndPatch from lp
+'
+if (! ~ $PATCH '' -P*)
+ PATCH=-P''''$PATCH'''';
+switch ($LAND) {
+case -p*;
+case ''; LAND=-pp
+case 1; LAND=-pl
+}
+if (! ~ $COPIES '' -c*) COPIES=-c^$COPIES
+if (! ~ $MAG '' -m*) MAG=-m^$MAG
+if (! ~ $NPAG '' -n*) NPAG=-n^$NPAG
+if (! ~ $XOFF '' -x*) XOFF=-x^$XOFF
+if (! ~ $YOFF '' -y*) YOFF=-y^$YOFF
+eval tr2post $XOFF $YOFF $COPIES $MAG $NPAG $LAND $OLIST $PATCH | $LPLIB/process/hpost
+exit