From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: To: 9fans@cse.psu.edu Subject: Re: [9fans] porting from vs. porting to Plan 9 From: okamoto@granite.cias.osakafu-u.ac.jp In-Reply-To: MIME-Version: 1.0 Mime-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Date: Mon, 20 Oct 2003 10:38:46 +0900 Topicbox-Message-UUID: 72e71ca0-eacc-11e9-9e20-41e7f4b1d025 > - "How do I handle PCMCIA and USB" > > I still think the last is the biggest deal. Hot-plug is really needed. When I connected my usb HP printer, I do followings: 1) run usbd 2) wakeup the usb port 3) print anything to that printer. In practice, I use following scripts for my work: (1) and (2) /rc/bin/psc2110lp =========================================== #!/bin/rc if(! ~ `{ps |grep usbd} *usbd) usb/usbd for(i in `{seq 20}){ if (grep -s '3 0x020107' '#U'/usb0/$i/status >[2]/dev/null){ echo -n 'ep 3 bulk w 64 32' >'#U'/usb0/$i/ctl bind '#U'/usb0/$i/ep3data /n/lp exit '' } } exit 'no printer' ================================ (2) /sys/lib/lp/devices have a line of ================================== # Hewlett-Packard All-in-One usb printer psc 2110 psc2110 Kenji-Home - /n/lp - gsijs!PSC+2100 generic nospool - - - - ================================== (3) change the /sys/lib/lp/process/generic to ============================================ #!/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 ====================================== (4) add a file as /sys/lib/lp/process/gspipeijs as#!/bin/rc ====================================== # extended to IJS driver by K.Okamoto if (! ~ $DEBUG '') flag x + # usage: gspipeijs [dev] # assumes postscript on stdin switch($#*) { case 0 MANUF=`{echo $LPCLASS | sed 's/(.*\+)?gsijs!([^+]*)(\+.*)?/\2/'} PRODCT=`{echo $LPCLASS | sed 's/(.*\+)?gsijs!([^+]*)\+(.*)?/\3/'} case 1 IJS=$1 case * echo 'usage: gspipeijs [dev]' >[1=2] exit gspipeijs } GSTMPFILE=/tmp/gsp$pid GSOPT=(-q '-sDEVICE=ijs' '-sIjsServer='hpijs '-sDeviceModel='"$MANUF^' '^$PRODCT" '-sOutputFile='^$GSTMPFILE '-sPAPERSIZE='a4 -dIjsUseOutputFD -dSAFER -dNOPAUSE ) gs $GSOPT - cat $GSTMPFILE rm $GSTMPFILE exit ====================================== (5) then, lp -dpsc2110 foo.ps Lastly, I hate lp system of Plan 9!!! Kenji