mouse:~ppr/src/History.txt This file contains a history of changes to PPR which occured after the release of version 1.00. 1.00, 26 April 1995 First public release. 1.10, 27 April 1995--7 June 1995 Removed "From:" line from message passed to Sendmail by pprd when sending a message listing the remaining printer faults. This is so that Sendmail will take the "real name" from the password file and put it in the "From:" line. Removed dotmatrix/input.epson, a GIF file which had been inadvertently included in the distribution. Moved the contents of include/atalk_streams.h into interfaces/atalk_streams.c since it was not long enough to justify an include file, nor was it of interest to any other program. Added code to ppad to classify members of the group "ppradmin" as PPR addministrators who can edit printer and group configurations. Added -v switch to ppad. Removed uid's 1-99 from the list of priveledged users. Fixed ppad(8) so that it considers the group "ppradmin" as priveledged rather than "ppr". Changed ppr(1) so that it will accept the members of the group "pprprox" as priveledged as well as the members of "ppr". This is for security reasons as one may not want to grant a user who has the privedge of using the -f switch the priveledge of deleting other people's jobs. Modified ppop(1) and pprd(8) so that user's can request to see the queue entry for a single job. Previously, the only options were all jobs for a certain destination or all jobs in all queues. Rewrote and renamed the undocumented "ppop qdebug" command to become the new documented command "ppop details". (This was done primarily to support wwwppop, an experimental managment interface for PPR. Since it was still incomplete it was not released with this version of PPR.) Renamed interfaces/atalk_streams.c to atalk_ali.c and papsrv/papsrv_streams.c to papsrv_ali.c Removed code from "make dirs" so that it doesn't create the directory "/etc/ppr/groups.ppd". Added sleep=N and eoftimeout=N options to tcpip interface. Added -C _filename_ switch to ppr invokation in xppr. Added "-default okay" to xmessage invokation in xppr. Added the "ppop lpq" sub-command to the "ppop help" information, thus making it a documented sub-command. Extended automatic bin selection to multiple media types when "%%PageMedia:" comments are present. This has not yet been well tested. Made "%%EndProcset" an acceptable substitute for "%%EndProcSet" due to a reputed bug in QuickDraw GX. Changed rule in ppr_infile.c for detecting PCL code so that documents with only one escape would still be detected. 1.20, 8 June 1995--10 January 1996 Fixed code in ppr_infile.c so that the ppr -o switch will work even if there is no "DefFiltOpts:" line in the printer or group configuration file. Added '(' to list of likely second characters for HP escape codes in ppr_infile.c Replaced printing of errno value with strerror(errno) output in some places, eliminated printing of errno=x from other places where both were printed. Fixed ppr(1) so that it sets the environment variables "PATH", "IFS", and "SHELL" so that filters and responders it invokes are less easy to subvert. Removed setting of PATH from ~ppr/src/misc_filters/tex.perl and changed shell name from "/usr/bin/tainperl" to "/usr/bin/perl". Changed code which determins default responder address so that the environment variables "USER" and "LOGNAME" are used in preference to the current uid. Added prompts in Configure to set the directory into which the links to PPR binaries will be written and the path to the X-Windows binaries such as xterm. Modified papsrv so that it will pass the network and node number of the client to ppr with the -r switch. (This is for use with an experimental AppleTalk responder.) Modified papsrv.c, renaming cleanup() to termination_handler() and causing it to call fatal() only the first time it is called. Without this, name could be left on the network if the CAP version received two terminate signals in rapid sucession. Added code to re-line-wrap responder messages for certain responders. (The library function responder_width() returns the width for a responder. Currently it is hard coded to return zero for all responders except "samba". A return value of zero indicates that the message should not be re-line-wrapped.) Dropt reading of LPDEST and PRINTER by ppr(1). (I can not really remember why I put this feature in. I don't think the reasons where very good. It may have been that I thought that the same printer would be available thru two spooling systems so one might want to set the default destination for both with one variable. That now seems a little far fetched.) Separated Solaris and Starserver sections of sysdep.h Added PNG (Portable Network Graphics) format with magic number recognition to ppr_infile.c. This remains untested since I do not have any programs which manipulate this graphics format. In pprd.c, put sleep(1) between execl("pprdrv") and _exit(242) so that pprd has time to record the PID before the child exits. (If this is not done and execl() fails immediately, a child which should have become pprdrv may exit before the parent records its PID in the information structure for that queue. This result is that it will not recoginize the purpose of the child when it receives notification of its death and will leave the queue in the printing state indefinitely.) Did same in pprdrv.c in code which executes interface. Also changed _exit(255) to _exit(242). (Exit 242 is the new standard since PERL uses 255 as the exit code when die() is executed.) Added automatic creation of "DefFiltOpts:" lines to ppad(8). Manual creation is supported by the the "ppad deffiltopts" and "ppad group deffiltopts" command. Modified ppop so that interactive mode restores the terminal settings when it exits. Also changed terminal setting code to use the POSIX method of reading and setting terminal characteristics instead of the ioctl() method. Modified code in serial interface so that it reads the port settings and modifies them instead of writing entirely new settings. Added the experimental commentator "audio". Added HTML as an input file type. Auto-detect works if the file begins with the magic number "". Added -s to ar switches for Linux configuration in include/global.mk.master because this seems to be necessary with the tools supplied with Slackware 2.3.0. Fixed information on -S switch default in "ppr -?". The actual default is "true". Minor modifications to the DSC versions of the HP PPD files. Renamed pputc(), pputs(), pputline(), pflush(), pprintf(), post(), and quoted() in pprdrv to printer_putc(), printer_puts(), printer_putline(), printer_flush(), printer_printf(), printer_puts_escaped(), and printer_puts_QuotedValue() respectively. Fixed ppad so that "ppad -- switchset" can be used to work around brain-dead implemenations of getopt(). Fixed ppr2samba so that it would remove *~ (Emacs style backup) files from the /etc/ppr/printers and /etc/ppr/groups directories before building the dummy printcap file. Removed a bug from ppad_conf.c print_switchset() which would cause segmentation faults when displaying the configurations of printers or groups with switchsets defined. Fixed ppad_printer.c:printer_show() and ppad_group.c:group_show() so that they deallocate all the memory they allocate. Removed the experimental error trailer page code (which was not compiled in due to NEWCODE not being defined) from pprdrv_flag.c. Added "save/restore" and "newinterface" jobbreak methods. Modified pprd so that it makes pprdrv its own process and session group leader. (That is, pprd calls setsid() in the child half just after the fork(). Fixed pprdrv so it will only wait 60 seconds for commentators to exit. It they exists, hoping they will get SIGHUP. Limited argc feed to getopt() in ppad.c:main() to 2 or less so that it will not try to parse options in a switchset. This makes "ppad -- switchset" unnecessary. Fixed bug in pprdrv_flag.c:select_flag_media() which prevented banner and trailer pages from being printed on printers with no bins with mounted media defined. Going on the information that a mounted media list was found, it assumed that the printer had bins and did not regard the fact that it was reported to have zero bins. This bug was almost certainly introduced before version 1.00. Added /etc/ppr/mfmodes database and code in ppad(8) to automatically put a mfmode= in the DefFiltOpts:. Added a "*Product:" line with the true product name to my HP 4M and HP 4M Plus PPD files. Modified the DVI filter so that it will create dvips config files on the fly. Added a define called "A4" which causes filter output and banner pages to be formatted for A4 paper. Fixed ppop so that when displaying the names of the media a document is waiting for it does not display the second argument of the "Media:" line. Fixed pprsync so that it works with Linux but no longer re-starts papsrv. Fixed ppr/ppr_infile.c so that it will accept the file name "-" to mean stdin. Fixed pprd so that it will create /var/spool/ppr/logs with the permissions 755 instead of 700. Defined the global #defines VERSION and COPYRIGHT in version.h Added pprdrv_progress.c module. Added reporting of percent sent, pages started, and pages completed to queue display of currently printing job. Added indication of unfiltered and filtered size in bytes of the job to "ppop details". Replace use of sigpause() in pprdrv.c to wait for the SIGUSR1 that indicated that the interface had set up its SIGUSR1 handler with Posix sigsuspend(). Added a signal() macro for Linux to sysdep.h because the Linux signal() is System V compatible, not BSD compatible as PPR requires. It is interesting that Linux sigpause() is BSD compatible. Put quotes around the file name in the redirect of diff output in ppd/makepatches.sh so that bash will not say "Ambiguous redirect". Some changes to "xwin" commentator. Modified atalk_ali.c so it will print "%%[ status: xxxx ]%%" if the printer is busy. Added code to pprdrv so it will copy "%%[ status: xxxx ]%%" message to the printers status file and send them to the commentators. Fixed pprdrv.c so the status file is only removed before exiting if the job was printed or resulted in a job error. Fixed the CAP and ALI atalk interfaces so that they will continue to read data from the printer even after pprdrv has ceased to send data. Removed fatal() from atalk_ali.c interface code. Added code to pprdrv so that when PJL is used, pprdrv will wait for the last page to hit the output tray before exiting. Added wwwppop to the distribution even though it is still incomplete and very insecure. No installation instructions are provided. Added a patched verion of the the Adobe Windows 2.0 proceedure set to the distribution. Cleaned up atalk_cap.c and atalk_ali.c to make them neater and more consistent with one another. Increase use of const, strerror(), and strsignal(). Fixed atalk_cap.c so that if will correctly detect a printer that is busy and print "%%[ status: xxxx ]%%" and return EXIT_ENGAGED. Fixed "ppop lpq" so that is displays all the jobs even if one of them is printing. Disallowed an empty colour name as input to "ppad media put" since such an entry could cause false matches in ppr_media.c:_write_media_line(). Fixed prompt for banner suitability in "ppad media put". The prompting and input range checking were broken. Fixed code in ppr_media.c:_write_media_lines() so that an unspecified colour requirement would match "white". Previously this didn't work. Added an "undefined command t42CSB" to pprdrv/pprdrv_reason.c to detect the Adobe PostScript Driver for MS-Windows sending to an HP4M with an HP4M+ PPD file. Changed ppr_main.c:main() so that the default "%%For:" line uses the unix /etc/passwd comment field in stead of the user name. The "-u yes" switch produces the former behavior. Added setsockopt() to interfaces "tcpip" and "lpr" to turn on SO_KEEPALIVE. Changed tcpip and lpr interfaces so that if DNS fails the printer will be placed into fault-retry mode instead of fault-no-retry mode. Added code to ppr_respond.c: respond() to wait until responder is done. Changed papsrv_conf.c so that all the configuration file keywords are case insensitive. Added CAP AUFS -X authentication to papsrv. Added the suporting keyword "ForceAUFSSecurity:" to the papsrv configuration file. Added debuging code to the interface "tcp/ip" in an attempt to figure out why it sometimes doesn't report an error when attempting to communicated with a crashed pocket print server. In pprdrv.c: main(): changed fdopen(printlogfd,"w") to fdopen(printlogfd,"a"). For some reason, the former sometimes didn't work even though printlogfd had been opened for append. In "ppad show" and "ppad group show" output changed "Default Filter Options:" to "Default filter options:" and "Switchset:" to "Switchset macro:". Added code to pprd/pprd.c:reapchild() to put an error message in the log file if a responder or other non-interface process terminates abnormally. Added code to serial interface to detect a jobbreak method of "signal" or "signal/pjl" and refuse to proceed. Added code to serial interface to support an online= option which allows DSR, CTS, or CD to be specified as a line which must be true before the printer will be considered to be on line. Renamed ~ppr/src/README to ~ppr/src/INSTALL. Added options.c to libppr.a. Moved convert_dimension from ppad/ppad_media to libppr/dimens.c. Fixed the "tcpip" interface so that the SIGALRM handler only sets a flag. Previously it would exit() from the signal handler, and if running with the "patron=" option, it would send SIGUSR1 to its patron, sleep() end then exit(). The sleep() did not work under Linux because it was inside a SIGALRM handler. Fixed the "pr" filter so that it would feed the options thru to filter_lp. Fixed a problem in ppr_infile.c which made options such as "fontnormal=Times-Roman" not work because the hyphen was mistaken for a filter name delimiter even though it occurs after the = sign. Modified filter_lp to use the functions in libppr/options.c. Added numberous options to filter_lp. Previously, the only option was "charset=". Changed MIN_COLUMNS from 80 to 70, changed MIN_LINES from 55 to 50. Changed the point size limit from 80% of the line spacing to 100% of the line spacing. Put quotes around PostScript font name in log output of indexttf. Changed ppr's -o switch so that multiple instances are concatenated together rather than overriding previous ones. Modified dotmatrix filter to use libppr/options.c; added the "colour=" and "color=" options; Added the "noisy=" option. Changed the name of ~ppr/install/install to ~ppr/install/fixup. Changed "fortran" filter to use libppr/options.c. The fortran filter may not have worked at all in version 1.10 because it didn't like the number of options it was getting. Wrote a function libppr:foptions:filter_options_error() and fixed filter_lp, dotmatrix, and fortran to use it. Fixed texinfo filter so that it will use the dvi filter, passing the options to it. Fixed a problem in dotmatrix filter: the narrowcarriage= option changed the left margin to 0.25 inch in stead of shifting everything right 0.25 inch. This caused problems if the document contained its own margin settings or absolute horizontal positioning commands. Part of this involved taking the revision of procset "Trincoll-Dotmatrix" from 0 to 1. Removed the group "ppr" from the this of those who may use the -f switch to pretend to be someone else. Now only "root", "ppr", and the members of "pprprox" may do so. Changed "ppop" so that the authorized group is "ppop" rather than "ppr". Changed "ppad" so that the authorization group is "ppad" rather than "ppradmin". Fixed misc_filters/pcl.perl to fool Perl so that it believes a safe PATH is defined at the top. (The PATH and IFS provided by ppr are safe already.) Simplified the install procedure, making "make dirs" part of "make install". Made all setuid "ppr" programs also setgid "ppop". PPRD and PAPSRV also now do setgid(getegid()) if they find they are running as root. Fixed xppr. If ppr returned non-zero, it wasn't properly printing the error message when ppr failed. Fixed pprdrv code related to correct output order when the input is reversed and the printers has a face up tray. Added an "HP DeskJet 500 Ghostscript" ppd file. It differs from the "HP LJ III Ghostscript PPD" in that the *DefaultOutputOrder is Reverse. Added a second PSVersion line to the Ghostscript PPD files for revision 333. (That is, Ghostscript 3.33.) Modified misc_filters/tex.perl, adding a run_with_stdin() function to replace the use of system(). Fixed a problem which caused the option parser to fail if there was more than one option. Added -fomit-frame_pointer and -m486 to Linux compile options. Added www.conf authorization file to wwwppop. Fixed "ppop lpq" command so it will not print "No entries" after printing usage help. Added %%DocumentData: Clean7Bit to filter_lp. Added %%DocumentData: Clean7Bit to dotmatrix and made change to make it true. Implemented rudimentry job splitting. Jobs can be split into an arbitrary number of segments but all segments have all the requirements of the whole. Implemented printer configuration option "GrayOK:". Changed Linux library making command in global.mk.master from "ar -sq" to "ar -crs" to remove need to run ranlib with some versions of the Gnu utilities. Changed pprdrv/pprdrv_reason.c message from "No TT rasterizer,wrong PPD file" to "No TrueType rasterizer,MS-Windows is using|wrong PPD file". Made corresponding changes to ppop to break messages at "|". Converted ppr2samba from a shell script to a C program so that we can make it set user/group id so that anyone can run it. Added qentry.attr.parts to give total number of parts in the job. Also added line to "ppop details" to display that information. Added state_update() to pprd.c and code to call it to inform queue monitoring programs of interesting events. Moved debug("pprd starting") to a point after the old log files are renamed. Reworked SIGCHLD and close_interface() code to pprdrv to get rid of obscure lockup. Greatly simplified code in the process. Fixed "ppop details" so it will no longer show ".0" at the end of job ids. Added -M switch to ppop and added "ppop qquery" command. Expanded many of the help messages in ppop. Made ppr use the file name as the default title if no -C switch is given. Added -G switch to ppr. (This belongs back there somewhere.) Found and corrected several places in pprd.c where job->status was being set directly rather than calling newstatus() to do it. Removed code which printed "gunzip" or "uncompress" on stderr when printing compressed files. Added an interactive mode and an -M switch to ppad. Changed ppop and ppad interactive mode so that an stty to set the backspace character to control-h is not made unless BACKSPACE is defined. BACKSPACE will be defined in sysdep.h. Changed "%%Orienation:" handling code do detect three states, Portrait, Landscape, and Unknown. Previously it only determined landscape true or false. Added code to papsrv to retry name advertising if it fails with CAP error -1025. Added code to papsrv so it will announce when it has added all the names, and on shutting down, when shutdown is complete. Enhanced papsrv debug() so it datestamps its lines. Added code to papsrv so it will print query information in the log file after receiving SIGUSR1 and quit after receiving another SIGUSR1. Added RamSize: as a valid line in the papsrv config file. Changed papsrv so that appletalk_dependent_cleanup() is only called by the daemon, not by its children. Changed references to stderr in ppop.c to errors which can be redefined. Redefined errors to stdout if -M switch is used. This helps Tcl/Tk which seems not to read stderr. Removed code at start of ppop main which set stdout and stderr to line buffering mode. Changed references to stderr in ppad to references to "errors" and put code in -M switch handler to define errors as stdout. In "ppop status" displays, changed "printing xxxxx-yyy (stopping)" to "stopping (printing xxxxxx-yyy)". Modified the "ppad show" command to produce machine readable output with the -M switch. Fixed ppop to use the Posix sigsuspend() in stead of the deprecated sigpause(). Added a SIGPIPE handler to ppop so it can produce an inteligible response when the spooler shuts down. Fixed a bug in the ALI version of the AppleTalk interface which caused it to write the message that there was a syntax error in the printer address into an alert file with the wrong name. Fixed bug in atalk ALI interface: after hiding a printer it would sleep for 10 seconds and then look for it with the unhidden name which would always fail. Fixed a bug in the papsrv_ali.c module. When trying to flush the output buffer it used while(ocount) when it should have used while(ocount || blocked). Was able to simplify flush_reply() after fixing this bug. Made "open_retries", "lookup_retries", and "lookup_interval" interface options in the ALI version of the atalk interface. Fixed a bug in interfaces/atalk_ali.c: fatal_pap_error(). The switch statement did not have breaks after to calls to alert() with the result that more than one alert message would be posted for each error. Fixed papsrv Makefile so that papsrv_ali.c and papsrv_cap.c will depend on include/papsrv.h Changed papsrv so that add_name() takes only the prnid as argument, the name string was dropt. Fixed a problem in pprd.c which caused it to write a new printer's first media list to "/etc/ppr/mounted/" because printer_count wasn't updated soon enough. Re-wrote interfaces/atalk_ali.c: copy_job() to use select() for better handling of the data stream from stdin to the printer and the stream from the printer to stdout. Fixed bug in pprdrv_twoway.c: when lines were received from the printer, if the were written to the log they were only written correctly if they were the first line in the data block. This is because the code printed the first n characters of the data block rather than the first n characters of the line. Slightly modified PJL handling in pprdrv_twoway.c to prevent PAGES=n lines from appearing in the job log. Modified pprdrv_nup.c so that it will use Trincoll-dmm-nup-3-3 only if Trincoll-dmm-nup-3-4 is not available. Created Trincoll-dmm-nup-3-4 which will be a new version of the N-Up dictionary. Modified Configure and include/global.mk.master to support NATALI/Netatalk under Linux. Modified ppr_main.c: main() so that the "%%Pages:" comments in jobs will be rounded up to the next multiple of the smallest printable unit. Added the shell script papsrv_kill and fixed pprsync to use it. Added code to papsrv to answer *Option queries using information in "PPDOpt:" lines in the printer configuration file. Changed the papsrv message "%%[ Error: unspecified fatal ppr error ]%%\n" to "%%[ Error: fatal error, see papsrv log ]%%\n". Added squeeze.c from dvips. Modified it so that it no longer strips out DSC comments. Modified procset Makefile so squeeze is applied to Trincoll-dmm-nup-3-4. This reduces to downloaded dictionary to 1/3 of its former size. Changed the gs and gstcpip interfaces so that if Ghostscript exits with errorlevel 1 the job is arrested rather than putting the printer in fault-no-retry mode. Installed workarounds for NATALI in atalk_ali.c. These are compiled in if _NATALI_PAP is defined. Relaxed the parsing of cpio output in pprsync. Replaced various calls to poll() with calls to select() since select() seems to be more widely supported. Added -fno-strength-reduce to the gcc flags for Linux. Added reference to "ppop help" to "ppop -?". Changed installprogs/fixup.sh so that it will put " # -z 'Default Zone" at the end of the papsrv line in rc.local. 1.30a1, 17 January 1996--26 February 1996 Fixed an echo command in pprsync to use $EECHO. Removed unused code in pprdrv which could display the job title on a PJL display. Changed sigpause() to sigsuspend() in pprdrv.c:signal_jobbreak(). Fixed atalk_ali.c: copy_job() slightly so that it will only call pap_write() if pap_look() return PAP_WRITE_ENABLED or 0. Put writemon code in pprdrv_twoway.c: twoway_pjl_wait(). Applied the squeeze program to all of the Trincoll-PPR-* procedure sets and re-aranged the top level Makefile so that the procsets directory will be built before dotmatrix so that squeeze will exist when dotmatrix is built. Modified pprdrv_twoway.c: twoway_pjl_wait() so it does not wait if a PostScript error has been detected. It is not clear if this ought to be necessary. Changed papsrv so it will try to read /etc/ppr/papsrv_default_zone if there is no -z switch. Removed commented out -z switch from code added to rc.local by fixup script. Changed ppop lpq so that if there is no title it prints a file name of "stdin" in stead of "(no title)" and so that it changes spaces in the title to underscores. (It was suggested that this may be necessary to get around problems in the Samba lpq parser.) In include/global.mk.master, Linux section, changed -ldbm in DBLIBS to -lgdbm. Old Slackware releases seem to have only libdbm which seems not to include gdbm but in Slackware 2.0, libdbm is a link to libgdbm and since libgdbm is really what we want, why not specify it? Among other things, if it is not there it will prompt the installer to install the package himself. Corrected bug in pprdrv_res.c: _include_resource(), when searching the resource list failed to check the version and revision numbers. This caused a problem if two versions of the same resource are contained in the same file. This _seems_ unlikely, but Freehand declares "FreeHand_header 3 1" supplied but includes "Freehand_header 3 0". (Reported by Damian Iveriegh.) Fixed ppr_res.c so that warnings print the procset version and revision numbers. (Suggested by Damian Iveriegh.) Modified ppr_res.c to accept procedure sets with version numbers but no revision number and treate the missing revision number as zero. (Per RBIIpp. 637,638.) Created a new library function ppr_get_command() to combine code from ppop and ppad interactive modes and to get ready for eventual GNU readline support. Replaced previous library exit code variables with "lib_memory_fatal", "lib_tokenize_fatal", and "lib_misc_fatal". Broke ppop.c into ppop.c, ppop_cmds_listq.c, and ppop_cmds_other.c. Removed "-Z true" from the arguments papsrv uses when it invokes ppr. This was necessary because QuickDraw GX goes not end the file with an "%%EOF" line. In the QFileEntry structure, deleted the redundant "principal" member leaving the "proxy_for" member. Deleted DNSLIBS from global.mk.master and replaced DNSLIBS in lprsrv/Makefile with SOCKLIBS. Converted ppr to use distributed job names. Added ppr_get_nodename() to the library. Added nodename_to_nodeid(), free_nodeid(), and nodeid_to_nodename() to the library. Added Configure, sysdep.h, and global.mk.master sections for SunOS 4.1.3_U1 (Info provided by Damian Iveriegh.) Added Configure, sysdep.h, and global.mk.master sections for OSF/1 3.2 (Patches and README.osf provided by Steve Swinnea .) Added mystrndup() to the library. Changed function names in ppop_cmds_listq.c and ppop_cmds_other.c so that they have prefixes based upon the commands which invoke them. Various structures had members called "id", "qid", or "jobid", all of which refered to the same thing. Changed them all to "id". Changed product string in Ghostscript PPD files from "(Ghostscript)" to "(Alladin Ghostscript)" because that is what at least versions 3.33 and 3.51 of the interpreter return. Also make a first Product string which is the same as the ModelName and NickName. This is so that LaserWriter 8.x can pick the right one. Added %hd to ppr_sscanf(). Changed "ppop list" protocol to eliminate passing of binary structures. Various function name changes in ppop and pprd so that the ppop command functions all have the form ppop_XXXX(). Added struct Destname and the parse_dest_name() function to ppop.c. Numberous corrections to make the code compile properly under G++. Converted the serial, tcpip, and atalk_cap interfaces to use the option parsing library. Copied the retry timer options code into atalk_cap but did not implement the code to use the values. Modified the libpprdb functions to call error() in stead of calling fprintf(stderr,...). Changed the name of the "HP LJ III Ghostscript" PPD file to "HP LaserJet III Ghostscript". Added "fullname" to ppuser records. Changed the name of db.h to "userdb.h". Fixed ppuser to always return values from util_exits.h Added "ppuser help" command. Changes in interfaces/lpr.c: Changed the socket() call to a rresvport() call (remote lpd requires a connection from a priveledged port). Look up port number for lpr service ("printer") in /etc/services defaulting to 515 if not found. Added new option "lpr_typecode", which may be either "o" or "f" (default to "f"). This is the letter that is used before the data file name in the cf file sent to the remote lpr. "o" is officially used for Postscript, but older lpr spoolers don't understand it. The data file is now sent before the cf file so that remote deamons won't try to start printing before the whole file has arrived. (Damian Ivereigh) Furthur changes to interfaces/lpr.c: made use of reserved port conditional on geteuid() returning zero, added option to specify remote port with host:port format just like tcpip interface. Eliminated use of Berkeley rresvport() function in favour of socket() and bind(). (David Chappell) Eliminated WinNT w/Hippix from global.mk.master and simplified definition of LIBCMD in Makefiles. Added "PPRVersion: x.xx" to queue files. The idea is that with the advent of distributed printing it may be necessary to convert between new and old queue file formats. Changed "ppop status" so that when the status of a printer is displayed, if it is "printing", the retry number will be displayed if it is greater than zero. pprdrv/pprdrv_twoway.c: changed name to pprdrv/pprdrv_feedback.c, combined ready_twoway() and start_twoway() into feedback_start(). pprdrv/pprdrv.c: simplified main() by breaking large code chunks out into separate functions. Rearanged somewhat to accomodate future raw printing. pprdrv/pprdrv.c: copy_pages(): changed variable name "thissheet" to "sheetmember". pprd/pprd.c: initialize_queue(): changed call to calloc() to call to myalloc(). Made use of GNUC __attribute__ in global_defines.h conditional on the definition of __GNUC__. Added myalloc_checkpoint() and myalloc_assert() to libppr. Converted Configure and global.mk.master to use cpp in stead of m4. Removed code in Configure to select system type manually. Added -H switch to ppr and implemented "-H saveinfile", added opts.hacks to struct QFileEntry. Added member "portion" to struct QFileEntry. Changed libppr/readqfile.c: read_queue_file() to read_struct_QFileEntry(). The new function takes an open file rather than a file name. Also changed the name of libppr/unreadqfile.c: destroy_queue_file() to destroy_struct_QFileEntry(); Added a "Time:" line to the queue file and effectively removed code in pprdrv/pprdrv_progress.c which preserved the file dates on queue files when writing the "Progress:" line. 1.30a2, 26 February 1996--17 May 1996 Changed myrealloc() to use number of members and size just like myalloc does. Previously it took the number of bytes desired. Added -p switch with the settable values start=, stop=, even=, and odd= to specify a subset of the pages to be printed. Added code to make ppr "-s fronts", "-s backs" work. Added automatic TBCP decoding via a special filter. Made fixup.sh make lpr interface setuid root. Modified ppr program so that level variable is replaced by calls to functions in ppr_nesting.c. Also added calls to functions in ppr_nesting.c which keep track of which part of the outermost document is being parsed (prolog, docsetup, script, etc.). Made ppr_infile.c: stubborn rewind unlink() to temporary file immedately after re-opening it instead of saving its name for later unlinking by exec_filter(). In stubborn rewind, changed pointer in write() call from in_buffer to in_ptr. Added sleep= option to dummy interface. Added binary token preservation code in ppr_infile.c: getline(). (Does not support Binary Object Sequences at this time.) ppr/*.c: changed variable name "eof" to "logical_eof". ppr/ppr_main.c: main(): Changed severity of warning about character following %%EOF mark from SEVERE to PEEVE if the number if characters is less than 50. pprdrv, ppad: added jobbreak method "tbcp". Added printer_TBCP_on_off() function to pprdrv:pprdrv_buf.c but it doesn't do anything yet. Modified the PPD file lexers for pprdrv and papsrv so that they can do nested include files more than 1 deap. Modified pprd so that it can expand its queue array if necessary. Moved the definition of the initial queue size from global_defines.h to pprd.h. Corrected product string in HP 4M+ PPD file. Appended "DSC" to ModelName in HP 4M and HP 4M+ PPD files. Changed PPD version from 4.1 to 4.2. Added "*LanguageEncoding: ISOLatin1". Added halftone type option for HP4M+. Changed "*Nickname:" to "NickName:" in HP4M+ PPD. Added optional equipment queries to HP4M and HP4M+ PPD files. Modifications to pprd and pprdrv to reduce use of non-reentrant functions by signal handlers. Also fixed signal handlers to save and restore errno. HP4M and HP4M+ PPD files: Removed reciprical options when they are obviously reciprical. Added "*ShortNickName:" lines to HP4M, HP4M+, Ghostscript, and QMS-PS 410 PPD files. Added module ppad_readppd.c and made PPDDIR in global_defines.h an absolute path in order to make ppad diagnostic messages clearer. Converted ppad_filt.c to use ppad_readppd.c. Converted "ppad ppdopts" command to use ppad_readppd.c (Previously it did not support PPD includes at all.) Converted "ppad bins ppd" command to use ppad_readppd.c (It supported include files previously.) Made -H and -G table driven and added support of "no-" prefix. Added -H badeps. Added -G structure:nesting and -G structure:sections. Restored system type menu to Configure, moved global.mk.master into Configure using herefiles and other shell techniques to replace cpp. Added "none" as a valid argument the the "online" option to the "serial" interface. Added HP PPD files for 4V, 4M Plus, and Color LaserJet. Fixed "gs" interface. If the port wasn't writable it was reporting that the port did not exist. Made pprdrv_reason.c: give_reason() reentrant so that pprdrv_reason.c: describe_postscript_error() would be reentrant too. As far as I know, all of the rentrancy problems have been removed from pprd and pprdrv. Moved INSTALL.osf1 into INSTALL. Fixed a timing bug in pprdrv, it would sometimes miss the SIGUSR1 in start_interface(). It is unclear when in the 1.30 development this bug was introduced. Added a "nodename" argument to destination_protected() in libppr. Currently it will always return FALSE if the nodename is not that of the local node. It will remain this way until such time as I choose to implement charging for remote printing. Cleaned up the code in pprd.c: main() which opened the FIFO, moving it to a function called "open_fifo()". Previously, pprd would block at this point with the result that the open() was often interupted by SIGCHLD and SIGALRM didn't work yet. Added a second argument to libppr/readppd.c: ppd_open(). This second argument is the stdio file pointer to use when writing error messages. Reworked ppr2samba to create a smb.conf include file as well as the pseudo-printcap file. Added missing -l, and -p items to papsrv -? help. Corrected ppr2samba Makefile, it was running installscript on the binary and failing to strip it. Added ~ppr/src/misc/ppdconv.perl to the distribution. Added automatic detection of PDF input files. Improved auto-detection of HTML files and added detection of other SGML types. (If the file is HTML, then ppr_infile.c runs filter_html on it, if it is some other type of SGML, then ppr_infile.c runs filter_sgml on it. Removed ppd/PPDrename since it has not been used in a long time. Added to "ppad interface" so that it assigns new printers the default filter options of the "Apple LaserWriter Plus" as well as its PPD file. Added -d (debug) switch to ppad. Fixed ppad and ppop so that they will send help messages to stdout if invoked with -?, to stderr if they see an unrecognized switch. Exit values also fixed. Changed "*Option4" in "HP LaserJet 4M Plus DSC" PPD file to "*InstalledMemory". Fixed "ppad ppdopts" so that it will do "*InstalledMemory" options as well as *Option options. Fixed ppad so that it will consider *InstalledMemory when generating default filter options. Removed a bug in ppad_filt.c which would cause a crash under certain circumstances when a third printer was added to a group. The problem related to "*DefaultResolution" line parsing. Fixed papsrv so that it will answer *InstalledMemory queries. Enhancements to ppr so properly handle the result of printing with the Adobe Acrobat reader version 2.1 under MS-Windows 95. The Acrobat reader stupidly prints the file by putting a 298 page document on one page using "%%BeginDocument:". What makes things so bad is that there is a colon missing from a "%%BeginFile" comment. The result is that the "%%EndFile" was terminating the document structure with the result that ppr generated page start records in the -pages file for all of those pages. When pprdrv interpreted it differently it would print all the pages as components of the enclosing first page and then go on to the first real page. The result was two copies. The solution is to enhance ppr_nest.c so that it does better gabbing and so that it ignores the false terminator. 1.30a3, 31 May 1996--14 June 1996 Added ForLine, Time, and Reason arguments to responders. Cleaned up responder code in ppr and pprd somewhat. Fixed a bug in pprd which was created by the expansion of the jobid syntax. When a job was held or arrested, the chmod() would fail because the file name had been build the old way. Changed library function wrap_string() so that it modifies the origional string rather than coping it. Changed /etc/ppr/smb.conf to /etc/ppr/smb-include.conf. Fixed dotmatrix problem: If underlineing was done by turning on underlining and printing spaces interspersed with horizontal moves, the horizontal moves were underlined as well as the spaces. filter_dotmatrix: changed Trincoll-Dotmatrix-1-1 to revision 2, changed /bp so default downward shift was 12 pt in stead of 20. Put the variables in a procedure called pprdotmatrix_init. Added xshift and yshift to filter options. Modified the audio commentator to work with pprpopup. Changed pprdrv/pprdrv_commentary.c so that commentator stdout and stderr are logged to the pprdrv log file. Fixed startup code in pprd/pprd.c: main() so that if the uid is root it calls setgid(0) before it tries to set the gid to the egid. Added the program samba_submitter. Modified ppr/ppr_respond.c: respond() so that it no longer redirects responder stdout and stderr to /dev/null. Modified papsrv/papsrv.c:main() so that it does setgid(0) before it does setgid(egid). This may be necessary for Linux and possibly other unixes. Midified papsrv/papsrv.c:main() to use exit codes from include/util_exits.h if it has to report an invokation error. Added XWINBINDIR to include/global_defines.h and made appropriate change to Configure. Corrected problem in Configure due to some use of "/usr/X11/bin" where "/usr/bin/X11" was meant. This had resulted in CHANGE begin uncommented when it shouldn't have been. Added a new program, xpprgrant. This is a setuid root program. Changed fixup.sh to set its permissions. Removed xppr from the list of files linked into /usr/bin. Caused creation of /var/spool/ppr/pprclipr even if LANMAN X is not present since it will be used for the audio commentator. Set and exported HOME in xwin responder and xwin commentator so that they will work properly when invoked from pprd. 1.30b1, 17 June 1996--18 July 1996. Removed HOME setting and exporting code from xwin responder and xwin commentator and moved it into pprd.c, ppr_main.c, and papsrv.c. Sent pprd responder stdout and stderr to the pprd log file. At some point, alert.c:valert() was broken so that it did not create a new alert log if the old one was more than 1 hour old. Fixed that. Added #include to pprd/pprd_respond.c. In papsrv/papsrv_ppd_parse.l: changed VMOPTION* to VMOPT* because some versions of Lex appearently limit start condition names to 8 characters. Added explainatory comments to misc/smb.conf.sample. Fixed ppr/ppr_main.c: parse_d() so that it uses its argument rather than optarg. Before this fix, ppr would core dump if invoked with no option arguments. Fixed ppr/ppr_main.c: warning(). It was still using the [old?] job log file name format. 1.30b2, 18 July 1996--2 October 1996 Fixed ppop/ppop.c: print_reply(): it was not correctly parsing the return value at the start of the reply message. This was because it initialized retval to EXIT_INTERNAL and then tried to use it as an acumulator when converting ASCII to binary. Changed it to initialize retval to 0. Fixed program name in papsrv_kill message, changed it from papsrv_restart to papsrv_kill. Fixed "ppop log" so that it would yield a reasonable error message for syntax errors like "ppop log mcec_1". Previosly it though that a job id of -1 and a subid of -1 were meant. Fixed papsrv/papsrv_ali.c/appletalk_dependent_cleanup() so that debug message displayed nbp_errno and errno in the indicacted order. Previously they were reversed. Changed smb-include.conf "drivername =" lines generated by ppr2samba to "printer driver =" lines since that is appearently the name Andrew Tridgel chose to use. Fixed fixed pprsync. The logic for deciding whether or not to restart papsrv was reversed. Fixed an error in libppr/readppd.c:ppd_open() which would cause a failure with file not found to cause subsequent ppd_open()'s to fail with the error "already open". Changes to lprsrv: changed o (postscript) input type to do "-T postscript" with ppr; changed l (preserve all control codes) to do "-T dotmatrix" with ppr; added x (no filtering type) from DEC Unix Lpr. Fixed a problem with the definition of SIG_FRONTS, SIG_BACKS, and SIG_BOTH. They were not bitvalues as pprdrv/pprdrv_signiture.c assumed they were, thus causing signiture printing to fail. This bug was introduced when the backend code for "-s fronts" and "-s backs" was added. ppr/ppr_mactt.c: Cast type mode_t to unsigned in 2 fatal() calls to suppress gcc warnings. Fixed interfaces/atalk_cap.c:basic_open_printer() so that it takes in several possibly error messages from CAP PAPOpen() which can result from CAP's use of an invalid sprintf() format specifier. Added AUTHOR define to version.h and changed -v messages in ppr, ppop, and ppad to print it. Also printed in ppop and ppad interactive mode. Changed "*READY" message of ppop machine readable interactive mode to print SHORT_VERSION instead of VERSION. Changed ppr/ppr_infile.c: check_for_PJL() so that after seeing "@PJL ENTER LANGUAGE = postscript" it will eat up carriage returns and line feeds and control-D's in any number. Previously it would only eat up one control-D. Changed the name of the variable the gstcpip interface uses to pass the interface options to the tcpip interface from GSTCPIP_TO_TCPIP_INTERFACE_OPTIONS to PPR_GS_INTERFACE_HACK_OPTIONS. Added a new interface gsatalk. Made changes to atalk_ali.c and atalk_cap.c to support the patron= option and a new option, is_laserwriter=. If is_laserwriter is set to false, then the interface will not attempt to hide the printer and will not wait for an end of file from the printer to acknowledge the completion of the job. Made tcpip interface options case sensitive for consistency with other interfaces. Changed Ghostscript PPD files so that the default free RAM figure is exactly 1MB instead of 1000000 bytes. Added VM options for 512K, 1MB, 2MB, and 4MB free RAM. Fixed a bug in "ppad ppdopts" which could cause corrupted error messages if a PPD file UI section wasn't closed and the next one wasn't an `interesting' one. Modified the definitions of the default paper dimensions for A4 paper to use precomputed integer values rather than expressions. Appearently rounding errors could cause non-integer results which would result in a media mismatch being reported. (Thanks to Stefano Ferriani .) Modified "ppop list" so that if the job name is too long for its field, it will be allowed to overflow it and the next field will appear on the next line. Moved media.sh from src/misc to src/ppad. Added misc/README_MISC and a symbolic link to it at the top level. Cleaned up the audio commentator and fixed a bug in the code which determined the machine name. Fixed overlapping file type numbers in ppr_infile.c which caused confusion between HTML and RTF. Changed pprdrv_infile.c: getline() so that Binary Token Encoding is ignored within comments. This is to avoid false triggering due to non-ASCII values in comments. Fixed the elapsed time indication in the printlog file. (In pprdrv.c, the entry was being based uppon the difference between the current time and the modification time of the queue file. Since the queue file modification time is no longer being carefully preserved at its origional value, this wasn't working. Changed commentator argument format. Rather than having one message argument it now has three. The first is the best human readable message. The next two are the information on which the first is based or other helpful information. Changed the "file" commentator so that it prints the date and time before each entry. Fixed ppr_main.c: main() so that the -U switch code does setuid() before and after the unlink() call. The absence of this code often caused unlink() to fail. Fixed problems with the -U switch. The user id wasn't being set and the current directory wasn't being set before the unlink. For this to work, it was necessary to change the file open code in ppr_infile.c: get_input_file() to use seteuid() in stead of setuid(). Removed redundant chdir(HOMEDIR) from ppr_main.c: main(). (It was redundant because ppr_input_file.c: get_input_file() does it. Added library modules pprpopup.pl and speach.pl. Adapted audio commentator to use both. Adapted pprpopup responder to use pprpopup.pl. Added a tenth parameter to the responder parameters. It is the number of pages printed. Added the ability to delete jobs to lprsrv. Changed the value of the -X switch used with ppr from "control.Person@control.Host" to "control.Person@client_dns_name". Added code to ppr/ppr_main.c: write_queue_file() to detect newlines in the strings it writes to the queue file. Added an options (4th) parameter to printer configuration file "Commentator:" lines. Added %Q to ppr_sscanf(). It reads an optionally quoted word, allocates storage for it, and sets a pointer to the newly allocated storage. Changed lprsrv so that, even in permissive mode, authorized clients must connect from a reserved port. Changed responder launching code in ppr and pprd so that the code number is formatted with "%d" rather than "%2.2d" since the latter led to a leading zero for one digit codes. Added an "audio" responder. Added PPD file "HP LaserJet 5Si". Increased MAX_BINS in global_defines.h from 4 to 10. Added the options "level=" and "voice=" to the audio commentator. Changed ppdconf.perl so that it changes the PC file name to lower case before using it. libppr: Renamed nodename_to_nodeid() to assign_nodeid() as this more accurately indicates its purpose since it increments a reference count. Changed "samba" responder to dump smbclient stdout to /dev/null since stdout is now logged. Made the command with the smbclient -I option the default again since current versions of smbclient don't seem to support NBNS (WINS) yet. Changed "write" responder to throw away stdout and stderr from the write command in order to keep messages like "write: chappell is not logged in" out of the pprd log file. Added code to pprdrv/pprdrv.c: reapchild() so that if waitpid() returned -1 and errno==ECHILD it will just return. For some reason Solaris returns this indication when there are no children to wait for. Changed "From:" lines fed to Sendmail in pprd/pprd_alerts.c so that the output of ppr_get_nodename() is included. Changed pprdrv_feedback.c to remove "status:" from the start and "; source:" stuff from end of printer status messages before using them. Added DEC Ultrix lpr extensions for input tray, output tray, duplex, N-Up, and orientation to lprsrv. Removed prepending of "-" to -f argument when invoking ppr from lprsrv. Changed pprdrv/pprdrv_ppd.c: insert_features() so that "*InputSlot" insertions set strip_binselects to TRUE. Changed ~ppr/src/installscript so that it will work even if there are spaces surounding the = signs. Made a new member in the printer structure in pprd. The member is "engaged_count" and keeps track of the number of sucessive times the printer was found to be otherwise engaged or off-line. Previously, retry_count served this purpose as well. This was done to fix a problem with negative alert frequencies resulting in no alert messages followed by recovery messages refering to the non-existent fault messages. The problem was that an engaged printer could get the retry count incremented past the trip value, then the printer would fault and then recover. 1.30b3, 2 October 1996--21 November 1996 Expanded lprsrv support for DEC lpr's -K switch. It now supports "one_sided_duplex", "one_sided_tumble", and "two_sided_simplex". Modified filter_lp so that the gutter is properly placed for simplex, duplex, and duplex tumble in both portrait and landscape modes. The gutter is not used if the duplex mode is "undef". The default gutter is now 0.375in. Added support for orientation= option to filter_lp. Added tests/filter_lp.sh. Fixed problems in dotmatrix filter: FF on blank pages resulted in page end code without page start code. Trincoll-PPR-Dotmatrix-1-2 had a missing "def" in "/yshift -12 def". Makefile failed to squeeze the procsets. Changed audio commentator to use speak_time_interval to announce the stalled time. Commented out debug() call in pprd.c: main() which occured before the removal of the old log file. Added "const" to some function prototypes in the "none" version of libpprdb. Fixed pprdrv/pprdrv_tt.c and indexttf/indexttf.c so that they will compile even if TT_DBM is set to something other than "gdbm" in include/global.mk. (There is no alternative code yet, TrueType font handling will not work. The program indexttf will be useless.) Fixed what is appearently a bug in ppop/ppop.c:is_my_job(). This was spurious "&"'s in front of strings passed to sscanf(). Fixed ppad Makefile so it does not install when it should only build. Minor change to dotmatrix/escape.c:fs_pass1() to avoid an empty default case in the switch. It now has a break in it. This change was made to avoid annoying the DEC OSF C compiler. Commented out DEC OSF prototype for ioctl() from sysdep.h. Added fixed_cc_osf script and Configure support for use of the native compiler on DEC OSF. Fixed a place in global_defines.h where #ifdef __GNUC__ wasn't used to surround GNUC specific syntax. Added $(OSFLIBS) to ppr2samba Makefile entry and made lib_memory_fatal in ppr2samba const. Enhanced Configure to give option of using the native compiler on OSF and to ask if GDBM should be used. Also started to detect selection of incorrect operating system thru use of uname. Moved several shell scripts from the root level to "misc" and "installprogs". Added .sh to most shell scripts. Removed /var/spool/ppr/cache/file from the list of directories created by makedirs.sh. Added "is off line" printer status message to audio commentator. Added "part x" to audio responder. Added myalloc_checkpoint_get() and myalloc_checkpoint_put() and added calls to them in nodeid.c and in the pprd.c signal handlers. Added HP DeskJet 860C PPD file. Combined ppop/ppop_cmds_other.c:ppop_hold() and ppop_release() into ppop_hold_release(). Changed ppop/ppop.c:wait_for_pprd() so that it only returns a non-NULL file handle if the other execute bit is set on the reply file. Previosly the behavior was the oposite. Changed ppop/ppop_cmds_other.c so that callers of wait_for_pprd() ignore its return value if they don't expect to read data from the reply file. Changed the meaning of a set other-x bit on the ppop reply file. It now means that there is data rather than that there isn't. Changed the function pprd/pprd_ppopint.c:set_reply_error() to set_reply_data() and changed other code to call it when there is a queue listing or some such thing in the reply file rather than when there isn't. Fixed pprdrv/pprdrv_commentary.c:commentary() so that the buffer for building the time string is big enough. Fixed pprd/pprd_ppopint.c:close_reply() so that if kill() fails it will delete the reply file. (If kill() failes it is probably because the user got impatient and did control-C to ppop.) Fixed pprdrv/pprdrv_feedback.c: sigpoll_handler() so that the .status file is created with O_TRUNC so that vestiges of old messages don't remain. (Thanks to Steve Hsieh .) Added code to pprdrv for the Kodak ColorEase PS so that when it drops the AppleTalk connexion when it is supposed to be flushing, EXIT_PRNERR gets converted to EXIT_JOBERR. (Again thanks to Steve Hsieh .) Added a new responder code RESP_FATAL_SYNTAX to indicate a fatal ppr error due to invokation syntax. Fixed audio commentator to understand messages without job id numbers. (This goes along with a change to ppr which has it delay assigning the job an ID number until just before it is submitted to pprd.) Increased MAX_STATUS_MESSAGE (global_defines.h) from 40 to 60. Removed code from ppr/ppr_main.c:main() that rounded the page count up to the next multiple of the sheetfactor. (I can't remember why I put this in, but I don't like it.) Removed the code that deleted most log files from pprd/pprd.c:main() and replaced it with code which renamed the pprd logfile to pprd.old if it was present. Changed the wording ppop uses when telling a user that he has attempted an operation with the wrong proxy id. (Steve Hsieh .) Changed "ppop move" so that users may move their own jobs. Changed "ppop cancel _dest_" to cancel only a user's own jobs, even for operators. Created "ppop purge _dest_" which operators may use to remove all jobs. Added "ppop -u _user_" which operators may use to specify a user whose permissions should be adopted. Added "ppop clean" which removes arrested jobs. Changed ppr/ppr_nest.c: outermost_end() call warning() with a message about a PPR bug rather than call fatal(). Changed ppr/ppr_dscdoc.c: read_prolog(): fixed a bug which would cause document setup sections to cause fatal errors. Added code and warnings to deal with broken xfig output where "%%EndProlog" comes after "%%EndSetup". (Thanks to Steve Hsieh for diagnosing these problems.) Made "any" or "all" wildcard destination names for "ppop cancel" and "ppop purge". Changed pprd/pprd_ppopint.c: ppop_list() to make "any" an alternative wildcard destination name. This also affects "ppop cancel destname" and "ppop clean". Changed the name of the pprd lock file from "pprd.lock" to "pprd.pid" and changed the code to write the pid into the file. Added code to installprogs/fixup.sh to remove the old file. Added code to pprd/pprd.c:fatal() so that the process kills itself with SIGQUIT if the exit code is 100. The idea is to provoke a core dump. Edited ppr/ppr_split.c so that it uses fatal() rather than fprintf(stder and exit(). I think it got left behind in some change. Split DEST_DISALLOWED into DEST_DISALLOWED and DEST_DISALLOWED_LEADING. Removed "." from DEST_DISALLOWED, moving it into DEST_DISALLOWED_LEADING and added space, tab, carriage-return, and line-feed to DEST_DISALLOWED. Made cooresponding changes to ppr, ppop, and ppad. Established macros in global_defines.h for the various user names and group names used by PPR. Fixed grammar in alert cancelation message for case when the printer had only failed once. Added code to installprogs/fixup.sh to remove /var/spool/ppr/cache/file. In pprd, renamed the printers[] array structure member "next_retry" to "next_error_retry" and "engaged_count" to "next_engaged_retry". Fixed ppop_status() so that it will return next_engaged_retry rather than next_error_retry if the printer status is STATUS_ENGAGED. The last printer message is now displayed by "ppop status" if the printer is engaged, printing, or stopping. Stopping was previously ommited. Added printer status information to lpq. (Thanks to Steve Hsieh for help with this one.) Added /etc/hosts.lpd extensions from Steve Hsieh . Hosts may now be permitted by domain with lines like ".trincoll.edu". The file /etc/hosts.lpd_deny is also supported. It overrides the others. Added alarm() calls in pprdrv/pprdrv.c:jobbreak_signal() to monitor stalled printers. Added set_writemon_description() to pprdrv/pprdrv_buf.c. Made the last string set with set_writemon_description to last argument (the second raw data field) to commentator() when it is called during a stall. Added alarm() calls to the wait for SIGUSR1 code in pprdrv/pprdrv.c: start_interface(). This is not quite right but it is better than nothing. Added delete by user and delete all to lprsrv/lprsrv.c:remove_jobs(). Also added -S (super root) option to lprsrv. Added debugging code to libppr/myalloc.c. Fixed bug in _myalloc_assert() so that the assertion works even if it is non-zero. Modified the ppop subcommands "hold", "release", "start", "stop", "wstop", "halt", and "cancel" so that they can take any number of arguments. Added "-w log" to ppr options used by lprsrv. (Steve Hsieh .) Changed "HP LaserJet 4M Plus DSC" PPD file: commented out AutoSelect bin, changed translation strings for "Upper" and "Lower" bins to "Upper (250 sheet) Tray" and "Lower (500 sheet) Tray" respectively. Re-wrote internals of lprsrv to seperate support for different spoolers more. Move the definition of TTDBNAME from pprdrv.h to global_defines.h. Consequently, indexttf/indexttf.c no longer includes pprdrv.h. Moved the definition of NEWPRN_CONFIG from ppad.h to global_defines.h. Defined MFMODES in global_defines.h. Previously the path has hard-coded in ppad_filt.c. Renamed many configuration files in the /etc/ppr directory to clearly differentiate between plain text configuration files and various binary formats such as gdbm databases. Here are the changes: charge_users -> charge_users.db fontsub -> fontsub.conf media -> media.db ttfonts -> ttfonts.db newprn -> newprn.conf mfmodes -> mfmodes.conf Added code to installprogs/fixup.sh to rename the above files. Added LaserWriter message regularization to pprdrv. The raw error and status strings are now looked up in /etc/ppr/lw_errors.conf and /etc/ppr/lw_status.conf respectively and if a translation is found it is presented as the cooked commentator argument. Made misc/pprsync.sh remove editor backup files from the printer and group configuration directories before begining its work. Added BUSINESS_HOURS define to global_defines.h. Changed the print log format from: TIME,NAME,PRINTER,FOR,SHEETS_PER_COPY,DURATION to TIME,NAME,PRINTER,FOR,USERNAME,PROXY_FOR,POSTSCRIPT_PAGES,TOTAL_SHEETS,TOTAL_SIDES,DURATION Added CHARGE_BY_SIDES compile time option to global_defines.h. Changed mail and errmail responders to move the name of the user into the subject line, i.e. "Subject: David Chappell's print job". Moved the code for processing "ppr -f -me" into the switch case statement. Added option to make the title specified with the ppr -C switch the definitive rather than the default one by preceeded it with "+" Changed lprsrv so that it will allow "stdin" as the job title. Renamed papsrv configuration files: papsrv -> papsrv.conf, papsrv_default_zone -> papsrv_default_zone.conf. Added code to fixup.sh to rename old ones. Added -A option to lprsrv which it passes thru to "ppop lpq" command. Added prelimary code to remove jobs from lpr and lp spoolers. Changed ppr/ppr_respond.c and pprd/pprd_response.c so that argv[0] is the argument to ppr's -m switch rather than the path to the responder from HOMEDIR. (This change doesn't seem to be effective under Linux, at least if the program is a script.) Merged the responders "mail" and "errmail" into one. (That is the reason for the previous change.) Added more information to subject line, added printing of reason arrested to the body, added inclusion of job log when available. Changed the "write" responder to exec the "mail" responder so that it doesn't have to contain the code for responding via email. Put an extension of "*.sh" on all scripts in "responders". Commented out "AutoSelect" bin in "HP LaserJet 4M DSC" PPD file. Added misc/modes-3.1.mf for reference purposes. Added a new commentator code, COM_MUNDANE_EXIT and moved EXIT_PRINTED and EXIT_INCAPABLE from COM_EXIT to this new code. Added this code to the audio commentator. Added ".sh" extension to the commentator source code file names "samba" and "xwin". Added globak.mk symbol LEX_LIB. Changed Linux fragment in Configure to use Flex directly. Fixed a bad call to myfree() in "ppop deffiltopts" which was causing core dumps. Added "umask 0" to DVI filter to work around the problem that gftopk uses access() before opening files. Changed product string to "*" for GhostScript printers in mfmodes.conf. Made the "ppad -d" switch take a numberic argument to indicate the desired debug level. Added warning to ppad/ppad_filt.c: add_printer() to give warning about extra "PPDFile:" lines. Fixed missing second line feed after "cannot recover on its own." in pprd/pprd_nag.c:nag(). Fixed bugs in lpr interface which prevented it from working. Changed ppad.c:dispatch(char *argc[], int optind) to dispatch(char *argv[]). Commented out code in ppr/ppr_infile.c which gave special treatment to overflow lines which contain only hexadecimal characters. (Thanks to Steve Hsieh for suggesting this fix.) Added ERROR_DIE and ERROR_DUMPCORE to pprd.h. pprd/pprd.c:fatal(): Added kill(getpid(), SIGABRT) so that fatal(ERROR_DUMPCORE, ...) will work even if pprd has been started by SunOS 5.5.1 cron. Changed help in ppop and ppad to use rather than _N_ to indicate a variable. Added long argument parsing function to library. Changed ppop -v to --version and -? to --help and added long options for other short options. Changed ppad -v to --version and -? to --help and added long options for other short options. Also removed version information from help output. Changed ppr -v to --version and -? to --help. Made all char * members of struct QFileEntry const. This required lots of other things to be changed to const too. Installed ppr_getopt() in lprsrv with --version and --help. Installed ppr_getopt() in papsrv with --version and --help. interfaces/atalk_ali.c: if pap_look() returned PAP_DISCONNECT, the interface might not exit but rather would get caught in an infinite loop. Changed #include to #include in misc/xpprgrant.c. Fixed ppad/Makefile so that it unlikes the old ppad before trying to copy over it. Fixed serious job in get_ and set_ myalloc_checkpoint(). Moved free_nodeid() out of unlink_job() and unlink_new_job() in pprd.c. Commented out code in installprogs/fixup.sh to rename /etc/ppr/media to /etc/ppr/media.db and replaced it with code in ppad/Makefile. Changed assignment of queue id number in ppr_main.c:main() so that it is defered until just before the output files are created. ppr_infile.c has code to assign it early if it creates a "-infile" file. interfaces/atalk_ali.c: Fixed code for pap_open() failure so that it doesn't print errno unless pap_errno is PAPSYSERR. Added pprdrv/lw_status.conf and lw_errors.conf. Added definitions of RMF and CP to include/global.mk.unconfigured so that clean could be run twice in a row. Increase %p in pprdrv/ppdrv_ppd_parse.l from 2700 to 3000. Changed pprdrv/pprdrv_lw_messages.c:regularize_lw_message() so that rather than writing unknown messages to a separate file it appends them to the translation file in a section headed "[]" which it creates if necessary. Changed pprdrv/pprdrv_feedback.c so that messages in the form "%%[ status: PrinterError: xxxx ]%%" are looked up in lw_errors.conf in stead of lw_status.conf. 1.30b4, 22 November 1996--26 November 1996 Added rule to filter_lp/Makefile to create the link to filter_lp_autolf. (It is unclear when this was lost.) Changed pprdrv/pprdrv_ppd_parse.l so that it calls order_dependency_1() thru 4 rather than just order_dependency. Changed libppr/readppd.c so that the default directory for include files the directory of the including file. Changed pprdrv/pprdrv_ppd.c and pprdrv/pprdrv_ppd_parse.l too. Changed papsrv/papsrv_conf.c and papsrv/papsrv_ppd_parse.l too. Fixed papsrv/papsrv_conf.c:read_ppd() so that it doesn't prepend "/usr/ppr/PPDFiles" if the PPD file name begins with "/". Fixed "ppop release" (and ppop hold) so that it will print a rational error message for commands such as "ppop release adshp4m". Updated etc.init.d.ppr so that it uses the *.pid files and so that it stops papsrv. Also, it no longer uses ps which was a portability problem. Added ENGAGED_NAG_TIME to pprd.h and use it as the value for sending "remaining printer problems" messages about off-line printers in stead of hard coding the value 20. At the same time, added a second line feed to the end of the engaged message when building the letter. Added PRNSTATUS_FAULT to the list of states in which ppop status and ppop lpq will print the last message from the printer. Applied Steve Hsieh's fixes to pprdrv/pprdrv_lw_messages.c: regularize_lw_messages(). Changed lprsrv to accept request to delete for user "-all". Changed a request with no specified jobs or users to delete active job rather than all jobs. Changed custom_list() so that it stops if the item routine returns TRUE. Added ppop cancel-active and pop cancel-my-active. Changed special ppop -X user from "root" to "*". Added treatment of host "*" as a wildcard. Added preliminary long options to lprsrv. Added standalone daemon mode to lprsrv. Changed lprsrv.c: lprsrv_fatal() to fatal() with the usual arguments. Added code to pprd/pprd.c: fatal() to remove the lock file. 1.30b5, 27 November 1996--10 December 1996 Fixed Configure so that -lgdbm is left out of DBLIBS if user opts out of gdbm. ppr/Makefile: strip ppr was commented out. Made changes to ppop.c:is_my_job() that were previously made to ppop.c:job_permission_check() so that it will allow "*@host", "user@*", and "*@*". Increased pprdrv_ppd_parse.l %p to 3200. Fixed pprd.c:reapchild(). When a process terminated it searched the printer list to find the printer for which the process had been launched. If a printer printed a job and then did not print another until the pid had rolled around to the last pid used to run pprdrv for that printer and a responder was launched, the termination of the responder would be interpreted as the termination of pprdrv. This would result in an attempt to alter the state of a job that was long gone. (Not supprisingly, this error has been there for years.) Changed ppr_main.c:main() so that it will read the default responder and responder address from PPR_RESPONDER and PPR_RESPONDER_ADDRESS if they are defined. Previously it would use "write" and the user name. Now it will fall back to those if the environment variables are not defined. Added errxwin responder. (It is a link to xwin.) Added commented out player code for Solaris 2.5.1 and OSF/1 3.2 to libppr/play_local.pl. Added code to ppr_infile.c to restart read() calls interupted by signals. (For some reason this happens on DEC OSF/1 3.2.) Corrected handling of "lprm -" by root. (In this case, root claims to be the user "-all" and submitts an empty delete list.) Added MAILX to things defined in global.mk. Added it to things replaced by installscript.sh. Used it in responders/mail.sh. Added it to things put in global.mk by Configure. Changed ppr --in-type to --input-type and --bin-select to --auto-bin-select. Changed libppr/pprpopup.pl open_connexion() so that some of the error messages indicate what it was trying to connect to. Added "*GhostscriptDriver:" lines to Ghostscript PPD files. (This line is my invention. I intend to use it in the future.) Added separate --version format for -M to ppop and ppad. Added code to ppop lpq to replace spaces in the file name with _ so that Samba won't fail to parse such lines properly. Added feature to ppr2samba so that it will read "ppr2samba:" lines from the configuration file and generate a record for the printer or group only if the first argument is non-zero and use the second argument, if present, as the prototype share in stead of "pprproto". Changed "Drivername:" to "ms-driver-name". Removed ppr -C "+title" hack and replaced it with --ignore-dsc-title. Added code to lprsrv to demote itself from root in standalone mode and to make an lprsrv.pid file. It is now a setuid ppr program. Renamed LOCKFILE in global_defines.h to PPRD_LOCKFILE. Added code to pprdrv_feedback.c for "%%[ PPR status updates follow ]%%" and COM_PRINTER_STATUS_UPDATES. Changed pprdrv_feedback.c so that "source: xxxx" is not longer included in the status written to the printer's status file. Added (x% sent, 1 of 10 pages completed) to ppop lpq. Added pprdrv_jobname.c. It inserts code in document setup to set the job name string on the printer. Fixed errors in installprogs/etc.init.d.ppr.sh and added stop code for lprsrv and commented out code to start lprsrv in standalone mode. Enhanced installprogs/remove_ppr.sh to remove the init scripts. Fixed papsrv_kill so that it will not get stuck in a loop if papsrv died without removing its .pid file. Changed include/pap_proto.h Fixed atalk_ali.c so that select() is called with a first argument that is no larger than is necessary. Added option status_update_interval to atalk_ali.c and as do-nothing option to atalk_cap.c. Turned off debugging in pprd and lprsrv for this release since most of the bugs seem to be gone. Improved fixup.sh System V init script installation so that it can support various script directories and init level schemes. Changed lprsrv behavior so that the lpr -p -T title is only passed to ppr's -C switch if the lpr -J switch was not used. Moved LPRSRV_USE_LPR_STYLE_JOB_NAME from lprsrv.h into global_defines.h. Moved MIN_INODES and MIN_BLOCKS from lprsrv.h and papsrv.h to global_defines.h. Added s versions of ppop cancel, purge, cancel-active, and cancel-my-active and modified lprsrv to use them when the agent is not root. The idea is that if the user is deleting his own job he does not need to be informed that he has done it. Added code to use PPRDEST to ppop_cmds_listq.c:custom_list() and ppop_lpq(). Fixed error in path to alert program in interfaces/gs.sh. Improved error messages in interfaces/parallel.sh to better explain why the port couldn't be opened. Added gs= and set= options to interfaces gs.sh gstcpip.sh and gsatalk.sh. Fixed misc/pprsync so that it doesn't copy papsrv_default_zones.conf or lw_*.conf. Changed samba responder so that it will accept addresses in the form NETBIOS-DNS or NETBIOS-IP. These may be represented in a Samba print command as either %m-%M or %m-%I. Changed samba_submitter so that the argument which was formerly a DNS domain search list is now the DNS name or the IP address of the client. These may be represented by %M or %I in the Samba print command. Added proxy for switch when ppr is invoked by papsrv. The argument is the AppleTalk network number, a colon, and the node number. Added a lpqFileName: line to the queue file. This line contains the actuall name of the input file if know. A --lpq-filename switch was added to ppr so that lprsrv can pass it the actual file name. Also, ppop lpq was modified ot display the file name in stead of the title if the file name is know. Also, ppop details was modified to display the additional information. While I was at it I moved a few output lines arround and changed a few labels. The column name "lpqfilename" was added to ppop qquery. Increased MAX_STATUS_MESSAGE in global_defines.h from 60 to 80. Fixed pprd/pprd_ppopint.c:ppop_status(). Previosly, if a printer's .status file was too long, it would truncate it to a length that was 1 byte too long which would confuse ppop/ppop_cmds_listq.c:ppop_lpq_banner(). Enclosed "%%IncludeFeature: *PageSize X" in filter_lp.c in a stopped context. Added seconds to printlog print time. Added arrest reason and page count to samba and xwin responders. Added pages printed to pprpopup responder. Added an additional field to the printjob log file: the run time of pprdrv in seconds and hundredths of a second. Corrected syntax errors in System V cancel code in lprsrv which prevented it from being compiled. 1.30b6, 10 December 1996--8 January 1997 Fixed bug in lprsrv which caused it to fail if it received more than one job during one connexion. The index into the array of files received as part of the current job was not being reset to zero at the end of each job. Fixed errors in the commented out lprsrv start line in installprogs/etc.init.d.ppr.sh. Error in lprsrv: when the log file was opened to receive the output of ppr, lp, or lpr it wasn't being opened in append mode. Revamped lprsrv standalone mode code. It is no longer suid anything. Fixed pprd/pprd_ppopint.c:_ppop_status() so that the status string is properly NULL terminated. Expanded the code in ppr/ppr_infile.c:get_input_file() to swap GIDs as well as UIDs. Changed error message for read() failure on input file to be more formal. (It was "input file read error: xxxxxxx", now it is "read() failed on input file, errno=x (xxxxxxx)".) I did this because this should hardly ever happen and the reasons why it might are unknown to me, therefor it should have the format of those error messages which do not speculate as to the cause. Added timeout of 60 seconds for ppop's wait for pprd to respond except for ppop wstop. Improved atalk interface to cache the printer address and use nbp_confirm() if the cached information is more than a few seconds old. Added the interface option "address_cache". In pprdrv.h and pprdrv.c, changed DEBUG_PROGINIT and DODEBUG_PROGINIT(()) to DEBUG_MAIN and DODEBUG_MAIN(()) and greatly increased the number of debugging function calls. Changed the status_update_countdown printf() in atalk_ali.c to a DODEBUG(()) call. Modified atalk_ali.c and atalk_cap.c so that if pap_open() suceeds but the status string begins with "status: PrinterError:" it will be printed to stdout between "%%[ " and " ]%%". (Previously, the status string was printed only if pap_open() failed.) Added argument to an interface, the "%%For:" line argument. The lpr interface now uses it for the P line. Fixed missing "inform" parameter in ppop clean. Changed gs* set= to gsopt= and changed the default ghostscript path from /usr/local/bin/gs to /usr/bin/gs. Added code to pprdrv/pprdrv_commentary.c:commentary() so that if the last message was "busy" or "off line" and this message is EXIT_ENGAGED then the message is supressed. Fixed xwin responder so that it will not print -1 for the number of pages if the number of pages is unknown. In lw_status.conf, moved "waiting" from [busy] to [idle]. Removed spurious parentheses arround $why_arrested in samba and xwin responders. Declared two non-auto variables in pprdrv_patch.c static. Added undefined "setuserparams" to pprdrv_reason.c with a message which says "not a level 2 printer,wrong PPD file". Fixed reversal of COM_PRINTER_STATUS and COM_PRINTER_STATUS_UPDATES when calling commentator for "%%[ status:". Reworked filter_lp noisy=true messages. Changed ldeflines from 51 to 66. Added code to compute landscape_lentrigger and landscape_asptrigger automatically. Added "psu" (PostScript Units) to the unit types accepted by libppr/dimens.c:convert_dimension(). For now it is the same as points and pt. Added stubs for persistent download in the new module pprdrv/pprdrv_persistent. Moved add_resource() and add_resource_font() from pprdrv.c to pprdrv_res.c. Slight adjustments to papsrv's SIGUSR1 activated query debugging code. Dropt the code in pprdrv which specifically detects the flushing message and in its stead made the code which detects a bona-fide postscript error very lax. It no longer requires that the job be transmitted correctly. Added totalpages, totalsides, and totalsheets to ppop qquery. Fixed the ppop qquery field "lpqfilename" so that it will display the same thing as the "title" field if the --lpqfilename switch was not used when the job was submitted. For consistency, changed the exit commentary reason "PostScript error" to "postscript error". Added to lw_errors.conf and changed the audio commentator to use the cooked messages whenever possible. Inserted code in pprdrv/pprdrv_commentary.c to suppress consecutive identical printer status update comments but left it commented out. Added ppr --hold option and support for it in pprd. Fixed pprd/pprd_ppopint.c: _ppop_status() so that it will once again display the job being printed when the status is PRNSTATUS_CANCELING or PRNSTATUS_STOPPING. It was displaying ?:?-0.0(?) or something like that. Added more debugging messages to pprd_ppopint.c in the parts where pprdrv is killed. Added ability to hold a job that is currently printing. Fixed a big problem with ppop purge: pprd would not unlink the job files, send messages, or write correct entries in the state_update file because it tried to use the destid -1 (all) for all those operations. Removed some dead code from pprd/pprd_ppopint.c:ppop_start_stop_printer() for case when ppop start is executed on a printer that is stopping. Added code to pprdrv.c to sleep in sigterm_handler() to facilitate debugging. Changed pprdrv.c:reapchild() so that it sets intpid to 0 after it reaps the interface. Presumably this resulted in occasional attempts to kill an interface which had already exited. Added "cancel_job" member to the printers[] array in pprd. This member can be set when pprdrv is killed to cancel a job that is being printed. Intervening changes in the printer's state will no longer prevent deletion. Slight corrections and improvements to fixup.sh messages. Added "eof_timeout" as alternative form of "eoftimeout" for the tcpip interface. The form "eoftimeout" will be `undocumented'. Added LaserWriter Select 360 PPD file. A few changes for Cygnus Win32. (Mainly braketing SA_RESTART with #ifdef.) Moved lanmanx directory contents into misc. Changed the pprd responder launching code so that the reason field is blank if the job is not arrested. In response.h, changed RESP_PRINTER_INCAPABLE to RESP_ARRESTED_PRINTER_INCAPABLE and RESP_GROUP_INCAPABLE to RESP_ARRESTED_GROUP_INCAPABLE. Fixed bug in ppr/ppr_dscdoc.c:read_prolog() which caused it to insert "%%%%EndSetup" in stead of "%%EndSetup" when it didn't find one. Changed alert functions so that a printer name of "-" results in the alert message being written to stderr. Changed atalk_ali.c and atalk_cap.c so that they will use reasonable defaults if they don't get the full number of command line parameters. This makes it more convenient to use them interactively. Added --test switch to pprdrv. When this is used, no interface is launched, rather the output is sent to stdout and printer messages are looked for on stdin. Things which would ordinarily be sent to the job log, the printer status file, or the commentators are in stead sent to stderr. Added code to pprdrv/pprdrv.c:reapchild() to detect when it gets SIGCHLD for the interface when the interface has not exited or died on a signal. Why this would happen I don't know, but it might. Moved the commentator waiting code from the end of pprdrv.c:main() to pprdrv_commentary:commentator_wait() so that it could be called by the new function pprdrv.c:exit_with_commentary(). The function exit_with_commentary() calls exit_commentary(), commentator_wait(), and exit(). The fatal() function now calls exit_with_commentary() as its last act. 1.30b7, 9 January 1997--7 March 1997. Fixed audio commentator so it can handle events of type COM_PRINTER_STATUS_UPDATES. Fixed bug in pprd: it would not hold a job submitted with the --hold switch if a suitable printer was idle. Added "is idle" and "status update" and silly_sounds= to audio commentator. Added "fulljobname" to ppop qquery. Added tbcp2bin to Makefile clean clause. Changed the wording of the audio commentator miscelanious error message. Changed pprdrv/pprdrv.c:fatal() so that alert() is not called in --test mode. Forced all progress messages to 0 bytes, 0 pages, 0 pages until more than 5120 bytes have been sent. This is to avoid reporting progress which is really just bytes stuffed into the communications chanel. Added "state_update_pprdrv" file. Fixed a bug which might cause pprdrv hangs. This is because in version 1.30b5 reapchild() was corrected to set intpid to 0 when the interface exits. The problem is that if waitpid() returned 0 to indicate that there were no children which could be waited for then this would be mistaken for interface termination. The exact consequence is unclear. Reversed the assignements of interface_exit_code and interface_termination_expected since this seemed to have the outside potential to cause a race condition which also could have something to do with the hangs. Added paranoid code to reapchild() to check for the impossible interface exit code -1 since it would definitely cause a hang. Added code to reapchild() to specificly detect when the interface is stopped by a signal. Corrected SA_RESTART conditional code in pprdrv.c to set sa_flags to 0 if SA_RESTART not defined. Added #ifdef SA_RESTART to papsrv.c and lprsrv.c. Increased BUFSIZE in pprdrv_buf.c from 512 to 4096. In tests with the dummy interface this cut the job time of a sample job from 5 or 6 seconds to about 2 seconds. This should also limit the number of entries in state_update_pprdrv. This may have the undesired side effect of making progress indications too rough on short jobs. Eliminated MAX_THINGS from include/ppr.h, etc. Eliminated MAX_DRVRES from include/pprdrv.h, etc. Increased MAX_PPDTEXT to 8192. Fixed problems with reapchild() in pprd.c which caused it to misidentify certain bazzar pprdrv termination scenarios. Changed the gs* filter gsopt= cut command from "cut -d'=' -f2" to "cut -d'=' -f2-". This allows values with embedded equals signs. Commented out result code write for lprsrv lprm since it was appearing in lprm output and RFC-1179 does not mention a result code byte. Added code to set SO_REUSEADDR before bind() in lprsrv when operating in standalone mode. Improved XBM auto detect code to avoid falsely identifying C programs that began with "#define" as XBM files. Adjustments the form of some state_update PST messages and the "ppop status" machine readable output format. Fixed "ppop message" so that it can handle the new long status messages. Added a "resolution" field to mfmodes.conf. Changed top level Makefile so that it always makes the install directories when make install is run. Added support for the Ghostscript error message format "Unrecoverable error: undefined in x". Lengthened the xterm for the xwin responder to 7 lines. Added a prototype for ioctl() in sysdep.h section for OSF. Added code to setup_filters.sh to accept giftoppm as a substitute for giftopnm. Added responder options and environment variable PPR_RESPONDER_OPTIONS. (As a consequence, MAX_RESPONSE_ADDRESS was reduced from 256 to 100.) Added printed=no option to xwin, mail, and audio responders. Added voice= option to audio responder. Eliminated the errxwin responder since the xwin responder now supports the option printed=n. Retained the errmail responder since it existed in version 1.20. Added input file types wmf, emf, and fig. Added auto detection for fig. Added fig filter script which uses fig2dev. Fixed "ppad options" so that "ppad options dummy ''" or "ppad options dummy none" will delete the "Options:" line from the printer configuration file. Fixed the dummy interface so that it names the unrecognized option in the error message. Fixed the gs interface so it detects unrecognized options. (This wasn't being done because the gstcpip and gsatalk interfaces pass all unrecognized options to the tcpip and atalk interfaces respectively.) Added timeout= option to xwin responder. Added printed= and canceled= option to write, mail, xwin, audio, and samba responders. Changed ppr/ppr_respond.c so that it does setuid(uid) before executing the responder unless the setuid bit is set. (This fixes the xwin responder when -e responder is used but it effect on the other responders is unclear. Some of them may need to have the setuid bit set.) Added "#define OPEN_MAX _POSIX_OPEN_MAX to the SunOS 4 section of sysdep.h at the suggestion of Ethan Gold . The xwin, mail, and samba responders now all print the title and the number of pages. The pprpopup responder now prints the title if there is one. Added support for long options in switchsets. Added code to `clean' PATH and IFS in audio responder. Added auto-detection of MS-Windows placable metafiles. Added fake_lp program to serve as an lp-like wrapper and added --show-id option to ppr. Fixed installprogs/etc.init.d.ppr.sh, the name of the papsrv configuration file had not been changed here. Added printer_list.perl to misc. Renamed INSTALL to INSTALL.txt and README_MISC to README_MISC.txt. Audio commentator: Added separate table for status updates. It is used before the status and errors tables are consulted. Added status "off line" to audio commentator. (I thought I had already put that in.) Fixed papsrv/Makefile: it did not indicate that papsrv_authorize.c depends on papsrv.h. Changed the format the the ppop lpq "error, retry 2 in 10 seconds" to "error, 2nd retry in 10 seconds" because Samba would mistake the old format for a job name. (This is because it had the basic pattern of two words, one number, one work, one number, and one word.) (Thanks to Olivier Tharan for tracking this one down.) Changed ppr so that it adjusts the "%%Pages:" comment if there are fewer "%%Page:" comments than it indicates. (Steve Hsieh suggested this fix.) Increased the maximum size of the proxy string read from a queue file in ppop.c from 31 to 127 bytes. (Steve Hsieh thought that a user name plus an "@" plus a hostname could exceed 31 bytes. He points out that the LPR/LPD protocol allows 31 bytes for each.) Fixed ppad show so that it says "per side" if CHARGE_BY_SIDE is defined. Added "Charge-To:" line to queue file and added "--charge-to". Removed "-f -" feature. Added "-R" for feature. Extended "ppr -u false" to apply to the real name field in the ppuser database as well. Removed the unused file "include/filter_pcl.h". Changed the default "For:" name from pw_comment to pw_gecos. Using pw_comment seemed to work on most systems but not all. Changed the responder argument list to add an extra (currently blank) second message field and to move the responder options field closer to the front. Removed the global variables "sidecount", "total_printed_sheets", and "total_printed_sides" from pprdrv. Added the compute_charge() function to libppr. Changed the fig filter so that it removes the "%%Title:" line from the fig2dev output since it wall always say "stdin". Altered the guts of pprd_respond.c so that the RINFO struct is used to pass more of the aculated information rather than long lists of function arguments. Fixed the HTML/SGML detection code. A previous attempt to allow whitespace in front of the "gssimple, parallel->simple. This is to prepare for a new interface called "parallel" which will likely appear in version 1.40. Fixed lprsrv standalone mode so that if accept() fails, the server will simply report it as debug output and move on rather than killing itself. (Steve Hsieh ) Added DEBUG_INTERFACE_GRITTY to pprdrv and applied to to printer_flush(). (Steve Hsieh ) Added "%%Feature:" --> "%%IncludeFeature:" and "%%ExecuteFile:" to "%%IncludeDocument:" to ppr_old2new.c. 1.30, 12 March 1997--4 April 1997 Reworded ppr warnings about missing %%EndProlog to clearly indicate that one is being inserted. Beefed up checks in ppr/ppr_main.c:write_queue_file() to include tests for variables which contain only whitespace and would therefor mess up the ppr_sscanf() based parsing of the queue file. Added rule to lprsrv to convert a job name (N) of " " to "standard input". (Steve Hsieh ) Changed samba commentator so that it will accept the NETBIOSNAME-IPADDRESS form of address. Fixed papsrv so that it invokes ppr with the new "-R for" switch. Renamed the "HP DeskJet 870C Ghostscript" PPD file to "HP DeskJet 550C Ghostscript" and changed the resolution from 600dpi to 300dpi. Changed *FileSystem to True in Ghostscript PPD files. Replaced misc/pprpopup.tcl with a new version. Fixed ppr/ppr_main.c:main() so that it sets the FILE pointers comments, page_comments, and text to NULL after it closes them so that file_cleanup() will not try to close them again and thereby cause a core dump. Changed some messages in Configure related to the various ports and to the selection of AppleTalk support. Added IDLE_HACK_TIMEOUT to interfaces/atalk_ali.c for Steve Hsieh. In fixup.sh, put back in some commented out code which renamed an old media database file and moved some echo commands inside the conditional blocks in the LANMAN/X section. Cleaned up the installprogs/Makefile. Added support for the lp spooling system's postplot filter to setup_filters.sh. Fixed setup_filters so that it automatically detects if troff is a link to GNU troff. Corrected some type conversion mismatches in lprsrv debug messages by casting gid_t, uid_t, and pid_t types to long int. Increased MAX_VMOPTIONS in global_defines.h from 10 to 15. 1.31b1, 7 April 1997--20 August 1997 * Changed lprsrv.c so that the file type "l" (leave control characters) no longer selects the dotmatrix emulator. (Steve Hseih says that Windows NT will sometimes use this type instead of "f".) * In interfaces/lpr.c and interfaces/tcpip.c changed -1 to INADDR_NONE and removed cast of inet_addr() return value to int. * Renamed daemon() to ppr_daemon() to avoid clash with daemon() in BSD and glibc 2. * Added the function torf_setBOOL() and the type BOOL. * Changed the definition of struct Group in pprd.h so that the booleans which were of type char are now of type BOOL. Also changed the type of the member list from short int to int. * Moved the "normal" system dependent values from global_defines.h to sysdep.h. Removed BOOL from sysdep.h. Converted all NO_ things in sysdep.h to HAVE_ things. Generally reworked the whole system. * Changed the tcpip interface so that it assumes the feedback argument is TRUE if it is absent. This is part of the perparation for the GUI. I hope that TRUE is the right default. * Removed commented out code from interfaces/client.c and ppr/ppr_infile.c. * Made SHORT_INT a typedef rather than a define and changed the members of pprd's in memory queue array from short int to SHORT_INT. * Changed the lpr interface so that it will change spaces in the user name string to "_". * Added code to Configure to generate appropriate gcc options based on the results of "gcc --version" and "uname -m". * Fixed "ppad bins ppd" and added multiple argument support to "ppad bins add" and "ppad bins delete". (Patch from Steve Hsieh.) * Increased MAX_BINNAMES in pprd.c from 10 to 50. This is only a temporary fix. * In pprdrv.c, move the interface killing code into exit_with_commentary() so that fatal() will kill the interface and not stall for 60 seconds in commentator_wait() if the interface has already been launched. * In pprdrv.c: start_interface(): changed setting of O_NODELAY to O_NONBLOCK. Changed some messages to include errno. * Fixed Configure so that the CFLAGS for the native IRIX compiler include "-I /usr/local/include" and "-L /usr/local/lib". * Rearanged functions in libppr/myalloc.c so that they call fatal() in a way which looks ok to compilers which don't know that fatal() doesn't return. * Fixed a few static variable declarations which were implicitly of type int, making explicitly of type int. * Rewrote the upgrading section in INSTALL.txt and added instructions for switching IRIX to System V release 4 pipes. * A little cleanup of ppr/ppr_rcache.c. * Corrected lprsrv.c, it was using "-y" rather than "-o" to set the width for ppr. * Added a new source file ppr/ppr_simplify.c. * Renamed some functions and moved them to different files: Old Name New Name ------------------------------------ clean_getline() getline_simplify_cache() _clean_getline() getline_simplify() read_comments() read_header_comments() * Added the functions getline_simplify_cache_hidenest() and getline_simplify_cache_hidenest_hideps() which will be used in a future version to simplify the caching and nested structure handling. * Added "grep -v '^%%Title:'" to all of the shell script picture format filters because pnmtops inserts a title line with a title of "noname.ps" when it reads from stdin. * Changed wording of responder message from "Your print job has been rejected because of a fatal PPR error" to "Your print job has been rejected by PPR because of a fatal error" so as not to suggest that there error is necessarily in PPR. This error message may be the result of both internal errors in PPR and invokation errors such as asking it to print a file which does not exist. * Fixed ppr/ppr_main.c: write_queue_file() so that it will ommit the "Title:" line from the queue file if the title string is empty. This is necessary becuase Samba will invoke ppr with "-C ''". * Changed assert_ok_value() in ppr_main.c. It now distinguishes between emptyok and blankok. It also, for convienence, takes two strings for the name of the thing being tested. They are concatenated. * Added calls to assert_ok_value() to the switch parsing code for --for, --title, and --draft-notice (along with there one letter equivelents). * Fixed ppr/ppr_respond.c:respond() so that it does chdir(HOMEDIR) before trying to stat() the responder. It was doing the chdir() in the child. This meant that "-e responder" wouldn't cause command line syntax errors to be reported thru the responder since the stat() would fail. * Moved the init code install code out of fixup.sh and into a new script called install_init_code.sh. * Added $HOMEDIR/install/install to the list of outdated files removed by fixup.sh and removed the rm command for it from installprogs/Makefile. * Fixed myalloc.c to include errno.h and string.h. * Fixed ppr_rcache.c to include errno.h. * Fixed tcpip.c to bracket SA_RESTART reference with #ifdef. * Removed USE_SOCKET_FIFO from sysdep.h since it was never implemented. * Added HAVE_MKFIFO and lame fallback code in pprd.c. * Changed the Cygnus-Win32 section in sysdep.h. * Changed ppr/ppr_dscdoc.c to accept "%%PageOrder: Ascending" and "%%PageOrder: Descending" with a warning. (Steve Hsieh) * Added "volatile" to variables set by signal handlers in pprdrv, atalk interface. I don't know if this is the right thing to do, but that is how I understand the meaning of "volatile". * Added HP-UX support (Tim Leamy ) * Added SHAREDIR so that PPD files, pre-loaded cache, and speach files can be shared among architectures. * Fixed findNECHO and findEECHO in installscript and findNECHO in Configure so that they don't skip "echo" because [ -x echo ] is false. * Moved DEFAULT_PAGESIZE, DEFAULT_PAGE_PSU_WIDTH, DEFAULT_PAGE_PSU_HEIGHT and friends to global_defines.h and changed filter_lp, filter_fortran, and filter_dotmatrix to use these values. * Added pagesize=, mediacolor=, mediatype=, mediaweight=, and duplex= to filter_dotmatrix. * Removed "samba_mail" clause from libppr/reswidth.c. * Added the skeleton of AT&T UWIN support. * Moved parts of the lpr interface into a new liblpr.a. * Added PPR_GS_HACK_ADDRESS support to tcpip interface for consistency with the atalk interface. * Renamed ppd/ghostscript/ghostscript.master to ghostscript_master. * Merged gssimple.sh, gsatalk.sh, and gstcpip.sh into a single file gs_master.sh from which each of the origional files may be generated using cpp and sed. * Added 255 to the error codes which gs_master.sh interprets as a PostScript error. This may not have been necessary or even a good idea since 1.30b7 added support for Ghostscript error messages in the form "Unrecoverable error:". * Fixed icmpn() which was comparing one character less than what it was told to. (Patch submitted by morio@sozio.geist-soz.uni-karlsruhe.de.) * Fixed responders/time_elapsed.c which was appending an extra space to elapsed times of less than 2 days. * Added the sysdep.h define FAKE_SIGIO which enables code to use SIGALRM polling and a few additional polling calls in close_interface() and reapchild() as a substitute for a working SIGIO or SIGPOLL. * Changed ppr_infile.c: exec_filter() so that it takes an additional argument, the filter argument list type. * Fixed ppr_infile.c: nofilter() so that it uses the new log file name format. (It had ommitted the destination node and home node.) * Changed ppr_infile.c to eliminate buffer_count and prohibition on PJL and David's dot headers that stretched beyond the first input buffer. * Changed ppr_infile.c: stubborn_rewind() so that it will use unique names for its temporary files as a step toward accomodating systems which can't unlink() open files. * Added code to ppr_req.c to convert old style punch options to new style. (See RBIIp 704.) * Added code to issue warnings for %%DocumentPaper and %%Paper comments. * Added warnings code for two argument %%Pages, %%ExecuteFile, and %%Feature in DSC >= 3.0. * Fixed ppr_sscanf() so that %d will not read 0 if there are no digits. * Corrected handling of "%!PS-Adobe-" specified by DSC 1.0. It is now changed to "%!". * Fixed spurious peeve warning that "0 characters follow EOF mark". * Changed the response message which said "because it does not conform sufficently to the DSC" to "because it does not have DSC page division information". * Renamed getline() in ppr to in_getline(). * Reworded some warnings in ppr_old2new.c, ppr_dscdoc.c, and ppr_req.c for consistency. * Added the functions handle_atend(), trap_noarg(), and trap_atend() to ppr_dscdoc.c. Also made header_trailer() static since it is not called from other modules. Fixed the trailer argument in the call in read_trailer(). (This fixed a _lot_ of bugs discovered during the development of the regression test for this module.) * Eliminated old_to_new_header_trailer() and old_to_new_pagelevel() and replaced them with code in ppr_dscdoc.c. This allowed correct implementation of the parsing rule in item 5 on page 631 of the Red Book. * Added global variable tokens_count to tokenize(). * Changed ppr_old2new.c so that %%EndProcSet, %%EndFile, and %%EndFont are not upgraded to %%EndResource if the %%Begin comment didn't have an argument. * pprdrv: Corrected the hack from printers which hangup after a PostScript error. The correction was to add code like that in main() to reapchild(). (Patch from Labie Vincent.) * renamed ppr --show-id to --show-jobid and added --show-long-jobid. * Cleaned up interfaces/alert.c a little. * Moved is_ppr_dest() from lprsrv.c to liblpr and renamed it to printdest_claim_ppr(). * Moved the lp/lpr path definitions from lprsrv.h to sysdep.h and liblpr.h and added new ones LP_LIST_PRINTERS, LP_LIST_CLASSES, and LPR_PRINTCAP. Also made STANARD_ and SIDELINED_ versions of the lpr and lp paths and added SIDELINED_LP and SIDELINED_LPR to the user settable options section in global_defines.h. * Added PPR_DSC_PREFIX to global_defines.h. * Added "%TCHCTSpooler: PPR-1.31" to header comments emmited by pprdrv. * Added environement variable PPR_VERSION to pprd, ppr, and papsrv and added calls to a new library function prune_env(). * Renamed SHORT_PATH to SAFE_PATH to better reflect its purpose. * Changed the responder invokation so that the reason is no longer enclosed in (). * Changed the xwin and samba responders to to say "Probable cause: ". Also added spacing between the parts of the message in the xwin responder in an attempt to improve readability. * Added --foreground switch to pprd so that is can be run from init. (Suggestion of Michael Deutschmann .) * Changed the wording of a ppop cancel message from "There were no jobs to cancel." to "You had not jobs to cancel.". This is intended to make it more obvious that with version 1.30 ppop cancel no longer attempts to delete all jobs but mearly deletes all jobs owned by the user who calls it. * Added catching of Ghostscript exit code 139 which seems to indicate a core dump. * Altered the line spacing in the xwin and samba responders. * Fixed ppad delete and ppad group delete so that they now run ppop purge rather than ppop cancel before deleting the destination. * Rewrote fake_lp, made the libuprint.a, write fake_lpr. * Added conditional defined for INADDR_NONE after include of netinet/in.h in interfaces/tcpip.c and libuprint/lpr_connect.c. * Changed PPR_PATH and PPOP_PATH in global defines to give the full path rather than the path relative to HOMEDIR. * Changed sysdep.h. Now more systems define a signal() macro including SGI and HP-UX. The macro for SunOS 4.x no sets the SA_INTERUPT flag. * Added Dingbats -> DingbatsMedium to fontsub.conf. * Fixed some ommisions of SHAREDIR in installprogs/makedirs.sh. Also fixed procsets/Makefile and dotmatrix/Makefile so that they put the procedure sets in SHAREDIR rather than HOMEDIR. * In ppr/ppr_main.c: Changed -R ignoreduplex to -R ignore-duplex, -R ignorefor to -R ignore-for, -R ignorecopies to -R ignore-copies, --ignore-dsc-title to -R ignore-title and added -R title. Fixed lprsrv/lprsrv.c to use -R ignore-title in stead of --ignore-dsc-title. * Changed ppr --default-media to --default-medium. * Changed libppr/daemon.c so that it uses sysconf(_SC_OPEN_MAX) rather than OPEN_MAX, removed OPEN_MAX from include/sysdep.h. * Changed libppr/daemon(): ppr_daemon() so it no longer does chdir(HOMEDIR), changed pprd/pprd.c, papsrv/papsrv.c, and lprsrv/lprsrv.c accordingly. 1.31b2, 21 August 1997--12 September 1997 * Fixed procsets/Makefile, dotmatix/Makefile, ppd/ghostscript/Makefile, encodings/Makefile, fonts/Makefile substituting $(SHAREDIR) for $(HOMEDIR) in paths to procedure sets and PPD files. * Changed installprogs/fixup.sh, adding an outdated() function which is used to delete outdated files. It only prints the name of the file and tries to deleted it if it exists. * Renamed lprsrv.c:getline() to lprsrv_getline() to avoid GNU libc clash. * Moved definition of _GNU_SOURCE out of the Linux section of sysdep.h and into the top of global_defines.h. * Changed serveral instances of the word "media" in warning() calls in ppr/ppr_media.c to "medium". * Removed the rm -f ../ppr-src-*.tar.gz from the top level Makefile. * Created print_pap_status() function to deal with DeskJet 850C. Also created is_pap_PrinterError(). Both are in libppr. * Renamed libppr function unsafe_ps_name() to is_unsafe_ps_name(). * Modified lprsrv so that it uses the new functions printdest_claim_lp() and printdest_claim_lpr() in libuprint. This means that it can now pass jobs to both lpr and lp simultaineously if the compile time options have been set to include the code for both. It also means that lprsrv does not blindly pass jobs for unknown destinatins off to the "system print spooler". * Added periods to the end of certain fatal() calls in pprd.c. * Changed pprdrv_capable.c to state what the required langauge level and the printer's language level are when the printer's level is not adequate. * Fixes for OSF/1 3.2 port: Added interupted system call retry to fgets() call main() which reads from the FIFO, restored linking of pprdrv against libsys5.a in order to get a pipe() which supports SIGIO, removed references to $(OSFLIBS) from Makefiles for papsrv, pprd, and ppr2samba. * Fixed pprd_ppopint.c so that ppop move moves the -infile. (Bug reported by Steve Hsieh.) * In pprdrv/pprdrv.c, renamed copy_page() to copy_a_page(). * Fixed a problem with jobs which had the pages in reverse order in the input file when the number of pages was not an even multiple of pagefactor. When copy_pages() in pprdrv.c ran off the end of the list of page descriptions the fact wasn't being detected as it was for jobs which had their pages in ascending order. (Bug reported by Steve Hsieh.) * Restored the removal of unrecognized "(atend)" comments. (The corrected (atend) processing in 1.31b1 accidently led to their being copied into the -comments file.) 1.31, 15 September 1997--6 October 1997. * Changed the names of some functions in pprdrv/pprdrv_progress.c removing bould underscores and changing pprdrv_state_update_write() to pprdrv_state_update_addline(). * Changed lprsrv so that it returns an error code of 2 if a data file transfer fails due to a want of disk space. Also fixed it so that it will return a code of 2 if the receive data file command detects a want of disk space. (Patch from Steve Hsieh.) * Moved the MAX_* stuff out of lprsrv.c and into uprint.h and renamed it to LPR_MAX_*. * Fixed but in lprsrv, missing else in job dispatch code which could cause the job to be submitted to both ppr and lpr if both claimed the job. (Bug report from Steve Hsieh.) * Added code to fixup.sh to remove fake_* programs from PPR's bin directory. (These programs were renamed to uprint_* in 1.31b2.) * Copied lprsrv.c to nlprsrv.c and renamed lprsrv.c to olprsrv.c, did the same for lprsrv.h. Changed lprsrv Makefile so that it installs $(HOMEDIR)/lib/lprsrv as a link to olprsrv. * Changed fixup.sh to make everything in ~ppr/bin executable by world (chmod 755) before setting individual permissions. (Steve Hsieh had trouble because of his umask setting.) * Finished libuprint, fake_lp, fake_lpr, fake_lpq, and fake_lprm. Combined SIDELINED_LP and SIDELINED_LPR into NATIVE_SPOOLERS_SIDELINED. Changes to libuprint necessitated changes to the lpr interface will cause slight differences in the formatting of its error messages. * Added the define LPR_EXTENSIONS_OSF to the DEC OSF section of sysdep.h. This is for future use by libuprint. * Added the uprint_* programs to those which get made setuid root by fixup.sh. * Defered warnings about DSC comments which overflow ppr's continuation buffer until such time as those comments are continued. * Added peeve level warning for DSC comments which don't have a space after the colon. * Fixed the System V lp class and printer detection paths in sysdep.h for SGI and HP-UX. Took a guess for System V Release 4.0 for WGS. There is no longer a default setting for these variables. * Modified printdest_claim_lp() so that it will only accept as a printer a subdirectory (for Solaris 2.x) or a non-zero-length file. This is so we can create zero length files in /var/spool/lp/interface on SGI systems without uprint thinking lp has a printer. (This is for the SGI program glp and friends.) * Moved NATIVE_SPOOLERS_SIDELINED from global_defines.h to Configure which may put it in CFLAGS in include/global.mk. * Added HOMEDIR/editps to directories created. * Made indexttf setuid ppr and put a test a the top of main() which makes it abort if the effective uid is 0. Cleaned it up a little too, making it include truetype.h. Made it setuid ppr and setgid ppop. * Changed ppr/ppr_dscdoc.c:feature_spy() so that it interprets a feature "*Media None" as an empty media type string just as it already did for "*MediaType Plain". (This is for the HP 5Si PPD file.) * Made ppr complain if its EUID is the same as it UID and the UID does not correspond to USER_PPR or if the EUID is 0. * Made the "Spooler is not running message" apply only if errno is ENOENT or ENXIO (which indicates an unattached FIFO). * Made all C source files in libppr include global_defines and changed the return type of padded_cmp() from int to BOOL. * Added libppr/strerror.c:safe_strerror() as workaround for Linux strerror() bug. * Added /etc/ppr/editps.conf (so that -H editps works) and ppr -G infile:editps. * Removed GROUP_PPOP, GROUP_PPAD, GROUP_PPRPROX from fixup.sh, include/global_defines.h, and installprogs/installscript.sh. Made fixup set most PPR files to GROUP_PPR. Made lprsrv demote self to GROUP_PPR when started as root in standalone mode. * Added LICENSE.txt. * Added libppr/acl.c:user_acl_allows() and made ppr, ppop, and ppad user it. * Created an editps filter for Windows NT 4.0 output. * Adjusted the wording of a few warnings in ppr/ppr_res.c. (Changed "inclusion cue" to "%%%%Include", change "not declared" to "never declared" and a few other things like that. * Changed libuprint/uprint_run.c:uprint_run() so that if the command runs to completion it returns the command's exit code rather than 0 as it formerly did. * Fixed problems with the exit codes of uprint_lp, uprint_lpr, uprint_lpq, and uprint_lprm so that they return the exit code of the program they call. Previously they tended to return 1 no matter what happened. * Changed printdest_claim_lp() so that it accepts a file in the printer's directory if it is a directory (for Solaris 2.x), if it executable (sane interface program), or if it does not begin with "#UPRINT". 1.32a1, 7 October 1997--16 October 1997. * UPRINT: Added OSF options support to uprint_lpr, the RFC 1179 dispatcher, added LPR_EXTENSIONS_OSF support to the lpr dispatcher. * UPRINT: Added file type specification and OSF options translation to the ppr dispatcher. * UPRINT: Added many missing options to the lp dispatcher. * UPRINT: removed security problems due to failure to relinquish root access. * Removed comments from smb.conf.sample which refered to "pc.myorg.org", something that applied to an old version of the samba responder. * Fixed installscript.sh which was substituting "" as the value for SHAREDIR. (I touched all *.sh, *.perl, and *.pl files so that they will be re-installed using the new installscript.sh.) * Fixed ppr_infile.c so that -H editps will still work if other hacks are used. (The problem was that == was used in the test in stead of &.) * Changed ppr --show-jobid so it says "(1 file)" just as System V lp does. * Changed uprint_print_rfc1179() to show the number of files too, also changed job id number it displays to "0" to conform with Solaris 2.6 lp. * Removed ioctl() prototype from OSF/1 section of sysdep.h. * Updated lw_errors.conf and lw_status.conf. * Changed the DVI filter (misc_filters/dvi.sh), making it add the DVIPS basedir to the PATH so that it can find MakeTeXPK. * Removed explicit path setting from misc_filters/pr.sh * Added BIND_ACCESS_BUG to sysdep.h for Solaris 2.x, added code in libuprint/lpr_connect.c to work around this bug. * Added --markup. * Added -T enriched. * Added -T mime type recognition. (Most -T types don't have MIME names entered in the table yet. * Added strip to the things installbin does. This should allow me to remove most instances of strip from the Makefiles (to ease debugging). 1.32a2, 17 October 1997--6 November 1997. * Added uprint-remote.conf and moved all current uprint.conf functions to uprint-remote.conf. * Combined lw_errors.conf and lw_status.conf into one file, lw_messages.conf. The string "PrinterError:" now appears in many of the messages. Whether "PrinterError:" appears in the regularized string now determines whether the message is reported to the commentator as an error or simply a status. Also, the code value passed to commenators has changed slightly. Previously, either COM_PRINTER_STATUS, COM_PRINTER_ERROR, or COM_PRINTER_STATUS_UPDATES was set. Now if COM_PRINTER_STATUS_UPDATES is set then either COM_PRINTER_STATUS or COM_PRINTER_ERROR is set too. Appropriate changes made in commentators/audio.perl. * Added ppr --commentary with support in queue file. * Added ppr reading of "%%DocumentData:" with support in queue file and restoration in pprdrv. * Some code cleanup in ppad. * Replaced the AppleDict proceedure set with an appearently newer one off of Shakti. * Added BACKUPS= to include/global.mk generated by Configure. * Fixed baud rate setting code in interfaces/serial.c. * Major re-write of interfaces/serial.c to eliminate the child process. The new version uses select(). * Modified pprdrv/pprdrv_feedback.c to remove control-D's since the new serial interface copies them to its stdout. * Reworked pprdrv/pprdrv_feedback.c to defer handling of partial lines more correctly. * Removed various useless calls to setsid() from pprd. (It called it after forking to invoke pprdrv and sendmail.) * Removed calls to setsid() from pprdrv. It now calls setpgid(0,0) near the top of main() and sends SIGHUP to the group in commentator_wait() if they don't finish within 60 seconds. The call to setsid() in the interface child has been replaced with setpgid(0, 0) so that the kill of the interfaces process group will continue to work. * Removed calls to setsid() from papsrv child launch. * Dropt the "wait=" option from the serial interface. Dropt the "online=cd" option. Added an "online=dsr/cts" option. Added a "detect_hangups=" option. Added a "hangup_on_close=" option. Added "rtscts=" option. * Added parallel interface. * Added gsserial and gsparallel interfaces. * Fixed AT&T port so it compiles again. It probably didn't work in 1.30 and 1.31. 1.32a3, 14 November 1997--21 November 1997. * Fixed ppad charge rounding error. (Reported by Klaus vom Scheidt .) * Changed gs interfaces to sleep for 2 seconds and then exit with EXIT_PRNERR if Ghostscript exits with code 141. (The 2 second sleep is done in the hope of catching a signal. * Changed commentator timeout code so that it does not start a new section in the printer alerts log (i.e., it uses FALSE as the second parameter for alert(). * Reworked do_daemon() a little, adding umask() call and moving some of the code out of #ifdef HAVE_FORK. * Corrected to value of UNIX_644. (It had been 660.) * Added umask setting to ppr, ppad, ppuser, ppr2samba, and indexttf. * audio commentator: Moved "off line" from the status to errors. * Added "PrinterError: off line" to lw_messages.conf. * Fixed syntax error in samba commentator. * Changed the permissions of state_update (the file thru which pprd indicates spooler status changes to GUI interfaces) from 755 to 644. * pprdrv: Finished TBCP support. printer_putc, printer_puts, and printer_write are no macros which refer to function pointers. * pprdrv: added printer disqualification on the basis of code useage. * ppad: fixed ppad codes command. It was storing the name string, not the code number. * Changed the order to the printer interface program arguments. (The first three, the printer name, the printer address, and the interface options remain the same.) * atalk_cap.c: removed appearently unnecessary resetting of sigalrm_caught. * Added PCL magic number from Steve Hsieh. * ppr: Removed a bug in getline_simplify() which made if fail to call tokenize() on lines such as "%%ADO_ImageableArea: -31 -31 581 977". The result of this bug was that in LaserWriter 8.x output, the %%DocumentMedia: line was being parsed twice. * ppr: Improved the messages about imperfect medium matches. 1.32a4, 24 November 1997--20 January 1998. * Wrote code to read uprint.conf and removed the NORMAL_LPR_PATH and friends from sysdep.h and uprint.h, also removed NATIVE_SPOOLERS_SIDELINED from Configure. * Made changes to olprsrv.c to use uprint.conf. * Minor changes to get PPR closer to working under UWIN 1.35. * Changed misc/samba.conf.sample to mention "chmod 1777" and added "printing = bsd" with note that it goes in the [global] section if Samba is older than version 1.9.18. * Major work on lprsrv to convert it to use libuprint routines. * Renamed libuprint/uprint.conf to uprint.conf.sample and libuprint/uprint-remote.conf to uprint-remote.conf.sample * Added lprsrv.conf access control to the new lprsrv. * Changed printlog format to use a four digit year. * Added PPD file for "HP LaserJet 4000 Series". * Replaced misc/modes-3.1.mf with modes-3.3.mf. * ppad_filt.c: change mfmodes.conf matching so that resolutions stated in the PPD file in forms like "600x600dpi" will be converted to the form "600dpi" before an attempt is made to match them against mfmodes.conf. (This change was inspired by the PPD file "HP LaserJet 4000 Series". * Eliminated the all wildcard rule from mfmodes.conf. Consequently, when no match is found the mfmode= item will be ommited from the default filter options and the DVI filter will let dvips choose the mode. * Changed a ppad debug message so that it will state the resolution it is looking for in mfmodes.conf. * In pprdrv_ppd.c: expanded the PostScript code which is used to bracked duplex code inserted by the -F switch. Formerly it saved and restored the current transform matrix. Now it also saves and restores the current point. 1.32a5, 22 January 1998--26 February 1998. * Renamed interfaces/feedback_test.ps feedback_test1.ps. Moved tests/misc_old/int_test.ps and int_test2.ps to interfaces and renamed them feedback_test2.ps and feedback_test3.ps. * libppr: added padded_icmp() * ppr_media.c: Changed pass 2 media matching so that the comparision of media types is case insensitive. * libppr: Added support for /etd/ppr/acl/???.allow files to user_acl_allows() * Hooked up -A switch in the new lprsrv. (I added a global variable uprint_arrest_interest_interval in libuprint.) * Split lprsrv.conf "become user" and "proxy user" into "ppr" and "other" versions. Changed "user format" to "ppr user format" and "proxy class" to "ppr proxy class". * Added program lprsrv-test. * Added /etc/ppr/acl to installprogs/makedirs.sh. * Added internationalized messages option to Configure. If turned on it will put lines in global.mk to add -DINTERNATIONAL to CFLAGS and define INTLLIBS. * Started to add gettext() initialization code to programs. * Added po source directory with extract.sh and README.txt. * Added internationalization startup code to uprint programs, to pprd, and to ppr. * Removed USE_SHORT_STRINGS from sysdep.h and ppr_main.c. * Moved input filters to $HOMEDIR/filters * Changed ppr to set umask to PPR_JOBS_UMASK which is defined as 007 rather than a hard coded value of 0077. * Renamed directory indexttf to ttfutils and created empty directory libttf. * Moved GUI (called "printdesk") into printdesk directory. * Renamed the temporary program dotmatrix/prop to dotmatrix/prop_genmetrics. * global_defines.h: added TBCP2BIN_PATH and AFMDIR. * created installprogs/ppr_make_depend.perl and started a conversion to a more complex but less verbose Makefile structure. Also started to convert the install clauses to copy the programs and files into place regardless of relative dates. (This seems to be the accepted procedure.) * Added ppr option -e no-hexdump as replacement for -e dishexdump. (Though the old one still works.) * Renamed the uprint programs from uprint_* to uprint-*. * Removed the scripts uprint/install_uprint.sh and uprint/uninstall_uprint.sh. Added them to the "Removing Obsolete Files" section of installprogs/fixup.sh. * Internationalized filter_lp. * Added libppr/cs2enc.c:charset_to_encoding() and changed filter_lp to use it. This is a step toward Russian character set support. * Re-arranged the libpprdb directory. It now has no children. The different backend modules are distinguised by the part of the file name before a "_". * Moved PostScript very incomplete document generation library "typeset" into distribution. * Added --no-edit option to installprogs/installscript.sh. * Reorganized the code in pprd/pprd.c:main(). I split much of it out into static functions to make it easier to see the order of startup operations. * Changed the gs* interfaces and the interfaces that they call so that rather than pass the PID of the shell script thru the undocumented interface option "patron=" it is passed thru the environement variable PPR_GS_INTERFACE_PID. This was necessary because in many of the interfaces it was inconvienent or impossible to parse the interface options before the first condition that could result in a fatal error. * Changed the code in Configure, and installprogs/installscript.sh to put the test of echo in a subshell since otherwise SunOS 5.6 /bin/sh will not redirect output until it has found the command in the path. * Changed ppd/dopatches.sh so that it will detect if it will try to determine if patch is Larry Wall's and if not use temporary files to avoid feeding patch file names with spaces in them. The patch that comes with SunOS 5.x has a bug which makes it choke on file names with spaces in them. * Changed the sample uprint.conf so that the the sidelined locations of the system spooler programs is still /usr/bin but they have "real-" prefixed to their names. * Internationalized tcpip interface. * Changed the name of the "status_update_interval=" option of the atalk interface to "idle_status_interval=" but retained recognition of the old name for compatibility. * Added the "idle_status_interval=" option to the tcpip interface. * Modified pprdrv_feedback.c to recognized TBCP coming from the printer and decode it. It will swallow the ^AM that announces TBCP. * Broke pprd.c up into pprd.c, pprd_mainsup.c, pprd_load.c, and pprd_queue.c. This is part of a project to better organize things and to reduce the paged-in size of the daemon by putting initialization code all together. * Added a libppr function set_ppr_env() to set HOME, PATH, IFS, and PPR_VERSION. This code is now called by ppr, pprd, papsrv, and lprsrv. * ppr: Moved seteuid()/setegid() code into two functions called become_user() and unbecome_user(). Bracketed getcwd() with calls to these functions. Renamed uid and gid to user_uid and user_gid. * Added PPR responder options support to uprint-lp, uprint-lpr, libuprint, and lprsrv. * Changed ppop lpq output format so that there are no spaces in the file name field when the messages "arrested" and "held" are added. This should make Samba happier. * Moved atalkmapd.perl from "responders" to "misc". Reworked the responders/Makefile and added notes to responders/atalk.perl to indicate that it has never worked very well. Moved responders/atalk.conf to misc/atalk.conf.sample. * Changed responders/pprpopup.perl so that if there is an "@" in the address it will take the part before the @ and use it as the parameter for a "SETUSER" command. This is so it can send to multi-user systems. * Created misc/pprpopupd.perl, a message-receiver daemon for multi-user systems. * Changed responders/pprpopup.perl so that it does not print the message that begins "Your job's log file follows" unless there is a log file. * Fixed a problem with lprsrv/lprsrv_print.c:dispatch_files_run(). The child process would demote it self before opening the log file. * Changed uprint-remote.conf parsing so that the section name is the default remote printer name. * Changed libuprint/uprint_print_rfc1179.c so that OSF extensions are also used if "ppr extensions" is true. * Combined xppr.sh and xpprstat.sh into xfm-ppr.sh. Added the old programs to the list of obsolete files in fixup.sh. * Corrected pprd_respond.c which was using "-1" rather than "?" for the responder number of pages parameter when the number was unknown. * Re-wrote readqfile.c to prepare it for less rigid queue files which may come as a result of remote PPR printing. This included the adding of a "EndMisc" line to the queue file format. * Added %u to ppr_sscanf(). * Prepended "option_" to a number of variable names in ppr. * Removed the -p (--portion) switch from ppr. * Renamed lw_messages.conf to lw-messages.conf. Moved lw-messages.conf, fontsub.conf, editps.conf, and mfmodes.conf into $(SHAREDIR)/globalconf. * Fixed lprsrv so that if the L line does not appear it sets nobanner true rather than setting banner true if it does. The result is that PPR will not print banner pages unless banners is set to "yes" with ppad. * Renamed lw_message.conf to lw-messages.conf. Moved lw-messages.conf, fontsub.conf, mfmodes.conf, and editps.conf into GLOBALCONF. Split lw-messages into a CONFDIR and a SHAREDIR/globalconf portion. Both are read and the changes are made to the CONFDIR portion. * ppr/ppr_main.c:write_queue_file(): cut back down to one argument. The code in ppr/ppr_split.c must modify the structure before it passes it to write_queue_file(). * Added RESP_CANCELED_NOPAGES and EXIT_NOTPOSSIBLE and ppr_selpgs.c:select_pages() for the new page selection feature. * Changed myfree() so that it detects attempts to free NULL pointers. * Fixed an error in ppr_sscanf(). If an integer pattern such as "%d" failed to match, it would ignore the pattern and continue with the next one. Worse yet, it would use the argument for the skipt pattern for the next pattern. In order to fix this I changed "if(!isdigit(*string)) break;" to "if(!isdigit(*string)) goto break_break;". * Began internationalization of ppop. * Fixed ppop.c:parse_job_name() so that it does not interpret input of "-" as a zero length destination name. It now considers such input to be an error. It also now prints a message when confronted with trailing garbage rather than just returning -1. * Made logical_eof a static in ppr/ppr_infile.c and added the function in_eof() to provide read-only access. * Changed ppr_infile.c so that in_getline() does not make "%%EOF" lines when it sees HP UEL or control-D. This will change the behavior of the -Z switch. * Changed ppr_main.c:main() and functions such as read_pages() and read_trailer() to absolutely ensure that the "-text" file ends with "%%Trailer". It is also now guaranteed that the "-pages" file ends with "%%Trailer" and "Offset: xxx". * Ran regression tests "test-ppr". Found one problem due to a change in header_trailer(). A "strncmp(line," had been changed to "strcmp(tokens[0]," which wasn't the right thing. The other difference, in part 1 of test 300-badeps is probably due to the change in the paragraph before this. The new results seem more correct. * Fixed gramatical errors in the printer alert messages in pprd/pprd_alerts.c. 1.32b1, 26--27 February 1998. * Added "/usr/local/cap60/lib" to the list of directories searched for the CAP 6.0 library. * Corrected pprd so it creates /var/spool/ppr/queue when it starts up. I wonder when this bug appeared. * Made libppr/pprpopop.pl:make_connexion() parse the address with a regular expression to avoid insecure dependency warnings. * Simplified the buffer flushing code in pprdrv_buf.c: If write() sets errno to EPIPE then it sleeps for 10 seconds and then calls fatal(). Hopfully, the interface will exit during that period. * Fixed pprdrv/pprdrv.c:start_interface() so that it will block SIGCHLD just before fork() and then unblock it in the parent. (The child code already clears the signal mask.) The idea is to guarantee that the parent can record the child process id in the variable "sigint" before reapchild() is called. On Solaris 2.6, if the interface exited due to an error in the interface options and the jobbreak method was signal or signal/pjl, then pprdrv would block forever waiting to receive SIGUSR1 from the interface. Of course, since intpid was not set, reapchild() mistook the interface termination for the termination of a commentator. * Added a check to pprd so that it will not let the user "ppr" start the spooler unless the gid is also "ppr". This is important because it cannot set all of the group ids to the proper value if it is not root. Consequently, some commentators would fail due to Perl taint checks which got turned on because Perl was running setgid. * Finished uprint-newconf and moved it from the uprint subdirectory to the libuprint subdirectory. * Added BROKEN_PERMISSIONS for Steve Hsieh. This is an experimental workaround for a bug in the NFS he is using. 1.32b2, 2 March 1998--20 March 1998 * Fixed dependency errors in libuprint/Makefile and uprint/Makefile. * Added extra DODEBUG(()) calls to interfaces/atalk_ali.c as suggested by Steve Hsieh. * Fixed lprsrv -A and -s switches which were messed up due to bad parsing tables in the new lprsrv. * Made ppr/ppr_main.c:main(): call infile_file_cleanup() before calling exit() if open_fifo() fails. * Added file type "hpgl2" for HP-GL/2. * Added "BarBar" mode and -H hppassthru. This includes a new queue file line called "BarBarLang:". * Changed ppr/ppr_infile.c:in_eof() to return TRUE only _after_ the first call to in_getline() _after_ the one which returned the last line. * Cleaned up ppr/tbcp2bin.c a little. * Added "PJLHint:" to queue file and PJL member to struct QFileEntry. * Split the interface launching code and printer setup code out of pprdrv/pprdrv.c and put it in pprdrv/pprdrv_interface.c. Changed the external interface to the job managment routines. Formerly the functions were: start_interface(), printer_setup(), printer_reset(), jobbreak(), and close_interface(). Now they are job_start(), job_end() and job_nomore(). * Added a 10th parameter to interfaces which tells the BarBar language. * Changed -H transparent so that it prints banner and trailer pages. I hope I have not destroyed its usefullness (if it ever had any). * Changed parallel interface program so that if open() of the port returns EBUSY it will retry retry 29 times at 2 second intervals. Tests on Linux-2.0.25 showed this to be necessary. If the timeout expires it will exit with EXIT_ENGAGED. If it is being run from gsparallel, it will send gsparallel SIGINT. * Changed fig filter so that it invokes fig2dev with the -P switch and consequently no longer needs to do as much massaging of the PostScript output. * Changed "media" to "medium" in a responder message. Also changed it in the audio responder. This will require the rerecording of a sound file, but for now I have simply renamed it. * Changed the gs* interfaces so they will ommit Ghostscript from the pipeline if the 10th parameter (barbarlang) is blank. * Changed the tcpip, parallel, and serial interfaces so that they will use resonable defaults if they are invoked with as few as 2 parameters. * Fixed error in uprint.conf.sample. Error was "lpr = /usr/bin/lp". * Renamed /var/spool/ppr/lpr_nextid to lpr_previd and changed the start of the sequence numbers from 0 to 1. The new name better reflects its purpose. I will leave the PPR nextid file for when I fix that whole mechanism. * lprsrv: corrected problem which occured when nobody uid was -1. * Uprint and lprsrv: cleaned up handling of no files specified and "-" as stdin. * In numberous modules, moved inclusion of global_defines.h to a point after the inclusion of the system includes. On Cygnus Win32 this caused a problem because sysdep.h generally defines a macro signal() which gave trouble when signal.h was subsequently included. Note that system includes whose conditional inclusion is dependent on values defined in global_defines.h (or sysdep.h which it includes) must still come after the inclusion of global_defines.h. * Fixed uprint-lpr -K switch so it accepts the addional argument forms accepted by OSF lpr and translates them to the forms that OSF lpr puts in the queue file K line. Invalid -K switch values are now rejected. * Changed ppr default from --markup=format to --markup=fallback-lp. * Fixed ppop lpq so that it displays the correct total number of pages in the printer status line. * Fixed many of the filters in misc_filters. They were broken because they were calling other filters which had been moved from $HOMEDIR/lib to $HOMEDIR/filters. * Added -o title= to pr filter and modified libuprint to generated it for the pr title (T in lpr queue file). * Changed the "file" commentator time format to use a 4 digit year. * Added the --passthru switch and made many changes to support non-PostScript printer languages. * Added "#define ANSWER int" to global_defines.h. * Added interface option "control_d_handshake=" to tcpip. The default is false if the jobreak method is PJL. * Beefed up pprd/pprd_mainsup.c:adjust_ids() so that it actually looks up the correct ID numbers for user "ppr" and group "ppr" and makes sure the euid and egid are correct. 1.32b3, 23 March 1998--3 April 1998 * Added confirmation messages to Configure script for A4 vs. US Letter and GNU gettext(). * Added include "before_system.h" and changed sysdep.h to use PASS1 and PASS2. * Fixed gs* series interfaces and some filter shell scripts to work with /bin/sh again. They used ${10} which appearently only works in Bash. * Changed the sed filter used with cpp on gs_master.sh to remote lines begining with "#". * Changed ppr so that if the -u switch setting is to use the /etc/passwd gecos field as the user name but the gecos field is empty, it will use the user name. (Thanks to Robert G. Smith for helping to track this one down.) * ppr/ppr_infile.c: added macro FABS() to replace fabs() thus obviating the necessity to link with libm. * Changed libuprint/uprint_uid.c:uprint_re_uid_setup() to add an pointer argument for returning the "safe" uid. This is to fix standalone mode in lprsrv. * Fixed libuprint/claim_lpr.c:claim_lpr() so that it is non-empty if USE_LP is defined rather than if LP_PATH is defined. The macro LP_PATH was removed some time ago. The result of this bug was that libuprint would never hand jobs off to lpr. * Changed libuprint/uprint.c:uprint_set_jobname() to reject zero length job names. I did this because a queue file received by lprsrv might have such a thing and letting it thru would get ppr upset when it discovered that its --lpqfilename switch had an empty argument. * In include/global_structs, changed "struct PAGESIZE" to "struct PS_PAGESIZE" because PAGESIZE is a macro defined in some file included by stropts.h in Solaris 2.5.1. * Changed pprdrv/pprdrv_interface.c:printer_setup() so that PJL commands from a barbar job are inserted before those provided by PPR. This provides extra protection against the overriding of the things PPR wants to set such as printer display message. (Suggested by Steve Hsieh .) * Changed fixup.sh so it will create /etc/ppr/acl if necessary and so it will show the names of the missing ACL files it is creating. * Added WIN32_TESTING to include/sysdep.h. * Improved ppr -G infile:autotype and -G infile:filter debugging messages. * Fixed ppr --markup option. * Fixed feedback_pjl_wait() to be compatible with the control_d_handshake=no option of the tcpip interface. The problem was that with short files the PJL start of job messages wasn't coming before transmission was finished. * Fixed misc_filters/dvi.sh so it explicitly export PATH. This doesn't seem to be necessary in Bash but it is in /bin/sh from Digital Unix 4.0. * Changed misc_filters/tex.perl to work around problem due to that fact that recent versions of Perl 5.x define values returned from readdir() as tainted. * Changed the open() flags used on the FIFO in ppr, ppop, and ppad from (O_WRONLY | O_NDELAY) to the Posix form (O_WRONLY | O_NONBLOCK). Also added alternate flags (O_WRONLY | O_APPEND) to be used when HAVE_MKFIFO is not defined. * Added BROKEN_SETUID_BIT define for Cygnus Win32. This causes ppr and pprd to ommit some startup tests. * Added fname_sprintf() to libppr. This is a special sprintf() like function which only understands %d, %ld and %s and (most importantly) will not write more than MAX_PATH characters to the target string. Also, if COLON_FILENAME_BUG is defined, it will change ':' to '!'. This is for Cygnus Win32 which does strange things if colons appear in filenames. * Changed many sprintf() calls in ppr, ppop, and pprd to use fname_sprintf(). * Added "b" flag to fopen() calls for MEDIAFILE in ppr, pprdrv, and ppad. * Added a call to alert() in start_interface(), after the execl() so that there will be a message in the printer alert log if execl() fails. It also exits with code EXIT_PRNERR rather than 242. * Fixed libuprint/lpr_connect.c:uprint_lpr_make_connection() to it applies htons() to the result of atoi() when reading a port number. (Bug fix from Richard Harwood .) * Changed the magic number for the PPR header read by ppr from ".!" to ".ppr". This should only effect the PRNAUTH.EXE program for MS-DOS which I don't believe is currently installed anywhere. * Added ".type" to PPR header. This sets the input file type as the -T switch and "@PJL ENTER LANGUAGE =" do. * Broke out part of installprogs/installscript.sh into installprogs/scriptfix.sh. Added SCRIPTFIX= to global.mk generated by Configure. * Moved fixed_cc_osf from misc to installprogs. 1.32, 6 April 1998--30 April 1998 * Added code to .ppr header parser to issue a warning of a line is unrecognized. * Moved sgi_glp_hack.perl from uprint/ to misc/. * Made some changes to PJL setup and cleanup code in pprdrv_interface.c. Particularly, it now uses RESET and USTATUSOFF. * Changed sysdep.h to fix AT&T Unix port to define S_ISLNK() if it is not defined already. * Put rule to build pprdrv_ppd_parse.c from pprdrv_ppd_parse.l back into pprdrv/Makefile. It had been accidently deleted when the .depend stuff was put in. * Added MV=mv to the things defined in global.mk. * Moved the Sed command in interfaces/Makefile out into a separate file, sedcmd.sh. I did this because some versions of make object to the '#' in the Sed command, mistaking it for a comment start and truncating the command. * Changed the include mechanism pprdrv/pprdrv_ppd_parse.l so it works correctly, at least with flex. According to "lex and yacc", you can't just change yyin and expect it to start reading from another file. There is buffering to contend with. * Did the same for papsrv PPD parsing. * Added tests/test-pprdrv with test for correct PPD inclusion. This test seems advisable because many versions of Lex exist. * Fixed lprsrv so it will again produce an inteligible error message when it is run as non-root. It was claiming an "internal error". * ppr/ppr_infile.c: In ".ppr" headers, changed ".type:" to ".file-type:" and changed ".transparent" to ".hack: transparent". * Moved ppr --file-type and --copies to the list of finalalized long options. * Fixed lprsrv/lprsrv_client_info.c:get_client_info() so that after it does the reverse lookup it does a forward lookup to see if it will get the origional IP address. * Fixed rule in Configure which determines when -fno-strength-reduce is used as a GCC option on Intel systems. The rule was that it should not be used if the GCC version is 2.7.2.1 or 2.8 or greater. The rule is not that it should not be used if the version is 2.7.2.1 or greater. The effect of this change is that -fno-strength-reduce is ommited for GCC 2.7.2.3. * Changed the global.mk section which configure emmits for SGI so that when the native compiler is selected is refers to it as /usr/bin/cc to avoid links to GCC. It also now uses /usr/bin/cc -E because /lib/cpp has a bug in its handling of #if #elif #else #endif. * Commented out the "failed to include before_system.h" warning in global_defines.h. This is not only because it will scare people but because the SGI compiler doesn't understand #warning and stops. * Corrected testing for failure of getcwd() in ppr/ppr_main.c:main(). Corrected declaration of myname in include/ppr.h. The SGI C compiler found both of these errors. * Moved sgi_glp_hack.perl from uprint/ to misc/. Interestingly, it was already listed in misc/README_MISC.txt. Added it to install section of misc/Makefile. Installation is conditional on uname -s returning the string "IRIX". * Added -r to uprint-lpstat so it says "schedualer is running". This is so you can kill lpsched if you have no System V LP queues. * Added special case for Xerox Docutech 135 to misc/ppd2win95drv.perl. The special case is only effective if xrdt1355.dll is in the win95drv directory. 1.40a1, 1 May 1998--3 August 1998 * Changed the global.mk definition of MAILX for SGI from "mailx" to "/usr/sbin/mailx". This need was not recognized previously because /usr/sbin is in the standard SGI PATH. * Changed installprogs/installscript.sh so that it no longer edits the script. Also, changed the makefiles so that they use installprogs/scriptfixup.sh during the make phase to create localy customized versions of scripts. This makes the install phase go much faster, reducing the time the system is in an unusable state during an upgrade. * Modified the FIFO command dispatcher in pprd/pprd.c, breaking out the ppop commands into a separate dispatcher in pprd/pprd_ppopint.c. Changed the format of these commands so the PID of ppop comes before the command letter rather than after. This should make it easier to support alternative reply methods and additional parameters such as message language for internationalization. It will also eliminate the transmission of a meaningless PID thru rpprd. * Changed the ppop reply file format so the reply code is returned first on a line of its own. A special code (EXIT_OK_DATA) was added to eliminate the need to set an execute bit on the reply file to indicate that there is non-message data to be read such as data for ppop list. * Changed the wording of some of the messages in pprd/pprd_ppopint.c to improve clarity and consistency. This means some adjustments will have to be made to internationalization files if anyone sends me any. * Fixed Configure so that it puts SIGUSR1= and SIGUSR2= in global.mk for OSF/Digital Unix. These values are taken from /usr/include/sys/signal.h for Digital Unix 4.0 and verified by consulting an archived /usr/include/sys/signal.h from 3.2. This should fix some of the gs* interfaces. (1.32p1) * Modified the parallel interface so it opens the port with O_WRONLY rather than O_RDWR if feedback is false. * Fixed a problem in pprd/pprd_load.c:initialize_queue(). Due to a problem with the COLON_FILENAME_BUG code it would not reload jobs already in the queue. (1.32p1) * Added BACKUPS= to include/global.mk.unconfigured so that "make clean" will work correctly on an unconfigured source tree. * Added a new input type called "text" and changed MIME type "text/plain" from "lp" to "text". The idea is that "lp" will always be the line printer emulator but "text" may be something else such as a2ps. * Added WILDCARD_NODEID as a constant value that assign_nodeid() returns for "*". * Fixed ppop and pprd so that if the home node isn't specified it is assumed to be a wildcard. Previously they erroneously assumed the node to be the node on which ppop was executed. Added WILDCARD_NODEID, WILDCARD_DESTID, WILDCARD_JOBID, and WILDCARD_SUBID to global_defines.h. * Added rpprd to the things automatically built and installed by the top level Makefile. * Added signal_interupting() and signal_restarting() to libppr. Both set up a reliable signal handler. The first one is like signal() in BSD. These will be used to replace all calls to signal() and most calls to sigaction(). While PPR currently defines a signal() macro in sysdep.h, its use can be confusing because the real signal() differs in behavior from system to system. * Removed signal() definitions from sysdep.h and replaced them with a single signal() macro in global_defines.h which equates signal() with signal_interupting(). * Removed all SIGIO/SIGPOLL code from pprdrv and replaced it with select() code. * Removed SIGIO/SIGPOLL defines from sysdep.h. Removed last vestige of OSFLIBS= from Configure/global.mk. Removed SOCKETPAIR_SIGIO from sysdep.h. * Started internationalization of pprdrv strings. * Fixed lprsrv so that when the queue file contains an M line it calls uprint_set_notify_email() in addition to uprint_set_lpr_mailto(). (Thanks to Richard Harwood for the bug report.) (1.32p1) * Added sysdep.h define HAVE_H_ERRNO. * Changed ppr_infile.c:exec_filter_argv() so that if the suid and sgid bits are not set on the filter then the effective user and group ids respectively are set back to the user's. Since the saved id's are unaffected, this is probably only a moderate security improvement. * Changed setup_filters.sh to set setgid bits on DVI, TeX, and Texinfo filters. Modified DVI filter so it chmods the DVIPS configuration files it generates to 664. With the change above, access permissions when printing DVI files should be much closer to correct. * Moved the test interface from interfaces/regtest.sh to tests/test_interface.sh. It is no longer installed in the interfaces directory. The copy in the interfaces directory has been added to the list of obsolete files which installprogs/fixup.sh deletes. * Fixed bugs in responders/samba.sh which caused it to ignore the os= option. * Added PPD file "PPR Generic Level 2". * Added web/addprnwiz.cgi.perl. * Changed ppad_conf.c:conf_close() so that it doesn't unlink before rename. This prevents pprd from exiting if 2 ppad commands come in rapid sucession. It would exit if it tried to open the config file while the second ppad command was moving the new file into place. * Changed pprdrv_feedback.c code so it will throw away HP UEL. * Changed pprdrv_feedback.c code so that feedback_pjl_wait() will reset the writemon alarm every time the printer reports that a page has been dropt into the output bin. * Changed pprdrv.c:error() so it is not signal safe and it does not write to the printer's alerts log. * Re-wrote regularize_lw_message() to use stdio since it need no longer be signal safe. * Changed pprdrv.c:debug() and pprdrv.c:fatal() so they use snprintf() and vsnprintf(). * Changed filter_lp so it does not emmit a "%%Media:" line unless the mediatype=, mediaweight=, or mediacolor= option are used. This is so that the ppr -D switch works more often when users expect it to. * Fitted out filter_lp with appropriate calls to new library functions to use charsets.conf and fonts.conf to select the fonts and encodings. This makes it possible to add support for new character sets without recompiling. * Changed "charset=standard" to "charset=adobestandard". * Changed pprdrv/pprdrv_res.c:uncompress_pfb() so it converts '\r' to '\n' in ASCII segments. * Added idle_status_interval option to serial interface. * Added KOI8Encoding MacEncoding, ISOLatin2Encoding, ISOLatin3Encoding, ISOLatin4Encoding, ISOLatin5Encoding, CP1250Encoding. Reference for character placement was a2ps 4.10.2. * Added CourierISOC font family to support KOI8Encoding. * Fixed pprdrv to recognized "StandardEncoding", "SymbolEncoding", and "ISOLatin1Encoding" rather than the incorrect "Standard", "Symbol", and "ISOLatin1" as the names of built-in-to-printers encoding vectors. See RBII page 639. * Fixed find_ttfont() so that it works again. A Makefile change had broken it. Also moved it from pprdrv/pprdrv_tt.c to pprdrv_ttfind.c. * Changed pprdrv/pprdrv_buf.c:printer_puts_escaped() so it replaces high bit characters with "?" as it already did with non-printables. * Fixed pprdrv TrueType generation code so it outputs the copyright and trademark notices in the font file using printer_puts_escaped. * Fixed error in pprdrv/pprdrv_commentary.c which cause the time stamp of the internal "file" commentator to be garbled. * Added /etc/printers.conf support to the Solaris port so that it will work with the new LP system introduced in Solaris 2.6. * Fixed bugs in N-Up which caused problems with MS-Windows output. Replaced Trincoll-PPR-dmm-nup-3-4 with Trincoll-PPR-dmm-nup-3-5. Removed two zero parameters at begining of invokation arguments (in pprdrv/pprdrv_nup.c) since they should not be present when the third is not 0. * Updated papsrv/Makefile to new style. * Updated UWIN support for UWIN 1.51 (but it still doesn't work). * Changed Configure A4 and internationalization code to use case rather than grep and nested ifs. * Changed scriptfix so it sets the mode of the output file to 555 to discourage accidental editing. * Internationalized ppad. * Changed ppad/ppad.c/am_operator() to am_administrator() and reversed the return value so it returns TRUE if access was allowed. * Made ppop and ppuser set PPR_UMASK just to be on the safe side. * Added ACL support to ppuser and internationalized it. * Removed separate filter_fortran and merged its function into filter_lp. * Changed filter_lp so that when doing test on its invokation name it tests only the basename. * Added version 1.9 of Rich Salz's wildmat() as libppr/wildmat.c and libppr/wildmat.3. * Internationalized ppr2samba. * Fixed a bug in pprdrv/pprdrv_ppd.c which would cause a feature with an empty code snippet to get the code snippet from the previous feature. * Added procset file AdobePS_Win_Driver_L2-4.2-0 to static cache. This was necessary because the Adobe PostScript driver version 4.23 for MS-Windows 95 sends different versions of this file with different lists of enclosed procedure sets. Added code to installprogs/fixup.sh to remove old dynamically cached copies. * Changed some installprogs/fixup.sh messages to end announcements of operations being commenced with "..." and to print "Done." at the end of operations. * Added SMBCLIENT to things filled in by installprogs/scriptfixup.sh. * Changed install location of samba_submitter and xerox_ticket_submitter from $HOMEDIR/bin to $HOMEDIR/lib. * Added client operating system (Samba %a) to arguments for samba_submitter and xerox_ticket_submitter. The new argument was added in the middle. * Changed pprdrv/pprdrv.c:copy_header() to copy all of the "-comments" file at the begining instead of coping just the "%!" line and then doing the rest near the end. * Updates to misc/README_MISC.txt. 1.40a2, 13 August 1998--11 September 1998 * Began internationalization of papsrv. * Re-wrote papsrv.conf parsing code to allow INI syntax * Corrected bug which made "PPDfile:" line useless * Added papsrv.conf setting "query font cache". * Fixed xwin responder to work with xterm again * Corrected long-standing bug in global_defines.h. XWINBINDIR was set to /usr/X11/bin instead of /usr/bin/X11. This means it would be wrong if you didn't accept all of the default paths. * Made the default idle_status_interval option for the tcpip interface 30 (seconds) if feedback is true. It is still 0 (disabled) if feedback is false. * Changed the default width for the pr interface from 132 to 80. I cannot imagine how it got to be 132. * Made ppad interface clear "Codes:" when it clears "Feedback:" and "Jobbreak:". * Moved include/interfaces.h to libppr/interfaces.c and added functions to retrieve the information. * Added struct PPD_PROTOCOLS to global_defines.h and added PPD file "*Protocols:" parsing to pprdrv and ppad. * Added native compiler support for HP-UX. * Changed Configure and sysdep.h so sysdep.h determines which section it will use based upon a symbol defined in CFLAGS. * Changed the automatic binary detect rule in ppr_infile.c to not trigger if there are no NULLs. This is so international text will not trigger the rule. * Added PORTING.txt. * Experimentally increased PJL_DISPLAY_LEN in pprdrv.h from 16 to 40. * Changed "HP LaserJet 4M Plus DSC" to use PageSize code from "HP LaserJet 4 Plus". Incremented version number from 1.51 to 1.60. * Removed the non-functional paremeter "eof_timeout=" from the tcpip interface. * Commented out control-D handshaking code in serial, parallel, and tcpip interfaces. * Added control-D handshaking code to pprdrv. This seemed a good idea since it reduces the complexity of the interfaces and PJL handshaking was already in pprdrv. * Added 10 retries at 2 second intervals to tcpip interface for use when connnect() reports "connection refused". * Removed misc/wwwppop.perl and misc/www.conf. * Added share win95drv to smb.conf.sample. Also added "queuepause command =" and "queueresume command =" for Samba 1.9.18p10. * Added printman/README.txt. * Added editps/Adobe_NT_5.0 * Turned -H editps on by default. * Fixed ppr/ppr_editps.c:editps_identify() so that creator string extracting works with CRLF terminated files. Also added "creator glob =". This is the first use of wildmat(). Also changed wildmat() to have const arguments. * Modified ppr/ppr_outfile.c:open_output() to open -comments, -text, and -pages in binary mode so as not to mangle any binary tokens. Modified ppr/ppr_split.c and pprdrv/pprdrv.c:main() to do the same. (This is only important for Win32 ports.) * Modified ppr_infile.c:in_getline() to ignore binary tokens inside strings and to realize that "%" does not start a comment if it is inside a string or <~ ~> and so it should not turn off binary token recognition for the rest of the line. * Added French internationalization files fr-PPR.po and fr-PPRD.po. These files were contributed by Olivier Tharan . * Removed BROKEN_PERMISSIONS hack from ppr/ppr_infile.c. * Added support for Solaris extensions to the LPR/LPD protocol. * Changed the meaning of "ppr extensions = " in uprint-remote.conf so that it does not implicitly include OSF and Solaris extensions. * Added fatal() to dotmatrix/main.c so I could eliminate last direct use of strdup() which it seems is not defined in POSIX. * Fixed libppr/signal1.c and libppr/signal2.c to include sys/signal.h before global_defines.h so that sys/signal.h won't see our signal() macro. * Added Steve Hsieh's code to ppr/ppr_main.c:mark_feature_for_insertion() to accept Adobe pslpr format. * Added "system type =" to uprint_remote.conf syntax. * Changed pprdrv/pprdrv_res.c:begin_resource() so that it calls dgetline() instead of dgetline_read(). (This is recursive.) This enables more correct handling of nested resources. Added tests/test-consistency and tests/test-consistency/100-unclosed to make sure this fix worked. This fix was inspired by an unclosed resource in the Adobe Driver 5.0 for MS-Windows NT. The unclosed resource in page one, combined with a closed resource which followed it resulted in only page one being printed. This was because the unclosed resource prevents ppr from seeing the "%%Page:" comments for the subsequent pages but pprdrv was stopping its copy of the resource (which should have continued until the end of the file) when it saw the comment "%%Page: 2 2". This same problem inspired the creation of editps/Adobe_NT_5.0 and the making of -H editps the default. In pprdrv/pprdrv.c dgetline_read() and dgetline_parse() are now static. * Changed the correct responses from some regression tests to reflect the fact that -comments code is now placed at the top of the comments section rather than at the end. * Added libppr/signal_sh.c to create signal.sh. Removed signal number handling code from Configure and installprogs/scriptfixup.sh. Changed the Ghostscript interfaces to use lib/signal.sh. This change should make porting easier. * Fixed bug in pprdrv_lw_messages.c which caused it to call error() with a spurious message about raw message entries in lw-messages.conf. (It was printing the message when a matched failed, not when the closing quote was missing as it should have.) * Attempted to bring installprogs/make_bindist.sh up to date but did not test it. * Added the ability to change the sh and perl #! lines to scriptfixup.sh. * Changed all shell and Perl scripts I could find to use "#! /" instead of "#!/" since it is more technically correct. * In papsrv.conf parsing, change the default for pprparms from "" to "-I". * Fixed ppad so that is preserves the modes of printer and group configuration files when editing them. This is important because user execute means stopped and other execute means protected. * Added KOI8-R as an alternative to KOI8 as I am not sure which is correct. * ppr/ppr_media.c: Fixed errors in media matching warnings. * libppr/dimens.c: Added "mm", "millimeters", and "millimetres" to the recognized units. This meant that A4 from ppad/media.sh was never entered! * Fixed duplicate fclose() in "ppad media show" which caused core dumps. * Made ppr/ppr_media.c accept width and height within 1 PSU as an exact match since though Adobe says that these statistics in the "%%Media:" comment are of type real, in practice they round these off. * Added ppr -G media:matching. * Changed weight for "a4" in ppad/media.sh from 80 to 75 so that it will match a default of "letter" when overridden by "%%BeginFeature: *PageSize A4". * Added "ppd/hp/HP LaserJet 8000 Series". * Made various fixes to suppress gcc -Wwrite-strings warnings (not finished) and so that everything can be compiled with g++. * Fixed inacuracies in help messages for ppad media commands. 1.40a3, 14 September 1998--18 September 1998 * Turned off -H editps which was made on by default in 1.40a2. I have mixed fealings about turning this off, but it requires Perl. * Fixed location of jump target in ppr_main.c:main() so that a zero length file does not cause a core dump by causing a call to fclose(FIFO) when it hasn't been opened. * Added MATLAB editps script. * Added support for all hacks in .ppr header .hack: lines. * Added .ppr header .feature: lines. * Increased MAX_VMOPTIONS (in global_defines.h) from 15 to 25. * Corrected bug in po/make_pox.sh which prevented it from correctly producing .pox files when there was no .po file. * Changed libuprint/uprint_strerror.c:uprint_strerror() so it returns already internationalized messages. Removed gettext() calls from uprint/uprint-lp.c and uprint/uprint-lpr.c which were there to internationalize uprint_strerror() return values. * Changed misc/ppd2win95drv.perl to make /var/spool/ppr/win95drv and to skip PPD files ending in "~". * Corrected missing case in installprogs/install_init_progs.sh for systems without System V style init scripts. * Removed LEX_LIB=-lfl from Linux section in Configure. It is my hope to use pre-generated Flex code in future. Also changed pprdrv/Makefile so that clean doesn't remove pprdrv_ppd_parse.c, only veryclean does that. * Shortened start state names in pprdrv_ppd_parse.l so it will work with old Lex's. This is dispite the fact that I hope to have everyone use Flex generated C code. Also increased %p from 3200 to 3500. * Sundry fixes and improvements to misc/xerox_ticket_submitter.perl. * Split installprogs into tools4make and tools4fixup. Some programs were moved to misc. * Moved script stuff out of libppr and into libscript. * Moved various .h files out of includes and into the individual directories. This is to avoid giving the false impression that they are used by more than one program. * Moved interfaces/interface.sh to libscript. * Changed lprsrv so it doesn't limit the reverse-looked-up hostname for authorization to LPR_MAX_H. It is now limited to MAX_HOSTNAME which is defined in lprsrv.h as 128. * Fixed libuprint/uprint_argv_ppr.c so that it puts the -I switch right after -d . This allows lpr options to override switchset options. (Thanks to Klaus Reimann for pointing out this error.) * Renamed install_init_code.sh to inst_init.sh and etc.init.d.ppr.sh to init_ppr.sh to get around problems with makes that can't handle implicit rules for files with names longer than 14 characters. * Restored some explicit make rules for files with names longer than 14 characters. * Added libppr/stresc.c:compile_string_escapes() and changed editps matching to use it. * Eliminated editps syntax "creator left" and "creator right". Changed "creator full" to "creator". * Arranged for tools4make/makedirs to be built from makedirs.sh so that the shell invokation on line one will be edited if necessary. The PPR directories are also written into it at that time rather than being retrieved from include/global.mk later. * Fixed pprdrv_ppd.c:insert_features() so that if it sets strip_binselects it doesn't do it until it is finished calling insert_feature(). That way its own insertions don't get stripped out. * In ppr, changed code so that .feature: and -F switch don't call mark_feature_for_insertion() directly but rather they call parse_feature_option(). This new function also sets read_duplex_enforce to FALSE if the feature is a "*Duplex" feature. This allows -F switches to override -R duplex: options. (These problems were diagnosed by Klaus Reimann.) * Replaced French translation files with the latest from Olivier Tharan . 1.40a4, 5 October 1998--12 November 1998 * Reviewed exit code in atalk_ali.c, atalk_cap.c, serial.c, parallel,c, and tcpip.c, making them all call identical do_exit() fuctions and making sure it is always called. The atalk interfaces exited with EXIT_ENGAGED without sending SIGINT to the parent. * Changed ULTRIX shell test in Configure to one suggested by Stephen Dowdy . The he supplied hasn't actually been tested on Ultrix though. * In ppr/ppr_infile.c, renamed get_input_file() to infile_open and close_infile() to infile_close() and force_in_type() to infile_force_type(). * Started to break up ppr/ppr.h into separate files, one for each module. That way, a module which calls functions in another module can include the header file for that module. * Changed ppr/ppr_infile.c:no_filter() so that it uses an empty input file if -H transparent has been used. This allowes us to use transparent mode to print files which the printer understands but for which we have no filter. Previously it was necessary to declare the file type in question to be one of the passthru types or to say "-e hexdump". * Removed the ppr --passthru option and replaced it with a "PassThru:" line in the printer or group configuration file. * Fixed passthru operation so that it is skipped in ppr/ppr_infile.c:infile_open() if the -H transparent option is used since there is no point in generating a -barbar file that will never be used. * Fixed a problem in ppop/ppop.c:job_permission_check() which cause the wildcard source node nama generated by parse_job_name() to result in all users being allowed to delete any job. (Thanks to Klaus Reimann for tracking this down.) * Changed libppr/jobid.c:local_jobid() and remote_jobid() so that they ommit the home node if it is "*". Previously they only ommited it if it was the node they were running on. * Removed the prelimanary options --dest and --destination from ppr and replaced them with --queue (still preliminary). * Changed ppr command line parsing so that it is done in two passes. The first pass only finds the desination name. This makes the next change possible. * Changed switchset handling so that it is always inserted at the begining of the line. The -I switch is now obsolete and does nothing. * Changed papsrv_conf.c so that the default "ppr parms =" is now once again blank rather than "-I". * Removed -I from misc/smb.conf.sample. * Removed -I from uprint/uprint_argv_ppr.c. * Incorporated a patch from Klaus vom Scheidt which allows ppuser commands to be log to a file if the log file already exists. * Corrected the "ppuser charge" command so that it posts a charge rather than a withdrawal. Also change the return type of the charge commands from int to enum USERDB_RESULT and the transaction type argument to db_transaction() from int to enum TRANSACTION. * Some message cleanup in ppop. * Fixed ppop so that "ppop log" prints usage instead of causing a core dump. * Put setegid() before seteuid() in ppr/ppr_main.c:unbecome_user(). This is to please ULTRIX. * More ULTRIX fixes. * Renamed directories: "dotmatrix" -> "filter_dotmatrix", "misc_filters" -> "filters_misc", and "typeset" -> "filters_typeset" to make them sort together in the directory listing. * Fixed ppr/ppr_editps.c:editps_identify() so it doesn't core dump when testing for a creator line value if there was no "%%Creator:" line. * Switched default for ppr -K from false to true. This is so that users can use customized PPD files. This also helps the MS Windows 95 PostScript driver which manges feature names in its comments. If someone has a group of incompatible printer, he can set "-K false" in the switchset. * Changed uprint-remote.conf parsing in libuprint/claim_remote.c so that the queue names in [] can contain shell wildcards. * Changed capitalization of "ppad show" and "ppad group show" output from "Default filter options:" to "Default Filter Options:". * Changed the uprint-remote.conf line "system type =" to "remote system type =". * Added the program misc/pprwatch.c. This program is installed in lib. It does a "tail" on /var/spool/ppr/state_update and /var/spool/ppr/state_update_pprdrv. This program was introduced so it could be a server for a client-server version of printdesk and so that the state_update communications mechanism can be changed in the future. Also, my simplifying the communications mechanism, it may encourage more people to exploit the state_update mechanism to build GUI front ends for PPR. * Changed "state_update" and "state_update_pprdrv" files so that they no longer get "REWIND" lines. Changed state_update so it gets "other execute" set when it is full. * Fixed printdesk so it works with pprwatch. * Changed the spool path in misc/smb.conf.sample from /var/samba/printspool to /var/spool/ppr/sambaspool. Combined smb.conf.sample and smb.conf.sample2 into "smb-protos.conf.sample". Added install/smb.conf.sample and install/smb.conf.sample2 to the list of obsolete files. Added smb-protos.conf to the list of sample files. * Turned /etc/ppr/printcap generation in ppr2samba off. Added /etc/ppr/printcap to the list of obsolete file deleted by fixup.sh. * Added explanatory information to the top of the smb-include.conf file generated by ppr2samba. * Moved all of the Samba stuff from misc/ to samba/. * Revamped libttf so it never calls fatal and doesn't use any part of libppr. * Added the libttf demonstration program ttf2ps. * Moved rpprd directory to remote/rpprd. * Moved documentation into the source distribution. Added the directories $(SHAREDIR)/man and $(SHAREDIR)/htmldocs. 1.40a5, 13 November 1998--18 February 1999 * Moved some pprd functions into pprd/pprd_destid.c, moved libppr/nodeid.c into pprd/pprd_nodeid.c. * The code in pprdrv/pprdrv_ppd.c:begin_feature() would ignore the ppr -K true switch in the case of "*Duplex" features. I do not remember a good reason for this, so I have removed this exception. This change simplifies the operation of the ppr -K switch. * Also, changed pprdrv/pprdrv_ppd.c:begin_feature() so that if is retains old code it inserts 2 lines of comments explaining why it has done so. I don't think we care much about bloating the PostScript file since this is probably a disfunctional case anyway. Did same for case where it strips out code that can't be replaced from the PPD file. Added regression test for this. * Added the "RSA Data Security, Inc. MD5 Message-Digest Algorithm". I got the source files md5.h and md5.c out of the Siag/Siod distribution. * Isolated procedure sets and PPD files on which other parties have copyright in the directory "vendors". * Replaced my patched "HP LaserJet IIISi Postscript" PPD file with a new one from Adobe. * Replaced my patched "QMS-PS 410" PPD file with a briefer one called "QMS-PS 410 DSC" which includes the unpatched Adobe supplied version. * Modified samba/ppd2win95drv.perl so that it has a --verbose option. It now produces output only on errors unless the --verbose option is used in which case it produces more output than it did before. It also now looks for "*Include:" directives in PPD files and does the include since MS-Windows drivers probably ignore "*Include:". * Added misc/pprclean.perl, a script which removes temporary files which PPR accidently leaves around. * Changed the troff filter which uses Groff to use Grog rather than just arbitrarily choosing the -man macros and a few preprocessors. Added filters_misc/rewind_stdin.c which is installed in $(HOMEDIR)/lib. This is used by the new troff filter. * Added tools4fixup/rm_old_man.sh and added a call to it in tools4fixup/ fixup.sh. * Added [default destinations] section to uprint.conf. * Changed pprdrv/pprdrv_buf.c:printer_printf() so that %o prints 3 digits rather than the minimum required. (This is because \xxx is used to represent characters in PostScript strings. * Changed pprdrv/pprdrv_buf.c:printer_puts_escaped() so that it prints non-ASCII-printable characters using \xxx rather than printing a question mark. * Modified pprdrv/pprdrv_flag.c so that the encoding for the banner page is ISO Latin 1. * Fixed the lpr interface so it will exit with an alert if feedback is true. * Expanded the error message for the above in the dummy and simple interfaces. * Removed the disused control-d handshaking code from the serial, parallel, and tcpip interfaces. * Corrected bugs in ppr's parsing of the command line. Previously there was a special routine to find the -d switch but it had bugs. It has been replaced with a separate ppr_getopt() loop, this one with a much smaller doopt() routine. They are now called doopt_pass1() and doopt_pass2(). * Added "vendors/ppd_adobe/Ricoh Aficio 401 PS v2015". * Renamed libppr/foptions.c:filter_option_error() to filter_options_error(). * Renamed the files which contain libppr functions for interfaces to names begining with "lib_", moved them to libpprint, and moved their prototypes to include/libpprint.h. Also moved many functions out of the interfaces and into libpprint. * Added libppr/throw.c:libppr_throw() and include/libppr_exception.h. All libppr code which used fatal() as an exception callback has been changed to use this new function. * Began to internationalization of interfaces/atalk_ali.c and parallel.c. * Changed "ppad show" feedback setting display to "yes" or "no" rather than "True" or "False" and made other minor changes to "ppad show" output capitialization. Made many changes to "ppad -M show" output as part of the work on the new WWW interface. * Changed "ppad codes myprn unknown" to "ppad codes myprn ignore" in order to make its purpose clearer. * Did much work on the WWW controls and made them part of what is installed. * Moved HTML docs installation locate from $HOMEDIR/htmldocs to $(SHAREDIR)/www/docs. * Fixed bug in "ppop cancel" involving the handling of multiple cancel specs. * Fixed "ppop qquery" so that when the "creator" field is asked for it is displayed rather than the "routing" field which was being displayed by accident. * Changed the name of ppr resource caching temp files from just the process id to ".temp$PID". * Enhanced misc/pprclean.perl. * Removed the directory filters_typeset/enriched since it didn't contain anything useful. * Added locale.h to the internationalization headers for those modules which call setlocale(). This is necessary for Solaris 2.6. * Commented out debugging messages in printdesk. It is basically usable now though there is a bug which sometimes causes it to lock up. It works with Tk400.202 and Tk800.012 but Tk800.000 (I think) has a bug which prevents the popup menu (in the window which shows an icon for each queue) from working. * Changed "ppop progress" so it doesn't print a percent sign after the percent sent and so it has a human readable mode. It also now prints all zeros for jobs with now "Progress:" line. * Made sundry changes to printdesk/PPRcontrol.pm so that it could be used by www/prn_control.cgi.perl. This included the adding of a get_progress() method which was the reason for the change to "ppop progress" described above. * The WWW management tools are now partially usable. These include an add printer wizard, a queue display tool, and a printer control tool. A printer properties editor is also begun. These tools use new Perl libraries for CGI data handling, wizards, and tabbed dialog boxes. * Moved the C++ typesetter library and its demo.cc into from filters_typeset/lib and filters_typeset/demo to filters_typeset/lib_c++. I am considering reimplementing it in Perl. I origionally rejected Perl becuase only Perl 4 was available at the time and structures were very difficult to build. Perl 5 refererences remove that objection. A sucessful Perl prototype might later lead to a second generation implementation in C++ or Java. * Renamed ppad/ppad_conf.c:confwrite() to conf_printf() and added conf_vprintf(). Removed conf_set_name_strval() and replaced it with conf_set_name() which does all of the access checks, file opens, file close, and accepts printf style values. * Converted the "ppad comment", "ppad switchset", "ppad passthru", "ppad outputorder", "ppad charge", "ppad flags", "ppad deffiltopts", "ppad group comment", "ppad group switchset", and "ppad group deffiltopts" commands to use conf_set_name(). * Fixed another possible rounding problem in money handling in "ppad charge". * Added "ppad charge" to the ppad help output. * Added the "ppad pagelimit" command and added the page limit to the "ppad show" output. * Added LP_LPSTAT_BROKEN to sysdep.h for HX-UX 10.x which has a very old lpstat which can't handle "lpstat -o myprn". * Added --nocreate option to ppr2samba and removed the -v option leaving --version and removed the -? option leaving only --help. * Added the printdesk directory to the build and install of the top level Makefile because its library is required by things in the www directory. I also renamed printdesk/nbp_lookup.c to nbp_lookup_ali.c. * Changed the method of creating the temporary file in ppr/ppr_infile.c: stubborn_rewind(). It now opens the temporary file read-write and rewinds it after writing it. Previosly it re-opened it read-only. This change allows us to unlink its name imediately. This is good because if we run out of disk space we don't make the problem worse. * Modified libppr/options.c and foptions.c so that it uses a struct in stead of global variables. Also made it skip leading blanks in options strings. * Changed interfaces/gs_master.sh so that it doesn't put a leading blank on the options passed to the backend interface. * Adjusted all C language interfaces, filter_lp, filter_dotmatrix to use the new option parsing code. Converted lpr interface to use it. * Added code to samba/ppd2win95drv.perl so that as well as processing the PPD files that come with PPR it will process any other PPD files the user is employing. It does this by scanning the "PPDFile:" lines in the files in $CONFDIR/printers. 1.40a6, 18 February 1999--22 July 1999 * Moved the fonts and AFM files distributed with PPR from $(SHAREDIR)/cache/font and $(SHAREDIR)/AFM to $(SHAREDIR)/fonts. * Fixed samba/ppd2win95drv.perl so that the base directory for relative includes is the directory in which the including script resides (Patch from Steve Hsieh). * Updated libuprint/uprint-remote.conf.sample. * Removed misc/rqlaser.sh. * Added www/images/pprlogo.jpg. * Added start_msg and stop_msg options to the PPR script for System V init. These options are for HP-UX 10.20. * Added filters_misc/html_htmldoc.sh. This, when properly setup up by setup_filters, will use HTMLDOC (http://www.easysw.com/~mike/htmldoc/) to convert HTML to PostScript. This is a preliminary version of the script, it doesn't support any options yet. * Removed the "remote" subdirectory which contained "rpprd". * Fixed the editps/Windows_NT_4.0 script so that it removes the comments which would pass off font fragments as real fonts. * Added Solaris 2.6 thru 7 as a separate option in Configure. This was prompted by the fact that 2.6 and later has snprintf(). It will probably also someday become important because 2.6 and later has a new printing system similiar to UPRINT. * Fixed ppad comment and ppad passthru so they no longer mistakenly try to edit a group. * Renamed ttfutils to fontutils in anticipation of the change. * Cleaned up www/show_queues.cgi.perl to use border=0 in images rather than set the link colours to the background colour and separately set the colour of each queue name to something else. * Fixed papsrv/papsrv_ppd_parse.l so it will ignore trailing spaces and tabs on lines such as "*TTRasterizer:". * Started to write www/ppr-httpd.perl, a very basic web server designed to be launched from inetd. It will be used for the WWW interface to PPR and to dispense documentation. * Renamed pprclean to ppr-clean, pprsync to ppr-sync. * Did a sprintf() removal sweep of interfaces/lpr.c. * Added the X_() macro for `extra' strings which could be translated but probably aren't worth it. This will be used for messages which indicate internal errors or raw system call failure information. Using X_() rather than just leaving the quoted string alone indicates that a descision has been made to not include that string in the list of strings to be translated even though it could be included. The preferred solution in the case of system call failures is to provide messages for common error codes which explain how that error code applies to the system call that failed in the context of the current operation. If anyone disagrees with this assessement he can extract and translate the X_() strings and define X_() to be the same as _(). * Changed libuprint/lpr_connect.c:uprint_lpr_response() so that it once again prints messages (using uprint_error_callback()) when it fails. Adjusted libuprint/uprint_print_rfc1179.c and interfaces/lpr.c to distinguish between uprint_lpr_response() return codes indicating its own failure and those indicating unfavourable responses from the server. Also, added a 30 second timeout to uprint_lpr_response(). * Changed definition of CP= in the global.mk generated for all platforms to include the -p switch to preserve file modification times (amoung other things). This is to reduce the number of files in the www area which get their dates changed every time a "make install" is run. * Added informational lines for Linux /sbin/chkconfig to tools4fixup/init_ppr.sh. * Fixed misc/xfm-ppr.sh to handle the printing of files with spaces in their names. * Added specific error messages to lprsrv so it says that it should be run from Inetd if stdin is not a socket and it says that there already is a server on the specified port if bind fails (in standalone mode). * Fixed the uprint-* programs to specifically say that they should be setuid root rather than simply saying that setuid(0) has failed. * Changed the lpr interface to send the control file first. This may allow stupid printers to print a banner page. Also, RFC 1179 seems to imply that this is the prefered order. There really should be an option to reverse the order. * Removed the commented out definition of LPRSRV_USE_LPR_STYLE_JOB_NAME from include/global_defines.h since this is a feature of olprsrv which will soon be dropt. Also moved KEEP_OLD_CODE from global_defines.h to pprdrv/pprdrv.h since pprdrv is the only program effected by it. * Added $CONFDIR/lw-messages.conf.sample and $CONFDIR/ttfonts.db to the list of obsolete files removed in tools4fixup/fixup.sh. * Fixed the pprdrv code for lw-messages.conf to properly create the empty section. (This was appearently broken when lw-messages.conf was split into a distribution and a local version.) * Renamed xfm-ppr to ppr-xfm, xpprgrant to ppr-xgrant, pprwatch to tail_status, papsrv_kill to papsrv-kill. (The idea is that nothing in bin will have an underscore in its name and that minor programs will have names that begin with the major program or package name and a dash.) * Added libppr/ini_section.c and include/libppr_ini.h to handle the reading of the ppr.conf file. Also added misc/ppr_conf_query.c for use from shell scripts. * Removed A4/US Letter compile time option and replaced it with new ppr.conf code. It was used in filter_lp, filter_dotmatrix, pprdrv (for flag pages), and ppr (for documents without a "%%DocumentMedia:" comment). * Added PPREXIT_CONFIG to include/ppr_exits.h. This exit code is used to indicate a problem with the ppr.conf file. * Changed ppr/ppr_media.c:write_media_lines() so that if there is no "%%DocumentMedia:" comment and it has guessed the required media based on the default medium and various comments such as "%%PageSize:" but the resulting medium is not found in the media database, it writes a "Media: UNRECOGNIZED NULL" line. (Formerly it would write a line which said "Media: letter NULL" or "Media: a4 NULL". * Fixed some bugs in "ppad switchset" and "ppad group switchset" which where introduced in 1.40a5. This bugs interfered with the clearing of a switchset. * Removed Makefile code to install samba/xerox_ticket_submitter.perl and removed code in ppd2win95drv which provided support for installing the Xerox job ticketing driver. Also removed the Xerox prototype share from samba/ppr-protos.conf.sample. * Revamped filters_misc/hexdump.c to read the medium size from ppr.conf and to understand the filter option "maxpages=". * Renamed the queue file line "BarBarLang:" to "PassThruPDL:". * Added a queue file line "Filters:" which describes the filter chain which was applied or would have to be applied to convert the input file to PostScript. In the mode invoked by "ppr -H transparent", this value is passed to the printer interface program as the 10th (barbar) parameter. * Moved everything in $SHAREDIR/globalconf into $SHAREDIR/lib. * Began internationalization of filter_dotmatrix. (Found and changed some pre-release 1994 copyright notices too!) * Began internationalization of filter_hexdump. * Code cleanup of include/global_defines.h, include/global_structs.h, include/pprd.h, and pprdrv/pprdrv.h. The general trend was to move stuff into more private include files. I intend to eventually move a lot of the contents of global_defines.h and global_structs.h into libppr_*.h files. * Renamed the "client" interface to "clispool". Moved its include file into the C source code. I intend to create a Berkeley Sockets version of this interface, if only for nastalgia. * Removed the IBM Courier fonts from the Ghostscript PPD files. Also bumped the PPD file version number from 1.30 to 1.40. * Integrated smb interface contributed by Klaus Reimann . Added code for working with gssmb. * Added building of gslpr and gssmb interfaces. Changed gs* interfaces to read ppr.conf [ghostscript] gs=. * Removed SMBCLIENT= re-writing from Configure and from tools4make/scriptfixup.sh since the setting is being moved to ppr.conf. Switched responders/samba.sh and commentators/samba.sh over to this new system. * Fixed "ppad switchset" and "ppad group switchset" so that it is possible to clear switchsets. * Moved verious shell script helper programs and files into libscript. These are: misc/ppr_conf_query.c, interfaces/alert.c, responders/time_elapsed.c, responders/respond.sh (dynamically built), and responders/respond.ph (also dynamically built). * Added tools4fixup/make_conf to generate ppr.conf.sample. * Added tools4fixup/inst_cron to create a crontab entry. * Changes in ppr/ppr_main.c:main(): Environment search order is not LOGNAME, USER rather than USER, LOGNAME since LOGNAME seems to be the standard one while USER seems to be an xterm thing. Also, if PPRDEST is not defined, PRINTER is again checked. This is consistent with System V lp behavior and allows the use of one environement variable to set the default destination for uprint-lp, uprint-lpr, and ppr. * Made the flag page date format a settable parameter (flag date format =) in ppr.conf. The default now uses %y rather than %Y (for no particular reason). * Added pprdrv/pprdrv_flag.c:pslinef() and with it did some internationalization of the flag pages. * Added pprdrv/ppdrv_buf.c:printer_putc_escaped() by moving the inner code of printer_puts_escaped() and replacing it with a call to the new function. * Fixed alert message in gs* interfaces so that if device= and uniprint= are both absent it mentions uniprint= as a possibility. * Moved filters_misc/rewind_stdin.c to libscript. * Renamed filters_misc/hexdump.c to filter_hexdump.c. * Added filters_misc/png.sh which uses the pngtopnm program which is part of Libgr (RedHat libgr-progs-2.0.13-12.rpm to be specific). * Converted the money() function in libppr to read ppr.conf. Its default format is now 1.25, -1.25. (The former fixed format was $1.25, ($1.25). * Changed "ppuser show" to use money(). Unless the default money() format is used, this change changes the "ppuser show" output. * Fixed a bug in uprint-lp which caused it to reject the -s option. * Updated libppr/interfaces.c to include new printer interface programs. * Changed the font name in the IBM Courier .AFM files in fonts/ to match the names in the fonts themselves. (The IBM Courier fonts are those from the X distribution, only the font name has been changed from "Courier" to "IBMCourier" to distinguish it from the one distributed by Adobe which has a much smaller character set.) * Moved the font and encoding stuff out of include/global_structs.h and into include/libppr_font.h. * Added ESC x 3 to the dotmatrix filter. It is a Genicom code for turning on high speed printing mode. * Added the already documented 12th and 13th fields to the printlog format. The page count field only works if PJL is available and enabled. It is not used to compute the charge (which is now logged in the 13th field). * Reversed 12th and 13th printlog fields. * Moved the call in pprdrv.c:main() to patchfile() to just after the flag page printing and before the test for transparent or passthru mode. This means that persistent patches will be loaded before transparent or passthru jobs but those loaded by jobpatchfile() will not be. * Added pagecount querying and 14th and 15th fields to printlog. This required many fixed the to querying code and other interface code. * Changed the way the ppop commands compute the percentage of a file sent to use floating point. This should reduce the chance of negative percentages and other anomolies, due to int overflow, being shown on large jobs. Also changed job_status() to print "bug%" if the total bytes is 0. (Why this should ever be so is unknown, but there are reports of core dumps on floating point exceptions. Does integer divide through floating point exceptions?) * Added a HP UEL escape before the code that turns off unsolicitied status reports in pprdrv after the printer has reported that job processing is finished. The problem was that if the interface inserted a control-T while pprdrv was waiting, it would knock an HP 4Si into PostScript mode. * Fixed some memory leaks in papsrv_query.c by having it call noalloc_find_cached_resource() rather than find_cached_resource(). * Changed the name of the global_defines.h macro PRE_CACHEDIR to RESLIBDIR. Also renamed pprdrv/ppdrv_ppd.c:find_font() to ppd_font_present() and changed to return value from 0 found, -1 not found to TRUE if found, FALSE if not. Added FONT_TYPE_TTF to global_defines.h as a value that find_cached_resource() can set mode to. Simpified pprdrv/pprdrv_capable.c code by having it let find_cached_resource find the .TTF fonts (and now any font in the font index) and having it examine the mode to determine if it should ask for the TrueType rasterizer and do other things like that. Changed to FONT_ stuff so that the values aren't mode_t anymore. Rather there is a separate set of FONT_MODE_ defines which are used to represent the FONT_ defines in the file system. * Moved libppr/vsnprintf.c into snprintf.c. * Fixed some parameter error checking in the lpr interface and changed a lot of exit() calls to int_exit() calls. * Eliminated all uses of sprintf() and vsprintf() from libppr. * Removed the note that the SunOS 4.1.3 port is untested. (Thanks to Matthew Keller for his test report.) * Removed references to the defunct rpprd FIFO from ppr and ppop. * Moved to call to feedback_setup() to an earlier part of start_interface() because if the interface didn't like its arguments, reapchild() could be called and run feedback_drain() before feedback_setup() was called. * Fixed some bugs in tools4fixup/fixup.sh, updated the license statement, and moved the check for user root until after that requirement is stated. * Fixed the pr filter so that if no "width=" or "length=" option is passed to it, then no -w or -l option is passed to pr. Previously it was passed a default value of -w80 and -l66. This was resulting in the truncation of long lines. Appearently the Linux pr(1) man page is incorrect when it says that the default for -w is 72. In actual fact it seems to be much longer, maybe even infinite. Also fixed filter_pr to use $TEMPDIR. * Changed to temporary file names used by the pr, dvi, tex, and texinfo filters to ppr_pr_$$, ppr_dvi_$$, and ppr_texinfo_$$. * Added the pr filter to those handled by setup_filters.sh. Previously it was an exception in that it was installed by "make install". * Created ppr_strsep(). It is intended to work like BSD strsep(). * Changed ppr_getline() to delete all trailing spaces from the line. Also modified it so that if the passed in buffer is a NULL pointer if allocates one of the size indicated by the passed in buffer size parameter. I see that there is no note in this file which says when ppr_getline() was added. I believe it was added at the same time as libppr/ini_section.c. * Simplified ppad/ppad_filt.c:get_mfmode() by changing it to use ppr_strsep(). Also changed it to use ppr_getline(). * Removed the compiled in table from libppr/cs2enc.c:charset_to_encoding(). * Added $SHAREDIR/lib/pagesize.conf as a configuration file read by libppr/pagesize.c:pagesize() when it doesn't find the page size in its compiled in table. The compiled in table may be eliminated later. * Moved editps.conf to /editps/. I don't know if that was best, but it makes it easier for someone to realize what he has to modify to use a new filter. * Changed ppr/ppr_outfile.c:get_next_id() so that it skips an ID number if there is already a queue file for a job with that number with the same queue name, destination node name, and home node name. This may not guard against collisions with jobs created with the ppr -Y switch, it will not prevent problems if someone tries to manipulate jobs by ID number alone, and it will not work well when remote printing is implemented, and it will not protect against the possibility of the ID numbers wrapping around during the time that a copy of ppr is preparing a job (unlikely to be a problem), but it is a lot better than what was (both jobs would be destroyed). * Eliminated libppr/size_list.c:page_sizes[] and the structure it used. * Changed libppr/pagesize.c:pagesize() to read pagesizes.conf. * Modified libppr/wildmat.c:wildmat() so that it will allow backslash octal constructs, hexadecimal, and normal ANSI string things like \r\n\t. * Added a search path argument to libppr/findres.c:find_cached_resource(). * Added code to ppr/ppr_main.c:main() so that it repeatedly calls getcwd() with larger buffers until it works. It then trims the buffer down to the correct size. * Added ppr --cache-priority and --cache-store. * Changed "N_Up:" line in queue file to "N-Up:", changed "Draft-Notice:" to "DraftNotice:" (and changed "Draft" to "DraftNotice" in struct QFileEntry). * Broke the queue file "Attr:" line up into several lines, but left the old one for now and did not change the code which reads the queue file to read the new style lines because they aren't complete yet. * Added ppr --cache-store, --cache-priority, --strip-cache, --strip-fontindex, and --strip-printer options. The default are "none", "low", "false", "false", and "true". * Added code to papsrv to run ppr with --cache-store=all, --cache-priority=high to maintain proper papsrv operation with LaserWriter 8.x despite the changed default behavior. * Merged features of pprdrv_res.c:add_resource_font() into add_resource(). * Fixed a bug in pprdrv/pprdrv.c:copy_prolog() which could result in the script section being copied by copy_trailer(). * Improved pprdrv/pprdrv_res.c:begin_resource() to strip out resources forced into the prolog or document setup section and those fingered by --strip-printer=true. * Fixed libppr/getopt.c:ppr_getopt() so it puts back equal signs which it replaces with NULLs during the parsing. This is important because ppr runs thru its arguments twice. This problem had broken options such as "ppr --queue=dummy". * Implemented pserrors.conf in pprdrv/pprdrv_reason.c. The old compiled in checks are still there. If the pserrors.conf rules don't find anything, then the old function is called. If it finds something, this is logged as an error. * Cleaned up ppr/ppr_old2new.c:old_to_new() (renamed to old_DSC_to_new() so that overflows are more clearly prevented. Also added a few more warnings and regularized and internationalized others. * Changed pprdrv/pprdrv_capable.c so it uses its own line buffer and ppr_strsep() rather than use the PostScript line buffer and the PostScript DSC lexer tokenize(). This was done to make things easier to understand by eliminating a silly tie-in. In order to fix the resulting caos it was necessary to create ppr_strsep_quoted(). * Re-wrote much of pprdrv so that it doesn't do anything in signal handlers but set a few flags. This will no double create its own crop of bugs, but it actually made much of the interface code simpler, particularly the query code, and it allowed me to re-write pprdrv_fault_debug.c to use STDIO again with the exception of the two new functions signal_debug() and signal_fatal(). * Changed a message which pprd adds to a printer's alerts file from "Printer placed in fault mode." to "Printer placed in fault mode, no auto-retry." because the old message didn't make the distinction obvious. Also marked this message and "Printer placed in auto-retry mode." for internationalization. As key message they should be internationalized even if not all of the interfaces can be yet. * Beafed up and reorganized the programs in the /test/ directory. Started a new group called "test-interface" to test the new changes to the interface running code in pprdrv. * Replaced -i with --routing in ppr --help output (but -i still works). Added ppr -R routing and -R ignore-routing. * Changed -C to --title in ppr --help (though -C still works fine). * Added a "ppr2samba-vserver:" parameter to allow `virtual servers'. This is a user requested feature. * Removed the old fake printcap code from ppr2samba. * Fixed a bug in "ppad pageslimit" which made it inoperative. * Got a basic ppr-indexfonts working. * Changed commentator/xwin.sh to put quote marks around and a comma and space between raw1 and raw2 in the displayed message. * Changed the 2nd raw paramater of "stalled" commentator message from minutes to seconds and milliseconds. * In pprdrv, moved the call to printer_bufinit() from main() to start_interface(). * Simplified pprdrv/pprdrv_commentary.c now that it doesn't have to worry about being called from a signal handler. * Changed the default idle_status_interval for the tcpip interface when feedback is true from 30 seconds to 40 seconds. This is still well within the default 90 second timeout of an HP JetDirect card. This was changed so that the idle messages wouldn't come on top of the stalled messages all the time. * Added Canon PPD files "Canon iR330-400 PS Print Server Ver 1.0" and "Canon iR330-400 PS Ver 1.0". The first supplied by Canon for the Adobe PostScript driver for Microsoft Windows 95/98, the second is supplied for use with LaserWriter 8.5. They differ a little, mainly is whether certain page sizes are described as "Transverse". * Added filters_misc/pdf_xpdf.sh to use xpdf's pdftops. 1.40a7, 26 July 1999--10 August 1999 * Fixed pprd_respond.c to read "N-Up:" rather than "N_Up:". This problem had broken the money charge stated in the responder message. * Added an error() function to filter_dotmatrix. This wasn't noticed earlier because appearently GNU C has an error() function. * Fixed a problem in feedback_wait_pjl(): It wasn't calling writemon_start() again after calling writemon_unstalled() when a page dropt into the output tray. * Installed some ULTRIX fixes from Klaus Reimann. * Installed snprintf(), vsnprintf() declaration fixes from Klaus Reimann. * Changed pprdrv/pprdrv_interface.c:start_interface() to set the umask to 077 (or more precisely, to PPR_INTERFACE_UMASK which is defined in include/global_defines.h). * Added code to ppop/ppop.c:main() to unblock all signals. There was a report of a problem in the WWW interface with ppop being run with SIGUSR1 blocked. * Fixed lprsrv standalone mode to disable the SIGCHLD handler in its forked off children since it was preventing libuprint from wait()ing. * Fixed the cancel and list queue functions in lprsrv so that if the libuprint function which does the work fails and returns with uprint_errno set to UPE_UNDEST a special error message is printed stating that the queue does not exist. This is necessary because the libuprint functions don't call uprint_error_callback in this case (though maybe they should, I can't decide). * Added a "remote_too" parameter to uprint_print(), uprint_lprm(), and uprint_lpq() in libuprint.a so that forwarding of requests to remote systems can be disabled. Used this new feature to disable forwarding in lprsrv. This was done because it has security and accidental loopback implications which have yet to be explored. Also, forwarding through uprint-remote.conf entries never worked for printing, only for queue listing and job deletion! It probably was never intended to work at all since the changes which made lpq and lprm work were all in libuprint, not in lprsrv. * Renamed the include/sysdep.h macros USE_LP and USE_LPR to HAVE_LP and HAVE_LPR respectively in order to better reflect their meaning. * Changed libuprint/claim_lp.c so that if HAVE_LP is defined, LP_LIST_CLASSES and LP_LIST_PRINTERS had better be. * Fixed tools4fixup/fixup.sh invokation of ppr-indexfonts by adding "-c" to the su command line. * Eliminated the "firstline" argument to uprint_error_callback(). * Removed the SIGPIPE handler in the tcpip and lpr interfaces and instead set the SIGPIPE handler to SIG_IGN. * Changed sprintf() to snprintf() in libuprint/uprint_print_rfc1179.c. * Cleaned up pprdrv/pprdrv.c:pprdrv_read_printer_conf() by changing code to use the current ppr_sscanf() (some of the code was written before ppr_sscanf() reached its present state. Also added fclose() on the printer configuration file! * Added libppr/cloexec.c which contains set_cloexec() which provides a simple way to set the FD_CLOEXEC flag on a file descriptor. The code for it was moved out of pprd's FIFO opening code. * Changed pprdrv so its calls set_cloexec() on the queue file and all of the component files. * Cleaned up the pprdrv incapable logging code a little. It now calls fatal() if it can't open the log for writing and it has a cleaner test to see when it should print messages about trying and refusing to try. * Added a parameter to uprint_lpr_response() to specify the timeout. * Rewrote uprint_print_rfc1179() to send the control file first. (Actually the control and data file operations are now broken out into two functions. It is easy to change the order in the source code.) * Added chunked mode to the lpr interface. * Removed the timeout which the lpr interface uses when waiting for the reply zero byte after sending a zero byte at the end of a data file. This change was necessary because HP JetDirect cards don't reply right away. * Changed the default idle status interval of the tcpip interface from 40 to 15 seconds. This should allow faster reporting of things like out-of-paper. I intend to weed out some of these messages before generating commentary messages about them. * Removed the directory filters_typeset/lib_c++/ because it was too incomplete to be useful and I am porting it to Perl before continueing the project. * Modified the names of encodings which don't have official Adobe name to begin with "PPR-". Also removed "Encoding" from the end and changed the definition code to install them with "/Encoding defineresource" if "defineresource" (a level 2 operator) is available. Also changed the procset TrinColl-PPR-ReEncode to take the encoding as a name rather than an array and look it up with "/Encoding findresource" if "findresource" (another level 2 operator) is available, otherwise to use "load". Also changed encodings/ISOLatin1Encoding so it does not load itself if "where" can find a previous definitition of it. Also changed the encodings/Makefile so that when installing the encodings it applies procsets/squeeze to remove syntactically unnecessary spaces. * Edited ppd/ghostscript/ghostscript_master to include the URW fonts explicitly and updated the font version numbers to conform to those of the fonts. * Removed the non-FULLY_SERIALIZED code from pprd. * Fixed a core dump bug in a printer_printf() in the N-Up code. * Fixed the definition of EDITPSCONF in global_defines.h to point to its new location. * Rewrote ppr/ppr_editps.c:editps_idenfity(): removed "creator=" and renamed "creatorglob=" to "creator=", improved code quality, removed line length limit, added "interpreter=". * Changed default for -H editps to on. * Moved the code to create a DVIPS configuration file into filters_misc/ make_dvips_conf.c, removed the setgid bit from the dvi, tex, and texinfo filters, removed the code in ppr_infile.c which allows setuid and setgid execution of filters. * Added editps/dvipsk_5.58f to deal with problems in "dvipsk 5.58f" output. * Added lines in editps.conf to check for the Perl and Sed interpreters before deciding to use the filter. * Changed all programs which use temporary files to begin their names with "ppr-" plus the program name plus "-" plus the process id. The exception is Uprint which uses "uprint-" plus the process id. This should make the work of ppr-clean easier. * Fixed a nasty bug in the new pprdrv feedback code. It turns out that the timeout passed to feedback_wait() is relative to the call to writemon_start() (sort of). This means that in jobbreak_signal() it is necessary to increment the timeout value for each call. * Added 2nd parameter to feedback_wait() which can be used to instruct it to return imediately if it is interupted by a signal. * Changed pprdrv/pprdrv_feedback.c:feedback_reader() to convert bytes with the value zero to question marks since some of the code can't deal with them because it sees them as string terminators. For example, strcspn(line, "\n") can't be used to find the end of a line with zero bytes in it. * Fixed a bug in pprd/pprd_respond.c which caused the responders to report only the first word of the job and submitter's name. * Changed the pprdrv commentary system a good deal. The definitions of the categories beyond the first 4 have changed. Now all messages will be in one category from amoung the first 4 even if they are also in one of the other categories. All categories must be in the mask on the "Commentator:" line in order for the commentary to be sent. Repeated printer status messages are now filtered out if the message has been announced within the last 5 minutes. * Added "chunk_size=" and "exaggerated_size=" to the lpr interface. These will not appear in the documentation until it is know if they are useful. * Modified ppr/ppr_nest.c:outermost_start() and outermost_end() to improve the warnings and gab messages. * Changed ppr/ppr_infile.c:in_ungetc() to clear logical_eof. * Substanially re-wrote ppr_simplify.c:copy_data() to make it try hard to deal with defective "%%BeginData:" comments with binary data. * Changed the default for ppr --strip-printer to false because there are probably a lot of programs which send modified fonts. * Changed certain negated character classes in papsrv/papsrv_ppd_parse.l and pprdrv/pprdrv_ppd_parse.l to include "\n". (The *TTRasterizer: parsing in the papsrv parser was sucking up newlines and stuff beyond them. * Fixed ppr --cache-priority parsing, "high" wasn't working. * Removed all instances of sprintf() from papsrv. * Renamed --cache-store=unique to --cache-store=unavailable and --cache-store=all to --cache-store=uncached. * Fixed --strip-cache=true so it works even while the resource is being stored in the cache. * Fixed libppr/ini_section.c:ini_query(). * Added missing code in pprdrv/pprdrv_flag.c for reading default page size from /etc/ppr/ppr.conf and fixed sundry typos in banner page code. * Added "stopped" protection arround the "%%IncludeFeature: *PageSize" in filter_lp/filter_lp.c. * Added some more flag date formats to tools4fixup/make_conf.sh. * Added editps/LaserWriter_8_8.4 to re-write LaserWriter 8.4 output. For some reason it is generating things like "%RBIBeginTrueTypeFont: Accept68K Geneva" "%RBIEndTrueTypeFont" instead of the "%%BeginFont: Geneva" "%%EndFont". Since PPR goes to considerable trouble to handle LaserWriter 8.x TrueType fonts correctly, this change was not welcome. Perhaps other spoolers didn't deal with it well. The filter also deals with a duplicate font include request problem. * Changed top level "make dist" to go to the "po" directory and run "./extract.sh". This ensure that the .pot files are up-to-date. * Removed misc/ppdconv.perl and replaced it with misc/ppd2macosdrv.perl. The new program is installed in BINDIR. * Added a "*Product:" line to "ppd/other/QMS-PS 410 DSC" so it can have a unique name on a Macintosh computer. * File reorganization: From To ======================================================================== /var/spool/ppr/nextid /var/spool/ppr/run/lastid_ppr /var/spool/ppr/lpr_previd /var/spool/ppr/run/lastid_uprint_lpr /var/spool/ppr/pprd.pid /var/spool/ppr/run/pprd.pid /var/spool/ppr/papsrv.pid /var/spool/ppr/run/papsrv.pid /var/spool/ppr/lprsrv.pid /var/spool/ppr/run/lprsrv.pid /var/spool/ppr/olprsrv.pid /var/spool/ppr/run/olprsrv.pid /var/spool/ppr/alerts/ /var/spool/ppr/printers/alerts/ /var/spool/ppr/alerts/*.status /var/spool/ppr/printers/status/ /var/spool/ppr/addr_cache/ /var/spool/ppr/printers/addr_cache/ /var/spool/ppr/win95drv /var/spool/ppr/drivers/win95 \\*\win95drv \\*\pprwin95 /var/spool/ppr/state_update /var/spool/ppr/run/state_update /var/spool/ppr/state_update_pprdrv /var/spool/ppr/run/state_update_pprdrv * Added a test for the existence of TEMPDIR to tool4make/makedirs.sh. * Added another lookup stage to printdesk/nbp_lookup_ali.c and changed the timing somewhat. * Removed printdesk/printer2.xbm (which was never used for anything) and removed it from the list of things installed in the Makefile and added it to the obsolete files removed in fixup. * Fixed a problem with misc/ppr-sync.sh copying the papsrv_default_zone.conf file. * Fixed www/show_printlog.cgi.perl so it can parse the new printlog file format. * Fixed ppad so that when it deletes a printer it also deletes its address cache file. * Changed the exit codes in pprdrv for failed queries from EXIT_PRNERR_NORETRY to EXIT_PRNERR because some interfaces won't stop trying before the 120 second timeout expires. * Fixed bugs in tools4fixup/inst_cron.sh which made the crontab file useless. * Added sorting or interface names and descriptions of new interfaces to www/prn_addwiz.cgi.perl. * Started work on save function in www/prn_properties.cgi.perl. * Cleaned up fixup.sh some. It should now correctly change the file ownership within a PPR directory even if the directory name is a symbolic link. It also now does SHAREDIR. * Modified ppr2samba to review the smb-include.conf file and print a warning if it doesn't have [pprproto] and [pprwin95] sections. 1.40a8, 11 August 1999--15 December 1999 * Modified pprdrv/pprdrv.c:copy_data() so that if a "Bytes" section runs off the end of the file, it won't copy -1 cast to char to the printer for the missing bytes. (This is to match the copy_data() changes in ppr/ppr_simplify.c.) * Fixed ppr-httpd so it sends a "Content-Type:" header on CGI responses. * Added tools4make/paths.c which will later be used to get global_defines.h path definitions into makefiles and possibly into shell and Perl scripts as well. * Added libuprint/lpr_failover.c and changed the remote lpr, lpq, and lprm code to use its uprint_lpr_make_connection_with_failover(). The effect of this change is that command or space separated lists hostnames may be given "remotehost=" lines in uprint-remote.conf. * Did some more internationalization of the libuprint messages. * Changed tools4fixup/inst_cron.sh to use a temporary file because System V cron won't accept "-" and RedHat Linux cron won't accept stdin without it. * Fixed lprsrv so that if a queue can't be found, it responds to the ^B command with a byte of 1. (Previously it responded with a byte of 0 but threw away the job and closed the connection after logging the error.) * Changed libppr_int/int_con_tcpip.c:int_connect_tcpip() and the tcpip interface so that by default, if connect() reports ECONREFUSED, it exits with EXIT_ENGAGED rather than calling alert() and exiting with EXIT_PRNERR. Also dropt the number of retries in this case from 10 to 5. * Removed the "write_size=" option from the tcpip interface since it didn't do anything and doesn't seem useful. * Added the "refused=engaged", "refused=error", and "refused_retries=" options to the tcpip interface. * Changed libppr_int/int_con_tcpip.c:int_connect_tcpip() so that it creates a new socket using socket() before each connect() attempt. This is because Linux won't let us re-use the socket on which the connect() call failed. * Fixed the lpr interface so that it runs most of the time under its real user id rather than running as root all of the time. This allows the printer alerts files to have the correct ownership. Also fixed ppop to report on the permissions problem rather than claiming there was no alert log. Also fixed the code in libuprint/lpr_connect.c so it doesn't call uprint_error_callback() while root. * Fixed bug in libuprint/uprint-newconf.c which caused it to fail after applying a system patch replaced its links with new versions of the real programs. * Moved the PPR Xauthority file from "$HOMEDIR/.Xauthority" to "$RUNDIR/Xauthority" so that it will work with $HOMEDIR on a read-only partition. The changes were in misc/ppr-xgrant.c, libppr/prune_env.c, and misc/pprpopupd.perl. * Added vendors/ppd_hp "HP C LaserJet 4500-PS" and "HP LaserJet 4050 Series". The first one has an incorrect "*FormatVersion:" line. I removed a trailing space from the ModelName of the second. * Furthur modified "ppad -M show" output to conform to the needs of the WWW interface. * Many enhancements to the WWW interface, including the show_queues, prn_addwiz, and prn_properties scripts. * Removed PPD file "Canon iR330-400 PS Ver 1.0". * Fixed misc/ppd2macos.perl to encode / as :2F for Netatalk and CAP. * Added "temp_first=" option to the lpr interface. * Fixed a bug in tools4fixup/fixup.sh which caused it to fail to create compatibility links when removing old versions of programs whose names have changed. * Added latest French translation files from Olivier Tharan. * Changed ppr --responder-options= so that it adds to the existing options. This implies that responders are required to ignore options that they don't recognize. * Fixed bugs in ppad/ppad_filt.c which caused core dumps when adding a group member with a resolution which differed from that of the existing members. * Moved the code in ppad_filt.c which converts "600x600dpi" to "600dpi" from get_mfmode() to deffiltopts_add_ppd() so that PPD files which state the resolution in these two ways won't be considered to have conflicting resolutions. * Fixed interface/tcpip.c so it forces idle_status_interval= to zero if barbarlang is non-empty. This is because control-T's may cause problems if the job isn't PostScript. * Changed the format which ppad uses to print switchsets. Formerly it put single quotes arround an option argument only if it contained one or more spaces. It now also uses quotes if it contains one or more equals signs. Hopefully this change will make it easier to identify the option and its argument when the option is long. * Fixed a bug in responders/write.sh, namely that $response_code_number was undefined. * Added queue alias support code to ppr. * Changed "PassThru Types:" to "PassThru types:" in the "ppad show" and "ppad group show" output. * Added queue alias support to ppop. * Did furthur internationalization work on ppop. * Fixed the "ppop qquery" "longsubtime" field so it doesn't end with a newline. * Added the commands "ppad location", "ppad department", and "ppad contact". Also added code the "ppad show" to display this information. If these new fields are not set, then the lines fromt them will be missing from the output. However, the "ppad -M show" command will show them with empty values. * Added "HP LaserJet 2100 Series" and "HP LaserJet 5000 Series" to vendors/ppd_hp/. * Changed the line length limit in libppr/ppr_gcmd.c:ppr_get_command() from 80 to 256. * Changed tools4make/Makefile to install paths.sh and paths.pl in $HOMEDIR/lib. Added more information to the paths.* files, made some changes to /printdesk/ to use paths.pl. * Changed the "ppad charge" command so that it always writes a "Charge:" line with 2 values. Also changed it so that an zero length "duplex sheet charge" is interpreted as "none" (for the benefit of www/prn_properties.cgi.perl). Also improved syntax checking for bad currency values. * Changed the "ppad -M group show" output format some more to suit the WWW interface which is currently in development. * Added code to pprdrv/pprdrv_writemon.c to allow writes during monitored waits for printer messages. This was intended to allow the printer LCD message to be changed with PJL commands while waiting for the job to finish. Unfortunately, the HP 4000 I have tested it on doesn't do the updates until after the job is finished! * Changed the idle_status_interval default of the tcpip interface from 15 if feedback is true, 0 otherwise, to 15 if feedback is true and jobbreak is control-d, 0 if otherwise. * Changed the idle_status_interval default of the serial interface from 0 to 15 if feedback is true and jobbreak is control-d, 0 otherwise. * Added the idle_status_interval option to the parallel interface and gave it the same default as tcpip and serial. * Changed the jobbreak "pjl" and "signal/pjl" code to send "@PJL" commands to the printer at regular intervals while waiting for the job to finish in order to keep reseting the communications timeout. * In pprdrv/pprdrv_interface.c, added code to turn on PJL unsolicited status messages (using the command "@PJL USTATUS DEVICE = ON") and added the function pprdrv/pprdrv_feedback.c:handle_ustatus_device() which is called whenever one of the resulting messages in received. Currently, it just reformats the message and uses write_printer_status() to make it available to the "ppop status" command. Commentator support will be added later. Code should also be added to translate PJL status code into a human readable form. The current code is only intended to allow us to see how the PJL status system works. * Added code to tools4fixup/setup_filters.sh to install the PNG filter. This was somehow omited from 1.40a6. * Moved verious documenation files, including this one, into /docs/misc/ and left links to them at the top level. * Removed the link README_MISC.txt and moved misc/README_MISC.txt to docs/misc/README_MISC.txt, leaving a link to it at its old location. * Added the "reset_before=" and "reset_on_cancel=" options to the parallel interface (with defaults of TRUE and FALSE respectively) and a Linux module with platform-specific parallel port code and a generic module (which does nothing). Also added a hook to platform specific code (supplied for Linux) which tests to see if the printer is ready before starting and prints a LaserJet-style "%%[ ... ]%%" message and exits with EXIT_PRNERR if it is not. Hopefully, someone else will supply modules for Solaris, SGI, and the like. There will be more parameters in the future which the various modules can be expanded to support. The "reset_before=" option does not perform its reset until the printer is found to be on-line, not out of paper, and not in a fault state. This was necessary, but doing a reset on an HP Deskjet 500 caused to it go on-line even if it was off-line! * Added "reset_on_cancel=" to the parallel interface and support for Linux. * Added a backslash before a @ in a string to port misc/atalkmapd.perl from Perl 4 to Perl 5. * Added LD= and LDFLAGS= to the include/global.mk created by Configure. Also changed some of the makefiles to use it rather than CC= and CFLAGS=. * Added FreeBSD 3.1r port from Alan F. Lundin . * Added file type "mgc" for Mentor Graphics Metafile, also from Alan F. Lundin. * Added additional PCL detection rule from Alan F. Lundin. * Changed the printer configuration file reading in pprdrv to use ppr_getline() so as to remove any configuration file line length limit at that point at least. * Changed the "ppop ldest" command so it doesn't use a fixed length buffer to read the comment. * Changed the "ppad interface" command so that it now simply deletes "Address:" lines which come before the "Interface:" line rather than putting the "Interface:" line there. It also now correctly deletes "Codes:" lines which come after the interface if the interface has changed. * Changed ppad/ppad_conf.c:confread() so that it can read lines of any length. * Removed printer/group configuration file line length limit from papsrv. * Removed the printer/group configuration file line length limit from ppr2samba. * Added the %A format to ppr_sscanf(). This format will return the rest of the line but with trailing white space removed unless the string is quoted, in which case it will return the contents of the quotes. * Heavily re-wrote the printer configuration file parsing in pprdrv.c. * Rewrote the printer and group configuration parsing in ppad to conform to the changes in the pprdrv parsing. * Fixed the bug in libuprint/uprint_lprm.c which prevented uprint-lprm from canceling multiple jobs on a PPR queue. * Changed "ppad show" output so that "PassThru:" and "PagesLimit:" aren't shown if they aren't set. (The are shown in the "ppad -M show" output.) * Changed the order of the "ppad show" output to group things slightly more logically. * Changed the "ppad group add" command so that it can add many at once. * Added the "ppad group set" to change the whole member list. * Changed the "ppad group remove" command so that it can remove more than one printer at a time. (The code is not efficent since it re-writes the configuration file once for each printer.) * Added libppr/trim.c which implements trim_whitespace_right(). Nothing uses it yet. * Changed the ppr hack default (defined in include/global_defines.h) back to none. It was set to turn on the editps hack by default, but there are still too many problems with it. * Fixed bug in pprdrv's handling of "%%BeginResource:" lines with only one parameter. It now just copies the resource rather than core dumping or calling fatal(). * Finished "ppr --commentary" code and added the ppr switches --commentator, --commentator-address, and --commentator-options as well as the environment variables PPR_COMMENTARY, PPR_COMMENTATOR, PPR_COMMENTATOR_ADDRESS, and PPR_COMMENTATOR_OPTIONS. Also added to the "ppop details" and "ppop qquery" commands code to print these values. * Added a "severity" parameter to pprdrv's commentary() function. Also made it one of the parameters to the commentator. * Changed the lw-messages.conf format and pprdrv/pprdrv_lw_messages.c to allow a severity number between 1 and 10 at the begining of a section name. * Removed the severity data from the audio commentator since the above changes made it redundant. * Heavily re-organized the code for the audio responder and commentator. The routines which generate the play lists have been moved into files in libscript/ so that then can be used in CGI scripts which generate sound files which clients can pull down from web servers. Also deleted a sound file which said that the remote spooler daemon is down since the remote spooler daemon has been eliminated from the PPR peer-to-peer plans. * Moved misc/tail_status.c to libscript/ and moved the guts of it into libppr/tail_status.c so that it can be called from www/commentary-httpd. * Added lib/pprwatch to the list of obsolete files removed by tools4fixup/fixup.sh. * Slightly modified some of the pprdrv commentary() messages in pprdrv/ pprdrv_writemon.c so that they all begin with a verb such as "has been" "was not", etc. Previously they were incosistent. Also modified libscript/ speach_commentary.pl to parse the modified messages. * Changed pprdrv/pprdrv_feedback.c:write_printer_status() by changing the name to ppop_new_status() and make it no longer call progress_new_message(). (The caller must now call both.) Also, renamed pprdrv/pprdrv_progress.c: progress_new_message() to progress_new_status(). Also changed the message which progress_new_status() writes from "MESSAGE" to "STATUS" and changed printdesk/PPRstateupdate.pm. * Changed the names of some pprdrv writemon operation names: "PJL" -> "WAIT_PJL", "CONTROL-D" -> "WAIT_CONTROL-D", "SIGNAL" -> "WAIT_SIGNAL". This should make their purpose clearer to people reading the commentator output. * Changed interfaces/gs_master.sh so that the signal handlers set with "trap" do nothing but set a variable. Calling "exit" didn't seem to be working, at least not on Linux 2.2.5 or Solaris 2.6. * Fixed filter_lp so that the memset() calls the clear the line buffer also clear the extra spaces reserved for a tab at the end of the line and the space for the terminating null on the longest possible line. This bug caused bad PostScript to be generated on Solaris 2.6 Sparc if a line got wrapped. * Changed libscript/speach_commentary.pl to increase the frequency with which silly sounds are played when they are turned on. This included fixing a bug which was preventing them from being played on job errors. * Fixed libscript/speach.pl:speach_time_interval() so that it can say time intervals longer than 99 days 23 hours 59 minutes correctly. * Fixed pprdrv/pprdrv_lw_messages.c:regularize_lw_message() so that if the message to be regularized matches the section heading, the section heading is returned. (This bug meant that irregular messages get a cooked version but those already in cannonical form did not!) * Made changes because Bash 1.14.7 (at least on Linux 2.2.5) has trouble trapping SIGINT with the "trap" command: Added SIGTTIN and SIGTTOU to the signals in libscript/signal_sh.c. Switched the gs* interfaces (interfaces/gs_master.sh) to trap SIGTTIN instead of SIGINT for receiving notification that the subsidiary interface is exiting with value EXIT_ENGAGED. Changed libppr_int/int_exit.c:int_exit() to send SIGTTIN instead of SIGINT. Did some general code refinement for the gs* interfaces. * Fixed pprdrv/pprdrv_commentary.c:commentary() so that the code to suppress exit messages after an "off line" message works. It was broken because it was looking for a _status_ of "off line" rather than an _error_ of "off line". * Added more "Please press RETURN to continue." messages to tools4fixup/ fixup.sh in order to make it more likely that fixup errors will be noticed. * Cleaned up libscript/Makefile. * Added libscript/getpwnam and getgrnam so that the fixup script can determine the id numbers of the ppr user and group event if they aren't stored in /etc/passwd and /etc/group. * Replaced the fake snprintf() and vsnprintf() implementation in libppr/ snprintf.c with one take from Samba/rsync. The notice at the top of the file says it may be used for any purpose as long as that notice is not removed. Thus, it is not under the GPL and is not incompatible with PPR's BSD style license. * Change NEEDS_STRSIGNAL, NEEDS_SNPRINTF, and NEEDS_VSNPRINTF to HAVE_STRSIGNAL, HAVE_SNPRINTF, and HAVE_VSNPRINTF in anticipation of an eventual move to autoconf. * Changed "ppop status" so that it says "halting (printing xxx-nnn)" rather than "printing xxx-nnn (halting)". Also removed the \n from the ends of the tranlatable status strings (sorry guys). Also changed some of the machine mode messages and added a 3rd field which presents the status extra message ("off line" for example) as a 3rd field. * Modified printdesk/PPRcontrol.pm:get_pstatus() so that it returns the printer name as the 1st list member, the job name (if any) as the 3rd parameter and the last printer status message as a 6th list member. Made get_pstatus() return a list of array references so that it can report on the status of more than one printer at a time (such as a group or "all"). Removed get_pmessage() since it is now unnecessary. * Renamed printdesk/PPRcontrol.pm:list_destionations() to list_destinations(). Also changed it to include all fields returned by "ppop ldest". * Changed many of the printdesk/PPRcontrol.pm function so that while the queue indicated when the object was created remains the default, it can now be overriden by specifying a different queue. * Added "destname" to "ppop qquery". * Changed pprdrv/pprdrv_feedback.c so that when writing "%%[ PrinterError: xxx ]%%" messages to the progress file and for use by "ppop status", the "PrinterError:" is left on. * Changed tools4make/makedirs.sh so that it also does chown and chgrp on the new directory to set owner and group to "ppr". * Added tools4make/make_new_dir.sh. * Changed "ppad show" output in both human and machine reable forms to always show the charge as a charge per duplex sheet and a charge per simplex sheet even if the configuration file only contains one value on the "Charge:" line. This allows us to simplify code that parse the output, such as that in the new WWW interface. * Fixed printdesk/PPRstateupdate.pm to correctly keep track of whether it has started tail_status yet. * Fixed printdesk/printdesk.perl and printdesk/atchooser.perl so that they exit in an approved way for Tk. * Improved error messages in libuprint/uprint_print_rfc1179.c. * Improved error messages in lprsrv/lprsrv_print.c. * Added an extra void* parameter to libppr/tail_status.c:tail_status() so that the callback routine can accept a pointer to a structure which can give it information about the context in which it was called. * Moved a big chunk of ppr/ppr_main.c:write_queue_file() into the new function libppr/writeqfile.c:write_struct_QFileEntry(). * Added "responder", "responder-address", and "responder-options" columns to "ppop qquery". * Numberous improvements to the www/ programs including but not limited to: * Added the www/ppr-commentary-httpd.c program which issues spoken commentary messages on printer events. * Enhanced www/show_queues.cgi.perl to use a host of xfig generated icons to describe printer status. * Modified many of the www/ programs to use Cascading Style Sheets. * Added the server disk space graphing program df_html.cgi and df_img.cgi which use gd-1.7.3, the Perl GD module version 1.23, and the Perl module Chart-PGNgraph 1.13 to display pie charge representing disk usage. * Added CGI and audio test pages. * Got the add group wizard actually working. * Fixed bugs in ppr-httpd which made it fail to work with the Amaya browser. From now on, enhancements to the WWW interface will be logged in this file. During the initial period of rapid development the changes were too numberous and extensive to easily describe. 1.40b1, 15 December 1999--26 January 2000 * Added LOGDIR to tool4make/paths.c and changed the name of the Perl output file form paths.pl (Perl library) to paths.ph (Perl header). Added paths.pl to the obsolete files in tools4fixup/fixup.sh. * Bumped the PrintDesk libarary version number from 0.1 to 0.2 in consideration of the changes I made in 1.40a8 to accomodate the WWW interface. * Added TAIL_STATUS_PATH and SAFE_PATH to include/global_defines.h and libscript/paths.c. * Changed the ppr-httpd log file from "/tmp/ppr-httpd.log" to "$LOGDIR/ppr-httpd". * Added VERSION and SHORT_VERSION to tools4make/paths.c and changed SHORT_VERSION to include alpha and beta indicators. (That is, I changed it from "1.40" to "1.40b1". * Many improvements to www/ppr-httpd.perl: * Added explicit recognition of ".txt" files as MIME type text/plain. * Added support for request methods in lower or mixed case. * Added support for the "Location:" header from a CGI script. * Added support for $ENV{PATH_INFO} and $ENV{PATH_TRANSLATED} in CGI scripts. * Set the PATH for CGI scripts to SAFE_PATH. * Fixed code to send "405 Method Not Allowed" with an "Allow:" header when any method other than GET is tried on a file or any method other than GET or POST on a CGI script. * Added the framework for authentication. If the request has a valid "Authorization:" header, then $ENV{REMOTE_USER} is set, otherwise it is not. If the script returns "Status: 401", a "WWW-Authenticate:" header is generated with a challenge. * Modified www/cgi_data.pl:cgi_read_data() to read $ENV{QUERY_STRING} as well as STDIN when the request method is POST. Also removed the code which stript trailing spaces from values. I had forgotten about this code and had considered the behavior to be a browser bug. This change may break some scripts. * Added tabindex and accesskey support to cgi_wizard.pl and added code to use it to prn_addwiz.cgi and grp_addwiz.cgi and cgi_membership.pl. In the "Cancel", "Back", "Next" buttons, the access key is indicated by putting an underscore before it. * Removed the first $me argument from www/cgi_wizard.pl:cgi_wizard() because it is better to use $ENV{SCRIPT_NAME}. * Added www/cgi_auth.pl:demand_authentication(). * Changed cgi_wizard.pl and cgi_tabbed.pl to call demand_authentication() if $ENV{REMOTE_USER} doesn't have a non-null, non-empty value. * Changed Configure to not defined DOTEXE=.exe for UWIN since UWIN seems to already have rules to handle this and defining it so makes some of the default make rules not apply anymore. * Moved the call to tools4make/makedirs from the top level Makefile to tools4make/Makefile's install: clause in order to remove a chicken-and- the-egg problem which was preventing "make install" from creating the top level PPR directories even if it had write access because it was trying to install paths.sh and paths.ph first. * Created www/cgi_intl.pl. For now it just contains dummy functions. These dummy functions allow me to make the internationalization changes to the CGI scripts without breaking them. Once that is done, I will go back and put real message translation code into this library. * Applied i18n changes to www/show_logs.cgi.perl. * Added code to po/extract.sh to extract messages from *.perl and *.pl in the directory www/. This produces some spurious warnings because xgettext doesn't recognized Perl comments, but the output is fine. * Added a preliminary implementation of RFC 2617 Digest authentication to www/ppr-httpd. It will require some review before it can be considered secure. * Renamed www/logs.html to show_logs.html and added a link to show web server activity. * Fixed the left and right arrows in www/cgi_membership.cgi to be "<-" and "->" rather than ">-" and "-<". * Changed www/show_queues.js to set the hyperlinks after emitting the HTML for the popup menus rather than while emmiting it and to put more newlines in the HTML. I had hoped this would fix operation with HotJava but it didn't. However, I thought the code looked better, so I have kept the changes. * Added a 3rd parameter to www/cgi_wizard.pl:do_wizard() to set $debug rather than passing it thru a global variable. Also made it automatically turn on table borders if debug mode is enabled. * Fixed ppr-httpd so that it can parse request lines with methods consisting of any sequence of any ASCII characters not excluded by RFC 2068 section 2.2's definition of a token. Previously it would only accept upper-case ASCII characters. Also fixed it so it doesn't convert the request method to upper case since RFC 2068 section 5.1.1 says method names are case- sensitive. * Replaced the RSA's sample MD5 implementation with the new Ghostscript one. * Moved parse_job_name() and parse_dest_name() from ppop/ppop.c to libppr/ jnparse.c. This work included moving various prototypes, defines, and structure definitions from ppop/ppop.h and include/pprd.h to include/ global_structs.h. * Added the define USER_PPRWWW to include/global_defines.h and Configure. * Added --su switch to ppad. This switch allows the user "pprwww" so invoke commands as if any other user. * Changed ppop's -u or --as-user switch to an --su switch like ppad's. Unlike ppad's --su switch, this one may be used by any operator. The ppop code is also more complicated because we have to answer the question "do I own this job?" in addition to the much simplier question "do I have a special privledge?". * Began internationalizing www/prn_addwiz.cgi.perl, grp_addwiz.cgi.perl, prn_properties.cgi.perl, grp_properties.cgi.perl, and show_jobs.cgi.perl and added access control and --su support to all of them. * Began internationalization of www/show_queues.cgi.perl and www/delete_queue.cgi.perl. * Added cgi_encode() to www/cgi_data.pl. * Fixed www/cgi_data.pl:cgi_read_data() so it understands characters encoded in lower-case hexadecimal. Formerly it only understood upper-case. (Amaya generates lower-case.) * Added www/cgi_back.pl and changed many of the www/ programs to use it. This allows the "Back" "Cancel" and "Close" bottons to take the user back to an appropriate previous page in browsers which don't support JavaScript. * Added the very work-in-progress Perl typesetting library to filters_typesset/perllib/. * Fixed tools4make/installbin.sh and installscript.sh so that they will exit with a non-zero value if cp fails. * Changed some Makefiles which did chmod 6711 on the executable to do chmod 6755 so that if someone compiles PPR as himself and then tries to do "make install" as the user "ppr" it will work. * Fixed some column alignment problems in the ppr --help output. * Moved the fonts in fonts/ into vendors/ to clarify their copyright and license status. Also moved the .afm files in filters_typeset/ into vendors/ for the same reason. * Added a description of the copyright and licensing of various 3rd party files to LICENSE.txt. * Added -T to the Perl options of all of of the CGI programs in www/. This will surely have broken many of them. * Fixed www/test-audio.html by changing the field name "code" to "category". * Changed the permissions on $VAR_SPOOL_PPR/logs from 755 to 775 to allow ppr-httpd to write its log there. * Changed ppr-httpd to set umask to 002. * Did more work to internationalize the www/ programs. * Added a "AddOn" section to the queue file and removed some line-length limits in some of the queue file reading code in pprdrv and and ppop. * Fixed the gentle reloading of www/show_queues.cgi. The problem was that the form elements named "submit" were masking the submit() method. * Changed the names of the CSS files in www/ to match the names of the Perl code files whose output they apply to. * Changed the interface selection screen of the add printer wizard to use a table instead of which only works in Netscape. * Changed www/show_queues.js to not use the Layers constructor but rather to use a pre-defined
. The popup menu no longer uses a child browser window in Internet Explorer. Code will have to be added later for the standard DOM. * Added code to interfaces/interface_linux.c to define the status codes if /usr/include/linux/lp.h fails to do so. In linux 2.2.13 these codes are incorrectly only defined if __KERNEL__ is defined. * Did some i18n cleanup. This included renaming some of the programs in po/ and adding "daemon lang =" to the [internationalization] section of ppr.conf. This is read by the System V Init script (tools4fixup/init_ppr.sh) and used to set LANG for pprd, papsrv, etc. * Added "package main;" to the top of the paths.ph generated by tools4make/paths.c because otherwise if "use PrintDesk;" was used then the values would be defined in the package "PrintDesk". * Renamed docs/misc/README_MISC.txt to misc_README.txt and changed the link misc/README_MISC.txt to README.txt * Moved po/README.txt into docs/misc/ and left a link to it in its former place. * Added code to www/cgi_data.pl to detect if REQUEST_METHOD is not defined and skip the attempt to retrieve the POST data and query string and to set a few CGI variables in order to prevent warnings about undefined values. This is so that the CGI programs may be run from the command line during testing without printing loads of misleading warnings. * Fleshed out www/cgi_intl.pl. * Moved the incomplete script www/gather_stats.perl into misc/ for now. * Various changes to the incomplete Cygwin port including: changing version specific Cygwin element in the SAFE_PATH (defined in sysdep.h) to "/bin:/usr/bin" (the installer must make a link), changing #ifdef PPR_CYGWIN32 to #ifdef PPR_CYGWIN to conform to global.mk. * Renamed the function dirnotok() in tools4make/makedirs.sh to dirok() since that seems to make more sense. * Correct the GCC version detection and processor detection in Configure so that it can select i586 and i686 and so that it no longer incorrectly turns off strength-reduce in GCC versions 2.8 which have two digits after the first dot (such as 2.95.1). * Added EXIT_USER_ABORT to include/util_exits.h. * Changed the functions in libppr/jnparse.c to call error() rather than printing to the global FILE* errors. * Changed ppop and ppad so that if they are fed an unknown subcommand the return EXIT_SYNTAX. The previous behavior varied. * Added the "ppop modify" command. * Fixed an undiscovered bug in the interactive modes of ppop and ppad which could cause them to overflow the arrays they used for parsing the command line into an argument list. * Renamed some include/global_structs.h:struct QFileEntry members. * Removed the constant include/global_defines.h:MAX_QFLINE. Queue file lines can now be of any length that will fit in memory. * Changed the name of the "ppop qquery" field "proxy" to "proxy-for" and "draft" to "draft-notice". * Greatly improved editps/Windows_NT_4.0. * Changed some of the warning and gab messages in ppr/ppr_nest.c for clarity. * Added CUSTOM_HOOK_PROLOG and CUSTOM_HOOK_PAGEZERO to pprdrv. * Fixed a bug in tests/tools/regression_test_2 which was appearently tripping up Bash 2. ("exec - >$ADDRESS" instead of "exec >$ADDRESS"). 1.40b2, 28 January 2000--14 February 2000 * Added information about Digest Authentication to www/README.txt. * Internationalized "ppuser show" output. * Changed ppop so that the user "pprwww", like "root" and "ppr" is privledged even if it isn't listed in /etc/ppr/acl/ppop.allow. * Changed libpprdb/dbstrlower.c to user myalloc() rather than mystrdup() which looked silly. * Fixed a problem in the part of Configure which generated the global.mk section for DEC OSF/1: It generated two CC= lines, one of them wrong. * Temporarily changed ppop/ppop_modify.c to use char* arithmatic since void* arithmetic doesn't seem to work with the OSF/1 C compiler. * Fixed some missing includes in libppr/. * Made small updates in INSTALL.txt. * Fixed ppr/ppr_infile.c so that the size of passthru languages is recorded. It was being incorrectly recorded zero. * Fixed CHARSETCONF in global_defines.h to be in SHAREDIR rather than HOMEDIR. * Fixed su command which runs inst_cron in fixup. * Fixed Configure problem with USER_PPRWWW. * Fixed "touch" command portability problem in tools4make/Makefile. * Added PPD files: "HP LaserJet 4050 N", "Kyocera 1700+" (with German translation strings), "Lexmark Optra Color 1200", and "Lexmark Optra S xxx5 Series". For now we will pretend the problem of PPD files in multiple languages doesn't exist. * Removed samba/xerox_ticket_submitter.perl and salvaged some of the code to make misc/custom_hook_docutech.perl. * Enhanced pprdrv/pprdrv_custom_hook.c:custom_hook_run() so that it obeys "%%IncludeFeature:" lines. Also made it connect stdin to /dev/null and stderr to the pprdrv log file. Also added an error() call after the execl() in case it fails. * Fixed a bug in pprdrv printer config parsing which made "CustomHook:" not work. * Changed pprdrv/pprdrv_commentary.c:commentary_spawn() so it calls error() if execl() fails. * Added to ppop modify the ability to modify Addon lines by prefixing their names with "addon:". * Added to ppop qquery the ability to display Addon lines by prefixing their names with "addon:". * Changed the 3rd argument to a custom hook from the full path and name of the queue file to simply the full job name. The custom hook programs should be encouraged to use ppop qquery to get the information they need. * Modified www/cgi_run.pl:run() so that it breaks long commands into multiple lines. * Fixed include/global_defines.h:lmatchp() macro. (Klaus Reimann spotted this. The macro was supposed to return a pointer to the text after the matching text with whitespace directly after the match skipt. It was actually skipping non-whitespace after the match!) * Added the proxy_for() method in printdesk/PPRcontrol.pm. * Changed libppr/acl.c so that the users "ppr", "pprwww", and "root" are always considered to be members of all access control lists. This will allow the removal of scattered code which grants them access even if the ACL does not. * Greatly simplified the ppop job ownership tests by removing special code described in the previous item and by always doing a getpwbyuid() and no longer attempting numberic uid test for uid 0 (root) and the effective uid (ppr). * Simplified ppad in the same way. * Simplified the ppop --proxy-for code. An operator can now manipulate jobs sent by other proxies. The documentation was and remains silent on this point. * In response to the CERT advisory CA-2000-02, wrapped data from form POSTing and PPR queue listings, etc. in calls to html() in the following www/ scripts: show_jobs.cgi.perl, show_queues.cgi.perl, prn_properties.cgi.perl, grp_properties.cgi.perl, prn_addwiz.cgi.perl, grp_addwiz.cgi.perl, cgi_membership.pl, * Moved html() from www/cgi_intl.pl to cgi_data.pl, renamed www/cgi_data.pl:cgi_encode() to form_urlencoded() and added javascript_string() and html_value(). * Put "use 5.005;" at the top of many of the www/ scripts since there seem to be problems with 5.003 including inability to parse "foreach my $i ...". * Fixed www/grp_addwiz.cgi.perl to use "ppad group members" rather than "ppad group set" which was a earlier name for the subcommand. * Fixed ppad/ppad_util.c:print_switchset() so it doesn't leave a trailing space. * Added www/cgi_run:shell_parse() and changed prn_properties.cgi.perl and grp_properties.cgi.perl to use it to parse the switchset into words to pass to run(). * Fixed bugs in tool4fixup/fixup.sh which prevented it from making PPR's group and from recognizing when it had suceeded. * Fixed problems in fixup where it failed to do chown or chgrp or both on configuration files which it created. * Added "vendors/ppd_adobe/Tektronix Phaser 220i". * Added www/test_components.cgi.perl. * Fixed www/show_queues.js and show_jobs.js to work correctly in IE 5.0 even when the window has been scrolled down. * Added a few notes at the top of samba/smb-protos.conf. * Added misc/ppdoc.sh. * Renamed ttf2ps to ppr-ttf2ps and added it to the obsolete files removed by fixup. I did this because there are alredy too many ttf2ps programs out there. * Changed samba/Makefile to copy win95cp.bat into /var/spool/ppr/drivers/win95/. * Renamed printdesk/atchooser -> ppr-chooser and printdesk -> ppr-panel. * Fixed www/prn_properties.cgi.perl and grp_properties.cgi.perl to run ppr2samba when necessary. * Renamed pprd/pprd_nag.c:nag() to pprd/pprd_remind.c:ppad_remind(). Also fixed a bug in that function which caused a core dump if no printer queues had yet been created. Also added internationalization code to the function. * Problem: if pprd was not running, www/show_queues.cgi would die by a broken pipe signal. Solution: Changed ppop to print "*FATAL\t" rather than a (possibly translated) "Fatal: ", changed printdesk/PPRcontrol.pm to call croak() in various places if a line is read from ppop which begins with "*" but not with "*DONE". Result: failure message makes it to web browser and script close HTML document properly. * Added the temporary WWW interface password changing program www/ppr-passwd.sh. It uses the htdigest program from the Apache web server. * Added NULL as last argument to execl() in pprdrv/pprdrv_custom_hook.c: custom_hook_run(). * Fixed tools4fixup/make_conf.sh:findfile_test_basename_path_default() so if the program is not found it returns the default as it should. It was returning the search path. * Changed the job WWW interface job "Details" window in the following ways: changed the script name from job_properties.cgi to job_modify.cgi, changed the button which brings it up from "Details" to "Modify" (which, incidentaly, corresponds with "ppop modify"), added scrollbars, reduced the height from 700 to 600 pixels. (The "Ticket" tab is too high for 800x600 displays. More work is required to fix this.) * Changed the www/show_jobs.cgi.perl default refresh interval from 10 to 60 seconds. * Changed uprint.conf format by renaming section [to lp] -> [real lp] and [to lpr] -> [real lpr]. The old section names are still recognized. This change anticipates enhancements in a future version of PPR. These include printcap= and osf extensions= in [real lpr], and printers= and classes= in [real lp]. (Currently these settings are compiled in.) * Removed pprdrv/lw-messages.conf.sample which was installed as $CONFDIR/ lw-messages.conf.sample since it seemed to serve no real purpose. * Changed libppr/acl.c:user_acl_allows() to explicitly skip comment lines rather than simply relying on them not matching user names. * Changed pprd/pprd_nodeid.c:nodeid_to_name() to call error() and return "" for invalid node ids rather than calling fatal(). There is a bug somewhere that is resulting in nodeid_to_name() being called with appearently unitialized values for node ids. * Fixed AppleTalk library selection code in Configure. * Changed all sprintf() calls in libuprint/. * Enlarged the buffer space for such things as the responder email address in libuprint/. * Changed libuprint/uprint_lprm.c to send certain messages to stdout when a non-root user is denied permission to perform a root-only task (specifically, to delete the jobs of a named user). They were previously being posted with uprint_error_callback() which made the behavoir for ppr and lp inconsistent with lpr. * Fixed a bug in uprint-lprm: It would always perform "lprm -" as if root had invoked it! 1.40, 15 February 2000--23 February 2000 * Moved the makefile version setting for Makefile and the docs/ makefiles into include/version.mk. * Changed www/ppr-commentary-httpd.c and commentary_select.cgi.perl so that if no printer checkboxes are checked, then all printers are monitored. Also prepared the selection screen (but not the actually commentary screen) for internationalization and revised some of the text. * Updated misc/README.txt. * Restored the carriage returns at the end of the lines in samba/win95cp.bat. They had appearently been removed by the editor ted. In future I will have to remember to edit it only with vi or joe. Also renamed it to WIN95CP.BAT and added to old name to the obsolete files list in fixup. * Fixed www/prn_control.cgi.perl to demand authentication when required. The code had never been added. * Removed extra newline after status printing from "ppop status" output. * OSF fixes from Klaus Reimann. * Added additional message variants to pprdrv/lw-messages.conf, added new category "PrinterError: needs attention", added "needs attention" to libscript/speach_commentary.pl, did not add a sound file. 1.41a1, 23 February 2000--18 July 2000 * Fixed "forceaufssecurity" in papsrv/papsrv_conf.c. * Changed www/ppr-httpd.perl to undefine $ENV{ENV}. I don't know what this variable is for, but if it is defined, then Perl won't do an exec(), noting that the value is tainted. This problem showed up when I upgraded to Mandrake 7.0. Perhaps Inetd is defining it. * Removed a spurious trailing space from the name of "vendors/procset_apple/AppleDict md-71-0". * Merged the disparate changes to tools4make/setup_filters.sh and filters_misc/setup_filters.sh into the former. * Moved misc/ppdoc.sh to docs/ppdoc.sh. * Added a timeout to the reception of POST data in www/ppr-httpd.perl. Also added a wait() call so that CGI children don't become zombies. * Fixed pprd/pprd_load.c:initialize_queue() to handle queue names such as "myprn-2". I had previously fixed ppop to handle these. * Fixed "ppop purge" to handle queue names such as "myprn-2". * Changed the assertion check in ppr/ppr_outfile.c:get_next_id() to stop after 10000 failures rather than 1000 and to say "all job id numbers used" instead of "assertion failed". * Broke tools4fixup/fixup.sh up into numerous scripts all called by the new fixup.sh which is simply a wrapper. The scripts which the old fixup.sh called in this manner have been renamed with names starting with "fixup_". * Removed a spurious assertion check from pprdrv/pprdrv.c:copy_setup() which was triggered when printing files with unclosed resources in the setup section. Also added a warning to ppr/ppr_main.c:main() to point out such files. * Added progress bar code to www/prn_control.cgi.perl. * Added a 4th column to the "ppop progress" output to indicate the total number of pages. * Changed two lines in Configure which used NECHO to used EECHO instead since /usr/ucb/echo (which supports -n) is an optional package in Solaris 2.6 and they were appearently the only place where an echo that simply prints the "-n" does more than cosmetic harm. * Put a 10 minute timeout in the pprpopup responder. * Changed the description of the "tcpip" interface program in www/prn_addwiz.cgi.perl from "UPP (JetDirect Protocol)" to "AppSocket (JetDirect Protocol)". * filter_pcl/PCL.java: Corrected PCL ESC parser to handle combined commands correctly. Previously it got stuck in an endless loop. * Fixed www/df_img.cgi.perl to use red for used, green for available, and yellow for reserved. * Fixed www/Makefile so it doesn't install the *.fig files from www/q_icons/. * Moved misc/ppr-xgrant.c, misc/ppr-xfm.sh, and misc/pprpopupd.perl to the new directory unixuser/. * Added unixuser/login_ppr.sh and login_ppr.csh. * tools4fixup/fixup_links.sh: Added ppr-xgrant to the list of programs which get symbolic links in $BINDIR. * tools4fixup/fixup_links.sh: Added links into /etc/profile.d for RedHat Linux systems (and any others that have /etc/profile.d). * Reworded a few error messages in pprdrv/pprdrv_interface.c. * pprdrv/pprdrv_interface.c: fixed a problem with exiting commentators and custom hooks overwriting the interface exit information in static_wait_status, renamed static_wait_status to interface_wait_status. * samba/smb-protos.conf.sample: changed "printer driver location = \\%h\pprwin95" to "printer driver location = \\%L\pprwin95". Before I made this change, automatic Win95 driver installation was broken if the NetBIOS and DNS host names were not the same. * Changed samba/smb-protos.conf.sample to smb-protos.conf and arranged for it to be installed in $HOMEDIR/lib instead of $CONFDIR. * www/ppr-httpd.perl: added code to examine Linux's /proc/net/tcp to determine the username for the connexion if the connexion is from 127.0.0.1. This allows browsers which don't support Digest authentication to work if they are running on the same machine as the PPR web server. (This was inspired by Jeremy Monin's Authlocal .) This only works on Linux with /proc mounted. * www/show_jobs.cgi.perl: fixed redirect code (adding www/cgi_redirect.pl) so that the [Modify] button works with non-Javascript browsers. * www/ppr-httpd.perl: fixed so a "Content-Type:" line is not required if a CGI script sends a "Location:" header. * Added tools4fixup/fixup_cron.sh. It will need more work before it is portable. * www/show_log.cgi.perl, show_printlog.cgi.perl: Added code to emit a "Last-Modified:" header with the mtime of the log file and an "Expires:" header 60 seconds into the future. * www/cgi_time.pl: renamed format_time() to cgi_time_format() and added cgi_time_parse(). * Added libscript/MD5pp.pm. This was obtained from It appears to be freeware, but I am still attempting to determine the exact license terms. * www/ppr-httpd.perl: added support for "If-Modified-Since:" on GET and POST, added "Range:" and "If-Range:" support for GET on files. Added support for MD5pp.pm. * ppad/ppad.c: renamed privledged() to privileged() and added code to make result true if UID == EUID even if the ACL didn't contain the username. This fixes "make install" for non-root users. * www/show_queues_nojs.cgi.perl: Added "Expires:" header with date 1 day in the future and "Last-Modified:" header with the script's revision date. * www/commentary_speach.cgi.perl: Added "Expires:" header with date 1 day in the future. * Added www/.htaccess to help the Apache server create directory listings for browsing the PPR source code. * libppr/myalloc.c: added myrestrdup(). * Added libppr/ppr_sscanf.c:ppr_sscanf_checkpoint() and ppr_sscanf_rollback(). * Fixed pprd/pprd_printer.c:look_for_work(). The test of the start_printer() return value was broken which probably resulted in unnecessary calls to start_printer() after the printer was started. * Added remote printing transmission hooks to pprd. This included rewriting the code that load old jobs at pprd startup and the code that processes the "j" command from ppr. It was also necessary to insert some checks to prevent attempts to print locally jobs destined for remote queues. Major code cleanup in pprd involving renaming numberous functions, moving code to other modules, etc. The module pprd_ppop.c (formerly pprd_ppopint.c) was greatly simplified. * po/extract_to_pot.sh: Updated it to extract strings from all directories which have internationalized messages. About a third of PPR.pot was missing because directories with internationalized programs were being excluded. * Incorporated the latest French messages from Olivier Tharan . * Added tools4make/installdata.sh and installprogs.sh. Decided to phase out installbin.sh and installscript.sh. * Made a few adjustments in the www interface to deal with Netscape's bug wherby it submits the value of the first submit button when the submit() method is called on a form. The solution employed in www/show_job.cgi.perl is to use Javascript to change the value of the "Settings" button to "Refresh" before calling submit(). For www/prn_control.cgi.perl it was to use document.location.reload() instead of document.form[0].submit(). * Added the "ppop destination-comment-address" command and added "ppop destination-comment as an alternative to "ppop ldest". * Replaced printdesk/PPRcontrol.pm:list_destinations() with a new list_destinations() and list_destinations_comments() and list_destinations_comments_addresses(). * www/show_queues.cgi.perl: added "Many Details" option, added font style elements to style sheet, added display of number of jobs in queues with jobs, added automatic submit whenever the refresh interval or the "View" is changed, added CGI variable "borders=1" to force borders on (for testing purposes). * Fixed a bug in libscript/speach_response.pl which made the messages for printer and group incapable not play correctly. * Added www/responder_speach.cgi.perl and www/test-audio-responder.html and renamed test-audio.html to test-audio-commentary.html. * pprdrv/pprdrv_ppd.c: added give_reason() calls for when a feature section runs off the end of the file. * www/Makefile: broke "make install" up into pieces such as "make install-progs" and "make install-images" because "make install" had gotten to take too long to run. (This change helps during development, "make install" still does what it always did.) * Added editps/ADOBEPS4.DRV_Version_4.24 and cooresponding entry in editps/editps.conf. * Added www/job_log.cgi.perl and added "mtime: x" to "ppop -M log" output. * libuprint/uprint_print.c: added current date and time to the logged information. * pprd/pprd_respond.c: increased the maximum length of the title and For strings passed to the responder. * Added www/rfc/. * Added RESP_CANCELED_ACL to include/respond.h and ppr/ppr_respond.c. * Added ACL hooks in ppr and "ppop acls" and "ppop group acls". There will be no separate ACLs for aliases, they will use the ACLs of whatever printer or group they point to. To submit to a group one need only pass the ACLs of the group, the ACLs of the member printers are irelevant. * Changed the "ppop dest" output to change the column heading "Protected" to "Charge". * Changed RESP_CANCELED_NOTAUTH to RESP_CANCELED_NOCHARGEACCT and PPREXIT_NOTAUTH to PPREXIT_NOCHARGEACCT and added PPREXIT_ACL and RESP_CANCELED_ACL. * Changed libscript/speach_response.pl to accord with changes above. This requires some new audio files. * ppop/ppop.c:parse_job_name(): added code to recognized "*" as an explicit wildcard queue id. The creates a way to list the jobs in queues with names like "busprn-2". At the some time, the default job subid was changed to wildcard. I don't know if this was the correct thing to do, but it sounds right. * www/cgi_wizard.pl:do_wizard(): Moved 2nd and 3rd parameters to 2nd parameter has keys, renamed internal CGI variables to begin with "wiz_", eliminated call to cgi_data_read() (the caller must do it now before calling do_wizard().) * www/cgi_data.pl: added undef_to_empty(). * Added README.txt, updated INSTALL.txt and PORTING.txt. * Changed tools4fixup/init_ppr.sh to run uprint-newconf. * Internationalized uprint-newconf. * fontutils/ppr-fontindex.c: Added recursive searching. Modified tools4fixup/fixup_conf.sh accordingly. * Renamed tools4make to makeprogs and tools4fixup to fixup. * Renamed $HOMEDIR/install to $HOMEDIR/fixup to better express its purpose. * Changed the top level Makefile to use SUBDIRS=. This makes it much shorter and easier to maintain. * Removed $HOMEDIR/lib/paths.sh since it was never used. * Moved misc/ppr-clean.perl into init_and_cron/ and added deletion of alert logs after 7 days. * Moved fixup/init_ppr.sh into init_and_cron/. * Created cron_daily.sh and cron_hourly.sh in init_and_cron/. * Moved global.mk and global.mk.unconfigured from include/ to makeprogs/. * Added makeprogs/installcp.sh * Removed makeprogs/installscript.sh and installbin.sh. Also removed their variables from the global.mk generated by ./Configure. Also removed CP=. * Moved squeeze.c from procsets/ to makeprogs/ and added --squeeze option to installcp.sh. * Fixed unixuser/ppr-xgrant.c to abort if it is run with XAUTHORITY set to point to a file which is not owned by the user who ran ppr-xgrant. If run as a result of a "su -", the xauth run under the user's id would block for about 10 seconds before reporting that it had failed to lock the Xauthority file. * www/cgi_wizard.pl, cgi_tabbed.pl: changed "exit 0" to "return" in several places. This allows cleanup after the function returns. This is not needed in PPR but it is needed in other applications of these library routines. * Fixed install to create $SHAREDIR/locale even if the po files are not installed. Because this was not done, the WWW interface didn't work if internationalization was not enabled when running ./Configure. * Fixed lprsrv/lprsrv_conf.c functions be be case-insensitive when comparing host names. 1.41b1, 18 July 2000--15 September 2000 * Fixed bug in makeprogs/installcp.sh (changed "==" to "=" in first if). * Changed www/cgi_tabbed.pl to put "tab_" in front of all its internal CGI variables. * Fixed libuprint/uprint_conf.c to ignore comments even if they don't start in column 1. * Adjusted a few libuprint and interface/lpr.c error messages for greater clarity. * Fixed fixup/fixup_links.sh so that it will do "exit 1" if "ln -s" fails. * Fixed the serial and parallel interface programs so that they abort if an attempt is made to run them with a codes setting of "Binary". This is better than waiting for trouble to strike. Of course, there is no guarantee that it won't, but at least papsrv won't encourage Macintosh clients to use control codes in their data. * Fixed samba/ppr2samba.c so that it looks for smb-protos.conf in $HOMEDIR/lib rather than $CONFDIR. * Added ATALKFLAGS= to the global.mk generated by Configure. Made changes in interfaces/Makefile and papsrv/Makefile to use it. When complete, these changes will allow PPR to compile against an AppleTalk library which isn't in the normal include file search path. * Fixed interfaces/Makefile and papsrv/Makefile to use $(LD) and $(LDFLAGS). This bug was showing up on FreeBSD because FreeBSD doesn't have /usr/local/lib in GCC's default library search path. * Fixed vendors/Makefile so that it installs the fonts. This must have been forgotton during the re-organization. * libppr/fname_sprintf.c:fname_sprintf(): Enhanced error messages. * ppr/ppr_editps.c: removed spurious extra argument in printf(). * fixup/fixup_accounts.sh: Added user and group add code. (Provided by Espen H. Koht .) * Configure: re-wrote AppleTalk library search. It no longer asks the user but simply chooses NATALI/Netatalk in preference to CAP and CAP in preference to ALI. * Added "vendors/ppd_hp/HP DeskJet 2500CM" submitted by Larry Hunter . * filters_misc/editps.conf: Added documentation. * Made some fixes (mainly adding explicit casts) so that the code can once-again be compiled with g++. This test was done with GCC 2.95.2. It is a pity that the binaries are about twice as big when compiled as C++. * filter_lp/filter_lp.c: Fixed the minimum columns enforcement code and re-worded and fixed some of the noisy=yet code. * www/prn_addwiz.cgi.perl: Changed order of questions so that the printer queue isn't assigned a name until after the user has browsed for it. Also added code to guess at a suitable name from address. * www/cgi_wizard.pl: Changed the default alt text generating code to use the basename of the image file with the extension removed rather than the whole image path and filename. * Removed copyright screen and yes/no prompt from fixup. I can't remember why it was there. The operations it performs aren't really dangerous. * Removed the setgid bit from the texinfo filter. Supposedly this was done a long time ago. * fixup/fixup_filters.sh: General cleanup, removed prompts to select one of several possible filter programs. Instead it just picks the one which in my experience (David Chappell's) produces the best results. I may be back later and add override switches. * fixup/fixup_inetd.sh: Added code to handle absence of tcpd and System V Inetd. * Moved code and documents under licenses other than the PPR license to the nonppr/ directory. Left symbolic links to these files at their proper locations. * Changed defauld HOMEDIR to /usr/lib/ppr and default SHAREDIR to /usr/share/ppr. This should bring PPR into compliance with the FHS. * Moved ppad/init_media_db.sh and some of ppad/Makefile into fixup/fixup_media.sh. * Created an RPM spec file. Components: ppr-1.41b1.spec, makeprogs/global.mk.4rpm. * ppr/ppr_editps.c: disabled the editps level argument for an editps script since it confuses sed. It isn't used, so it will remain disabled until a solution is found. * www/prn_addwiz.cgi: Added a function for code to guess at suitable printer comment based upon the interface, printer address, and PPD file name. Currently it only contains code for AppleTalk. 1.41b2, 15 September 2000--18 December 2000 * www/cgi_error.pl:error_doc(): added optional charset and content_language parameters. * fixup/fixup_accounts.sh: fixed bug which prevented creation of the account pprwww. * include/global_defines.h: fixed definition of EDITPSCONF to look for it in $HOMEDIR rather than in $SHAREDIR. * Makefile: changed the name of the source archive from ppr-src-x.xx.tar.gz to ppr-x.xx.tar.gz. This was done so that it will conform to the file naming conventions suggested for uploads to ibiblio.org (formerly sunsite). * Changed the "ppop progress" output to include the jobid, for, bytes sent, and total bytes. * www/prn_control.cgi.perl: added total bytes, bytes sent, and user to things displayed. * www/prn_control.cgi.perl, show_jobs.cgi.perl: Added controls= CGI variable to turn of the buttons and other controls. This will be used for a strictly informative queue display next to some public lab printers. * printdesk/PPRcontrol.pm: fixed lots of regular expressions which tested ppop output to be anchored to the start of the string. * fixup/fixup_obsolete.sh: added code to deal with the move of /usr/ppr to /usr/lib/ppr and /usr/share/ppr. The old one is moved to /usr/ppr_old and a new /usr/ppr is created with symbolic links to the new locations. Also added error checking to halt the script if one of the commands fails. * fixup/fixup_cron.sh: Changed it to overwrite ppr's old crontab. * pprdrv: fixed some typos and other small errors which was preventing .TTF font downloading from working. * Moved printdesk/PPRcontrol.pm to libscript/PPOP.pm and moved its place in the Perl heirarcy from PrintDesk::PPRcontrol to PPR::PPOP. * Added code in /makeprogs/ to generate PPR.pm which will eventually replace paths.ph. * misc/custom_hook_docutech.perl: Added code to print the special Xerox header. * fixup/fixup_inetd.sh: Changed so that the new inetd.conf lines are inserted commented out. For now we will leave it up to the system administrator to decide if these services should run. * www/README.txt: brought up-to-date. * www/ppr-httpd.perl: Fixed timeouts according the example in the perlfunct man page's alarm() description. * Added editps/Qt_2.2.0. * Added new directory docbrowse/ and added it to the top level makefile. This directory contains an early version of a WWW interface for viewing the man pages and other documentation installed on a computer. It includes CGI scripts which use rpm to find the documentation files. * Ran tests in tests/ and accepted a new warning about missing "%%Trailer:" comments and another failure due to a change in the location of the mfmodes.conf file. * Fixed "ppop details" which was core dumping if the job's filter chain list was empty (which was represented by a null pointer). * Fixed a bug in pprd/pprd_printer.c:printer_look_for_work() which caused pprd to chew up loads of CPU time and keep a printer idle if it got a job that could never be printed on a certain printer due to failure to meet some requirement. The problem was that printer_look_for_work() was calling pprdrv_start() when it should have been calling printer_start(). * Added FUNCTION4DEBUG() to include/pprd.h and used it to eliminate the warnings from pprd. * Fixed several bugs in the PPR daily and hourly cron jobs. * Added note to misc/remove_ppr.sh saying that it is not up-to-date and may be removed at some future date. * Added a "%preun" section to the ppr-1.41b2.spec file (for RPM packaging). * Fixed fixup/fixup_perms.sh to create /etc/ppr/htpasswd if it doesn't exist. * Fixed fixup/fixup_filters.sh to send the progress of the search for filter programs to stdout rather than stderr. * fixup/fixup_accounts.sh: added -M option to useradd command (for Linux). This suppresses the copying of skeleton files into the home directory. * fixup/fixup_conf.sh: removed code to copy ppr.conf.sample to ppr.conf since there is already code in fixup/fixup_samples.sh to do this. * fixed/fixup_conf.sh: fixed it to send its progress output to stdout instead of stderr. This allows the RPM package to throw this output away. * Added description of each top-level source code directory to README.txt. * www/ppr-httpd.perl: Added commented-out code for anonymous access. Incredibly some users considered the lack of authentication code in the alpha version to be a feature! * ppop/ppop.c:job_permission_check(): changed code to disallow operation if it fails to open the queue file. Also fixed the code which constructed the queue file name so that it uses 0 if the subid is the wildcard subid. * libppr/jobid.c: changed remote_jobid() and local_jobid() to not print the job subid unless it is greater than 0. Previously they printed it if it was not 0. That meant that they printed the wildcard subid (-1). * pprdrv/pprdrv_buf.c: changed WRITE_BUF from 4096 to 32768. * libppr_int/int_copy.c: changed BUFFER_SIZE from 5120 to 32768. * pprd/pprd_queue.c:queue_new_job(): fixed an error in testing the return code of destid_assign(). Because it wasn't interpreted properly, submitting a job to a non-existent queue would cause a crash. * pprd/pprd_queue.c:queue_unlink_job_2(): changed sprintf() to fname_sprintf(). * pprdrv: adding fields for postscript_size and total_bytes_sent to the printlog. * www/show_printlog.cgi.perl: added support for new printlog fields. * Changed pprdrv and the interfaces to set the file descriptors which are written to to non-blocking mode. I hope this is the right thing to do. Somehow I was getting away with not doing it, but this may be because the pprdrv buffer size was set to 4096 (which just happens to be the Linux pipe size). * Removed "ppad pageslimit" and replaced it with "ppad limitpages" and "ppad limitkilobytes". Made the changes to pprdrv to support these settings. * commentary/audio.perl: fixed it to recognize the "level=" option (as documented) rather than "severity_threshold=" (which wasn't). * Changed pprd, pprdrv, and ppop to support a status of "stranded". A stranded job can't be printed because there is no suitable printer available. Previously such jobs were "arrested". * Fixed init_and_cron/cron_hourly.sh. It contained a syntax error. * commentators/xwin.sh: removed spurious "\n" from the end of the string echoed to xmessage. Also changed /bin/echo to echo. * pprd/pprd_ppop.c:ppop_dispatch(): fixed the code that deletes the reply file is ppop is no longer there to receive the signal. * Added libppr/mkstemp.c:mktemp() and changed C code to use it (except for pprd/pprd_ppop.c which uses its own code. * Added libscript/mkstemp.c. * Added include/cexcept.h (and files in nonppr/). * Started to split libppr into libppr and libgu (generally useful). The libgu functions will be renamed with names starting with "gu_". * pprdrv/pprdrv_flag.c: fixed call to pslinef() when printing the user name. It was passing the reversed user name as the only argument. Added "%s" as a previous argument. It was choking on "user names" with "%" in them. * papsrv/papsrv_ppd_parse.l: fixed "*LanguageLevel:" parsing. This should make scanned Acrobat documents print much faster. * Fixed pprd so that canceling a job that is being seized no longer crashes the spooler. * Fixed bug in pprd which caused it to decrement the node reference counts in the queue reload code if a job was held. This resulted in the spooler crashing if the job was ever released and printed (or probably if it was canceled). * Cleaned up the code to handle pprdrv exits. This should remove some more rare bugs. It was impossible for me to verify that the old code was correct. * Expanded the auxiliary information reported by "ppop status" to allow for an arbitrary number of lines. This required changes to pprd, pprdrv, and ppop. Later changes to the WWW interface will be required to display this additional information. * Added an "Operation:" line as one of the possible lines reported by "ppop status". This line tells what pprdrv is doing. * Separated the LaserWriter-style status line from the PJL status line so that both may be displayed if available. * Separated the "Job on Printer:" ppop status line from the "Status:" line. Also added code to weed out "Job on Printer:" lines which simply reflect the job pprdrv is printing. * Changed "ppop status" to report the retry number and countdown for the "otherwise engaged or off-line" state. * Added pprdrv feedback code to detect "%%[ PPR connecting ]%%" and "%%[ PPR connected ]%%" so that interfaces that can take a long time to connect can send information about progress to pprdrv for display on the "ppop status" "Operation:" line. Added statements to print these lines to the tcpip, atalk, and lpr interfaces. * Added "ppad userparams" and support in pprdrv for JobTimeout, WaitTimeout, ManualfeedTimeout, and DoErrorPage. * Added code to "ppop status" to convert the auxiliary status information from an internal machine-readable format to an internationalizable display format. * Added "ppad pagetimelimit" and all of the required support in pprdrv and "ppop status". * Removed old implementation or describe_postscript_error() from pprdrv/pprdrv_reason.c. * samba/ppr2samba.c: added "ppr2samba-prototype:" line as a step toward phasing out the second argument to the "ppr2samba:" line. * www/prn_properties.cgi.perl: moved code to print HTML code for labeled entry widgets into functions, implemented the "Samba" tab, added pagetimeout to the "Other" tab, added "Userparams" and "Limits" tabs. * Added libscript/readppd.pl. * www/prn_properties.cgi.perl: Added working "Bins" and "Features" tabs. * Added ppdopts to the "ppop -M show" output. Added "ppop bins set". Changed the order of "ppop show" output. * Added documentation to pprdrv/pserrors.conf. * Added "ppad grayok" and "ppad bins set". * Ported the "Samba" tab code from www/prn_properties.cgi.perl to grp_properties.cgi.perl and fixed the "ppad group addon" command so that it works. 1.41, 21 December 2000--8 January 2001 * libuprint/uprint-newconf.c: Added --remove option (which is used by the RPM package). * Moved puts_tabbed() from ppop/ppop_cmds_listq.c to ppop.c and fixed "ppop status" so that it won't print tabs in the fields of the auxiliary status output when running in machine readable mode. This was a bug because an HP 5Si was returning a tab in what it claimed was the LCD message. The result was that the PJL status was being truncated in the WWW interface. * www/prn_properties.cgi.perl: fixed foreach to work with Perl 5.005 (appearently Perl 5.6 allows "foreach my $i qw(x y z)" but Perl 5.005 doesn't. * docbrowse/docs_util.pl: fixed errors in calls to error_doc(). * fixup/fixup_inetd.sh: fixed bug which caused it to use "/usr/sbin/tcpd" for the path to the TCP Wrappers program even if it was found elsewhere. * ppr/ppr_main.c:write_queue_file(): added code to unlink() the queue file if fclose() fails. * fixup/fixup_accounts.sh: split useradd clause into one for Linux (with -M) and for other systems (without -M). * www/prn_show_queues.cgi.perl: fixed code to deal with the new multiple auxiliary messages. This included adding two new printer icon variants for "printing but off-line" and "printing but error". (Note that with other factors such as "charge" and "rejecting", more than two new icon files were created.) * Moved most of the HTML files for the WWW GUI from $SHAREDIR/www to $SHAREDIR/www/gui. * Moved docbrowse/ into www/. * Added www/login_cookie.cgi.perl, its HTML files, and code in ppr-httpd.perl to accept this kind of authentication. Added a link to it to show_queues.cgi.perl. * www/q_icons/make_composite_figs.perl: In Linux Mandrake 7.2, ImageMagick's montage command (which never did it perfectly) really messes up the icons. So, it was replaced with a pipeline using ImageMagick's convert followed by pnmflip, pnmcut, and pnmtopng. This produces the highest quality icons so far. * Fixed "ppad addon" and "ppad group addon" so that setting an addon value to an empty string deletes the value. * Fixed "ppad group show" to display addon values. * libppr/jobid.c: fixed logic in local_jobid() which decided when to print the subid. * papsrv/papsrv_authorized.c:preauthorize(): fixed code so that it won't case an empty paramter to be fed to "ppr -f". Instead it now uses "[blank Macintosh owner]". * www/cgi_auth.pl: replaced the terse notice "Your web browser should send authentication." with a much longer one that suggests ways to work around a lack of MD5 Digest authentication. * Fixed "ppop -M dest" output to turn off translation. * Integrated latest French translation files from Olivier Tharan. * Fixed www/prn_addwiz.cgi.perl to search for getzones. * Fixed code in ppr-1.41.spec remove code which wasn't removing the standard ACL files. (It was supposed to remove them if they were still empty.) * Removed from fixup/fixup_perms.sh the defective code which created an empty $CONFDIR/htpasswd. It is not needed since ppr-passwd does it if necessary. * Fixed www/prn_addwiz.cgi.perl to once again sort AppleTalk printer names. * Fixed bug in cgi_data.pl read_cgi_data() which had broken handling of multiple values with one name. * Fixed "ppop lpq" to work again with the extended auxiliary status. * pprdrv/pserrors.conf: changed "Job timeout expired" to "PostScript timeout expired" since "JobTimeout" is an official timeout name in PostScript and refers to a specific timeout whereas the error "timeout" means any timeout. 1.42, 5 January 2001--30 January 2001 * Added include/ppr_query.h and libppr/query.c. * fixup/fixup_init.sh: fixed code to look for /etc/rc.d/init.d before /etc/init.d so that it would not mistake Mandrake Linux for a generic System V release 4.0 system. The result of this bug was that it was setting up PPR to start only at run level 2. * www/ppr-httpd.perl: added missing test to see if MD5 Digest authentication had succeeded before trying Cookie authentication. * www/show_queues.cgi.perl: removed test which decides whether or not not display the "Cookie Login" button. IE 5.5 no longer puts "DigExt" in its User-Agent string. * www/cgi_run.pl: fixed shell_parse() to handle things like "--responder-options='printed=no'" properly. * www/login_cookie.cgi.perl: removed spurious "defer" attribute from the script tag that loaded the MD5 code. This caused a problem in IE 5.5 since the function is executed as soon as the page finishes loading. * Fixed "ppop modify" so it will use a subid of 0 if none is specified. (A change in a library function caused it to use -1.) * Added "vendors/ppd_adobe/ColorPASS-Z76 Color Server". * pprd/pprd_destid.c:destid_printer_bit(): fixed it to return a correct result even if the destid is a printer. Previously it caused a crash. Also improved error checking throughout the whole module. * www/prn_control.cgi.perl: Suppressed display of page progress bar if number of pages is zero. Failure to do this would result in a division by zero error. * www/prn_control.cgi.perl: Fixed handling of "job: " lines in the "ppop status" output. Now it is only used as the current job name if we aren't printing a job. * pprdrv/pprdrv_custom_hook.c: Fixed to remove line length limit on the lines from the custom program. * added libscript/acl.pl. * Fixed www/show_queues.cgi.perl and job_modify.cgi.perl so that they will run ppop with "-u" rather than "--proxy-for" if the user is in /etc/ppr/ppop.allow even if he is not in /etc/passwd. * Fixed "ppop modify" so it checks permission before modifying a job. The call to the check function was missing. * www/job_modify.cgi.perl: changed cgi_data_peek() to cgi_data_move() for the job title. * www/show_queues.js: widened the "Delete Queue" window from 450 to 600 pixels. * www/delete_queue.cgi.perl: broke the internationalizable messages up into separate messages for printers, groups, and aliases. * libscript/PPOP.pm: added media() and mount(). * Deleted blank line between printers in "ppop -M media" output. * pprd/pprd_media.c: changed so that bins on which nothing is mounted return an empty medium name in "ppop media" output rather than "". * Changed "ppop mount" and pprd so that "" can be mounted to indicate that a bin contains no paper. * Added www/prn_media.cgi.perl and tied it into prn_control.cgi.perl. * Renamed ppr-commentary-httpd to ppr-push-httpd. * www/ppr-httpd: added ability to defer to ppr-push-httpd. * Ceased to install ppr-push-httpd on its own port. * Ceased to install the popup message receiver because it will soon be replaced by a CGI script run from ppr-httpd. * www/prn_addwiz.cgi.perl: fixed it so that if the tcpip interface is choosen and the hostname doesn't contain a dot, the ":9100" (or whatever port number will still be excluded from the suggested queue name. * www/README.txt: made security warnings less scary, removed information about Apache and the commentary server. The commentary server has become the push server and is now called directly from the main PPR web server. The Apache instructions don't account for the push server and so are best left out for now. * www/index.html: divided the list of links into "Applications" and "Documentation". Made the printer control panel open its own window. * www/show_queues.cgi.perl: made the button always say "Close" and added an onclick event handler to close it. 1.43, 1 February 2001--28 March 2001 * added libgu/gu_snmp.c. * Added int_snmp_status() to libppr_int/int_con_tcpip.c. * libppr/datestamp.c:datestamp(): fixed to return "" rather than a NULL pointer if it fails. * Applied some fixes for UWIN (which still doesn't work). * pprdrv/pprdrv_buf.c: reduced BUGSIZE from 32768 to 8192 since the larger value was much bigger than any pipe I know of. * Fixed responders/xwin.sh, filters_misc/dvi.sh, filters_misc/pdf_xpdf.sh, and filters_misc/pr.sh to use PPR's mkstemp. * Fixed filters_misc/make_dvips_conf.c to get the default page size from /etc/ppr/ppr.conf. Something should probably still be done to make it adapt to page-size changes. * Changed makefiles to make more extensive use of rules, $@ and to use OBJSx= as temporary storage for the targets lists. This tends to shorten and simply the makefiles. Also, added dividers and a standard section order. Not all makefiles have yet been updated. * Copied procsets/Trincoll-dmm-nup-3-5 to Trincoll-dmm-nup-3-6 and changed pprdrv/pprdrv_nup.c to use the new one. Re-wrote much of it so that DMM-nup-dict can be read-only. The state which was formerly stored in it is stored in DMM-nup-state. Also fixed setpapertray, lettertray, letter, and so forth to call the original ones if N-Up is not activated. * misc/ppr-sync.sh: fixed to obey $HOMEDIR and $TEMPDIR and to use our mkstemp. * Added code to ppr-1.43.spec to simply print a message if the killall of Inetd failes. (This is to prevent a scary message from rpm which suggests that the install failed.) * misc/ppr-sync.sh: added code to use ssh and scp instead of rsh and rcp if the directory ".ssh" exists in $HOMEDIR. * Added "status/reason" to "ppop qquery" and changed "copies" so it returns an empty field if the number copies is unknown (previously it returned "1?"). * Fixed the qquery() method in libscript/PPOP.pm so that it doesn't delete empty fields at the end. * Expaned the buffer size for libppr/ppr_gcmd.c:ppr_get_command() from 256 to 1024 characters. * Upped the number of words that ppop can take on a line in interactive mode from 16 to 64. * fixup/fixup_perms.sh: added chmod to make $VAR_SPOOL_PPR/dvips group- writable. * Fixed "ppad ppdopts" so that it will work in interactive mode again. * Fixed ppad/ppad_utils.c:list_to_string() so that it doesn't garble the first item. * Fixed www/show_queues_nojs.cgi.perl. It wasn't correctly passing the printer or queue name. * Fixed "ppad options" so that it will join multiple argv[] items to make the options list and so it will print a warning if someone clears the options by setting them to "none" (an obsolete feature). * Added tests/test-ppad/. * Fixed www/show_queues.js to mostly work with Mozilla. * Changed the WWW interface tabbed widget, list jobs, and job modify and their style-sheets to take up less space and look better in IE 5.5 and Mozilla 0.7. * Renamed ppr_strsep() to gu_strsep() and ppr_strsep_quoted() to gu_strsep_quoted(). * Fixed ppop and ppad so that they can handle quoted strings in interactive mode. 1.44b1, 28 March 2001--7 May 2001 * Added pprdrv/pprdrv_pjl_messages.c and pprdrv/pjl-messages.conf. * Fixed ppr --commentator-address and --commentator-options. (They were doing --commentator!) * Moved pprd's queue file name parsing code into libppr/parse_qfname.c so that pprdrv can use it too. * Added code to pprdrv to call parse_qfname.c and to use the result when printing the job id on the flag pages. * Added a 9th argument to commentators. This ninth argument is a "canned message" which they can use instead of constructing their own. * Cleaned up the xwin commentator and added code to recognize the serverity= option (with a default value of 3). * Reversed the two raw arguments for commentator stall messages. Now the operation name comes first and the time in minutes comes second. * Removed misc/make_bindist.sh and gather_stats.perl. * Changed misc/Makefile to install misc/xmessage.tcl as $HOMEDIR/lib/xmessage. * Fixed commentators/xwin.sh and responders/xwin.sh so that they try wish (with the above mentioned xmessge script) and rxvt before xterm if xmessage isn't found. * interfaces:gs_master.sh: removed -sFONTPATH option since we no longer store fonts in $SHAREDIR/cache/font. * www/*.css: replaced "font-family: serif" with "font-family: times,serif" due to a bug in IE 5.5 prior to SP1. This bug causes it to display rectangles for the characters of the "serif" font. * www/commentary_select.cgi.perl: removed checkboxes for status and errors without updates. (The concept of updates is being dropt.) * Removed all references to the concepts of status updates and mundane exit codes as separate types of commentary events. * Changed the WWW commentatary monitor to use a hidden frame or an Active X instance of the Windows Media Player to play the messages instead of a 100x100 pixel window. * libgu/snprintf.c: commented out code which tried to pull short ints from the "..." arguments. This isn't possible because they get upgraded. * pprdrv/lw-messages.conf, libscript/speach_commentary.pl: adjusted messages for greater consistence and removed support for speaking obscure messages from the QMS-PS 800 II. * Moved the stuff in libppr_int/ into libppr/. In the process I discovered that libppr_int/throw.c wasn't even being compiled. It is now in interfaces/. * pprdrv/pprdrv_lw_messages.c: removed support for $CONFDIR/lw-messages.conf (including appending new messages to it). * Changed MAILPATH to SENDMAIL_PATH and eliminated MAILX. * Configure: applied fix from Tim Leamey for HP-UX 10.2. * pprd/ppop: applied patch from Tim Leamey to add "ppop last" to move a job to the tail of the queue. * www/login_cookie.cgi.perl, docs_*.cgi.perl: added -T to the Perl invocation at the top and fixed the problems thus exposed. * Changed sprintf() to snprintf() or ppr_fnamef() in numberous places. * Made big changes to the new SNMP printer status system. The codes are now converted to strings in pprdrv and pprdrv now keeps track of how long a particular fault has been present and arranges for it to be announced every 5 minutes. * fixup/fixup_inetd.sh: added code to generate an Xinetd configuration file instead of editing the Inetd configuration file. * www/cgi_run.pl:opencmd(),run(): changed them to only clear the path if the program name starts with a slash. This will allow scripts that depend on a cleaned PATH to work without breaking old ones. * Added "snmp_status_interval=" to the tcpip interface. * ppop/ppop_cmds_other.c: Changed "ppop status" to show the duration of the fault condtion if it is longer than 2 minutes and to show how old the news is if it is older than 5 minutes. * pprdrv: revamped pprdrv_pjl_message.c and added code so that PJL codes are matched up with SNMP PrinterDetectedErrorState bits so that they can serve the explain condition reported by SNMP. * Added pprdrv/pprdrv_snmp.c. * Changed lw-messages.conf format and integrated pprdrv_lw_messages.c with the SNMP status system in the same was as pprdrv_pjl_message.c. * Added a field to printlog. It is the job title if available, if not available, the job filename, blank if neither is available. (Feature suggested by Espen H. Koht.) * responders/write: replaced use of $EECHO with a here document. * commentators/: added write.sh and mail.sh, added parsing of "severity=" to all responders that didn't have it. * commentators/audio.perl, responders/audio.perl: added "-w" to "#! /usr/bin/perl". * Moved the COM_* defines out of include/global_defines.h and into include/commentary.h and added code to generate and install commentary.sh and commentary.ph to libscript/Makefile. * libscript/speach_commentary.pl: changed to use commentary.ph. * pprdrv/pprdrv_writemon.c:online_online(): fixed bug which would cause the page clock value to be the current time in seconds since the Unix Epoc (instead of 0) if the initial reported state of the printer was off-line. * libgu/gu_sscanf.c: added %t to read time_t. * www/test_components.cgi.perl: removed test for the Perl MD5 module since the code to use it is commented out and we will eventually use the Digest::MD5 module from Perl 5.6. * www/prn_control.cgi.perl: adjustments for changes in the way "ppop -M status" labels the LaserWriter status. More changes will be needed later to display the new status information. * pprdrv/pprdrv_feedback.c: Added code to bail out if a 50xxx PJL code is received. This seems to be necessary because the HP 5Si sometimes loses track of the job after throwing error 50028. * Added --verbose to ppop to limit the information displayed by "ppop status". Currently it hides the raw status information (from LaserWriter messages, PJL, and SNMP). * ppop/ppop_cmds.qquery.c: Added pagesxcopies to "ppop qquery" and changed the string for unknown number of pages, copies, etc. from "???" to "?". * www/show_jobs.cgi.perl: Made pagesxcopies a default column instead of the pages and copies columns. * www/show_jobs.cgi.perl, qquery_xlate.pl: changed the "Settings" window so that it displays long descriptions of the columns. 1.44b2, 8 May 2001--5 June 2001 * Makefile: changed "make realclean" to "make distclean". Added "make veryclean" to remove the generated documentation files as well. * Added libgu/gu_nonblock.c:gu_nonblock() and changed all code that called fcntl() directly. This included interfaces/atalk_ali.c,atalk_cap.c, and libppr/int_copy_job.c. * Fixed papsrv/papsrv_ali.c to use gu_set_cloexec() rather than calling fcntl() (which is was doing in the old fashioned way, setting the flags to 1.) * Added pprdrv/pprdrv_rip.c and hooked it into pprdrv. * Added display of RIP information to "ppad show". * pprdrv/pprdrv_interface.c: changed code so that control-d's aren't sent for non-PostScript jobs even if the jobbreak method is "control-d". * Fixed pprd and pprdrv to set the close-on-exec flag on more file descriptors. * libppr/int_copy_job.c: Fixed a problems which caused control-T's to be schedualed when there was still data in the transmit buffer. (An assertion check caught this.) * Added libgu/gu_fscanf.c, an very limited implementation of fscanf() that can only understands %d, literals, and whitespace, and changed ppr/ppr_outfile.c and ppop/*.c to use it. (This was done because dietlibc doesn't provide an fscanf().) * pprd/pprd_pprdrv.c:pprdrv_exit(): Cleaned up code, revised messages, and added support for 5 new more specific exit codes which are equated with EXIT_PRNERR and EXIT_PRNERR_NORETRY. * pprdrv/pprdrv_ppop_status.c: added code to put an "exit:" line in the printer status file to indicate the exit status. * ppop/ppop_cmds_other.c: added code to display the exit status if it indicates a fault. * Added create= option to the dummy interface. * libuprint/lpr_connection.c:uprint_lpr_make_connection(): changed error code for DNS failure from UPE_TEMPFAIL to UPE_BADSYS. * Fixed all of the interfaces to use the new more explicit exit codes where appropriate. * makeprogs/gen_paths.c: added "1;" at end of file for --pm and --ph. * pprdrv/: added code to parse a "*pprRIP:" line in the PPD file. * ppd/ghostscript/ghostscript_master: added *pprRIP: lines the the sample PPD files, but left them commented out. * fixup/fixup_inetd.sh: added "disabled = yes" to the Xinetd configuration for consistency with the configuration generated for Inetd. * makeprogs/gen_paths.c: added "$SIZEOF_struct_Media=" for --pm. * www/prn_media.cgi.perl: used $SIZEOF_struct_Media instead of a hard-coded value of 76. * libppr/int_snmp.c:int_snmp_status(): changed it so that it takes an already created gu_snmp object rather than creating one of its own. Changed libppr/int_con_tcpip.c and interfaces/tcpip.c to match. This not only saves the cost (probably negligible of creating and destroying the UDP socket for every query, it also allows interfaces/tcpip.c to set the SNMP community string. * interfaces/tcpip.c: added option "snmp_community=". * libgu/gu_strsep2.c: added "discard" option (which may be NULL). It is a list if characters which should be discarded on either side of the quoted string. It will generally be NULL or " \t". * pprdrv/pprdrv_lw_messages.c: Fixed a few bugs which caused parse errors and garbled status. * filter_dotmatric/prop.c: fixed bug which caused core dump with dietlibc. The problem was that it would exceed an array bound by one if a PostScript character name in the AFM file wasn't used in the CP437 character encoding. This is a very old bug. I wonder why no one found it before. * libppr/int_acache.c: changed sprintf() to snprintf() and fixed unnoticed buffer overflow. * ppr/, interfaces/, pprdrv/: Eliminated sprintf(). That leaves only the libgu/gu_sprintf() test code and lprsrv/olprsrv.c (which is obsolete). * test/test-ppad/: accepted appearance of "rip" line in "ppad -M show" output. * init_and_cron/ppr-clean.perl: fixed typo in directory name which was causing the script to die. * www/show_queues.js: fixed some problems related to scrolling and Mozilla. * libuprint/*: Removed use of the "ppr -C" switch in favour of the newer form "ppr --title". * libuprint/uprint_argv_ppr.c: changed to put quotes around the argument to "-o title=". This will need more work to handle embedded quotes. * ppr/ppr_main.c, ppr_infile.c: fixed to handle quoted filter option values. * libppr/options.c: fixed to handle quoted option values. * Removed vendors/ppd_hp/"HP LaserJet 4050 N", and "HP LaserJet 4050 Series" since they both have the same ModelName and there have been reports that they result in the production of bad PostScript and because the "HP LaserJet 4000 Series" PPD file probably works for these printers as well. Added code to remove them to fixup/fixup_obsolete.sh but left it commented out until more is known. * Changed the statement of the PPR license to be exactly the same as the new BSD license (the one with the advertising restriction removed). Of course, the references to "the regents" have been changed to "copyrigh holders". The previous statement was the same in substances. I have done this to avoid any possible question that PPR is distributed under the BSD license. 1.44, 5 June 2001--31 July 2001 * moved misc/modes-3.3.mf to filters_misc/ and improved the documentation at the top of filters_misc/mfmodes.conf. * re-organized nonppr/ a little. * Added makeprogs/save_symlinks.sh and changed top-level Makefile to use it. * Converted source tree into a CVS sandbox. * makeprogs/installdata.sh: added clause to skip things named "CVS". * Fixed NULL pointer problem in "ppad rip". * Changed pprdrv/pprdrv_rip.c:rip_start() to use a fixed path of HOMEDIR/lib/ppr-gs for Ghostscript if the RIP name is "ppr-gs". This is for a future special Ghostscript distribution for use with PPR. * Added O_EXCL to the open() calls for the port in the interfaces/parallel.c and serial.c as recomended in the CUPS programmer's manual. * ppop/ppop_cmds_listq.c:ppop_lpq_banner(): changed separator for the new printer status messages from "; " to "\n\t". This is because Samba has a 100 byte line length limit in its parsing code. Who knows what it will make of the new messages. * Uncommented the fixup_obsolete code to remove the "HP LaserJet 4050 N" (where that name came from is a mystery), added updated "HP LaserJet 4050 Series" and "HP LaserJet 4000 Series" PPD file form HP (off of Sourceforge). * Removed TrinColl-PPR-dmm-nup-3-5 and moved TrinColl-PPR-dmm-nup-3-6 back into procsets. Future versions will be under the PPR license rather than public domain. * Fixed Configure so that is won't identify RedHat's "2.96" GCC as an old one with the strength-reduce bug just because it only has a two part version number. * Configure: fixed typo that caused the FREEBSD system-dependent section of makeprogs/global.mk to be omitted. * Numberous small fixes for problems in the make rules, failure to create destination directories, failure to use the make program specified in include/global.mk, etc. It now compiles on Solaris 8; FreeBSD 4.3R; and Debian 2.2 i386, Alpha, Sparc, and PowerPC. (This testing was done on the Sourceforge.net compile farm.) * ppd/generic/: Replaced the two separately maintained PPR Generic PPD files with three built from a common file using the C pre-processor. * ppr/: added ability to read *N-Up features to turn on PPR's internal N-Up support. The keywords are "*pprN-Up" and "*pprN-UpBorders". * Renamed ppr_realloc() to gu_realloc(). * pprdrv/pprdrv_rip.c (and other files) fixed a problem in rip_fault_check() which caused it to miss error messages from the RIP. This require the addition of a parameter to several functions to tell them whether to attempt a flush before closing the RIP or the interface. Without this printer_flush() got called recursively since fault_check() is called from printer_flush(). * Changed order of targets in makeprogs/global.mk.unconfigured to put "cant" first. When it is included from the makefile in ppr-gs, just catching "all" isn't enough since "all" has many dependencies in the Ghostscript build process. * fixup/fixup_inetd.sh: fixed to to recognize if the service line is already in /etc/inetd.conf but commented out. * Changed samba/smb-protos.conf to use "%U@samba" instead of "%m@samba" for the -X argument. * Fixed ppop/ppop.c:job_permission_check() to return 'OK' if the queue file does not exist. This brings the code back in line with the comments. 1.50a1, 1 August 2001--27 February 2002. * Replaced makeprogs/global.mk.4rpm with a series of them for different arch-vendor-os combinations. * Makefile, docs/Makefile, docs/*/Makefile: corrected mistaken use of MAKEFLAGS. * Changed installation of login_ppr.sh and login_ppr.csh to copy them into /etc/profile.d rather than place links to them there. The master copies are now installed in $HOMEDIR/fixup/ rather than $HOMEDIR/lib/. * makeprogs/gen_paths.c: Removed "package main;" from top of paths.ph since it seems to cause problems with mod_perl CGI emulation and whatever once required it is appearently using PPR.pm now. * Added tcl/. * Added the job title to the arguments passed to the interface programs. Changed the lpr interface program to pass it to the remote system. * pprd/pprd_ppopint.c: Fixed incorrect message in case where "ppop move" moves no files because they are all being printed. * pprd/pprd_destid.c:destid_local_is_group(): fixed to return the current answer for the first group id when the printer table is full. It was returning false for a group with destid 150 when there were 150 printers with ids 0--149. This bug would cause a spooler crash if "ppop start" was run on a faulted printer since destid_local_get_member_offset() would panic and throw an assertion failure since it though it was being asked to find a printer in a printer. * include/global_defines.h: Increased MAX_PRINTERS to 250. * pprd/pprd_media.c: Replaced references to MAX_PRINTERS with calls to functions in pprd_destid.c. * www/prn_addwiz.cgi.perl: set to hide gs* interfaces. * interfaces/: removed gs* interfaces. * ppd/ghostscript/: uncommented *pprRIP: lines. * ppad/ppad_printer.c:printer_rip(): fixed so that "ppad rip _printer_" can clear the RIP setting rather than triggering a spurious syntax error. * interface/lpr.c: fixed so that if uprint_lpr_response() returns -1 on the command (start job), then it exits with EXIT_PRNERR as before rather than EXIT_PRNERR_NORETRY_ACCESS_DENIED. * vendors/ppd_hp/: added "HP LaserJet 8100 Series" and "HP LaserJet 8150 Series" from . * samba/ppr2samba.c: added message identifying the printer when ppd_open() fails. * www/prn_properties.cgi: added [RIP] tab, added information extracted from the PPD file to the [PPD] tab. * Moved nonppr/tcl7.5_hacked into tcl/ and integrated the Makefile with the PPR build system. * include/ppr_exits.h: Added PPREXIT_NOTPOSSIBLE. * ppr/ppr_conffile.c: Fixed so that aliases don't inherit the switchset, passthru or acls of the thing they are an alias for. I haven't firmly decided if they should inherit ACLs or not, but inheriting passthru really reduced their usefulness. * samba/smb-protos.conf: added "min print space = 2048" to [pprproto] section. * ppad/ppad_printer.c:printer_rip(): fixed core dump bug for "ppad rip myprn" (to clear the RIP). * Added code so that "ppr --page-list" and "ppad modify page-list" work. * Changed "-pages" file format, adding a blank line after the section for each page. This simplifies parsing code in pprdrv. * tests/: accepted changes caused by the addition of a "rip" field to the "ppad -M show" output. * tests/: fixed tests which used "%!PS-Adobe 3.0" instead of "%!PS-Adobe-3.0". * libuprint/uprint_print.c:logit(): changed to omit argv[0] and to put double quotes around empty arguments. (Previously it only put double quotes around arguments with spaces in them.) * libuprint/uprint_print.c:uprint_print(): changed logging so that uprint_errno is printed if the return value from uprint_run() is -1. * www/ppr-httpd.perl: Added BASH_ENV, IFS, and CDPATH to the environment variables undefined. * www/ppr-httpd.perl: Added --standalone-port option and standalone mode. * misc/ppr-sync.sh: fixed syntax error. * Added "vendors/ppd_hp/HP LaserJet 6P". * www/*: message string internationalization fixes. * www/job_modify.cgi.perl: fixed proxy-for. * www/ppop.c: Changed wording of message that appears in case of a proxy-for mismatch. Also changed to suppress hostnames if they are the same or the one from the command line is "*". This will reduce user confusion since in such cases, the hostname is not at issue. * pprdrv/pprdrv_rip.c: Changed to exit with EXIT_JOBERR rather than EXIT_PRNERR_NORETRY when the RIP core dumps. This makes more sense since the most likely reason for a RIP to core dump is a job it can't deal with. It is probably better for it to skip such a job than to bring the whole queue to a grinding halt. * pprdrv/pprdrv_ppd.c: Fixed code that called fatal() before give_reason() (so that give_reason() was never called). * pprdrv/pprdrv.c: added code to check the PPR version number from the queue file and make sure it is high enough before proceding. If the job was created by a version of PPR that is too old, the job is arrested. * pprdrv/pprdrv_interface.c:interface_exit_screen(): change exit code used when the interface program exits with an unknown code from EXIT_PRNERR_NORETRY to EXIT_PRNERR. This seems best since interface programs that are shell scripts may return unexpected error codes if the system is starved for resources such as file descriptors. * www/show_printlog.cgi.perl: Improvied the workign of the error message which is displayed when it is found that $VAR_SPOOL_PPR/logs/printlog doesn't exist. * fixup/fixup_inetd.sh: changed Xinetd configuration for the lpd port from "disabled = no" to "disabled = yes". * Split part of fixup/fixup_links.sh out into fixup/fixup_login.sh. * Moved vendors/ --> nonppr_vendors/, nonppr/ --> nonppr_misc/, and tcl/ --> nonppr->tcl/. * Added "Status-and-Flags:" to queue file and stopped using the execute bits to save this information. * Added ppr --save, but not the implementation code. (This switch will tell PPR to keep the job in the queue after it is printed.) * Removed autoconf/ and moved configure.in into makeprogs/. * Added pprpopup/ and removed samba/pprpopup.tcl. The pprpopup/ directory contains a very heavily re-written PPR Popup program. It now contains a mini web browser based on the IWidgets Scrolledhtml widget. This allows us to ask the user arbitrary questions. * Added nonppr_misc/md5/md5pure.tcl. * www/prn_properties.cgi.perl, grp_properties.cgi.perl: Added "Prototype Share:" to the [Samba] tab. * Changed -r option from net:node to net.node to match the Netatalk nbplkup output. * Changed libscript/pprpopup.pl to look up names in $VAR_SPOOL_PPR/pprpopup.db/. * Added www/pprpopup_register.cgi.perl. This receives registration requests from the new PPR Popup and stores them in $VAR_SPOOL_PPR/pprpopup.db/. * Added www/job_public.cgi.perl. This is used, along with PPR Popup, in a lab printing environment to allow users to claim their jobs. * Added docs/pprpopup/. This will store the help files for PPR Popup. * Removed unixuser/pprpopupd.perl and added it to fixup/fixup_obsolete.sh (but left the latter commented out). * Added procsets/TrinColl-PPR-dmm-nup-3-7 to replace TrinColl-PPR-dmm-nup-3-6. The changes correct bugs discovered by Klaus Reimann. * Fixed pprd so that fatal() doesn't delete the lock file unless pprd created the lock file. The problem was that if it found a lock file from another instance, it called fatal() (to say that there was already an instance of pprd running) which removed the lock file! * Added --stop option to pprd. * Moved the timeval routines out of pprdrv/pprdrv_writemon.c and into libgu/gu_timeval.c. * Changed pprd so that it no longer uses SIGALRM and no longer does anything but set a flag in the SIGCHLD handler. It now uses select() to dispatch events. This eliminates reentrancy problems which were previously handled by avoiding unsafe functions such as malloc() and all of stdio. * Broke the www/ppr-httpd.perl standalone code out into libscript/tcpserver.pl. * pprd/pprd_ppop.c:ppop_list(): removed error check from fwrite(). Previously it was a fatal error. This meant that pprd would kill itself if the temporary file space filled up! * Updated INSTALL.txt somewhat and added a mention of RPM_BUILD_ROOT. * pprd/pprd.c: fixed named pipe reader code so that it handles the case where read() returns two commands. Incredibly, this bug has been there from the very begining (in 1993). Perhaps it was temporary code that was never replaced with good code. In any event, it probably explains why the web interface was sometimes leaving CGI scripts hung waiting for ppop. (Another factor was that the error message displayed when ppop timed out waiting for pprd was missing the line feed at the end.) This should also explain the jobs that sometimes appeared in the queue directory but not in pprd's queue. This was a vexing problem because restarting pprd would cause old jobs to suddenly appear in the queue. * Added www/cliconf.cgi.perl which creates a shell script to configure a client to send jobs to a PPR queue. * Copied papsrv/ into ppr-papd/ as a first step in making a papsrv replacement which reads the regular queue configuration files rather than papsrv.conf. 1.50a2, 27 February 2002--8 November 2002. * Moved responder message building out of pprd/pprd_respond.c and into responders/ppr-respond.c. * misc/: removed atalk.conf.sample, atalkmapd.perl, fix410.ps, printer_query.ps, and ttquery.ps. * ppr/: removed --commentator, --commentator-address, and --commentator-options. Commentators will be combined with responders soon, so this is a move in the right direction. * ppr/: moved calls to respond() into the new function ppr_abort(). Changed fatal() to call ppr_abort(). ppr_abort() should now be handling all abnormal exits. * pprdrv/pprdrv_rip.c: changed code to interpret killing of the RIP by SIGSEGV as a sign of a bad job. Previously WCOREDUMP() was used to determine if the error was a bad job but this didn't work because (at least on Linux) WCOREDUMP() was returning false if core would have been dumped but the ulimit prohibited it. I do not know if Linux is right to behave in this way. * Configure: changed everything but Linux to include -lint if international messages is selected. * Added "ppop question" command to cancel a question attached to a job. Added support for this to pprd and www/job_public.cgi.perl. (These questions are a request for user feedback which can be attached to a job. PPR Popup is used to present the questions to the user.) * pprd/pprd_question.perl: fix to recognize "+OK" as success. * lprsrv/lprdrv_conf.c: added netgroup support contributed by Gerard Verdier . * lprsrv/lprsrv_conf.c: code cleanup * lprsrv/lprsrv-test.c: added paragraph of explanation before the table. * Removed limits on length of responder name, address, and options. (System wide edits.) * Allowed spaces in proxy-for strings. * pprdrv/pprdrv_capable.c: moved the handling of internal resources to a table, replacing hand-written C code implementation. Added CIDInit to the table, assuming that level three printers have it. This will have to be checked in the Adobe technical documents concerning CID keyed fonts. * makeprogs/save_symlinks.sh: added -f to ln command. * pprpopup/: renamed icon files, renamed script to convert FIG files to Tcl image data, added "make images". * lprsrv/lprsrv.c: fixed "unrecognized command" code so that the ^A style message is used only if the command byte is less than ASCII space. * www/cgi_tabbed.css: made tabbed folder borders narrower. * www/images_src/, www/images/: reorganized and added www/images/Makefile to generate some of the images automatically from their FIG files. Added FIG pictures for the test page and replaced the hand-drawn exclaim.png with exclaim.fig. * www/docs_info.cgi.perl: added (This script can display system GNU Info pages. It is intended mainly to allow the PPR documentation to link to Info pages.) * www/docs_man.cgi.perl: added support for MANPATH searching * www/index.html: added boxes to enter names of desired man pages, info page, and RPM pages; changed logo to pprlogo2-medium.png. * docs/index.html: changed logo to pprlogo2-medium.png. * www/df_html.cgi.perl, df_img.cgi.perl: removed df_img.cgi.perl and changed df_html.cgi.perl to make a percentage line graph with stretched single-pixel images; added df_img.cgi to fixup/fixup_obsolete.sh. This removes PPR's dependency on the GD graphics library and a bunch of Perl modules. * www/show_queues.cgi.perl: added "Add New Alias"; added menu item "Member Printer Control" for the groups menu; corrected stated size of icons for "Add Printer", "Add Group", "Show All Queues"; moved "Show All Queues" to the front. * www/show_queues.js: Set href= on popup menu items so that users can right-click on them and choose to open them in a new tab. * pprdrv/pprdrv_rip.c: Added an exception to the rule that Ghostscript exiting with error code 1 indicates a command line arguments error. Now we nix that if a PostScript error notification has been received. * misc/ppr-testpage.c: added options to enable grayscale, RGB, and CMYK bars. * www/prn_testpage.cgi.perl: added choices of images and whether or not to have the various bars. * www/alias_addwiz.cgi.perl, alias_properties.cgi.perl: added * ppad/ppad_printer.c: ppad_show(): fixed bug which caused it to always display the PPD file RIP setting even if the actual RIP setting (the one taht pprdrv would use) came from the printer's configuration file. * libppr/int_copy_job.c: added USE_SHUTDOWN stuff. * ppad/ppad_alias.c: fixed "ppad alias addon" * www/cgi_tabbed.pl: put 1mm radius on tabs. * www/grp_control.cgi.perl: added * Makefile: added subdir pprpopup/ to those automatically built. * makeprogs/installdata.sh, makeprogs/installcp.sh, fixup/fixup_samples.sh, fixup/fixup_media.sh: added chmod to set the permissions of the target files. * makeprogs/make_install_dirs.sh, fixup/fixup_perms.sh: changed permissions of $VAR_SPOOL_PPR/pprpopup.db to 770. * www/cgi_membership.pl, www/cgi_tabbed.pl, www/prn_media.cgi.perl: improved appearance in Mozilla. * www/cgi_tabbed.pl: added [Help]. * www/prn_properties.html: added. * fixup/fixup_inetd.sh: removed spurious "disabled = yes" line from the generated xinetd config file. (The correct line "disable = yes" was already present.) * ppd/ghostscript/ghostscript_master: Added "-dBitsPerPixel=24" for DeskJet 550C. * Fixed bug in the new internal resource table code in pprdrv/pprdrv_capable.c which made it non-functional. * Fixed pprd/pprd_ppop.c:ppop_move() so that the pass number is reset when a job is moved. * Changed pprdrv so that "Reason:" lines don't have parentheses around them in the queue file and changed ppop to add the parentheses itself before printing the message. * Added www/window_open.cgi.perl. This script may prove useful for shedding browser decorations. * printdesk/: converted to use PPR.pm instead of paths.ph, fixing bugs introduced by changes to paths.ph. * Added fixup/fixup_atalk.tcl to find getzones, fixed printdesk/Printdesk.pm and www/prn_addwiz.cgi.perl the to use the one it finds. * www/show_jobs.cgi.perl: added support for fixed positioning in Mozilla. Added JavaScript onclick= handler to checkboxes which highlights selected rows. * www/cliconf.cgi.perl: fixed typos in generated /etc/printcap fragment. * pprdrv/pprdrv_buf.c:printer_flush(): moved a call to fault_check() to catch the case where SIGTERM doesn't interupt a system call and the interface program (such as simple) doesn't send anything which would cause a call to fault_check() (before feedback_reader()). I am wondering if all those calls to fault_check() are really necessary if just one just before the select is enough. * interfaces/simple.sh: removed code to send control-d when killed, moved opening of the output device to the cat call rather than using exec since exec quits the script if it fails. * pprpopup/pprpopup_loader.tcl: changed Win32 registry key from HKEY_LOCAL_MACHINE\Software\PPR\PPR Popup\config to HKEY_CURRENT_USER\Software\PPR\pprpopup so as to conform to the structure used in the Unix version (i.e. ~/.ppr/pprpopup). * pprpopup/pprpopup_loader.tcl, pprpopup_main.tcl: added random_load() and random_save() in order to separate the constantly changing random seed from the configuration. The random seed is stored raw (not as Tcl code) in ~/.ppr/random, HKEY_CURRENT_USER\Software\PPR\random, resid -8002. * pprpopup/pprpopup_main.tcl: fixed problem wherin a registration attempt that failed imediately would not triggering a retry. * www/: removed all uses of since it is not supported by Mozilla or IE (in fact I think it is only supported by Netscape 4.x and earlier). * www/: changed some instance of the "strict" documentation type specification to "transitional" for certain pages that use certian HTML 4.01 features that are declared deprecated in the standard because their effect can now be achieved with CSS. * nonppr_vendors/ppd_hp/, MIT licensed files: commented out N-Up and watermark stuff, removed *ScalePatterns code since it doesn't work on many versions of the MS-Windows PostScript drivers, renamed "HP C LaserJet 4500-PS" to "HP Color LaserJet 4500". * www/cgi_widgets.pl: added around widgets. * Configure: added Darwin (Mac OS X) to the list of OSs from which one may choose. (Whether it works or not is as yet unknown.) * Fixed fix bug that hid errors in libpprdb/gdbm_dbtrans.c. (Thanks to Jacques Sansdrap.) * pprdrv/pprdrv.c: fixed messed up decimal point splitting in formatting of money in the printlog. (Again, thanks to Jacques Sansdrap.) * libgu/gu_pch.c: This is the start of a hash library. * uprint/uprint-lpstat.c: Improvements for Solaris application support. * Changed makeprogs/global.mk to Makefile.conf and renamed the models in makeprogs/ accordingly. Did a search-and-replace on all makefiles. * Renamed makeprogs/gen_paths.c to ppr-config.c, changed Makefile to install it, and changed fixup/fixup_links.sh to create a link to it in the public bin directory. This change follows in the footsteps of glib-config, cups-config, etc. * pprdrv/pprdrv_rip.c: removed special treatment for RIP "ppr-gs" (which means that it will have to supply things like "-q -dSAFER" and "-sOutputFile=" itself). Added option for Ghostscript with specified path. Added code to omit "-sOutputFile="| cat - >&3" for Ghostscript if "-sOutputFile=" was already supplied. * Added pprdrv/ppr-gs.c which is a wrapper around Ghostscript. * www/prn_properties.cgi.perl: fixed numberous bugs in "RIP" tab which were related to the radio button and the "PPD" and "Custom" areas. This work included adding "rip_ppd" and "rip_which" to the "ppad -M show" output. * Added ppr --features (though it presently only works for printers, not for groups). * Added support for "*cupsFilter:" in PPD files to "ppad show" and to pprdrv. * Added strace hooks to pprd/pprd_pprdrv.c so that pprdrv can be traced from the very start. (Turning this on requires changing an option at the top of the file and a recompile.) * Added ppd/ppr-indexppds.c. * Renamed "Dot Matrix 24 pin Ghostscript" PPD file to "NEC Pinwriter 7 Ghostscript". If Ghostscript is specific in its name for the driver, we can be too. * Changed www/prn_properties.cgi.perl to use the output of ppr-indexppds to generate a PPD file list. * Extended www/cgi_intl.pl:ibutton() to include hover help (using the title attribute of a span). * www/docs_info.cgi.perl: added ability to handle info files without the ".info" extension. * pprdrv/pprdrv_ppd_parse.l: fixed a problem with tabs in feature lines not being recognized as whitespace. * nonppr_misc/misc/snprintf.c: upgraded to more recent version with C99 semantics, asprintf(), and vasprintf(). * pprdrv/pprdrv_feedback.c, pprdrv_rip.c: changed Ghostscript error message parsing code to identify error messages associated with the RIP's configuration and distinguish them from PostScript errors caused by errors in the job. For example, this new code will catch the message that Ghostscript prints if a driver that is not available is requested. * pprdrv/pprdrv_rip.c:rip_start(): added missing call to gu_nonblock() to put pprdrv's end of the pipe to the RIP into nonblocking mode. * www/ppr-httpd.perl: added "delete $ENV{PATH}" since Perl 5.8.0 isn't happy with any PATH received from the environment. * libppr/int_copy_job.c: added handling of EAGAIN from read() and write() in order to accomodate the nonblocking behavior of OSF1. * po/: Added rule to Makefile to build .pot, fixed install_mo.sh so that it will notice if all of the .pot files are missing (they are not in the CVS repository), added move_pox_to_po.sh, updated README.txt. * www/: Added code to various programs to snap the window size to the size of the document. (This is disabled right now due to browser compatibility problems. The problem is that the computed size is a few pixels off which causes the windows to shrink by a few pixels on each refresh.) * www/show_jobs.cgi.perl: enhanced "?controls=" option to limit the list of controls which will be shown. The control bars are completely removed if it is empty. This is for the Docutech users who are confused by some of the controls. * www/: moved prn_properties.html to prn_properties.en.html, added dummy prn_properties.ru.html, changed ppr-httpd to use "KOI8-R" as the charset for .ru.html files. * www/prn_testpage.cgi.perl: added -m and -r options to the ppr command. * www/pprpopup_register.cgi.perl: added code to create an alias registration based on the stuff to the left of the @ and the client IP address. With the above change, this should allow users who are running PPR Popup on the same machine as the web browser to receive notification of the fate of their test pages. * init_and_cron/ppr-clean.perl: added code to remove old files from $VAR_SPOOL_PPR/pprpopup.db/. * www/pprpopup_register.cgi.perl: put most of the code in an exception handling block which generates a text/plain error response. * pprpopup/: renamed pprpopup_loader.tcl to ppr-popup, changed Makefile to install it in $HOMEDIR/bin instead of $SHAREDIR/ppr/www/client/, commented out most of the debugging puts commands. * pprpopup/pprpopup_main.tcl: changed registration failure alert box to include the body of the response thus showing the error messages generated by the new pprpopup_register.cgi, commented out most of the debugging puts commands. * pprpopup/ppr-popup: added code to set the session restart command to /bin/true. (This may be intended to prevent duplicate instances when session management restarts it and session startup starts one too.) * libuprint/Makefile, uprint/Makefile: changed CC to LD and CFLAGS to LDFLAGS when linking the executables. * responders/mail.sh: fixed so that EECHO= gets filled in. * editps/: added Mozilla_1.0 (but left entry in editps.conf commented out since it works with Ghostscript but not with real PostScript). * libppr/: int_con_tcpip.c, int_pe_tcpip.c: moved code back into interfaces/tcpip.c. * interfaces/tcpip.c: added appsocket_status_interval=, added an initial status check for SNMP and AppSocket status. * libppr/int_copy_job.c: added send_eoj_funct. * interfaces/tcpip.c: added use_shutdown=. * interfaces/lpr.c: changed "L" in control file to use the username instead of "somebody". Changed "N" to use the job title rather than the queue id. * ppr/ppr_dscdoc.c: added support for "%%BeginNonPPDFeature: NumCopies X" to "-R copies"; marked all warnings for internationalization. * ppr/ppr_main.c: changed default to "-R copies" and made "-n" imply "-R ignore-copies". * pprdrv/pprdrv_notppd.c: added code for "%%BeginNonPPDFeature: NumCopies X", both the insert it and to modify it. * pprdrv/: added support for in-printer collating for printers that define *Collate in their PPD files but left it turned off for now since it is unclear how to determine how many pages a printer can collate and because pprdrv doesn't yet parse *UIContraint: lines. * pprdrv/pprdrv_ppd.c: rewrote begin_feature() and include_feature() combining their common code for changing and deleting features and adding code to support new colating features. * Configure, various makefiles: made building of programs that require tdb optional. * www/cgi_widgets.pl:help_button(): added $helpdir parameter. * Configure: changed default for internationalization to "yes". * libuprint/uprint_conf.c: added warning if [real lp] or [real lpr] doesn't define installed= and changed the default to yes. * pprdrv/pprdrv_rip.c: removed support for ppr.conf [ghostscript] gs=. * fixup/fixup_conf.sh: removed code to generate [ghostscript] gs= in ppr.conf.sample. * pprdrv/pprdrv_ppd.c: added code to ban slashes in RIP names in PPD files. 1.50b1, 13 November 2002--22 January 2003. * libuprint/claim_lpr.c: Added code to skip spurious blanks before the list of queue names in printcap. * unixuser/ppr-xgrant.c: changed "ppr" to USER_PPR and improved exec() failed messages. * libuprint/uprint_argv_ppr.c: changed title= to pr-title=. (In lpr, the -J option cooresponds most closely to PPR's --title, so we don't want to use --title for the title for pr.) This ensure that this potentially difficult-to-parse option is not passed to any other interface. * Added Configure_new. This is a better, more automated configure script. * Deleted makeprogs/Makefile.conf.i[356]86-mandrake-linux. * ppr.spec: changed to use Configure_new. * libgu/gu_pcs.c: added gu_pcs_append_byte(). * ppr/ppr_main.c: fixed handling of duplex requirements. * ppr/ppr_infile.c: added prepended implied filter options. These options are implied by -F *PageSize, -F *Duplex, -R duplex:. We have Till Kamppeter to thank for this suggestion. * ./Configure, ./Configure_new: fixed to accomondate changed format of GCC 3.2's gcc --version output. * Added regression test test-ppr/401-duplex. * libuprint/uprint.conf.sample: reordered lines; libuprint/uprint_conf.c: added error message for unrecognized sections and added missing code to ignore flavor= lines in [real lp]. * ppr/ppr_nest.c: error message improvement for unmatched section begin/end * ppr/ppr_dscdoc.c: suppressed duplicate messages about lack of atend for stuff in trailer. * filters_misc/: replaced pr.sh with pr.tcl. This new code correctly handles the pr-title= option. * fixup/fixup_filters.sh: added "#! ppr-tclsh" to things rewritten by sed. * pprdrv/pprdrv_flag.c:print_flag_page_standard(): fixed pslinef() call without format string. * pprdrv/lw-messages.conf: added "PrinterError: paper tray missing". * commentators/pprpopup.perl: added * pprdrv/pprdrv_commentary.c: restored support for "ppr --commentary". * Fixed "ppad help" description of "ppad rip". * pprdrv/pprdrv.c:pprdrv_read_printer_conf(): fixed to allow empty option list. * www/ppr-web-control.tcl, window_open.cgi.perl: fleshed out adding opening of Mozilla using $HOME/.ppr/ppr-web-control.html so that browser write privlege can be granted and we can open without an intermediate window; Added support for Konqueror, Links, W3m, and Lynx; renamed to ppr-web.tcl. * fixup/fixup_links.sh: added ppr-web to the list of things liked to the public bin directory. * www/grp_control.cgi.perl, prn_control.cgi.perl: fixed bugs with sizing and with closing of the whole frameset in grp_control.cgi. * www/show_jobs.cgi.perl, show_jobs.js, show_jobs.css: added "Queue" which pops up the menu that show_queues.cgi pops up. Changed "Settings" to "View". * ppr/ppr_respond.c: switch the seteuid()/setegid() code from setting them to the user's to setting them to PPR's. Set the real IDs too. This fixes the xwin and pprpopup responder when launched by ppr (rather than pprd). * ppop/ppop_cmds_other.c:ppop_dest(): fixed to show only those aliases which match what the user specified. # www/q_icons/make_composit_figs.perl: fixed to make the icons have transparent backgrounds. This feature had been left out of the last conversion command but was present at some point in the past. * www/Makefile: fixed to only install image file from www/images/ and skip the .fig and build files. * www/images/icon-48.xbm: added * ppop/ppop_cmds_other.c:ppop_status(): changed descriptions in verbose mode to "Raw LW Status", "Raw SNMP Status", and "Raw PJL Status" (added the word "Raw". This should prevent confusion by distinguishing them from the amalgamated status. * ppop/ppop_cmds_other.c:ppop_status(): changed code to hide printer problems that are unconfirmed for more than 4 hours unless --verbose is used. * po/ru-PPRWWW.po: added a few messages and made minor corrections. * www/show_queues.cgi.perl: set width of table cells holding things such as "Add New Printer" to 150 to encourage them to wrap their labels. * pprdrv/pprdrv_ppop_status.c, pprdrv/pprdrv_commentary.c, ppop/ppop_cmds_other.c: refinements to how unrecognized status messages are handled. They are now displayed by ppop even without --verbose. Changed order of lines in status file so that standardized status will be at the top. * www/prn_control.cgi.perl: fixed to display standardized status; eliminated turned-off code to use form fields to format the information. * ppop/ppop_cmds_other.c: changed "ppop status" output: changed "unconfirmed for X minutes" to "as of X minutes ago" and suppessed "for X minutes" when "as of" is displayed. These two changes shorting the messages considerably while still providing a useful amount of information. Using the --verbose switch gets you everything. * unixuser/ppr-hexdump.c: added * pprdrv/ppr-gs.c: changed "cupsfilter=" to "cups=", added "ijs=". * ppd/ghostscript/: added support for Epson Stylus C62. * samba/ppr2samba.c: fixed test for driver download share to check for it under its current name (which is pprprnt$). * ppr/ppr_main.c: added severe warning for zero length input file. * po/joe-ru: added * pprd/pprd_load.c:load_printer() fixed rounding error in reading of "Charge:" lines. * fontutils/ppr-indexfonts.c: if an attempt to open a font file returns errno == ENOENT, say it is a broken symbolic link and skip it. This is a good idea because Mandrake Linux 9.0 still has a broken symbolic link to a Fontmap file from an old version of Ghostscript. * fixup/fixup_inetd.sh: removed spurious "disabled =" line from generated xinetd.d/ppr file. * www/prn_properties.cgi.perl: fixed custom RIP saving. * fixup/fixup_perms.sh: made ppr-xgrant setgid as well as setuid (unixuser/Makefile already did this). * libppr/int_copy_job.c: added check for EAGAIN on write to stdout since stdout is a pipe and if the write size is less than PIPE_BUF but bigger than the available space, write() may decline it even though select() says the descriptor is ready for writing. Added check for EAGAIN to read from stdin (just to be paranoid). Added code to set stdin and stdout to non-blocking mode. * www/cgi_tabbed.pl, cgi_wizard.pl, show_jobs.cgi.perl: Added alt="" to spacer images. * README.txt: brought up to date. * interfaces/parallel.c,parallel_linux.c: added status_interval=. Unfortunately its seems that the Linux parallel port driver doesn't support non-blocking IO. Also added code to attempt to detect if the printer is powered down by watching the busy line. Added case to interpret EIO as an attempt to read from a unidirectional printer. (EINVAL was already interpreted as an attempt to read from a unidirectional port.) Removed EIO explaination "Hangup or other error while trying to opening "X"" as it seemed to make no sense for parallel ports. Renamed int_connect_parallel() to open_parallel(). Marked open_parallel() error messages for i18n. * interfaces/serial.c: Marked open_port() messages for i18n. * interfaces/usblp.c: added. So far only device node addresses are supported. In other words, there is no provision for specifying the desired device by make or serial number or by USB bus location. * www/prn_addwiz.cgi.perl, libppr/interfaces.c: added entries for usblp interface program. * ppr-papd/: renamed everything from ppr-papd to papd. This violates my convention, but the old name was really annoying me. * po/: added PAPD.po. * www/prn_properties.cgi.perl: fixed papd support. * init_and_cron/init_ppr.sh: added code to start and stop papd (if it is installed). * fixup/fixup_conf.sh: added code to generate [papd] section. * nonppr_misc/misc/: moved gu_wildmat.* to nonppr_misc/wildmat/, moved snprintf.c to nonppr_misc/snprintf/, deleted modes-3.3.mf, moved squeeze.c to nonppr_misc/squeeze/squeeze.c, moved ps_type3.c to nonppr_misc/ps_type3/ps_type3.c. * filters_typeset/pod/: removed it since it was never completed and Pod:XML has a program pod2xml which can already convert POD to XML. * samba/: renamed README_SAMBA.txt to README.txt. * Makefile: changed dist target to exclude CVS and docbook-*-* (using GNU Tar syntax). 1.50, 22 January 2003--14 February 2003. * fontutils/ppr-indexfonts.c: Fixed the code introduced in 1.50b1 which was supposed to skip broken symbolic links. Added code to deal with directories listed in ppr.conf which don't exist. * Configure, Configure_new, lib*/Makefile, nonppr_tcl/Makefile: added explicit call to ranlib (though for most platforms RANLIB=touch). * www/q_icons/[0-2]*.png, www/images/*.png, *.eps: added to CVS (marked as binary). I did this so we will know if switching conversion tools produces different results (as it has in the past, generally better) and because a lot of people don't have the tools needed to build them. * fixup/fixup_conf.sh: fixed messed up [papd] section code. * fixup/fixup.sh: commented out call to fixup_login as it has caused some trouble and will be obsolete in the next version. Those who want it can run it themselves. * interfaces/tcpip.c: added emergency definition of INADDR_NONE since Solaris 2.8 doesn't seem to have it! * makeprogs/ppr_make_depend.perl: changed to ommit dependencies for non-existent include files rather than assume they will be in ../include. This change was necessary because snprintf.c conditionally includes config.h and I didn't want to change it as it is not my code and I want to keep it easy to keep up-to-date with the latest version. Generating a dependency spec. for a non-existent file doesn't do any good anyway. * www/ppr-httpd.perl: added "Accept-Ranges: bytes" to the response headers for GET. According to , this will allow Mozilla to cache partially downloaded files which result from aborted prefetch operations. * pprd/pprd_pprdrv.c: added code to post an alert suggesting that suggests a dynamic linking problem if pprdrv dies "killed by signal 0". * libppr/alert.c:alert(): expanded formatting buffer from 256 to 512 bytes. * pprdrv/pprdrv_log.c: added as a central repository for code that deals with the job log. * pprdrv/pprdrv_capable.c, pprdrv_feedback.c: replace job log handling code with calls to functions in pprdrv_log.c. * pprdrv/pprdrv_reason.c: added code send an information block which states that a PostScript error has occured, what printer the job was printing on, and the probable reason for the PostScript error. This block will appear just before the PostScript error message in the job log. * Configure, Configure_new: change the messages before the GDBM and TDB questions to more clearly indicate that the copy of TDB in Samba can't be used, to provide download URLs for GDBM and TDB, and to remind the user that GDBM and TDB are licensed under the GPL. * libuprint/uprint_rfc1179.c: added (but won't use until the next PPR minor release when it will allow us to take the setuid root bits off of most of the uprint-* programs). * ppop/README.txt: added * ppr/ppr_infile.c: implemented passthru for type postscript. * www/README.txt: updated * tests/: fixed widspread use of "-r none" instead of "-m none" in ppr command lines. This problem resulted in a flood of e-mail to whatever user ran the regression tests. 1.51, 15 February 2003--24 July 2003. * www/index.html: fixed broken links to documentation. I am more than a little annoyed that several browsers have been hiding the fact that certain browers (including Mozilla and Links) have been hiding the fact that these links pointed above the root. Dillo finally gave the game away. Thanks Dillo! # www/cgi_run.pl: fixed run() and opencmd() so that they don't use die if exec fails. This was bad because the die was often caught. The result was that _both_ parent and child tried to issue the second half of the HTML page. The copy from the child was received by the parent, HTML escaped, and displayed as command output! Suppressed program path in run() output. Suppressed Perl 5.8.0 warning about tainted arguments to exec(). * www/*_addwiz.cgi.perl: changed run("/usr/bin/id") to run("id") since it is often /bin/id. * ppad/ppad.c:priviledged(): commented out install-time exception because it turns --su into a noop for user ppr. * www/docs_man.cgi.perl, docs_utils.pl: added manpage directory. * libuprint/: reorganized code and renamed many files and a few functions. Some of the renaming went thus: lpr->bsd, lp->sysv. This was done in most places where the reference was not to a command but to a spooler. * uprint/: removed all setuid root and calls to setuid business in libuprint. Made uprint-lpr and uprint-lp setuid ppr so that they can get the next lpr jobid. * unixuser/ppr-xgrant.c: by using setreuid() in stead of setuid() was able to set the real uid (necessary because xauth is a stinker and calls access()) without being root. This means that it can now be setuid ppr in stead of setuid root. * fixup/fixup_perms.sh: changed to no longer make uprint-* and ppr-xgrant setuid root. Made code neater by creating another for loop which steps through a list of files that all need the same ownership and mode. * lprsrv/olprsrv.c: fixed to work with libuprint changes and to always compile support for all supported spoolers. * lprsrv/ fixed to work with renamed dest_claim_*() functions from libuprint and other changes in libuprint. Changed to run most of the time with the euid and egid set to those of the user ppr (previousy the egid wasn't changed and the euid was set to that of the owner of /etc/ppr/uprint.conf). When running a command as a user, the gid is now set as well since Inetd, when asked to run lprsrv as root may run it under a gid that could allow excessive access. * include/sysdep.h: deleted all references to HAVE_LP, HAVE_LPR, LP_PRINTERS_CONF. * papsrv/papsrv-kill.sh: removed, added to fixup/fixup_obsolete.sh. * pprd/: removed code to create /var/spool/ppr directories on startup. It wasn't being maintained (because it was forgotten). It would be better combined with fixup_perms.sh or with the Init script. Interestingly, this code was the source of a longstanding problem with the mode of the log directory mysteriously changing from 775 to 755. * pprd/, papsrv/, papd/: Changed all calls to setuid() and setgid() (except setuid(0)) to setreuid() and setregid() respectively and made sure that the return value is checked except for those setuid(0) calls that just prepare the way for the important ones. Added paranoid checks too. (Using setuid() risks security bugs because it does completely different things depending on whether the EUID is 0 or not. Thus it may not do what you want it to do but it will indicate success.) * ppr/: renamed setuid_uid -> ppr_uid, setgid_gid -> ppr_gid; implified startup checks which make sure it is running under the right uid. * ppr/ppr_infile.c: switch from seteuid()/setegid() to setreuid()/setregid() for filter execution so that the saved ppr_uid/ppr_gid is dropt. Added checks to make sure that the calls suceed. Did a test to make sure this works. Verified that setting the effective ids left the saved ids untouched on Linux but that the exec() changed the saved ids. * ppr/prune_env.c:set_ppr_env(): changed IFS from " \t" to " \t\n" because that is what is recomended by "Secure Programming for Linux and Unix HOWTO". * www/: replaced ppr-passwd.sh with ppr-passwd.c. This new implementation doesn't depend on Apache's htpasswd. Added ppr-passwd to the list of programs which are made setuid/setgid ppr/ppr by fixup/fixup_perms.sh. * ppad/ppad_filter.c: added warning for PPD files which don't specify the default resolution. This is probably better than leaving users to wonder why there was no match in mfmodes.conf. Also added support for "*DefaultJCLResolution:" as a way to deal with recent HP PPD files. * makeprogs/installdata.sh: made mode of installed data files 444 instead of 644. This seems right since this is used in install *.sample and $HOMEDIR/lib/*.conf and we want the user to understand that they shouldn't ordinarily be modified. * Rearanged things in makeprogs/, fixup/, filters_misc/ and the new directories z_install_begin/ and z_install_end/ in order to cut down what fixup.sh does and otherwise simply the build process. * Moved fixup/fixup_filters.sh to filters_misc/indexfilters.sh. * makeprogs/ppr-config.c: added --tcl, added paths.tcl to Makefile. * www/README.txt: updated to reflect the addition of ppr-passwd. * README.txt: added explanation of purpose of z_install_begin/ and z_install_end/. * pprdrv/pprdrv_log.c: Fixed banner page printing code which would fail if the job didn't have a log. * pprdrv/pprdrv_userparams.c: Implemented setting of Manualfeedtimeout for PostScript level 2 (which interestingly is categorized as a page device parameter rathern than a userparam). Also implemented JobTimeout (which _is_ a userparam). * ppad/ppad.c:main(): clarified message about unknown subcommand so as to make clearer to the user what happens when he types "ppad --debug ppd dummy 'HP LaserJet 4000 Series" (for example). * Did same as above for ppop. * po/ru-*.po: minor fixes and a few more messages * nonppr_misc/docbook-xml-4.2/: added * fixup/fixup_media.sh moved to ppad/insert_initial_media.sh; modified ppad/ppad_media.c to heed RPM_BUILD_ROOT when opening media.db if UID == EUID. * Moved init script from init_and_cron/ to z_install_end/. * Renamed init_and_cron/ to cron/. * cron/cron_hourly.sh: added recognition of Debian GNU/Linux package changes and code to call ppr-index (see below) * cron/ppr-clean.perl: added --debug and --all-removable. Moved much code from ppr.spec and made it part of the --all-removable action. * INSTALL.txt: removed information on upgrading from versions prior to 1.4x since it is too much trouble to proofread it to see if it has been superseeded by later changes. Besides, I haven't heard of anybody running a version older than 1.4x. * fixup/fixup_obsolete.sh: removed code to clean up from versions prior to 1.4x. * Removed fixup/fixup_lmx.sh and misc/custom.ppr as they haven't been tested in years and Google search doesn't clearly indicate that LanmanX is still in use. * Moved remainder of fixup/ stuff to z_install_end/. * Moved libscript/getpwnam.c,getgrnam.c to z_install_begin/, added them to fixup_obsolete.sh, added z_install_begin/id.c. It was necessary to re-implement id because old versions aren't as nice as GNU id and don't support -u, -g, and -n. * www/ppr-web.tcl: added -d option for use when specifying the queue, though its use is still optional, i.e., the old syntax still works. * www/cliconf.cgi.perl: added -d option to ppr-web command in generated KDE icons. * makeprogs/ppr_make_depend.perl: fixed bug: #include "" with comment following was ignored! * Moved include/version.mk to makeprogs/version.mk where it is auto-generated and only used by the top-level makefile. Eliminated other uses by by adding SHORT_VERSION to ppr-config --mk output. * templates/adjust_header: added * makeprogs/installconf.sh: added * makeprogs/install*.sh: added code to chown and chgrp installed files. * printdesk/printdialog.perl: removed (after merging the tiny bit of code that it had int printdesk/ppr-panel.perl). * merged ppr-indexfonts, ppr-indexppds, and fixup_filters.sh into lib/ as indexfonts, indexppds, and indexfilters respectively and added cron/ppr-index as a wrapper to call them with. Added --delete option to all. * z_install_begin/install_create_accounts.sh: added code for Linux to make $USER_PPR a supplemental member of the group "lp". This should allow PPR to open ports such as /dev/lp0 even if the system default permissions haven't been altered. This means a parallel printer may be set up if one has ppad access but no root access. * makeprogs/installprogs.sh: added code to properly handle attempts to install setuid root binaries when not running as root. (It stops and tells the user to do "make install" again as root.) * Removed atalk responder (responders/atalk). * Added "followme" meta responder support to responders/ppr-respond.c. * Added unixuser/ppr-followme.c. * Added ppr-followme and ppr-popup to z_install_end/install_bin_links.sh. * Added libgu/gu_run.c. * pprpopup/pprpopup_main.tcl: added code to use "$USER@localhost" or "$LOGNAME@localhost" if PPR_RESPONDER_ADDRESS isn't defined. * pprd/pprd_main.c: Due to MacOS X wierdness with regard to saved IDs and setuid(), added seteuid(0), setgid(), setuid() sequence before the existing setreuid() setregid() sequence. * lprsrv/olprsrv.c,lprsrv_print.c: same ID business, plus added missing paranoid attempt to setuid(0) (which is what caught the above problem). * makeprogs/readlink.c: added and changed installln.sh to use it instead of (probably nonexistent) system version. * z_install_end/install_bin_links.sh: added ppr-panel. * libppr/readppd.c: added code to remove whitespace from the ends of lines and skip blank lines. Did a quick sweep of programs that use these functions, made a few minor adjustments. Everything looks ok. * pprpopup/ppr-popup: fixed to not throw error if ~/.ppr/pprpopup doesn't exist yet. * configure: removed * Configure: renamed to Configure_old * Configure_new: renamed to Configure, added Zlib detection. * libppr/readppd.c: added Gzip decompression using Zlib. My that was easy! Gzip decompression is important for compatibility with CUPS and GIMP-Print. * libscript/readppd.pl: added Gzip uncompression using gunzip. * ppd/indexppds.c: added code to lower case upper cased manufacturer's names when then are more than three letters long. * www/ppd_select.pl: exclude "PPR" manufacture PPD's since they aren't meant for printer queues. * ppd/generic/generic_master: added explicit warning against trying to use the PPR Generic PPD files on the print server. They are only for clients. * pprdrv/pprdrv_feedback.c: fixed bugs in Ghostscript command line parsing error detection, added detection of "RIP:" as RIP error. * pprdrv/ppr-gs.c: changed to invoke CUPS and IJS filters with their full paths rather than setting the PATH environment variable. * unixuser/ppr-xfm.sh: minor cleanup * libgu/ini_section.c, ppd/indexppds.c, fontutils/indexfonts.c: added code to copy missing sections from ppr.conf.sample to ppr.conf. * libppr/destinfo.c: added code to handle aliases and to return the PPD file for the first printer in the case of groups. * added tests/test-pprdrv/300-custom-hook.* and tests/tools/test_custom_hook. * pprdrv/pprdrv_ppop_status.c: fixed erronious display of PJL CODE2=0 as important. * www/cliconf.cgi.perl: added support for Perl/Tk interface icon. * libppr/: added inline documentation to unsafe.c, ppr_gcmd.c, stresc.c * nonppr_misc/pcre/: added and included in libgu build. * nonppr_misc/c2lib/: added and included in libgu build. * pprdrv/pprdrv_progress.c: code cleanup. * pprdrv/pprdrv_commentary.c: added PEXIT message to those written into $VAR_SPOOL_PPR/run/state_update_pprdrv. * printdesk/PPRstateupdate.pm: added suport for PEXIT. Fixed inline POD documentation. * printdesk/PPRprnstatus.pm: fixed to use PEXIT to clear the progress since other means where unreliable, especially those that relied on the timing of the arrival of messages from pprd relative to the timing of messages from pprdrv. * printdesk/ppr-panel.perl: added -d for selecting queue; added print dialog for printing files named on the ppr-panel command line so that ppr-panel can be used as a desktop drag-and-drop printing target; added menu bar to queue listing so that the printer status windows can be opened from there; made queue listing background white; made backgrounds of changing status fields in the printer status windows white as well. * Converted tab spacing from 8 to 4 in *.c, *.h, *.sh, *.perl, *.pm, *.pl, and *.tcl files. David Chappell: Maintaining 4 column indenting with 8 column tabs requires too much keyboard pounding and probably contributes to repetitive strain injury. I explored other options before taking this step, including evalutating Cooledit which does half tabs. However I finally decided not to use it because the GUI interace's is too standardness. I will just have to configure our editors to do 4 column tabs. I think I will stick with Joe for character mode and adopt e93 for when X-Windows is running. * nonppr_tcl/tclInt.h: fixed CHAR_TYPE() macro to cast argument to int before using it as an array index. This supresses a GCC warning. Who knows why GCC considers this a possible error. * nonppr_tcl/: Moved prototypes from tclEnv.c to tcl.h. * nonppr_misc/squeeze/squeeze.c: declared internal function static so that gcc -Wmissing-delarations doesn't produce warnings. * ppop/ppop_cmds_listq.c: added #warnings about y2k warnings. * Numberous fixes to the build system and ppr.spec. * Moved TCP connect code and TCP connect option parsing out of interfaces/tcpip.c and into libppr/int_tcp_connect.c so that it could be shared with interfaces/pros.c. * interfaces/pros.c: added * libppr/interfaces.c,interfaces/tcpip.c: added "socketapi", "appsocket", and "jetdirect" as aliases for the tcpip interface. Some of them have different default options. * libppr/interfaces.c: added pros, socketapi, appsocket, and jetdirect to default settings table. * www/prn_addwiz.cgi.perl: added pros, socketapi, appsocket, and jetdirect. * www/show_queues_nojs.cgi.perl: fixed test page menu item to pass the variable "name" in stead of "printer". * interfaces/usblp.c: changed the exit code for port open failures from EXIT_PRNERR_NORETRY_NO_SUCH_ADDRESS to EXIT_PRNERR_NOT_RESPONDING since the absence of the USB device file may indicate that the printer is turned off. * pprdrv/pprdrv_feedback.c: added "ERROR:" and removed "Usage: gs " from the list of massages that get passed to the printer log as possible RIP error messages. * www/: minor style fixes for buttons. * ppad/ppad_printer.c: changed human-readable "ppad show" output to better group things by category and to indent second and subsequent lines of logical groups. * nonppr_misc/openbsd/strlcpy.c,strlcat.c,strlcpy.3, gu/gu_strlcpy.c,gu_strlcat.c: added strlcpy() and strlcat(), the safer fixed-length buffer functions from OpenBSD. These will be used to replace calls to strcpy(), strcat(), strncpy(), and strncat(). * libppr/interfaces.c, ppad/ppad_group.c: fixed core dump errors when "ppad show" and "ppad group show" were used on empty printer and group configuration files. * Changed remaining (char)NULL to '\0'. This was part of an attempt to compile PPR with TCC. TCC doesn't like some of the c2lib code. * libscript/PPOP.pm: added blind detainting of values passed to --su and --proxy-for. The problem was that Perl considers the value of REMOTE_USER to be user input (which it isn't). I could have fixed this at the point at which the value is derived from REMOTE_USER, but I don't see any danger to passing tainted values to these ppop command line options. Nor can I imagine any instance in which a server would accept unverified data as a user identity. * libgu/gu_strcasecmp.c: corrected gu_strcasecmp() and gu_strncasecmp() to return positive and negative values to indicate the direction of the mismatch. This has the effect of correcting the behavior of printdesk/nbp_lookup_ali.c when run with the --gui-backend option. * libuprint/uprint_run_rfc1179.c: added hack to set SIGCHLD handling to default and clear all signal masks. Without this, wait() fails with ECHLD when lpr or lp is invoked from Acroread 5.0 for Linux. The reason is unclear. * ppop/ppop_cmds_other.c: changed "ppop status" to suppress the display of the basic SNMP-style status (such as "operational, idle") if the queue is idle (since in such a case the current status of the actual printer is unknown). * pprd/pprd_respond.c: changed jobname fed to responder to short format. * pprdrv/pprdrv_ppop_status.c:handle_ustatus_device(): added code to clear SNMP-style fault bits when the code isn't repeated in the next PJL USTATUS message. 1.52, 24 July 2003--24 September 2003. Bug Fixes * Actually removed include/version.mk which somehow didn't get removed when it was taken out of service. * makeprogs/installln.sh: fixed source existence check to work properly when installing relative symbolic links. * z_install_begin/install_create_accounts.sh: fixed missing quotes around account "$COMMENT". * libgu/ini_section.c, responders/ppr-respond.c, unixuser/ppr-followme.c: changed asprintf() to gu_asprintf(). Without this PPR wouldn't compile on systems that didn't have asprintf(). * nonppr_misc/c2lib/config.h: added include for gu.h and define to map vasprintf() to gu_vasprintf(). * www/ppr-httpd.perl: changed code to close connexion on error. (The alternative is to swallow the entity body.) * fontutils/indexfonts.c: removed message to stderr when a TTF font doesn't have a PostScript name (stored in one of its tables). Previously, if one didn't run ppr-index with --verbose, one could come away with the impression that the bad font had halted the indexing process. * z_install_begin/, makeprogs/, z_install_end/: fixed sundry build problems which broke RPM building. * libuprint/uprint-newconf.c,uprint_conf.c,uprint_private.h,uprint_conf.h, include/uprint.h: added code to ignore speculative sections and lines in uprint.conf.sample. Added notes to uprint.conf.sample which explain that the sections and lines don't do anything yet. * interfaces/smb.sh: added "-z 600000" to the smbclient command line. This changes the timeout used when waiting for the SMB server to respond. That is 600,000 milliseconds (10 minutes). The default is only 20 seconds which may not be enough if the file is very large (say 250Mbytes). It seems that on some server the close operation takes a while on such large files. Should it be a matter of concern that the -z option isn't documented? * libuprint/uprint_run_rfc1179.c: added #include . * libuprint/Makefile: added $(SOCKLIBS) to build line for uprint_rfc1179. * z_install_end/Makefile: added explicit build rule for getservbyname so that $(SOCKLIBS) could be included. * z_install_end/ppr.sh, makeprogs/scriptfixup.sh, Configure: removed all use of $NECHO (echo -n) and replaced it with echo "\c" since echo -n isn't supported on Solaris without the UCB package. * libscript/PPOP.pm: added code to launch ppop with PATH unset. * Added -R/usr/local/lib to LDFLAGS= for Solaris (both new and old) * editps/Makefile: fixed Makefile to install Qt_2.2.0. * z_install_end/install_init_scripts.sh,ppr.sh: changed Linux Initscripts stop number from 40 to 20 to conform guidelines in Initscripts documentation, fixed to convert hard links to symbolic links, init script is now considered a config file for RPM building purposes. * www/show_queues.cgi.perl: commented out the doctype declaration so that Internet Explorer 6 will go back into compatibility mode and restore the JavaScript variables which indicate how far down the window is scrolled. * www/prn_control.css,cgi_tabbed.css,show_jobs.css: refined styles to get close-to-proper button sizes, alignment, and spacing in both IE and Mozilla 1.4. * cgi_run.pl:shell_parse(): fixed bad parsing due to gready regular expression. Specifically, it couldn't parse this correctly: --feature='InputSlot=Upper' --responder-options='printed=no' --feature="Duplex=DuplexNoTumble" The gready code caused the first four single quotes to be interpreted as one quoted string with two single quotes in the middle! The code still isn't completely correct, but it does handle plausible switchsets. * ppr/ppr_main.c,libuprint/uprint-newconf.c: converted some tabs back into spaces in the --help output. * www/ppr-web.tcl: fixed the code which opens the printer control panel in Mozilla using a file in $HOME/.ppr/ to avoid the need for a singed script so that instead of simply assigning to window.location it uses window.open() with a 4th argument of true so that the control panel replaces the temporary window in the history lists. This takes advantage of an exception to the self.close() access rules. The exception says that self.close() only works if the history list is empty. * libscript/PPOP.pm: fixed so that stderr from PPOP is captured too. * z_install_end/install_inetd_conf.sh: added code to send HUP to xinetd or inetd. * www/cgi_widgets:help_button(): supressed warning if $helpdir undefined. * www/cgi_intl.pl: added $debug to control debugging level (and thereby turn off a slew of debugging messages). * www/cliconf.cgi.perl: fixed wrong page jump label on Perl/Tk icon generation page. * filter_dotmatrix/: serious bug magnified page dimensions 1440x leaving cursor way off the page. I guess no one is using this filter. Also fixed bug which prevented similtanious bold and italic from working. Fixed so that setting left or right margin forces current position inside the new margin. Fixed so that setting page skip forces current position inside top margin. See below for enhancements. * ppop/ppop_cmds_other.c:ppop_dest(): fixed incorrect test which prevented the aliases from being displayed. Misc. Added Material * added nonppr_vendors/ppd_hp/"HP LaserJet 2300 PS". * libgu/gu_exceptions.c: added. This is intended to eventually replace cexcept.h and libppr_exception(). * editps/Qt_3.1.1 Misc. Removed Material * nonppr_misc/c2lib/mathvec.[ch]: Removed since we will not be doing 3D graphics. * Configure_old: Removed since we aren't testing it anymore. * nonppr_vendors/procset_adobe/AdobePS_Win_Driver_L2-4.2-0: removed since, if it is still needed, it should be repackaged with Adobe drivers, if it is needed at all. It probably isn't since -S currently defaults to false. * nonppr_vendors/procset_adobe/Adobe_Win_Driver-2-0: same as above, but this one is absurdly old too. * nonppr_vendors/procset_apple/"AppleDict md-71-0": removed. This was a bad hack. Most of the drivers involved are probably long dead. * ppuser/ppuser.c: removed authcode subcommand. * tests/misc_old: removed several files. Misc. Enhancements * makeprogs/installln.sh,installprog.sh: added code to write commands that fail because not running as root to ../root.sh (if it exists, otherwise the error is still a fatal one). The current RPM specfile uses this feature. * libppr/query.c: changed to use new exception handing. (It was OK to make this change since the code in query.c isn't used yet. * www/prn_control.cgi.perl: now prints large byte counts in kilobytes or megabytes. * ppad/ppad_media.c: added code to create media database if it doesn't already exist. * z_install_end/ppr.sh: added support for additional commands as recommended by Linux Initscripts documentation. * z_install_end/install_inetd_conf.sh: for Xinetd, add /etc/xinetd.d and the reference to it in /etc/xinetd.conf if it doesn't already exist. * makeproge/installconf.sh: change to allow specifying of the owner, group, and permissions. This means that it can now be used to register the PPR init script. * www/prn_properties.cgi.perl,prn_properties.en.html: added new help topics. * Many new Russian messages, though most remain untranslated and the quality of the completed work is probably poor. * www/cgi_tabbed.pl,cgi_wizard.pl: enabled snap-to-size code after changing it to run only on the first time. This should take care of the a-few-pixels-at-a-time creap problems which was why the code was disabled. * www/show_queus.cgi.perl: added target="_blank" to tags that try to open a new window using JavaScript. This makes the no-JavaScript behavior more like the behavior with JavaScript. * filter_dotmatrix: furthur i18n, omit all-blank graphics except as spacing * tests/test-filters/300-filter_dotmatrix.run,.ok: added * filter_dotmatrix/: added support for charsets.conf and fonts.conf. All character sets supported by filter_lp are now supported by filter_dotmatrix too. Internet Printing Protocol Work * ppr/ppr_main.c: added --print-id-to-fd. This will be used by the IPP server to get the job ID. * www/ppr-httpd.perl: added --root-xlate. This allows us to set up a server whose root is one CGI script, such as cgi-bin/ipp/. This is necessary because IPP clients designed for CUPS expect to be able to send IPP requests to the root. * ipp/: switched exception handling to new implementation * ipp/ipp_util.c: got code working * ipp/ipp.c: added do_print_job() and dummy functions for some other operations. This is sufficient for basic printing. 1.53a1, 24 September 2003--16 March 2004. * z_install_end/: fixed minor RPM build problems. * Did global search-and-replace to change setlocale(LC_MESSAGES, "") to setlocale(LC_ALL, ""). * libgu/gu_sscanf.c: added %f, replaced isdigit() with own function that returns true only for ASCII digits. Added note to documentation to the effect that we don't intend this function to support locales since the purpose of the function is to read configuration and queue files. * libppr/readqfile.c: changed sscanf() calls that read floats to gu_sscanf() calls. * docs/*/Makefile: removed PostScript versions of documents from the list of things built and installed. PostScript generated by HTMLDOC was just too big when it contained color images. Unless people report that it is a problem for them to print the PDF versions, this will be considered a solution. * Converted SNMP code and tcpip interface to new exception handling, got rid of old exception handling. Also added code to prevent running off the end of the packet if the packet contains invalid field length values. * pprd/pprd_queue.c: converted to new exception handing. * libppr/gnodename.c: added code to read ppr.conf [network] nodename= first as a way to deal with systems whose nodenames change due to dial-up networking. * Added "ppad ppdq" and "ppad ppd query". This work included debugging and improvements in libppr/query.c and the addition of ppad/ppad_ppd.c. * www/test_components.cgi.perl: supplied internal PATH since security changes in recent Perl releases left many of the tests non-functional due to the lack of a PATH. * moved include/ppr_query.h to libppr_query.h. * libppr/int_cmdline.c: added detection of --probe option * interfaces/tcpip.c,lpr.c: added support for --probe; added "%%[ PPR address lookup ]%%" message so that "ppad ppdq" will extend its timeout. * interfaces/atalk_ali.c,atalk_cap.c,clispool.c,dummy.sh,pros.c, serial.c,simple.sh,smb.sh: added code to detect --probe and say it isn't supported. * interfaces/parallel.c,usblp.c: added --probe support * pprdrv/pprdrv_feedback.c,pprdrv_ppop_status.c,ppop/ppop_cmds_other.c: added support for "%%[ PPR address lookup ]%%". * interfaces/serial.c,parallel.c: added "%%[ PPR connecting ]%%" and "%%[ PPR connected ]%%". * filters_misc/jpeg.sh: fixed parsing of colour= option. * filters_misc/html_htmldoc.sh: added colour=, charset=, and level= options. * po/ru-PPR.po, ru-PPRWWW.po: added and corrected translations. * pprdrv/ppr-gs.c: added check to see if there is a usable /dev/fd/3 before using cat. (This is from foomatic-gswrapper. It also uses the cat trick. It looks like ideas are flowing in both directions.) * libppr/writeqfile.c: changed code that used fprintf() to print a float to code that uses gu_dtostr() in order to get around locale problems. * pprdrv/pprdrv_ppd_parse.l: removed * pprdrv/pprdrv_ppd.c: removed support for old lexer. * libppr/options.c: changed uses of strncpy() and gu_StrCopyMax() to gu_strlcpy(). * pprdrv/pprdrv_ppop_status.c: changed uses of gu_StrCopyMax() to gu_strlcpy(). * libgu/gu_StrCopyMax.c,gu_StrAppendMax.c: removed since are almost identical in fuction to gu_strlcpy() and gu_strlcat(). * libgu/gu_pch.c: removed since never finished, c2lib provides Perl-compatible hashes, we can always get this file out of CVS if we want to finish it. * libppr/enc2font.c,pprdrv/pprdrv_lw_messages.c,pprdrv/pprdrv_pjl_messages.c: eliminated use of gu_trim_whitespace_right(). * libgu/gu_trim.c: removed since it has fallen into disuse since gu_getline() was added to the library. * libgu/gu_strsep.c,gu_strsep2.c: fixed handling of last field to conform to BSD. The last field needn't be terminated by a delimiter. * www/prn_properties.cgi.perl,ppd_select.pl,cgi_run.pl: added support for PPD file selection by printer probing. * libscripts/readppd.pl,libppr/readppd.c,ppad/ppad_printer.c,pprdrv/pprdrv.c: Added support for finding PPD files by their indexed ModelName. * libppr/ppr_gcmd.c: changed to remove trailing whitespace. * Makefile: added uprint and uprint-install build targets. This is a first step toward a uprint-only distribution. * libuprint/,uprint/: removed dependencies on libppr. * www/show_queues*: redid popup menu so that all popup menus are pre-generated HTML at the bottom of the page. In browsers that support CSS and JavaScript, then are hidden. Clicking on an icon unhides the cooresponding menu and moves it to a position under the cursor. * www/show_queues*: created an alternative menu bar for advanced browsers such as Mozilla, Konqueror, and Opera. * www/show_queues.en.html,show_queues.ru.html: added placeholder files. * www/show_jobs*: added a version of the new menu bar previously written for show_queues.cgi. * www/cgi_user_agent.pl: new module which parses the HTTP_USER_AGENT variable and attempts to make inferences about questions such as whether the brower supports images or CSS :hover. * www/shared.css: added as a central file for shared CSS styles, moved material from other CSS files. * www/test-css.html: added as a place to try out style posibilities and as a way of testing browsers. * ppr/ppr_res.c:rationalize_resources(): fixed two places where ! was used in place of ~. The result was that if a document declared a resource supplied when it should have declared it as needed and had an include for it, no record for it would be included in the queue file and the job would be arrested when pprdrv got to the %%IncludeResource line. PageMaker 7.0 exposed this bug. Also, rewrote many of the warning messages in this function in order to improve their clarity. * www/prn_control.cgi.perl: added table borders for browsers without CSS. * www/cgi_back.pl: replaced meta-refresh document with call to cgi_redirect.pl. * www/cgi_tabbed.pl: moved the 'prop open' image into its own table cell since so many browsers don't implement align="left". * papd/: changed code to use the new queueinfo_*() functions. * ppr/ppr_conffile.c: fixed parsing so that it takes the last instance of a configuration line as described in the Hacker's Guide. * ppd/indexppds.c: moved two PPD file related functions to libppr/readppd.c. * libgu/gu_throw.c: removed this file and modified all programs which defined their own libppr_throw() to wrap main(). That is the last of the old library exception handling. We have finally eliminated callback library error handling! * cron/ppr-clean.perl: fixed so works again. It was appearently broken by the partial renaming of some of the file handles. * libppr/readppd.c: added object-oriented version of the PPD file reading functions. The old ones should be phased out. * ppad/: changed "ppad ppd" subcommand group to "ppad ppdlib" since there is a "ppad ppd" command with which the group clashed. * ppad/: added "ppad ppdlib get". * libppr/queueinfo.c: fleshed out functions. * Makefile: added papd/ to the list of directories built. * z_install_end/ppr.sh: added papd to the list of daemons started. * Makefile, makeprogs/symlinks_save.sh: changed so that all of the links will be regenerated every time. Unfortunately, this means that files with which some editor may have replaced the link will be silently deleted. * ppad/ppad_group.c:group_addon(): fixed bug which caused omision of the value for "ppad group addon" to be tagged as too many parameters (this was fixed some time ago for "ppad addon". * ppad/: moved all ppad_filt.c stuff which ../libppr/queueinfo.c couldn't yet do into the latter, adjusted all of the subcommands to queueinfo, deleted ppad_filter.c. * cron/ppr-index.c: added check to make sure that only indexers on the approved list are run. This is important because ppr-index is setuid and setgid ppr and so could have been used by ordinary users to interfer with the operation of the spooler. * lprsrv/lprsrv_conf.c: added [/filename] section support. * lprsrv/lprsrv.conf.sample: improved documentation and added sample [/filename] section. * lprsrv/lprsrv_print.c: changed open() call for logging the output of ppr, lp, lpr, etc. so that it is allowed to create the log file. On Starbase this bug produced a silent failure. This may indicate another bug. * lprsrv/lprsrv_print.c: removed clipcopy() and changed all calls to it to call gu_strlcpy() in its stead. * samba/ppr2samba.c: added queue aliases support (by converting to the new queueinfo code). * pprd/pprd_mainsup.c: changed control FIFO permissions from 0600 to 0660 so that the IPP CGI can connect. * ipp/: moved ipp_utils.h into ../include/, ipp_utils.c into ../libppr/, and ipp_constants.h into ../include/. * pprd/pprd_ipp.c: added and hooked up to FIFO message handler. * Changed queue file format to break up Attr line into multiple Attr- lines and to add a section for IPP attributes. * ipp/ipp.c: added ability to pass selected IPP requests through to pprd. * pprd/pprd_ipp.c: added handlers for queue listing, listing printers, and listing groups. 1.53a2, 20 February 2004--21 September 2004. Note: During a2's rather long life, many users downloaded it from CVS. By the end of its life, the code was of at least beta quality. For this reason, no final tarball was released. * Put in a request for removal of junk and corrupt entries from the Sourceforge.net CVS repository. Added www/images/cliconf1.png once is was fulfilled. * ppop/ppop_cmds_other.c:ppop_cancel(): fixed so that exit code is EXIT_NOTFOUND if no jobs were found to delete. * www/cgi_error.pl: added code to present the message using alert() if window.open() fails. * po/: added some Russian translations. * ppr/ppr_respond.c: fixed mixup between ppr_uid and ppr_gid in setregid() call. * misc/papsrv_conf_to_papd.perl: Made a script to convert papsrv.conf to "ppad addon papname" commands. * www/cgi_intl.pl: fixed bugs in language selection related to the differences between HTTP and GNU Gettext language codes. * po/: renamed fr to fr_FR and ru to ru_RU. * www/df_html.cgi.perl: fixed a problem with the fact that GNU df wraps lines if the device node path is too long. * lprsrv/olprsrv.c: dropt since it has long been obsolete and nobody on the PPR mailing list begged mercy for it. * www/shared.css: reduced size of menubar font from 12pt to 10pt and put "Helvetica" in front of sans-serif for page-wide default font. * www/prn_addwiz.cgi.perl: added support for network browers to Add Printer wizard. * www/prn_addwiz.perl: added support for auto-detection of printer type and selection of PPD file. * browsers/atalk.tcl: improved to group names on the same printer * browsers/ip_scan_snmp.c: added * lprsrv/: added "force mail" option for lprsrv.conf. * libgu/gu_psprintf.c: added file. It contains a very minimul printf() designed to embed strings, decimal numbers, and floating point numbers without regard to locale. It is intended for generating PostScript code. * filter_lp/filter_lp.c: changed all printf() calls to gu_psprintf() calls (which included removing the precision specifiers) because the former uses local-specific decimal separators which PostScript doesn't understand. Examined and accepted the resulting changes in the regression test output. * tests/test-ppr/401-duplex.ok: added * filter_dotmatrix/: converted to use gu_psprintf(). * po/install_mo.sh: added chown/chgrp calls. * www/ppr-web.tcl: added code to create ~/.ppr/ if it doesn't already exist. * libgu/gu_isdigit.c: extracted from gu_sscanf.c. * libppr/dimens.c: fixed to parse floating point numbers with a period decimal separator using gu_sscanf() if strtod() doesn't consume all of the digits. * www/test_components.cgi.perl: added tests for ijsgimpprint and hpijs. * misc/ppr-testpage.c: changed printf() to gu_psprintf(). * www/show_jobs.cgi.perl: renamed the [Cancel] button to [Delete] since that is more in accord with GUI conventions. However, the old name is still recognized in controls= lists. Removed support for disabling Close and Refresh. Added support for disabling the Tools and Window menus. Added POD documentation. * www/prn_addwiz.cgi.perl: split LPR and PROS screens, split JetDirect screen from all of the other tcpip variants. * removed: printdesk/ATChooser.pm, printdesk/ppr-chooser.perl, z_install_end/install_atalk_links.tcl * moved from printdesk/ to browsers/: nbp_lookup_cap.c, nbp_lookup_ali.c * www/test_components.cgi.perl: changed "Required" column to "Role" and wrote role descriptions for all of the packages. * ppad/ppad_ppd.c: fixed crash bug due to failure to clear all members of structure which contains gathered information about the printer. * www/ppr-web.tcl: adjusted sizes of Mozilla windows. * www/show_jobs.cgi.perl: reduced table width from 100% to 99% to avoid unnecessary horizontal scrollbar in Mozilla. * www/prn_properties.cgi.perl: fixed problem with syncronization of the text entry field and the select box on the PPD tab (this entailed changes to cgi_tabbed.pl (adding 'sync') as well). * www/prn_properties.cgi.perl, prn_addwiz.cgi.perl: added detection of auto detection failures. * www/show_jobs.cgi.perl: added full scrolling table implementation (which works only in Mozilla 1.6 and later). * z_install_end/ppr.sh: fixed "ppr status" so it uses "kill -0" rather than simply "kill". Also fixed code which extracts date from the output of ls to use awk to get the fifth and sixth fields rather than those columns which contain the date and time in the US-English output. Also added support for /etc/defaults/ppr. So far the only setting is LPRSRV_STANDALONE_PORT. * papd/papd_login_aufs.c, papd_login_rbi.c: added. * papd/ppad_ali.c: changed at_reply_eoj() to send EOF on the last packet rather than in a separate empty packet. * ppr/ppr_infile.c: added code (tied into ppr_main.c:reapchild()) so that the responder will print the name of the filter that failed. * ppr/ppr_infile.c: added support for automatically decompressing bzip2ed files. * Configure: added code to create config.h so that we can begin to simply the way Configure passes its results to C code. Converted the GUNZIP, COMPRESS, BUNZIP2 options to use it. We include config.h in global_defines.h. * ppr/ppr_infile.c: added PCL3GUI (HP Inkjet printer language) to recognized file types. The name is in the table in upper case because it eventually is copied into the @PJL ENTER LANGUAGE command. The DeskJet 882C only recognizes it if it is in upper case. * libgu/ini_section.c:gu_ini_section_load(): fixed bug whereby a nameless value which began in column one would be read as empty. * ppad/ppad_ppd.c: improved code so it doesn't print fuzzy matches if there is at least one exact match (except in test mode where it still prints all matches). * libgu/gu_sscanf.c: fixed %f (patch from Jan Kohnert) * ppad/ppad_printer.c, pprd/pprd_load.c, pprdrv/pprdrv.c: changed from sscanf() to gu_sscanf() for reading "Charge:" lines in the printer configuration files. (patch from Jan Kohnert) * ppuser.c: added parse_float() and used it instead of sscanf() with %f. It tries first using strtof() and then tries gu_sscanf() with %f. * ppuser/ppuser.c:ppuser_show() changed use locale's date format (patch from Jan Kohnert) * ppop/ppop_cmds_listq.c: improvements to use of locale's date and time formats (based on patch from Jan Kohnert) * filter_dotmatrix/main.c: Fixed level= option to accept values higher than 2 as equivelent to 2. (Previously it only accepted 1 and 2 which meant that the whole filter failed for PostScript level 3 printers.) * interfaces/pros.c: fixed a number of bugs which caused the interface to disconnect without sending EOJ. Added code to print "%%[ status: busy ]%%" when fault conditions are cleared. * pprdrv/pprdrv_ppop_status.c:handle_lw_status() fixed nasty bug in the testing of the return code of translate_lw_status() which made lw-messages.conf useless. * pprdrv/pprdrv_ppop_status.c:handle_lw_status(): added code to clear hrDetectedErrorState fields incompatible with printing when hrPrinterStatus is printing(4). * pprdrv/lw-messages.conf: filled in many of the missing hrDeviceStatus and hrPrinterStatus fields with plausible-seeming values. * ppr/ppr_main.c: corrected --help output to indicate that -R copies is the default. * Added libppr/query_wrapper.c and changed libppr/query.c to use it. * z_install_end/install_bin_links.sh: added link for ppr-testpage. * ppad/: renamed "ppad ppdlib list" to "ppad ppdlib search". * pprdrv/pprdrv_ppd.c, ppad/ppad_printer.c: removed code to add -r option with default resolutions to Ghostscript options derived from *cupsFilter lines. * removed nonppr_vendors/ppd_hp/ HP Color LaserJet 4500 HP LaserJet 4000 Series HP LaserJet 4050 Series HP LaserJet 6P HP LaserJet 8100 Series HP LaserJet 8150 Series HP Color LaserJet HP LaserJet 2100 Series HP LaserJet 4 Plus HP LaserJet 5Si HP LaserJet 8000 Series HP LaserJet 2300 PS They have been added to z_install_end/fixup_obsolete.sh. * Removed nonppr_vendors/ppd_adobe/ HP LaserJet 4Si 4SiMX PS 300DPI HP LaserJet 4Si 4SiMX PS 600DPI Note that there are two versions of this file for no very solid reason and that the ModelName contains a slash, hence the filename is different from the modelname (which breaks the old PPR practice for naming PPD files). Just in case someone is using it on an existing installation, then weren't added to z_install_end/fixup_obsolete.sh. * added nonppr_vendors/ppd_hp/ hpc9500s.ppd /ppd_hp_mit/ HP PPD files from Debian hp-ppd package (which appears to come from the same source as the files on www.linuxprinting.org). The are MIT licenced. /ppd_canon/ EFNC9111.PPD * nonppr_tcl/tclUnixUtil.c: changed vfork() to fork(). * pprdrv/pprdrv_buf.c:printer_flush(): added code to handle EAGAIN from write(). (Problem showed up on IRIX 6.5.) * ppuser/ppuser.c: changed call to strtof() to call to (float)strtod() because strtof() is part of C99 whereas strtod() is part of C89. * misc/ppr-testpage.c: added --test-spoked; reduced default --eps-scale to 0.4. * libscripts/readppd.pl: ppd_open() now returns the name of the PPD file which it opened. * www/cgi_run.pl: added run_pipeline() * www/prn_testpage.cgi.perl: added support for --test-spoked; changed from run() to the new run_pipeline(); added [Back] button on the last page so that one may go back, choose new options, and print another test page; changed scaling factor for Ghostscript test pages to 0.25; added additional Ghostscript test pages. * samba/ppr2samba.c: changed message produced by --nocreate when smb-include.conf is absent to make it clearer that it is not an error message. * www/*_addwiz.cgi.perl: added code to save routines to stop after the first error; also added code to clearly indicate whether the operation succeeded or failed. * www/prn_properties.cgi.perl: same change to save routine. * z_install_end/install_inetd_conf.sh: added check for Inetd at /usr/etc/inetd. (This is the wierd location used by some early System V TCP/IP implementations.) * libgu/wordwrap.c: added gu_wrap_printf() and gu_wrap_eprintf(). * samba/ppr2samba.c: converted to use gu_wrap_ functions mentioned above. * libuprint/uprint_obj.c, lprsrv/lprsrv_print.c: fixed so that if multiple copies aren't selected (such as via "lpr -n 2"), no attempt is made to set the number of copies in the print command that is finally run. Previously it would run ppr with the option "-n 1" option which broke the multiple copies facility of MacOS X since it used "%%Requirements: numcopies(2)" to test the copies count rather than the LPR/LPD mechanism. (Many thanks to Francisco Gonzalez of UC Davis for doing the legwork required to narrow this problem down.) * z_install_end/install_bin_links.sh: added ppr-index. * ppad/,ppr/: applied typo patches from Jan Kohnert. * tests/test-filters/300-filter_dotmatrix.ok: accepted changes resulting from bug fixes and removal of meaningless extra zeros after the decimal point in floating-point numbers. * test/test-pprdrv/102-ppd-comprehensive.ok: accepted changes caused by replacing the HP 4000 PPD file. * ppad/ppad_printer.c: fixed "ppad ppdopts" so that it works even if the installable options don't have names that begin with "*Option". * libppr/get_device_id.c: created to hold code moved out of interfaces/usblp.c. * browsers/usb.c: added; it produces addresses specifying manufacturer, model, and serial number in preference to the names of actual nodes in /dev/ whenever possible. * interfaces/usblp.c: renamed to usb.c; old name added to fixup_obsolete.sh; added support for new addresses generated by browers/usb.c. * ppr/ppr_conffile.c: altered behavior of alias switchsets so that they inherit from the printer or group. * pprdrv/pprdrv_feedback.c: added clauses to swallow "DEBUG:" and "DEBUG2:" lines from CUPS raster filters. * libppr/int_copy_job.c: added init_string parameter. * interfaces/usb.c: added init= to set an init string. At the moment, the EPSON USB init string is the only one supported. * libppr/int_copy_job.c: added code to abort if select() says the printer is ready to receive data ten times in a row when write() says it isn't. The Linux 2.6.4 USBLP driver is defective and does this. What is more, write() actually sends the data! The result is pages and pages of gibberish. This code is intended to turn a frustrating malfunction which casts suspicion in all the wrong directions into an identifiable error condition. * www/ppr-passwd.c: added more memset() calls to zero out even rejected and incorrectly typed passwords as soon as possible so that they are less likely to be swapped out. * editps/Windows_XP: added 1.53b1, 22 September 2004--13 October 2004 * added debian/Makefile, removed some of the unnecessary files from debian/. * added uprint/uprint-lpc.c. 1.53, 5 October 2004--11 December 2004 * z_install_end/ppr.sh: added code it bail out if PPR is no longer installed. This is needed because initscripts are considered configuration files in Debian and aren't automatically deleted with the package. * editps/editps.conf: adjusted Mozilla 1.6 rule to include Mozilla 1.7. * libppr/readppd.c: removed extra newline from message about missing PPD file. This was messing up the load fucntion in www/prn_properties.cgi.perl. * docs/Makefile: changed "make" to "$(MAKE)". * updated the German translation to curent CVS. * pprd/pprd_ipp.c, ipp/ipp.c: move temporary files into TEMPDIR"/ppr-ipp" so that ipp.c can deleted them even if /tmp is has the sticky bit set. * papsrv/: fixed to work with the new PPD naming scheme and to tolerate carriage returns in PPD files. * editps/: Applied Acroread "ProcSet" vs. "procset" bug fix to Windows_* and Adobe_NT_5.0. * ipp/ipp.c:do_get_default(): changed so that rather than return "default" it opens /etc/ppr/aliases/default and returns the name of the actual printer or group. * papsrv/papsrv_query.c, papd/papd_query.c: fixed handling of %%?End without %%?Begin. * ppr/ppr_infile.c: added recognition of JPEG Exif magic number, removed references to JFIF from the messages. * Makefile cleanup using $^. Most OBJ= constructs were eliminated. This means that some old versions of Make will not work. * www/cgi_run.pl: fix to flush buffers before fork() (implied by open()). This supposedly happens automatically in Perl 5.6 and later, but doesn't seem to work until 5.8.x. * libppr/ipp_utils.c, include/ipp_constants.h, include/ipp_utils.h, pprd/pprd_ipp.c, ipp/ipp.c: greatly expanded IPP support. * www/ppr-httpd.perl: added --inetd-port, --ipp; fixed --root-xlate to remove the translated root drirectory from SCRIPT_NAME when running CGI scripts. 1.54, 11 December 2004--11 April 2006 * samba/ppd2win95drv.perl: removed * samba/ppd2windrv.perl: fixed to work with indexed PPD files. * www/ppr-passwd.c: fixed --delete * z_install_end/install_inetd_conf.sh: fixed broken Xinetd config file * browsers/usb.c: fixed discrepancy between the name of the single "zone" listed and the zone name accepted for browsing. * misc/ppr-sync.sh: changed papsrv_kill to papsrv --stop. * papd/papd.c: added missing error() function. * Fixes for proper accounting of documents with Windows XP N-Up turned on. This includes a change in the queue file format, ppr, pprdrv, and editps/Windows_XP. * ppr/ppr_dscdoc.c: quick hack to let EPS files print on printers with a charge even if they don't have a "%%Pages:" or "%%Page:" comment. * ppr/ppr-chooser.perl: removed (it was supposedly removed in 1.53a2) * pprd/pprd_ppop.c: ppop_move(): fixed bug which caused the message about the job being moved to go into the -barbar file instead of the -log file. * Configure: fixed so that preprocessor flags for GCC are once again included. * libscript/Makefile: added code to build interfaces.tcl. * interfaces/smb.sh: removed; interfaces/smb.tcl: backported from 2.XX branch. * pprdrv/pprdrv.h: moved struct Media_Xlate definition to make GCC 4.0 happy. * filter_dotmatrix/prop.c: fixed spurious declaration of global variable as static. * libppr/readppd.c: wasn't closing ppdindex.db. * libppr/int_copy_job.c: changed handling of bad select() to require administrator to turn off feedback; run in blocking mode if feedback is off; this should provide a better workaround for lame port drivers which don't implement select(); added syscall[] and fd arguments to the printer error callback. (backport from 2.XX branch) * interfaces/parallel*: moved printer error callback into the system- dependent part (parallell_generic.c and parallel_linux.c) and kept the Linux errno interpretation only in the latter, added code to deal with ENOSPC and EIO during write(). (backport from 2.XX branch) * interfaces/usb.c: added a table of init strings. (backport from 2.XX branch) * ppad/ppad_media.c: access check was missing from "media delete". (Bug was discovered during code overhaul in 2.XX branch.) * z_install_end/ppr.sh: added code to create our rundir (for when /var/run is a tmpfs). (backport from 2.XX branch)