Fixed now, I believe.

The problem is that the LaserJet 2100 was sending error messages like:

@PJL USTATUS TIMED
CODE=41900
...

and a comment in ifhp.c implies that the second line "may" be a value for
the variable at the end of the first.  I'm not a PJL expert, nor have I
looked at the PJL documentation, but it seems to me a reasonable
assumption that if the second line has an "=", it's not a value.  (Please
correct me if I'm wrong!)

In our case, I fixed this by moving the eq_line check up a bit, so that
the second line gets processed on its own in addition to being appended
to the first:

*** ifhp.c.orig    Wed Apr 17 19:13:47 2002
--- ifhp.c      Wed Apr 17 18:51:09 2002
***************
*** 733,738 ****
--- 733,739 ----
         * last entry may be a variable name and the next
         * line a value for it.  We need to append to the variable value
         */
+       eq_line = safestrchr( str, '=' );
        pjlline = !safestrncasecmp( str, "@PJL",4);
        if( pjlvar ){
                if( !pjlline && !ISNULL(str) ){
***************
*** 755,761 ****
                        SAFEFREE(pjlstatus); pjlstatus = 0;
                        pjlinfo = 0;
                }
!               if( !pjlline ) goto done;
        }

        if( (ps_str = safestrstr( str,"%%[" )) ){
--- 756,762 ----
                        SAFEFREE(pjlstatus); pjlstatus = 0;
                        pjlinfo = 0;
                }
!               if( (!pjlline) && (!eq_line) ) goto done;
        }

        if( (ps_str = safestrstr( str,"%%[" )) ){
***************
*** 766,772 ****
                c = cval(s);
                *s = 0;
        }
-       eq_line = safestrchr( str, '=' );
        if( s ) *s = c;

        /* now we check for xx=value entries */


_Rob



On April 15th, Rob Joyce wrote:

