hpnpf A replacement backend for the CUPS socket backend ========================================================= DESCRIPTION This backend is based on HP's hpnpf utility (the sources of which have been freely availabel until 1992) and has been extended to safely report the backchannel messages from a JetDierect driven HP printer and - for PostScript printers only - to use the TBCP (Tagged Binary Communications Protocol) as defined by Adobe. The program can be run either as a CUPS backend or as a standalone utility, depending on the name it is called by: - if the name it is called with contains one of the strings '://' or 'backend/hpnpf' (the latter for use with the CUPS backend test utility), it runs as a CUPS backend, following the CUPS backend calling and input/output conventions. - otherwise, it runs as a standalone utility and accepts additional switches. INSTALLATION Unzip and untar the file hpnpf.tgz into a suitable directory. Within that directory, on SYSV UNIXes, run "make hpnpf", on Linux systems, run "make -f linux.mak hpnpf". (Don't try to make hpnptyd, this won't succeed.) On systems which do not/no longer support the good old varargs stuff but require the use of the new stdarg approach for variable argument lists, use make -f linux_std.mak or make -f sysv_std.mak for SYSV systems. For CUPS use, copy the compiled binary hpnpf to the CUPS backend directory, usually /usr/lib/cups/backend. For standalone use, copy the binary to e.g. /usr/local/bin. CUPS USAGE When configuring a CUPS printer for using this backend, the URI syntyx is much the same as for the standard socket backend: hpnpf://printername:port where port usually is 9100. To enable TBCP, append the string "/TBCP" to the URI, as: hpnpf://printername:port/TBCP The backend writes information to a printer specific log file, /var/log/cups/status_log.printername For each job printed, an identification line like INFO: [Mon Sep 11 11:08:08 2000] HPDIACOS.0001.SRZ0.11486.PS (1999) containing the current date, the job ID (much like the standard backend) and the job number. An info message like INFO: Printing: HPDIACOS.0001.SRZ0.11486.PS is written to stderr and thus captured by cupsd and available as status message. Any PostScript error messages are logged like: INFO: %%[ Error: rangecheck; OffendingCommand: getinterval ]%% These errors are passed as info messages to cupsd as: INFO: HPDIACOS.0001.SRZ0.11486.PS | %%[ Error: rangecheck; OffendingCommand: getinterval ]%% and thus available as the printer's status message. If no error occurred, a completion message is passed to cupsd like: INFO: Printed: HPDIACOS.0001.SRZ0.11486.PS For debugging, you may append "-D" to the device-URI. In this case, any PJL commands and replies are logged to the printer specific status log file as specified above, and debugging messages from hpnpf are written to /var/log/cups/printername.log. STANDALONE USAGE Called without any parameters the following usage message is printed to stderr: usage: hpnpf -x periph [-c port] [-nNPrRSTvwW] [-p port] [-s statusfile] [-l logfile] file ... -n (PLC only) map LF->CRLF, FF->CRFF -N map LF->CRLF physically -P (PostScript only) print banner page -r run in relay mode -R do no retries if connection fails -S delete all CRs -T (PostScript only) use TBCP (Tagged Binary Communcations Protocol) -v verbose mode -w wait for the job to be completed -W as -w, additionally display all PJL commands and replies -c port control port number (for relay mode only) -x periph name or IP addr of printer -p port port number to connect with -s statusfile file to which status messages are written; default: stdout -l logfile file to which logging messages are written (- : stderr) file ... files to be printed; read from stdin if no files are given The -w switch enables the logging of the PostScript messages, the -W switch additionally logs the PJL commands and replies, -T enables the TBCP protocol. All other switches have the same meaning as of the original hpnpf (but haven't been fully tested with this version).