Return to BSD News archive
Path: euryale.cc.adfa.oz.au!newshost.anu.edu.au!harbinger.cc.monash.edu.au!munnari.OZ.AU!spool.mu.edu!howland.reston.ans.net!gatech!news.mathworks.com!news.kei.com!nntp.coast.net!dispatch.news.demon.net!demon!awfulhak.demon.co.uk!awfulhak.demon.co.uk!awfulhak.demon.co.uk!not-for-mail From: brian@awfulhak.demon.co.uk (Brian Somers) Newsgroups: comp.unix.bsd.freebsd.misc Subject: Re: Printer filter file error Date: 18 Jul 1996 17:37:50 +0100 Organization: Coverform Ltd. Lines: 84 Message-ID: <4slp8u$hd@anorak.coverform.lan> References: <4sd8g1$ruk@slowmo.techfak.uni-kiel.de> <31EB1D42.493B@www.play-hookey.com> NNTP-Posting-Host: localhost.coverform.lan X-NNTP-Posting-Host: awfulhak.demon.co.uk X-Newsreader: TIN [version 1.2 PL2] Ken Bigelow (kbigelow@www.play-hookey.com) wrote: : Read the source (STDIN for the filter) one character at a time. If the : character is LF, send CR to the printer (STDOUT). In any case, then send : the character itself to STDOUT. : This filter is real simple in C or any language that can read the input : stream by characters, and won't skip any. Even simpler in sed: sed 's/$/^M/' (the ^M is an actual CTRL-M - got by typing CTRL-V followed by CTRL-M). So what about my problem. My filter script says: sed 's,$,^M,' $TmpFile >/tmp/LastPrint cat /tmp/LastPrint /tmp/LastPrint is correct, but the printer output is minus the first line, and gets truncated - at 1460 bytes (including the first line). I've modified the lpd code in two places (diffs at the bottom of this message) to allow printing across the network via a filter. Still, the code just attaches the tcp file descriptor to stdout on the output filter - so what could be going wrong ? I'm not sending *any* printer init strings. I've seen what appears to be a similar problem with doing a "telnet .... <<eof" command. It seems that when the EOF is read by the shell (bash/ash), it drops the tcp connection - even though the stuff before the eof isn't sent: telnet localhost 3000 <<eof set timeout 30 eof Does nothing. If I insert 10000 linefeeds between the second and third lines, it works...... Any suggestions ? TIA. My (unobtrusive) lpd diffs are: *** usr.sbin/lpr/lpd/printjob.c Thu May 9 11:29:56 1996 --- usr.sbin/lpr/lpd/printjob.c.orig Sat Sep 2 18:53:14 1995 *************** *** 215,221 **** i = strlen(line); if (write(lfd, line, i) != i) syslog(LOG_ERR, "%s: %s: %m", printer, LO); ! if (!remote || ofilter) i = printit(q->q_name); else i = sendit(q->q_name); --- 215,221 ---- i = strlen(line); if (write(lfd, line, i) != i) syslog(LOG_ERR, "%s: %s: %m", printer, LO); ! if (!remote) i = printit(q->q_name); else i = sendit(q->q_name); *************** *** 1259,1265 **** /* * Start up an output filter, if needed. */ ! if (OF) { int p[2]; char *cp; --- 1259,1265 ---- /* * Start up an output filter, if needed. */ ! if (!remote && OF) { int p[2]; char *cp; -- Brian <brian@awfulhak.demon.co.uk> Don't _EVER_ lose your sense of humour....