> Sorry to be a pain about status messages...
>
> If, say, the paper runs out in the middle of a job on an HP JetDirect
> printer, lpq reports only
>
> Status: processing 'dfA688printserver', size 136, format 'f', IF filter 'ifhp' at 
>19:12:51.441
> Filter_status: getting end using 'pjl job/eoj' at 19:13:03.961
>
> ...is there any way to have LPRng report the real printer error via lpq?
> tcpdump says the printer is indeed periodically sending
> @PJL.USTATUS.TIMED..CODE=41900..DISPLAY="TRAY.EMPTY"..ONLINE=FALSE (where
> the "." characters are just placeholders).
>
> lpd_printcap entry:
>
>   scribe
>       :server
>       :oh=printserver
>       :filter=/usr/local/libexec/filters/ifhp
>       :sd=/var/spool/lpd/%P
>       :lf=/var/spool/lpd/%P/log
>       :mx=0
>       :mc=0
>       :lp=scribe-pr%9100
>       :ifhp=model=hp2100
>
> Thanks for any insight,
> _Rob
>
>
> debug=4 excerpt:
>
>  Filter_status: Read_status_timeout: timeout 296, count 69 at 19:54:12.774
>  Filter_status: Read_status_timeout: read count 69, '@PJL USTATUS TIMED^M
>  Filter_status: CODE=41900^M
>  Filter_status: DISPLAY="TRAY EMPTY"^M
>  Filter_status: ONLINE=FALSE^M
>  Filter_status: ^L' at 19:54:12.774
>  Filter_status: Put_inbuf_len: buffer '@PJL USTATUS TIMED^M
>  Filter_status: CODE=41900^M
>  Filter_status: DISPLAY="TRAY EMPTY"^M
>  Filter_status: ONLINE=FALSE^M
>  Filter_status: ^L' at 19:54:12.774
>  Filter_status: Get_inbuf_str: found '@PJL USTATUS TIMED' at 19:54:12.775
>  Filter_status: Pr_status: start str '@PJL USTATUS TIMED', pjlvar '<NULL>', 
>pjlstatus '<NULL>' at 19:54:12.775
>  Filter_status: Pr_status: doing PJL status on '@PJL USTATUS TIMED' at 19:54:12.775
>  Filter_status: Pr_status: PJL var 'timed' at 19:54:12.775
>  Filter_status: Get_inbuf_str: found 'CODE=41900' at 19:54:12.776
>  Filter_status: Pr_status: start str 'CODE=41900', pjlvar 'timed', pjlstatus 
>'<NULL>' at 19:54:12.776
>  Filter_status: Pr_status: PJL var 'timed' append '<NULL>' + 'CODE=41900' at 
>19:54:12.776
>  Filter_status: Pr_status: pjlinfo '0', setting PJL var 'timed' to 'CODE=41900' at 
>19:54:12.776
>  Filter_status: Get_inbuf_str: found 'DISPLAY="TRAY EMPTY"' at 19:54:12.777
>  Filter_status: Pr_status: start str 'DISPLAY="TRAY EMPTY"', pjlvar '<NULL>', 
>pjlstatus '<NULL>' at 19:54:12.777
>  Filter_status: Check_device_status: 'DISPLAY="TRAY EMPTY"' at 19:54:12.777
>  Filter_status: Check_device_status: key 'DISPLAY', value '"TRAY EMPTY"' at 
>19:54:12.777
>  Filter_status: Get_inbuf_str: found 'ONLINE=FALSE' at 19:54:12.778
>  Filter_status: Pr_status: start str 'ONLINE=FALSE', pjlvar '<NULL>', pjlstatus 
>'<NULL>' at 19:54:12.778
>  Filter_status: Check_device_status: 'ONLINE=FALSE' at 19:54:12.778
>  Filter_status: Check_device_status: key 'ONLINE', value 'FALSE' at 19:54:12.778
>  Filter_status: Get_inbuf_str: found '' at 19:54:12.779
>  Filter_status: Pr_status: start str '', pjlvar '<NULL>', pjlstatus '<NULL>' at 
>19:54:12.779
>  Filter_status: Get_inbuf_str: final '' at 19:54:12.779
>  Filter_status: Do_waitend: len 0 at 19:54:12.779
>  Filter_status: Do_waitend - Devstatus - OBJ_T_HASH len 9 at 19:54:12.779
>  Filter_status:  [0] HASH key 'device'  - OBJ_T_STR 'CODE=41900' at 19:54:12.780
>  Filter_status:  [1] HASH key 'display'  - OBJ_T_STR '"TRAY EMPTY"' at 19:54:12.780
>  Filter_status:  [2] HASH key 'echo'  - OBJ_T_STR '[EMAIL PROTECTED]' at 
>19:54:12.780
>  Filter_status:  [3] HASH key 'id'  - OBJ_T_STR '"HP LaserJet 2100 Series"' at 
>19:54:12.780
>  Filter_status:  [4] HASH key 'job'  - OBJ_T_STR 'START' at 19:54:12.781
>  Filter_status:  [5] HASH key 'name'  - OBJ_T_STR '"19-53-58.164 PID 23206"' at 
>19:54:12.781
>  Filter_status:  [6] HASH key 'online'  - OBJ_T_STR 'FALSE' at 19:54:12.781
>  Filter_status:  [7] HASH key 'pagecount'  - OBJ_T_STR '82703' at 19:54:12.781
>  Filter_status:  [8] HASH key 'timed'  - OBJ_T_STR 'CODE=41900' at 19:54:12.782
>  Filter_status: Do_waitend: job 'START', name '"19-53-58.164 PID 23206"', result 
>'<NULL>', endname '19-53-58.164 PID 23206' at 19:54:12.782
>  Filter_status: Do_waitend: echo '[EMAIL PROTECTED]', want '19-53-58.164 
>PID 23206' at 19:54:12.782
>  Filter_status: Do_waitend: waitend '0' at 19:54:12.782
>  Filter_status: Do_waitend: Outlen 0 '' at 19:54:12.782
>
>



-----------------------------------------------------------------------------
YOU MUST BE A LIST MEMBER IN ORDER TO POST TO THE LPRNG MAILING LIST
The address you post from MUST be your subscription address

If you need help, send email to [EMAIL PROTECTED] (or lprng-requests
or lprng-digest-requests) with the word 'help' in the body.  For the impatient,
to subscribe to a list with name LIST,  send mail to [EMAIL PROTECTED]
with:                           | example:
subscribe LIST <mailaddr>       |  subscribe lprng-digest [EMAIL PROTECTED]
unsubscribe LIST <mailaddr>     |  unsubscribe lprng [EMAIL PROTECTED]

If you have major problems,  send email to [EMAIL PROTECTED] with the word
LPRNGLIST in the SUBJECT line.
-----------------------------------------------------------------------------

Reply via email to