From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: <5f3b79b4d24b73c53e008e32664e8cba@plan9.bell-labs.com> From: David Presotto To: 9fans@cse.psu.edu Subject: Re: [9fans] AFPL Ghostscript-8.13 plus hpijs-1.5 In-Reply-To: <9fab7466fa083b26a6ea23adda6a8cb6@granite.cias.osakafu-u.ac.jp> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="upas-epzrgalvmugidxoojwcqqaidsj" Date: Tue, 24 Feb 2004 10:04:04 -0500 Topicbox-Message-UUID: f3b6018e-eacc-11e9-9e20-41e7f4b1d025 This is a multi-part message in MIME format. --upas-epzrgalvmugidxoojwcqqaidsj Content-Disposition: inline Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit I stuck your /sys/lib/lp/process/{generic,pdfgsijs} onto sources. --upas-epzrgalvmugidxoojwcqqaidsj Content-Type: message/rfc822 Content-Disposition: inline Received: from plan9.cs.bell-labs.com ([135.104.9.2]) by plan9; Tue Feb 17 20:29:35 EST 2004 Received: from mail.cse.psu.edu ([130.203.4.6]) by plan9; Tue Feb 17 20:29:32 EST 2004 Received: by mail.cse.psu.edu (CSE Mail Server, from userid 60001) id EA7EC19B2B; Tue, 17 Feb 2004 20:29:17 -0500 (EST) Received: from psuvax1.cse.psu.edu (psuvax1.cse.psu.edu [130.203.4.6]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id B5CFC19AF5; Tue, 17 Feb 2004 20:29:13 -0500 (EST) X-Original-To: 9fans@cse.psu.edu Delivered-To: 9fans@cse.psu.edu Received: by mail.cse.psu.edu (CSE Mail Server, from userid 60001) id 6221E19AD6; Tue, 17 Feb 2004 20:28:34 -0500 (EST) Received: from granite.cias.osakafu-u.ac.jp (granite.cias.osakafu-u.ac.jp [157.16.101.69]) by mail.cse.psu.edu (CSE Mail Server) with ESMTP id AD2AA19ABC for <9fans@cse.psu.edu>; Tue, 17 Feb 2004 20:28:30 -0500 (EST) Message-ID: <9fab7466fa083b26a6ea23adda6a8cb6@granite.cias.osakafu-u.ac.jp> To: okamoto@granite.cias.osakafu-u.ac.jp, 9fans@cse.psu.edu Subject: Re: [9fans] AFPL Ghostscript-8.13 plus hpijs-1.5 From: Kenji Okamoto MIME-Version: 1.0 Mime-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Sender: 9fans-admin@cse.psu.edu Errors-To: 9fans-admin@cse.psu.edu X-BeenThere: 9fans@cse.psu.edu X-Mailman-Version: 2.0.11 Precedence: bulk Reply-To: 9fans@cse.psu.edu List-Id: Fans of the OS Plan 9 from Bell Labs <9fans.cse.psu.edu> List-Archive: Date: Tue Feb 17 13:44:54 JST 2004 X-Spam-Checker-Version: SpamAssassin 2.63 (2004-01-11) on psuvax1.cse.psu.edu X-Spam-Status: No, hits=0.3 required=5.0 tests=UPPERCASE_25_50 autolearn=no version=2.63 X-Spam-Level: After one night sleep, I reminded two more necessary notes: 1) page program has to be modified a bit: ie. delete the -dSAFER flag from /sys/src/cmd/page/gs.c 2) to co-work with device ijs, pdf file must be converted to ps file prior to feed it to gs. For this reason, I have following /sys/lib/lp/process/generic and /sys/lib/lp/process/pdfgsijs files as follows: --------/sys/lib/lp/process/generic-------- #!/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 *gs!* *gsijs!*; 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 |$LPLIB/process/gspipe case UTF; $LPLIB/process/tr2post < $TMPFILE |$LPLIB/process/gspipe } 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 *gs!*; $LPLIB/process/p9bitpost < $TMPFILE |$LPLIB/process/gspipe case *gsijs!*; $LPLIB/process/p9bitpost < $TMPFILE |$LPLIB/process/gspipeijs } 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 *gs!*; $LPLIB/process/p9bitpost < $TMPFILE |$LPLIB/process/gspipe case *gsijs!*; $LPLIB/process/p9bitpost < $TMPFILE |$LPLIB/process/gspipeijs } case jpeg; switch ($LPCLASS) { case *post*; $LPLIB/process/jpgpost < $TMPFILE case *gs!*; $LPLIB/process/jpgpost < $TMPFILE |$LPLIB/process/gspipe case *gsijs!*; $LPLIB/process/jpgpost < $TMPFILE |$LPLIB/process/gspipeijs } case GIF; switch ($LPCLASS) { case *post*; $LPLIB/process/gifpost < $TMPFILE case *gs!*; $LPLIB/process/gifpost < $TMPFILE |$LPLIB/process/gspipe case *gsijs!*; $LPLIB/process/gifpost < $TMPFILE |$LPLIB/process/gspipeijs } case ccitt-g31; switch ($LPCLASS) { case *post*; $LPLIB/process/g3post < $TMPFILE case *gs!*; $LPLIB/process/g3post < $TMPFILE |$LPLIB/process/gspipe case *gsijs!*; $LPLIB/process/g3post < $TMPFILE |$LPLIB/process/gspipeijs } # 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 *gs!*; $LPLIB/process/dvipost $TMPFILE |$LPLIB/process/gspipe case *gsijs!*; $LPLIB/process/dvipost $TMPFILE |$LPLIB/process/gspipeijs case *; echo $FILETYPE(2) file is improper for $LPDEST >[1=2] } case postscript; switch ($LPCLASS) { case *post*; $LPLIB/process/post < $TMPFILE case *gs!*; $LPLIB/process/post < $TMPFILE |$LPLIB/process/gspipe case *gsijs!*; $LPLIB/process/post < $TMPFILE |$LPLIB/process/gspipeijs 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 assembler c latin rc sh as mail email message/rfc822; switch ($LPCLASS) { case *post*; $LPLIB/process/ppost < $TMPFILE case *gs!*; $LPLIB/process/ppost < $TMPFILE |$LPLIB/process/gspipe case *gsijs!*; $LPLIB/process/ppost < $TMPFILE |$LPLIB/process/gspipeijs 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 *gs!*; $LPLIB/process/tiffpost $TMPFILE |$LPLIB/process/gspipe case *gsijs!*; $LPLIB/process/tiffpost $TMPFILE |$LPLIB/process/gspipeijs case *; echo Unrecognized class of line printer for $LPDEST >[1=2] } case PDF; switch ($LPCLASS) { case *post*; $LPLIB/process/pdfpost $TMPFILE case *gs!*; $LPLIB/process/pdfgs $TMPFILE case *gsijs!*; $LPLIB/process/pdfgsijs $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 ---------end here------- --------/sys/lib/lp/process/pdfgsijs--------- #!/bin/rc # usage: pdfgsijs pdffile gs -dSAFER -dNOPAUSE -dBATCH -q -s'DEVICE=pswrite' -d'LanguageLevel=2' -s'OutputFile=/tmp/pdf2ps.ps' $1 MODEL=`{echo $LPCLASS | sed 's/(.*\+)?gsijs!([^+]*)(\+.*)?/\2/'} NUMBER=`{echo $LPCLASS | sed 's/(.*\+)?gsijs!([^+]*)\+(.*)?/\3/'} GSTMPFILE=/tmp/pdf^$pid switch($NUMBER) { case 2100 GSOPT=(-q -sDEVICE'='ijs -sIjsServer'='hpijs -sDeviceManufacturer'='HP '-sDeviceModel='"$MODEL^' '^$NUMBER" -r600 -sOutputFile'='^$GSTMPFILE -sPAPERSIZE'='a4 -dIjsUseOutputFD -dSAFER -dNOPAUSE -dBATCH) case 2500 GSOPT=(-q -sDEVICE'='ijs -sIjsServer'='hpijs -sDeviceManufacturer'='HP '-sDeviceModel='"$MODEL^' '^$NUMBER" -r600 -sOutputFile'='^$GSTMPFILE -dDuplex'='true -sPAPERSIZE'='a4 -dIjsUseOutputFD -dSAFER -dNOPAUSE -DBATCH) } if(~ $OLIST '') gs $GSOPT /tmp/pdf2ps.ps 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 rm -f /tmp/pdf2ps.ps exit '' -------to here------- 3) I'm using usb psc2550 here which is connected to a cpu server machine called "diabase" Then, for an example, I have /rc/bin/psc2550lp command like this: -------------/rc/bin/psc2550lp----------- #!/bin/rc if(! test -r /dev/usb1) import -a diabase '#'U /dev if(! ~ `{ps |grep usbd} *usbd) usb/usbd for(i in `{seq 20}){ if (grep -s '3 0x020107' /dev/usb1/$i/status >[2]/dev/null){ echo -n 'ep 3 bulk w 64 32' >/dev/usb1/$i/ctl bind /dev/usb1/$i/ep3data /n/lp exit '' } } exit 'no printer' ---------------end here--------- To use this command on acme, Local psc2550lp then lp -dpsc2550 foo.pdf 4) my /sys/lib/lp/devices line for psc2550 is as follows: # Hewlett-Packard All-in-One Printer PSC 2500 psc2550 ThisRoom - /n/lp - gsijs!psc+2500 generic nospool - - - - Kenji --upas-epzrgalvmugidxoojwcqqaidsj--