[Pkg-cups-devel] r295 - in cupsys/branches/cups-1.2/debian: .

Kenshi Muto kmuto at costa.debian.org
Wed Jul 19 02:23:19 UTC 2006


Author: kmuto
Date: Wed Jul 19 02:23:15 2006
New Revision: 295

Added:
   cupsys/branches/cups-1.2/debian/patches/00_r5754.dpatch   (contents, props changed)
   cupsys/branches/cups-1.2/debian/patches/58_fixdestc.dpatch   (contents, props changed)
   cupsys/branches/cups-1.2/debian/patches/59_de_docroot.dpatch   (contents, props changed)
Removed:
   cupsys/branches/cups-1.2/debian/patches/00_r5743.dpatch
Modified:
   cupsys/branches/cups-1.2/debian/changelog
   cupsys/branches/cups-1.2/debian/patches/00list
   cupsys/branches/cups-1.2/debian/rules

Log:
takes r5754. 58_fixdestc (solves build failure) and 59_de_docroot (install new German index.html and images) are needed for this upstream version.

Modified: cupsys/branches/cups-1.2/debian/changelog
==============================================================================
--- cupsys/branches/cups-1.2/debian/changelog	(original)
+++ cupsys/branches/cups-1.2/debian/changelog	Wed Jul 19 02:23:15 2006
@@ -3,10 +3,8 @@
   [Kenshi Muto]
   * Bug, bug, bug, ... our BTS is tainted by duplicate bugs like flood.
   * Include changelogs during 1.1.23-13 - 1.1.23-15. (closes: #374494)
-  * Apply upstream svn change r5743.
-  * 56_cupsaddsmb: avoid infinite loop when connect with Samba fails
-    by something reasons. (closes: #376232)
-    This patch fixes missing localized message.
+  * Apply upstream svn change r5754.
+  * 58_fixdestc: avoid build failure of r5754 (add ipp-private.h include).
   * Add snmp to backend choices. Because I don't make sure this backend
     is stable, the default is disabled. Use dpkg-reconfigure cupsys to
     enable. (closes: #376496)

Added: cupsys/branches/cups-1.2/debian/patches/00_r5754.dpatch
==============================================================================
--- (empty file)
+++ cupsys/branches/cups-1.2/debian/patches/00_r5754.dpatch	Wed Jul 19 02:23:15 2006
@@ -0,0 +1,16503 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 00_r5754.dpatch by Kenshi Muto <kmuto at debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: No description.
+
+ at DPATCH@
+diff -urNad cupsys-1.2.1~/CHANGES.txt cupsys-1.2.1/CHANGES.txt
+--- cupsys-1.2.1~/CHANGES.txt	2006-07-19 00:38:00.000000000 +0000
++++ cupsys-1.2.1/CHANGES.txt	2006-07-19 00:40:14.000000000 +0000
+@@ -1,8 +1,151 @@
+-CHANGES.txt - 2006-05-22
++CHANGES.txt - 2006-07-18
+ ------------------------
+ 
++CHANGES IN CUPS V1.2.2
++
++	- Documentation updates (STR #1765, STR #1780)
++	- CUPS didn't know about alternate character set names
++	  for Asian text (STR #1819)
++	- The lpoptions -o and -r options did not work unless you
++	  specified a printer.
++	- The lpoptions command incorrectly allowed users to set
++	  printer attributes like printer-type (STR #1791)
++	- httpWait() did not flush the write buffer, causing "bad
++	  request" errors when communicating with CUPS 1.1.x
++	  servers (STR #1717)
++	- Polling did not sanitize the printer description,
++	  location, or make and model strings like broadcasts
++	  did.
++	- Polled printers did not show the server's default
++	  job-sheets option value.
++	- The Samba password prompt was not properly localized
++	  (STR #1814)
++	- Added a German translation (STR #1842)
++	- The scheduler now creates self-signed SSL certficates
++	  automatically when using OpenSSL and CDSA for
++	  encryption, just as for GNU TLS.
++	- The SNMP backend sporatically reported some printers as
++	  "unknown" (STR #1774)
++	- The scheduler now forces BrowseTimeout to be at least
++	  twice the BrowseInterval value and non-zero to avoid
++	  common configuration errors.
++	- The scheduler incorrectly returned printer URIs of the
++	  form "ipp://server/printers/classname" for classes (STR
++	  #1813)
++	- Updated Japanese localization (STR #1805)
++	- The scheduler's SSL certificate/key directory was not
++	  created on installation (STR #1788)
++	- Added a mailto.conf man page and help page (STR #1754)
++	- The parallel and USB backends no longer wait for the
++	  printer to go on-line - this caused problems with
++	  certain printers that don't follow with the IEEE-1284
++	  standard (STR #1738)
++	- The scheduler could crash on a reload when implicit
++	  classes were present (STR #1828)
++	- The IPP backend incorrectly used the CUPS_ENCRYPTION
++	  environment variable to determine the default
++	  encryption mode when printing (STR #1820)
++	- USB printing did not work on Solaris (STR #1756)
++	- The scheduler sorted job priorities in the wrong order
++	  (STR #1811)
++	- The scheduler did not automatically restart notifiers
++	  that exited or crashed (STR #1793)
++	- IPv6 support did not work on NetBSD (STR #1834)
++	- The EPM packaging file did not work (STR #1804)
++	- The scheduler used up the CPU if BrowseRemoteProtocols
++	  was empty (STR #1792)
++	- Custom page sizes did not work (STR #1787)
++	- The SNMP backend could crash on some systems when SNMP
++	  logging was enabled (STR #1789)
++	- Browsing could produce some funny printer names when
++	  ServerName was set to an IP address (STR #1799)
++	- Fixed the log message for BrowseRelay (STR #1798)
++	- Fixes to allow CUPS to compile on MirBSD (STR #1796)
++	- The scheduler incorrectly set the FINAL_CONTENT_TYPE
++	  environment variable (STR #1795)
++	- The pdftops filter incorrectly embedded a "produced by"
++	  comment, causing PDF printing not to work on some
++	  operating systems (STR #1801)
++	- Sending raw jobs from a client system could cause the
++	  client's scheduler to eventually crash (STR #1786)
++	- The scheduler now checks that the notifier exists prior
++	  to accepting a new subscription request.
++	- The scheduler now reports the supported
++	  notify-recipient schemes based on the contents of the
++	  ServerBin/notifier directory.
++	- Event notifications did not include the
++	  notify-sequence-number or other required attributes
++	  (STR #1747)
++	- Allow/Deny addresses of the form "11.22.33.*" did not
++	  work on Linux (STR #1769)
++	- cupsGetPPD() did not work if the scheduler was only
++	  listening on a domain socket (STR #1766)
++	- The scheduler could crash advertising a class (STR
++	  #1768)
++	- The scheduler could crash if the default printer was
++	  deleted (STR #1776)
++	- Added a new default CUPS raster format (v3) which does
++	  not compress the raster stream in order to provide the
++	  same cupsRasterReadPixels() and cupsRasterWritePixels()
++	  performance as CUPS 1.1.x.
++	- The cupsaddsmb man page listed the wrong files for the
++	  CUPS driver.
++	- Some configure --with options did not work (STR #1746)
++	- "Allow @IF(name)" didn't work if "name" wasn't the
++	  first network interface (STR #1758)
++	- The lpstat command did not use the correct character
++	  set when reporting the date and time (STR #1751)
++	- The cupsaddsmb command and web interface did not update
++	  the Windows PPD files properly, resulting in corrupt
++	  PPD files for the Windows client to use (STR #1750)
++	- The cupsd.conf man page didn't describe the Listen
++	  domain socket syntax (STR #1753)
++	- The scheduler no longer tries to support more than
++	  FD_SETSIZE file descriptors.
++	- CDSA (encryption) support fixes for MacOS X.
++	- The lppasswd program needs to be setuid to root to
++	  create and update the /etc/cups/passwd.md5 file (STR
++	  #1735)
++	- 32/64-bit library installation was broken (STR #1741)
++	- The USB backend now reports a "no such device" error
++	  when using the old filename-based USB URIs instead of
++	  the "success" error.
++	- Increased the HTTP and IPP read timeouts to 10 seconds,
++	  as 1 second was too short on congested networks (STR
++	  #1719)
++	- The SNMP backend now uses the device description over
++	  the printer-make-and-model attribute when the attribute
++	  contains a generic name (STR #1728)
++	- Fixed another file descriptor leak when printing raw
++	  files (STR #1736)
++	- Raw queues were not shared via LDAP (STR #1739)
++	- The pstops filter didn't always embed PageSetup
++	  commands from the PPD file (STR #1740)
++	- "make install" didn't work if you disabled all of the
++	  localizations.
++	- The scheduler didn't always choose the least costly
++	  filter.
++	- Fixed parsing of IPv6 addresses in Allow, Deny,
++	  BrowseAllow, BrowseDeny, and BrowseRelay directives
++	  (STR #1713)
++	- Printers that were shared via LDAP did not get added to
++	  the LDAP server properly (STR #1733)
++	- LDAP browsing would crash the scheduler if a required
++	  value was missing (STR #1731)
++	- Special cases for the "localhost" hostname did not
++	  work, causing printing to not work when the /etc/hosts
++	  file did not contain a localhost entry (STR #1723)
++	- Updated the Spanish translation (STR #1720, STR #1770)
++	- Reverse-order page output was broken when N-up or
++	  landscape orientations were used (STR #1725)
++	- The parallel, serial, socket, and USB backends needed
++	  print data before they would report back-channel data,
++	  causing problems with several new drivers (STR #1724)
++
++
+ CHANGES IN CUPS V1.2.1
+ 
++	- "lprm -h hostname" did not work (STR #1800)
+ 	- The web interface did not handle reloads properly for
+ 	  MSIE (STR #1716)
+ 	- The configure script no longer adds linker rpath
+diff -urNad cupsys-1.2.1~/Makedefs.in cupsys-1.2.1/Makedefs.in
+--- cupsys-1.2.1~/Makedefs.in	2006-07-19 00:38:00.000000000 +0000
++++ cupsys-1.2.1/Makedefs.in	2006-07-19 00:45:04.000000000 +0000
+@@ -77,7 +77,9 @@
+ # Languages to install...
+ #
+ 
+-LANGUAGES	=	@LANGUAGES@
++LANGUAGES	=	de es ja pl sv
++INSTALL_LANGUAGES =	install-languages
++UNINSTALL_LANGUAGES =	uninstall-languages
+ 
+ #
+ # Libraries...
+@@ -127,9 +129,9 @@
+ CXXLIBS		=	@CXXLIBS@
+ DSOFLAGS	=	@DSOFLAGS@
+ DSOLIBS		=	@DSOLIBS@ $(COMMONLIBS)
+-IMGLIBS		=	@IMGLIBS@ -lm
++IMGLIBS		=	@IMGLIBS@
+ IMGFILTERS	=	@IMGFILTERS@
+-LDFLAGS		=	-L../cups -L../filter $(RC_CFLAGS) $(ARCHFLAGS) \
++LDFLAGS		=	-L../cups -L../filter $(ARCHFLAGS) \
+ 			@LDFLAGS@ @PIEFLAGS@ $(OPTIM)
+ LINKCUPS	=	@LINKCUPS@ $(SSLLIBS)
+ LINKCUPSIMAGE	=	@LINKCUPSIMAGE@
+diff -urNad cupsys-1.2.1~/backend/Dependencies cupsys-1.2.1/backend/Dependencies
+--- cupsys-1.2.1~/backend/Dependencies	2006-07-19 00:38:00.000000000 +0000
++++ cupsys-1.2.1/backend/Dependencies	2006-07-19 00:40:14.000000000 +0000
+@@ -9,26 +9,31 @@
+ lpd.o: ../cups/md5.h ../cups/ipp-private.h ../cups/ipp.h ../cups/cups.h
+ lpd.o: ../cups/ppd.h ../cups/array.h ../cups/file.h ../cups/language.h
+ lpd.o: ../cups/string.h
+-parallel.o: ../cups/backend.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+-parallel.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+-parallel.o: ../cups/language.h ../cups/string.h ../config.h ieee1284.c
+-parallel.o: ../cups/debug.h
++pap.o: ../cups/http.h ../cups/md5.h
++parallel.o: backend-private.h ../cups/backend.h ../cups/cups.h ../cups/ipp.h
++parallel.o: ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
++parallel.o: ../cups/file.h ../cups/language.h ../cups/debug.h
++parallel.o: ../cups/string.h ../config.h
+ scsi.o: ../cups/backend.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+ scsi.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+ scsi.o: ../cups/language.h ../cups/string.h ../config.h
+-serial.o: ../cups/backend.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+-serial.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+-serial.o: ../cups/language.h ../cups/string.h ../config.h
+-snmp.o: ../cups/backend.h ../cups/http-private.h ../config.h ../cups/http.h
+-snmp.o: ../cups/md5.h ../cups/ipp-private.h ../cups/ipp.h ../cups/cups.h
+-snmp.o: ../cups/ppd.h ../cups/array.h ../cups/file.h ../cups/language.h
+-snmp.o: ../cups/string.h ../cups/array.h ../cups/file.h ieee1284.c
+-snmp.o: ../cups/debug.h
+-socket.o: ../cups/backend.h ../cups/http-private.h ../config.h ../cups/http.h
+-socket.o: ../cups/md5.h ../cups/ipp-private.h ../cups/ipp.h ../cups/cups.h
+-socket.o: ../cups/ppd.h ../cups/array.h ../cups/file.h ../cups/language.h
+-socket.o: ../cups/string.h
+-test1284.o: ../cups/string.h ../config.h ieee1284.c ../cups/debug.h
++serial.o: backend-private.h ../cups/backend.h ../cups/cups.h ../cups/ipp.h
++serial.o: ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
++serial.o: ../cups/file.h ../cups/language.h ../cups/debug.h ../cups/string.h
++serial.o: ../config.h
++snmp.o: ../cups/http-private.h ../config.h ../cups/http.h ../cups/md5.h
++snmp.o: ../cups/ipp-private.h ../cups/ipp.h backend-private.h
++snmp.o: ../cups/backend.h ../cups/cups.h ../cups/ppd.h ../cups/array.h
++snmp.o: ../cups/file.h ../cups/language.h ../cups/debug.h ../cups/string.h
++snmp.o: ../cups/array.h ../cups/file.h
++socket.o: ../cups/http-private.h ../config.h ../cups/http.h ../cups/md5.h
++socket.o: ../cups/ipp-private.h ../cups/ipp.h backend-private.h
++socket.o: ../cups/backend.h ../cups/cups.h ../cups/ppd.h ../cups/array.h
++socket.o: ../cups/file.h ../cups/language.h ../cups/debug.h ../cups/string.h
++test1284.o: ../cups/string.h ../config.h ieee1284.c backend-private.h
++test1284.o: ../cups/backend.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
++test1284.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
++test1284.o: ../cups/language.h ../cups/debug.h
+ usb.o: ../cups/backend.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+ usb.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
+ usb.o: ../cups/language.h ../cups/string.h ../config.h
+diff -urNad cupsys-1.2.1~/backend/Makefile cupsys-1.2.1/backend/Makefile
+--- cupsys-1.2.1~/backend/Makefile	2006-07-19 00:38:00.000000000 +0000
++++ cupsys-1.2.1/backend/Makefile	2006-07-19 00:40:14.000000000 +0000
+@@ -28,7 +28,8 @@
+ 
+ RBACKENDS =	ipp lpd
+ UBACKENDS =	$(PAP) parallel scsi serial snmp socket usb
+-TARGETS	=	betest test1284 $(RBACKENDS) $(UBACKENDS)
++TARGETS	=	betest test1284 libbackend.a $(RBACKENDS) $(UBACKENDS)
++LIBOBJS	=	ieee1284.o runloop.o
+ OBJS	=	betest.o ipp.o lpd.o pap.o parallel.o scsi.o \
+ 		serial.o snmp.o socket.o test1284.o usb.o
+ 
+@@ -105,6 +106,17 @@
+ 
+ 
+ #
++# libbackend.a
++#
++
++libbackend.a:	$(LIBOBJS)
++	echo Archiving $@...
++	$(RM) $@
++	$(AR) $(ARFLAGS) $@ $(LIBOBJS)
++	$(RANLIB) $@
++
++
++#
+ # ieee1394
+ #
+ 
+@@ -149,9 +161,9 @@
+ # parallel
+ #
+ 
+-parallel:	parallel.o ../cups/$(LIBCUPS)
++parallel:	parallel.o ../cups/$(LIBCUPS) libbackend.a
+ 	echo Linking $@...
+-	$(CC) $(LDFLAGS) -o parallel parallel.o $(LIBS)
++	$(CC) $(LDFLAGS) -o parallel parallel.o libbackend.a $(LIBS)
+ 
+ 
+ #
+@@ -169,37 +181,37 @@
+ # serial
+ #
+ 
+-serial:	serial.o ../cups/$(LIBCUPS)
++serial:	serial.o ../cups/$(LIBCUPS) libbackend.a
+ 	echo Linking $@...
+-	$(CC) $(LDFLAGS) -o serial serial.o $(BACKLIBS) $(LIBS)
++	$(CC) $(LDFLAGS) -o serial serial.o libbackend.a $(BACKLIBS) $(LIBS)
+ 
+ 
+ #
+ # snmp
+ #
+ 
+-snmp:	snmp.o ../cups/$(LIBCUPS)
++snmp:	snmp.o ../cups/$(LIBCUPS) libbackend.a
+ 	echo Linking $@...
+-	$(CC) $(LDFLAGS) -o snmp snmp.o $(LIBS)
++	$(CC) $(LDFLAGS) -o snmp snmp.o libbackend.a $(LIBS)
+ 
+ 
+ #
+ # socket
+ #
+ 
+-socket:	socket.o ../cups/$(LIBCUPS)
++socket:	socket.o ../cups/$(LIBCUPS) libbackend.a
+ 	echo Linking $@...
+-	$(CC) $(LDFLAGS) -o socket socket.o $(LIBS)
++	$(CC) $(LDFLAGS) -o socket socket.o libbackend.a $(LIBS)
+ 
+ 
+ #
+ # usb
+ #
+ 
+-usb:	usb.o ../cups/$(LIBCUPS)
++usb:	usb.o ../cups/$(LIBCUPS) libbackend.a
+ 	echo Linking $@...
+-	$(CC) $(LDFLAGS) -o usb usb.o $(BACKLIBS) $(LIBS)
+-usb.o:	usb.c usb-darwin.c usb-unix.c ieee1284.c
++	$(CC) $(LDFLAGS) -o usb usb.o libbackend.a $(BACKLIBS) $(LIBS)
++usb.o:	usb.c usb-darwin.c usb-unix.c
+ 
+ 
+ #
+diff -urNad cupsys-1.2.1~/backend/backend-private.h cupsys-1.2.1/backend/backend-private.h
+--- cupsys-1.2.1~/backend/backend-private.h	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/backend/backend-private.h	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1,73 @@
++/*
++ * "$Id$"
++ *
++ *   Backend support definitions for the Common UNIX Printing System (CUPS).
++ *
++ *   Copyright 1997-2006 by Easy Software Products, all rights reserved.
++ *
++ *   These coded instructions, statements, and computer programs are the
++ *   property of Easy Software Products and are protected by Federal
++ *   copyright law.  Distribution and use rights are outlined in the file
++ *   "LICENSE" which should have been included with this file.  If this
++ *   file is missing or damaged please contact Easy Software Products
++ *   at:
++ *
++ *       Attn: CUPS Licensing Information
++ *       Easy Software Products
++ *       44141 Airport View Drive, Suite 204
++ *       Hollywood, Maryland 20636 USA
++ *
++ *       Voice: (301) 373-9600
++ *       EMail: cups-info at cups.org
++ *         WWW: http://www.cups.org
++ *
++ *   This file is subject to the Apple OS-Developed Software exception.
++ */
++
++#ifndef _CUPS_BACKEND_PRIVATE_H_
++#  define _CUPS_BACKEND_PRIVATE_H_
++
++
++/*
++ * Include necessary headers.
++ */
++
++#  include <cups/backend.h>
++#  include <cups/cups.h>
++#  include <cups/debug.h>
++#  include <stdlib.h>
++#  include <errno.h>
++#  include <cups/string.h>
++#  include <signal.h>
++
++
++/*
++ * C++ magic...
++ */
++
++#  ifdef _cplusplus
++extern "C" {
++#  endif /* _cplusplus */
++
++
++/*
++ * Prototypes...
++ */
++
++extern int	backendGetDeviceID(int fd, char *device_id, int device_id_size,
++		                   char *make_model, int make_model_size,
++				   const char *scheme, char *uri, int uri_size);
++extern int	backendGetMakeModel(const char *device_id, char *make_model,
++			            int make_model_size);
++extern ssize_t	backendRunLoop(int print_fd, int device_fd, int use_bc);
++
++
++#  ifdef _cplusplus
++}
++#  endif /* _cplusplus */
++#endif /* !_CUPS_BACKEND_PRIVATE_H_ */
++
++
++/*
++ * End of "$Id$".
++ */
+diff -urNad cupsys-1.2.1~/backend/easysw-firewire-design.txt cupsys-1.2.1/backend/easysw-firewire-design.txt
+--- cupsys-1.2.1~/backend/easysw-firewire-design.txt	2006-07-19 00:38:00.000000000 +0000
++++ cupsys-1.2.1/backend/easysw-firewire-design.txt	2006-07-19 00:40:13.000000000 +0000
+@@ -1,71 +0,0 @@
+-Preliminary Design for CUPS Firewire Printer Backend - 03/19/2002
+------------------------------------------------------------------
+-
+-OVERVIEW
+-
+-    Easy Software Products will develop an IEEE-1394, a.k.a.
+-    Firewire, printing interface for its Common UNIX Printing
+-    System ("CUPS") for initial use under the Linux operating
+-    system.  A follow-on implementation for MacOS X is
+-    anticipated as well.
+-
+-    The operating system interfaces for IEEE-1394 ports vary
+-    widely; the CUPS printing interface will abstract the OS
+-    layer to a simpler interface geared towards discovering,
+-    opening, reading from, writing to, and closing IEEE-1394
+-    printers.
+-
+-    The initial development of the CUPS backend will be targeted
+-    at the EPSON Stylus Pro 10000 large format printer, which
+-    requires the bandwidth provided by Firewire in order to
+-    print at full speed.  This printer supports printing via
+-    Serial Bus Protocol 2 (SBP-2) using the SCSI and PWG command
+-    sets. The CUPS backend will implement the PWG command set on
+-    LUN 0 only.
+-
+-
+-OS ABSTRACTION LAYER
+-
+-    The OS abstraction layer will be a thin client library that
+-    implements the following functions:
+-
+-        ieee1394_list
+-	ieee1394_open
+-	ieee1394_close
+-	ieee1394_read
+-	ieee1394_write
+-	ieee1394_error
+-
+-    The "ieee1394_list" function will list all of the available
+-    printer devices on the bus.  The device information will
+-    consist of the device URI (ieee1394:/something) used to
+-    access the device and the make and model information, if
+-    available, for the device ("EPSON Stylus Printer").
+-
+-    The "ieee1394_open" and "ieee1394_close" functions will open
+-    and close a connection to the printer, respectively.
+-
+-    The "ieee1394_read" and "ieee1394_write" functions will read
+-    and write data to and from the printer, respectively.  The
+-    read function will be non-blocking, returning data only if
+-    there is data coming back from the printer.
+-
+-    The "ieee1394_error" function will return a string
+-    describing the last error or NULL if no error occurred.
+-
+-    The library will be responsible for creating any background
+-    threads that are needed to monitor the connection to the
+-    printer.
+-
+-
+-CUPS BACKEND
+-
+-    The CUPS backend will use the OS abstraction layer to list
+-    and access the Firewire printers.  The "main" function will
+-    read and write printer data, while the "list_devices"
+-    function will be called as necessary to identify the
+-    available devices.
+-
+-    The CUPS 1.1 backend will record any status information in
+-    the error log file, while the 1.2 backend will supply it to
+-    the printer driver process.
+diff -urNad cupsys-1.2.1~/backend/easysw-firewire-linux.txt cupsys-1.2.1/backend/easysw-firewire-linux.txt
+--- cupsys-1.2.1~/backend/easysw-firewire-linux.txt	2006-07-19 00:38:00.000000000 +0000
++++ cupsys-1.2.1/backend/easysw-firewire-linux.txt	2006-07-19 00:40:11.000000000 +0000
+@@ -1,35 +0,0 @@
+-Easy Software Products
+-44141 Airport View Drive
+-Suite 204
+-Hollywood, Maryland 20636
+-+1.301.373.9600
+-March 8, 2002
+-
+-
+-Subject: EPSON Firewire Printer Driver for Linux
+-
+-Currently, no Firewire printer support exists for Linux.  Since
+-the latest EPSON printer products depend on the Firewire
+-interface to print at full speed, a solution is needed to
+-support customers using Linux as their server platform.
+-
+-The Linux Firewire subsystem provides a user-mode driver
+-interface that allows driver programs to access Firewire
+-devices.  Easy Software Products will utilize this interface to
+-develop a "backend" program for the Common UNIX Printing System
+-that will allow users to print to EPSON printers using the
+-Firewire interface.
+-
+-After examining the Linux interface, we estimate that it will
+-require approximately 30 hours of development time to write,
+-test, and document the Firewire backend, for a total cost of
+-$3,000. The new backend will become a standard part of the CUPS
+-software distribution and will be included with at least the
+-following Linux distributions:
+-
+-    - Caldera Linux
+-    - Mandrake Linux
+-    - Red Hat Linux
+-    - SuSE Linux
+-
+-ESP will provide EPSON with binaries for Red Hat Linux 7.2.
+diff -urNad cupsys-1.2.1~/backend/ieee1284.c cupsys-1.2.1/backend/ieee1284.c
+--- cupsys-1.2.1~/backend/ieee1284.c	2006-07-19 00:38:00.000000000 +0000
++++ cupsys-1.2.1/backend/ieee1284.c	2006-07-19 00:40:14.000000000 +0000
+@@ -25,51 +25,41 @@
+  *
+  * Contents:
+  *
+- *   get_device_id()  - Get the IEEE-1284 device ID string and corresponding
+- *                      URI.
+- *   get_make_model() - Get the make and model string from the device ID.
++ *   backendGetDeviceID()  - Get the IEEE-1284 device ID string and
++ *                           corresponding URI.
++ *   backendGetMakeModel() - Get the make and model string from the device ID.
+  */
+ 
+ /*
+  * Include necessary headers.
+  */
+ 
+-#include <cups/debug.h>
+-
++#include "backend-private.h"
+ 
+-/*
+- * Prototypes...
+- */
++#ifdef __linux
++#  include <sys/ioctl.h>
++#  include <linux/lp.h>
++#  define IOCNR_GET_DEVICE_ID		1
++#  define LPIOC_GET_DEVICE_ID(len)	_IOC(_IOC_READ, 'P', IOCNR_GET_DEVICE_ID, len)
++#endif /* __linux */
+ 
+-static int	get_make_model(const char *device_id, char *make_model,
+-		               int make_model_size);
++#ifdef __sun
++#  ifdef __sparc
++#    include <sys/ecppio.h>
++#  else
++#    include <sys/ioccom.h>
++#    include <sys/ecppsys.h>
++#  endif /* __sparc */
++#endif /* __sun */
+ 
+ 
+ /*
+- * 'get_device_id()' - Get the IEEE-1284 device ID string and
+- *                     corresponding URI.
++ * 'backendGetDeviceID()' - Get the IEEE-1284 device ID string and
++ *                          corresponding URI.
+  */
+ 
+-#ifndef SNMP_BACKEND
+-#  ifdef __linux
+-#    include <sys/ioctl.h>
+-#    include <linux/lp.h>
+-#    define IOCNR_GET_DEVICE_ID		1
+-#    define LPIOC_GET_DEVICE_ID(len)	_IOC(_IOC_READ, 'P', IOCNR_GET_DEVICE_ID, len)
+-#  endif /* __linux */
+-
+-#  ifdef __sun
+-#    ifdef __sparc
+-#      include <sys/ecppio.h>
+-#    else
+-#      include <sys/ioccom.h>
+-#      include <sys/ecppsys.h>
+-#    endif /* __sparc */
+-#  endif /* __sun */
+-
+-
+ int					/* O - 0 on success, -1 on failure */
+-get_device_id(
++backendGetDeviceID(
+     int        fd,			/* I - File descriptor */
+     char       *device_id,		/* O - 1284 device ID */
+     int        device_id_size,		/* I - Size of buffer */
+@@ -93,7 +83,7 @@
+ #endif /* __sun && ECPPIOC_GETDEVID */
+ 
+ 
+-  DEBUG_printf(("get_device_id(fd=%d, device_id=%p, device_id_size=%d, "
++  DEBUG_printf(("backendGetDeviceID(fd=%d, device_id=%p, device_id_size=%d, "
+                 "make_model=%p, make_model_size=%d, scheme=\"%s\", "
+ 		"uri=%p, uri_size=%d)\n", fd, device_id, device_id_size,
+ 		make_model, make_model_size, scheme ? scheme : "(null)",
+@@ -107,7 +97,7 @@
+       !device_id || device_id_size < 32 ||
+       !make_model || make_model_size < 32)
+   {
+-    DEBUG_puts("get_device_id: Bad args!");
++    DEBUG_puts("backendGetDeviceID: Bad args!");
+     return (-1);
+   }
+ 
+@@ -155,7 +145,7 @@
+   }
+ #  ifdef DEBUG
+   else
+-    printf("get_device_id: ioctl failed - %s\n", strerror(errno));
++    printf("backendGetDeviceID: ioctl failed - %s\n", strerror(errno));
+ #  endif /* DEBUG */
+ #endif /* __linux */
+ 
+@@ -178,11 +168,11 @@
+   }
+ #  ifdef DEBUG
+   else
+-    printf("get_device_id: ioctl failed - %s\n", strerror(errno));
++    printf("backendGetDeviceID: ioctl failed - %s\n", strerror(errno));
+ #  endif /* DEBUG */
+ #endif /* __sun && ECPPIOC_GETDEVID */
+ 
+-  DEBUG_printf(("get_device_id: device_id=\"%s\"\n", device_id));
++  DEBUG_printf(("backendGetDeviceID: device_id=\"%s\"\n", device_id));
+ 
+   if (!*device_id)
+     return (-1);
+@@ -191,7 +181,7 @@
+   * Get the make and model...
+   */
+ 
+-  get_make_model(device_id, make_model, make_model_size);
++  backendGetMakeModel(device_id, make_model, make_model_size);
+ 
+  /*
+   * Then generate a device URI...
+@@ -303,15 +293,14 @@
+ 
+   return (0);
+ }
+-#endif /* !SNMP_BACKEND */
+ 
+ 
+ /*
+- * 'get_make_model()' - Get the make and model string from the device ID.
++ * 'backendGetMakeModel()' - Get the make and model string from the device ID.
+  */
+ 
+ int					/* O - 0 on success, -1 on failure */
+-get_make_model(
++backendGetMakeModel(
+     const char *device_id,		/* O - 1284 device ID */
+     char       *make_model,		/* O - Make/model */
+     int        make_model_size)		/* I - Size of buffer */
+@@ -322,7 +311,7 @@
+ 	*mdl;				/* Model string */
+ 
+ 
+-  DEBUG_printf(("get_make_model(device_id=\"%s\", "
++  DEBUG_printf(("backendGetMakeModel(device_id=\"%s\", "
+                 "make_model=%p, make_model_size=%d)\n", device_id,
+ 		make_model, make_model_size));
+ 
+@@ -332,7 +321,7 @@
+ 
+   if (!device_id || !*device_id || !make_model || make_model_size < 32)
+   {
+-    DEBUG_puts("get_make_model: Bad args!");
++    DEBUG_puts("backendGetMakeModel: Bad args!");
+     return (-1);
+   }
+ 
+diff -urNad cupsys-1.2.1~/backend/ieee1394-linux.c cupsys-1.2.1/backend/ieee1394-linux.c
+--- cupsys-1.2.1~/backend/ieee1394-linux.c	2005-09-26 19:33:58.000000000 +0000
++++ cupsys-1.2.1/backend/ieee1394-linux.c	1970-01-01 00:00:00.000000000 +0000
+@@ -1,877 +0,0 @@
+-/*
+- * "$Id: ieee1394-linux.c 4703 2005-09-26 19:33:58Z mike $"
+- *
+- *   Linux IEEE-1394 glue for the Common UNIX Printing System (CUPS).
+- *
+- *   Copyright 2002 by Easy Software Products, all rights reserved.
+- *
+- *   Redistribution and use in source and binary forms, with or
+- *   without modification, are permitted provided that the
+- *   following conditions are met:
+- *
+- *     1. Redistributions of source code must retain the above
+- *	  copyright notice, this list of conditions and the
+- *	  following disclaimer.
+- *
+- *     2. Redistributions in binary form must reproduce the
+- *	  above copyright notice, this list of conditions and
+- *	  the following disclaimer in the documentation and/or
+- *	  other materials provided with the distribution.
+- *
+- *     3. All advertising materials mentioning features or use
+- *	  of this software must display the following
+- *	  acknowledgement:
+- *
+- *	    This product includes software developed by Easy
+- *	    Software Products.
+- *
+- *     4. The name of Easy Software Products may not be used to
+- *	  endorse or promote products derived from this software
+- *	  without specific prior written permission.
+- *
+- *   THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS
+- *   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+- *   BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+- *   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+- *   DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS
+- *   BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+- *   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+- *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+- *   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+- *   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+- *   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+- *   OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+- *   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+- *   DAMAGE.
+- *
+- * Contents:
+- *
+- *   get_device_id()  - Get the IEEE-1284 device ID for a node...
+- *   get_unit_type()  - Get the unit type for a node...
+- *   show_data()      - Show a data node...
+- *   show_dir()       - Show a directory list...
+- *   ieee1394_list()  - List the available printer devices.
+- *   ieee1394_open()  - Open a printer device.
+- *   ieee1394_close() - Close a printer device.
+- *   ieee1394_read()  - Read from a printer device.
+- *   ieee1394_write() - Write data to a printer device.
+- *   ieee1394_error() - Return the last error.
+- */
+-
+-/*
+- * Include necessary headers.
+- */
+-
+-#include "ieee1394.h"
+-#include <cups/debug.h>
+-#include <libraw1394/raw1394.h>
+-#include <libraw1394/csr.h>
+-
+-
+-/*
+- * Limits...
+- */
+-
+-#define MAX_NODES	100
+-
+-
+-/*
+- * Structures...
+- */
+-
+-typedef struct
+-{
+-  char			uri[HTTP_MAX_URI],/* URI for this node... */
+-			description[128],/* Description of port */
+-			make_model[128];/* Make and model */
+-  int			port,		/* Port where this node is found */
+-			node;		/* Node number */
+-  unsigned long long	addr;		/* Management address */
+-} linux1394_node_t;
+-
+-typedef struct
+-{
+-  raw1394handle_t	handle;		/* Handle for printer device */
+-  int			node;		/* Node number for printer device */
+-  unsigned long long	addr;		/* Management address */
+-} linux1394_dev_t;
+-
+-
+-/*
+- * ORB messages for communication with the device...
+- */
+-
+-typedef struct		/**** Login ORB Message */
+-{
+-  unsigned char		passwd_addr[8];	/* Password address */
+-  unsigned char		resp_addr[8];	/* Login response address */
+-  unsigned char		notify_excl;	/* Notify and exclusive bits */
+-  unsigned char		recon_func;	/* Reconnect time and function */
+-  unsigned char		lun[2];		/* Logical unit number */
+-  unsigned char		passwd_len[2];	/* Length of password */
+-  unsigned char		resp_len[2];	/* Length of login response */
+-  unsigned char		fifo_addr[8];	/* Local status FIFO address */
+-} login_orb_t;
+-
+-typedef struct		/**** Login Response Message ****/
+-{
+-  unsigned char		length[2];	/* Length of response */
+-  unsigned char		login_id[2];	/* Login ID */
+-  unsigned char		cmd_addr[8];	/* Command block agent address */
+-  unsigned char		reserved[2];	/* Reserved (0) */
+-  unsigned char		recon_hold[2];	/* Number of seconds to hold login */
+-} login_resp_t;
+-
+-
+-/*
+- * Local globals...
+- */
+-
+-static char		error_string[1024] = "";
+-static int		num_nodes;
+-static linux1394_node_t	nodes[MAX_NODES];
+-
+-
+-/*
+- * 'get_device_id()' - Get the IEEE-1284 device ID for a node...
+- */
+-
+-static char *				/* O - Device ID */
+-get_device_id(raw1394handle_t    handle,/* I - Handle for device */
+-              int                node,	/* I - Node number */
+-	      unsigned long long offset,/* I - Offset to directory */
+-	      char               *id,	/* O - ID string */
+-	      int                idlen)	/* I - Size of ID string */
+-{
+-  unsigned char		data[1024],	/* Data from ROM */
+-			*dataptr;	/* Pointer into data */
+-  int			length;		/* Length of directory */
+-  int			datalen;	/* Length of data */
+-  unsigned long long	dataoff;	/* Offset of data */
+-
+-
+-  DEBUG_printf(("get_device_id(handle = %p, node = %d, offset = %llx, id = %p, idlen = %d)\n",
+-                handle, node, offset, id, idlen));
+-
+-  *id = '\0';
+-
+- /*
+-  * Read the directory length from the first quadlet...
+-  */
+-
+-  if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
+-    return (NULL);
+-
+-  offset += 4;
+-
+- /*
+-  * The length is in the upper 16 bits...
+-  */
+-
+-  length = (data[0] << 8) | data[1];
+-
+-  DEBUG_printf(("    length = %d\n", length));
+-
+- /*
+-  * Then read the directory, looking for unit directory or device tags...
+-  */
+-
+-  while (length > 0)
+-  {
+-    if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
+-      return (NULL);
+-
+-    DEBUG_printf(("    data = %02X %02X %02X %02X\n", data[0], data[1],
+-                  data[2], data[3]));
+-
+-    if (data[0] == 0xd1)
+-    {
+-     /*
+-      * Found the unit directory...
+-      */
+-
+-      offset += ((((data[1] << 8) | data[2]) << 8) | data[3]) << 2;
+-
+-      return (get_device_id(handle, node, offset, id, idlen));
+-    }
+-    else if (data[0] == 0x81)
+-    {
+-     /*
+-      * Found potential IEEE-1284 device ID...
+-      */
+-
+-      dataoff = offset + (((((data[1] << 8) | data[2]) << 8) | data[3]) << 2);
+-
+-      if (raw1394_read(handle, 0xffc0 | node, dataoff, 4, (quadlet_t *)data) < 0)
+-	return (NULL);
+-
+-      dataoff += 4;
+-
+-     /*
+-      * Read the leaf value...
+-      */
+-
+-      datalen = (data[0] << 8) | data[1];
+-
+-      if (datalen > (sizeof(data) / 4))
+-        datalen = sizeof(data) / 4;
+-
+-      for (dataptr = data; datalen > 0; datalen --, dataptr += 4, dataoff += 4)
+-	if (raw1394_read(handle, 0xffc0 | node, dataoff, 4,
+-	                 (quadlet_t *)dataptr) < 0)
+-	  return (NULL);
+-
+-      if (data[0] == 0 && memcmp(data + 8, "MFG:", 4) == 0)
+-      {
+-       /*
+-        * Found the device ID...
+-	*/
+-
+-        datalen = dataptr - data - 8;
+-	if (datalen >= idlen)
+-	  datalen --;
+-
+-	memcpy(id, data + 8, datalen);
+-	id[datalen] = '\0';
+-
+-        return (id);
+-      }
+-    }
+-
+-    offset += 4;
+-    length --;
+-  }
+-
+-  return (NULL);
+-}
+-
+-
+-/*
+- * 'get_man_addr()' - Get the management address for a node...
+- */
+-
+-static int				/* O - Unit type */
+-get_man_addr(raw1394handle_t    handle,	/* I - Handle for device */
+-             int                node,	/* I - Node number */
+-	     unsigned long long offset)	/* I - Offset to directory */
+-{
+-  unsigned char	data[4];		/* Data from ROM */
+-  int		length;			/* Length of directory */
+-
+-
+-  DEBUG_printf(("get_man_addr(handle = %p, node = %d, offset = %llx)\n",
+-                handle, node, offset));
+-
+- /*
+-  * Read the directory length from the first quadlet...
+-  */
+-
+-  if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
+-    return (-1);
+-
+-  offset += 4;
+-
+- /*
+-  * The length is in the upper 16 bits...
+-  */
+-
+-  length = (data[0] << 8) | data[1];
+-
+-  DEBUG_printf(("    length = %d\n", length));
+-
+- /*
+-  * Then read the directory, looking for unit directory or type tags...
+-  */
+-
+-  while (length > 0)
+-  {
+-    if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
+-      return (-1);
+-
+-    DEBUG_printf(("    data = %02X %02X %02X %02X\n", data[0], data[1],
+-                  data[2], data[3]));
+-
+-    if (data[0] == 0xd1)
+-    {
+-     /*
+-      * Found the unit directory...
+-      */
+-
+-      offset += ((((data[1] << 8) | data[2]) << 8) | data[3]) << 2;
+-
+-      return (get_man_addr(handle, node, offset));
+-    }
+-    else if (data[0] == 0x54)
+-    {
+-     /*
+-      * Found the management address...
+-      */
+-
+-      return (((((data[1] << 8) | data[2]) << 8) | data[3]) << 2);
+-    }
+-
+-    offset += 4;
+-    length --;
+-  }
+-
+-  return (-1);
+-}
+-
+-
+-/*
+- * 'get_unit_type()' - Get the unit type for a node...
+- */
+-
+-static int				/* O - Unit type */
+-get_unit_type(raw1394handle_t    handle,/* I - Handle for device */
+-              int                node,	/* I - Node number */
+-	      unsigned long long offset)/* I - Offset to directory */
+-{
+-  unsigned char	data[4];		/* Data from ROM */
+-  int		length;			/* Length of directory */
+-
+-
+-  DEBUG_printf(("get_unit_type(handle = %p, node = %d, offset = %llx)\n",
+-                handle, node, offset));
+-
+- /*
+-  * Read the directory length from the first quadlet...
+-  */
+-
+-  if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
+-    return (-1);
+-
+-  offset += 4;
+-
+- /*
+-  * The length is in the upper 16 bits...
+-  */
+-
+-  length = (data[0] << 8) | data[1];
+-
+-  DEBUG_printf(("    length = %d\n", length));
+-
+- /*
+-  * Then read the directory, looking for unit directory or type tags...
+-  */
+-
+-  while (length > 0)
+-  {
+-    if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
+-      return (-1);
+-
+-    DEBUG_printf(("    data = %02X %02X %02X %02X\n", data[0], data[1],
+-                  data[2], data[3]));
+-
+-    if (data[0] == 0xd1)
+-    {
+-     /*
+-      * Found the unit directory...
+-      */
+-
+-      offset += ((((data[1] << 8) | data[2]) << 8) | data[3]) << 2;
+-
+-      return (get_unit_type(handle, node, offset));
+-    }
+-    else if (data[0] == 0x14)
+-    {
+-     /*
+-      * Found the unit type...
+-      */
+-
+-      return (data[1] & 0x1f);
+-    }
+-
+-    offset += 4;
+-    length --;
+-  }
+-
+-  return (-1);
+-}
+-
+-
+-#ifdef DEBUG
+-/*
+- * 'show_data()' - Show a data node...
+- */
+-
+-static void
+-show_data(raw1394handle_t    handle,	/* I - Handle for device */
+-          int                node,	/* I - Node number */
+-	  unsigned long long offset,	/* I - Offset to directory */
+-	  int                indent)	/* Amount to indent */
+-{
+-  int		i;			/* Looping var */
+-  unsigned char	data[4];		/* Data from ROM */
+-  int		length;			/* Length of data */
+-
+-
+- /*
+-  * Read the data length from the first quadlet...
+-  */
+-
+-  if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
+-    return;
+-
+-  offset += 4;
+-
+- /*
+-  * The length is in the upper 16 bits...
+-  */
+-
+-  length = (data[0] << 8) | data[1];
+-
+- /*
+-  * Then read the data...
+-  */
+-
+-  for (i = 0; i < indent; i ++)
+-    putchar(' ');
+-
+-  printf("LEAF (%d quadlets)\n", length);
+-
+-  while (length > 0)
+-  {
+-    if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
+-      return;
+-
+-    for (i = 0; i < indent; i ++)
+-      putchar(' ');
+-
+-    printf("%02X %02X %02X %02X    '%c%c%c%c'\n",
+-           data[0], data[1], data[2], data[3],
+-           (data[0] < ' ' || data[0] >= 0x7f) ? '.' : data[0],
+-           (data[1] < ' ' || data[1] >= 0x7f) ? '.' : data[1],
+-           (data[2] < ' ' || data[2] >= 0x7f) ? '.' : data[2],
+-           (data[3] < ' ' || data[3] >= 0x7f) ? '.' : data[3]);
+-
+-    offset += 4;
+-    length --;
+-  }
+-}
+-
+-
+-/*
+- * 'show_dir()' - Show a directory list...
+- */
+-
+-static void
+-show_dir(raw1394handle_t    handle,	/* I - Handle for device */
+-         int                node,	/* I - Node number */
+-	 unsigned long long offset,	/* I - Offset to directory */
+-	 int                indent)	/* Amount to indent */
+-{
+-  int			i;		/* Looping var */
+-  unsigned char		data[4];	/* Data from ROM */
+-  int			length;		/* Length of directory */
+-  int			value;		/* Value in directory */
+-
+-
+- /*
+-  * Read the directory length from the first quadlet...
+-  */
+-
+-  if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
+-    return;
+-
+-  offset += 4;
+-
+- /*
+-  * The length is in the upper 16 bits...
+-  */
+-
+-  length = (data[0] << 8) | data[1];
+-
+- /*
+-  * Then read the directory...
+-  */
+-
+-  while (length > 0)
+-  {
+-    if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
+-      return;
+-
+-    for (i = 0; i < indent; i ++)
+-      putchar(' ');
+-
+-    printf("%02X %02X %02X %02X\n", data[0], data[1], data[2], data[3]);
+-
+-    value = (((data[1] << 8) | data[2]) << 8) | data[3];
+-
+-    switch (data[0] & 0xc0)
+-    {
+-      case 0x00 :
+-	  for (i = -4; i < indent; i ++)
+-	    putchar(' ');
+-
+-          printf("IMMEDIATE %d\n", value);
+-	  break;
+-
+-      case 0x40 :
+-	  for (i = -4; i < indent; i ++)
+-	    putchar(' ');
+-
+-          printf("CSR OFFSET +%06X\n", value);
+-	  break;
+-
+-      case 0x80 :
+-          show_data(handle, node, offset + value * 4, indent + 4);
+-	  break;
+-
+-      case 0xc0 :
+-          show_dir(handle, node, offset + value * 4, indent + 4);
+-	  break;
+-    }
+-
+-    offset += 4;
+-    length --;
+-  }
+-}
+-#endif /* DEBUG */
+-
+-
+-/*
+- * 'ieee1394_list()' - List the available printer devices.
+- */
+-
+-ieee1394_info_t	*			/* O - Printer information */
+-ieee1394_list(int *num_devices)		/* O - Number of printers */
+-{
+-  int			i, j;		/* Looping vars */
+-  raw1394handle_t	handle;		/* 1394 handle */
+-  int			num_ports;	/* Number of ports */
+-  struct raw1394_portinfo ports[100];	/* Port data... */
+-  unsigned char		guid[8];	/* Global unique ID */
+-  int			vendor;		/* Vendor portion of GUID */
+-  int			unit_type;	/* Unit type */
+-  int			addr;		/* Management address offset */
+-  char			id[1024],	/* Device ID string */
+-			*idptr,		/* Pointer into ID string */
+-			*idsep;		/* Pointer to separator */
+-  ieee1394_info_t	*devices;	/* Device list */
+-
+-
+- /*
+-  * Connect to the user-mode driver interface...
+-  */
+-
+-  handle    = raw1394_new_handle();
+-  num_ports = raw1394_get_port_info(handle, ports,
+-                                    sizeof(ports) / sizeof(ports[0]));
+-
+-  DEBUG_printf(("num_ports = %d\n", num_ports));
+-
+- /*
+-  * Loop through the ports to discover what nodes are available.
+-  */
+-
+-  num_nodes = 0;
+-
+-  for (i = 0; i < num_ports; i ++)
+-  {
+-    DEBUG_printf(("ports[%d] = { nodes = %d, name = \"%s\" }\n", i,
+-                  ports[i].nodes, ports[i].name));
+-
+-    raw1394_set_port(handle, i);
+-
+-    for (j = 0; j < ports[i].nodes; j ++)
+-    {
+-      if (raw1394_read(handle, 0xffc0 | j,
+-                       CSR_REGISTER_BASE + CSR_CONFIG_ROM + 12, 4,
+-		       (quadlet_t *)guid) < 0)
+-      {
+-        DEBUG_printf(("    Node #%d: Unable to contact (%s)!\n", j,
+-	              strerror(errno)));
+-        continue;
+-      }
+-      else
+-      {
+-        raw1394_read(handle, 0xffc0 | j,
+-                     CSR_REGISTER_BASE + CSR_CONFIG_ROM + 16, 4,
+-	             (quadlet_t *)(guid + 4));
+-
+-        DEBUG_printf(("    Node #%d: GUID = %02X%02X%02X%02X%02X%02X%02X%02X\n",
+-		      j, guid[0], guid[1], guid[2], guid[3], guid[4],
+-		      guid[5], guid[6], guid[7]));
+-
+-        vendor    = (((guid[0] << 8) | guid[1]) << 8) | guid[2];
+-        unit_type = get_unit_type(handle, j,
+-	                          CSR_REGISTER_BASE + CSR_CONFIG_ROM + 20);
+-
+-        DEBUG_printf(("vendor = %x, unit_type = %d\n", vendor, unit_type));
+-
+-        if (unit_type == 2 && num_nodes < MAX_NODES)
+-	{
+-	 /*
+-	  * Found a printer device; add it to the nodes list...
+-	  */
+-
+-#ifdef DEBUG
+-          show_dir(handle, j, CSR_REGISTER_BASE + CSR_CONFIG_ROM + 20, 0);
+-#endif /* DEBUG */
+-
+-          memset(nodes + num_nodes, 0, sizeof(linux1394_node_t));
+-
+-          sprintf(nodes[num_nodes].uri, "ieee1394://%02X%02X%02X%02X%02X%02X%02X%02X",
+-		  guid[0], guid[1], guid[2], guid[3], guid[4],
+-		  guid[5], guid[6], guid[7]);
+-
+-          nodes[num_nodes].port = i;
+-	  nodes[num_nodes].node = j;
+-
+-          addr = get_man_addr(handle, j, CSR_REGISTER_BASE + CSR_CONFIG_ROM + 20);
+-
+-          if (addr < 0)
+-	    continue;
+-
+-          nodes[num_nodes].addr = CSR_REGISTER_BASE + addr;
+-
+-          DEBUG_printf(("Node address = %llx\n", nodes[num_nodes].addr));
+-
+-          get_device_id(handle, j, CSR_REGISTER_BASE + CSR_CONFIG_ROM + 20,
+-	                id, sizeof(id));
+-
+-          if (id[0])
+-	  {
+-	   /*
+-	    * Grab the manufacturer and model name from the device ID
+-	    * string...
+-	    */
+-
+-            idptr = id + 4;
+-            idsep = strchr(id, ';');
+-	    if (idsep)
+-	      *idsep++ = '\0';
+-	    else
+-	      idsep = idptr;
+-
+-	    snprintf(nodes[num_nodes].description,
+-	             sizeof(nodes[num_nodes].description),
+-		     "%s Firewire Printer", idptr);
+-
+-            if ((idptr = strstr(idsep, "DES:")) == NULL)
+-	      idptr = strstr(idsep, "MDL:");
+-
+-            if (idptr == NULL)
+-              strcpy(nodes[num_nodes].make_model, "Unknown");
+-	    else
+-	    {
+-	     /*
+-	      * Grab the DES or MDL code...
+-	      */
+-
+-	      idptr += 4;
+-	      idsep = strchr(idptr, ';');
+-	      if (idsep)
+-	        *idsep = '\0';
+-
+-              if (strncmp(id + 4, idptr, strlen(id + 4)) == 0)
+-	      {
+-	       /*
+-	        * Use the description directly...
+-		*/
+-
+-        	strlcpy(nodes[num_nodes].make_model, idptr,
+-	        	sizeof(nodes[num_nodes].make_model));
+-              }
+-	      else
+-	      {
+-	       /*
+-	        * Add the manufacturer to the front of the name...
+-		*/
+-
+-        	snprintf(nodes[num_nodes].make_model,
+-	        	 sizeof(nodes[num_nodes].make_model),
+-			 "%s %s", id + 4, idptr);
+-              }
+-            }
+-	  }
+-	  else
+-	  {
+-	   /*
+-	    * Flag it as an unknown printer...
+-	    */
+-
+-	    sprintf(nodes[num_nodes].description,
+-	            "Unknown%06X Firewire Printer", vendor);
+-            strcpy(nodes[num_nodes].make_model, "Unknown");
+-	  }
+-
+-	  num_nodes ++;
+-	}
+-      }
+-    }
+-  }
+-
+- /*
+-  * Done querying the Firewire bus...
+-  */
+-
+-  raw1394_destroy_handle(handle);
+-
+- /*
+-  * Build an array of device info structures as needed...
+-  */
+-
+-  if (num_devices == NULL)
+-    return (NULL);
+-
+-  *num_devices = num_nodes;
+-
+-  if (num_nodes)
+-  {
+-    if ((devices = calloc(sizeof(ieee1394_info_t), num_nodes)) != NULL)
+-    {
+-      for (i = 0; i < num_nodes; i ++)
+-      {
+-        strcpy(devices[i].uri, nodes[i].uri);
+-	strcpy(devices[i].description, nodes[i].description);
+-	strcpy(devices[i].make_model, nodes[i].make_model);
+-      }
+-    }
+-
+-    return (devices);
+-  }
+-  else
+-    return (NULL);
+-}
+-
+-
+-/*
+- * 'ieee1394_open()' - Open a printer device.
+- */
+-
+-ieee1394_dev_t				/* O - Printer device or NULL */
+-ieee1394_open(const char *uri)		/* I - Device URI */
+-{
+-  int			i;		/* Looping var */
+-  linux1394_dev_t	*ldev;		/* Linux device */
+-
+-
+- /*
+-  * Return early if we can't see any printers...
+-  */
+-
+-  if (num_nodes == 0)
+-    ieee1394_list(NULL);
+-
+-  if (num_nodes == 0)
+-  {
+-    strcpy(error_string, "No IEEE-1394 printers found!");
+-    return (NULL);
+-  }
+-
+- /*
+-  * Look for the URI...
+-  */
+-
+-  for (i = 0; i < num_nodes; i ++)
+-    if (strcmp(nodes[i].uri, uri) == 0)
+-      break;
+-
+-  if (i >= num_nodes)
+-  {
+-    snprintf(error_string, sizeof(error_string), "Device %s not found!", uri);
+-    return (NULL);
+-  }
+-
+- /*
+-  * Now create a new device structure...
+-  */
+-
+-  if ((ldev = calloc(sizeof(linux1394_dev_t), 1)) == NULL)
+-  {
+-    strcpy(error_string, "Out of memory!");
+-    return (NULL);
+-  }
+-
+-  ldev->handle = raw1394_new_handle();
+-  ldev->node   = nodes[i].node;
+-  ldev->addr   = nodes[i].addr;
+-
+-  raw1394_set_port(ldev->handle, nodes[i].port);
+-
+-  error_string[0] = '\0';
+-
+-  return ((ieee1394_dev_t)ldev);
+-}
+-
+-
+-/*
+- * 'ieee1394_close()' - Close a printer device.
+- */
+-
+-int					/* O - 0 on success, -1 on failure */
+-ieee1394_close(ieee1394_dev_t dev)	/* I - Printer device */
+-{
+-  linux1394_dev_t	*ldev;		/* Linux device */
+-
+-
+-  ldev = (linux1394_dev_t *)dev;
+-
+-  raw1394_destroy_handle(ldev->handle);
+-
+-  free(ldev);
+-
+-  return (0);
+-}
+-
+-
+-/*
+- * 'ieee1394_read()' - Read from a printer device.
+- */
+-
+-int					/* O - Number of bytes read or -1 */
+-ieee1394_read(ieee1394_dev_t dev,	/* I - Printer device */
+-              char           *buffer,	/* I - Read buffer */
+-	      int            len)	/* I - Max bytes to read */
+-{
+-  linux1394_dev_t	*ldev;		/* Linux device */
+-
+-
+-  ldev = (linux1394_dev_t *)dev;
+-
+-
+-  return (0);
+-}
+-
+-
+-/*
+- * 'ieee1394_write()' - Write data to a printer device.
+- */
+-
+-int					/* O - Number of bytes written or -1 */
+-ieee1394_write(ieee1394_dev_t dev,	/* I - Printer device */
+-               char           *buffer,	/* I - Buffer to write */
+-	       int            len)	/* I - Number of bytes to write */
+-{
+-  linux1394_dev_t	*ldev;		/* Linux device */
+-
+-
+-  ldev = (linux1394_dev_t *)dev;
+-
+-
+-/*  if (raw1394_write(handle, 0xffc0 | j, 0, ,
+-		       (quadlet_t *)guid) < 0)*/
+-
+-  return (len);
+-}
+-
+-
+-/*
+- * 'ieee1394_error()' - Return the last error.
+- */
+-
+-const char *				/* O - Error string or NULL */
+-ieee1394_error(void)
+-{
+-  if (error_string[0])
+-    return (error_string);
+-  else
+-    return (NULL);
+-}
+-
+-
+-/*
+- * End of "$Id: ieee1394-linux.c 4703 2005-09-26 19:33:58Z mike $".
+- */
+diff -urNad cupsys-1.2.1~/backend/ieee1394.c cupsys-1.2.1/backend/ieee1394.c
+--- cupsys-1.2.1~/backend/ieee1394.c	2006-03-07 22:07:44.000000000 +0000
++++ cupsys-1.2.1/backend/ieee1394.c	1970-01-01 00:00:00.000000000 +0000
+@@ -1,267 +0,0 @@
+-/*
+- * "$Id: ieee1394.c 5241 2006-03-07 22:07:44Z mike $"
+- *
+- *   IEEE-1394 backend for the Common UNIX Printing System (CUPS).
+- *
+- *   Copyright 2002 by Easy Software Products, all rights reserved.
+- *
+- *   Redistribution and use in source and binary forms, with or
+- *   without modification, are permitted provided that the
+- *   following conditions are met:
+- *
+- *     1. Redistributions of source code must retain the above
+- *	  copyright notice, this list of conditions and the
+- *	  following disclaimer.
+- *
+- *     2. Redistributions in binary form must reproduce the
+- *	  above copyright notice, this list of conditions and
+- *	  the following disclaimer in the documentation and/or
+- *	  other materials provided with the distribution.
+- *
+- *     3. All advertising materials mentioning features or use
+- *	  of this software must display the following
+- *	  acknowledgement:
+- *
+- *	    This product includes software developed by Easy
+- *	    Software Products.
+- *
+- *     4. The name of Easy Software Products may not be used to
+- *	  endorse or promote products derived from this software
+- *	  without specific prior written permission.
+- *
+- *   THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS
+- *   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+- *   BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+- *   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+- *   DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS
+- *   BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+- *   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+- *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+- *   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+- *   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+- *   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+- *   OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+- *   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+- *   DAMAGE.
+- *
+- * Contents:
+- *
+- *   main()         - Send a file to the printer.
+- *   list_devices() - List all known printer devices...
+- */
+-
+-/*
+- * Include necessary headers.
+- */
+-
+-#include "ieee1394.h"
+-
+-
+-/*
+- * Local functions...
+- */
+-
+-void	list_devices(void);
+-
+-
+-/*
+- * 'main()' - Send a file to the printer.
+- *
+- * Usage:
+- *
+- *    printer-uri job-id user title copies options [file]
+- */
+-
+-int			/* O - Exit status */
+-main(int  argc,		/* I - Number of command-line arguments (6 or 7) */
+-     char *argv[])	/* I - Command-line arguments */
+-{
+-  ieee1394_dev_t dev;		/* Printer device */
+-  int		fp;		/* Print file */
+-  int		copies;		/* Number of copies to print */
+-  int		rbytes;		/* Number of bytes read from device */
+-  size_t	nbytes,		/* Number of bytes read from file */
+-		tbytes;		/* Total number of bytes written */
+-  char		buffer[8192];	/* Input/output buffer */
+-#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
+-  struct sigaction action;	/* Actions for POSIX signals */
+-#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
+-
+-
+- /*
+-  * Make sure status messages are not buffered...
+-  */
+-
+-  setbuf(stderr, NULL);
+-
+- /*
+-  * Check command-line...
+-  */
+-
+-  if (argc == 1)
+-  {
+-    list_devices();
+-
+-    return (0);
+-  }
+-  else if (argc < 6 || argc > 7)
+-  {
+-    fprintf(stderr, "Usage: %s job-id user title copies options [file]\n",
+-            argv[0]);
+-    return (1);
+-  }
+-
+- /*
+-  * If we have 7 arguments, print the file named on the command-line.
+-  * Otherwise, send stdin instead...
+-  */
+-
+-  if (argc == 6)
+-  {
+-    fp     = 0;
+-    copies = 1;
+-  }
+-  else
+-  {
+-   /*
+-    * Try to open the print file...
+-    */
+-
+-    if ((fp = open(argv[6], O_RDONLY)) < 0)
+-    {
+-      perror("ERROR: unable to open print file");
+-      return (1);
+-    }
+-
+-    copies = atoi(argv[4]);
+-  }
+-
+- /*
+-  * Try to open the printer device...
+-  */
+-
+-  fputs("STATE: +connecting-to-device\n", stderr);
+-
+-  do
+-  {
+-    if ((dev = ieee1394_open(argv[0])) == NULL)
+-    {
+-      fputs("INFO: Firewire printer busy; will retry in 30 seconds...\n", stderr);
+-      sleep(30);
+-    }
+-  }
+-  while (dev == NULL);
+-
+-  fputs("STATE: -connecting-to-device\n", stderr);
+-
+- /*
+-  * Now that we are "connected" to the port, ignore SIGTERM so that we
+-  * can finish out any page data the driver sends (e.g. to eject the
+-  * current page...  Only ignore SIGTERM if we are printing data from
+-  * stdin (otherwise you can't cancel raw jobs...)
+-  */
+-
+-  if (argc < 7)
+-  {
+-#ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
+-    sigset(SIGTERM, SIG_IGN);
+-#elif defined(HAVE_SIGACTION)
+-    memset(&action, 0, sizeof(action));
+-
+-    sigemptyset(&action.sa_mask);
+-    action.sa_handler = SIG_IGN;
+-    sigaction(SIGTERM, &action, NULL);
+-#else
+-    signal(SIGTERM, SIG_IGN);
+-#endif /* HAVE_SIGSET */
+-  }
+-
+- /*
+-  * Finally, send the print file...
+-  */
+-
+-  while (copies > 0)
+-  {
+-    copies --;
+-
+-    if (fp != 0)
+-    {
+-      fputs("PAGE: 1 1\n", stderr);
+-      lseek(fp, 0, SEEK_SET);
+-    }
+-
+-    tbytes = 0;
+-    while ((nbytes = read(fp, buffer, sizeof(buffer))) > 0)
+-    {
+-     /*
+-      * Write the print data to the printer...
+-      */
+-
+-      tbytes += nbytes;
+-
+-      if (ieee1394_write(dev, buffer, nbytes) < 0)
+-      {
+-	perror("ERROR: Unable to send print file to printer");
+-	break;
+-      }
+-
+-      if ((rbytes = ieee1394_read(dev, buffer, sizeof(buffer))) > 0)
+-        fprintf(stderr, "INFO: Read %d bytes from printer...\n", rbytes);
+-
+-      if (argc > 6)
+-	fprintf(stderr, "INFO: Sending print file, %lu bytes...\n",
+-	        (unsigned long)tbytes);
+-    }
+-  }
+-
+- /*
+-  * Close the printer device and input file and return...
+-  */
+-
+-  ieee1394_close(dev);
+-
+-  if (fp != 0)
+-    close(fp);
+-
+-  fputs("INFO: Ready to print.\n", stderr);
+-
+-  return (0);
+-}
+-
+-
+-/*
+- * 'list_devices()' - List all known devices...
+- */
+-
+-void
+-list_devices(void)
+-{
+-  int			i,		/* Looping var */
+-			num_info;	/* Number of devices */
+-  ieee1394_info_t	*info;		/* Devices... */
+-
+-
+- /*
+-  * Get the available devices...
+-  */
+-
+-  info = ieee1394_list(&num_info);
+-
+- /*
+-  * List them as needed...
+-  */
+-
+-  if (num_info > 0)
+-  {
+-    for (i = 0; i < num_info; i ++)
+-      printf("direct %s \"%s\" \"%s\"\n", info[i].uri,
+-             info[i].make_model, info[i].description);
+-
+-    free(info);
+-  }
+-}
+-
+-
+-/*
+- * End of "$Id: ieee1394.c 5241 2006-03-07 22:07:44Z mike $".
+- */
+diff -urNad cupsys-1.2.1~/backend/ieee1394.h cupsys-1.2.1/backend/ieee1394.h
+--- cupsys-1.2.1~/backend/ieee1394.h	2005-02-18 02:18:11.000000000 +0000
++++ cupsys-1.2.1/backend/ieee1394.h	1970-01-01 00:00:00.000000000 +0000
+@@ -1,103 +0,0 @@
+-/*
+- * "$Id: ieee1394.h 4494 2005-02-18 02:18:11Z mike $"
+- *
+- *   IEEE-1394 header for the Common UNIX Printing System (CUPS).
+- *
+- *   Copyright 2002 by Easy Software Products, all rights reserved.
+- *
+- *   Redistribution and use in source and binary forms, with or
+- *   without modification, are permitted provided that the
+- *   following conditions are met:
+- *
+- *     1. Redistributions of source code must retain the above
+- *	  copyright notice, this list of conditions and the
+- *	  following disclaimer.
+- *
+- *     2. Redistributions in binary form must reproduce the
+- *	  above copyright notice, this list of conditions and
+- *	  the following disclaimer in the documentation and/or
+- *	  other materials provided with the distribution.
+- *
+- *     3. All advertising materials mentioning features or use
+- *	  of this software must display the following
+- *	  acknowledgement:
+- *
+- *	    This product includes software developed by Easy
+- *	    Software Products.
+- *
+- *     4. The name of Easy Software Products may not be used to
+- *	  endorse or promote products derived from this software
+- *	  without specific prior written permission.
+- *
+- *   THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS
+- *   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+- *   BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+- *   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+- *   DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS
+- *   BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+- *   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+- *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+- *   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+- *   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+- *   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+- *   OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+- *   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+- *   DAMAGE.
+- */
+-
+-/*
+- * Include necessary headers.
+- */
+-
+-#include <cups/cups.h>
+-#include <stdio.h>
+-#include <stdlib.h>
+-#include <stdarg.h>
+-#include <cups/string.h>
+-#include <errno.h>
+-#include <sys/types.h>
+-#include <sys/stat.h>
+-#include <signal.h>
+-
+-#ifdef WIN32
+-#  include <io.h>
+-#else
+-#  include <unistd.h>
+-#  include <fcntl.h>
+-#endif /* WIN32 */
+-
+-
+-/*
+- * Device information structure...
+- */
+-
+-typedef struct
+-{
+-  char	uri[HTTP_MAX_URI],	/* Device URI */
+-	description[128],	/* Description of port */
+-	make_model[128];	/* Make and model */
+-} ieee1394_info_t;
+-
+-
+-/*
+- * Private device connection information...
+- */
+-
+-typedef void	*ieee1394_dev_t;
+-
+-
+-/*
+- * Prototypes for standard IEEE-1394 interface...
+- */
+-
+-extern ieee1394_info_t	*ieee1394_list(int *num_devices);
+-extern ieee1394_dev_t	ieee1394_open(const char *uri);
+-extern int		ieee1394_close(ieee1394_dev_t dev);
+-extern int		ieee1394_read(ieee1394_dev_t dev, char *buffer, int len);
+-extern int		ieee1394_write(ieee1394_dev_t dev, char *buffer, int len);
+-extern const char	*ieee1394_error(void);
+-
+-
+-/*
+- * End of "$Id: ieee1394.h 4494 2005-02-18 02:18:11Z mike $".
+- */
+diff -urNad cupsys-1.2.1~/backend/ipp.c cupsys-1.2.1/backend/ipp.c
+--- cupsys-1.2.1~/backend/ipp.c	2006-07-19 00:38:00.000000000 +0000
++++ cupsys-1.2.1/backend/ipp.c	2006-07-19 00:40:14.000000000 +0000
+@@ -211,7 +211,8 @@
+   */
+ 
+   if ((content_type = getenv("FINAL_CONTENT_TYPE")) == NULL)
+-    content_type = "application/octet-stream";
++    if ((content_type = getenv("CONTENT_TYPE")) == NULL)
++      content_type = "application/octet-stream";
+ 
+  /*
+   * Extract the hostname and printer name from the URI...
+@@ -229,6 +230,8 @@
+ 
+   if (!strcmp(method, "https"))
+     cupsSetEncryption(HTTP_ENCRYPT_ALWAYS);
++  else
++    cupsSetEncryption(HTTP_ENCRYPT_IF_REQUESTED);
+ 
+  /*
+   * See if there are any options...
+diff -urNad cupsys-1.2.1~/backend/parallel.c cupsys-1.2.1/backend/parallel.c
+--- cupsys-1.2.1~/backend/parallel.c	2006-07-19 00:38:00.000000000 +0000
++++ cupsys-1.2.1/backend/parallel.c	2006-07-19 00:40:14.000000000 +0000
+@@ -33,14 +33,7 @@
+  * Include necessary headers.
+  */
+ 
+-#include <cups/backend.h>
+-#include <cups/cups.h>
+-#include <stdio.h>
+-#include <stdlib.h>
+-#include <errno.h>
+-#include <cups/string.h>
+-#include <signal.h>
+-#include "ieee1284.c"
++#include "backend-private.h"
+ 
+ #ifdef __hpux
+ #  include <sys/time.h>
+@@ -94,25 +87,14 @@
+ 		resource[1024],		/* Resource info (device and options) */
+ 		*options;		/* Pointer to options */
+   int		port;			/* Port number (not used) */
+-  int		fp;			/* Print file */
++  int		print_fd,		/* Print file */
++		device_fd;		/* Parallel device */
+   int		copies;			/* Number of copies to print */
+-  int		fd;			/* Parallel device */
+-  int		rbytes;			/* Number of bytes read */
+-  int		wbytes;			/* Number of bytes written */
+-  size_t	nbytes,			/* Number of bytes read */
+-		tbytes;			/* Total number of bytes written */
+-  char		buffer[8192],		/* Output buffer */
+-		*bufptr;		/* Pointer into buffer */
++  size_t	tbytes;			/* Total number of bytes written */
+   struct termios opts;			/* Parallel port options */
+-  fd_set	input,			/* Input set for select() */
+-		output;			/* Output set for select() */
+-  int		paperout;		/* Paper out? */
+ #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
+   struct sigaction action;		/* Actions for POSIX signals */
+ #endif /* HAVE_SIGACTION && !HAVE_SIGSET */
+-#ifdef __linux
+-  unsigned int	status;			/* Port status (off-line, out-of-paper, etc.) */
+-#endif /* __linux */
+ 
+ 
+  /*
+@@ -157,8 +139,8 @@
+ 
+   if (argc == 6)
+   {
+-    fp     = 0;
+-    copies = 1;
++    print_fd = 0;
++    copies   = 1;
+   }
+   else
+   {
+@@ -166,7 +148,7 @@
+     * Try to open the print file...
+     */
+ 
+-    if ((fp = open(argv[6], O_RDONLY)) < 0)
++    if ((print_fd = open(argv[6], O_RDONLY)) < 0)
+     {
+       perror("ERROR: unable to open print file");
+       return (CUPS_BACKEND_FAILED);
+@@ -206,7 +188,7 @@
+ 
+   do
+   {
+-    if ((fd = open(resource, O_WRONLY | O_EXCL)) == -1)
++    if ((device_fd = open(resource, O_WRONLY | O_EXCL)) == -1)
+     {
+       if (getenv("CLASS") != NULL)
+       {
+@@ -217,8 +199,8 @@
+ 	* available printer in the class.
+ 	*/
+ 
+-        fputs("INFO: Unable to open parallel port, queuing on next printer in class...\n",
+-	      stderr);
++        fputs("INFO: Unable to open parallel port, queuing on next printer "
++	      "in class...\n", stderr);
+ 
+        /*
+         * Sleep 5 seconds to keep the job from requeuing too rapidly...
+@@ -231,23 +213,26 @@
+ 
+       if (errno == EBUSY)
+       {
+-        fputs("INFO: Parallel port busy; will retry in 30 seconds...\n", stderr);
++        fputs("INFO: Parallel port busy; will retry in 30 seconds...\n",
++	      stderr);
+ 	sleep(30);
+       }
+       else if (errno == ENXIO || errno == EIO || errno == ENOENT)
+       {
+-        fputs("INFO: Printer not connected; will retry in 30 seconds...\n", stderr);
++        fputs("INFO: Printer not connected; will retry in 30 seconds...\n",
++	      stderr);
+ 	sleep(30);
+       }
+       else
+       {
+-	fprintf(stderr, "ERROR: Unable to open parallel port device file \"%s\": %s\n",
++	fprintf(stderr,
++	        "ERROR: Unable to open parallel port device file \"%s\": %s\n",
+ 	        resource, strerror(errno));
+ 	return (CUPS_BACKEND_FAILED);
+       }
+     }
+   }
+-  while (fd < 0);
++  while (device_fd < 0);
+ 
+   fputs("STATE: -connecting-to-device\n", stderr);
+ 
+@@ -255,189 +240,47 @@
+   * Set any options provided...
+   */
+ 
+-  tcgetattr(fd, &opts);
++  tcgetattr(device_fd, &opts);
+ 
+   opts.c_lflag &= ~(ICANON | ECHO | ISIG);	/* Raw mode */
+ 
+   /**** No options supported yet ****/
+ 
+-  tcsetattr(fd, TCSANOW, &opts);
+-
+- /*
+-  * Check printer status...
+-  */
+-
+-  paperout = 0;
+-
+-#if defined(__linux) && defined(LP_POUTPA)
+- /*
+-  * Show the printer status before we send the file...
+-  */
+-
+-  while (!ioctl(fd, LPGETSTATUS, &status))
+-  {
+-    fprintf(stderr, "DEBUG: LPGETSTATUS returned a port status of %02X...\n", status);
+-
+-    if (status & LP_POUTPA)
+-    {
+-      fputs("WARNING: Media tray empty!\n", stderr);
+-      fputs("STATUS: +media-tray-empty-error\n", stderr);
+-
+-      paperout = 1;
+-    }
+-
+-    if (!(status & LP_PERRORP))
+-      fputs("WARNING: Printer fault!\n", stderr);
+-    else if (!(status & LP_PSELECD))
+-      fputs("WARNING: Printer off-line.\n", stderr);
+-    else
+-      break;
+-
+-    sleep(5);
+-  }
+-#endif /* __linux && LP_POUTPA */
+-
+- /*
+-  * Now that we are "connected" to the port, ignore SIGTERM so that we
+-  * can finish out any page data the driver sends (e.g. to eject the
+-  * current page...  Only ignore SIGTERM if we are printing data from
+-  * stdin (otherwise you can't cancel raw jobs...)
+-  */
+-
+-  if (argc < 7)
+-  {
+-#ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
+-    sigset(SIGTERM, SIG_IGN);
+-#elif defined(HAVE_SIGACTION)
+-    memset(&action, 0, sizeof(action));
+-
+-    sigemptyset(&action.sa_mask);
+-    action.sa_handler = SIG_IGN;
+-    sigaction(SIGTERM, &action, NULL);
+-#else
+-    signal(SIGTERM, SIG_IGN);
+-#endif /* HAVE_SIGSET */
+-  }
++  tcsetattr(device_fd, TCSANOW, &opts);
+ 
+  /*
+   * Finally, send the print file...
+   */
+ 
+-  wbytes = 0;
++  tbytes = 0;
+ 
+-  while (copies > 0)
++  while (copies > 0 && tbytes >= 0)
+   {
+     copies --;
+ 
+-    if (fp != 0)
++    if (print_fd != 0)
+     {
+       fputs("PAGE: 1 1\n", stderr);
+-      lseek(fp, 0, SEEK_SET);
++      lseek(print_fd, 0, SEEK_SET);
+     }
+ 
+-    tbytes = 0;
+-    while ((nbytes = read(fp, buffer, sizeof(buffer))) > 0)
+-    {
+-     /*
+-      * Write the print data to the printer...
+-      */
+-
+-      tbytes += nbytes;
+-      bufptr = buffer;
+-
+-      while (nbytes > 0)
+-      {
+-       /*
+-        * See if we are ready to read or write...
+-	*/
+-
+-        do
+-	{
+-          FD_ZERO(&input);
+-	  FD_SET(fd, &input);
+-	  FD_ZERO(&output);
+-	  FD_SET(fd, &output);
+-        }
+-	while (select(fd + 1, &input, &output, NULL, NULL) < 0);
+-
+-        if (FD_ISSET(fd, &input))
+-	{
+-	 /*
+-	  * Read backchannel data...
+-	  */
+-
+-	  if ((rbytes = read(fd, resource, sizeof(resource))) > 0)
+-	  {
+-	    fprintf(stderr, "DEBUG: Received %d bytes of back-channel data!\n",
+-	            rbytes);
+-            cupsBackChannelWrite(resource, rbytes, 1.0);
+-          }
+-	}
+-
+-        if (FD_ISSET(fd, &output))
+-	{
+-	 /*
+-	  * Write print data...
+-	  */
+-
+-	  if ((wbytes = write(fd, bufptr, nbytes)) < 0)
+-	    if (errno == ENOTTY)
+-	      wbytes = write(fd, bufptr, nbytes);
+-
+-	  if (wbytes < 0)
+-	  {
+-	   /*
+-	    * Check for retryable errors...
+-	    */
+-
+-            if (errno == ENOSPC)
+-	    {
+-	      paperout = 1;
+-	      fputs("ERROR: Out of paper!\n", stderr);
+-	      fputs("STATUS: +media-tray-empty-error\n", stderr);
+-	    }
+-	    else if (errno != EAGAIN && errno != EINTR)
+-	    {
+-	      perror("ERROR: Unable to send print file to printer");
+-	      break;
+-	    }
+-	  }
+-	  else
+-	  {
+-	   /*
+-	    * Update count and pointer...
+-	    */
+-
+-            if (paperout)
+-	    {
+-	      fputs("STATUS: -media-tray-empty-error\n", stderr);
+-	      paperout = 0;
+-	    }
+-
+-	    nbytes -= wbytes;
+-	    bufptr += wbytes;
+-	  }
+-	}
+-      }
+-
+-      if (wbytes < 0)
+-        break;
++    tbytes = backendRunLoop(print_fd, device_fd, 1);
+ 
+-      if (argc > 6)
+-	fprintf(stderr, "INFO: Sending print file, %lu bytes...\n",
+-	        (unsigned long)tbytes);
+-    }
++    if (print_fd != 0 && tbytes >= 0)
++      fprintf(stderr, "INFO: Sent print file, " CUPS_LLFMT " bytes...\n",
++	      CUPS_LLCAST tbytes);
+   }
+ 
+  /*
+   * Close the socket connection and input file and return...
+   */
+ 
+-  close(fd);
+-  if (fp != 0)
+-    close(fp);
++  close(device_fd);
+ 
+-  return (wbytes < 0 ? CUPS_BACKEND_FAILED : CUPS_BACKEND_OK);
++  if (print_fd != 0)
++    close(print_fd);
++
++  return (tbytes < 0 ? CUPS_BACKEND_FAILED : CUPS_BACKEND_OK);
+ }
+ 
+ 
+@@ -485,9 +328,9 @@
+       * Now grab the IEEE 1284 device ID string...
+       */
+ 
+-      if (!get_device_id(fd, device_id, sizeof(device_id),
+-                         make_model, sizeof(make_model),
+-			 NULL, NULL, 0))
++      if (!backendGetDeviceID(fd, device_id, sizeof(device_id),
++                              make_model, sizeof(make_model),
++			      NULL, NULL, 0))
+ 	printf("direct parallel:%s \"%s\" \"%s LPT #%d\" \"%s\"\n", device,
+ 	       make_model, make_model, i + 1, device_id);
+       else
+diff -urNad cupsys-1.2.1~/backend/runloop.c cupsys-1.2.1/backend/runloop.c
+--- cupsys-1.2.1~/backend/runloop.c	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/backend/runloop.c	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1,258 @@
++/*
++ * "$Id$"
++ *
++ *   Common run loop API for the Common UNIX Printing System (CUPS).
++ *
++ *   Copyright 2006 by Easy Software Products, all rights reserved.
++ *
++ *   These coded instructions, statements, and computer programs are the
++ *   property of Easy Software Products and are protected by Federal
++ *   copyright law.  Distribution and use rights are outlined in the file
++ *   "LICENSE" which should have been included with this file.  If this
++ *   file is missing or damaged please contact Easy Software Products
++ *   at:
++ *
++ *       Attn: CUPS Licensing Information
++ *       Easy Software Products
++ *       44141 Airport View Drive, Suite 204
++ *       Hollywood, Maryland 20636 USA
++ *
++ *       Voice: (301) 373-9600
++ *       EMail: cups-info at cups.org
++ *         WWW: http://www.cups.org
++ *
++ *   This file is subject to the Apple OS-Developed Software exception.
++ *
++ * Contents:
++ *
++ *   backendRunLoop() - Read and write print and back-channel data.
++ */
++
++/*
++ * Include necessary headers.
++ */
++
++#include "backend-private.h"
++#include <sys/select.h>
++
++
++/*
++ * 'backendRunLoop()' - Read and write print and back-channel data.
++ */
++
++ssize_t					/* O - Total bytes on success, -1 on error */
++backendRunLoop(int print_fd,		/* I - Print file descriptor */
++               int device_fd,		/* I - Device file descriptor */
++	       int use_bc)		/* I - Use back-channel? */
++{
++  int		nfds;			/* Maximum file descriptor value + 1 */
++  fd_set	input,			/* Input set for reading */
++		output;			/* Output set for writing */
++  ssize_t	print_bytes,		/* Print bytes read */
++		bc_bytes,		/* Backchannel bytes read */
++		total_bytes,		/* Total bytes written */
++		bytes;			/* Bytes written */
++  int		paperout;		/* "Paper out" status */
++  int		offline;		/* "Off-line" status */
++  char		print_buffer[8192],	/* Print data buffer */
++		*print_ptr,		/* Pointer into print data buffer */
++		bc_buffer[1024];	/* Back-channel data buffer */
++#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
++  struct sigaction action;		/* Actions for POSIX signals */
++#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
++
++
++  fprintf(stderr, "DEBUG: backendRunLoop(print_fd=%d, device_fd=%d, use_bc=%d)\n",
++          print_fd, device_fd, use_bc);
++
++ /*
++  * If we are printing data from a print driver on stdin, ignore SIGTERM
++  * so that the driver can finish out any page data, e.g. to eject the
++  * current page.  We only do this for stdin printing as otherwise there
++  * is no way to cancel a raw print job...
++  */
++
++  if (!print_fd)
++  {
++#ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
++    sigset(SIGTERM, SIG_IGN);
++#elif defined(HAVE_SIGACTION)
++    memset(&action, 0, sizeof(action));
++
++    sigemptyset(&action.sa_mask);
++    action.sa_handler = SIG_IGN;
++    sigaction(SIGTERM, &action, NULL);
++#else
++    signal(SIGTERM, SIG_IGN);
++#endif /* HAVE_SIGSET */
++  }
++
++ /*
++  * Figure out the maximum file descriptor value to use with select()...
++  */
++
++  nfds = (print_fd > device_fd ? print_fd : device_fd) + 1;
++
++ /*
++  * Now loop until we are out of data from print_fd...
++  */
++
++  for (print_bytes = 0, print_ptr = print_buffer, offline = 0, paperout = 0, total_bytes = 0;;)
++  {
++   /*
++    * Use select() to determine whether we have data to copy around...
++    */
++
++    FD_ZERO(&input);
++    if (!print_bytes)
++      FD_SET(print_fd, &input);
++    if (use_bc)
++      FD_SET(device_fd, &input);
++
++    FD_ZERO(&output);
++    if (print_bytes || !use_bc)
++      FD_SET(device_fd, &output);
++
++    if (use_bc)
++    {
++      if (select(nfds, &input, &output, NULL, NULL) < 0)
++      {
++       /*
++	* Pause printing to clear any pending errors...
++	*/
++
++	if (errno == ENXIO && !offline)
++	{
++	  fputs("STATE: +offline-error\n", stderr);
++	  fputs("INFO: Printer is currently off-line.\n", stderr);
++	  offline = 1;
++	}
++
++	sleep(1);
++	continue;
++      }
++    }
++
++   /*
++    * Check if we have back-channel data ready...
++    */
++
++    if (FD_ISSET(device_fd, &input))
++    {
++      if ((bc_bytes = read(device_fd, bc_buffer, sizeof(bc_buffer))) > 0)
++      {
++	fprintf(stderr,
++	        "DEBUG: Received " CUPS_LLFMT " bytes of back-channel data!\n",
++	        CUPS_LLCAST bc_bytes);
++        cupsBackChannelWrite(bc_buffer, bc_bytes, 1.0);
++      }
++    }
++
++   /*
++    * Check if we have print data ready...
++    */
++
++    if (FD_ISSET(print_fd, &input))
++    {
++      if ((print_bytes = read(print_fd, print_buffer,
++                              sizeof(print_buffer))) < 0)
++      {
++       /*
++        * Read error - bail if we don't see EAGAIN or EINTR...
++	*/
++
++	if (errno != EAGAIN || errno != EINTR)
++	{
++	  perror("ERROR: Unable to read print data");
++	  return (-1);
++	}
++
++        print_bytes = 0;
++      }
++      else if (print_bytes == 0)
++      {
++       /*
++        * End of file, break out of the loop...
++	*/
++
++        break;
++      }
++
++      print_ptr = print_buffer;
++
++      fprintf(stderr, "DEBUG: Read %d bytes of print data...\n",
++              (int)print_bytes);
++    }
++
++   /*
++    * Check if the device is ready to receive data and we have data to
++    * send...
++    */
++
++    if (print_bytes && FD_ISSET(device_fd, &output))
++    {
++      if ((bytes = write(device_fd, print_ptr, print_bytes)) < 0)
++      {
++       /*
++        * Write error - bail if we don't see an error we can retry...
++	*/
++
++        if (errno == ENOSPC)
++	{
++	  if (!paperout)
++	  {
++	    fputs("ERROR: Out of paper!\n", stderr);
++	    fputs("STATUS: +media-tray-empty-error\n", stderr);
++	    paperout = 1;
++	  }
++        }
++	else if (errno == ENXIO)
++	{
++	  if (!offline)
++	  {
++	    fputs("STATE: +offline-error\n", stderr);
++	    fputs("INFO: Printer is currently off-line.\n", stderr);
++	    offline = 1;
++	  }
++	}
++	else if (errno != EAGAIN && errno != EINTR && errno != ENOTTY)
++	{
++	  perror("ERROR: Unable to write print data");
++	  return (-1);
++	}
++      }
++      else
++      {
++        if (paperout)
++	{
++	  fputs("STATUS: -media-tray-empty-error\n", stderr);
++	  paperout = 0;
++	}
++
++	if (offline)
++	{
++	  fputs("STATE: -offline-error\n", stderr);
++	  fputs("INFO: Printer is now on-line.\n", stderr);
++	  offline = 0;
++	}
++
++        fprintf(stderr, "DEBUG: Wrote %d bytes of print data...\n", (int)bytes);
++
++        print_bytes -= bytes;
++	print_ptr   += bytes;
++	total_bytes += bytes;
++      }
++    }
++  }
++
++ /*
++  * Return with success...
++  */
++
++  return (total_bytes);
++}
++
++
++/*
++ * End of "$Id$".
++ */
+diff -urNad cupsys-1.2.1~/backend/serial.c cupsys-1.2.1/backend/serial.c
+--- cupsys-1.2.1~/backend/serial.c	2006-07-19 00:38:00.000000000 +0000
++++ cupsys-1.2.1/backend/serial.c	2006-07-19 00:40:14.000000000 +0000
+@@ -33,13 +33,7 @@
+  * Include necessary headers.
+  */
+ 
+-#include <cups/backend.h>
+-#include <cups/cups.h>
+-#include <stdio.h>
+-#include <stdlib.h>
+-#include <errno.h>
+-#include <cups/string.h>
+-#include <signal.h>
++#include "backend-private.h"
+ 
+ #ifdef __hpux
+ #  include <sys/modem.h>
+@@ -121,21 +115,23 @@
+ 		value[255],		/* Value of option */
+ 		*ptr;			/* Pointer into name or value */
+   int		port;			/* Port number (not used) */
+-  int		fp;			/* Print file */
+   int		copies;			/* Number of copies to print */
+-  int		fd;			/* Parallel device */
+-  int		rbytes;			/* Number of bytes read */
+-  int		wbytes;			/* Number of bytes written */
+-  size_t	nbytes,			/* Number of bytes read */
+-		tbytes;			/* Total number of bytes written */
++  int		print_fd,		/* Print file */
++		device_fd;		/* Serial device */
++  int		nfds;			/* Maximum file descriptor value + 1 */
++  fd_set	input,			/* Input set for reading */
++		output;			/* Output set for writing */
++  ssize_t	print_bytes,		/* Print bytes read */
++		bc_bytes,		/* Backchannel bytes read */
++		total_bytes,		/* Total bytes written */
++		bytes;			/* Bytes written */
+   int		dtrdsr;			/* Do dtr/dsr flow control? */
+-  int		bufsize;		/* Size of output buffer for writes */
+-  char		buffer[8192],		/* Output buffer */
+-		*bufptr;		/* Pointer into buffer */
++  int		print_size;		/* Size of output buffer for writes */
++  char		print_buffer[8192],	/* Print data buffer */
++		*print_ptr,		/* Pointer into print data buffer */
++		bc_buffer[1024];	/* Back-channel data buffer */
+   struct termios opts;			/* Serial port options */
+   struct termios origopts;		/* Original port options */
+-  fd_set	input,			/* Input set for select() */
+-		output;			/* Output set for select() */
+ #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
+   struct sigaction action;		/* Actions for POSIX signals */
+ #endif /* HAVE_SIGACTION && !HAVE_SIGSET */
+@@ -183,8 +179,8 @@
+ 
+   if (argc == 6)
+   {
+-    fp     = 0;
+-    copies = 1;
++    print_fd = 0;
++    copies   = 1;
+   }
+   else
+   {
+@@ -192,7 +188,7 @@
+     * Try to open the print file...
+     */
+ 
+-    if ((fp = open(argv[6], O_RDONLY)) < 0)
++    if ((print_fd = open(argv[6], O_RDONLY)) < 0)
+     {
+       perror("ERROR: unable to open print file");
+       return (CUPS_BACKEND_FAILED);
+@@ -232,7 +228,8 @@
+ 
+   do
+   {
+-    if ((fd = open(resource, O_WRONLY | O_NOCTTY | O_EXCL | O_NDELAY)) == -1)
++    if ((device_fd = open(resource, O_RDWR | O_NOCTTY | O_EXCL |
++                                    O_NDELAY)) == -1)
+     {
+       if (getenv("CLASS") != NULL)
+       {
+@@ -268,7 +265,7 @@
+       }
+     }
+   }
+-  while (fd < 0);
++  while (device_fd < 0);
+ 
+   fputs("STATE: -connecting-to-device\n", stderr);
+ 
+@@ -276,16 +273,18 @@
+   * Set any options provided...
+   */
+ 
+-  tcgetattr(fd, &origopts);
+-  tcgetattr(fd, &opts);
++  tcgetattr(device_fd, &origopts);
++  tcgetattr(device_fd, &opts);
+ 
+-  opts.c_lflag &= ~(ICANON | ECHO | ISIG);	/* Raw mode */
+-  opts.c_oflag &= ~OPOST;			/* Don't post-process */
++  opts.c_lflag &= ~(ICANON | ECHO | ISIG);
++					/* Raw mode */
++  opts.c_oflag &= ~OPOST;		/* Don't post-process */
+ 
+-  bufsize = 96;		/* 9600 baud / 10 bits/char / 10Hz */
+-  dtrdsr  = 0;		/* No dtr/dsr flow control */
++  print_size = 96;			/* 9600 baud / 10 bits/char / 10Hz */
++  dtrdsr     = 0;			/* No dtr/dsr flow control */
+ 
+-  if (options != NULL)
++  if (options)
++  {
+     while (*options)
+     {
+      /*
+@@ -326,7 +325,7 @@
+         * Set the baud rate...
+ 	*/
+ 
+-        bufsize = atoi(value) / 100;
++        print_size = atoi(value) / 100;
+ 
+ #if B19200 == 19200
+         cfsetispeed(&opts, atoi(value));
+@@ -488,9 +487,10 @@
+ 	}
+       }
+     }
++  }
+ 
+-  tcsetattr(fd, TCSANOW, &opts);
+-  fcntl(fd, F_SETFL, 0);
++  tcsetattr(device_fd, TCSANOW, &opts);
++  fcntl(device_fd, F_SETFL, 0);
+ 
+  /*
+   * Now that we are "connected" to the port, ignore SIGTERM so that we
+@@ -499,7 +499,7 @@
+   * stdin (otherwise you can't cancel raw jobs...)
+   */
+ 
+-  if (argc < 7)
++  if (print_fd != 0)
+   {
+ #ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
+     sigset(SIGTERM, SIG_IGN);
+@@ -515,133 +515,181 @@
+   }
+ 
+  /*
+-  * Finally, send the print file...
++  * Figure out the maximum file descriptor value to use with select()...
+   */
+ 
+-  if (bufsize > sizeof(buffer))
+-    bufsize = sizeof(buffer);
++  nfds = (print_fd > device_fd ? print_fd : device_fd) + 1;
+ 
+-  wbytes = 0;
++ /*
++  * Finally, send the print file.  Ordinarily we would just use the
++  * backendRunLoop() function, however since we need to use smaller
++  * writes and may need to do DSR/DTR flow control, we duplicate much
++  * of the code here instead...
++  */
++
++  if (print_size > sizeof(print_buffer))
++    print_size = sizeof(print_buffer);
++
++  total_bytes = 0;
+ 
+   while (copies > 0)
+   {
+     copies --;
+ 
+-    if (fp != 0)
++    if (print_fd != 0)
+     {
+       fputs("PAGE: 1 1\n", stderr);
+-      lseek(fp, 0, SEEK_SET);
++      lseek(print_fd, 0, SEEK_SET);
+     }
+ 
+-    if (dtrdsr)
++   /*
++    * Now loop until we are out of data from print_fd...
++    */
++
++    for (print_bytes = 0, print_ptr = print_buffer;;)
+     {
+      /*
+-      * Check the port and sleep until DSR is set...
++      * Use select() to determine whether we have data to copy around...
+       */
+ 
+-      int status;
++      FD_ZERO(&input);
++      if (!print_bytes)
++	FD_SET(print_fd, &input);
++      FD_SET(device_fd, &input);
+ 
++      FD_ZERO(&output);
++      if (print_bytes)
++	FD_SET(device_fd, &output);
+ 
+-      if (!ioctl(fd, TIOCMGET, &status))
+-        if (!(status & TIOCM_DSR))
++      if (select(nfds, &input, &output, NULL, NULL) < 0)
++	continue;			/* Ignore errors here */
++
++     /*
++      * Check if we have back-channel data ready...
++      */
++
++      if (FD_ISSET(device_fd, &input))
++      {
++	if ((bc_bytes = read(device_fd, bc_buffer, sizeof(bc_buffer))) > 0)
++	{
++	  fprintf(stderr,
++	          "DEBUG: Received " CUPS_LLFMT " bytes of back-channel data!\n",
++	          CUPS_LLCAST bc_bytes);
++          cupsBackChannelWrite(bc_buffer, bc_bytes, 1.0);
++	}
++      }
++
++     /*
++      * Check if we have print data ready...
++      */
++
++      if (FD_ISSET(print_fd, &input))
++      {
++	if ((print_bytes = read(print_fd, print_buffer, print_size)) < 0)
+ 	{
+ 	 /*
+-	  * Wait for DSR to go high...
++          * Read error - bail if we don't see EAGAIN or EINTR...
+ 	  */
+ 
+-	  fputs("DEBUG: DSR is low; waiting for device...\n", stderr);
+-
+-          do
++	  if (errno != EAGAIN || errno != EINTR)
+ 	  {
+-	    sleep(1);
+-	    if (ioctl(fd, TIOCMGET, &status))
+-	      break;
+-	  }
+-	  while (!(status & TIOCM_DSR));
+-
+-	  fputs("DEBUG: DSR is high; writing to device...\n", stderr);
+-        }
+-    }
++	    perror("ERROR: Unable to read print data");
+ 
+-    tbytes = 0;
+-    while ((nbytes = read(fp, buffer, bufsize)) > 0)
+-    {
+-     /*
+-      * Write the print data to the printer...
+-      */
++            tcsetattr(device_fd, TCSADRAIN, &origopts);
+ 
+-      tbytes += nbytes;
+-      bufptr = buffer;
++	    close(device_fd);
+ 
+-      while (nbytes > 0)
+-      {
+-       /*
+-        * See if we are ready to read or write...
+-	*/
++	    if (print_fd != 0)
++	      close(print_fd);
+ 
+-        do
+-	{
+-          FD_ZERO(&input);
+-	  FD_SET(fd, &input);
+-	  FD_ZERO(&output);
+-	  FD_SET(fd, &output);
+-        }
+-	while (select(fd + 1, &input, &output, NULL, NULL) < 0);
++	    return (CUPS_BACKEND_FAILED);
++	  }
+ 
+-        if (FD_ISSET(fd, &input))
++          print_bytes = 0;
++	}
++	else if (print_bytes == 0)
+ 	{
+ 	 /*
+-	  * Read backchannel data...
++          * End of file, break out of the loop...
+ 	  */
+ 
+-	  if ((rbytes = read(fd, resource, sizeof(resource))) > 0)
+-	  {
+-	    fprintf(stderr, "DEBUG: Received %d bytes of back-channel data!\n",
+-	            rbytes);
+-            cupsBackChannelWrite(resource, rbytes, 1.0);
+-          }
++          break;
+ 	}
+ 
+-        if (FD_ISSET(fd, &output))
++	print_ptr = print_buffer;
++      }
++
++     /*
++      * Check if the device is ready to receive data and we have data to
++      * send...
++      */
++
++      if (print_bytes && FD_ISSET(device_fd, &output))
++      {
++	if (dtrdsr)
+ 	{
+ 	 /*
+-	  * Write print data...
++	  * Check the port and sleep until DSR is set...
+ 	  */
+ 
+-	  if ((wbytes = write(fd, bufptr, nbytes)) < 0)
+-	    if (errno == ENOTTY)
+-	      wbytes = write(fd, bufptr, nbytes);
++	  int status;
+ 
+-	  if (wbytes < 0)
+-	  {
+-	   /*
+-	    * Check for retryable errors...
+-	    */
+ 
+-	    if (errno != EAGAIN && errno != EINTR)
++	  if (!ioctl(device_fd, TIOCMGET, &status))
++            if (!(status & TIOCM_DSR))
+ 	    {
+-	      perror("ERROR: Unable to send print file to printer");
+-	      break;
+-	    }
+-	  }
+-	  else
++	     /*
++	      * Wait for DSR to go high...
++	      */
++
++	      fputs("DEBUG: DSR is low; waiting for device...\n", stderr);
++
++              do
++	      {
++	       /*
++	        * Poll every 100ms...
++		*/
++
++		usleep(100000);
++
++		if (ioctl(device_fd, TIOCMGET, &status))
++		  break;
++	      }
++	      while (!(status & TIOCM_DSR));
++
++	      fputs("DEBUG: DSR is high; writing to device...\n", stderr);
++            }
++	}
++
++	if ((bytes = write(device_fd, print_ptr, print_bytes)) < 0)
++	{
++	 /*
++          * Write error - bail if we don't see an error we can retry...
++	  */
++
++	  if (errno != EAGAIN && errno != EINTR && errno != ENOTTY)
+ 	  {
+-	   /*
+-	    * Update count and pointer...
+-	    */
++	    perror("ERROR: Unable to write print data");
+ 
+-	    nbytes -= wbytes;
+-	    bufptr += wbytes;
++            tcsetattr(device_fd, TCSADRAIN, &origopts);
++
++	    close(device_fd);
++
++	    if (print_fd != 0)
++	      close(print_fd);
++
++	    return (CUPS_BACKEND_FAILED);
+ 	  }
+ 	}
+-      }
+-
+-      if (wbytes < 0)
+-        break;
++	else
++	{
++          fprintf(stderr, "DEBUG: Wrote %d bytes...\n", (int)bytes);
+ 
+-      if (argc > 6)
+-	fprintf(stderr, "INFO: Sending print file, %lu bytes...\n",
+-	        (unsigned long)tbytes);
++          print_bytes -= bytes;
++	  print_ptr   += bytes;
++	  total_bytes += bytes;
++	}
++      }
+     }
+   }
+ 
+@@ -649,13 +697,14 @@
+   * Close the serial port and input file and return...
+   */
+ 
+-  tcsetattr(fd, TCSADRAIN, &origopts);
++  tcsetattr(device_fd, TCSADRAIN, &origopts);
+ 
+-  close(fd);
+-  if (fp != 0)
+-    close(fp);
++  close(device_fd);
+ 
+-  return (wbytes < 0 ? CUPS_BACKEND_FAILED : CUPS_BACKEND_OK);
++  if (print_fd != 0)
++    close(print_fd);
++
++  return (total_bytes < 0 ? CUPS_BACKEND_FAILED : CUPS_BACKEND_OK);
+ }
+ 
+ 
+diff -urNad cupsys-1.2.1~/backend/snmp.c cupsys-1.2.1/backend/snmp.c
+--- cupsys-1.2.1~/backend/snmp.c	2006-07-19 00:38:00.000000000 +0000
++++ cupsys-1.2.1/backend/snmp.c	2006-07-19 00:40:14.000000000 +0000
+@@ -77,17 +77,10 @@
+  * Include necessary headers.
+  */
+ 
+-#include <cups/backend.h>
+ #include <cups/http-private.h>
+-#include <cups/cups.h>
+-#include <cups/string.h>
++#include "backend-private.h"
+ #include <cups/array.h>
+ #include <cups/file.h>
+-#include <errno.h>
+-#include <signal.h>
+-
+-#define SNMP_BACKEND
+-#include "ieee1284.c"
+ 
+ 
+ /*
+@@ -391,7 +384,7 @@
+ 
+   debug_printf("DEBUG: add_cache(addr=%p, addrname=\"%s\", uri=\"%s\", "
+                   "id=\"%s\", make_and_model=\"%s\")\n",
+-               addr, addrname, uri, id ? id :  "(null)",
++               addr, addrname, uri ? uri : "(null)", id ? id :  "(null)",
+ 	       make_and_model ? make_and_model : "(null)");
+ 
+   temp = calloc(1, sizeof(snmp_cache_t));
+@@ -1210,7 +1203,7 @@
+ compare_cache(snmp_cache_t *a,		/* I - First cache entry */
+               snmp_cache_t *b)		/* I - Second cache entry */
+ {
+-  return (a->address.ipv4.sin_addr.s_addr - b->address.ipv4.sin_addr.s_addr);
++  return (strcasecmp(a->addrname, b->addrname));
+ }
+ 
+ 
+@@ -1648,6 +1641,14 @@
+  	  info = NULL;
+ 
+        /*
++        * Don't use the printer-make-and-model if it contains a generic
++	* string like "Ricoh IPP Printer"...
++	*/
++
++	if (model && strstr(model->values[0].string.text, "IPP Printer"))
++	  model = NULL;
++
++       /*
+         * If we don't have a printer-make-and-model string from the printer
+ 	* but do have the 1284 device ID string, generate a make-and-model
+ 	* string from the device ID info...
+@@ -1656,7 +1657,9 @@
+ 	if (model)
+           strlcpy(temp, model->values[0].string.text, sizeof(temp));
+ 	else if (info)
+-	  get_make_model(info->values[0].string.text, temp, sizeof(temp));
++	  backendGetMakeModel(info->values[0].string.text, temp, sizeof(temp));
++        else
++	  temp[0] = '\0';
+ 
+         fix_make_model(make_model, temp, sizeof(make_model));
+ 
+@@ -1871,8 +1874,8 @@
+   * Find a matching device in the cache...
+   */
+ 
+-  key.address = addr;
+-  device      = (snmp_cache_t *)cupsArrayFind(Devices, &key);
++  key.addrname = addrname;
++  device       = (snmp_cache_t *)cupsArrayFind(Devices, &key);
+ 
+  /*
+   * Process the message...
+@@ -1928,8 +1931,8 @@
+       * Description is the IEEE-1284 device ID...
+       */
+ 
+-      get_make_model(packet.object_value.string, make_model,
+-                     sizeof(make_model));
++      backendGetMakeModel(packet.object_value.string, make_model,
++                	  sizeof(make_model));
+     }
+     else
+     {
+diff -urNad cupsys-1.2.1~/backend/socket.c cupsys-1.2.1/backend/socket.c
+--- cupsys-1.2.1~/backend/socket.c	2006-07-19 00:38:00.000000000 +0000
++++ cupsys-1.2.1/backend/socket.c	2006-07-19 00:40:14.000000000 +0000
+@@ -32,17 +32,11 @@
+  * Include necessary headers.
+  */
+ 
+-#include <cups/backend.h>
+ #include <cups/http-private.h>
+-#include <cups/cups.h>
+-#include <stdio.h>
+-#include <stdlib.h>
++#include "backend-private.h"
+ #include <stdarg.h>
+-#include <cups/string.h>
+-#include <errno.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+-#include <signal.h>
+ 
+ #ifdef WIN32
+ #  include <winsock.h>
+@@ -76,24 +70,19 @@
+ 		name[255],		/* Name of option */
+ 		value[255],		/* Value of option */
+ 		*ptr;			/* Pointer into name or value */
+-  int		fp;			/* Print file */
++  int		print_fd;		/* Print file */
+   int		copies;			/* Number of copies to print */
+   int		waiteof;		/* Wait for end-of-file? */
+   int		port;			/* Port number */
+   char		portname[255];		/* Port name */
+   int		delay;			/* Delay for retries... */
+-  int		fd;			/* AppSocket */
++  int		device_fd;		/* AppSocket */
+   int		error;			/* Error code (if any) */
+   http_addrlist_t *addrlist;		/* Address list */
+-  int		rbytes;			/* Number of bytes read */
+-  int		wbytes;			/* Number of bytes written */
+-  int		nbytes;			/* Number of bytes read */
+-  size_t	tbytes;			/* Total number of bytes written */
+-  char		buffer[8192],		/* Output buffer */
+-		*bufptr;		/* Pointer into buffer */
++  ssize_t	tbytes;			/* Total number of bytes written */
+   struct timeval timeout;		/* Timeout for select() */
+-  fd_set	input,			/* Input set for select() */
+-		output;			/* Output set for select() */
++  fd_set	input;			/* Input set for select() */
++  ssize_t	bc_bytes;		/* Number of back-channel bytes read */
+ #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
+   struct sigaction action;		/* Actions for POSIX signals */
+ #endif /* HAVE_SIGACTION && !HAVE_SIGSET */
+@@ -142,8 +131,8 @@
+ 
+   if (argc == 6)
+   {
+-    fp     = 0;
+-    copies = 1;
++    print_fd = 0;
++    copies   = 1;
+   }
+   else
+   {
+@@ -151,7 +140,7 @@
+     * Try to open the print file...
+     */
+ 
+-    if ((fp = open(argv[6], O_RDONLY)) < 0)
++    if ((print_fd = open(argv[6], O_RDONLY)) < 0)
+     {
+       perror("ERROR: unable to open print file");
+       return (CUPS_BACKEND_FAILED);
+@@ -252,228 +241,134 @@
+   fprintf(stderr, "INFO: Attempting to connect to host %s on port %d\n",
+           hostname, port);
+ 
+-  wbytes = 0;
++  fputs("STATE: +connecting-to-device\n", stderr);
+ 
+-  while (copies > 0)
++  for (delay = 5;;)
+   {
+-    fputs("STATE: +connecting-to-device\n", stderr);
+-
+-    for (delay = 5;;)
++    if (!httpAddrConnect(addrlist, &device_fd))
+     {
+-      if (!httpAddrConnect(addrlist, &fd))
+-      {
+-	error = errno;
+-	fd    = -1;
++      error     = errno;
++      device_fd = -1;
+ 
+-	if (getenv("CLASS") != NULL)
+-	{
+-	 /*
+-          * If the CLASS environment variable is set, the job was submitted
+-	  * to a class and not to a specific queue.  In this case, we want
+-	  * to abort immediately so that the job can be requeued on the next
+-	  * available printer in the class.
+-	  */
++      if (getenv("CLASS") != NULL)
++      {
++       /*
++        * If the CLASS environment variable is set, the job was submitted
++	* to a class and not to a specific queue.  In this case, we want
++	* to abort immediately so that the job can be requeued on the next
++	* available printer in the class.
++	*/
+ 
+-          fprintf(stderr, "INFO: Unable to connect to \"%s\", queuing on next printer in class...\n",
+-		  hostname);
++        fprintf(stderr, "INFO: Unable to connect to \"%s\", queuing on next printer in class...\n",
++		hostname);
+ 
+-	 /*
+-          * Sleep 5 seconds to keep the job from requeuing too rapidly...
+-	  */
++       /*
++        * Sleep 5 seconds to keep the job from requeuing too rapidly...
++	*/
+ 
+-	  sleep(5);
++	sleep(5);
+ 
+-          return (CUPS_BACKEND_FAILED);
+-	}
++        return (CUPS_BACKEND_FAILED);
++      }
+ 
+-	if (error == ECONNREFUSED || error == EHOSTDOWN ||
+-            error == EHOSTUNREACH)
+-	{
+-	  fprintf(stderr, "INFO: Network host \'%s\' is busy; will retry in %d seconds...\n",
+-                  hostname, delay);
+-	  sleep(delay);
++      if (error == ECONNREFUSED || error == EHOSTDOWN ||
++          error == EHOSTUNREACH)
++      {
++	fprintf(stderr,
++	        "INFO: Network host \'%s\' is busy; will retry in %d seconds...\n",
++                hostname, delay);
++	sleep(delay);
+ 
+-	  if (delay < 30)
+-	    delay += 5;
+-	}
+-	else
+-	{
+-	  perror("ERROR: Unable to connect to printer (retrying in 30 seconds)");
+-	  sleep(30);
+-	}
++	if (delay < 30)
++	  delay += 5;
+       }
+       else
+-	break;
++      {
++	perror("ERROR: Unable to connect to printer (retrying in 30 seconds)");
++	sleep(30);
++      }
+     }
++    else
++      break;
++  }
+ 
+-    fputs("STATE: -connecting-to-device\n", stderr);
+-
+-   /*
+-    * Now that we are "connected" to the port, ignore SIGTERM so that we
+-    * can finish out any page data the driver sends (e.g. to eject the
+-    * current page...  Only ignore SIGTERM if we are printing data from
+-    * stdin (otherwise you can't cancel raw jobs...)
+-    */
+-
+-    if (argc < 7)
+-    {
+-#ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
+-      sigset(SIGTERM, SIG_IGN);
+-#elif defined(HAVE_SIGACTION)
+-      memset(&action, 0, sizeof(action));
++  fputs("STATE: -connecting-to-device\n", stderr);
+ 
+-      sigemptyset(&action.sa_mask);
+-      action.sa_handler = SIG_IGN;
+-      sigaction(SIGTERM, &action, NULL);
+-#else
+-      signal(SIGTERM, SIG_IGN);
+-#endif /* HAVE_SIGSET */
+-    }
++ /*
++  * Print everything...
++  */
+ 
+-   /*
+-    * Finally, send the print file...
+-    */
++  tbytes = 0;
+ 
++  while (copies > 0 && tbytes >= 0)
++  {
+     copies --;
+ 
+-    if (fp != 0)
++    if (print_fd != 0)
+     {
+       fputs("PAGE: 1 1\n", stderr);
+-      lseek(fp, 0, SEEK_SET);
++      lseek(print_fd, 0, SEEK_SET);
+     }
+ 
+-    fputs("INFO: Connected to host, sending print job...\n", stderr);
+-
+-    tbytes = 0;
+-    while ((nbytes = read(fp, buffer, sizeof(buffer))) > 0)
+-    {
+-     /*
+-      * Write the print data to the printer...
+-      */
+-
+-      tbytes += nbytes;
+-      bufptr = buffer;
+-
+-      while (nbytes > 0)
+-      {
+-       /*
+-        * See if we are ready to read or write...
+-	*/
+-
+-        do
+-	{
+-          FD_ZERO(&input);
+-	  FD_SET(fd, &input);
+-	  FD_ZERO(&output);
+-	  FD_SET(fd, &output);
+-        }
+-	while (select(fd + 1, &input, &output, NULL, NULL) < 0);
+-
+-        if (FD_ISSET(fd, &input))
+-	{
+-	 /*
+-	  * Read backchannel data...
+-	  */
+-
+-	  if ((rbytes = recv(fd, resource, sizeof(resource), 0)) > 0)
+-	  {
+-	    fprintf(stderr, "DEBUG: Received %d bytes of back-channel data!\n",
+-	            rbytes);
+-            cupsBackChannelWrite(resource, rbytes, 1.0);
+-          }
+-	}
+-
+-        if (FD_ISSET(fd, &output))
+-	{
+-	 /*
+-	  * Write print data...
+-	  */
+-
+-	  if ((wbytes = send(fd, bufptr, nbytes, 0)) < 0)
+-	  {
+-	   /*
+-	    * Check for retryable errors...
+-	    */
++    tbytes = backendRunLoop(print_fd, device_fd, 1);
+ 
+-	    if (errno != EAGAIN && errno != EINTR)
+-	    {
+-	      perror("ERROR: Unable to send print file to printer");
+-	      break;
+-	    }
+-	  }
+-	  else
+-	  {
+-	   /*
+-	    * Update count and pointer...
+-	    */
++    if (print_fd != 0 && tbytes >= 0)
++      fprintf(stderr, "INFO: Sent print file, " CUPS_LLFMT " bytes...\n",
++	      CUPS_LLCAST tbytes);
++  }
+ 
+-	    nbytes -= wbytes;
+-	    bufptr += wbytes;
+-	  }
+-        }
+-      }
++  if (waiteof)
++  {
++   /*
++    * Shutdown the socket and wait for the other end to finish...
++    */
+ 
+-      if (wbytes < 0)
+-        break;
++    fputs("INFO: Print file sent, waiting for printer to finish...\n", stderr);
+ 
+-      if (argc > 6)
+-	fprintf(stderr, "INFO: Sending print file, %lu bytes...\n",
+-	        (unsigned long)tbytes);
+-    }
++    shutdown(device_fd, 1);
+ 
+-    if (waiteof)
++    for (;;)
+     {
+      /*
+-      * Shutdown the socket and wait for the other end to finish...
++      * Wait a maximum of 90 seconds for backchannel data or a closed
++      * connection...
+       */
+ 
+-      fputs("INFO: Print file sent, waiting for printer to finish...\n", stderr);
++      timeout.tv_sec  = 90;
++      timeout.tv_usec = 0;
+ 
+-      shutdown(fd, 1);
++      FD_ZERO(&input);
++      FD_SET(device_fd, &input);
+ 
+-      for (;;)
++#ifdef __hpux
++      if (select(device_fd + 1, (int *)&input, NULL, NULL, &timeout) > 0)
++#else
++      if (select(device_fd + 1, &input, NULL, NULL, &timeout) > 0)
++#endif /* __hpux */
+       {
+        /*
+-	* Wait a maximum of 90 seconds for backchannel data or a closed
+-	* connection...
++	* Grab the data coming back and spit it out to stderr...
+ 	*/
+ 
+-	timeout.tv_sec  = 90;
+-	timeout.tv_usec = 0;
+-
+-	FD_ZERO(&input);
+-	FD_SET(fd, &input);
+-
+-  #ifdef __hpux
+-	if (select(fd + 1, (int *)&input, NULL, NULL, &timeout) > 0)
+-  #else
+-	if (select(fd + 1, &input, NULL, NULL, &timeout) > 0)
+-  #endif /* __hpux */
++	if ((bc_bytes = read(device_fd, resource, sizeof(resource))) > 0)
+ 	{
+-	 /*
+-	  * Grab the data coming back and spit it out to stderr...
+-	  */
+-
+-	  if ((rbytes = recv(fd, resource, sizeof(resource), 0)) > 0)
+-	  {
+-	    fprintf(stderr, "DEBUG: Received %d bytes of back-channel data!\n",
+-		    rbytes);
+-	    cupsBackChannelWrite(resource, rbytes, 1.0);
+-	  }
+-	  else
+-	    break;
++	  fprintf(stderr, "DEBUG: Received %d bytes of back-channel data!\n",
++		  (int)bc_bytes);
++	  cupsBackChannelWrite(resource, bc_bytes, 1.0);
+ 	}
+ 	else
+ 	  break;
+       }
++      else
++	break;
+     }
++  }
+ 
+-   /*
+-    * Close the socket connection...
+-    */
++ /*
++  * Close the socket connection...
++  */
+ 
+-    close(fd);
+-  }
++  close(device_fd);
+ 
+   httpAddrFreeList(addrlist);
+ 
+@@ -481,13 +376,13 @@
+   * Close the input file and return...
+   */
+ 
+-  if (fp != 0)
+-    close(fp);
++  if (print_fd != 0)
++    close(print_fd);
+ 
+-  if (wbytes >= 0)
++  if (tbytes >= 0)
+     fputs("INFO: Ready to print.\n", stderr);
+ 
+-  return (wbytes < 0 ? CUPS_BACKEND_FAILED : CUPS_BACKEND_OK);
++  return (tbytes < 0 ? CUPS_BACKEND_FAILED : CUPS_BACKEND_OK);
+ }
+ 
+ 
+diff -urNad cupsys-1.2.1~/backend/test1284.c cupsys-1.2.1/backend/test1284.c
+--- cupsys-1.2.1~/backend/test1284.c	2006-07-19 00:38:00.000000000 +0000
++++ cupsys-1.2.1/backend/test1284.c	2006-07-19 00:40:14.000000000 +0000
+@@ -41,6 +41,7 @@
+ #  include <unistd.h>
+ #  include <fcntl.h>
+ #endif /* WIN32 */
++
+ #define DEBUG
+ #include "ieee1284.c"
+ 
+@@ -76,8 +77,8 @@
+ 
+     printf("%s:\n", argv[i]);
+ 
+-    get_device_id(fd, device_id, sizeof(device_id), make_model,
+-                  sizeof(make_model), "test", uri, sizeof(uri));
++    backendGetDeviceID(fd, device_id, sizeof(device_id), make_model,
++                       sizeof(make_model), "test", uri, sizeof(uri));
+ 
+     printf("    device_id=\"%s\"\n", device_id);
+     printf("    make_model=\"%s\"\n", make_model);
+diff -urNad cupsys-1.2.1~/backend/usb-darwin.c cupsys-1.2.1/backend/usb-darwin.c
+--- cupsys-1.2.1~/backend/usb-darwin.c	2006-07-19 00:38:00.000000000 +0000
++++ cupsys-1.2.1/backend/usb-darwin.c	2006-07-19 00:40:14.000000000 +0000
+@@ -1310,7 +1310,7 @@
+      */
+     start = mach_absolute_time();
+ 
+-    rbytes = sizeof(readbuffer) - 1;
++    rbytes = sizeof(readbuffer);
+     readstatus = (*classdriver)->ReadPipe( classdriver, readbuffer, &rbytes );
+     if ( kIOReturnSuccess == readstatus && rbytes > 0 ) {
+ 
+diff -urNad cupsys-1.2.1~/backend/usb-unix.c cupsys-1.2.1/backend/usb-unix.c
+--- cupsys-1.2.1~/backend/usb-unix.c	2006-07-19 00:38:00.000000000 +0000
++++ cupsys-1.2.1/backend/usb-unix.c	2006-07-19 00:40:14.000000000 +0000
+@@ -27,8 +27,9 @@
+  *
+  * Contents:
+  *
+- *   main()         - Send a file to the specified USB port.
++ *   print_device() - Print a file to a USB device.
+  *   list_devices() - List all USB devices.
++ *   open_device()  - Open a USB device...
+  */
+ 
+ /*
+@@ -43,7 +44,7 @@
+  * Local functions...
+  */
+ 
+-int	open_device(const char *uri);
++int	open_device(const char *uri, int *use_bc);
+ 
+ 
+ /*
+@@ -55,43 +56,21 @@
+              const char *hostname,	/* I - Hostname/manufacturer */
+              const char *resource,	/* I - Resource/modelname */
+ 	     const char *options,	/* I - Device options/serial number */
+-	     int        fp,		/* I - File descriptor to print */
++	     int        print_fd,	/* I - File descriptor to print */
+ 	     int        copies,		/* I - Copies to print */
+ 	     int	argc,		/* I - Number of command-line arguments (6 or 7) */
+ 	     char	*argv[])	/* I - Command-line arguments */
+ {
+-  int		usebc;			/* Use backchannel path? */
+-  int		fd;			/* USB device */
+-  int		rbytes;			/* Number of bytes read */
+-  int		wbytes;			/* Number of bytes written */
+-  size_t	nbytes,			/* Number of bytes read */
+-		tbytes;			/* Total number of bytes written */
+-  char		buffer[8192],		/* Output buffer */
+-		*bufptr,		/* Pointer into buffer */
+-		backbuf[1024];		/* Backchannel buffer */
++  int		use_bc;			/* Use backchannel path? */
++  int		device_fd;		/* USB device */
++  size_t	tbytes;			/* Total number of bytes written */
+   struct termios opts;			/* Parallel port options */
+-  fd_set	input,			/* Input set for select() */
+-		output;			/* Output set for select() */
+-  int		paperout;		/* Paper out? */
+-#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
+-  struct sigaction action;		/* Actions for POSIX signals */
+-#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
+-#ifdef __linux
+-  unsigned int	status;			/* Port status (off-line, out-of-paper, etc.) */
+-#endif /* __linux */
++
+ 
+   (void)argc;
+   (void)argv;
+ 
+  /*
+-  * Disable backchannel data when printing to Canon USB printers - apparently
+-  * Canon printers will return the IEEE-1284 device ID over and over and over
+-  * when they get a read request...
+-  */
+-
+-  usebc = strcasecmp(hostname, "Canon") != 0;
+-
+- /*
+   * Open the USB port device...
+   */
+ 
+@@ -99,7 +78,15 @@
+ 
+   do
+   {
+-    if ((fd = open_device(uri)) == -1)
++   /*
++    * Disable backchannel data when printing to Canon USB printers - apparently
++    * Canon printers will return the IEEE-1284 device ID over and over and over
++    * when they get a read request...
++    */
++
++    use_bc = strcasecmp(hostname, "Canon") != 0;
++
++    if ((device_fd = open_device(uri, &use_bc)) == -1)
+     {
+       if (getenv("CLASS") != NULL)
+       {
+@@ -127,7 +114,8 @@
+         fputs("INFO: USB port busy; will retry in 30 seconds...\n", stderr);
+ 	sleep(30);
+       }
+-      else if (errno == ENXIO || errno == EIO || errno == ENOENT || errno == ENODEV)
++      else if (errno == ENXIO || errno == EIO || errno == ENOENT ||
++               errno == ENODEV)
+       {
+         fputs("INFO: Printer not connected; will retry in 30 seconds...\n", stderr);
+ 	sleep(30);
+@@ -140,7 +128,7 @@
+       }
+     }
+   }
+-  while (fd < 0);
++  while (device_fd < 0);
+ 
+   fputs("STATE: -connecting-to-device\n", stderr);
+ 
+@@ -148,189 +136,44 @@
+   * Set any options provided...
+   */
+ 
+-  tcgetattr(fd, &opts);
++  tcgetattr(device_fd, &opts);
+ 
+   opts.c_lflag &= ~(ICANON | ECHO | ISIG);	/* Raw mode */
+ 
+   /**** No options supported yet ****/
+ 
+-  tcsetattr(fd, TCSANOW, &opts);
+-
+- /*
+-  * Check printer status...
+-  */
+-
+-  paperout = 0;
+-
+-#if defined(__linux) && defined(LP_POUTPA)
+- /*
+-  * Show the printer status before we send the file...
+-  */
+-
+-  while (!ioctl(fd, LPGETSTATUS, &status))
+-  {
+-    fprintf(stderr, "DEBUG: LPGETSTATUS returned a port status of %02X...\n", status);
+-
+-    if (status & LP_POUTPA)
+-    {
+-      fputs("WARNING: Media tray empty!\n", stderr);
+-      fputs("STATUS: +media-tray-empty-error\n", stderr);
+-
+-      paperout = 1;
+-    }
+-
+-    if (!(status & LP_PERRORP))
+-      fputs("WARNING: Printer fault!\n", stderr);
+-    else if (!(status & LP_PSELECD))
+-      fputs("WARNING: Printer off-line.\n", stderr);
+-    else
+-      break;
+-
+-    sleep(5);
+-  }
+-#endif /* __linux && LP_POUTPA */
+-
+- /*
+-  * Now that we are "connected" to the port, ignore SIGTERM so that we
+-  * can finish out any page data the driver sends (e.g. to eject the
+-  * current page...  Only ignore SIGTERM if we are printing data from
+-  * stdin (otherwise you can't cancel raw jobs...)
+-  */
+-
+-  if (!fp)
+-  {
+-#ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
+-    sigset(SIGTERM, SIG_IGN);
+-#elif defined(HAVE_SIGACTION)
+-    memset(&action, 0, sizeof(action));
+-
+-    sigemptyset(&action.sa_mask);
+-    action.sa_handler = SIG_IGN;
+-    sigaction(SIGTERM, &action, NULL);
+-#else
+-    signal(SIGTERM, SIG_IGN);
+-#endif /* HAVE_SIGSET */
+-  }
++  tcsetattr(device_fd, TCSANOW, &opts);
+ 
+  /*
+   * Finally, send the print file...
+   */
+ 
+-  wbytes = 0;
++  tbytes = 0;
+ 
+-  while (copies > 0)
++  while (copies > 0 && tbytes >= 0)
+   {
+     copies --;
+ 
+-    if (fp != 0)
++    if (print_fd != 0)
+     {
+       fputs("PAGE: 1 1\n", stderr);
+-      lseek(fp, 0, SEEK_SET);
++      lseek(print_fd, 0, SEEK_SET);
+     }
+ 
+-    tbytes = 0;
+-    while ((nbytes = read(fp, buffer, sizeof(buffer))) > 0)
+-    {
+-     /*
+-      * Write the print data to the printer...
+-      */
+-
+-      tbytes += nbytes;
+-      bufptr = buffer;
+-
+-      while (nbytes > 0)
+-      {
+-       /*
+-        * See if we are ready to read or write...
+-	*/
+-
+-        do
+-	{
+-          FD_ZERO(&input);
+-	  if (usebc)
+-	    FD_SET(fd, &input);
+-
+-	  FD_ZERO(&output);
+-	  FD_SET(fd, &output);
+-        }
+-	while (select(fd + 1, &input, &output, NULL, NULL) < 0);
+-
+-        if (FD_ISSET(fd, &input))
+-	{
+-	 /*
+-	  * Read backchannel data...
+-	  */
+-
+-	  if ((rbytes = read(fd, backbuf, sizeof(backbuf))) > 0)
+-	  {
+-	    fprintf(stderr, "DEBUG: Received %d bytes of back-channel data!\n",
+-	            rbytes);
+-            cupsBackChannelWrite(backbuf, rbytes, 1.0);
+-          }
+-	}
+-
+-        if (FD_ISSET(fd, &output))
+-	{
+-	 /*
+-	  * Write print data...
+-	  */
+-
+-	  if ((wbytes = write(fd, bufptr, nbytes)) < 0)
+-	    if (errno == ENOTTY)
+-	      wbytes = write(fd, bufptr, nbytes);
+-
+-	  if (wbytes < 0)
+-	  {
+-	   /*
+-	    * Check for retryable errors...
+-	    */
+-
+-	    if (errno == ENOSPC)
+-	    {
+-	      paperout = 1;
+-	      fputs("ERROR: Out of paper!\n", stderr);
+-	      fputs("STATUS: +media-tray-empty-error\n", stderr);
+-	    }
+-	    else if (errno != EAGAIN && errno != EINTR)
+-	    {
+-	      perror("ERROR: Unable to send print file to printer");
+-	      break;
+-	    }
+-	  }
+-	  else
+-	  {
+-	   /*
+-	    * Update count and pointer...
+-	    */
+-
+-            if (paperout)
+-	    {
+-	      fputs("STATUS: -media-tray-empty-error\n", stderr);
+-	      paperout = 0;
+-	    }
+-
+-	    nbytes -= wbytes;
+-	    bufptr += wbytes;
+-	  }
+-	}
+-      }
+-
+-      if (wbytes < 0)
+-        break;
++    tbytes = backendRunLoop(print_fd, device_fd, use_bc);
+ 
+-      if (fp)
+-	fprintf(stderr, "INFO: Sending print file, %lu bytes...\n",
+-	        (unsigned long)tbytes);
+-    }
++    if (print_fd != 0 && tbytes >= 0)
++      fprintf(stderr, "INFO: Sent print file, " CUPS_LLFMT " bytes...\n",
++	      CUPS_LLCAST tbytes);
+   }
+ 
+  /*
+   * Close the USB port and return...
+   */
+ 
+-  close(fd);
++  close(device_fd);
+ 
+-  return (wbytes < 0 ? CUPS_BACKEND_FAILED : CUPS_BACKEND_OK);
++  return (tbytes < 0 ? CUPS_BACKEND_FAILED : CUPS_BACKEND_OK);
+ }
+ 
+ 
+@@ -372,9 +215,9 @@
+ 
+     if ((fd = open(device, O_RDWR | O_EXCL)) >= 0)
+     {
+-      if (!get_device_id(fd, device_id, sizeof(device_id),
+-                         make_model, sizeof(make_model),
+-			 "usb", device_uri, sizeof(device_uri)))
++      if (!backendGetDeviceID(fd, device_id, sizeof(device_id),
++                              make_model, sizeof(make_model),
++			      "usb", device_uri, sizeof(device_uri)))
+ 	printf("direct %s \"%s\" \"%s USB #%d\" \"%s\"\n", device_uri,
+ 	       make_model, make_model, i + 1, device_id);
+ 
+@@ -399,11 +242,11 @@
+   {
+     sprintf(device, "/dev/usb/printer%d", i);
+ 
+-    if ((fd = open(device, O_RDWR | O_EXCL)) >= 0)
++    if ((fd = open(device, O_WRONLY | O_EXCL)) >= 0)
+     {
+-      if (!get_device_id(fd, device_id, sizeof(device_id),
+-                         make_model, sizeof(make_model),
+-			 "usb", device_uri, sizeof(device_uri)))
++      if (!backendGetDeviceID(fd, device_id, sizeof(device_id),
++                              make_model, sizeof(make_model),
++			      "usb", device_uri, sizeof(device_uri)))
+ 	printf("direct %s \"%s\" \"%s USB #%d\" \"%s\"\n", device_uri,
+ 	       make_model, make_model, i + 1, device_id);
+ 
+@@ -436,8 +279,12 @@
+  */
+ 
+ int					/* O - File descriptor or -1 on error */
+-open_device(const char *uri)		/* I - Device URI */
++open_device(const char *uri,		/* I - Device URI */
++            int        *use_bc)		/* O - Set to 0 for unidirectional */
+ {
++  int	fd;				/* File descriptor */
++
++
+  /*
+   * The generic implementation just treats the URI as a device filename...
+   * Specific operating systems may also support using the device serial
+@@ -446,7 +293,14 @@
+ 
+   if (!strncmp(uri, "usb:/dev/", 9))
+ #ifdef __linux
+-    return (-1); /* Do not allow direct devices anymore */
++  {
++   /*
++    * Do not allow direct devices anymore...
++    */
++
++    errno = ENODEV;
++    return (-1);
++  }
+   else if (!strncmp(uri, "usb://", 6))
+   {
+    /*
+@@ -455,7 +309,6 @@
+ 
+     int		i;			/* Looping var */
+     int		busy;			/* Are any ports busy? */
+-    int		fd;			/* File descriptor */
+     char	format[255],		/* Format for device filename */
+ 		device[255],		/* Device filename */
+ 		device_id[1024],	/* Device ID string */
+@@ -486,9 +339,9 @@
+ 
+ 	if ((fd = open(device, O_RDWR | O_EXCL)) >= 0)
+ 	{
+-	  get_device_id(fd, device_id, sizeof(device_id),
+-                        make_model, sizeof(make_model),
+-			"usb", device_uri, sizeof(device_uri));
++	  backendGetDeviceID(fd, device_id, sizeof(device_id),
++                             make_model, sizeof(make_model),
++			     "usb", device_uri, sizeof(device_uri));
+ 	}
+ 	else
+ 	{
+@@ -545,7 +398,14 @@
+     return (-1);
+   }
+ #elif defined(__sun) && defined(ECPPIOC_GETDEVID)
+-    return (-1); /* Do not allow direct devices anymore */
++  {
++   /*
++    * Do not allow direct devices anymore...
++    */
++
++    errno = ENODEV;
++    return (-1);
++  }
+   else if (!strncmp(uri, "usb://", 6))
+   {
+    /*
+@@ -554,7 +414,6 @@
+ 
+     int		i;			/* Looping var */
+     int		busy;			/* Are any ports busy? */
+-    int		fd;			/* File descriptor */
+     char	device[255],		/* Device filename */
+ 		device_id[1024],	/* Device ID string */
+ 		make_model[1024],	/* Make and model */
+@@ -571,10 +430,10 @@
+       {
+ 	sprintf(device, "/dev/usb/printer%d", i);
+ 
+-	if ((fd = open(device, O_RDWR | O_EXCL)) >= 0)
+-	  get_device_id(fd, device_id, sizeof(device_id),
+-                        make_model, sizeof(make_model),
+-			"usb", device_uri, sizeof(device_uri));
++	if ((fd = open(device, O_WRONLY | O_EXCL)) >= 0)
++	  backendGetDeviceID(fd, device_id, sizeof(device_id),
++                             make_model, sizeof(make_model),
++			     "usb", device_uri, sizeof(device_uri));
+ 	else
+ 	{
+ 	 /*
+@@ -589,7 +448,17 @@
+         }
+ 
+         if (!strcmp(uri, device_uri))
+-	  return (fd);	/* Yes, return this file descriptor... */
++	{
++	 /*
++	  * Yes, return this file descriptor...
++	  */
++
++          fputs("DEBUG: Setting use_bc to 0!\n", stderr);
++
++          *use_bc = 0;
++
++	  return (fd);
++	}
+ 
+        /*
+ 	* This wasn't the one...
+@@ -622,7 +491,15 @@
+     return (-1);
+   }
+ #else
+-    return (open(uri + 4, O_RDWR | O_EXCL));
++  {
++    if ((fd = open(uri + 4, O_RDWR | O_EXCL)) < 0)
++    {
++      fd      = open(uri + 4, O_WRONLY | O_EXCL);
++      *use_bc = 0;
++    }
++
++    return (fd);
++  }
+ #endif /* __linux */
+   else
+   {
+diff -urNad cupsys-1.2.1~/backend/usb.c cupsys-1.2.1/backend/usb.c
+--- cupsys-1.2.1~/backend/usb.c	2006-07-19 00:38:00.000000000 +0000
++++ cupsys-1.2.1/backend/usb.c	2006-07-19 00:40:14.000000000 +0000
+@@ -63,7 +63,7 @@
+ void	list_devices(void);
+ int	print_device(const char *uri, const char *hostname,
+ 	             const char *resource, const char *options,
+-		     int fp, int copies, int argc, char *argv[]);
++		     int print_fd, int copies, int argc, char *argv[]);
+ 
+ 
+ /*
+@@ -108,7 +108,7 @@
+              const char *hostname,	/* I - Hostname/manufacturer */
+              const char *resource,	/* I - Resource/modelname */
+ 	     const char *options,	/* I - Device options/serial number */
+-	     int        fp,		/* I - File descriptor to print */
++	     int        print_fd,	/* I - File descriptor to print */
+ 	     int        copies,		/* I - Copies to print */
+ 	     int	argc,		/* I - Number of command-line arguments (6 or 7) */
+ 	     char	*argv[])	/* I - Command-line arguments */
+@@ -124,7 +124,7 @@
+   (void)hostname;
+   (void)resource;
+   (void)options;
+-  (void)fp;
++  (void)print_fd;
+   (void)copies;
+   (void)argc;
+   (void)argv;
+@@ -146,7 +146,7 @@
+ main(int  argc,				/* I - Number of command-line arguments (6 or 7) */
+      char *argv[])			/* I - Command-line arguments */
+ {
+-  int		fp;			/* Print file */
++  int		print_fd;		/* Print file */
+   int		copies;			/* Number of copies to print */
+   int		status;			/* Exit status */
+   int		port;			/* Port number (not used) */
+@@ -232,8 +232,8 @@
+ 
+   if (argc == 6)
+   {
+-    fp     = 0;
+-    copies = 1;
++    print_fd = 0;
++    copies   = 1;
+   }
+   else
+   {
+@@ -241,7 +241,7 @@
+     * Try to open the print file...
+     */
+ 
+-    if ((fp = open(argv[6], O_RDONLY)) < 0)
++    if ((print_fd = open(argv[6], O_RDONLY)) < 0)
+     {
+       fprintf(stderr, "ERROR: unable to open print file %s - %s\n",
+               argv[6], strerror(errno));
+@@ -255,14 +255,15 @@
+   * Finally, send the print file...
+   */
+ 
+-  status = print_device(uri, hostname, resource, options, fp, copies, argc, argv);
++  status = print_device(uri, hostname, resource, options, print_fd, copies,
++                        argc, argv);
+ 
+  /*
+   * Close the input file and return...
+   */
+ 
+-  if (fp != 0)
+-    close(fp);
++  if (print_fd != 0)
++    close(print_fd);
+ 
+   return (status);
+ }
+diff -urNad cupsys-1.2.1~/berkeley/lpq.c cupsys-1.2.1/berkeley/lpq.c
+--- cupsys-1.2.1~/berkeley/lpq.c	2006-07-19 00:38:00.000000000 +0000
++++ cupsys-1.2.1/berkeley/lpq.c	2006-07-19 00:40:14.000000000 +0000
+@@ -79,8 +79,6 @@
+   cups_lang_t	*language;		/* Language */
+ 
+ 
+-
+-
+  /*
+   * Check for command-line options...
+   */
+diff -urNad cupsys-1.2.1~/berkeley/lprm.c cupsys-1.2.1/berkeley/lprm.c
+--- cupsys-1.2.1~/berkeley/lprm.c	2006-07-19 00:38:00.000000000 +0000
++++ cupsys-1.2.1/berkeley/lprm.c	2006-07-19 00:40:14.000000000 +0000
+@@ -57,7 +57,8 @@
+   ipp_op_t	op;		/* Operation */
+   cups_lang_t	*language;	/* Language */
+   int		num_dests;	/* Number of destinations */
+-  cups_dest_t	*dests;		/* Destinations */
++  cups_dest_t	*dests,		/* Destinations */
++		*defdest;	/* Default destination */
+   http_encryption_t encryption;	/* Encryption? */
+ 
+ 
+@@ -72,11 +73,6 @@
+   http       = NULL;
+   encryption = cupsEncryption();
+   language   = cupsLangDefault();
+-  num_dests  = cupsGetDests(&dests);
+-
+-  for (i = 0; i < num_dests; i ++)
+-    if (dests[i].is_default)
+-      dest = dests[i].name;
+ 
+  /*
+   * Open a connection to the server...
+@@ -85,10 +81,13 @@
+   if ((http = httpConnectEncrypt(cupsServer(), ippPort(), encryption)) == NULL)
+   {
+     _cupsLangPuts(stderr, _("lprm: Unable to contact server!\n"));
+-    cupsFreeDests(num_dests, dests);
+     return (1);
+   }
+ 
++  num_dests  = cupsGetDests2(http, &dests);
++  defdest    = cupsGetDest(NULL, NULL, num_dests, dests);
++  dest       = defdest ? defdest->name : NULL;
++
+  /*
+   * Process command-line arguments...
+   */
+@@ -102,6 +101,7 @@
+ 	    encryption = HTTP_ENCRYPT_REQUIRED;
+ 
+ 	    httpEncryption(http, encryption);
++	    cupsSetEncryption(encryption);
+ #else
+             _cupsLangPrintf(stderr,
+ 	                    _("%s: Sorry, no encryption support compiled in!\n"),
+@@ -152,9 +152,6 @@
+ 	    break;
+ 	    
+         case 'h' : /* Connect to host */
+-	    if (http != NULL)
+-	      httpClose(http);
+-
+ 	    if (argv[i][2] != '\0')
+               cupsSetServer(argv[i] + 2);
+ 	    else
+@@ -172,6 +169,20 @@
+ 	      else
+                 cupsSetServer(argv[i]);
+ 	    }
++
++            httpClose(http);
++            cupsFreeDests(num_dests, dests);
++
++	    if ((http = httpConnectEncrypt(cupsServer(), ippPort(),
++	                                   encryption)) == NULL)
++	    {
++	      _cupsLangPuts(stderr, _("lprm: Unable to contact server!\n"));
++	      return (1);
++	    }
++
++	    num_dests  = cupsGetDests2(http, &dests);
++	    defdest    = cupsGetDest(NULL, NULL, num_dests, dests);
++	    dest       = defdest ? defdest->name : NULL;
+ 	    break;
+ 
+ 	default :
+diff -urNad cupsys-1.2.1~/cgi-bin/help-index.c cupsys-1.2.1/cgi-bin/help-index.c
+--- cupsys-1.2.1~/cgi-bin/help-index.c	2006-07-19 00:38:00.000000000 +0000
++++ cupsys-1.2.1/cgi-bin/help-index.c	2006-07-19 00:40:15.000000000 +0000
+@@ -842,7 +842,7 @@
+ 	if (isspace(*ptr & 255))
+ 	{
+ 	  while (isspace(*ptr & 255))
+-	    *ptr ++;
++	    ptr ++;
+ 
+ 	  *text++ = ' ';
+         }
+diff -urNad cupsys-1.2.1~/config-scripts/cups-compiler.m4 cupsys-1.2.1/config-scripts/cups-compiler.m4
+--- cupsys-1.2.1~/config-scripts/cups-compiler.m4	2006-07-19 00:38:00.000000000 +0000
++++ cupsys-1.2.1/config-scripts/cups-compiler.m4	2006-07-19 00:40:14.000000000 +0000
+@@ -24,22 +24,31 @@
+ 
+ dnl Clear the debugging and non-shared library options unless the user asks
+ dnl for them...
+-ARCHFLAGS=""
+ OPTIM=""
+-AC_SUBST(ARCHFLAGS)
+ AC_SUBST(OPTIM)
+ 
+ AC_ARG_WITH(optim, [  --with-optim="flags"    set optimization flags ])
+-AC_ARG_WITH(archflags, [  --with-arch="flags"     set default architecture flags ])
+-
+ AC_ARG_ENABLE(debug, [  --enable-debug          turn on debugging, default=no],
+ 	[if test x$enable_debug = xyes; then
+ 		OPTIM="-g"
+ 	fi])
+ 
++dnl Setup general architecture flags...
++AC_ARG_WITH(archflags, [  --with-archflags="flags"
++                          set default architecture flags ])
++
++if test -z "$with_archflags"; then
++	ARCHFLAGS=""
++else
++	ARCHFLAGS="$with_archflags"
++fi
++
++AC_SUBST(ARCHFLAGS)
++
+ dnl Setup support for separate 32/64-bit library generation...
+ AC_ARG_ENABLE(32bit, [  --enable-32bit          generate 32-bit libraries on 32/64-bit systems, default=no])
+-AC_ARG_WITH(arch32flags, [  --with-arch32="flags"   specifies 32-bit architecture flags])
++AC_ARG_WITH(arch32flags, [  --with-arch32flags="flags"
++                          specifies 32-bit architecture flags])
+ 
+ ARCH32FLAGS=""
+ INSTALL32=""
+@@ -56,7 +65,8 @@
+ AC_SUBST(UNINSTALL32)
+ 
+ AC_ARG_ENABLE(64bit, [  --enable-64bit          generate 64-bit libraries on 32/64-bit systems, default=no])
+-AC_ARG_WITH(arch64flags, [  --with-arch64="flags"   specifies 64-bit architecture flags])
++AC_ARG_WITH(arch64flags, [  --with-arch64flags="flags"
++                          specifies 64-bit architecture flags])
+ 
+ ARCH64FLAGS=""
+ INSTALL64=""
+@@ -118,17 +128,6 @@
+ 	fi
+ 
+ 	case "$uname" in
+-		Darwin*)
+-			if test -z "$with_archflags"; then
+-				if test "x`uname -m`" = xi386; then
+-					# Build universal binaries for OSX on Intel...
+-					ARCHFLAGS="-arch i386 -arch ppc"
+-				fi
+-			else
+-				ARCHFLAGS="$with_archflags"
+-			fi
+-			;;
+-
+ 		IRIX)
+ 			if test "x$enable_32bit" = xyes; then
+ 				# Build 32-bit libraries, 64-bit base...
+@@ -149,8 +148,6 @@
+ 					else
+ 						ARCHFLAGS="$with_arch64flags"
+ 					fi
+-				else
+-					ARCHFLAGS="$with_archflags"
+ 				fi
+ 			fi
+ 
+@@ -173,8 +170,6 @@
+ 					else
+ 						ARCHFLAGS="$with_arch32flags"
+ 					fi
+-				else
+-					ARCHFLAGS="$with_archflags"
+ 				fi
+ 			fi
+ 			;;
+@@ -202,8 +197,6 @@
+ 					else
+ 						ARCHFLAGS="$with_arch64flags"
+ 					fi
+-				else
+-					ARCHFLAGS="$with_archflags"
+ 				fi
+ 			fi
+ 
+@@ -229,8 +222,6 @@
+ 					else
+ 						ARCHFLAGS="$with_arch32flags"
+ 					fi
+-				else
+-					ARCHFLAGS="$with_archflags"
+ 				fi
+ 			fi
+ 			;;
+@@ -255,8 +246,6 @@
+ 					else
+ 						ARCHFLAGS="$with_arch64flags"
+ 					fi
+-				else
+-					ARCHFLAGS="$with_archflags"
+ 				fi
+ 			fi
+ 
+@@ -279,8 +268,6 @@
+ 					else
+ 						ARCHFLAGS="$with_arch32flags"
+ 					fi
+-				else
+-					ARCHFLAGS="$with_archflags"
+ 				fi
+ 			fi
+ 			;;
+@@ -310,13 +297,6 @@
+ 			# Warning 829 is passing constant string as char *
+ 			CXXFLAGS="+W336,829 $CXXFLAGS"
+ 
+-			if test -z "$with_archflags"; then
+-				# Build portable binaries for all HP systems...
+-				ARCHFLAGS="+DAportable"
+-			else
+-				ARCHFLAGS="$with_archflags"
+-			fi
+-
+ 			if test $PICFLAG = 1; then
+ 				OPTIM="+z $OPTIM"
+ 			fi
+@@ -353,8 +333,6 @@
+ 					else
+ 						ARCHFLAGS="$with_arch64flags"
+ 					fi
+-				else
+-					ARCHFLAGS="$with_archflags"
+ 				fi
+ 			fi
+ 
+@@ -377,8 +355,6 @@
+ 					else
+ 						ARCHFLAGS="$with_arch32flags"
+ 					fi
+-				else
+-					ARCHFLAGS="$with_archflags"
+ 				fi
+ 			fi
+ 			;;
+@@ -386,7 +362,7 @@
+ 			# Solaris
+ 			if test -z "$OPTIM"; then
+ 				if test "x$with_optim" = x; then
+-					OPTIM="-xO4"
++					OPTIM="-xO2"
+ 				else
+ 					OPTIM="$with_optim $OPTIM"
+ 				fi
+@@ -419,8 +395,6 @@
+ 					else
+ 						ARCHFLAGS="$with_arch64flags"
+ 					fi
+-				else
+-					ARCHFLAGS="$with_archflags"
+ 				fi
+ 			else
+ 				if test "x$enable_64bit" = xyes; then
+@@ -446,8 +420,6 @@
+ 					else
+ 						ARCHFLAGS="$with_arch32flags"
+ 					fi
+-				else
+-					ARCHFLAGS="$with_archflags"
+ 				fi
+ 			fi
+ 			;;
+diff -urNad cupsys-1.2.1~/config-scripts/cups-defaults.m4 cupsys-1.2.1/config-scripts/cups-defaults.m4
+--- cupsys-1.2.1~/config-scripts/cups-defaults.m4	2006-07-19 00:38:00.000000000 +0000
++++ cupsys-1.2.1/config-scripts/cups-defaults.m4	2006-07-19 00:40:14.000000000 +0000
+@@ -24,13 +24,13 @@
+ dnl
+ 
+ dnl Default langugages...
+-AC_ARG_WITH(languages, [  --with-languages        set installed languages, default="es ja" ],
++AC_ARG_WITH(languages, [  --with-languages        set installed languages, default="de es ja pl sv" ],
+ 	LANGUAGES="$withval",
+-	LANGUAGES="es ja pl sv")
++	LANGUAGES="de es ja pl sv")
+ AC_SUBST(LANGUAGES)
+ 
+ dnl Default ConfigFilePerm
+-AC_ARG_WITH(config_perm, [  --with-config-file-perm set default ConfigFilePerm value, default=0640],
++AC_ARG_WITH(config_file_perm, [  --with-config-file-perm set default ConfigFilePerm value, default=0640],
+ 	CUPS_CONFIG_FILE_PERM="$withval",
+ 	if test "x$uname" = xDarwin; then
+ 		CUPS_CONFIG_FILE_PERM="644"
+@@ -41,7 +41,7 @@
+ AC_DEFINE_UNQUOTED(CUPS_DEFAULT_CONFIG_FILE_PERM, 0$CUPS_CONFIG_FILE_PERM)
+ 
+ dnl Default LogFilePerm
+-AC_ARG_WITH(log_perm, [  --with-log-file-perm    set default LogFilePerm value, default=0644],
++AC_ARG_WITH(log_file_perm, [  --with-log-file-perm    set default LogFilePerm value, default=0644],
+ 	CUPS_LOG_FILE_PERM="$withval",
+ 	CUPS_LOG_FILE_PERM="644")
+ AC_SUBST(CUPS_LOG_FILE_PERM)
+@@ -59,7 +59,7 @@
+ AC_SUBST(CUPS_BROWSING)
+ 
+ dnl Default BrowseLocalProtocols
+-AC_ARG_WITH(browse_local, [  --with-local-protocols  set default BrowseLocalProtocols, default="CUPS"],
++AC_ARG_WITH(local_protocols, [  --with-local-protocols  set default BrowseLocalProtocols, default="CUPS"],
+ 	CUPS_BROWSE_LOCAL_PROTOCOLS="$withval",
+ 	CUPS_BROWSE_LOCAL_PROTOCOLS="CUPS")
+ AC_SUBST(CUPS_BROWSE_LOCAL_PROTOCOLS)
+@@ -67,7 +67,7 @@
+ 	"$CUPS_BROWSE_LOCAL_PROTOCOLS")
+ 
+ dnl Default BrowseRemoteProtocols
+-AC_ARG_WITH(browse_remote, [  --with-remote-protocols set default BrowseRemoteProtocols, default="CUPS"],
++AC_ARG_WITH(remote_protocols, [  --with-remote-protocols set default BrowseRemoteProtocols, default="CUPS"],
+ 	CUPS_BROWSE_REMOTE_PROTOCOLS="$withval",
+ 	CUPS_BROWSE_REMOTE_PROTOCOLS="CUPS")
+ AC_SUBST(CUPS_BROWSE_REMOTE_PROTOCOLS)
+@@ -130,7 +130,7 @@
+ AC_SUBST(CUPS_USE_NETWORK_DEFAULT)
+ 
+ dnl Determine the correct username and group for this OS...
+-AC_ARG_WITH(cups-user, [  --with-cups-user        set default user for CUPS],
++AC_ARG_WITH(cups_user, [  --with-cups-user        set default user for CUPS],
+ 	CUPS_USER="$withval",
+ 	AC_MSG_CHECKING(for default print user)
+ 	if test -f /etc/passwd; then
+@@ -152,7 +152,7 @@
+ 		AC_MSG_RESULT(no password file, using "$CUPS_USER")
+ 	fi)
+ 
+-AC_ARG_WITH(cups-group, [  --with-cups-group       set default group for CUPS],
++AC_ARG_WITH(cups_group, [  --with-cups-group       set default group for CUPS],
+ 	CUPS_GROUP="$withval",
+ 	AC_MSG_CHECKING(for default print group)
+ 	if test -f /etc/group; then
+@@ -175,7 +175,7 @@
+ 		AC_MSG_RESULT(no group file, using "$CUPS_GROUP")
+ 	fi)
+ 
+-AC_ARG_WITH(system-groups, [  --with-system-groups    set default system groups for CUPS],
++AC_ARG_WITH(system_groups, [  --with-system-groups    set default system groups for CUPS],
+ 	CUPS_SYSTEM_GROUPS="$withval",
+ 	if test x$uname = xDarwin; then
+ 		GROUP_LIST="admin"
+@@ -221,13 +221,25 @@
+ dnl Default printcap file...
+ AC_ARG_WITH(printcap, [  --with-printcap         set default printcap file],
+ 	default_printcap="$withval",
+-	default_printcap="/etc/printcap")
++	default_printcap="default")
+ 
+ if test x$enable_printcap != xno -a x$default_printcap != xno; then
+-	if test "x$default_printcap" = "x/etc/printcap" -a "$uname" = "Darwin" -a $uversion -ge 90; then
+-		CUPS_DEFAULT_PRINTCAP=""
+-	else
+-		CUPS_DEFAULT_PRINTCAP="$default_printcap"
++	if test "x$default_printcap" = "xdefault"; then
++		case $uname in
++			Darwin*)
++				if test $uversion -ge 90; then
++					CUPS_DEFAULT_PRINTCAP=""
++				else
++					CUPS_DEFAULT_PRINTCAP="/etc/printcap"
++				fi
++				;;
++			SunOS*)
++				CUPS_DEFAULT_PRINTCAP="/etc/printers.conf"
++				;;
++			*)
++				CUPS_DEFAULT_PRINTCAP="/etc/printcap"
++				;;
++		esac
+ 	fi
+ else
+ 	CUPS_DEFAULT_PRINTCAP=""
+diff -urNad cupsys-1.2.1~/config-scripts/cups-directories.m4 cupsys-1.2.1/config-scripts/cups-directories.m4
+--- cupsys-1.2.1~/config-scripts/cups-directories.m4	2006-07-19 00:38:00.000000000 +0000
++++ cupsys-1.2.1/config-scripts/cups-directories.m4	2006-07-19 00:40:14.000000000 +0000
+@@ -115,7 +115,7 @@
+ 
+ if test x$rcdir = x; then
+ 	case "$uname" in
+-		FreeBSD* | OpenBSD*)
++		FreeBSD* | OpenBSD* | MirBsD* | ekkoBSD*)
+ 			# FreeBSD and OpenBSD
+ 			INITDIR=""
+ 			INITDDIR=""
+diff -urNad cupsys-1.2.1~/config-scripts/cups-image.m4 cupsys-1.2.1/config-scripts/cups-image.m4
+--- cupsys-1.2.1~/config-scripts/cups-image.m4	2006-07-19 00:38:00.000000000 +0000
++++ cupsys-1.2.1/config-scripts/cups-image.m4	2006-07-19 00:40:14.000000000 +0000
+@@ -38,10 +38,6 @@
+ 
+ AC_SUBST(IMGFILTERS)
+ 
+-dnl Save the current libraries since we don't want the image libraries
+-dnl included with every program...
+-SAVELIBS="$LIBS"
+-
+ dnl Check for image libraries...
+ AC_ARG_ENABLE(jpeg, [  --enable-jpeg           turn on JPEG support, default=yes])
+ AC_ARG_ENABLE(png, [  --enable-png            turn on PNG support, default=yes])
+@@ -57,6 +53,14 @@
+ AC_SUBST(LIBTIFF)
+ AC_SUBST(LIBZ)
+ 
++dnl Image libraries use math library functions...
++AC_SEARCH_LIBS(pow, m)
++
++dnl Save the current libraries since we don't want the image libraries
++dnl included with every program...
++SAVELIBS="$LIBS"
++
++dnl JPEG library...
+ if test x$enable_jpeg != xno; then
+     AC_CHECK_HEADER(jpeglib.h,
+ 	AC_CHECK_LIB(jpeg, jpeg_destroy_decompress,
+@@ -67,24 +71,24 @@
+     AC_MSG_NOTICE([JPEG support disabled with --disable-jpeg.])
+ fi
+ 
++dnl ZLIB library...
+ AC_CHECK_HEADER(zlib.h,
+     AC_CHECK_LIB(z, gzgets,
+ 	AC_DEFINE(HAVE_LIBZ)
+ 	LIBZ="-lz"
+ 	LIBS="$LIBS -lz"))
+ 
+-dnl PNG library uses math library functions...
+-AC_CHECK_LIB(m, pow)
+-
++dnl PNG library...
+ if test x$enable_png != xno; then
+     AC_CHECK_HEADER(png.h,
+ 	AC_CHECK_LIB(png, png_create_read_struct,
+ 	    AC_DEFINE(HAVE_LIBPNG)
+-	    LIBPNG="-lpng -lm"))
++	    LIBPNG="-lpng"))
+ else
+     AC_MSG_NOTICE([PNG support disabled with --disable-png.])
+ fi
+ 
++dnl TIFF library...
+ if test x$enable_tiff != xno; then
+     AC_CHECK_HEADER(tiff.h,
+ 	AC_CHECK_LIB(tiff, TIFFReadScanline,
+diff -urNad cupsys-1.2.1~/config-scripts/cups-network.m4 cupsys-1.2.1/config-scripts/cups-network.m4
+--- cupsys-1.2.1~/config-scripts/cups-network.m4	2006-07-19 00:38:00.000000000 +0000
++++ cupsys-1.2.1/config-scripts/cups-network.m4	2006-07-19 00:40:14.000000000 +0000
+@@ -46,7 +46,7 @@
+ 	maxfiles=4096
+ fi
+ 
+-AC_ARG_WITH(maxfiles, [  --with-maxfiles=N       set maximum number of file descriptors for scheduler ],
++AC_ARG_WITH(maxfiles, [  --with-maxfiles=N       set maximum number of file descriptors for scheduler (deprecated) ],
+ 	maxfiles=$withval)
+ 
+ AC_DEFINE_UNQUOTED(CUPS_MAX_FDS, $maxfiles)
+diff -urNad cupsys-1.2.1~/config-scripts/cups-sharedlibs.m4 cupsys-1.2.1/config-scripts/cups-sharedlibs.m4
+--- cupsys-1.2.1~/config-scripts/cups-sharedlibs.m4	2006-07-19 00:38:00.000000000 +0000
++++ cupsys-1.2.1/config-scripts/cups-sharedlibs.m4	2006-07-19 00:40:14.000000000 +0000
+@@ -117,7 +117,7 @@
+ 	# rather than to the executables.  This makes things smaller if you
+ 	# are using any static libraries, and it also allows us to distribute
+ 	# a single DSO rather than a bunch...
+-	DSOLIBS="\$(LIBPNG) \$(LIBTIFF) \$(LIBJPEG) \$(LIBZ)"
++	DSOLIBS="\$(LIBTIFF) \$(LIBPNG) \$(LIBJPEG) \$(LIBZ)"
+ 	IMGLIBS=""
+ 
+ 	# Tell the run-time linkers where to find a DSO.  Some platforms
+@@ -126,46 +126,46 @@
+ 	case $uname in
+                 HP-UX*)
+ 			# HP-UX needs the path, even for /usr/lib...
+-                	DSOFLAGS="+s +b \$(libdir) $DSOFLAGS"
+-                	DSO32FLAGS="+s +b \$(LIB32DIR) $DSO32FLAGS"
+-                	DSO64FLAGS="+s +b \$(LIB64DIR) $DSO64FLAGS"
+-                	LDFLAGS="$LDFLAGS -Wl,+s,+b,\$(libdir)"
+-                	EXPORT_LDFLAGS="-Wl,+s,+b,\$(libdir)"
++                	DSOFLAGS="+s +b $libdir $DSOFLAGS"
++                	DSO32FLAGS="+s +b $LIB32DIR $DSO32FLAGS"
++                	DSO64FLAGS="+s +b $LIB64DIR $DSO64FLAGS"
++                	LDFLAGS="$LDFLAGS -Wl,+s,+b,$libdir"
++                	EXPORT_LDFLAGS="-Wl,+s,+b,$libdir"
+ 			;;
+                 SunOS*)
+                 	# Solaris...
+ 			if test $exec_prefix != /usr; then
+-				DSOFLAGS="-R\$(libdir) $DSOFLAGS"
+-				DSO32FLAGS="-R\$(LIB32DIR) $DSO32FLAGS"
+-				DSO64FLAGS="-R\$(LIB64DIR) $DSO64FLAGS"
+-				LDFLAGS="$LDFLAGS -R\$(libdir)"
+-				EXPORT_LDFLAGS="-R\$(libdir)"
++				DSOFLAGS="-R$libdir $DSOFLAGS"
++				DSO32FLAGS="-R$LIB32DIR $DSO32FLAGS"
++				DSO64FLAGS="-R$LIB64DIR $DSO64FLAGS"
++				LDFLAGS="$LDFLAGS -R$libdir"
++				EXPORT_LDFLAGS="-R$libdir"
+ 			fi
+ 			;;
+                 *BSD*)
+                         # *BSD...
+ 			if test $exec_prefix != /usr; then
+-				DSOFLAGS="-Wl,-R\$(libdir) $DSOFLAGS"
+-				DSO32FLAGS="-Wl,-R\$(LIB32DIR) $DSO32FLAGS"
+-				DSO64FLAGS="-Wl,-R\$(LIB64DIR) $DSO64FLAGS"
+-				LDFLAGS="$LDFLAGS -Wl,-R\$(libdir)"
+-				EXPORT_LDFLAGS="-Wl,-R\$(libdir)"
++				DSOFLAGS="-Wl,-R$libdir $DSOFLAGS"
++				DSO32FLAGS="-Wl,-R$LIB32DIR $DSO32FLAGS"
++				DSO64FLAGS="-Wl,-R$LIB64DIR $DSO64FLAGS"
++				LDFLAGS="$LDFLAGS -Wl,-R$libdir"
++				EXPORT_LDFLAGS="-Wl,-R$libdir"
+ 			fi
+ 			;;
+                 IRIX | Linux | GNU)
+                         # IRIX, Linux, and HURD...
+ 			if test $exec_prefix != /usr; then
+-				DSOFLAGS="-Wl,-rpath,\$(libdir) $DSOFLAGS"
+-				DSO32FLAGS="-Wl,-rpath,\$(LIB32DIR) $DSO32FLAGS"
+-				DSO64FLAGS="-Wl,-rpath,\$(LIB64DIR) $DSO64FLAGS"
+-				LDFLAGS="$LDFLAGS -Wl,-rpath,\$(libdir)"
+-				EXPORT_LDFLAGS="-Wl,-rpath,\$(libdir)"
++				DSOFLAGS="-Wl,-rpath,$libdir $DSOFLAGS"
++				DSO32FLAGS="-Wl,-rpath,$LIB32DIR $DSO32FLAGS"
++				DSO64FLAGS="-Wl,-rpath,$LIB64DIR $DSO64FLAGS"
++				LDFLAGS="$LDFLAGS -Wl,-rpath,$libdir"
++				EXPORT_LDFLAGS="-Wl,-rpath,$libdir"
+ 			fi
+ 			;;
+ 	esac
+ else
+ 	DSOLIBS=""
+-	IMGLIBS="\$(LIBPNG) \$(LIBTIFF) \$(LIBJPEG) \$(LIBZ)"
++	IMGLIBS="\$(LIBTIFF) \$(LIBPNG) \$(LIBJPEG) \$(LIBZ)"
+ fi
+ 
+ AC_SUBST(DSOLIBS)
+diff -urNad cupsys-1.2.1~/config-scripts/cups-ssl.m4 cupsys-1.2.1/config-scripts/cups-ssl.m4
+--- cupsys-1.2.1~/config-scripts/cups-ssl.m4	2006-07-19 00:38:00.000000000 +0000
++++ cupsys-1.2.1/config-scripts/cups-ssl.m4	2006-07-19 00:40:14.000000000 +0000
+@@ -48,6 +48,7 @@
+ 		 # certificates for CUPS, so don't enable encryption on
+ 		 # /admin just yet...
+ 		 #ENCRYPTION_REQUIRED="  Encryption Required"
++		 AC_CHECK_HEADER(Security/SecBasePriv.h,AC_DEFINE(HAVE_SECBASEPRIV_H))
+ 		 AC_DEFINE(HAVE_SSL)
+ 		 AC_DEFINE(HAVE_CDSASSL)])
+ 	fi
+diff -urNad cupsys-1.2.1~/config.h.in cupsys-1.2.1/config.h.in
+--- cupsys-1.2.1~/config.h.in	2006-07-19 00:38:00.000000000 +0000
++++ cupsys-1.2.1/config.h.in	2006-07-19 00:40:15.000000000 +0000
+@@ -261,6 +261,13 @@
+ 
+ 
+ /*
++ * Do we have <Security/SecBasePriv.h>?
++ */
++
++#undef HAVE_SECBASEPRIV_H
++
++
++/*
+  * Do we have the SLP library?
+  */
+ 
+diff -urNad cupsys-1.2.1~/configure.in cupsys-1.2.1/configure.in
+--- cupsys-1.2.1~/configure.in	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/configure.in	2006-07-19 00:40:14.000000000 +0000
+@@ -47,8 +47,12 @@
+ sinclude(config-scripts/cups-pdf.m4)
+ sinclude(config-scripts/cups-scripting.m4)
+ 
++INSTALL_LANGUAGES=""
++UNINSTALL_LANGUAGES=""
+ LANGFILES=""
+ if test "x$LANGUAGES" != x; then
++	INSTALL_LANGUAGES="install-languages"
++	UNINSTALL_LANGUAGES="uninstall-languages"
+ 	for lang in $LANGUAGES; do
+ 		LANGFILES="$LANGFILES doc/$lang/index.html"
+ 		LANGFILES="$LANGFILES templates/$lang/edit-config.tmpl"
+@@ -56,6 +60,9 @@
+ 	done
+ fi
+ 
++AC_SUBST(INSTALL_LANGUAGES)
++AC_SUBST(UNINSTALL_LANGUAGES)
++
+ AC_OUTPUT(Makedefs packaging/cups.list init/cups.sh init/cups-lpd cups-config
+ 	  conf/cupsd.conf conf/pam.std doc/index.html
+ 	  doc/help/standard.html man/client.conf.man
+diff -urNad cupsys-1.2.1~/cups/Makefile cupsys-1.2.1/cups/Makefile
+--- cupsys-1.2.1~/cups/Makefile	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/cups/Makefile	2006-07-19 00:40:14.000000000 +0000
+@@ -138,7 +138,7 @@
+ clean:
+ 	$(RM) $(OBJS) $(TARGETS)
+ 	$(RM) libcups.so libcups.sl libcups.dylib
+-	$(RM) -r 32bit 64it
++	$(RM) -r 32bit 64bit
+ 
+ 
+ #
+@@ -186,12 +186,12 @@
+ install32bit:
+ 	$(INSTALL_DIR) -m 755 $(LIB32DIR)
+ 	$(INSTALL_LIB) 32bit/libcups.so.2 $(LIB32DIR)/libcups.so.2
+-	$(LN) libcups.so $(LIB32DIR)/libcups.so.2
++	$(LN) libcups.so.2 $(LIB32DIR)/libcups.so
+ 
+ install64bit:
+ 	$(INSTALL_DIR) -m 755 $(LIB64DIR)
+ 	$(INSTALL_LIB) 64bit/libcups.so.2 $(LIB64DIR)/libcups.so.2
+-	$(LN) libcups.so $(LIB64DIR)/libcups.so.2
++	$(LN) libcups.so.2 $(LIB64DIR)/libcups.so
+ 
+ 
+ #
+diff -urNad cupsys-1.2.1~/cups/adminutil.c cupsys-1.2.1/cups/adminutil.c
+--- cupsys-1.2.1~/cups/adminutil.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/cups/adminutil.c	2006-07-19 00:40:14.000000000 +0000
+@@ -222,18 +222,18 @@
+       */
+ 
+       cupsFilePrintf(dstfp, "*%% Commented out for CUPS Windows Driver...\n"
+-                            "*%%%s", line + 1);
++                            "*%%%s\n", line + 1);
+       continue;
+     }
+     else if (!strncmp(line, "*JCLOpenUI", 10))
+     {
+       jcloption = 1;
+-      cupsFilePuts(dstfp, line);
++      cupsFilePrintf(dstfp, "%s\n", line);
+     }
+     else if (!strncmp(line, "*JCLCloseUI", 11))
+     {
+       jcloption = 0;
+-      cupsFilePuts(dstfp, line);
++      cupsFilePrintf(dstfp, "%s\n", line);
+     }
+     else if (jcloption &&
+              strncmp(line, "*End", 4) &&
+@@ -312,12 +312,13 @@
+       }
+ 
+       snprintf(ptr + 1, sizeof(line) - (ptr - line + 1),
+-               "%%cupsJobTicket: %s=%s\n\"\n*End\n", option, choice);
++               "%%cupsJobTicket: %s=%s\n\"\n*End", option, choice);
+ 
+-      cupsFilePrintf(dstfp, "*%% Changed for CUPS Windows Driver...\n%s", line);
++      cupsFilePrintf(dstfp, "*%% Changed for CUPS Windows Driver...\n%s\n",
++                     line);
+     }
+     else
+-      cupsFilePuts(dstfp, line);
++      cupsFilePrintf(dstfp, "%s\n", line);
+   }
+ 
+   cupsFileClose(srcfp);
+@@ -1680,8 +1681,9 @@
+   {
+     status = -1;
+ 
+-    _cupsLangPrintf(stderr, _("cupsaddsmb: Unable to run \"%s\": %s\n"),
+-                    command, strerror(errno));
++    if (logfile)
++      _cupsLangPrintf(logfile, _("Unable to run \"%s\": %s\n"),
++                      command, strerror(errno));
+   }
+   else
+   {
+diff -urNad cupsys-1.2.1~/cups/dest.c cupsys-1.2.1/cups/dest.c
+--- cupsys-1.2.1~/cups/dest.c	2006-07-18 11:26:53.000000000 +0000
++++ cupsys-1.2.1/cups/dest.c	2006-07-19 00:41:41.000000000 +0000
+@@ -1,5 +1,5 @@
+ /*
+- * "$Id: dest.c 5346 2006-03-28 16:05:19Z mike $"
++ * "$Id: dest.c 5753 2006-07-18 19:53:24Z mike $"
+  *
+  *   User-defined destination (and option) support for the Common UNIX
+  *   Printing System (CUPS).
+@@ -167,6 +167,7 @@
+ {
+   int	comp;				/* Result of comparison */
+ 
++
+   if (num_dests == 0 || dests == NULL)
+     return (NULL);
+ 
+@@ -455,6 +456,7 @@
+   int		wrote;			/* Wrote definition? */
+   cups_dest_t	*dest;			/* Current destination */
+   cups_option_t	*option;		/* Current option */
++  _ipp_option_t	*match;			/* Matching attribute for option */
+   FILE		*fp;			/* File pointer */
+   const char	*home;			/* HOME environment variable */
+   char		filename[1024];		/* lpoptions file */
+@@ -567,16 +569,23 @@
+       for (j = dest->num_options, option = dest->options; j > 0; j --, option ++)
+       {
+        /*
++        * See if this option is a printer attribute; if so, skip it...
++	*/
++
++        if ((match = _ippFindOption(option->name)) != NULL &&
++	    match->group_tag == IPP_TAG_PRINTER)
++	  continue;
++
++       /*
+ 	* See if the server/global options match these; if so, don't
+ 	* write 'em.
+ 	*/
+ 
+-        if (temp && (val = cupsGetOption(option->name, temp->num_options,
+-	                                 temp->options)) != NULL)
+-	{
+-	  if (!strcasecmp(val, option->value))
+-	    continue;
+-	}
++        if (temp &&
++	    (val = cupsGetOption(option->name, temp->num_options,
++	                         temp->options)) != NULL &&
++            !strcasecmp(val, option->value))
++	  continue;
+ 
+        /*
+         * Options don't match, write to the file...
+@@ -592,10 +601,35 @@
+         
+         if (option->value[0])
+ 	{
+-	  if (strchr(option->value, ' ') != NULL)
+-	    fprintf(fp, " %s=\"%s\"", option->name, option->value);
+-          else
++	  if (strchr(option->value, ' ') ||
++	      strchr(option->value, '\\') ||
++	      strchr(option->value, '\"') ||
++	      strchr(option->value, '\''))
++	  {
++	   /*
++	    * Quote the value...
++	    */
++
++	    fprintf(fp, " %s=\"", option->name);
++
++	    for (val = option->value; *val; val ++)
++	    {
++	      if (strchr("\"\'\\", *val))
++	        putc('\\', fp);
++
++              putc(*val, fp);
++	    }
++
++	    putc('\"', fp);
++          }
++	  else
++	  {
++	   /*
++	    * Store the literal value...
++	    */
++
+ 	    fprintf(fp, " %s=%s", option->name, option->value);
++          }
+ 	}
+ 	else
+ 	  fprintf(fp, " %s", option->name);
+@@ -1007,5 +1041,5 @@
+ 
+ 
+ /*
+- * End of "$Id: dest.c 5346 2006-03-28 16:05:19Z mike $".
++ * End of "$Id: dest.c 5753 2006-07-18 19:53:24Z mike $".
+  */
+diff -urNad cupsys-1.2.1~/cups/emit.c cupsys-1.2.1/cups/emit.c
+--- cupsys-1.2.1~/cups/emit.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/cups/emit.c	2006-07-19 00:40:14.000000000 +0000
+@@ -50,6 +50,7 @@
+ #include <stdlib.h>
+ #include "string.h"
+ #include <errno.h>
++#include "debug.h"
+ 
+ #if defined(WIN32) || defined(__EMX__)
+ #  include <io.h>
+@@ -111,6 +112,9 @@
+   ppd_choice_t	**collect;		/* Collected choices */
+ 
+ 
++  DEBUG_printf(("ppdCollect2(ppd=%p, section=%d, min_order=%f, choices=%p)\n",
++                ppd, section, min_order, choices));
++
+   if (ppd == NULL)
+     return (0);
+ 
+@@ -132,6 +136,8 @@
+ 	for (k = o->num_choices, c = o->choices; k > 0; k --, c ++)
+ 	  if (c->marked && count < 1000)
+ 	  {
++	    DEBUG_printf(("ppdCollect2: %s=%s marked...\n", o->keyword,
++	                  c->choice));
+             collect[count] = c;
+ 	    count ++;
+ 	  }
+@@ -142,6 +148,8 @@
+ 	  for (m = o->num_choices, c = o->choices; m > 0; m --, c ++)
+ 	    if (c->marked && count < 1000)
+ 	    {
++	      DEBUG_printf(("ppdCollect2: %s=%s marked...\n", o->keyword,
++	                    c->choice));
+               collect[count] = c;
+ 	      count ++;
+ 	    }
+@@ -155,6 +163,8 @@
+     qsort(collect, count, sizeof(ppd_choice_t *),
+           (int (*)(const void *, const void *))ppd_sort);
+ 
++  DEBUG_printf(("ppdCollect2: %d marked choices...\n", count));
++
+  /*
+   * Return the array and number of choices; if 0, free the array since
+   * it isn't needed.
+@@ -492,6 +502,9 @@
+   struct lconv	*loc;			/* Locale data */
+ 
+ 
++  DEBUG_printf(("ppdEmitString(ppd=%p, section=%d, min_order=%f)\n",
++                ppd, section, min_order));
++
+  /*
+   * Range check input...
+   */
+@@ -527,6 +540,8 @@
+            !strcasecmp(choices[i]->option->keyword, "PageRegion")) &&
+           !strcasecmp(choices[i]->choice, "Custom"))
+       {
++        DEBUG_puts("ppdEmitString: Custom size set!");
++
+         bufsize += 37;			/* %%BeginFeature: *CustomPageSize True\n */
+         bufsize += 50;			/* Five 9-digit numbers + newline */
+       }
+@@ -580,6 +595,8 @@
+   * Allocate memory...
+   */
+ 
++  DEBUG_printf(("ppdEmitString: Allocating %d bytes for string...\n", bufsize));
++
+   if ((buffer = calloc(1, bufsize)) == NULL)
+   {
+     free(choices);
+@@ -608,6 +625,9 @@
+       * Send DSC comments with option...
+       */
+ 
++      DEBUG_printf(("Adding code for %s=%s...\n", choices[i]->option->keyword,
++                    choices[i]->choice));
++
+       if ((!strcasecmp(choices[i]->option->keyword, "PageSize") ||
+            !strcasecmp(choices[i]->option->keyword, "PageRegion")) &&
+           !strcasecmp(choices[i]->choice, "Custom"))
+@@ -800,6 +820,9 @@
+       strlcpy(bufptr, "%%EndFeature\n"
+ 		      "} stopped cleartomark\n", bufend - bufptr + 1);
+       bufptr += strlen(bufptr);
++
++      DEBUG_printf(("ppdEmitString: Offset in string is %d...\n",
++                    bufptr - buffer));
+     }
+     else
+     {
+diff -urNad cupsys-1.2.1~/cups/encode.c cupsys-1.2.1/cups/encode.c
+--- cupsys-1.2.1~/cups/encode.c	2006-05-18 21:00:56.000000000 +0000
++++ cupsys-1.2.1/cups/encode.c	2006-07-19 00:40:14.000000000 +0000
+@@ -28,6 +28,7 @@
+  *   cupsEncodeOptions()   - Encode printer options into IPP attributes.
+  *   cupsEncodeOptions2()  - Encode printer options into IPP attributes for
+  *                           a group.
++ *   _ippFindOption()      - Find the attribute information for an option.
+  *   compare_ipp_options() - Compare two IPP options.
+  */
+ 
+@@ -49,13 +50,6 @@
+  * **** THIS LIST MUST BE SORTED ****
+  */
+ 
+-typedef struct
+-{
+-  const char	*name;
+-  ipp_tag_t	value_tag;
+-  ipp_tag_t	group_tag;
+-} _ipp_option_t;
+-
+ static const _ipp_option_t ipp_options[] =
+ {
+   { "blackplot",		IPP_TAG_BOOLEAN,	IPP_TAG_JOB },
+@@ -114,6 +108,8 @@
+   { "ppi-default",		IPP_TAG_INTEGER,	IPP_TAG_PRINTER },
+   { "prettyprint",		IPP_TAG_BOOLEAN,	IPP_TAG_JOB },
+   { "prettyprint-default",	IPP_TAG_BOOLEAN,	IPP_TAG_PRINTER },
++  { "print-quality",		IPP_TAG_ENUM,		IPP_TAG_JOB },
++  { "print-quality-default",	IPP_TAG_ENUM,		IPP_TAG_PRINTER },
+   { "printer-error-policy",	IPP_TAG_NAME,		IPP_TAG_PRINTER },
+   { "printer-info",		IPP_TAG_TEXT,		IPP_TAG_PRINTER },
+   { "printer-is-accepting-jobs",IPP_TAG_BOOLEAN,	IPP_TAG_PRINTER },
+@@ -127,14 +123,12 @@
+   { "printer-state-reasons",	IPP_TAG_KEYWORD,	IPP_TAG_PRINTER },
+   { "printer-type",		IPP_TAG_ENUM,		IPP_TAG_PRINTER },
+   { "printer-uri",		IPP_TAG_URI,		IPP_TAG_OPERATION },
+-  { "print-quality",		IPP_TAG_ENUM,		IPP_TAG_JOB },
+-  { "print-quality-default",	IPP_TAG_ENUM,		IPP_TAG_PRINTER },
+   { "queued-job-count",		IPP_TAG_INTEGER,	IPP_TAG_PRINTER },
+   { "raw",			IPP_TAG_MIMETYPE,	IPP_TAG_OPERATION },
+-  { "resolution",		IPP_TAG_RESOLUTION,	IPP_TAG_JOB },
+-  { "resolution-default",	IPP_TAG_RESOLUTION,	IPP_TAG_PRINTER },
+   { "requesting-user-name-allowed",	IPP_TAG_NAME,	IPP_TAG_PRINTER },
+   { "requesting-user-name-denied",	IPP_TAG_NAME,	IPP_TAG_PRINTER },
++  { "resolution",		IPP_TAG_RESOLUTION,	IPP_TAG_JOB },
++  { "resolution-default",	IPP_TAG_RESOLUTION,	IPP_TAG_PRINTER },
+   { "saturation",		IPP_TAG_INTEGER,	IPP_TAG_JOB },
+   { "saturation-default",	IPP_TAG_INTEGER,	IPP_TAG_PRINTER },
+   { "scaling",			IPP_TAG_INTEGER,	IPP_TAG_JOB },
+@@ -243,8 +237,7 @@
+ 
+   for (i = num_options, option = options; i > 0; i --, option ++)
+   {
+-    _ipp_option_t	key,		/* Search key */
+-			*match;		/* Matching attribute */
++    _ipp_option_t	*match;		/* Matching attribute */
+ 
+ 
+    /*
+@@ -260,16 +253,7 @@
+     * Figure out the proper value and group tags for this option...
+     */
+ 
+-    key.name = option->name;
+-    match    = (_ipp_option_t *)bsearch(&key, ipp_options,
+-                                        sizeof(ipp_options) /
+-					    sizeof(ipp_options[0]),
+-					sizeof(ipp_options[0]),
+-					(int (*)(const void *,
+-					         const void *))
+-				            compare_ipp_options);
+-
+-    if (match)
++    if ((match = _ippFindOption(option->name)) != NULL)
+     {
+       if (match->group_tag != group_tag)
+         continue;
+@@ -547,6 +531,30 @@
+ 
+ 
+ /*
++ * '_ippFindOption()' - Find the attribute information for an option.
++ */
++
++_ipp_option_t *				/* O - Attribute information */
++_ippFindOption(const char *name)	/* I - Option/attribute name */
++{
++  _ipp_option_t	key;			/* Search key */
++
++
++ /*
++  * Lookup the proper value and group tags for this option...
++  */
++
++  key.name = name;
++
++  return ((_ipp_option_t *)bsearch(&key, ipp_options,
++                                   sizeof(ipp_options) / sizeof(ipp_options[0]),
++				   sizeof(ipp_options[0]),
++				   (int (*)(const void *, const void *))
++				       compare_ipp_options));
++}
++
++
++/*
+  * 'compare_ipp_options()' - Compare two IPP options.
+  */
+ 
+diff -urNad cupsys-1.2.1~/cups/http-addrlist.c cupsys-1.2.1/cups/http-addrlist.c
+--- cupsys-1.2.1~/cups/http-addrlist.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/cups/http-addrlist.c	2006-07-19 00:40:14.000000000 +0000
+@@ -412,7 +412,7 @@
+           if (host->h_addrtype == AF_INET6)
+ 	  {
+             temp->addr.ipv6.sin6_family = AF_INET6;
+-	    memcpy(&(temp->addr.ipv6), host->h_addr_list[i],
++	    memcpy(&(temp->addr.ipv6.sin6_addr), host->h_addr_list[i],
+ 	           sizeof(temp->addr.ipv6));
+             temp->addr.ipv6.sin6_port = htons(portnum);
+ 	  }
+@@ -420,7 +420,7 @@
+ #  endif /* AF_INET6 */
+ 	  {
+             temp->addr.ipv4.sin_family = AF_INET;
+-	    memcpy(&(temp->addr.ipv4), host->h_addr_list[i],
++	    memcpy(&(temp->addr.ipv4.sin_addr), host->h_addr_list[i],
+ 	           sizeof(temp->addr.ipv4));
+             temp->addr.ipv4.sin_port = htons(portnum);
+           }
+@@ -506,6 +506,9 @@
+ 	temp->addr.ipv6.sin6_addr.s6_addr32[3] = htonl(1);
+ #  endif /* WIN32 */
+ 
++        if (!first)
++          first = temp;
++
+         addr = temp;
+       }
+ 
+@@ -527,6 +530,9 @@
+ 	temp->addr.ipv4.sin_port        = htons(portnum);
+ 	temp->addr.ipv4.sin_addr.s_addr = htonl(0x7f000001);
+ 
++        if (!first)
++          first = temp;
++
+         if (addr)
+ 	  addr->next = temp;
+ 	else
+@@ -556,6 +562,9 @@
+         temp->addr.ipv6.sin6_family = AF_INET6;
+ 	temp->addr.ipv6.sin6_port   = htons(portnum);
+ 
++        if (!first)
++          first = temp;
++
+         addr = temp;
+       }
+ 
+@@ -576,6 +585,9 @@
+         temp->addr.ipv4.sin_family = AF_INET;
+ 	temp->addr.ipv4.sin_port   = htons(portnum);
+ 
++        if (!first)
++          first = temp;
++
+         if (addr)
+ 	  addr->next = temp;
+ 	else
+diff -urNad cupsys-1.2.1~/cups/http.c cupsys-1.2.1/cups/http.c
+--- cupsys-1.2.1~/cups/http.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/cups/http.c	2006-07-19 00:40:14.000000000 +0000
+@@ -866,7 +866,7 @@
+       * No newline; see if there is more data to be read...
+       */
+ 
+-      if (!http->blocking && !http_wait(http, 1000))
++      if (!http->blocking && !http_wait(http, 10000))
+       {
+         DEBUG_puts("httpGets: Timed out!");
+         http->error = ETIMEDOUT;
+@@ -1222,7 +1222,7 @@
+     * Buffer small reads for better performance...
+     */
+ 
+-    if (!http->blocking && !httpWait(http, 1000))
++    if (!http->blocking && !httpWait(http, 10000))
+       return (0);
+ 
+     if (http->data_remaining > sizeof(http->buffer))
+@@ -1285,7 +1285,7 @@
+ #ifdef HAVE_SSL
+   else if (http->tls)
+   {
+-    if (!http->blocking && !httpWait(http, 1000))
++    if (!http->blocking && !httpWait(http, 10000))
+       return (0);
+ 
+     bytes = http_read_ssl(http, buffer, length);
+@@ -1293,7 +1293,7 @@
+ #endif /* HAVE_SSL */
+   else
+   {
+-    if (!http->blocking && !httpWait(http, 1000))
++    if (!http->blocking && !httpWait(http, 10000))
+       return (0);
+ 
+     DEBUG_printf(("httpRead2: reading %d bytes from socket...\n", length));
+@@ -1415,13 +1415,11 @@
+     *dataLength = 0;
+ 
+     if (bytes == 0)
+-      result = errSSLClosedAbort;
++      result = errSSLClosedGraceful;
+     else if (errno == EAGAIN)
+       result = errSSLWouldBlock;
+-    else if (errno == EPIPE)
+-      result = errSSLClosedAbort;
+     else
+-      result = errSSLInternal;
++      result = errSSLClosedAbort;
+   }
+ 
+   return result;
+@@ -1811,6 +1809,16 @@
+     return (1);
+ 
+  /*
++  * Flush pending data, if any...
++  */
++
++  if (http->wused)
++  {
++    if (httpFlushWrite(http) < 0)
++      return (0);
++  }
++
++ /*
+   * If not, check the SSL/TLS buffers and do a select() on the connection...
+   */
+ 
+@@ -1994,10 +2002,8 @@
+   
+     if (errno == EAGAIN)
+       result = errSSLWouldBlock;
+-    else if (errno == EPIPE)
+-      result = errSSLClosedAbort;
+     else
+-      result = errSSLInternal;
++      result = errSSLClosedAbort;
+   }
+ 
+   return result;
+@@ -2338,6 +2344,9 @@
+     error = SSLSetAllowsAnyRoot(conn->session, true);
+ 
+   if (!error)
++    error = SSLSetProtocolVersionEnabled(conn->session, kSSLProtocol2, false);
++
++  if (!error)
+   {
+     while ((error = SSLHandshake(conn->session)) == errSSLWouldBlock)
+       usleep(1000);
+diff -urNad cupsys-1.2.1~/cups/http.h cupsys-1.2.1/cups/http.h
+--- cupsys-1.2.1~/cups/http.h	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/cups/http.h	2006-07-19 00:40:14.000000000 +0000
+@@ -98,7 +98,7 @@
+ #if defined(AF_INET6) && !defined(s6_addr32)
+ #  if defined(__sun)
+ #    define s6_addr32	_S6_un._S6_u32
+-#  elif defined(__FreeBSD__) || defined(__APPLE__)
++#  elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)
+ #    define s6_addr32	__u6_addr.__u6_addr32
+ #  elif defined(__osf__)
+ #    define s6_addr32	s6_un.sa6_laddr
+@@ -322,6 +322,14 @@
+ 
+ typedef struct _http_s			/**** HTTP connection structure. ****/
+ {
++ /*
++  * DO NOT ACCESS MEMBERS OF THIS STRUCTURE DIRECTLY; INSTEAD, USE THE
++  * PROVIDED APIS FOR ACCESSING THE VALUES INSTEAD.
++  *
++  * This structure definition will be removed from the public headers in
++  * CUPS 1.3.
++  */
++
+   int			fd;		/* File descriptor for this socket */
+   int			blocking;	/* To block or not to block */
+   int			error;		/* Last error on read */
+diff -urNad cupsys-1.2.1~/cups/ipp-private.h cupsys-1.2.1/cups/ipp-private.h
+--- cupsys-1.2.1~/cups/ipp-private.h	2006-03-05 17:01:51.000000000 +0000
++++ cupsys-1.2.1/cups/ipp-private.h	2006-07-19 00:40:14.000000000 +0000
+@@ -44,10 +44,23 @@
+ 
+ 
+ /*
++ * Structures...
++ */
++
++typedef struct				/**** Attribute mapping data ****/
++{
++  const char	*name;			/* Option/attribute name */
++  ipp_tag_t	value_tag;		/* Value tag for this attribute */
++  ipp_tag_t	group_tag;		/* Group tag for this attribute */
++} _ipp_option_t;
++
++
++/*
+  * Prototypes for private functions...
+  */
+ 
+ extern ipp_attribute_t	*_ippAddAttr(ipp_t *, int);
++extern _ipp_option_t	*_ippFindOption(const char *name);
+ extern void		_ippFreeAttr(ipp_attribute_t *);
+ 
+ 
+diff -urNad cupsys-1.2.1~/cups/ipp.c cupsys-1.2.1/cups/ipp.c
+--- cupsys-1.2.1~/cups/ipp.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/cups/ipp.c	2006-07-19 00:40:14.000000000 +0000
+@@ -2742,10 +2742,10 @@
+       if (!http->blocking)
+       {
+        /*
+-        * Wait up to 1 second for more data on non-blocking sockets...
++        * Wait up to 10 seconds for more data on non-blocking sockets...
+ 	*/
+ 
+-	if (!httpWait(http, 1000))
++	if (!httpWait(http, 10000))
+ 	{
+ 	 /*
+           * Signal no data...
+diff -urNad cupsys-1.2.1~/cups/language.c cupsys-1.2.1/cups/language.c
+--- cupsys-1.2.1~/cups/language.c	2006-04-06 20:03:32.000000000 +0000
++++ cupsys-1.2.1/cups/language.c	2006-07-19 00:40:14.000000000 +0000
+@@ -560,6 +560,23 @@
+ 	encoding = (cups_encoding_t)i;
+ 	break;
+       }
++
++    if (encoding == CUPS_AUTO_ENCODING)
++    {
++     /*
++      * Map alternate names for various character sets...
++      */
++
++      if (!strcasecmp(charset, "iso-2022-jp") ||
++          !strcasecmp(charset, "sjis"))
++	encoding = CUPS_WINDOWS_932;
++      else if (!strcasecmp(charset, "iso-2022-cn"))
++	encoding = CUPS_WINDOWS_936;
++      else if (!strcasecmp(charset, "iso-2022-kr"))
++	encoding = CUPS_WINDOWS_949;
++      else if (!strcasecmp(charset, "big5"))
++	encoding = CUPS_WINDOWS_950;
++    }
+   }
+ 
+   DEBUG_printf(("cupsLangGet: encoding=%d(%s)\n", encoding,
+diff -urNad cupsys-1.2.1~/cups/mark.c cupsys-1.2.1/cups/mark.c
+--- cupsys-1.2.1~/cups/mark.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/cups/mark.c	2006-07-19 00:40:14.000000000 +0000
+@@ -407,6 +407,7 @@
+       ppd_cparam_t	*cparam;	/* Custom parameter */
+       char		*units;		/* Custom points units */
+ 
++
+       if ((coption = ppdFindCustomOption(ppd, option)) != NULL)
+       {
+         if ((cparam = (ppd_cparam_t *)cupsArrayFirst(coption->params)) == NULL)
+@@ -455,6 +456,12 @@
+ 	}
+       }
+     }
++
++   /*
++    * Make sure that we keep the option marked below...
++    */
++
++    choice = "Custom";
+   }
+   else if (choice[0] == '{')
+   {
+diff -urNad cupsys-1.2.1~/cups/testhttp.c cupsys-1.2.1/cups/testhttp.c
+--- cupsys-1.2.1~/cups/testhttp.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/cups/testhttp.c	2006-07-19 00:40:14.000000000 +0000
+@@ -3,7 +3,7 @@
+  *
+  *   HTTP test program for the Common UNIX Printing System (CUPS).
+  *
+- *   Copyright 1997-2005 by Easy Software Products.
++ *   Copyright 1997-2006 by Easy Software Products.
+  *
+  *   These coded instructions, statements, and computer programs are the
+  *   property of Easy Software Products and are protected by Federal
+@@ -311,9 +311,21 @@
+     addrlist = httpAddrGetList(hostname, AF_UNSPEC, NULL);
+     if (addrlist)
+     {
+-      for (i = 0, addr = addrlist; addr; i ++, addr = addr->next);
++      for (i = 0, addr = addrlist; addr; i ++, addr = addr->next)
++      {
++        char	numeric[1024];		/* Numeric IP address */
++
++
++	httpAddrString(&(addr->addr), numeric, sizeof(numeric));
++	if (!strcmp(numeric, "UNKNOWN"))
++	  break;
++      }
++
++      if (addr)
++        printf("FAIL (bad address for %s)\n", hostname);
++      else
++        printf("PASS (%d address(es) for %s)\n", i, hostname);
+ 
+-      printf("PASS (%d address(es) for %s)\n", i, hostname);
+       httpAddrFreeList(addrlist);
+     }
+     else
+diff -urNad cupsys-1.2.1~/cups/testipp.c cupsys-1.2.1/cups/testipp.c
+--- cupsys-1.2.1~/cups/testipp.c	2006-01-29 14:39:44.000000000 +0000
++++ cupsys-1.2.1/cups/testipp.c	2006-07-19 00:40:14.000000000 +0000
+@@ -36,7 +36,7 @@
+ #include <stdlib.h>
+ #include <cups/string.h>
+ #include <errno.h>
+-#include "ipp.h"
++#include "ipp-private.h"
+ #ifdef WIN32
+ #  include <io.h>
+ #else
+@@ -283,6 +283,19 @@
+     ippDelete(request);
+ 
+    /*
++    * Test _ippFindOption() private API...
++    */
++
++    fputs("_ippFindOption(\"printer-type\"): ", stdout);
++    if (_ippFindOption("printer-type"))
++      puts("PASS");
++    else
++    {
++      puts("FAIL");
++      status = 1;
++    }
++
++   /*
+     * Summarize...
+     */
+ 
+diff -urNad cupsys-1.2.1~/cups/testppd.c cupsys-1.2.1/cups/testppd.c
+--- cupsys-1.2.1~/cups/testppd.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/cups/testppd.c	2006-07-19 00:40:14.000000000 +0000
+@@ -59,6 +59,39 @@
+ 			"%%BeginFeature: *InputSlot Tray\n"
+ 			"InputSlot=Tray\n"
+ 			"%%EndFeature\n"
++			"} stopped cleartomark\n"
++			"[{\n"
++			"%%BeginFeature: *IntOption None\n"
++			"%%EndFeature\n"
++			"} stopped cleartomark\n"
++			"[{\n"
++			"%%BeginFeature: *StringOption None\n"
++			"%%EndFeature\n"
++			"} stopped cleartomark\n";
++
++static const char	*custom_code =
++			"[{\n"
++			"%%BeginFeature: *CustomPageSize True\n"
++			"400\n"
++			"500\n"
++			"0\n"
++			"0\n"
++			"0\n"
++			"PageSize=Custom\n"
++			"%%EndFeature\n"
++			"} stopped cleartomark\n"
++			"[{\n"
++			"%%BeginFeature: *InputSlot Tray\n"
++			"InputSlot=Tray\n"
++			"%%EndFeature\n"
++			"} stopped cleartomark\n"
++			"[{\n"
++			"%%BeginFeature: *IntOption None\n"
++			"%%EndFeature\n"
++			"} stopped cleartomark\n"
++			"[{\n"
++			"%%BeginFeature: *StringOption None\n"
++			"%%EndFeature\n"
+ 			"} stopped cleartomark\n";
+ 
+ 
+@@ -107,7 +140,7 @@
+       printf("FAIL (%d conflicts)\n", conflicts);
+     }
+ 
+-    fputs("ppdEmitString: ", stdout);
++    fputs("ppdEmitString (defaults): ", stdout);
+     if ((s = ppdEmitString(ppd, PPD_ORDER_ANY, 0.0)) != NULL &&
+ 	!strcmp(s, default_code))
+       puts("PASS");
+@@ -123,6 +156,24 @@
+     if (s)
+       free(s);
+ 
++    fputs("ppdEmitString (custom size): ", stdout);
++    ppdMarkOption(ppd, "PageSize", "Custom.400x500");
++
++    if ((s = ppdEmitString(ppd, PPD_ORDER_ANY, 0.0)) != NULL &&
++	!strcmp(s, custom_code))
++      puts("PASS");
++    else
++    {
++      printf("FAIL (%d bytes instead of %d)\n", s ? (int)strlen(s) : 0,
++	     (int)strlen(custom_code));
++
++      if (s)
++	puts(s);
++    }
++
++    if (s)
++      free(s);
++
+     ppdClose(ppd);
+   }
+   else
+diff -urNad cupsys-1.2.1~/cups/util.c cupsys-1.2.1/cups/util.c
+--- cupsys-1.2.1~/cups/util.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/cups/util.c	2006-07-19 00:40:14.000000000 +0000
+@@ -800,6 +800,8 @@
+             const char *name)		/* I - Printer name */
+ {
+   int		http_port;		/* Port number */
++  char		http_hostname[HTTP_MAX_HOST];
++					/* Hostname associated with connection */
+   http_t	*http2;			/* Alternate HTTP connection */
+   int		fd;			/* PPD file */
+   char		localhost[HTTP_MAX_URI],/* Local hostname */
+@@ -835,19 +837,25 @@
+                             resource, sizeof(resource), 0))
+     return (NULL);
+ 
++  DEBUG_printf(("Printer hostname=\"%s\", port=%d\n", hostname, port));
++
+  /*
+   * Remap local hostname to localhost...
+   */
+ 
+   httpGetHostname(NULL, localhost, sizeof(localhost));
+ 
++  DEBUG_printf(("Local hostname=\"%s\"\n", localhost));
++
+   if (!strcasecmp(localhost, hostname))
+     strcpy(hostname, "localhost");
+ 
+  /*
+-  * Get the port number we are connected to...
++  * Get the hostname and port number we are connected to...
+   */
+ 
++  httpGetHostname(http, http_hostname, sizeof(http_hostname));
++
+ #ifdef AF_INET6
+   if (http->hostaddr->addr.sa_family == AF_INET6)
+     http_port = ntohs(http->hostaddr->ipv6.sin6_port);
+@@ -858,11 +866,14 @@
+   else
+     http_port = ippPort(); 
+ 
++  DEBUG_printf(("Connection hostname=\"%s\", port=%d\n", http_hostname,
++                http_port));
++
+  /*
+   * Reconnect to the correct server as needed...
+   */
+ 
+-  if (!strcasecmp(http->hostname, hostname) && port == http_port)
++  if (!strcasecmp(http_hostname, hostname) && port == http_port)
+     http2 = http;
+   else if ((http2 = httpConnectEncrypt(hostname, port,
+                                        cupsEncryption())) == NULL)
+@@ -1394,7 +1405,8 @@
+ 	     char       *printer,	/* O - Printer name [HTTP_MAX_URI] */
+              char       *hostname)	/* O - Hostname [HTTP_MAX_URI] */
+ {
+-  char	hostbuf[HTTP_MAX_URI];		/* Name of host */
++  char	hostbuf[HTTP_MAX_URI],		/* Name of host */
++	http_hostname[HTTP_MAX_HOST];	/* Hostname associated with connection */
+   _cups_globals_t  *cg = _cupsGlobals();/* Pointer to library globals */
+ 
+ 
+@@ -1415,6 +1427,8 @@
+ 
+   strlcpy(hostbuf, cupsServer(), sizeof(hostbuf));
+ 
++  httpGetHostname(cg->http, http_hostname, sizeof(http_hostname));
++
+   if (hostname != NULL)
+     strlcpy(hostname, hostbuf, HTTP_MAX_URI);
+   else
+@@ -1427,7 +1441,7 @@
+ 
+   if (cg->http != NULL)
+   {
+-    if (!strcasecmp(cg->http->hostname, hostname))
++    if (!strcasecmp(http_hostname, hostname))
+       return (printer);
+ 
+     httpClose(cg->http);
+@@ -1473,7 +1487,9 @@
+   char		uri[HTTP_MAX_URI],	/* printer-uri attribute */
+ 		scheme[HTTP_MAX_URI],	/* Scheme name */
+ 		username[HTTP_MAX_URI],	/* Username:password */
+-		classname[255];		/* Temporary class name */
++		classname[255],		/* Temporary class name */
++		http_hostname[HTTP_MAX_HOST];
++					/* Hostname associated with connection */
+   static const char * const requested_attrs[] =
+ 		{			/* Requested attributes */
+ 		  "printer-uri-supported",
+@@ -1505,9 +1521,11 @@
+   DEBUG_printf(("cups_get_printer_uri: printer-uri=\"%s\"\n", uri));
+ 
+  /*
+-  * Get the port number we are connected to...
++  * Get the hostname and port number we are connected to...
+   */
+ 
++  httpGetHostname(http, http_hostname, sizeof(http_hostname));
++
+ #ifdef AF_INET6
+   if (http->hostaddr->addr.sa_family == AF_INET6)
+     http_port = ntohs(http->hostaddr->ipv6.sin6_port);
+@@ -1585,7 +1603,7 @@
+ 	    * Found a class!  Connect to the right server...
+ 	    */
+ 
+-	    if (!strcasecmp(http->hostname, host) && *port == http_port)
++	    if (!strcasecmp(http_hostname, host) && *port == http_port)
+ 	      http2 = http;
+ 	    else if ((http2 = httpConnectEncrypt(host, *port,
+ 						 cupsEncryption())) == NULL)
+diff -urNad cupsys-1.2.1~/cups-config.in cupsys-1.2.1/cups-config.in
+--- cupsys-1.2.1~/cups-config.in	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/cups-config.in	2006-07-19 00:40:11.000000000 +0000
+@@ -42,8 +42,8 @@
+ # flags for C++ compiler:
+ CFLAGS=""
+ LDFLAGS="@EXPORT_LDFLAGS@"
+-LIBS="@EXPORT_SSLLIBS@ @LIBS@"
+-IMGLIBS="@EXPORT_LIBTIFF@ @EXPORT_LIBJPEG@ @EXPORT_LIBPNG@ @EXPORT_LIBZ@"
++LIBS="@EXPORT_SSLLIBS@ @EXPORT_LIBZ@ @LIBS@"
++IMGLIBS="@EXPORT_LIBTIFF@ @EXPORT_LIBJPEG@ @EXPORT_LIBPNG@"
+ 
+ # Check for local invocation...
+ selfdir=`dirname $0`
+@@ -53,7 +53,7 @@
+     LDFLAGS="-L$selfdir/cups -L$selfdir/filter $LDFLAGS"
+     libdir="$selfdir/cups"
+     imagelibdir="$selfdir/filter"
+-    if test ! -e "$selfdir/cups/raster.h"; then
++    if test ! -f "$selfdir/cups/raster.h"; then
+         ln -s ../filter/raster.h "$selfdir/cups"
+     fi
+ else
+@@ -115,13 +115,13 @@
+  	        if test $image = no; then
+  	            echo -lcups $LIBS
+  		else
+- 	            echo -lcupsimage $IMGLIBS -lcups $LIBS
++ 	            echo -lcupsimage -lcups $IMGLIBS $LIBS
+  		fi
+ 	    else
+ 	        if test $image = no; then
+ 	            echo $libdir/libcups.a $LIBS
+ 		else
+-	            echo $imagelibdir/libcupsimage.a $IMGLIBS $libdir/libcups.a $LIBS
++	            echo $imagelibdir/libcupsimage.a $libdir/libcups.a $IMGLIBS $LIBS
+ 		fi
+ 	    fi
+ 	    ;;
+diff -urNad cupsys-1.2.1~/doc/Makefile cupsys-1.2.1/doc/Makefile
+--- cupsys-1.2.1~/doc/Makefile	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/doc/Makefile	2006-07-19 00:40:14.000000000 +0000
+@@ -153,11 +153,13 @@
+ 			help/network.html \
+ 			help/options.html \
+ 			help/overview.html \
++			help/policies.html \
+ 			help/ref-access_log.html \
+ 			help/ref-classes-conf.html \
+ 			help/ref-client-conf.html \
+ 			help/ref-cupsd-conf.html \
+ 			help/ref-error_log.html \
++			help/ref-mailto-conf.html \
+ 			help/ref-page_log.html \
+ 			help/ref-printers-conf.html \
+ 			help/ref-snmp-conf.html \
+@@ -200,7 +202,7 @@
+ # Install all documentation files...
+ #
+ 
+-install:	all
++install:	all $(INSTALL_LANGUAGES)
+ 	$(INSTALL_DIR) -m 755 $(DOCDIR)
+ 	for file in $(WEBPAGES); do \
+ 		$(INSTALL_MAN) $$file $(DOCDIR); \
+@@ -213,6 +215,8 @@
+ 	for file in $(WEBIMAGES) $(WEBBUTTONS); do \
+ 		$(INSTALL_MAN) $$file $(DOCDIR)/images; \
+ 	done
++
++install-languages:
+ 	for lang in $(LANGUAGES); do \
+ 		$(INSTALL_DIR) -m 755 $(DOCDIR)/$$lang/images; \
+ 		if test -f $$lang/index.html; then \
+@@ -230,7 +234,7 @@
+ # Unnstall all documentation files...
+ #
+ 
+-uninstall:
++uninstall: $(UNINSTALL_LANGUAGES)
+ 	for file in $(WEBPAGES); do \
+ 		$(RM) $(DOCDIR)/$$file; \
+ 	done
+@@ -240,6 +244,11 @@
+ 	for file in $(WEBIMAGES) $(WEBBUTTONS); do \
+ 		$(INSTALL_MAN) $(DOCDIR)/images/$$file; \
+ 	done
++	-$(RMDIR) $(DOCDIR)/images
++	-$(RMDIR) $(DOCDIR)/help
++	-$(RMDIR) $(DOCDIR)
++
++uninstall-languages:
+ 	-for lang in $(LANGUAGES); do \
+ 		$(RM) $(DOCDIR)/$$lang/index.html; \
+ 		for file in $(WEBBUTTONS); do \
+@@ -248,9 +257,6 @@
+ 		$(RMDIR) $(DOCDIR)/$$lang/images; \
+ 		$(RMDIR) $(DOCDIR)/$$lang; \
+ 	done
+-	-$(RMDIR) $(DOCDIR)/images
+-	-$(RMDIR) $(DOCDIR)/help
+-	-$(RMDIR) $(DOCDIR)
+ 
+ 
+ #
+diff -urNad cupsys-1.2.1~/doc/de/index.html.in cupsys-1.2.1/doc/de/index.html.in
+--- cupsys-1.2.1~/doc/de/index.html.in	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/doc/de/index.html.in	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1,143 @@
++<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
++<HTML>
++<HEAD>
++	<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
++	<TITLE>Startseite - CUPS @CUPS_VERSION@@CUPS_REVISION@</TITLE>
++	<LINK REL="STYLESHEET" TYPE="text/css" HREF="/cups.css">
++	<LINK REL="SHORTCUT ICON" HREF="/favicon.ico" TYPE="image/x-icon">
++</HEAD>
++<BODY>
++<TABLE WIDTH="100%" STYLE="height: 100%;" BORDER="0" CELLSPACING="0" CELLPADDING="0" SUMMARY="Common UNIX Printing System @CUPS_VERSION@">
++<TR CLASS="header">
++<TD VALIGN="TOP" WIDTH="15" ROWSPAN="2"><IMG SRC="/images/top-left.gif" WIDTH="15" HEIGHT="80" ALT=""></TD>
++<TD VALIGN="TOP" WIDTH="55" ROWSPAN="2"><IMG SRC="/images/top-middle.gif" WIDTH="55" HEIGHT="80" ALT=""></TD>
++<TD WIDTH="100%" HEIGHT="60"><H1>Common UNIX Printing System @CUPS_VERSION@@CUPS_REVISION@</H1></TD>
++<TD ALIGN="RIGHT" VALIGN="TOP" WIDTH="15" ROWSPAN="2"><IMG
++SRC="/images/top-right.gif" WIDTH="15" HEIGHT="15" ALT=""></TD>
++</TR>
++<TR CLASS="header"><TD WIDTH="100%" VALIGN="BOTTOM" NOWRAP>
++
++<A CLASS="sel" HREF="/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
++HEIGHT="4" ALIGN="TOP" BORDER="0"
++ALT="">&nbsp;&nbsp;Startseite&nbsp;&nbsp;<IMG
++SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
++BORDER="0" ALT=""></A>
++
++&nbsp;<A CLASS="unsel" HREF="/admin/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
++HEIGHT="4" ALIGN="TOP" BORDER="0"
++ALT="">&nbsp;&nbsp;Verwaltung&nbsp;&nbsp;<IMG
++SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
++BORDER="0" ALT=""></A>
++
++&nbsp;<A CLASS="unsel" HREF="/classes/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
++HEIGHT="4" ALIGN="TOP" BORDER="0"
++ALT="">&nbsp;&nbsp;Klassen&nbsp;&nbsp;<IMG
++SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
++BORDER="0" ALT=""></A>
++
++&nbsp;<A CLASS="unsel" HREF="/help/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
++HEIGHT="4" ALIGN="TOP" BORDER="0"
++ALT="">&nbsp;&nbsp;Dokumentation/Hilfe&nbsp;&nbsp;<IMG
++SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
++BORDER="0" ALT=""></A>
++
++&nbsp;<A CLASS="unsel" HREF="/jobs/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
++HEIGHT="4" ALIGN="TOP" BORDER="0"
++ALT="">&nbsp;&nbsp;Auftr&auml;ge&nbsp;&nbsp;<IMG
++SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
++BORDER="0" ALT=""></A>
++
++&nbsp;<A CLASS="unsel" HREF="/printers/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
++HEIGHT="4" ALIGN="TOP" BORDER="0"
++ALT="">&nbsp;&nbsp;Drucker&nbsp;&nbsp;<IMG
++SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
++BORDER="0" ALT=""></A>
++
++</TD></TR>
++<TR CLASS="page">
++<TD WIDTH="15">&nbsp;</TD>
++<TD COLSPAN="2" WIDTH="100%" VALIGN="TOP" CLASS="page">
++
++<H2 CLASS="title">Herzlich Willkommen!</H2>
++
++<P>Auf diesen Seiten k&ouml;nnen Sie Ihre Drucker und Aufträge &uuml;berwachen,
++sowie auch Verwaltungsaufgaben durchzuführen. Klicken Sie auf einen der
++oberen Karteireiter oder eine der Schaltflächen um eine T&auml;tigkeit auszuführen.</P>
++
++<P>
++<A HREF="/help/"><IMG SRC="/images/button-help.gif" CLASS="button" ALT="Hilfe"></A>
++<A HREF="/admin?OP=add-class"><IMG SRC="/images/button-add-class.gif" CLASS="button" ALT="Klasse hinzuf&uuml;gen"></A>
++<A HREF="/admin?OP=add-printer"><IMG SRC="/images/button-add-printer.gif" CLASS="button" ALT="Drucker hinzuf&uuml;gen"></A>
++<A HREF="/classes"><IMG SRC="/images/button-manage-classes.gif" CLASS="button" ALT="Klassen verwalten"></A>
++<A HREF="/jobs"><IMG SRC="/images/button-manage-jobs.gif" CLASS="button" ALT="Auftr&auml;ge verwalten"></A>
++<A HREF="/printers"><IMG SRC="/images/button-manage-printers.gif" CLASS="button" ALT="Drucker verwalten"></A>
++<A HREF="/admin"><IMG SRC="/images/button-manage-server.gif" CLASS="button" ALT="Server verwalten"></A>
++</P>
++
++<P><I>Wenn Sie nach einem Benutzernamen und Passwort gefragt werden,
++geben Sie bitte Ihren Benutzernamen und Ihr Passwort oder
++den Benutzernamen und das Passwort des "root" Benutzers ein.</I></P>
++
++<H2 CLASS="title">&Uuml;ber CUPS</H2>
++
++<P>
++<IMG SRC="/images/happy.gif" ALIGN="LEFT" WIDTH="196" HEIGHT="144"
++STYLE="padding-right: 10px;" ALT="Happy Computer and Printer">
++
++<A HREF="http://www.easysw.com/"><IMG SRC="/images/esp-logo.gif"
++ALIGN="RIGHT" WIDTH="110" HEIGHT="68" BORDER="0"
++STYLE="padding-left: 10px; padding-bottom: 10px;"
++ALT="Easy Software Products"></A>
++
++CUPS stellt eine portierbare Druckerschicht f&uuml;r
++UNIX<SUP>&reg;</SUP>-basierte Betriebssysteme bereit. Es wird entwickelt
++und gepflegt von <A HREF="http://www.easysw.com">Easy Software
++Products</a> um eine Standard Druckerl&ouml;sung zu f&ouml;rdern. CUPS ist das
++Standard Drucksystem welches von MacOS<SUP>&reg;</SUP> X und den meisten
++Linux<SUP>&reg;</SUP> Distributionen verwendet wird.</P>
++
++<P>CUPS benutzt das <A HREF="http://www.pwg.org/ipp/"
++TARGET="_blank"> Internet Printing Protocol ("IPP")</A> als
++Basis für die Verwaltung von Druckauftr&auml;ge und Warteschlangen und f&uuml;gt
++Drucker-Browsing und PostScript Printer Description ("PPD") basierte
++Druckeigenschaften hinzu um komplexe Druckumgebungen optimale zu
++unterst&uuml;tzen.<BR CLEAR="ALL"></P>
++
++<H2 CLASS="title">Druckertreiber und Unterst&uuml;tzung</H2>
++
++<P>Besuchen Sie die offizielle CUPS Seite um Druckertreiber und
++Unterst&uuml;tzung zu erhalten:</P>
++
++<PRE>
++    <A HREF="http://www.cups.org/" TARGET="_blank">www.cups.org</A>
++</PRE>
++
++<P>Kommerzieller Support und eine erweiterte Version von CUPS genannt <A
++HREF="http://www.easysw.com/printpro/">ESP Print Pro</A> ist
++verf&uuml;gbar unter:</P>
++
++<PRE>
++    <A HREF="http://www.easysw.com/" TARGET="_blank">www.easysw.com</A>
++</PRE>
++
++</TD>
++<TD WIDTH="15">&nbsp;</TD>
++</TR>
++<TR CLASS="header">
++<TD VALIGN="BOTTOM" WIDTH="15"><IMG SRC="/images/bottom-left.gif"
++WIDTH="15" HEIGHT="15" ALT=""></TD>
++<TD COLSPAN="2" WIDTH="100%" STYLE="padding: 5;">
++
++<P><SMALL>Das Common UNIX Printing System, CUPS, und das CUPS Logo sind
++Warenzeichen der <A HREF="http://www.easysw.com">Easy Software
++Products</A>. CUPS ist urheberrechtlich gesch&uuml;tzt 1997-2006 von Easy Software Products,
++Alle Rechte vorbehalten.</SMALL></P>
++
++</TD>
++
++<TD ALIGN="RIGHT" VALIGN="BOTTOM" WIDTH="15"><IMG SRC="/images/bottom-right.gif"
++WIDTH="15" HEIGHT="15" ALT=""></TD>
++</TR>
++</TABLE>
++</BODY>
++</HTML>
+diff -urNad cupsys-1.2.1~/doc/help/policies.html cupsys-1.2.1/doc/help/policies.html
+--- cupsys-1.2.1~/doc/help/policies.html	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/doc/help/policies.html	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1,677 @@
++<HTML>
++<!-- SECTION: Getting Started -->
++<HEAD>
++	<TITLE>Managing Operation Policies</TITLE>
++</HEAD>
++<BODY>
++
++<P>Operation policies are the rules used for each IPP operation
++in CUPS. These rules include things like "user must provide a
++password", "user must be in the system group", "allow only from
++the local system", and so forth. Until CUPS 1.2, these rules were
++largely hardcoded and could only be customized at a very basic
++level.</P>
++
++<P>CUPS 1.2 adds a new fine-grained policy layer which allows you
++to completely redefine the rules for each operation and/or
++printer. Each policy is named and defines access control rules
++for each IPP operation. This document describes how to manage
++policies and their rules.</P>
++
++<H2 CLASS="title"><A NAME="BASICS">The Basics</A></H2>
++
++<P>Operation policies are used for all IPP requests sent to the
++scheduler and are evaluated <em>after</em> the <A
++HREF="ref-cupsd-conf.html#Location"><TT>Location</TT></A> based
++access control rules. This means that operation policies can only
++add additional security restrictions to a request, never relax
++them. Use <TT>Location</TT> based access control rules for
++server-wide limits and operation policies for limits on
++individual printers, tasks, or services.</P>
++
++<P>Policies are stored in the <VAR>cupsd.conf</VAR> file in <A
++HREF="ref-cupsd-conf.html#Policy"><TT>Policy</TT></A> sections.
++Each policy has an alphanumeric name that is used to select it.
++Inside the policy section are one or more <A
++HREF="ref-cupsd-conf.html#LimitIPP"><TT>Limit</TT></A>
++subsections which list the operations that are affected by the
++rules inside it. <A HREF="#LISTING01">Listing 1</A> shows the
++default operation policy, appropriately called "default", that is
++shipped with CUPS.</P>
++
++<P>The easiest way to add a policy to the <VAR>cupsd.conf</VAR>
++file is to use the web interface. Click on the
++<VAR>Administration</VAR> tab and then the <VAR>Edit
++Configuration File</VAR> button to edit the current
++<VAR>cupsd.conf</VAR> file. Click on the <VAR>Save Changes</VAR>
++button to save the changes and restart the scheduler. If you edit
++the <VAR>cupsd.conf</VAR> file from the console, make sure to <A
++HREF="ref-cupsd-conf.html">restart the cupsd process</A> before
++trying to use the new policy.</P>
++
++<PRE CLASS="command">
++<EM>Listing 1: <A NAME="LISTING01">Default Operation Policy</A></EM>
++
++ 1    &lt;Policy default>
++ 2      # Job-related operations must be done by the owner or an
++      adminstrator...
++ 3      &lt;Limit Send-Document Send-URI Hold-Job Release-Job
++      Restart-Job Purge-Jobs Set-Job-Attributes
++      Create-Job-Subscription Renew-Subscription
++      Cancel-Subscription Get-Notifications Reprocess-Job
++      Cancel-Current-Job Suspend-Current-Job Resume-Job
++      CUPS-Move-Job>
++ 4        Require user @OWNER @SYSTEM
++ 5        Order deny,allow
++ 6      &lt;/Limit>
++ 7    
++ 8      # All administration operations require an adminstrator
++      to authenticate...
++ 9      &lt;Limit Pause-Printer Resume-Printer
++      Set-Printer-Attributes Enable-Printer Disable-Printer
++      Pause-Printer-After-Current-Job Hold-New-Jobs
++      Release-Held-New-Jobs Deactivate-Printer Activate-Printer
++      Restart-Printer Shutdown-Printer Startup-Printer
++      Promote-Job Schedule-Job-After CUPS-Add-Printer
++      CUPS-Delete-Printer CUPS-Add-Class CUPS-Delete-Class
++      CUPS-Accept-Jobs CUPS-Reject-Jobs CUPS-Set-Default>
++10        AuthType Basic
++11        Require user @SYSTEM
++12        Order deny,allow
++13      &lt;/Limit>
++14    
++15      # Only the owner or an administrator can cancel or
++      authenticate a job...
++16      &lt;Limit Cancel-Job CUPS-Authenticate-Job>
++17        Require user @OWNER @SYSTEM
++18        Order deny,allow
++19      &lt;/Limit>
++20    
++21      &lt;Limit All>
++22        Order deny,allow
++23      &lt;/Limit>
++24    &lt;/Policy>
++</PRE>
++
++<H3>The Default CUPS Operation Policy</H3>
++
++<P>The policy definition starts with an opening <TT>Policy</TT>
++directive:</P>
++
++<PRE CLASS="command">
++ 1    &lt;Policy default>
++</PRE>
++
++<P>The first <TT>Limit</TT> subsection defines the rules for IPP
++job operations:</P>
++
++<PRE CLASS="command">
++ 3      &lt;Limit Send-Document Send-URI Hold-Job Release-Job
++      Restart-Job Purge-Jobs Set-Job-Attributes
++      Create-Job-Subscription Renew-Subscription
++      Cancel-Subscription Get-Notifications Reprocess-Job
++      Cancel-Current-Job Suspend-Current-Job Resume-Job
++      CUPS-Move-Job>
++ 4        Require user @OWNER @SYSTEM
++ 5        Order deny,allow
++ 6      &lt;/Limit>
++</PRE>
++
++<P>The operation names are listed on a single line
++with spaces separating them. Each name corresponds to the IPP
++operation described in any of the IETF or PWG standards documents
++for the Internet Printing Protocol. <A HREF="#TABLE01">Table
++1</A> lists all of the operations that have been defined along
++with their usage in CUPS.</P>
++
++<P>The access control rules are listed after the <TT>Limit</TT>
++line and are the same as those used for <A
++HREF="ref-cupsd-conf.html#Location"><TT>Location</TT></A>
++sections. In this case, we require the owner of the job
++("@OWNER") or a member of the <A
++HREF="ref-cupsd-conf.html#SystemGroup"><TT>SystemGroup</TT></A>
++("@SYSTEM") to do the operation. Because we do not include an <A
++HREF="ref-cupsd-conf.html#AuthType"><TT>AuthType</TT></A>
++directive here, the user information can come from the IPP
++request itself or the authenticated username from the HTTP
++request. The administrative operations starting on line 9,
++however, <em>do</em> use the <TT>AuthType</TT> directive, and so
++administrative operations need to be authenticated:</P>
++
++<PRE CLASS="command">
++ 9      &lt;Limit Pause-Printer Resume-Printer
++      Set-Printer-Attributes Enable-Printer Disable-Printer
++      Pause-Printer-After-Current-Job Hold-New-Jobs
++      Release-Held-New-Jobs Deactivate-Printer Activate-Printer
++      Restart-Printer Shutdown-Printer Startup-Printer
++      Promote-Job Schedule-Job-After CUPS-Add-Printer
++      CUPS-Delete-Printer CUPS-Add-Class CUPS-Delete-Class
++      CUPS-Accept-Jobs CUPS-Reject-Jobs CUPS-Set-Default>
++10        AuthType Basic
++11        Require user @SYSTEM
++12        Order deny,allow
++13      &lt;/Limit>
++</PRE>
++
++<P>The "Order deny,allow" line at the end of both <TT>Limit</TT>
++subsections allows the request to come from any system allowed by
++the <TT>Location</TT> sections elsewhere in the
++<VAR>cupsd.conf</VAR> file.</P>
++
++<P>The <TT>Cancel-Job</TT> and <TT>CUPS-Authenticate-Job</TT>
++operations are listed separately to allow the web interface to
++more easily edit their policy without disturbing the rest. Like
++the rest of the job operations, we want the job's owner
++("@OWNER") or an administrator ("@SYSTEM") to do it:</P>
++
++<PRE CLASS="command">
++16      &lt;Limit Cancel-Job CUPS-Authenticate-Job>
++17        Require user @OWNER @SYSTEM
++18        Order deny,allow
++19      &lt;/Limit>
++</PRE>
++
++<P>The last <TT>Limit</TT> subsection in any policy uses the
++special operation name <TT>All</TT>. CUPS will use the rules in
++this subsection for any operation you don't list specifically in
++the policy. In this case, all other operations are allowed
++without a username or authentication:</P>
++
++<PRE CLASS="command">
++21      &lt;Limit All>
++22        Order deny,allow
++23      &lt;/Limit>
++24    &lt;/Policy>
++</PRE>
++
++
++<DIV CLASS="table"><TABLE WIDTH="80%" SUMMARY="IPP Operation Names">
++<CAPTION>Table 1: <A NAME="TABLE01">IPP Operation Names</A></CAPTION>
++<THEAD>
++<TR>
++	<TH>Name</TH>
++	<TH>Used by CUPS?</TH>
++	<TH>Description</TH>
++</TR>
++</THEAD>
++<TBODY>
++<TR>
++	<TD NOWRAP><TT>Print-Job</TT></TD>
++	<TD>Yes</TD>
++	<TD>Creates a print job with a single file.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Print-URI</TT></TD>
++	<TD>No</TD>
++	<TD>Create a print job with a single URI.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Validate-Job</TT></TD>
++	<TD>Yes</TD>
++	<TD>Validates a print request before printing.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Create-Job</TT></TD>
++	<TD>Yes</TD>
++	<TD>Creates a print job with no files or URIs.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Send-Document</TT></TD>
++	<TD>Yes</TD>
++	<TD>Adds a file to a print job.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Send-URI</TT></TD>
++	<TD>No</TD>
++	<TD>Adds a URI to a print job.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Cancel-Job</TT></TD>
++	<TD>Yes</TD>
++	<TD>Cancels a print job.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Get-Job-Attributes</TT></TD>
++	<TD>Yes</TD>
++	<TD>Gets information and options associated with a job.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Get-Jobs</TT></TD>
++	<TD>Yes</TD>
++	<TD>Gets a list of jobs.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Get-Printer-Attributes</TT></TD>
++	<TD>Yes</TD>
++	<TD>Gets information and options associated with a printer or class.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Hold-Job</TT></TD>
++	<TD>Yes</TD>
++	<TD>Holds a print job for printing.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Release-Job</TT></TD>
++	<TD>Yes</TD>
++	<TD>Releases a print job for printing.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Restart-Job</TT></TD>
++	<TD>Yes</TD>
++	<TD>Reprints a print job.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Pause-Printer</TT></TD>
++	<TD>Yes</TD>
++	<TD>Stops a printer or class.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Resume-Printer</TT></TD>
++	<TD>Yes</TD>
++	<TD>Starts a printer or class.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Purge-Jobs</TT></TD>
++	<TD>Yes</TD>
++	<TD>Cancels all jobs on the server or a printer or class
++	and removes the job history information.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Set-Printer-Attributes</TT></TD>
++	<TD>No</TD>
++	<TD>Sets printer or class information; CUPS uses
++	CUPS-Add-Modify-Printer and CUPS-Add-Modify-Class
++	instead.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Set-Job-Attributes</TT></TD>
++	<TD>Yes</TD>
++	<TD>Changes job options.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Get-Printer-Supported-Values</TT></TD>
++	<TD>No</TD>
++	<TD>Gets -supported attributes for a printer based on job
++	options.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Create-Printer-Subscription</TT></TD>
++	<TD>Yes</TD>
++	<TD>Creates an event subscription for a printer or the server.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Create-Job-Subscription</TT></TD>
++	<TD>Yes</TD>
++	<TD>Creates an event subscription for a job.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Get-Subscription-Attributes</TT></TD>
++	<TD>Yes</TD>
++	<TD>Gets information for an event subscription.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Get-Subscriptions</TT></TD>
++	<TD>Yes</TD>
++	<TD>Gets a list of event subscriptions.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Renew-Subscription</TT></TD>
++	<TD>Yes</TD>
++	<TD>Renews an event subscription that is about to expire.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Cancel-Subscription</TT></TD>
++	<TD>Yes</TD>
++	<TD>Cancels an event subscription.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Get-Notifications</TT></TD>
++	<TD>Yes</TD>
++	<TD>Gets (pending) events for an event subscription.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Send-Notifications</TT></TD>
++	<TD>No</TD>
++	<TD>Sends events for an event subscription.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Get-Printer-Support-Files</TT></TD>
++	<TD>No</TD>
++	<TD>Gets printer driver files for a Novell client.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Enable-Printer</TT></TD>
++	<TD>Yes</TD>
++	<TD>Starts a printer or class.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Disable-Printer</TT></TD>
++	<TD>Yes</TD>
++	<TD>Stops a printer or class.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Pause-Printer-After-Current-Job</TT></TD>
++	<TD>No</TD>
++	<TD>Stops a printer or class after the current job is finished.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Hold-New-Jobs</TT></TD>
++	<TD>No</TD>
++	<TD>Holds new jobs submitted to a printer or class.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Release-Held-New-Jobs</TT></TD>
++	<TD>No</TD>
++	<TD>Releases jobs that were held because of the
++	Hold-New-Jobs operation.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Deactivate-Printer</TT></TD>
++	<TD>No</TD>
++	<TD>Deactivates a printer or class.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Activate-Printer</TT></TD>
++	<TD>No</TD>
++	<TD>Activates a printer or class.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Restart-Printer</TT></TD>
++	<TD>No</TD>
++	<TD>Restarts a printer or class, resuming print jobs as needed.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Shutdown-Printer</TT></TD>
++	<TD>No</TD>
++	<TD>Powers a printer or class off.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Startup-Printer</TT></TD>
++	<TD>No</TD>
++	<TD>Powers a printer or class on.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Reprocess-Job</TT></TD>
++	<TD>No</TD>
++	<TD>Reprints a job on a different printer or class; CUPS has the
++	CUPS-Move-Job operation instead.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Cancel-Current-Job</TT></TD>
++	<TD>No</TD>
++	<TD>Cancels the current job on a printer or class.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Suspend-Current-Job</TT></TD>
++	<TD>No</TD>
++	<TD>Stops the current job on a printer or class.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Resume-Job</TT></TD>
++	<TD>No</TD>
++	<TD>Resumes printing of a stopped job.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Promote-Job</TT></TD>
++	<TD>No</TD>
++	<TD>Prints a job before others.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>Schedule-Job-After</TT></TD>
++	<TD>No</TD>
++	<TD>Prints a job after others.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>CUPS-Get-Default</TT></TD>
++	<TD>Yes</TD>
++	<TD>Gets the server/network default printer or class.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>CUPS-Get-Printers</TT></TD>
++	<TD>Yes</TD>
++	<TD>Gets a list of printers and/or classes.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>CUPS-Add-Modify-Printer</TT></TD>
++	<TD>Yes</TD>
++	<TD>Adds or modifies a printer.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>CUPS-Delete-Printer</TT></TD>
++	<TD>Yes</TD>
++	<TD>Removes a printer.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>CUPS-Get-Classes</TT></TD>
++	<TD>Yes</TD>
++	<TD>Gets a list of classes.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>CUPS-Add-Modify-Class</TT></TD>
++	<TD>Yes</TD>
++	<TD>Adds or modifies a class.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>CUPS-Delete-Class</TT></TD>
++	<TD>Yes</TD>
++	<TD>Removes a class.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>CUPS-Accept-Jobs</TT></TD>
++	<TD>Yes</TD>
++	<TD>Sets a printer's or class' printer-is-accepting-jobs
++	attribute to true.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>CUPS-Reject-Jobs</TT></TD>
++	<TD>Yes</TD>
++	<TD>Sets a printer's or class' printer-is-accepting-jobs
++	attribute to false.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>CUPS-Set-Default</TT></TD>
++	<TD>Yes</TD>
++	<TD>Sets the server/network default printer or class.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>CUPS-Get-Devices</TT></TD>
++	<TD>Yes</TD>
++	<TD>Gets a list of printer devices.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>CUPS-Get-PPDs</TT></TD>
++	<TD>Yes</TD>
++	<TD>Gets a list of printer drivers or manufacturers.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>CUPS-Move-Job</TT></TD>
++	<TD>Yes</TD>
++	<TD>Moves a job to a different printer or class.</TD>
++</TR>
++<TR>
++	<TD NOWRAP><TT>CUPS-Authenticate-Job</TT></TD>
++	<TD>Yes</TD>
++	<TD>Authenticates a job for printing.</TD>
++</TR>
++</TBODY>
++</TABLE></DIV>
++
++
++<H2 CLASS="title"><A NAME="CREATING">Creating Your Own Policies</A></H2>
++
++<P>The easiest way to create a new policy is to start with the
++default policy and then make changes to the copy. The first
++change you'll make is to give the policy a new name. Policy names
++can use the same characters as a printer name, specifically all
++printable characters except space, slash (/), and pound (#):</P>
++
++<PRE CLASS="command">
++&lt;Policy mypolicy>
++</PRE>
++
++<P>Then you need to decide exactly what limits you want for the
++policy. For example, if you want to allow any user to cancel any
++other users' jobs, you can change the <TT>Cancel-Job</TT> limits
++to:</P>
++
++<PRE CLASS="command">
++&lt;Limit Cancel-Job>
++  Order deny,allow
++&lt;/Limit>
++</PRE>
++
++<P>The directives inside the <TT>Limit</TT> subsection can use
++any of the normal limiting directives: <A
++HREF="ref-cupsd-conf.html#Allow"><TT>Allow</TT></A>, <A
++HREF="ref-cupsd-conf.html#AuthType"><TT>AuthType</TT></A>, <A
++HREF="ref-cupsd-conf.html#Deny"><TT>Deny</TT></A>, <A
++HREF="ref-cupsd-conf.html#Encryption"><TT>Encryption</TT></A>, <A
++HREF="ref-cupsd-conf.html#Require"><TT>Require</TT></A>, and <A
++HREF="ref-cupsd-conf.html#Satisfy"><TT>Satisfy</TT></A>. <A
++HREF="#TABLE02">Table 2</A> lists some basic "recipes" for
++different access control rules.</P>
++
++<DIV CLASS="table"><TABLE WIDTH="80%" SUMMARY="Access Control Recipes">
++<CAPTION>Table 2: <A NAME="TABLE02">Access Control Recipes</A></CAPTION>
++<THEAD>
++<TR>
++	<TH>Access Level</TH>
++	<TH>Directives to Use</TH>
++</TR>
++</THEAD>
++<TBODY>
++<TR>
++	<TD>Allow Everyone</TD>
++	<TD><PRE>Order deny,allow
++Allow from all</PRE></TD>
++</TR>
++<TR>
++	<TD>Allow Everyone on the Local Network</TD>
++	<TD><PRE>Order deny,allow
++Allow from @LOCAL</PRE></TD>
++</TR>
++<TR>
++	<TD>Deny Everyone/Disable Operation(s)</TD>
++	<TD><PRE>Order allow,deny
++Deny from all</PRE></TD>
++</TR>
++<TR>
++	<TD>Require Login (System) Password</TD>
++	<TD><PRE>AuthType Basic</PRE></TD>
++</TR>
++<TR>
++	<TD>Require CUPS (lppasswd) Password</TD>
++	<TD><PRE>AuthType BasicDigest</PRE></TD>
++</TR>
++<TR>
++	<TD>Require the Owner of a Job or Subscription</TD>
++	<TD><PRE>Require user @OWNER</PRE></TD>
++</TR>
++<TR>
++	<TD>Require an Administrative User</TD>
++	<TD><PRE>Require user @SYSTEM</PRE></TD>
++</TR>
++<TR>
++	<TD>Require Member of Group "foogroup"</TD>
++	<TD><PRE>Require user @foogroup</PRE></TD>
++</TR>
++<TR>
++	<TD>Require "john" or "mary"</TD>
++	<TD><PRE>Require user john mary</PRE></TD>
++</TR>
++<TR>
++	<TD>Require Encryption</TD>
++	<TD><PRE>Encryption Required</PRE></TD>
++</TR>
++</TABLE></DIV>
++
++
++<H3>Creating a Policy for a Computer Lab</H3>
++
++<P>One common operating scenario is a computer lab. The lab is
++managed by one or more technicians that assist the users of the
++lab and handle the basic administration tasks. <A
++HREF="#LISTING02">Listing 2</A> shows an operation policy that
++only allows access from the lab's subnet, 10.0.2.x, and allows
++the lab technicians, who are members of a special UNIX group for
++that lab called "lab999", to do job, printer, and subscription
++management operations.</P>
++
++<PRE CLASS="command">
++<EM>Listing 2: <A NAME="LISTING02">Operation Policy for a Lab</A></EM>
++
++ 1    &lt;Policy lab999>
++ 2      # Job- and subscription-related operations must be done
++      by the owner, a lab technician, or an adminstrator...
++ 3      &lt;Limit Send-Document Send-URI Hold-Job Release-Job
++      Restart-Job Purge-Jobs Set-Job-Attributes
++      Create-Job-Subscription Renew-Subscription
++      Cancel-Subscription Get-Notifications Reprocess-Job
++      Cancel-Current-Job Suspend-Current-Job Resume-Job
++      CUPS-Move-Job Cancel-Job CUPS-Authenticate-Job>
++ 4        Require user @OWNER @lab999 @SYSTEM
++ 5        Order allow,deny
++ 6        Allow from 10.0.2.0/24
++ 7      &lt;/Limit>
++ 8    
++ 9      # All administration operations require a lab technician
++      or an adminstrator to authenticate...
++10      &lt;Limit Pause-Printer Resume-Printer
++      Set-Printer-Attributes Enable-Printer Disable-Printer
++      Pause-Printer-After-Current-Job Hold-New-Jobs
++      Release-Held-New-Jobs Deactivate-Printer Activate-Printer
++      Restart-Printer Shutdown-Printer Startup-Printer
++      Promote-Job Schedule-Job-After CUPS-Accept-Jobs
++      CUPS-Reject-Jobs CUPS-Set-Default>
++11        AuthType Basic
++12        Require user @lab999 @SYSTEM
++13        Order allow,deny
++14        Allow from 10.0.2.0/24
++15      &lt;/Limit>
++16
++17      # All other operations are allowed from the lab network...
++18      &lt;Limit All>
++19        Order allow,deny
++20        Allow from 10.0.2.0/24
++21      &lt;/Limit>
++22    &lt;/Policy>
++</PRE>
++
++
++<H2 CLASS="title"><A NAME="SELECT">Using Policies</A></H2>
++
++<P>Once you have created a policy, you can use it in two ways.
++The first way is to assign it as the default policy for the
++system using the <A
++HREF="ref-cupsd-conf.html#DefaultPolicy"><TT>DefaultPolicy</TT></A>
++directive in the <VAR>cupsd.conf</VAR> file. For example, add the
++following line to the <VAR>cupsd.conf</VAR> file to use the
++"lab999" policy from the previous section:</P>
++
++<PRE CLASS="command">
++DefaultPolicy lab999
++</PRE>
++
++<P>To associate the policy with one or more printers, use either
++the <A HREF="man-lpadmin.html">lpadmin(8)</A> command or the web
++interface to change the operation policy for each printer. When
++using the <B>lpadmin</B> command, the <TT>-o
++printer-op-policy=name</TT> option sets the operation policy for
++a printer. For example, enter the following command to use the
++"lab999" policy from the previous section with a printer named
++"LaserJet4000":</P>
++
++<PRE CLASS="command">
++lpadmin -p LaserJet4000 -o printer-op-policy=lab999
++</PRE>
++
++<P>To make the same change in the web interface, go to the
++printer's web page, for example
++"http://localhost:631/printers/LaserJet4000", and click on the
++<VAR>Set Printer Options</VAR> button. Scroll down to the bottom
++of the page and choose the desired policy from the pull-down
++list. Click on <VAR>Save Changes</VAR> to change the policy for
++the printer.</P>
++
++</BODY>
++</HTML>
+diff -urNad cupsys-1.2.1~/doc/help/ref-mailto-conf.html cupsys-1.2.1/doc/help/ref-mailto-conf.html
+--- cupsys-1.2.1~/doc/help/ref-mailto-conf.html	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/doc/help/ref-mailto-conf.html	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1,105 @@
++<HTML>
++<!-- SECTION: References -->
++<HEAD>
++	<TITLE>mailto.conf</TITLE>
++</HEAD>
++<BODY>
++
++<P>The <VAR>/etc/cups/mailto.conf</VAR> file contains several
++directives that defines the local mail server and email
++notification preferences for CUPS. Each directive is listed on a
++line by itself followed by its value. Comments are introduced
++using the number sign ("#") character at the beginning of a
++line.</P>
++
++
++<H2 CLASS="title"><A NAME="Cc">Cc</A></H2>
++
++<H3>Examples</H3>
++
++<PRE CLASS="command">
++Cc bigbrother at domain.com
++Cc John Doe &lt;jd at domain.com>
++</PRE>
++
++<H3>Description</H3>
++
++<P>The <CODE>Cc</CODE> directive specifies an additional
++recipient ("carbon copy") for all email notifications. The
++default is to not send a copy to anyone but the subscriber.</P>
++
++
++<H2 CLASS="title"><A NAME="From">From</A></H2>
++
++<H3>Examples</H3>
++
++<PRE CLASS="command">
++From printserver at domain.com
++From Your Happy Printer &lt;printserver at domain.com>
++</PRE>
++
++<H3>Description</H3>
++
++<P>The <CODE>From</CODE> directive specifies the sender of email
++notifications. The default is the <A
++HREF="ref-cupsd-conf.html#ServerAdmin"><TT>ServerAdmin</TT><A>
++address defined in the <VAR>cupsd.conf</VAR> file.</P>
++
++
++<H2 CLASS="title"><A NAME="Sendmail">Sendmail</A></H2>
++
++<H3>Examples</H3>
++
++<PRE CLASS="command">
++Sendmail /usr/sbin/sendmail
++Sendmail /usr/lib/sendmail -bm -i
++</PRE>
++
++<H3>Description</H3>
++
++<P>The <CODE>Sendmail</CODE> directive specifies the command to
++run to deliver an email locally. This directive cannot be used
++with the <TT>SMTPServer</TT> directive, and if both
++<TT>Sendmail</TT> and <TT>SMTPServer</TT> lines appear in the
++<VAR>mailto.conf</VAR> file, only the last line is used. The
++default is <TT>/usr/sbin/sendmail</TT>.</P>
++
++
++<H2 CLASS="title"><A NAME="SMTPServer">SMTPServer</A></H2>
++
++<H3>Examples</H3>
++
++<PRE CLASS="command">
++SMTPServer mail.domain.com
++SMTPServer 192.168.2.1
++</PRE>
++
++<H3>Description</H3>
++
++<P>The <CODE>SMTPServer</CODE> directive specifies a hostname or
++IP address of a (possibly remote) SMTP mail server. This
++directive cannot be used with the <TT>Sendmail</TT> directive,
++and if both <TT>Sendmail</TT> and <TT>SMTPServer</TT> lines
++appear in the <VAR>mailto.conf</VAR> file, only the last line is
++used. The default is to use the <TT>Sendmail</TT> command
++instead.</P>
++
++
++<H2 CLASS="title"><A NAME="Subject">Subject</A></H2>
++
++<H3>Examples</H3>
++
++<PRE CLASS="command">
++Subject [CUPS]
++Subject URGENT EMAIL NOTIFICATION
++</PRE>
++
++<H3>Description</H3>
++
++<P>The <CODE>Subject</CODE> directive specifies a prefix string to
++add to the subject of each email notification. The default is to
++not add a prefix string.</P>
++
++
++</BODY>
++</HTML>
+diff -urNad cupsys-1.2.1~/doc/help/spec-raster.html cupsys-1.2.1/doc/help/spec-raster.html
+--- cupsys-1.2.1~/doc/help/spec-raster.html	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/doc/help/spec-raster.html	2006-07-19 00:40:14.000000000 +0000
+@@ -14,9 +14,10 @@
+ a printable format.</P>
+ 
+ <P>CUPS 1.0 and 1.1 used a version 1 raster format. CUPS 1.2
+-introduces a version 2 format that is a superset of the version 1
+-format. Applications using the CUPS Imaging API (the cupsRaster*
+-functions) can read both formats without code changes.</P>
++introduces version 2 (compressed) and version 3 (uncompressed)
++formats that are a superset of the version 1 format. Applications
++using the CUPS Imaging API (the cupsRaster* functions) can read
++all formats without code changes.</P>
+ 
+ <P>The registered MIME media type for CUPS raster files is
+ <CODE>application/vnd.cups-raster</CODE>.</P>
+@@ -485,6 +486,22 @@
+ followed by the color value bytes.</P>
+ 
+ 
++<H2 CLASS="title"><A NAME="V3">Version 3 Raster File Format</A></H2>
++
++<P>A version 3 raster file begins with a 32-bit synchronization
++word: 0x52615333 ("RaS3") for big-endian architectures and
++0x33536152 ("3SaR") for little-endian architectures. The writer
++of the raster file will use the native word order, and the reader
++is responsible for detecting a reversed word order file and
++swapping bytes as needed. The CUPS Imaging API raster functions
++perform this function automatically.</P>
++
++<P>Following the synchronization word are a series of raster
++pages. Each page starts with a version 2 page device dictionary
++header and is followed immediately by the uncompressed raster data
++for that page.</P>
++
++
+ <H2 CLASS="title"><A NAME="ENCODING">Pixel Value Coding</A></H2>
+ 
+ <P>The following sections describe the encoding and decoding of
+@@ -673,6 +690,15 @@
+ 
+ <H2 CLASS="title"><A NAME="HISTORY">Change History</A></H2>
+ 
++<H3>Changes in CUPS 1.2.2</H3>
++
++<ul>
++
++	<li>Added version 3 (uncompressed) format.</li>
++
++</ul>
++
++
+ <H3>Changes in CUPS 1.2.1</H3>
+ 
+ <ul>
+diff -urNad cupsys-1.2.1~/filter/Makefile cupsys-1.2.1/filter/Makefile
+--- cupsys-1.2.1~/filter/Makefile	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/filter/Makefile	2006-07-19 00:40:14.000000000 +0000
+@@ -33,6 +33,7 @@
+ 		libcupsimage.a \
+ 		$(LIB32CUPSIMAGE) \
+ 		$(LIB64CUPSIMAGE) \
++		rasterbench \
+ 		testimage \
+ 		testraster
+ 
+@@ -47,7 +48,7 @@
+ FORMOBJS =	form-attr.o form-main.o form-ps.o form-text.o form-tree.o
+ OBJS	=	$(HPGLOBJS) $(IMAGEOBJS) $(FORMOBJS) \
+ 		gziptoany.o imagetops.o imagetoraster.o common.o pstops.o \
+-		raster.o rastertoepson.o rastertohp.o rastertolabel.o \
++		rasterbench.o rastertoepson.o rastertohp.o rastertolabel.o \
+ 		testimage.o testraster.o textcommon.o texttops.o
+ 
+ 
+@@ -118,12 +119,12 @@
+ install32bit:
+ 	$(INSTALL_DIR) -m 755 $(LIB32DIR)
+ 	$(INSTALL_LIB) 32bit/libcupsimage.so.2 $(LIB32DIR)/libcupsimage.so.2
+-	$(LN) libcupsimage.so $(LIB32DIR)/libcupsimage.so.2
++	$(LN) libcupsimage.so.2 $(LIB32DIR)/libcupsimage.so
+ 
+ install64bit:
+ 	$(INSTALL_DIR) -m 755 $(LIB64DIR)
+ 	$(INSTALL_LIB) 64bit/libcupsimage.so.2 $(LIB64DIR)/libcupsimage.so.2
+-	$(LN) libcupsimage.so $(LIB64DIR)/libcupsimage.so.2
++	$(LN) libcupsimage.so.2 $(LIB64DIR)/libcupsimage.so
+ 
+ 
+ #
+@@ -360,6 +361,15 @@
+ 
+ 
+ #
++# rasterbench
++#
++
++rasterbench:	rasterbench.o raster.o
++	echo Linking $@...
++	$(CC) $(LDFLAGS) -o $@ rasterbench.o raster.o
++
++
++#
+ # texttops
+ #
+ 
+diff -urNad cupsys-1.2.1~/filter/pstops.c cupsys-1.2.1/filter/pstops.c
+--- cupsys-1.2.1~/filter/pstops.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/filter/pstops.c	2006-07-19 00:40:48.000000000 +0000
+@@ -1,5 +1,5 @@
+ /*
+- * "$Id: pstops.c 5570 2006-05-22 18:31:23Z mike $"
++ * "$Id: pstops.c 5622 2006-06-01 23:43:21Z mike $"
+  *
+  *   PostScript filter for the Common UNIX Printing System (CUPS).
+  *
+@@ -49,6 +49,7 @@
+  *   set_pstops_options() - Set pstops options...
+  *   skip_page()          - Skip past a page that won't be printed...
+  *   start_nup()          - Start processing for N-up printing...
++ *   write_labels()       - Write the actual page labels.
+  */
+ 
+ /*
+@@ -204,6 +205,7 @@
+ 				  size_t linesize);
+ static void		start_nup(pstops_doc_t *doc, int number,
+ 				  int show_border, const int *bounding_box);
++static void		write_labels(pstops_doc_t *doc, int orient);
+ 
+ 
+ /*
+@@ -1305,6 +1307,9 @@
+ 
+   if (first_page)
+   {
++    char	*page_setup;		/* PageSetup commands to send */
++
++
+     doc_puts(doc, "%%BeginPageSetup\n");
+ 
+     if (pageinfo->num_options > 0)
+@@ -1344,20 +1349,28 @@
+       */
+ 
+       if (doc_setup)
++      {
+ 	doc_puts(doc, doc_setup);
++	free(doc_setup);
++      }
+ 
+       if (any_setup)
++      {
+ 	doc_puts(doc, any_setup);
++	free(any_setup);
++      }
++    }
+ 
+-     /*
+-      * Free the command strings...
+-      */
++   /*
++    * Output commands for the current page...
++    */
+ 
+-      if (doc_setup)
+-	free(doc_setup);
++    page_setup = ppdEmitString(ppd, PPD_ORDER_PAGE, 0);
+ 
+-      if (any_setup)
+-	free(any_setup);
++    if (page_setup)
++    {
++      doc_puts(doc, page_setup);
++      free(page_setup);
+     }
+   }
+ 
+@@ -1856,15 +1869,15 @@
+         int          number)		/* I - Page number */
+ {
+   if (doc->mirror || Orientation || doc->number_up > 1)
+-    puts("userdict/ESPsave get restore");
++    doc_puts(doc, "userdict/ESPsave get restore\n");
+ 
+   switch (doc->number_up)
+   {
+     case 1 :
+ 	if (doc->use_ESPshowpage)
+ 	{
+-	  WriteLabels(Orientation);
+-          puts("ESPshowpage");
++	  write_labels(doc, Orientation);
++          doc_puts(doc, "ESPshowpage\n");
+ 	}
+ 	break;
+ 
+@@ -1878,7 +1891,7 @@
+ 	    * Rotate the labels back to portrait...
+ 	    */
+ 
+-	    WriteLabels(Orientation - 1);
++	    write_labels(doc, Orientation - 1);
+ 	  }
+ 	  else if (Orientation == 0)
+ 	  {
+@@ -1886,7 +1899,7 @@
+ 	    * Rotate the labels to landscape...
+ 	    */
+ 
+-	    WriteLabels(doc->normal_landscape ? 1 : 3);
++	    write_labels(doc, doc->normal_landscape ? 1 : 3);
+ 	  }
+ 	  else
+ 	  {
+@@ -1894,18 +1907,18 @@
+ 	    * Rotate the labels to landscape...
+ 	    */
+ 
+-	    WriteLabels(doc->normal_landscape ? 3 : 1);
++	    write_labels(doc, doc->normal_landscape ? 3 : 1);
+ 	  }
+ 
+-          puts("ESPshowpage");
++          doc_puts(doc, "ESPshowpage\n");
+ 	}
+         break;
+ 
+     default :
+ 	if (is_last_page(number) && doc->use_ESPshowpage)
+ 	{
+-	  WriteLabels(Orientation);
+-          puts("ESPshowpage");
++	  write_labels(doc, Orientation);
++          doc_puts(doc, "ESPshowpage\n");
+ 	}
+         break;
+   }
+@@ -2935,5 +2948,51 @@
+ 
+ 
+ /*
+- * End of "$Id: pstops.c 5570 2006-05-22 18:31:23Z mike $".
++ * 'write_labels()' - Write the actual page labels.
++ *
++ * This function is a copy of the one in common.c since we need to
++ * use doc_puts/doc_printf instead of puts/printf...
++ */
++
++static void
++write_labels(pstops_doc_t *doc,		/* I - Document information */
++             int          orient)	/* I - Orientation of the page */
++{
++  float	width,				/* Width of page */
++	length;				/* Length of page */
++
++
++  doc_puts(doc, "gsave\n");
++
++  if ((orient ^ Orientation) & 1)
++  {
++    width  = PageLength;
++    length = PageWidth;
++  }
++  else
++  {
++    width  = PageWidth;
++    length = PageLength;
++  }
++
++  switch (orient & 3)
++  {
++    case 1 : /* Landscape */
++        doc_printf(doc, "%.1f 0.0 translate 90 rotate\n", length);
++        break;
++    case 2 : /* Reverse Portrait */
++        doc_printf(doc, "%.1f %.1f translate 180 rotate\n", width, length);
++        break;
++    case 3 : /* Reverse Landscape */
++        doc_printf(doc, "0.0 %.1f translate -90 rotate\n", width);
++        break;
++  }
++
++  doc_puts(doc, "ESPwl\n");
++  doc_puts(doc, "grestore\n");
++}
++
++
++/*
++ * End of "$Id: pstops.c 5622 2006-06-01 23:43:21Z mike $".
+  */
+diff -urNad cupsys-1.2.1~/filter/raster.c cupsys-1.2.1/filter/raster.c
+--- cupsys-1.2.1~/filter/raster.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/filter/raster.c	2006-07-19 00:40:14.000000000 +0000
+@@ -34,23 +34,25 @@
+  *
+  * Contents:
+  *
+- *   cupsRasterClose()        - Close a raster stream.
+- *   cupsRasterOpen()         - Open a raster stream.
+- *   cupsRasterReadHeader()   - Read a raster page header and store it in a
+- *                              V1 page header structure.
+- *   cupsRasterReadHeader2()  - Read a raster page header and store it in a
+- *                              V2 page header structure.
+- *   cupsRasterReadPixels()   - Read raster pixels.
+- *   cupsRasterWriteHeader()  - Write a raster page header from a V1 page
+- *                              header structure.
+- *   cupsRasterWriteHeader2() - Write a raster page header from a V2 page
+- *                              header structure.
+- *   cupsRasterWritePixels()  - Write raster pixels.
+- *   cups_raster_update()     - Update the raster header and row count for the
+- *                              current page.
+- *   cups_raster_write()      - Write a row of raster data...
+- *   cups_read()              - Read bytes from a file.
+- *   cups_write()             - Write bytes to a file.
++ *   cupsRasterClose()         - Close a raster stream.
++ *   cupsRasterOpen()          - Open a raster stream.
++ *   cupsRasterReadHeader()    - Read a raster page header and store it in a
++ *                               V1 page header structure.
++ *   cupsRasterReadHeader2()   - Read a raster page header and store it in a
++ *                               V2 page header structure.
++ *   cupsRasterReadPixels()    - Read raster pixels.
++ *   cupsRasterWriteHeader()   - Write a raster page header from a V1 page
++ *                               header structure.
++ *   cupsRasterWriteHeader2()  - Write a raster page header from a V2 page
++ *                               header structure.
++ *   cupsRasterWritePixels()   - Write raster pixels.
++ *   cups_raster_read()        - Read through the raster buffer.
++ *   cups_raster_read_header() - Read a raster page header.
++ *   cups_raster_update()      - Update the raster header and row count for the
++ *                               current page.
++ *   cups_read()               - Read bytes from a file.
++ *   cups_swap()               - Swap bytes in raster data...
++ *   cups_write()              - Write bytes to a file.
+  */
+ 
+ /*
+@@ -58,7 +60,7 @@
+  */
+ 
+ #include "raster.h"
+-#include <stdio.h>
++#include <cups/debug.h>
+ #include <stdlib.h>
+ #include <errno.h>
+ #include <cups/string.h>
+@@ -86,16 +88,25 @@
+   unsigned char		*pixels,	/* Pixels for current row */
+ 			*pend,		/* End of pixel buffer */
+ 			*pcurrent;	/* Current byte in pixel buffer */
++  int			compressed,	/* Non-zero if data is compressed */
++			swapped;	/* Non-zero if data is byte-swapped */
++  unsigned char		*buffer,	/* Read/write buffer */
++			*bufptr,	/* Current (read) position in buffer */
++			*bufend;	/* End of current (read) buffer */
++  int			bufsize;	/* Buffer size */
+ };
+ 
++
+ /*
+  * Local functions...
+  */
+ 
+ static unsigned	cups_raster_read_header(cups_raster_t *r);
++static int	cups_raster_read(cups_raster_t *r, unsigned char *buf,
++		                 int bytes);
+ static void	cups_raster_update(cups_raster_t *r);
+-static int	cups_raster_write(cups_raster_t *r);
+ static int	cups_read(int fd, unsigned char *buf, int bytes);
++static void	cups_swap(unsigned char *buf, int bytes);
+ static int	cups_write(int fd, const unsigned char *buf, int bytes);
+ 
+ 
+@@ -108,6 +119,9 @@
+ {
+   if (r != NULL)
+   {
++    if (r->buffer)
++      free(r->buffer);
++
+     if (r->pixels)
+       free(r->pixels);
+ 
+@@ -139,8 +153,7 @@
+     * Open for read - get sync word...
+     */
+ 
+-    if (cups_read(r->fd, (unsigned char *)&(r->sync), sizeof(r->sync))
+-            < sizeof(r->sync))
++    if (!cups_read(r->fd, (unsigned char *)&(r->sync), sizeof(r->sync)))
+     {
+       free(r);
+       return (NULL);
+@@ -149,11 +162,22 @@
+     if (r->sync != CUPS_RASTER_SYNC &&
+         r->sync != CUPS_RASTER_REVSYNC &&
+         r->sync != CUPS_RASTER_SYNCv1 &&
+-        r->sync != CUPS_RASTER_REVSYNCv1)
++        r->sync != CUPS_RASTER_REVSYNCv1 &&
++        r->sync != CUPS_RASTER_SYNCv2 &&
++        r->sync != CUPS_RASTER_REVSYNCv2)
+     {
+       free(r);
+       return (NULL);
+     }
++
++    if (r->sync == CUPS_RASTER_SYNCv2 ||
++        r->sync == CUPS_RASTER_REVSYNCv2)
++      r->compressed = 1;
++
++    if (r->sync == CUPS_RASTER_REVSYNC ||
++        r->sync == CUPS_RASTER_REVSYNCv1 ||
++        r->sync == CUPS_RASTER_REVSYNCv2)
++      r->swapped = 1;
+   }
+   else
+   {
+@@ -162,6 +186,7 @@
+     */
+ 
+     r->sync = CUPS_RASTER_SYNC;
++
+     if (cups_write(r->fd, (unsigned char *)&(r->sync), sizeof(r->sync))
+             < sizeof(r->sync))
+     {
+@@ -240,15 +265,51 @@
+ 		     unsigned      len)	/* I - Number of bytes to read */
+ {
+   int		bytes;			/* Bytes read */
++  unsigned	cupsBytesPerLine;	/* cupsBytesPerLine value */
+   unsigned	remaining;		/* Bytes remaining */
+   unsigned char	*ptr,			/* Pointer to read buffer */
+-		byte;			/* Byte from file */
++		byte,			/* Byte from file */
++		*temp;			/* Pointer into buffer */
++  int		count;			/* Repetition count */
+ 
+ 
+   if (r == NULL || r->mode != CUPS_RASTER_READ || r->remaining == 0)
+     return (0);
+ 
+-  remaining = len;
++  if (!r->compressed)
++  {
++   /*
++    * Read without compression...
++    */
++
++    r->remaining -= len / r->header.cupsBytesPerLine;
++
++    if (!cups_read(r->fd, p, len))
++      return (0);
++
++   /*
++    * Swap bytes as needed...
++    */
++
++    if ((r->header.cupsBitsPerColor == 16 ||
++         r->header.cupsBitsPerPixel == 12 ||
++         r->header.cupsBitsPerPixel == 16) &&
++        r->swapped)
++      cups_swap(p, len);
++
++   /*
++    * Return...
++    */
++
++    return (len);
++  }
++
++ /*
++  * Read compressed data...
++  */
++
++  remaining        = len;
++  cupsBytesPerLine = r->header.cupsBytesPerLine;
+ 
+   while (remaining > 0 && r->remaining > 0)
+   {
+@@ -258,127 +319,99 @@
+       * Need to read a new row...
+       */
+ 
+-      if (remaining == r->header.cupsBytesPerLine)
++      if (remaining == cupsBytesPerLine)
+ 	ptr = p;
+       else
+ 	ptr = r->pixels;
+ 
+-      if (r->sync == CUPS_RASTER_SYNCv1 || r->sync == CUPS_RASTER_REVSYNCv1)
+-      {
+-       /*
+-	* Read without compression...
+-	*/
++     /*
++      * Read using a modified TIFF "packbits" compression...
++      */
+ 
+-        if (cups_read(r->fd, ptr, r->header.cupsBytesPerLine) <
+-	        r->header.cupsBytesPerLine)
+-	  return (0);
++      if (!cups_raster_read(r, &byte, 1))
++	return (0);
+ 
+-        r->count = 1;
+-      }
+-      else
++      r->count = byte + 1;
++
++      if (r->count > 1)
++	ptr = r->pixels;
++
++      temp  = ptr;
++      bytes = cupsBytesPerLine;
++
++      while (bytes > 0)
+       {
+        /*
+-        * Read using a modified TIFF "packbits" compression...
++	* Get a new repeat count...
+ 	*/
+ 
+-        unsigned char	*temp;		/* Pointer into buffer */
+-	int		count;		/* Repetition count */
+-
+-
+-        if (cups_read(r->fd, &byte, 1) < 1)
++        if (!cups_raster_read(r, &byte, 1))
+ 	  return (0);
+ 
+-        r->count = byte + 1;
+-
+-        if (r->count > 1)
+-	  ptr = r->pixels;
+-
+-        temp  = ptr;
+-	bytes = r->header.cupsBytesPerLine;
+-
+-	while (bytes > 0)
++	if (byte & 128)
+ 	{
+ 	 /*
+-	  * Get a new repeat count...
++	  * Copy N literal pixels...
+ 	  */
+ 
+-          if (cups_read(r->fd, &byte, 1) < 1)
+-	    return (0);
+-
+-	  if (byte & 128)
+-	  {
+-	   /*
+-	    * Copy N literal pixels...
+-	    */
++	  count = (257 - byte) * r->bpp;
+ 
+-	    count = (257 - byte) * r->bpp;
++          if (count > bytes)
++	    count = bytes;
+ 
+-            if (count > bytes)
+-	      count = bytes;
++          if (!cups_raster_read(r, temp, count))
++	    return (0);
+ 
+-            if (cups_read(r->fd, temp, count) < count)
+-	      return (0);
++	  temp  += count;
++	  bytes -= count;
++	}
++	else
++	{
++	 /*
++	  * Repeat the next N bytes...
++	  */
+ 
+-	    temp  += count;
+-	    bytes -= count;
+-	  }
+-	  else
+-	  {
+-	   /*
+-	    * Repeat the next N bytes...
+-	    */
++          count = (byte + 1) * r->bpp;
++          if (count > bytes)
++	    count = bytes;
+ 
+-            count = (byte + 1) * r->bpp;
+-            if (count > bytes)
+-	      count = bytes;
++          if (count < r->bpp)
++	    break;
+ 
+-            if (count < r->bpp)
+-	      break;
++	  bytes -= count;
+ 
+-	    bytes -= count;
++          if (!cups_raster_read(r, temp, r->bpp))
++	    return (0);
+ 
+-            if (cups_read(r->fd, temp, r->bpp) < r->bpp)
+-	      return (0);
++	  temp  += r->bpp;
++	  count -= r->bpp;
+ 
++	  while (count > 0)
++	  {
++	    memcpy(temp, temp - r->bpp, r->bpp);
+ 	    temp  += r->bpp;
+ 	    count -= r->bpp;
+-
+-	    while (count > 0)
+-	    {
+-	      memcpy(temp, temp - r->bpp, r->bpp);
+-	      temp  += r->bpp;
+-	      count -= r->bpp;
+-            }
+-	  }
++          }
+ 	}
+       }
+ 
++     /*
++      * Swap bytes as needed...
++      */
++
+       if ((r->header.cupsBitsPerColor == 16 ||
+            r->header.cupsBitsPerPixel == 12 ||
+            r->header.cupsBitsPerPixel == 16) &&
+-          (r->sync == CUPS_RASTER_REVSYNC || r->sync == CUPS_RASTER_REVSYNCv1))
+-      {
+-       /*
+-	* Swap bytes in the pixel data...
+-	*/
+-
+-        unsigned char	*temp;
+-	int		count;
+-
++          r->swapped)
++        cups_swap(ptr, bytes);
+ 
+-        for (temp = ptr, count = r->header.cupsBytesPerLine;
+-	     count > 0;
+-	     temp += 2, count -= 2)
+-	{
+-	  byte    = temp[0];
+-	  temp[0] = temp[1];
+-	  temp[1] = byte;
+-	}
+-      }
++     /*
++      * Update pointers...
++      */
+ 
+-      if (remaining >= r->header.cupsBytesPerLine)
++      if (remaining >= cupsBytesPerLine)
+       {
+-	bytes       = r->header.cupsBytesPerLine;
++	bytes       = cupsBytesPerLine;
+         r->pcurrent = r->pixels;
+ 	r->count --;
+ 	r->remaining --;
+@@ -389,6 +422,10 @@
+         r->pcurrent = r->pixels + bytes;
+       }
+ 
++     /*
++      * Copy data as needed...
++      */
++
+       if (ptr != p)
+         memcpy(p, ptr, bytes);
+     }
+@@ -494,10 +531,6 @@
+                       unsigned char *p,	/* I - Bytes to write */
+ 		      unsigned      len)/* I - Number of bytes to write */
+ {
+-  int		bytes;			/* Bytes read */
+-  unsigned	remaining;		/* Bytes remaining */
+-
+-
+ #ifdef DEBUG
+   fprintf(stderr, "cupsRasterWritePixels(r=%p, p=%p, len=%u), remaining=%u\n",
+           r, p, len, r->remaining);
+@@ -506,99 +539,13 @@
+   if (r == NULL || r->mode != CUPS_RASTER_WRITE || r->remaining == 0)
+     return (0);
+ 
+-  for (remaining = len; remaining > 0; remaining -= bytes, p += bytes)
+-
+-  {
+-   /*
+-    * Figure out the number of remaining bytes on the current line...
+-    */
+-
+-    if ((bytes = remaining) > (r->pend - r->pcurrent))
+-      bytes = r->pend - r->pcurrent;
+-
+-    if (r->count > 0)
+-    {
+-     /*
+-      * Check to see if this line is the same as the previous line...
+-      */
+-
+-      if (memcmp(p, r->pcurrent, bytes))
+-      {
+-        if (!cups_raster_write(r))
+-	  return (0);
+-
+-	r->count = 0;
+-      }
+-      else
+-      {
+-       /*
+-        * Mark more bytes as the same...
+-	*/
+-
+-        r->pcurrent += bytes;
+-
+-	if (r->pcurrent >= r->pend)
+-	{
+-	 /*
+-          * Increase the repeat count...
+-	  */
+-
+-	  r->count ++;
+-	  r->pcurrent = r->pixels;
+-
+-	 /*
+-          * Flush out this line if it is the last one...
+-	  */
+-
+-	  r->remaining --;
+-
+-	  if (r->remaining == 0)
+-	    return (cups_raster_write(r));
+-	  else if (r->count == 256)
+-	  {
+-	    if (cups_raster_write(r) == 0)
+-	      return (0);
+-
+-	    r->count = 0;
+-	  }
+-	}
+-
+-	continue;
+-      }
+-    }
+-
+-    if (r->count == 0)
+-    {
+-     /*
+-      * Copy the raster data to the buffer...
+-      */
+-
+-      memcpy(r->pcurrent, p, bytes);
+-
+-      r->pcurrent += bytes;
+-
+-      if (r->pcurrent >= r->pend)
+-      {
+-       /*
+-        * Increase the repeat count...
+-	*/
+-
+-	r->count ++;
+-	r->pcurrent = r->pixels;
+-
+-       /*
+-        * Flush out this line if it is the last one...
+-	*/
+-
+-	r->remaining --;
++ /*
++  * No write compression, just write the raster data raw...
++  */
+ 
+-	if (r->remaining == 0)
+-	  return (cups_raster_write(r));
+-      }
+-    }
+-  }
++  r->remaining -= len / r->header.cupsBytesPerLine;
+ 
+-  return (len);
++  return (cups_write(r->fd, p, len));
+ }
+ 
+ 
+@@ -636,14 +583,14 @@
+ 
+   memset(&(r->header), 0, sizeof(r->header));
+ 
+-  if (cups_read(r->fd, (unsigned char *)&(r->header), len) < len)
++  if (cups_raster_read(r, (unsigned char *)&(r->header), len) < len)
+     return (0);
+ 
+  /*
+   * Swap bytes as needed...
+   */
+ 
+-  if (r->sync == CUPS_RASTER_REVSYNC || r->sync == CUPS_RASTER_REVSYNCv1)
++  if (r->swapped)
+     for (len = 81, s = (union swap_s *)&(r->header.AdvanceDistance);
+ 	 len > 0;
+ 	 len --, s ++)
+@@ -660,6 +607,144 @@
+ 
+ 
+ /*
++ * 'cups_raster_read()' - Read through the raster buffer.
++ */
++
++static int				/* O - Number of bytes read */
++cups_raster_read(cups_raster_t *r,	/* I - Raster stream */
++                 unsigned char *buf,	/* I - Buffer */
++                 int           bytes)	/* I - Number of bytes to read */
++{
++  int		count,			/* Number of bytes read */
++		remaining,		/* Remaining bytes in buffer */
++		total;			/* Total bytes read */
++
++
++  DEBUG_printf(("cups_raster_read(r=%p, buf=%p, bytes=%d)\n", r, buf, bytes));
++
++  if (!r->compressed)
++    return (cups_read(r->fd, buf, bytes));
++
++ /*
++  * Allocate a read buffer as needed...
++  */
++
++  count = 2 * r->header.cupsBytesPerLine;
++
++  if (count > r->bufsize)
++  {
++    int offset = r->bufptr - r->buffer;	/* Offset to current start of buffer */
++    int end = r->bufend - r->buffer;	/* Offset to current end of buffer */
++    unsigned char *rptr;		/* Pointer in read buffer */
++
++    if (r->buffer)
++      rptr = realloc(r->buffer, count);
++    else
++      rptr = malloc(count);
++
++    if (!rptr)
++      return (0);
++
++    r->buffer  = rptr;
++    r->bufptr  = rptr + offset;
++    r->bufend  = rptr + end;
++    r->bufsize = count;
++  }
++
++ /*
++  * Loop until we have read everything...
++  */
++
++  for (total = 0, remaining = r->bufend - r->bufptr;
++       total < bytes;
++       total += count, buf += count)
++  {
++    count = bytes - total;
++
++    DEBUG_printf(("count=%d, remaining=%d, buf=%p, bufptr=%p, bufend=%p...\n",
++                  count, remaining, buf, r->bufptr, r->bufend));
++
++    if (remaining == 0)
++    {
++      if (count < 16)
++      {
++       /*
++        * Read into the raster buffer and then copy...
++	*/
++
++        remaining = cups_read(r->fd, r->buffer, r->bufsize);
++	if (remaining <= 0)
++	  return (0);
++
++	r->bufptr = r->buffer;
++	r->bufend = r->buffer + remaining;
++      }
++      else
++      {
++       /*
++        * Read directly into "buf"...
++	*/
++
++	count = cups_read(r->fd, buf, count);
++
++	if (count <= 0)
++	  return (0);
++
++	continue;
++      }
++    }
++
++   /*
++    * Copy bytes from raster buffer to "buf"...
++    */
++
++    if (count > remaining)
++      count = remaining;
++
++    if (count == 1)
++    {
++     /*
++      * Copy 1 byte...
++      */
++
++      *buf = *(r->bufptr)++;
++      remaining --;
++    }
++    else if (count < 128)
++    {
++     /*
++      * Copy up to 127 bytes without using memcpy(); this is
++      * faster because it avoids an extra function call and is
++      * often further optimized by the compiler...
++      */
++
++      unsigned char	*bufptr;	/* Temporary buffer pointer */
++
++
++      remaining -= count;
++
++      for (bufptr = r->bufptr; count > 0; count --, total ++)
++	*buf++ = *bufptr++;
++
++      r->bufptr = bufptr;
++    }
++    else
++    {
++     /*
++      * Use memcpy() for a large read...
++      */
++
++      memcpy(buf, r->bufptr, count);
++      r->bufptr += count;
++      remaining -= count;
++    }
++  }
++
++  return (total);
++}
++
++
++/*
+  * 'cups_raster_update()' - Update the raster header and row count for the
+  *                          current page.
+  */
+@@ -745,159 +830,19 @@
+     r->remaining = r->header.cupsHeight;
+ 
+  /*
+-  * Allocate the read/write buffer...
+-  */
+-
+-  if (r->pixels != NULL)
+-    free(r->pixels);
+-
+-  r->pixels   = calloc(r->header.cupsBytesPerLine, 1);
+-  r->pcurrent = r->pixels;
+-  r->pend     = r->pixels + r->header.cupsBytesPerLine;
+-  r->count    = 0;
+-}
+-
+-
+-/*
+- * 'cups_raster_write()' - Write a row of raster data...
+- */
+-
+-static int				/* O - Number of bytes written */
+-cups_raster_write(cups_raster_t *r)	/* I - Raster stream */
+-{
+-  unsigned char	*start,			/* Start of sequence */
+-		*ptr,			/* Current pointer in sequence */
+-		byte;			/* Byte to write */
+-  int		count;			/* Count */
+-
+-
+-#ifdef DEBUG
+-  fprintf(stderr, "cups_raster_write(r=%p)\n", r);
+-#endif /* DEBUG */
+-
+- /*
+-  * Write the row repeat count...
+-  */
+-
+-  byte = r->count - 1;
+-
+-  if (cups_write(r->fd, &byte, 1) < 1)
+-  {
+-#ifdef DEBUG
+-    fputs("cups_raster_write: Unable to write row repeat count...\n",
+-          stderr);
+-#endif /* DEBUG */
+-
+-    return (0);
+-  }
+-
+- /*
+-  * Write using a modified TIFF "packbits" compression...
++  * Allocate the compression buffer...
+   */
+ 
+-  for (ptr = r->pixels; ptr < r->pend;)
++  if (r->compressed)
+   {
+-    start = ptr;
+-    ptr += r->bpp;
+-
+-    if (ptr == r->pend)
+-    {
+-     /*
+-      * Encode a single pixel at the end...
+-      */
+-
+-      byte = 0;
+-      if (cups_write(r->fd, &byte, 1) < 1)
+-      {
+-#ifdef DEBUG
+-        fputs("cups_raster_write: Unable to write last pixel count...\n", stderr);
+-#endif /* DEBUG */
+-
+-        return (0);
+-      }
+-
+-      if (cups_write(r->fd, start, r->bpp) < r->bpp)
+-      {
+-#ifdef DEBUG
+-        fputs("cups_raster_write: Unable to write last pixel data...\n", stderr);
+-#endif /* DEBUG */
+-
+-        return (0);
+-      }
+-    }
+-    else if (!memcmp(start, ptr, r->bpp))
+-    {
+-     /*
+-      * Encode a sequence of repeating pixels...
+-      */
+-
+-      for (count = 2; count < 128 && ptr < (r->pend - r->bpp); count ++, ptr += r->bpp)
+-        if (memcmp(ptr, ptr + r->bpp, r->bpp) != 0)
+-	  break;
+-
+-      ptr += r->bpp;
+-
+-      byte = count - 1;
+-
+-      if (cups_write(r->fd, &byte, 1) < 1)
+-      {
+-#ifdef DEBUG
+-        fputs("cups_raster_write: Unable to write repeated pixel count...\n", stderr);
+-#endif /* DEBUG */
+-
+-        return (0);
+-      }
+-
+-      if (cups_write(r->fd, start, r->bpp) < r->bpp)
+-      {
+-#ifdef DEBUG
+-        fputs("cups_raster_write: Unable to write repeated pixel data...\n", stderr);
+-#endif /* DEBUG */
+-
+-        return (0);
+-      }
+-    }
+-    else
+-    {
+-     /*
+-      * Encode a sequence of non-repeating pixels...
+-      */
+-
+-      for (count = 1; count < 127 && ptr < (r->pend - r->bpp); count ++, ptr += r->bpp)
+-        if (!memcmp(ptr, ptr + r->bpp, r->bpp))
+-	  break;
+-
+-      if (ptr >= (r->pend - r->bpp) && count < 128)
+-      {
+-        count ++;
+-	ptr += r->bpp;
+-      }
+- 
+-      byte = 257 - count;
+-
+-      if (cups_write(r->fd, &byte, 1) < 1)
+-      {
+-#ifdef DEBUG
+-        fputs("cups_raster_write: Unable to write non-repeating pixel count...\n", stderr);
+-#endif /* DEBUG */
+-
+-        return (0);
+-      }
+-
+-      count *= r->bpp;
+-
+-      if (cups_write(r->fd, start, count) < count)
+-      {
+-#ifdef DEBUG
+-        fputs("cups_raster_write: Unable to write non-repeating pixel data...\n", stderr);
+-#endif /* DEBUG */
++    if (r->pixels != NULL)
++      free(r->pixels);
+ 
+-        return (0);
+-      }
+-    }
++    r->pixels   = calloc(r->header.cupsBytesPerLine, 1);
++    r->pcurrent = r->pixels;
++    r->pend     = r->pixels + r->header.cupsBytesPerLine;
++    r->count    = 0;
+   }
+-
+-  return (r->header.cupsBytesPerLine);
+ }
+ 
+ 
+@@ -934,6 +879,32 @@
+ 
+ 
+ /*
++ * 'cups_swap()' - Swap bytes in raster data...
++ */
++
++static void
++cups_swap(unsigned char *buf,		/* I - Buffer to swap */
++          int           bytes)		/* I - Number of bytes to swap */
++{
++  unsigned char	even, odd;		/* Temporary variables */
++
++
++  bytes /= 2;
++
++  while (bytes > 0)
++  {
++    even   = buf[0];
++    odd    = buf[1];
++    buf[0] = odd;
++    buf[1] = even;
++
++    buf += 2;
++    bytes --;
++  }
++}
++
++
++/*
+  * 'cups_write()' - Write bytes to a file.
+  */
+ 
+diff -urNad cupsys-1.2.1~/filter/raster.h cupsys-1.2.1/filter/raster.h
+--- cupsys-1.2.1~/filter/raster.h	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/filter/raster.h	2006-07-19 00:40:14.000000000 +0000
+@@ -60,12 +60,15 @@
+  * Constants...
+  */
+ 
+-#  define CUPS_RASTER_SYNC	0x52615332	/* RaS2 */
+-#  define CUPS_RASTER_REVSYNC	0x32536152	/* 2SaR */
++#  define CUPS_RASTER_SYNC	0x52615333	/* RaS3 */
++#  define CUPS_RASTER_REVSYNC	0x33536152	/* 3SaR */
+ 
+ #  define CUPS_RASTER_SYNCv1	0x52615374	/* RaSt */
+ #  define CUPS_RASTER_REVSYNCv1	0x74536152	/* tSaR */
+ 
++#  define CUPS_RASTER_SYNCv2	0x52615332	/* RaS2 */
++#  define CUPS_RASTER_REVSYNCv2	0x32536152	/* 2SaR */
++
+ 
+ /*
+  * The following definition can be used to determine if the
+diff -urNad cupsys-1.2.1~/filter/rasterbench.c cupsys-1.2.1/filter/rasterbench.c
+--- cupsys-1.2.1~/filter/rasterbench.c	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/filter/rasterbench.c	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1,355 @@
++/*
++ * "$Id$"
++ *
++ *   Raster benchmark program for the Common UNIX Printing System (CUPS).
++ *
++ *   Copyright 1997-2006 by Easy Software Products.
++ *
++ *   These coded instructions, statements, and computer programs are the
++ *   property of Easy Software Products and are protected by Federal
++ *   copyright law.  Distribution and use rights for the CUPS Raster source
++ *   files are outlined in the GNU Library General Public License, located
++ *   in the "pstoraster" directory.  If this file is missing or damaged
++ *   please contact Easy Software Products at:
++ *
++ *       Attn: CUPS Licensing Information
++ *       Easy Software Products
++ *       44141 Airport View Drive, Suite 204
++ *       Hollywood, Maryland 20636 USA
++ *
++ *       Voice: (301) 373-9600
++ *       EMail: cups-info at cups.org
++ *         WWW: http://www.cups.org
++ *
++ *   This code and any derivative of it may be used and distributed
++ *   freely under the terms of the GNU General Public License when
++ *   used with GNU Ghostscript or its derivatives.  Use of the code
++ *   (or any derivative of it) with software other than GNU
++ *   GhostScript (or its derivatives) is governed by the CUPS license
++ *   agreement.
++ *
++ *   This file is subject to the Apple OS-Developed Software exception.
++ *
++ * Contents:
++ *
++ *   main()           - Benchmark the raster read/write functions.
++ *   compute_median() - Compute the median time for a test.
++ *   read_test()      - Benchmark the raster read functions.
++ *   write_test()     - Benchmark the raster write functions.
++ */
++
++/*
++ * Include necessary headers...
++ */
++
++#include "raster.h"
++#include <stdlib.h>
++#include <sys/time.h>
++#include <signal.h>
++#include <unistd.h>
++#include <sys/wait.h>
++
++
++/*
++ * Constants...
++ */
++
++#define TEST_WIDTH	1024
++#define TEST_HEIGHT	1024
++#define TEST_PAGES	16
++#define TEST_PASSES	20
++
++
++/*
++ * Local functions...
++ */
++
++static double	compute_median(double *secs);
++static double	get_time(void);
++static void	read_test(int fd);
++static int	run_read_test(void);
++static void	write_test(int fd);
++
++
++/*
++ * 'main()' - Benchmark the raster read/write functions.
++ */
++
++int					/* O - Exit status */
++main(void)
++{
++  int		i;			/* Looping var */
++  int		ras_fd,			/* File descriptor for read process */
++		status;			/* Exit status of read process */
++  double	start_secs,		/* Start time */
++		write_secs,		/* Write time */
++		read_secs,		/* Read time */
++		pass_secs[TEST_PASSES];	/* Total test times */
++
++
++ /*
++  * Ignore SIGPIPE...
++  */
++
++  signal(SIGPIPE, SIG_IGN);
++
++ /*
++  * Run the tests several times to get a good average...
++  */
++
++  printf("Test read/write speed of %d pages, %dx%d pixels...\n\n",
++         TEST_PAGES, TEST_WIDTH, TEST_HEIGHT);
++  for (i = 0; i < TEST_PASSES; i ++)
++  {
++    printf("PASS %2d: ", i + 1);
++    fflush(stdout);
++
++    ras_fd     = run_read_test();
++    start_secs = get_time();
++
++    write_test(ras_fd);
++
++    write_secs = get_time();
++    printf(" %.3f write,", write_secs - start_secs);
++    fflush(stdout);
++
++    close(ras_fd);
++    wait(&status);
++
++    read_secs    = get_time();
++    pass_secs[i] = read_secs - start_secs;
++    printf(" %.3f read, %.3f total\n", read_secs - write_secs, pass_secs[i]);
++  }
++
++  printf("\nMedian Total Time: %.3f seconds per document\n",
++         compute_median(pass_secs));
++
++  return (0);
++}
++
++
++/*
++ * 'compute_median()' - Compute the median time for a test.
++ */
++
++static double				/* O - Median time in seconds */
++compute_median(double *secs)		/* I - Array of time samples */
++{
++  int		i, j;			/* Looping vars */
++  double	temp;			/* Swap variable */
++
++
++ /*
++  * Sort the array into ascending order using a quicky bubble sort...
++  */
++
++  for (i = 0; i < (TEST_PASSES - 1); i ++)
++    for (j = i + 1; j < TEST_PASSES; j ++)
++      if (secs[i] > secs[j])
++      {
++        temp    = secs[i];
++	secs[i] = secs[j];
++	secs[j] = temp;
++      }
++
++ /*
++  * Return the average of the middle two samples...
++  */
++
++  return (0.5 * (secs[TEST_PASSES / 2 - 1] + secs[TEST_PASSES / 2]));
++}
++
++
++/*
++ * 'get_time()' - Get the current time in seconds.
++ */
++
++static double				/* O - Time in seconds */
++get_time(void)
++{
++  struct timeval	curtime;	/* Current time */
++
++
++  gettimeofday(&curtime, NULL);
++  return (curtime.tv_sec + 0.000001 * curtime.tv_usec);
++}
++
++
++/*
++ * 'read_test()' - Benchmark the raster read functions.
++ */
++
++static void
++read_test(int fd)			/* I - File descriptor to read from */
++{
++  int			y;		/* Looping var */
++  cups_raster_t		*r;		/* Raster stream */
++  cups_page_header_t	header;		/* Page header */
++  unsigned char		buffer[8 * TEST_WIDTH];
++					/* Read buffer */
++
++
++ /*
++  * Test read speed...
++  */
++
++  if ((r = cupsRasterOpen(fd, CUPS_RASTER_READ)) == NULL)
++  {
++    perror("Unable to create raster input stream");
++    return;
++  }
++
++  while (cupsRasterReadHeader(r, &header))
++  {
++    for (y = 0; y < header.cupsHeight; y ++)
++      cupsRasterReadPixels(r, buffer, header.cupsBytesPerLine);
++  }
++
++  cupsRasterClose(r);
++}
++
++
++/*
++ * 'run_read_test()' - Run the read test as a child process via pipes.
++ */
++
++static int				/* O - Standard input of child */
++run_read_test(void)
++{
++  int	ras_pipes[2];			/* Raster data pipes */
++  int	pid;				/* Child process ID */
++
++
++  if (pipe(ras_pipes))
++    return (-1);
++
++  if ((pid = fork()) < 0)
++  {
++   /*
++    * Fork error - return -1 on error...
++    */
++
++    close(ras_pipes[0]);
++    close(ras_pipes[1]);
++
++    return (-1);
++  }
++  else if (pid == 0)
++  {
++   /*
++    * Child comes here - read data from the input pipe...
++    */
++
++    close(ras_pipes[1]);
++    read_test(ras_pipes[0]);
++    exit(0);
++  }
++  else
++  {
++   /*
++    * Parent comes here - return the output pipe...
++    */
++
++    close(ras_pipes[0]);
++    return (ras_pipes[1]);
++  }
++}
++
++
++/*
++ * 'write_test()' - Benchmark the raster write functions.
++ */
++
++static void
++write_test(int fd)			/* I - File descriptor to write to */
++{
++  int			page, x, y;	/* Looping vars */
++  int			count;		/* Number of bytes to set */
++  cups_raster_t		*r;		/* Raster stream */
++  cups_page_header_t	header;		/* Page header */
++  unsigned char		data[32][8 * TEST_WIDTH];
++					/* Raster data to write */
++
++
++ /*
++  * Create a combination of random data and repeated data to simulate
++  * text with some whitespace.
++  */
++
++  srand(time(NULL));
++
++  memset(data, 0, sizeof(data));
++
++  for (y = 0; y < 28; y ++)
++  {
++    for (x = rand() & 127, count = (rand() & 15) + 1;
++         x < sizeof(data[0]);
++         x ++, count --)
++    {
++      if (count <= 0)
++      {
++	x     += (rand() & 15) + 1;
++	count = (rand() & 15) + 1;
++
++        if (x >= sizeof(data[0]))
++	  break;
++      }
++
++      data[y][x] = rand();
++    }
++  }
++
++ /*
++  * Test write speed...
++  */
++
++  if ((r = cupsRasterOpen(fd, CUPS_RASTER_WRITE)) == NULL)
++  {
++    perror("Unable to create raster output stream");
++    return;
++  }
++
++  for (page = 0; page < TEST_PAGES; page ++)
++  {
++    memset(&header, 0, sizeof(header));
++    header.cupsWidth        = TEST_WIDTH;
++    header.cupsHeight       = TEST_HEIGHT;
++    header.cupsBytesPerLine = TEST_WIDTH;
++
++    if (page & 1)
++    {
++      header.cupsBytesPerLine *= 4;
++      header.cupsColorSpace = CUPS_CSPACE_CMYK;
++      header.cupsColorOrder = CUPS_ORDER_CHUNKED;
++    }
++    else
++    {
++      header.cupsColorSpace = CUPS_CSPACE_K;
++      header.cupsColorOrder = CUPS_ORDER_BANDED;
++    }
++
++    if (page & 2)
++    {
++      header.cupsBytesPerLine *= 2;
++      header.cupsBitsPerColor = 16;
++      header.cupsBitsPerPixel = (page & 1) ? 64 : 16;
++    }
++    else
++    {
++      header.cupsBitsPerColor = 8;
++      header.cupsBitsPerPixel = (page & 1) ? 32 : 8;
++    }
++
++    cupsRasterWriteHeader(r, &header);
++
++    for (y = 0; y < TEST_HEIGHT; y ++)
++      cupsRasterWritePixels(r, data[y & 31], header.cupsBytesPerLine);
++  }
++
++  cupsRasterClose(r);
++}
++
++
++/*
++ * End of "$Id$".
++ */
+diff -urNad cupsys-1.2.1~/filter/rastertolabel.c cupsys-1.2.1/filter/rastertolabel.c
+--- cupsys-1.2.1~/filter/rastertolabel.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/filter/rastertolabel.c	2006-07-19 00:40:14.000000000 +0000
+@@ -352,6 +352,8 @@
+         printf("! 0 %u %u %u %u\r\n", header->HWResolution[0],
+ 	       header->HWResolution[1], header->cupsHeight,
+ 	       header->NumCopies);
++	printf("PAGE-WIDTH %d\r\n", header->cupsWidth);
++	printf("PAGE-HEIGHT %d\r\n", header->cupsWidth);
+         break;
+   }
+ 
+@@ -588,7 +590,10 @@
+         * Print the label...
+ 	*/
+ 
+-        puts("FORM\r");
++	if ((choice = ppdFindMarkedChoice(ppd, "zeMediaTracking")) == NULL ||
++	    strcmp(choice->choice, "Continuous"))
++          puts("FORM\r");
++
+ 	puts("PRINT\r");
+ 	break;
+   }
+@@ -647,7 +652,7 @@
+ {
+   int		i;			/* Looping var */
+   unsigned char	*ptr;			/* Pointer into buffer */
+-  char		*compptr;		/* Pointer into compression buffer */
++  unsigned char	*compptr;		/* Pointer into compression buffer */
+   char		repeat_char;		/* Repeated character */
+   int		repeat_count;		/* Number of repeated characters */
+   static const char *hex = "0123456789ABCDEF";
+diff -urNad cupsys-1.2.1~/locale/Makefile cupsys-1.2.1/locale/Makefile
+--- cupsys-1.2.1~/locale/Makefile	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/locale/Makefile	2006-07-19 00:40:14.000000000 +0000
+@@ -51,7 +51,9 @@
+ # Install files...
+ #
+ 
+-install:	all
++install:	all $(INSTALL_LANGUAGES)
++
++install-languages:
+ 	$(INSTALL_DIR) -m 755 $(LOCALEDIR)
+ 	for loc in $(LANGUAGES) ; do \
+ 		if test -f cups_$$loc.po; then \
+@@ -65,12 +67,12 @@
+ # Uninstall files...
+ #
+ 
+-uninstall:
++uninstall: $(UNINSTALL_LANGUAGES)
++
++uninstall-languages:
+ 	-for loc in $(LANGUAGES) ; do \
+ 		$(RM) $(LOCALEDIR)/$$loc/cups_$$loc.po ; \
+-		$(RMDIR) $(LOCALEDIR)/$$loc ; \
+ 	done
+-	-$(RMDIR) $(LOCALEDIR)
+ 
+ 
+ #
+diff -urNad cupsys-1.2.1~/locale/cups_de.po cupsys-1.2.1/locale/cups_de.po
+--- cupsys-1.2.1~/locale/cups_de.po	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/locale/cups_de.po	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1,2821 @@
++#
++# "$Id$"
++#
++#   Message catalog template for the Common UNIX Printing System (CUPS).
++#
++#   Copyright 2005-2006 by Easy Software Products.
++#
++#   These coded instructions, statements, and computer programs are the
++#   property of Easy Software Products and are protected by Federal
++#   copyright law.  Distribution and use rights are outlined in the file
++#   "LICENSE.txt" which should have been included with this file.  If this
++#   file is missing or damaged please contact Easy Software Products
++#   at:
++#
++#       Attn: CUPS Licensing Information
++#       Easy Software Products
++#       44141 Airport View Drive, Suite 204
++#       Hollywood, Maryland 20636 USA
++#
++#       Voice: (301) 373-9600
++#       EMail: cups-info at cups.org
++#         WWW: http://www.cups.org
++#
++msgid ""
++msgstr ""
++"Project-Id-Version: CUPS 1.2\n"
++"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
++"POT-Creation-Date: 2006-04-14 14:35-0400\n"
++"PO-Revision-Date: 2006-07-17 19:55+0200\n"
++"Last-Translator: Bernd Krumböck <b.krumboeck at rewe-group.at>\n"
++"Language-Team: Deutsch\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++
++msgid "Options Installed"
++msgstr "Installierte Optionen"
++
++msgid "Class"
++msgstr "Klasse"
++
++msgid "Printer"
++msgstr "Drucker"
++
++msgid "Extra"
++msgstr "Extra"
++
++msgid "General"
++msgstr "Allgemein"
++
++msgid "Media Size"
++msgstr "Mediengröße"
++
++msgid "Media Type"
++msgstr "Medientyp"
++
++msgid "Media Source"
++msgstr "Medienquelle"
++
++msgid "Output Mode"
++msgstr "Ausgabemodus"
++
++msgid "Resolution"
++msgstr "Auflösung"
++
++msgid "Variable"
++msgstr "Variable"
++
++msgid "Yes"
++msgstr "Ja"
++
++msgid "No"
++msgstr "Nein"
++
++msgid "Auto"
++msgstr "Automatisch"
++
++msgid "Enter your username and password or the root username and password to access this page."
++msgstr "Für Zugang Benutzername und Passwort (oder Benutzername und Password für root) eingeben."
++
++msgid "You must use a https: URL to access this page."
++msgstr "Eine https:-URL ist für den Zugriff erforderlich."
++
++#, c-format
++msgid "Bad request version number %d.%d!"
++msgstr "Ungültige Versionsnummer %d.%d für Abfrage!"
++
++msgid "No attributes in request!"
++msgstr "Abfrage enthält keine Eigenschaften!"
++
++#, c-format
++msgid "Attribute groups are out of order (%x < %x)!"
++msgstr "Eigenschaftsgruppen haben falsche Reihenfolge (%x<%x)!"
++
++msgid "Missing required attributes!"
++msgstr "Benötigte Eigenschaften fehlen!"
++
++#, c-format
++msgid "%s not supported!"
++msgstr "%s nicht unterstützt!"
++
++msgid "The printer or class was not found."
++msgstr "Drucker oder Klasse nicht gefunden."
++
++msgid "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"."
++msgstr "Die printer-uri muss in der Form \"ipp://HOSTNAME/classes/KLASSENNAME\" sein."
++
++#, c-format
++msgid "The printer-uri \"%s\" contains invalid characters."
++msgstr "Die printer-uri \"%s\" enthält ungültige Zeichen."
++
++#, c-format
++msgid "A printer named \"%s\" already exists!"
++msgstr "Ein Drucker mit dem Namen \"%s\" existiert bereits!"
++
++#, c-format
++msgid "Attempt to set %s printer-state to bad value %d!"
++msgstr "Versuch den %s printer-state auf ungültigen Wert %d zu setzen!"
++
++#, c-format
++msgid "add_class: Unknown printer-op-policy \"%s\"."
++msgstr "add_class: Unbekannte printer-op-policy \"%s\"."
++
++#, c-format
++msgid "add_class: Unknown printer-error-policy \"%s\"."
++msgstr "add_class: Unbekannte printer-error-policy \"%s\"."
++
++msgid "Unable to allocate memory for file types!"
++msgstr "Speicherreservierung für Dateitypen fehlgeschlagen!"
++
++#, c-format
++msgid "Character set \"%s\" not supported!"
++msgstr "Zeichensatz \"%s\" nicht unterstützt!"
++
++#, c-format
++msgid "Language \"%s\" not supported!"
++msgstr "Sprache \"%s\" nicht unterstützt!"
++
++#, c-format
++msgid "The notify-user-data value is too large (%d > 63 octets)!"
++msgstr "Der Wert von notify-user-data ist zu groß (%d > 63 Oktette)!"
++
++msgid "The notify-lease-duration attribute cannot be used with job subscriptions."
++msgstr "notify-lease-duration kann nicht bei Auftragssubskriptionen verwendet werden."
++
++msgid "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
++msgstr "Die printer-uri muss in der Form \"ipp://HOSTNAME/printers/DRUCKERNAME\" sein."
++
++#, c-format
++msgid "A class named \"%s\" already exists!"
++msgstr "Eine Klasse namens \"%s\" existiert bereits!"
++
++#, c-format
++msgid "File device URIs have been disabled! To enable, see the FileDevice directive in \"%s/cupsd.conf\"."
++msgstr "Ausgabe auf Dateien gesperrt! Gegebenenfalls FileDevice-Einstellung in \"%s/cupsd.conf\" ändern."
++
++#, c-format
++msgid "Bad device-uri \"%s\"!"
++msgstr "Falsche device-uri \"%s\"!"
++
++#, c-format
++msgid "Bad port-monitor \"%s\"!"
++msgstr "Falscher port-monitor \"%s\"!"
++
++#, c-format
++msgid "Bad printer-state value %d!"
++msgstr "Falscher printer-state Wert %d!"
++
++#, c-format
++msgid "Unknown printer-op-policy \"%s\"."
++msgstr "Unbekannte printer-op-policy \"%s\"."
++
++#, c-format
++msgid "Unknown printer-error-policy \"%s\"."
++msgstr "Unbekannte printer-error-policy \"%s\"."
++
++#, c-format
++msgid "Unable to copy interface script - %s!"
++msgstr "Interface Skript konnte nicht kopiert werden - %s!"
++
++#, c-format
++msgid "Unable to copy PPD file - %s!"
++msgstr "PPD Datei konnte nicht kopiert werden - %s!"
++
++msgid "Unable to copy PPD file!"
++msgstr "Kann PPD Datei nicht kopieren!"
++
++msgid "Got a printer-uri attribute but no job-id!"
++msgstr "Eigenschaft der printer-uri ohne job-id erhalten!"
++
++#, c-format
++msgid "Bad job-uri attribute \"%s\"!"
++msgstr "Falsche job-uri Eigenschaft \"%s\"!"
++
++#, c-format
++msgid "Job #%d doesn't exist!"
++msgstr "Auftrag #%d existiert nicht!"
++
++#, c-format
++msgid "Job #%d is not held for authentication!"
++msgstr "Auftrag %d nicht für Authentifizierung angehalten!"
++
++#, c-format
++msgid "You are not authorized to authenticate job #%d owned by \"%s\"!"
++msgstr "Nicht berechtigt den Auftrag #%d von \"%s\" zu authentifizieren!"
++
++msgid "The printer-uri attribute is required!"
++msgstr "Die Eigenschaft printer-uri wird benötigt!"
++
++msgid "Missing requesting-user-name attribute!"
++msgstr "Vermisse die Eigenschaft requesting-user-name!"
++
++#, c-format
++msgid "The printer-uri \"%s\" is not valid."
++msgstr "Die printer-uri \"%s\" ist nicht gültig."
++
++#, c-format
++msgid "No active jobs on %s!"
++msgstr "Keine aktiven Aufträge auf %s!"
++
++#, c-format
++msgid "You are not authorized to delete job #%d owned by \"%s\"!"
++msgstr "Sie sind nicht berechtigt den Auftrag #%d, von \"%s\" zu löschen!"
++
++#, c-format
++msgid "Job #%d is already %s - can't cancel."
++msgstr "Auftrag #%d ist bereits %s - Abbruch unmöglich."
++
++msgid "The printer or class is not shared!"
++msgstr "Drucker oder Klasse ist nicht verteilt!"
++
++#, c-format
++msgid "Destination \"%s\" is not accepting jobs."
++msgstr "Ziel \"%s\" akzeptiert keine Aufträge."
++
++#, c-format
++msgid "Bad copies value %d."
++msgstr "Falscher Wert für Kopien: %d."
++
++#, c-format
++msgid "Bad page-ranges values %d-%d."
++msgstr "Falscher page-ranges Wert %d-%d."
++
++msgid "Too many active jobs."
++msgstr "Zu viele aktive Aufträge."
++
++msgid "Quota limit reached."
++msgstr "Kontigentsgrenze erreicht."
++
++#, c-format
++msgid "Unable to add job for destination \"%s\"!"
++msgstr "Kann Auftrag nicht zu Ziel \"%s\" hinzufügen!"
++
++msgid "No subscription attributes in request!"
++msgstr "Keine Subskriptionseigenschaften in der Abfrage!"
++
++msgid "notify-events not specified!"
++msgstr "notify-events nicht festgelegt!"
++
++#, c-format
++msgid "Job %d not found!"
++msgstr "Auftrag %d nicht gefunden!"
++
++msgid "No default printer"
++msgstr "Kein Standarddrucker"
++
++msgid "cups-deviced failed to execute."
++msgstr "cups-deviced konnte nicht ausgeführt werden."
++
++msgid "cups-driverd failed to execute."
++msgstr "cups-driverd konnte nicht ausgeführt werden."
++
++msgid "No destinations added."
++msgstr "Keine Ziele hinzugefügt."
++
++#, c-format
++msgid "notify-subscription-id %d no good!"
++msgstr "notify-subscription-id %d unbrauchbar!"
++
++#, c-format
++msgid "Job #%s does not exist!"
++msgstr "Auftrag #%s existiert nicht!"
++
++#, c-format
++msgid "Job #%d does not exist!"
++msgstr "Auftrag #%d existiert nicht!"
++
++msgid "No subscriptions found."
++msgstr "Keine Subskription gefunden."
++
++#, c-format
++msgid "Not authorized to hold job #%d owned by \"%s\"!"
++msgstr "Nicht berechtigt den Auftrag #%d von \"%s\" aufzuhalten!"
++
++#, c-format
++msgid "Job #%d is finished and cannot be altered!"
++msgstr "Auftrag #%d ist bereits fertig und nicht änderbar!"
++
++#, c-format
++msgid "You are not authorized to move job #%d owned by \"%s\"!"
++msgstr "Nicht berechtigt den Auftrag #%d von \"%s\" zu verschieben!"
++
++msgid "job-printer-uri attribute missing!"
++msgstr "Eigenschaft job-printer-uri fehlt."
++
++#, c-format
++msgid "Unsupported compression \"%s\"!"
++msgstr "Nicht unterstützte Kompression \"%s\"!"
++
++msgid "No file!?!"
++msgstr "Keine Datei!?!"
++
++#, c-format
++msgid "Could not scan type \"%s\"!"
++msgstr "Konnte Typ nicht scannen \"%s\"!"
++
++#, c-format
++msgid "Unsupported format '%s/%s'!"
++msgstr "Nicht unterstütztes Format '%s/%s'!"
++
++msgid "Printer not shared!"
++msgstr "Drucker nicht verteilt!"
++
++#, c-format
++msgid "Too many jobs - %d jobs, max jobs is %d."
++msgstr "Zu viele Aufträge - %d; das Maximum ist %d."
++
++#, c-format
++msgid "Job #%d is not held!"
++msgstr "Auftrag #%d wurde nicht aufgehalten!"
++
++#, c-format
++msgid "You are not authorized to release job id %d owned by \"%s\"!"
++msgstr "Nicht berechtigt den Auftrag mit der ID %d von \"%s\" freizugeben!"
++
++#, c-format
++msgid "Job #%d is not complete!"
++msgstr "Auftrag #%d ist nicht komplett!"
++
++#, c-format
++msgid "Job #%d cannot be restarted - no files!"
++msgstr "Auftrag #%d kann nicht neu gestartet werden - keine Dateien!"
++
++#, c-format
++msgid "You are not authorized to restart job id %d owned by \"%s\"!"
++msgstr "Sie sind nicht berechtigt den Auftrag mit der ID %d von \"%s\" neu zu starten!"
++
++#, c-format
++msgid "You are not authorized to send document for job #%d owned by \"%s\"!"
++msgstr "Sie sind nicht berechtigt ein Dokument für den Auftrag #%d von \"%s\" zu senden!"
++
++#, c-format
++msgid "Bad document-format \"%s\"!"
++msgstr "document-format \"%s\" ist falsch!"
++
++#, c-format
++msgid "You are not authorized to alter job id %d owned by \"%s\"!"
++msgstr "Sie sind nicht berechtigt den Aufrag mit der ID %d von \"%s\" abzuändern."
++
++#, c-format
++msgid "%s cannot be changed."
++msgstr "%s kann nicht geändert werden."
++
++msgid "Bad job-priority value!"
++msgstr "Falscher job-priority Wert!"
++
++msgid "Job is completed and cannot be changed."
++msgstr "Auftrag abgeschlossen, kann nicht geändert werden."
++
++msgid "Bad job-state value!"
++msgstr "Falscher job-state Wert!"
++
++msgid "Job state cannot be changed."
++msgstr "Auftragsstatus kann nicht geändert werden."
++
++#, c-format
++msgid "Unsupported compression attribute %s!"
++msgstr "Nicht unterstützte Kompressionseigenschaft %s!"
++
++#, c-format
++msgid "Unsupported format \"%s\"!"
++msgstr "Nicht unterstütztes Format \"%s\"!"
++
++#, c-format
++msgid "%s is not implemented by the CUPS version of lpc.\n"
++msgstr "%s ist in der CUPS Version von lpc nicht implementiert.\n"
++
++msgid ""
++"Commands may be abbreviated.  Commands are:\n"
++"\n"
++"exit    help    quit    status  ?\n"
++msgstr ""
++"Befehle sind abkürzbar.  Befehle sind:\n"
++"\n"
++"exit    help    quit    status  ?\n"
++
++msgid "help\t\tget help on commands\n"
++msgstr "help\t\tum Hilfe für die Befehle zu bekommen\n"
++
++msgid "status\t\tshow status of daemon and queue\n"
++msgstr "status\t\tzeigt den Status von Diensten und Warteschlangen\n"
++
++msgid "?Invalid help command unknown\n"
++msgstr "?Ungültig Hilfebefehl nicht bekannt\n"
++
++#, c-format
++msgid "\tprinter is on device '%s' speed -1\n"
++msgstr "\tDrucker verbunden über '%s' Geschwindigkeit -1\n"
++
++msgid "\tqueuing is enabled\n"
++msgstr "\tWarteschlange ist freigegeben\n"
++
++msgid "\tqueuing is disabled\n"
++msgstr "\tWarteschlange ist gesperrt\n"
++
++msgid "\tprinting is enabled\n"
++msgstr "\tDrucken ist freigegeben\n"
++
++msgid "\tprinting is disabled\n"
++msgstr "\tDrucken ist gesperrt\n"
++
++msgid "\tno entries\n"
++msgstr "\tKeine Einträge\n"
++
++#, c-format
++msgid "\t%d entries\n"
++msgstr "\t%d Einträge\n"
++
++msgid "\tdaemon present\n"
++msgstr "\tDienst läuft\n"
++
++msgid "lpq: Unable to contact server!\n"
++msgstr "lpq: Kann Server nicht kontaktieren!\n"
++
++#, c-format
++msgid "%s: Sorry, no encryption support compiled in!\n"
++msgstr "%s: Bedaure, Verschlüsselungen nicht mitkompiliert!\n"
++
++#, c-format
++msgid "lpq: Unknown destination \"%s/%s\"!\n"
++msgstr "lpq: Unbekanntes Ziel \"%s/%s\"!\n"
++
++#, c-format
++msgid "lpq: Unknown destination \"%s\"!\n"
++msgstr "lpq: Unbekanntes Ziel \"%s\"!\n"
++
++#, c-format
++msgid "lp: error - %s environment variable names non-existent destination \"%s\"!\n"
++msgstr "lp: Fehler - Umgebungsvariable %s enhält nicht vorhandenes Ziel \"%s\"!\n"
++
++msgid "lpq: error - no default destination available.\n"
++msgstr "lpq: Fehler - kein Standardziel verfügbar.\n"
++
++#, c-format
++msgid "lpq: get-jobs failed: %s\n"
++msgstr "lpq: get-jobs fehlgeschlagen: %s\n"
++
++msgid "Rank   Owner      Pri  Job        Files                       Total Size\n"
++msgstr "Rang   Besitzer   Pri  Auftrag    Dateien                     Gesamtgröße\n"
++
++msgid "Rank    Owner   Job     File(s)                         Total Size\n"
++msgstr "Rang    Besitz  Auftrag Datei(en)                       Gesamtgröße\n"
++
++#, c-format
++msgid "%s: %-33.33s [job %d localhost]\n"
++msgstr "%s: %-33.33s [Auftrag %d localhost]\n"
++
++#, c-format
++msgid "        %-39.39s %.0f bytes\n"
++msgstr "        %-39.39s %.0f Byte\n"
++
++#, c-format
++msgid "%-6s %-10.10s %-4d %-10d %-27.27s %.0f bytes\n"
++msgstr "%-6s %-10.10s %-4d %-10d %-27.27s %.0f Byte\n"
++
++#, c-format
++msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes\n"
++msgstr "%-7s %-7.7s %-7d %-31.31s %.0f Byte\n"
++
++msgid "no entries\n"
++msgstr "keine Einträge\n"
++
++#, c-format
++msgid "lpq: get-printer-attributes failed: %s\n"
++msgstr "lpq: get-printer-attributes fehlgeschlagen: %s\n"
++
++#, c-format
++msgid "%s is ready\n"
++msgstr "%s ist bereit\n"
++
++#, c-format
++msgid "%s is ready and printing\n"
++msgstr "%s ist bereit und druckt\n"
++
++#, c-format
++msgid "%s is not ready\n"
++msgstr "%s ist nicht bereit\n"
++
++msgid "Usage: lpq [-P dest] [-l] [+interval]\n"
++msgstr "Benutzung: lpq [-P Ziel] [-l] [+Intervall]\n"
++
++#, c-format
++msgid "lpr: error - expected value after -%c option!\n"
++msgstr "lpr: Fehler - Es wird ein Wert hinter dem Parameter -%c erwartet!\n"
++
++#, c-format
++msgid "lpr: warning - '%c' format modifier not supported - output may not be correct!\n"
++msgstr "lpr: Warnung - Formatangabe '%c' nicht unterstützt - Ausgabe evtl. fehlerhaft!\n"
++
++msgid "lpr: error - expected option=value after -o option!\n"
++msgstr "lpr: Fehler - Erwarte Parameter=Wert hinter dem Parameter -o!\n"
++
++msgid "lpr: warning - email notification is not currently supported!\n"
++msgstr "lpr: Warnung - Email Benachrichtigung wird zurzeit nicht unterstützt!\n"
++
++msgid "lpr: error - expected destination after -P option!\n"
++msgstr "lpr: Fehler - Erwarte Ziel hinter dem Parameter -P!\n"
++
++msgid "lpr: error - expected copy count after -# option!\n"
++msgstr "lpr: Fehler - Erwarte Kopienanzahl hinter dem Parameter -#!\n"
++
++#, c-format
++msgid "lpr: error - expected name after -%c option!\n"
++msgstr "lpr: Fehler - Erwarte Name hinter dem Parameter -%c!\n"
++
++msgid "lpr: error - expected username after -U option!\n"
++msgstr "lpr: Fehler - Erwarte Benutzername hinter dem Parameter -U!\n"
++
++#, c-format
++msgid "lpr: error - unknown option '%c'!\n"
++msgstr "lpr: Fehler - Unbekannter Parameter '%c'!\n"
++
++#, c-format
++msgid "lpr: error - unable to access \"%s\" - %s\n"
++msgstr "lpr: Fehler - Zugriff nicht möglich auf \"%s\" - %s\n"
++
++#, c-format
++msgid "lpr: error - too many files - \"%s\"\n"
++msgstr "lpr: Fehler - Zu viele Dateien \"%s\"\n"
++
++#, c-format
++msgid "lpr: error - %s environment variable names non-existent destination \"%s\"!\n"
++msgstr "lpr: Fehler - Die Umgebungsvariable %s beinhaltet das nicht vorhandene Ziel \"%s\"!\n"
++
++msgid "lpr: error - no default destination available.\n"
++msgstr "lpr: Fehler - Kein Standardziel verfügbar.\n"
++
++msgid "lpr: error - scheduler not responding!\n"
++msgstr "lpr: Fehler - Scheduler antwortet nicht!\n"
++
++#, c-format
++msgid "lpr: error - unable to create temporary file \"%s\" - %s\n"
++msgstr "lpr: Fehler - Kann temporäre Datei \"%s\" nicht erstellen - %s\n"
++
++#, c-format
++msgid "lpr: error - unable to write to temporary file \"%s\" - %s\n"
++msgstr "lpr: Fehler - Kann nicht in die temporäre Datei \"%s\" schreiben - %s\n"
++
++msgid "lpr: error - stdin is empty, so no job has been sent.\n"
++msgstr "lpr: Fehler - stdin ist leer, kein Auftrag gesendet.\n"
++
++#, c-format
++msgid "lpr: error - unable to print file: %s\n"
++msgstr "lpr: Fehler - Kann Datei nicht drucken: %s\n"
++
++msgid "lprm: Unable to contact server!\n"
++msgstr "lprm: Server nicht erreichbar!\n"
++
++#, c-format
++msgid "lprm: Unknown destination \"%s\"!\n"
++msgstr "lprm: Unbekanntes Ziel \"%s\"\n"
++
++#, c-format
++msgid "lprm: Unknown option '%c'!\n"
++msgstr "lprm: Unbekannter Parameter '%c'!\n"
++
++msgid "lprm: Job or printer not found!\n"
++msgstr "lprm: Auftrag oder Drucker nicht gefunden!\n"
++
++msgid "lprm: Not authorized to lprm job(s)!\n"
++msgstr "lprm: Keine Berechtigung um Aufträge zu löschen!\n"
++
++#, c-format
++msgid "lprm: You don't own job ID %d!\n"
++msgstr "lprm: Ihnen gehört die Auftrags ID %d nicht!\n"
++
++msgid "lprm: Unable to lprm job(s)!\n"
++msgstr "lprm: Kann keine Aufträge löschen!\n"
++
++msgid "lprm: Unable to cancel job(s)!\n"
++msgstr "lprm: Kann keine Aufträge abbrechen!\n"
++
++#, c-format
++msgid "%s: Don't know what to do!\n"
++msgstr "%s: Keine Ahnung was zu tun ist!\n"
++
++#, c-format
++msgid "%s: Expected server name after -h!\n"
++msgstr "%s: Servername wird hinter -h erwartet!\n"
++
++#, c-format
++msgid "%s: Expected reason text after -r!\n"
++msgstr "%s: Begründungstext wird hinter -r erwartet!\n"
++
++#, c-format
++msgid "%s: Unknown option '%c'!\n"
++msgstr "%s: Unbekannter Parameter '%c'!\n"
++
++#, c-format
++msgid "%s: Unable to connect to server: %s\n"
++msgstr "%s: Server nicht erreichbar: %s!\n"
++
++#, c-format
++msgid "%s: Operation failed: %s\n"
++msgstr "%s: Vorgang fehlgeschlagen: %s\n"
++
++msgid "cancel: Error - expected hostname after '-h' option!\n"
++msgstr "cancel: Fehler - Erwarte Hostname hinter dem Parameter -h!\n"
++
++msgid "cancel: Error - expected username after '-u' option!\n"
++msgstr "cancel: Fehler - Erwarte Benutzername hinter dem Parameter -u!\n"
++
++#, c-format
++msgid "cancel: Unknown option '%c'!\n"
++msgstr "cancel: Unbekannter Parameter '%c'!\n"
++
++#, c-format
++msgid "cancel: Unknown destination \"%s\"!\n"
++msgstr "cancel: Unbekanntes Ziel \"%s\"!\n"
++
++msgid "cancel: Unable to contact server!\n"
++msgstr "cancel: Server nicht erreichbar!\n"
++
++#, c-format
++msgid "cancel: %s failed: %s\n"
++msgstr "cancel: %s fehlgeschlagen: %s\n"
++
++#, c-format
++msgid "cupsaddsmb: Missing value on line %d!\n"
++msgstr "cupsaddsmb: Vermisse Wert in Zeile %d!\n"
++
++#, c-format
++msgid "cupsaddsmb: Missing double quote on line %d!\n"
++msgstr "cupsaddsmb: Vermisse doppelte Anführungszeichen in Zeile %d!\n"
++
++#, c-format
++msgid "cupsaddsmb: Bad option + choice on line %d!\n"
++msgstr "cupsaddsmb: Falscher Parameter + Auswahl in Zeile %d!\n"
++
++#, c-format
++msgid "cupsaddsmb: Unable to connect to server \"%s\" for %s - %s\n"
++msgstr "cupsaddsmb: Server \"%s\" nicht erreichbar für %s - %s\n"
++
++#, c-format
++msgid "cupsaddsmb: No PPD file for printer \"%s\" - skipping!\n"
++msgstr "cupsaddsmb: PPD Datei für Drucker \"%s\" fehlt - überspringe!\n"
++
++#, c-format
++msgid "cupsaddsmb: get-printer-attributes failed for \"%s\": %s\n"
++msgstr "cupsaddsmb: get-printer-attributes fehlgeschlagen für \"%s\": %s\n"
++
++#, c-format
++msgid "cupsaddsmb: Unable to convert PPD file for %s - %s\n"
++msgstr "cupsaddsmb: Kann PPD Datei nicht konvertieren für %s - %s\n"
++
++#, c-format
++msgid "cupsaddsmb: Unable to copy Windows 2000 printer driver files (%d)!\n"
++msgstr "cupsaddsmb: Kann Windows 2000 Druckertreiberdateien (%d) nicht kopieren!\n"
++
++#, c-format
++msgid "cupsaddsmb: Unable to copy CUPS printer driver files (%d)!\n"
++msgstr "cupsaddsmb: Kann CUPS Druckertreiberdateien (%d) nicht kopieren!\n"
++
++#, c-format
++msgid "cupsaddsmb: Unable to install Windows 2000 printer driver files (%d)!\n"
++msgstr "cupsaddsmb: Kann Windows 2000 Druckertreiberdateien (%d) nicht installieren!\n"
++
++#, c-format
++msgid "cupsaddsmb: Unable to copy Windows 9x printer driver files (%d)!\n"
++msgstr "cupsaddsmb: Kann Windows 9x Druckertreiberdateien (%d) nicht kopieren!\n"
++
++#, c-format
++msgid "cupsaddsmb: Unable to install Windows 9x printer driver files (%d)!\n"
++msgstr "cupsaddsmb: Kann Windows 9x Druckertreiberdateien (%d) nicht installieren!\n"
++
++#, c-format
++msgid "cupsaddsmb: Unable to set Windows printer driver (%d)!\n"
++msgstr "cupsaddsmb: Kann Windows Druckertreiber (%d) nicht festlegen!\n"
++
++msgid ""
++"Usage: cupsaddsmb [options] printer1 ... printerN\n"
++"       cupsaddsmb [options] -a\n"
++"\n"
++"Options:\n"
++"  -H samba-server  Use the named SAMBA server\n"
++"  -U samba-user    Authenticate using the named SAMBA user\n"
++"  -a               Export all printers\n"
++"  -h cups-server   Use the named CUPS server\n"
++"  -v               Be verbose (show commands)\n"
++msgstr ""
++"Benutzung: cupsaddsmb [Parameter] Drucker1 ... DruckerN\n"
++"           cupsaddsmb [Parameter] -a\n"
++"\n"
++"Options:\n"
++"  -H Samba-Server   Benutze den genannten Samba Server\n"
++"  -U Samba-Benutzer Authentifiziere mit dem genannten Samba Benutzer\n"
++"  -a                Alle Drucker exportieren\n"
++"  -h CUPS-Server    Benutze den genannten CUPS Server\n"
++"  -v                Zusätzliche Ausgaben einschalten (zeige Kommandos)\n"
++
++msgid "cupstestppd: The -q option is incompatible with the -v option.\n"
++msgstr "cupstestppd: Der Parameter -q ist nicht kompatibel mit dem Parameter -v.\n"
++
++msgid "cupstestppd: The -v option is incompatible with the -q option.\n"
++msgstr "cupstestppd: Der Parameter -v ist nicht kompatibel mit dem Parameter -d.\n"
++
++#, c-format
++msgid ""
++" FAIL\n"
++"      **FAIL**  Unable to open PPD file - %s\n"
++msgstr ""
++" FEHLGESCHLAGEN\n"
++"      **FEHLGESCHLAGEN**  Kann PPD Datei nicht öffnen - %s\n"
++
++#, c-format
++msgid ""
++" FAIL\n"
++"      **FAIL**  Unable to open PPD file - %s on line %d.\n"
++msgstr ""
++" FEHLGESCHLAGEN\n"
++"      **FEHLGESCHLAGEN**  Kann PPD Datei nicht öffnen - %s in Zeile %d.\n"
++
++msgid "                REF: Page 42, section 5.2.\n"
++msgstr "                REF: Seite 42, Kapitel 5.2.\n"
++
++msgid "                REF: Page 20, section 3.4.\n"
++msgstr "                REF: Seite 20, Kapitel 3.4.\n"
++
++msgid "                REF: Pages 45-46, section 5.2.\n"
++msgstr "                REF: Seite 45-46, Kapitel 5.2.\n"
++
++msgid "                REF: Pages 42-45, section 5.2.\n"
++msgstr "                REF: Seiten 42-45, Kapitel 5.2.\n"
++
++msgid "                REF: Pages 48-49, section 5.2.\n"
++msgstr "                REF: Seiten 48-49, Kapitel 5.2.\n"
++
++msgid "                REF: Pages 52-54, section 5.2.\n"
++msgstr "                REF: Seiten 52-54, Kapitel 5.2.\n"
++
++msgid "                REF: Page 15, section 3.2.\n"
++msgstr "                REF: Seite 15, Kapitel 3.2.\n"
++
++msgid "                REF: Page 15, section 3.1.\n"
++msgstr "                REF: Seite 15, Kapitel 3.1.\n"
++
++msgid "                REF: Pages 16-17, section 3.2.\n"
++msgstr "                REF: Seite 16-17, Kapitel 3.2.\n"
++
++msgid "                REF: Page 19, section 3.3.\n"
++msgstr "                REF: Seite 19, Kapitel 3.3.\n"
++
++msgid "                REF: Page 27, section 3.5.\n"
++msgstr "                REF: Seite 27, Kapitel 3.5.\n"
++
++msgid ""
++"\n"
++"    DETAILED CONFORMANCE TEST RESULTS\n"
++msgstr ""
++"\n"
++"    DETAILIERTE ERGEBNISSE DES KONFORMITÄTSTESTS\n"
++
++#, c-format
++msgid "        WARN    %s has no corresponding options!\n"
++msgstr "        WARNUNG    %s hat keine entsprechenden Parameter!\n"
++
++msgid " FAIL\n"
++msgstr " FEHLGESCHLAGEN\n"
++
++msgid ""
++"      **FAIL**  REQUIRED DefaultImageableArea\n"
++"                REF: Page 102, section 5.15.\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  BENÖTIGT DefaultImageableArea\n"
++"                REF: Seite 102, Kapitel 5.15.\n"
++
++#, c-format
++msgid ""
++"      **FAIL**  BAD DefaultImageableArea %s!\n"
++"                REF: Page 102, section 5.15.\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  FALSCHE DefaultImageableArea %s!\n"
++"                REF: Seite 102, Kapitel 5.15.\n"
++
++msgid "        PASS    DefaultImageableArea\n"
++msgstr "        BESTANDEN    DefaultImageableArea\n"
++
++msgid ""
++"      **FAIL**  REQUIRED DefaultPaperDimension\n"
++"                REF: Page 103, section 5.15.\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  BENÖTIGT DefaultPaperDimension\n"
++"                REF: Seite 103, Kapitel 5.15.\n"
++
++#, c-format
++msgid ""
++"      **FAIL**  BAD DefaultPaperDimension %s!\n"
++"                REF: Page 103, section 5.15.\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  FALSCHE DefaultPaperDimension %s!\n"
++"                REF: Seite 103, Kapitel 5.15.\n"
++
++msgid "        PASS    DefaultPaperDimension\n"
++msgstr "        BESTANDEN    DefaultPaperDimension\n"
++
++#, c-format
++msgid ""
++"      **FAIL**  BAD Default%s %s\n"
++"                REF: Page 40, section 4.5.\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  FALSCHE Default%s %s\n"
++"                REF: Seite 40, Kapitel 4.5.\n"
++
++#, c-format
++msgid "        PASS    Default%s\n"
++msgstr "        BESTANDEN    Default%s\n"
++
++#, c-format
++msgid ""
++"      **FAIL**  REQUIRED Default%s\n"
++"                REF: Page 40, section 4.5.\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  BENÖTIGT Default%s\n"
++"                REF: Seite 40, Kapitel 4.5.\n"
++
++msgid "        PASS    FileVersion\n"
++msgstr "        BESTANDEN    FileVersion\n"
++
++msgid ""
++"      **FAIL**  REQUIRED FileVersion\n"
++"                REF: Page 56, section 5.3.\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  BENÖTIGT FileVersion\n"
++"                REF: Seite 56, Kapitel 5.3.\n"
++
++msgid "        PASS    FormatVersion\n"
++msgstr "        BESTANDEN    FormatVersion\n"
++
++msgid ""
++"      **FAIL**  REQUIRED FormatVersion\n"
++"                REF: Page 56, section 5.3.\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  BENÖTIGT FormatVersion\n"
++"                REF: Seite 56, Kapitel 5.3.\n"
++
++msgid "        PASS    LanguageEncoding\n"
++msgstr "        BESTANDEN    LanguageEncoding\n"
++
++msgid ""
++"      **FAIL**  REQUIRED LanguageEncoding\n"
++"                REF: Pages 56-57, section 5.3.\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  BENÖTIGT LanguageEncoding\n"
++"                REF: Seiten 56-57, Kapitel 5.3.\n"
++
++msgid "        PASS    LanguageVersion\n"
++msgstr "        BESTANDEN    LanguageVersion\n"
++
++msgid ""
++"      **FAIL**  REQUIRED LanguageVersion\n"
++"                REF: Pages 57-58, section 5.3.\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  BENÖTIGT LanguageVersion\n"
++"                REF: Seiten 57-58, Kapitel 5.3.\n"
++
++msgid ""
++"      **FAIL**  BAD Manufacturer (should be \"HP\")\n"
++"                REF: Page 211, table D.1.\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  FALSCHER Manufacturer (sollte \"HP\" sein)\n"
++"                REF: Seite 211, Tabelle D.1.\n"
++
++msgid "        PASS    Manufacturer\n"
++msgstr "        BESTANDEN    Manufacturer\n"
++
++msgid ""
++"      **FAIL**  REQUIRED Manufacturer\n"
++"                REF: Pages 58-59, section 5.3.\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  BENÖTIGT Manufacturer\n"
++"                REF: Seiten 58-59, Kapitel 5.3.\n"
++
++#, c-format
++msgid ""
++"      **FAIL**  BAD ModelName - \"%c\" not allowed in string.\n"
++"                REF: Pages 59-60, section 5.3.\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  FALSCH ModelName - \"%c\" nicht in Zeichenkette erlaubt.\n"
++"                REF: Seiten 59-60, Kapitel 5.3.\n"
++
++msgid "        PASS    ModelName\n"
++msgstr "        BESTANDEN    Modellname\n"
++
++msgid ""
++"      **FAIL**  REQUIRED ModelName\n"
++"                REF: Pages 59-60, section 5.3.\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  BENÖTIGT ModelName\n"
++"                REF: Seiten 59-60, Kapitel 5.3.\n"
++
++# NickName is a PPD term
++msgid "        PASS    NickName\n"
++msgstr "        BESTANDEN    NickName\n"
++
++msgid ""
++"      **FAIL**  REQUIRED NickName\n"
++"                REF: Page 60, section 5.3.\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  BENÖTIGT NickName\n"
++"                REF: Seite 60, Kapitel 5.3.\n"
++
++msgid "        PASS    PageSize\n"
++msgstr "        BESTANDEN    PageSize\n"
++
++msgid ""
++"      **FAIL**  REQUIRED PageSize\n"
++"                REF: Pages 99-100, section 5.14.\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  BENÖTIGT PageSize\n"
++"                REF: Seiten 99-100, Kapitel 5.14.\n"
++
++msgid "        PASS    PageRegion\n"
++msgstr "        BESTANDEN    PageRegion\n"
++
++msgid ""
++"      **FAIL**  REQUIRED PageRegion\n"
++"                REF: Page 100, section 5.14.\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  BENÖTIGT PageRegion\n"
++"                REF: Seite 100, Kapitel 5.14.\n"
++
++msgid "        PASS    PCFileName\n"
++msgstr "        BESTANDEN    PCFileName\n"
++
++msgid ""
++"      **FAIL**  REQUIRED PCFileName\n"
++"                REF: Pages 61-62, section 5.3.\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  BENÖTIGT PCFileName\n"
++"                REF: Seiten 61-62, Kapitel 5.3.\n"
++
++msgid ""
++"      **FAIL**  BAD Product - not \"(string)\".\n"
++"                REF: Page 62, section 5.3.\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  FALSCH Product - ist nicht \"(string)\".\n"
++"                REF: Seite 62, Kapitel 5.3.\n"
++
++msgid "        PASS    Product\n"
++msgstr "        BESTANDEN    Product\n"
++
++msgid ""
++"      **FAIL**  REQUIRED Product\n"
++"                REF: Page 62, section 5.3.\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  BENÖTIGT Product\n"
++"                REF: Seite 62, Kapitel 5.3.\n"
++
++msgid ""
++"      **FAIL**  BAD PSVersion - not \"(string) int\".\n"
++"                REF: Pages 62-64, section 5.3.\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  FALSCH PSVersion - ist nicht \"(string) int\".\n"
++"                REF: Seiten 62-64, Kapitel 5.3.\n"
++
++msgid "        PASS    PSVersion\n"
++msgstr "        BESTANDEN    PSVersion\n"
++
++msgid ""
++"      **FAIL**  REQUIRED PSVersion\n"
++"                REF: Pages 62-64, section 5.3.\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  BENÖTIGT PSVersion\n"
++"                REF: Seiten 62-64, Kapitel 5.3.\n"
++
++msgid ""
++"      **FAIL**  BAD ShortNickName - longer than 31 chars.\n"
++"                REF: Pages 64-65, section 5.3.\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  FALSCH ShortNickName - länger als 31 Zeichen.\n"
++"                REF: Seiten 64-65, Kapitel 5.3.\n"
++
++msgid "        PASS    ShortNickName\n"
++msgstr "        BESTANDEN    ShortNickName\n"
++
++msgid ""
++"      **FAIL**  REQUIRED ShortNickName\n"
++"                REF: Page 64-65, section 5.3.\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  BENÖTIGT ShortNickName\n"
++"                REF: Seiten 64-65, Kapitel 5.3.\n"
++
++msgid ""
++"      **FAIL**  BAD JobPatchFile attribute in file\n"
++"                REF: Page 24, section 3.4.\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  FALSCH JobPatchFile Eigenschaften in Datei\n"
++"                REF: Seiten 24, Kapitel 3.4.\n"
++
++msgid ""
++"      **FAIL**  REQUIRED PageSize\n"
++"                REF: Page 41, section 5.\n"
++"                REF: Page 99, section 5.14.\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  BENÖTIGT PageSize\n"
++"                REF: Seite 41, Kapitel 5.\n"
++"                REF: Seite 99, Kapitel 5.14.\n"
++
++#, c-format
++msgid ""
++"      **FAIL**  REQUIRED ImageableArea for PageSize %s\n"
++"                REF: Page 41, section 5.\n"
++"                REF: Page 102, section 5.15.\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  BENÖTIGT ImageableArea für PageSize %s\n"
++"                REF: Seite 41, Kapitel 5.\n"
++"                REF: Seite 102, Kapitel 5.15.\n"
++
++#, c-format
++msgid ""
++"      **FAIL**  REQUIRED PaperDimension for PageSize %s\n"
++"                REF: Page 41, section 5.\n"
++"                REF: Page 103, section 5.15.\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  BENÖTIGT PaperDimension für PageSize %s\n"
++"                REF: Seite 41, Kapitel 5.\n"
++"                REF: Seite 103, Kapitel 5.15.\n"
++
++#, c-format
++msgid ""
++"      **FAIL**  Bad %s choice %s!\n"
++"                REF: Page 84, section 5.9\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  Falsche %s Auswahl %s!\n"
++"                REF: Seite 84, Kapitel 5.9\n"
++
++#, c-format
++msgid ""
++"      **FAIL**  REQUIRED %s does not define choice None!\n"
++"                REF: Page 122, section 5.17\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  BENÖTIGT %s definiert nicht die Auswahl \"None\"!\n"
++"                REF: Seite 122, Kapitel 5.17\n"
++
++#, c-format
++msgid ""
++"      **FAIL**  Bad %s choice %s!\n"
++"                REF: Page 122, section 5.17\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  Falsche %s Auswahl %s!\n"
++"                REF: Seite 122, Kapitel 5.17\n"
++
++msgid " PASS\n"
++msgstr " BESTANDEN\n"
++
++#, c-format
++msgid ""
++"        WARN    Duplex option keyword %s should be named Duplex or JCLDuplex!\n"
++"                REF: Page 122, section 5.17\n"
++msgstr ""
++"        WARNUNG    Schlüsselwort für Duplexparameter %s sollte Duplex oder JCLDuplex heißen!\n"
++"                REF: Seite 122, Kapitel 5.17\n"
++
++msgid "        WARN    Default choices conflicting!\n"
++msgstr "        WARNUNG    Konflikte in der Standardauswahl!\n"
++
++#, c-format
++msgid ""
++"        WARN    Obsolete PPD version %.1f!\n"
++"                REF: Page 42, section 5.2.\n"
++msgstr ""
++"        WARNUNG    Obsolete PPD Version %.1f!\n"
++"                REF: Seite 42, Kapitel 5.2.\n"
++
++msgid ""
++"        WARN    LanguageEncoding required by PPD 4.3 spec.\n"
++"                REF: Pages 56-57, section 5.3.\n"
++msgstr ""
++"        WARNUNG    LanguageEncoding wird verlangt von PPD 4.3 Spez.\n"
++"                REF: Seiten 56-57, Kapitel 5.3.\n"
++
++msgid ""
++"        WARN    Manufacturer required by PPD 4.3 spec.\n"
++"                REF: Pages 58-59, section 5.3.\n"
++msgstr ""
++"        WARNUNG    Manufacturer wird verlangt von PPD 4.3 Spez.\n"
++"                REF: Seiten 58-59, Kapitel 5.3.\n"
++
++msgid ""
++"        WARN    PCFileName longer than 8.3 in violation of PPD spec.\n"
++"                REF: Pages 61-62, section 5.3.\n"
++msgstr ""
++"        WARNUNG    PCFileName länger als 8.3 ist eine Verletzung der PPD Spez.\n"
++"                REF: Seiten 61-62, Kapitel 5.3.\n"
++
++msgid ""
++"        WARN    ShortNickName required by PPD 4.3 spec.\n"
++"                REF: Pages 64-65, section 5.3.\n"
++msgstr ""
++"        WARNUNG    ShortNickName wird verlangt von PPD 4.3 Spez.\n"
++"                REF: Seiten 64-65, Kapitel 5.3.\n"
++
++msgid ""
++"        WARN    Protocols contains both PJL and BCP; expected TBCP.\n"
++"                REF: Pages 78-79, section 5.7.\n"
++msgstr ""
++"        WARNUNG    Protokoll enthält PJL und BCP; TBCP wird erwartet.\n"
++"                REF: Seiten 78-79, Kapitel 5.7.\n"
++
++msgid ""
++"        WARN    Protocols contains PJL but JCL attributes are not set.\n"
++"                REF: Pages 78-79, section 5.7.\n"
++msgstr ""
++"        WARNUNG    Protokoll enthält PJL jedoch sind keine JCL Eigenschaften gesetzt.\n"
++"                REF: Seiten 78-79, Kapitel 5.7.\n"
++
++#, c-format
++msgid ""
++"        WARN    %s shares a common prefix with %s\n"
++"                REF: Page 15, section 3.2.\n"
++msgstr ""
++"        WARNUNG    %s teilt ein gemeinsames Präfix mit %s\n"
++"                REF: Seite 15, Kapitel 3.2.\n"
++
++#, c-format
++msgid "    %d ERROR%s FOUND\n"
++msgstr "    %d FEHLER%s GEFUNDEN\n"
++
++msgid "    NO ERRORS FOUND\n"
++msgstr "    KEINE FEHLER GEFUNDEN\n"
++
++#, c-format
++msgid ""
++"        WARN    \"%s %s\" conflicts with \"%s %s\"\n"
++"                (constraint=\"%s %s %s %s\")\n"
++msgstr ""
++"        WARNUNG    \"%s %s\" kolidiert mit \"%s %s\"\n"
++"                (Beschränkung=\"%s %s %s %s\")\n"
++
++msgid ""
++"Usage: cupstestppd [-q] [-r] [-v[v]] filename1.ppd[.gz] [... filenameN.ppd[.gz]]\n"
++"       program | cupstestppd [-q] [-r] [-v[v]] -\n"
++msgstr ""
++"Benutzung: cupstestppd [-q] [-r] [-v[v]] Dateiname1.ppd[.gz] [... DateinameN.ppd[.gz]]\n"
++"       Programm | cupstestppd [-q] [-r] [-v[v]] -\n"
++
++msgid "lpstat: Need \"completed\" or \"not-completed\" after -W!\n"
++msgstr "lpstat: Braucht \"completed\" oder \"not-completed\" hinter -W!\n"
++
++msgid "lpstat: The -b option requires a destination argument.\n"
++msgstr "lpstat: Der Parameter -b benötigt ein Zielargument.\n"
++
++msgid "Error: need hostname after '-h' option!\n"
++msgstr "Fehler: Brauche Hostname hinter dem Parameter '-h'!\n"
++
++#, c-format
++msgid "lpstat: Unknown option '%c'!\n"
++msgstr "lpstat: Unbekannter Parameter '%c'!\n"
++
++#, c-format
++msgid "lpstat: Invalid destination name in list \"%s\"!\n"
++msgstr "lpstat: Ungültiger Zielname in der Liste \"%s\"!\n"
++
++#, c-format
++msgid "lpstat: Unknown destination \"%s\"!\n"
++msgstr "lpstat: Unbekanntes Ziel \"%s\"!\n"
++
++#, c-format
++msgid "lpstat: Unable to connect to server %s on port %d: %s\n"
++msgstr "lpstat: Kann Server %s auf Port %d nicht erreichen: %s\n"
++
++#, c-format
++msgid "lpstat: get-printers failed: %s\n"
++msgstr "lpstat: get-printers fehlgeschlagen: %s\n"
++
++#, c-format
++msgid "%s accepting requests since Jan 01 00:00\n"
++msgstr "%s akzeptiert Anfragen seit Jan 01 00:00\n"
++
++#, c-format
++msgid ""
++"%s not accepting requests since Jan 01 00:00 -\n"
++"\t%s\n"
++msgstr ""
++"%s akzeptiert keine Anfragen seit Jan 01 00:00 -\n"
++"\t%s\n"
++
++#, c-format
++msgid "%s/%s accepting requests since Jan 01 00:00\n"
++msgstr "%s/%s akzeptiert Anfragen seit Jan 01 00:00\n"
++
++#, c-format
++msgid ""
++"%s/%s not accepting requests since Jan 01 00:00 -\n"
++"\t%s\n"
++msgstr ""
++"%s/%s akzeptiert keine Anfragen seit Jan 01 00:00 -\n"
++"\t%s\n"
++
++#, c-format
++msgid "lpstat: get-classes failed: %s\n"
++msgstr "lpstat: get-classes fehlgeschlagen: %s\n"
++
++#, c-format
++msgid "members of class %s:\n"
++msgstr "Mitglieder der Klasse %s:\n"
++
++#, c-format
++msgid "system default destination: %s/%s\n"
++msgstr "System Standardziel: %s/%s\n"
++
++#, c-format
++msgid "system default destination: %s\n"
++msgstr "System Standardziel: %s\n"
++
++#, c-format
++msgid "lpstat: error - %s environment variable names non-existent destination \"%s\"!\n"
++msgstr "lpstat: Fehler - Umgebungsvariable %s enthält das nicht vorhandene Ziel \"%s\"!\n"
++
++msgid "no system default destination\n"
++msgstr "Kein systemweites Standardziel\n"
++
++#, c-format
++msgid "Output for printer %s is sent to remote printer %s on %s\n"
++msgstr "Ausgabe für Drucker %s wurde gesendet an entfernten Drucker %s auf %s\n"
++
++#, c-format
++msgid "Output for printer %s is sent to %s\n"
++msgstr "Ausgabe für Drucker %s wurde gesendet an %s\n"
++
++#, c-format
++msgid "Output for printer %s/%s is sent to remote printer %s on %s\n"
++msgstr "Ausgabe für Drucker %s/%s wurde gesendet an entfernten Drucker %s auf %s\n"
++
++#, c-format
++msgid "Output for printer %s/%s is sent to %s\n"
++msgstr "Ausgabe für Drucker %s/%s wurde gesendet an %s\n"
++
++#, c-format
++msgid "device for %s: %s\n"
++msgstr "Gerät für %s: %s\n"
++
++#, c-format
++msgid "device for %s/%s: %s\n"
++msgstr "Gerät für %s/%s: %s\n"
++
++#, c-format
++msgid "lpstat: get-jobs failed: %s\n"
++msgstr "lpstat: get-jobs fehlgeschlagen: %s\n"
++
++#, c-format
++msgid "\tqueued for %s\n"
++msgstr "\teingereiht für %s\n"
++
++#, c-format
++msgid "printer %s is idle.  enabled since %s\n"
++msgstr "Drucker %s ist frei.  freigegeben seit %s\n"
++
++#, c-format
++msgid "printer %s now printing %s-%d.  enabled since %s\n"
++msgstr "Drucker %s druckt gerade %s-%d.  freigegeben seit %s\n"
++
++#, c-format
++msgid "printer %s disabled since %s -\n"
++msgstr "Drucker %s ist gesperrt seit %s -\n"
++
++msgid "\treason unknown\n"
++msgstr "\tGrund unbekannt\n"
++
++msgid ""
++"\tForm mounted:\n"
++"\tContent types: any\n"
++"\tPrinter types: unknown\n"
++msgstr ""
++"\tEingebundenes Formular:\n"
++"\tInhaltstypen: keine\n"
++"\tDruckertypen: unbekannt\n"
++
++#, c-format
++msgid "\tDescription: %s\n"
++msgstr "\tBeschreibung: %s\n"
++
++msgid "\tAlerts:"
++msgstr "\tAlarme:"
++
++#, c-format
++msgid "\tLocation: %s\n"
++msgstr "\tOrt: %s\n"
++
++msgid "\tConnection: remote\n"
++msgstr "\tVerbindung: entfernt\n"
++
++#, c-format
++msgid "\tInterface: %s.ppd\n"
++msgstr "\tInterface: %s.ppd\n"
++
++msgid "\tConnection: direct\n"
++msgstr "\tVerbindung: direkt\n"
++
++#, c-format
++msgid "\tInterface: %s/interfaces/%s\n"
++msgstr "\tInterface: %s/interfaces/%s\n"
++
++#, c-format
++msgid "\tInterface: %s/ppd/%s.ppd\n"
++msgstr "\tInterface: %s/ppd/%s.ppd\n"
++
++msgid "\tOn fault: no alert\n"
++msgstr "\tBei Fehlerfall: kein Alarm\n"
++
++msgid "\tAfter fault: continue\n"
++msgstr "\tNach Fehlerfall: fortsetzen\n"
++
++msgid "\tUsers allowed:\n"
++msgstr "\tErlaubte Benutzer:\n"
++
++msgid "\tUsers denied:\n"
++msgstr "\tNicht erlaubte Benutzer:\n"
++
++msgid "\t\t(all)\n"
++msgstr "\t\t(alle)\n"
++
++msgid "\tForms allowed:\n"
++msgstr "\tErlaubte Formulare:\n"
++
++msgid "\t\t(none)\n"
++msgstr "\t\t(keine)\n"
++
++msgid "\tBanner required\n"
++msgstr "\tBanner benötigt\n"
++
++msgid "\tCharset sets:\n"
++msgstr "\tZeichensatzeinstellungen:\n"
++
++msgid "\tDefault pitch:\n"
++msgstr "\tStandard Zeichenabstand:\n"
++
++msgid "\tDefault page size:\n"
++msgstr "\tStandard Seitengröße:\n"
++
++msgid "\tDefault port settings:\n"
++msgstr "\tStandard Porteinstellungen:\n"
++
++#, c-format
++msgid "printer %s/%s is idle.  enabled since %s\n"
++msgstr "Drucker %s/%s ist frei.  freigegeben seit %s\n"
++
++#, c-format
++msgid "printer %s/%s now printing %s-%d.  enabled since %s\n"
++msgstr "Drucker %s/%s druckt gerade %s-%d.  freigegeben seit %s\n"
++
++#, c-format
++msgid "printer %s/%s disabled since %s -\n"
++msgstr "Drucker %s/%s gesperrt seit %s -\n"
++
++msgid "scheduler is running\n"
++msgstr "Scheduler läuft\n"
++
++msgid "scheduler is not running\n"
++msgstr "Scheduler läuft nicht\n"
++
++#, c-format
++msgid "lpadmin: Unable to connect to server: %s\n"
++msgstr "lpadmin: Kann Server nicht erreichen: %s\n"
++
++msgid ""
++"lpadmin: Unable to add a printer to the class:\n"
++"         You must specify a printer name first!\n"
++msgstr ""
++"lpadmin: Kann Drucker nicht zur Klasse hinzufügen:\n"
++"         Sie müssen zuerst einen Druckernamen angeben!\n"
++
++msgid "lpadmin: Expected class name after '-c' option!\n"
++msgstr "lpadmin: Klassenname wird hinter dem Parameter '-c' erwartet!\n"
++
++msgid "lpadmin: Class name can only contain printable characters!\n"
++msgstr "lpadmin: Klassenname kann nur druckbare Zeichen enthalten!\n"
++
++msgid "lpadmin: Expected printer name after '-d' option!\n"
++msgstr "lpadmin: Druckername wird hinter dem Parameter '-d' erwartet!\n"
++
++msgid "lpadmin: Printer name can only contain printable characters!\n"
++msgstr "lpadmin: Druckername kann nur druckbare Zeichen enthalten!\n"
++
++msgid "lpadmin: Expected hostname after '-h' option!\n"
++msgstr "lpadmin: Hostname wird hinter dem Parameter '-h' erwartet!\n"
++
++msgid ""
++"lpadmin: Unable to set the interface script:\n"
++"         You must specify a printer name first!\n"
++msgstr ""
++"lpadmin: Kann Interface Skript nicht festlegen:\n"
++"         Sie müssen zuerst einen Druckernamen angeben!\n"
++
++msgid "lpadmin: Expected interface after '-i' option!\n"
++msgstr "lpadmin: Interface wird hinter dem Parameter '-i' erwartet!\n"
++
++msgid ""
++"lpadmin: Unable to set the interface script or PPD file:\n"
++"         You must specify a printer name first!\n"
++msgstr ""
++"lpadmin: Kann weder Interface Skript noch PPD Datei setzen:\n"
++"         Sie müssen zuerst einen Druckernamen angeben!\n"
++
++msgid "lpadmin: Expected model after '-m' option!\n"
++msgstr "lpadmin: Modell wird hinter dem Parameter '-m' erwartet!\n"
++
++msgid "lpadmin: Expected name=value after '-o' option!\n"
++msgstr "lpadmin: Name=Wert wird hinter dem Parameter '-o' erwartet!\n"
++
++msgid "lpadmin: Expected printer after '-p' option!\n"
++msgstr "lpadmin: Drucker wird hinter dem Parameter '-p' erwartet!\n"
++
++msgid ""
++"lpadmin: Unable to remove a printer from the class:\n"
++"         You must specify a printer name first!\n"
++msgstr ""
++"lpadmin: Kann Drucker nicht aus Klasse entfernen:\n"
++"         Sie müssen zuerst einen Druckernamen angeben!\n"
++
++msgid "lpadmin: Expected class after '-r' option!\n"
++msgstr "lpadmin: Klasse wird hinter dem Parameter '-r' erwartet!\n"
++
++msgid "lpadmin: Expected allow/deny:userlist after '-u' option!\n"
++msgstr "lpadmin: Benutzerliste für Erlaubt/Verweigert wird nach dem Parameter '-u' erwartet!\n"
++
++#, c-format
++msgid "lpadmin: Unknown allow/deny option \"%s\"!\n"
++msgstr "lpadmin: Unbekannter Erlaubt/Verweigert Parameter \"%s\"!\n"
++
++msgid ""
++"lpadmin: Unable to set the device URI:\n"
++"         You must specify a printer name first!\n"
++msgstr ""
++"lpadmin: Kann Geräte URI nicht setzen:\n"
++"         Sie müssen zuerst einen Druckernamen angeben!\n"
++
++msgid "lpadmin: Expected device URI after '-v' option!\n"
++msgstr "lpadmin: Erwarte Geräte URI hinter dem Parameter '-v'!\n"
++
++msgid "lpadmin: Expected printer or class after '-x' option!\n"
++msgstr "lpadmin: Drucker oder Klasse wird hinter dem Parameter '-x' erwartet!\n"
++
++msgid ""
++"lpadmin: Unable to set the printer description:\n"
++"         You must specify a printer name first!\n"
++msgstr ""
++"lpadmin: Kann Druckerbeschreibung nicht setzen:\n"
++"         Sie müssen zuerst einen Druckernamen angeben!\n"
++
++msgid "lpadmin: Expected description after '-D' option!\n"
++msgstr "lpadmin: Beschreibung wird hinter dem Parameter '-D' erwartet!\n"
++
++msgid "lpadmin: Expected file type(s) after '-I' option!\n"
++msgstr "lpadmin: Dateityp(en) wird bzw. werden hinter dem Parameter '-I' erwartet!\n"
++
++msgid "lpadmin: Warning - content type list ignored!\n"
++msgstr "lpadmin: Warnung - Datentypliste ignoriert!\n"
++
++msgid ""
++"lpadmin: Unable to set the printer location:\n"
++"         You must specify a printer name first!\n"
++msgstr ""
++"lpadmin: Kann Druckeraufstellort nicht setzen:\n"
++"         Sie müssen zuerst einen Druckernamen angeben!\n"
++
++msgid "lpadmin: Expected location after '-L' option!\n"
++msgstr "lpadmin: Ortsangabe wird hinter dem Parameter '-L' erwartet!\n"
++
++msgid ""
++"lpadmin: Unable to set the PPD file:\n"
++"         You must specify a printer name first!\n"
++msgstr ""
++"lpadmin: Kann PPD Datei nicht setzen:\n"
++"         Sie müssen zuerst einen Druckernamen angeben!\n"
++
++msgid "lpadmin: Expected PPD after '-P' option!\n"
++msgstr "lpadmin: PPD wird hinter dem Parameter '-P' erwartet!\n"
++
++#, c-format
++msgid "lpadmin: Unknown option '%c'!\n"
++msgstr "lpadmin: Unbekannter Parameter '%c'!\n"
++
++#, c-format
++msgid "lpadmin: Unknown argument '%s'!\n"
++msgstr "lpadmin: Unbekanntes Argument '%s'!\n"
++
++msgid ""
++"lpadmin: Unable to set the printer options:\n"
++"         You must specify a printer name first!\n"
++msgstr ""
++"lpadmin: Kann Druckereinstellungen nicht setzen:\n"
++"         Sie müssen zuerst einen Druckernamen angeben!\n"
++
++msgid ""
++"Usage:\n"
++"\n"
++"    lpadmin [-h server] -d destination\n"
++"    lpadmin [-h server] -x destination\n"
++"    lpadmin [-h server] -p printer [-c add-class] [-i interface] [-m model]\n"
++"                       [-r remove-class] [-v device] [-D description]\n"
++"                       [-P ppd-file] [-o name=value]\n"
++"                       [-u allow:user,user] [-u deny:user,user]\n"
++"\n"
++msgstr ""
++"Benutzung:\n"
++"\n"
++"    lpadmin [-h Server] -d Ziel\n"
++"    lpadmin [-h Server] -x Ziel\n"
++"    lpadmin [-h Server] -p Drucker [-c hinzuzufügende-Klasse] [-i Interface] [-m Modell]\n"
++"                       [-r zu-löschende-Klasse] [-v Gerät] [-D Beschreibung]\n"
++"                       [-P PPD-Datei] [-o Name=Wert]\n"
++"                       [-u allow:Benutzer,Benutzer] [-u deny:Benutzer,Benutzer]\n"
++"\n"
++
++#, c-format
++msgid "lpadmin: Unable to create temporary file: %s\n"
++msgstr "lpadmin: Kann temporäre Datei nicht erstellen: %s\n"
++
++#, c-format
++msgid "lpadmin: Unable to open file \"%s\": %s\n"
++msgstr "lpadmin: Kann temporäre Datei \"%s\" nicht öffnen: %s\n"
++
++#, c-format
++msgid "lpadmin: add-printer (set model) failed: %s\n"
++msgstr "lpadmin: add-printer (Setzen des Modells) fehlgeschlagen: %s\n"
++
++#, c-format
++msgid "lpadmin: add-printer (set description) failed: %s\n"
++msgstr "lpadmin: Drucker hinzufügen (Setzen der Beschreibung) fehlgeschlagen: %s\n"
++
++#, c-format
++msgid "lpadmin: add-printer (set location) failed: %s\n"
++msgstr "lpadmin: Drucker hinzufügen (Setzen des Ortes) fehlgeschlagen: %s\n"
++
++#, c-format
++msgid "lpadmin: Unable to create temporary file - %s\n"
++msgstr "lpadmin: Kann temporäre Datei nicht erstellen - %s\n"
++
++#, c-format
++msgid "lpadmin: Unable to open PPD file \"%s\" - %s\n"
++msgstr "lpadmin: Kann PPD Datei \"%s\" nicht öffnen - %s\n"
++
++#, c-format
++msgid "lpadmin: %s failed: %s\n"
++msgstr "lpadmin: %s fehlgeschlagen: %s\n"
++
++msgid "lp: Expected destination after -d option!\n"
++msgstr "lp: Ziel wird hinter dem Parameter -d erwartet!\n"
++
++msgid "lp: Expected form after -f option!\n"
++msgstr "lp: Formular wird hinter dem Parameter -f erwartet!\n"
++
++msgid "lp: Expected hostname after -h option!\n"
++msgstr "lp: Hostname wird hinter dem Parameter -h erwartet!\n"
++
++msgid "lp: Expected job ID after -i option!\n"
++msgstr "lp: Auftrags ID wird hinter dem Parameter -i erwartet!\n"
++
++msgid "lp: Error - cannot print files and alter jobs simultaneously!\n"
++msgstr "lp: Fehler - Kann nicht gleichzeitig Dateien drucken und Aufträge abändern!\n"
++
++msgid "lp: Error - bad job ID!\n"
++msgstr "lp: Fehler - Falsche Auftrags ID!\n"
++
++msgid "lp: Expected copies after -n option!\n"
++msgstr "lp: Kopienanzahl wird hinter dem Parameter -n erwartet!\n"
++
++msgid "lp: Expected option string after -o option!\n"
++msgstr "lp: Parameterzeichenkette wird hinter dem Parameter -o erwartet!\n"
++
++#, c-format
++msgid "lp: Expected priority after -%c option!\n"
++msgstr "lp: Priorität wird hinter dem Parameter -%c erwartet!\n"
++
++msgid "lp: Priority must be between 1 and 100.\n"
++msgstr "lp: Priorität muss zwischen 1 und 100 sein.\n"
++
++msgid "lp: Expected title after -t option!\n"
++msgstr "lp: Titel wird hinter dem Parameter -t erwartet!\n"
++
++msgid "lp: Expected mode list after -y option!\n"
++msgstr "lp: Modusliste hinter dem Parameter -y erwartet!\n"
++
++msgid "lp: Warning - mode option ignored!\n"
++msgstr "lp: Warnung - Parameter für Modus ignoriert!\n"
++
++msgid "lp: Expected hold name after -H option!\n"
++msgstr "lp: Haltebezeichner wird hinter dem Parameter -H erwartet!\n"
++
++msgid "lp: Need job ID (-i) before \"-H restart\"!\n"
++msgstr "lp: Brauche Auftrags ID (-i) vor \"-H restart\"!\n"
++
++msgid "lp: Expected page list after -P option!\n"
++msgstr "lp: Seitenliste wird hinter dem Parameter -P erwartet!\n"
++
++msgid "lp: Expected character set after -S option!\n"
++msgstr "lp: Zeichensatz wird hinter dem Parameter -S erwartet!\n"
++
++msgid "lp: Warning - character set option ignored!\n"
++msgstr "lp: Warnung - Parameter für Zeichnsatz wird ignoriert!\n"
++
++msgid "lp: Expected content type after -T option!\n"
++msgstr "lp: Inhaltstyp hinter dem Parameter -T erwartet!\n"
++
++msgid "lp: Warning - content type option ignored!\n"
++msgstr "lp: Warnung - Parameter für Inhaltstyp ignoriert!\n"
++
++#, c-format
++msgid "lp: Unknown option '%c'!\n"
++msgstr "lp: Unbekannter Parameter '%c'!\n"
++
++msgid "lp: Error - cannot print from stdin if files or a job ID are provided!\n"
++msgstr "lp: Fehler - Kann nicht von stdin drucken wenn Dateien oder eine Auftrags ID übergeben wurde!\n"
++
++#, c-format
++msgid "lp: Unable to access \"%s\" - %s\n"
++msgstr "lp: Zugriff auf \"%s\" nicht möglich - %s\n"
++
++#, c-format
++msgid "lp: Too many files - \"%s\"\n"
++msgstr "lp: Zu viele Dateien - \"%s\"\n"
++
++msgid "lp: error - no default destination available.\n"
++msgstr "lp: Fehler - Kein Standardziel vorhanden.\n"
++
++msgid "lp: error - scheduler not responding!\n"
++msgstr "lp: Fehler - Scheduler antwortet nicht!\n"
++
++#, c-format
++msgid "lp: unable to create temporary file \"%s\" - %s\n"
++msgstr "lp: Kann temporäre Datei \"%s\" nicht erstellen - %s\n"
++
++#, c-format
++msgid "lp: error - unable to write to temporary file \"%s\" - %s\n"
++msgstr "lp: Fehler - Kann nicht in temporäre Datei \"%s\" schreiben - %s\n"
++
++msgid "lp: stdin is empty, so no job has been sent.\n"
++msgstr "lp: stdin ist leer, somit wurde kein Auftrag gesendet.\n"
++
++#, c-format
++msgid "lp: unable to print file: %s\n"
++msgstr "lp: Kann Datei nicht drucken: %s\n"
++
++#, c-format
++msgid "request id is %s-%d (%d file(s))\n"
++msgstr "Auftrags ID ist %s-%d (%d Datei(en))\n"
++
++#, c-format
++msgid "lp: restart-job failed: %s\n"
++msgstr "lp: restart-job fehlgeschlagen: %s\n"
++
++#, c-format
++msgid "lp: set-job-attributes failed: %s\n"
++msgstr "lp: set-job-attributes fehlgeschlagen: %s\n"
++
++#, c-format
++msgid "lpinfo: Unable to connect to server: %s\n"
++msgstr "lpinfo: Kann Server nicht erreichen: %s\n"
++
++#, c-format
++msgid "lpinfo: Unknown option '%c'!\n"
++msgstr "lpinfo: Unbekannter Parameter '%c'!\n"
++
++#, c-format
++msgid "lpinfo: Unknown argument '%s'!\n"
++msgstr "lpinfo: Unbekanntes Argument '%s'!\n"
++
++#, c-format
++msgid "lpinfo: cups-get-devices failed: %s\n"
++msgstr "lpinfo: cups-get-devices fehlgeschlagen: %s\n"
++
++#, c-format
++msgid ""
++"Device: uri = %s\n"
++"        class = %s\n"
++"        info = %s\n"
++"        make-and-model = %s\n"
++msgstr ""
++"Gerät: uri = %s\n"
++"       class = %s\n"
++"       info = %s\n"
++"       make-and-model = %s\n"
++
++#, c-format
++msgid "lpinfo: cups-get-ppds failed: %s\n"
++msgstr "lpinfo: cups-get-ppds fehlgeschlagen: %s\n"
++
++#, c-format
++msgid ""
++"Model:  name = %s\n"
++"        natural_language = %s\n"
++"        make-and-model = %s\n"
++msgstr ""
++"Modell:  name = %s\n"
++"         natural_language = %s\n"
++"         make-and-model = %s\n"
++
++#, c-format
++msgid "lpmove: Unknown option '%c'!\n"
++msgstr "lpmove: Unbekannter Parameter '%c'!\n"
++
++#, c-format
++msgid "lpmove: Unknown argument '%s'!\n"
++msgstr "lpmove: Unbekanntes Argument '%s'!\n"
++
++msgid "Usage: lpmove job dest\n"
++msgstr "Benutzung: lpmove Auftrag Ziel\n"
++
++#, c-format
++msgid "lpmove: Unable to connect to server: %s\n"
++msgstr "lpmove: Kann Server nicht erreichen: %s\n"
++
++#, c-format
++msgid "lpmove: move-job failed: %s\n"
++msgstr "lpmove: move-job fehlgeschlagen: %s\n"
++
++msgid "lpoptions: Unknown printer or class!\n"
++msgstr "lpoptions: Unbekannter Drucker oder Klasse!\n"
++
++msgid "lpoptions: No printers!?!\n"
++msgstr "lpoptions: Keine Drucker!?!\n"
++
++#, c-format
++msgid "lpoptions: Unable to add printer or instance: %s\n"
++msgstr "lpoptions: Kann Drucker oder Instanz nicht hinzufügen: %s\n"
++
++#, c-format
++msgid "lpoptions: Destination %s has no PPD file!\n"
++msgstr "lpoptions: Ziel %s hat keine PPD Datei!\n"
++
++#, c-format
++msgid "lpoptions: Unable to open PPD file for %s!\n"
++msgstr "lpoptions: Kann PPD für %s nicht öffnen!\n"
++
++msgid ""
++"Usage: lpoptions [-h server] [-E] -d printer\n"
++"       lpoptions [-h server] [-E] [-p printer] -l\n"
++"       lpoptions [-h server] [-E] -p printer -o option[=value] ...\n"
++"       lpoptions [-h server] [-E] -x printer\n"
++msgstr ""
++"Benutzung: lpoptions [-h Server] [-E] -d Drucker\n"
++"           lpoptions [-h Server] [-E] [-p Drucker] -l\n"
++"           lpoptions [-h Server] [-E] -p Drucker -o Parameter[=Wert] ...\n"
++"           lpoptions [-h Server] [-E] -x Drucker\n"
++
++msgid "lppasswd: Only root can add or delete passwords!\n"
++msgstr "lppasswd: Nur root kann Passwörter hinzufügen oder löschen!\n"
++
++msgid "Enter old password:"
++msgstr "Altes Passwort eingeben:"
++
++#, c-format
++msgid "lppasswd: Unable to copy password string: %s\n"
++msgstr "lppasswd: Kann Passwort nicht kopieren: %s\n"
++
++msgid "Enter password:"
++msgstr "Passwort eingeben:"
++
++msgid "Enter password again:"
++msgstr "Passwort nochmal eingeben:"
++
++msgid "lppasswd: Sorry, passwords don't match!\n"
++msgstr "lppasswd: Bedaure, Passwörter stimmen nicht überein!\n"
++
++msgid ""
++"lppasswd: Sorry, password rejected.\n"
++"Your password must be at least 6 characters long, cannot contain\n"
++"your username, and must contain at least one letter and number.\n"
++msgstr ""
++"lppasswd: Bedaure, Passwort zurückgewiesen.\n"
++"Ihr Passwort muss zumindest 6 Zeichen lang sein, darf nicht den Benutzernamen\n"
++"enthalten, und muss mindestens einen Buchstaben und eine Zahl enthalten.\n"
++
++msgid "lppasswd: Password file busy!\n"
++msgstr "lppasswd: Passwortdatei in Verwendung!\n"
++
++#, c-format
++msgid "lppasswd: Unable to open password file: %s\n"
++msgstr "lppasswd: Kann Passwortdatei nicht öffnen: %s\n"
++
++#, c-format
++msgid "lppasswd: Unable to write to password file: %s\n"
++msgstr "lppasswd: Kann nicht in die Passwortdatei schreiben: %s\n"
++
++#, c-format
++msgid "lppasswd: user \"%s\" and group \"%s\" do not exist.\n"
++msgstr "lppasswd: Benutzer \"%s\" und Gruppe \"%s\" existieren nicht.\n"
++
++msgid "lppasswd: Sorry, password doesn't match!\n"
++msgstr "lppasswd: Bedaure, Passwort stimmt nicht überein!\n"
++
++msgid "lppasswd: Password file not updated!\n"
++msgstr "lppasswd: Passwortdatei wurde nicht aktualisiert!\n"
++
++#, c-format
++msgid "lppasswd: failed to backup old password file: %s\n"
++msgstr "lppasswd: Konnte alte Passwortdatei nicht sichern: %s\n"
++
++#, c-format
++msgid "lppasswd: failed to rename password file: %s\n"
++msgstr "lppasswd: Konnte Passwortdatei nicht umbenennen: %s\n"
++
++msgid "Usage: lppasswd [-g groupname]\n"
++msgstr "Benutzung: lppasswd [-g Gruppenname]\n"
++
++msgid ""
++"Usage: lppasswd [-g groupname] [username]\n"
++"       lppasswd [-g groupname] -a [username]\n"
++"       lppasswd [-g groupname] -x [username]\n"
++msgstr ""
++"Benutzung: lppasswd [-g Gruppenname] [Benutzername]\n"
++"           lppasswd [-g Gruppenname] -a [Benutzername]\n"
++"           lppasswd [-g Gruppenname] -x [Benutzername]\n"
++
++msgid "Start Printer"
++msgstr "Starte Drucker"
++
++msgid "Stop Printer"
++msgstr "Stoppe Drucker"
++
++msgid "Start Class"
++msgstr "Starte Klasse"
++
++msgid "Stop Class"
++msgstr "Stoppe Klasse"
++
++msgid "Accept Jobs"
++msgstr "Akzeptiere Aufträge"
++
++msgid "Reject Jobs"
++msgstr "Aufträge ablehnen"
++
++msgid "Purge Jobs"
++msgstr "Eliminiere Aufträge"
++
++msgid "Set As Default"
++msgstr "Setze als Standard"
++
++msgid "Administration"
++msgstr "Verwaltung"
++
++msgid "Modify Class"
++msgstr "Klasse ändern"
++
++msgid "Add Class"
++msgstr "Klasse hinzufügen"
++
++msgid "The class name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)."
++msgstr "Der Klassenname darf nur bis zu 127 druckbare Zeichen und keine Leerzeichen, Slashes (/), oder das Rautezeichen (#) enthalten."
++
++msgid "Unable to modify class:"
++msgstr "Kann Klasse nicht ändern:"
++
++msgid "Unable to add class:"
++msgstr "Kann Klasse nicht hinzufügen:"
++
++msgid "Modify Printer"
++msgstr "Drucker ändern"
++
++msgid "Add Printer"
++msgstr "Drucker hinzufügen"
++
++msgid "The printer name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)."
++msgstr "Der Druckername darf nur bis zu 127 druckbare Zeichen und keine Leerzeichen, Slashes (/), oder das Rautezeichen (#) enthalten."
++
++msgid "Unable to get list of printer drivers:"
++msgstr "Holen der Druckertreiberliste nicht möglich:"
++
++msgid "Unable to modify printer:"
++msgstr "Kann Drucker nicht ändern:"
++
++msgid "Unable to add printer:"
++msgstr "Kann Drucker nicht hinzufügen:"
++
++msgid "Set Printer Options"
++msgstr "Druckereinstellugen setzen"
++
++msgid "Missing form variable!"
++msgstr "Vermisse Formularvariable!"
++
++msgid "Unable to get PPD file!"
++msgstr "Kann PPD Datei nicht holen!"
++
++msgid "Unable to open PPD file:"
++msgstr "Kann PPD Datei nicht öffnen:"
++
++msgid "Banners"
++msgstr "Banner"
++
++msgid "Starting Banner"
++msgstr "Startbanner"
++
++msgid "Ending Banner"
++msgstr "Endbanner"
++
++msgid "Policies"
++msgstr "Richtlinien"
++
++msgid "Error Policy"
++msgstr "Fehlerrichtlinie"
++
++msgid "Operation Policy"
++msgstr "Betriebsrichtlinie"
++
++msgid "PS Binary Protocol"
++msgstr "PS Binärprotokoll"
++
++msgid "None"
++msgstr "Kein(e)"
++
++msgid "Unable to set options:"
++msgstr "Kann Parameter nicht setzen:"
++
++msgid "Change Settings"
++msgstr "Konfiguration ändern"
++
++msgid "Unable to change server settings:"
++msgstr "Kann Servereinstellungen nicht ändern:"
++
++msgid "Unable to upload cupsd.conf file:"
++msgstr "Kann die Datei cupsd.conf nicht hochladen:"
++
++msgid "Edit Configuration File"
++msgstr "Bearbeite Konfigurationsdatei"
++
++msgid "Unable to create temporary file:"
++msgstr "Kann temporäre Datei nicht erstellen:"
++
++msgid "Unable to access cupsd.conf file:"
++msgstr "Kann auf die Datei cupsd.conf nicht zugreifen:"
++
++msgid "Unable to edit cupsd.conf files larger than 1MB!"
++msgstr "Kann cupsd.conf Dateien größer als 1MB nicht bearbeiten!"
++
++msgid "Delete Class"
++msgstr "Lösche Klasse"
++
++msgid "Unable to delete class:"
++msgstr "Kann Klasse nicht löschen:"
++
++msgid "Delete Printer"
++msgstr "Lösche Drucker"
++
++msgid "Unable to delete printer:"
++msgstr "Kann Drucker nicht löschen:"
++
++msgid "Export Printers to Samba"
++msgstr "Drucker für Samba bereitstellen"
++
++msgid "Unable to fork process!"
++msgstr "Kann Prozess nicht forken!"
++
++msgid "Unable to connect to server!"
++msgstr "Kann Server nicht erreichen!"
++
++msgid "Unable to get printer attributes!"
++msgstr "Kann Druckereigenschaften nicht holen!"
++
++msgid "Unable to convert PPD file!"
++msgstr "Kann PPD Datei nicht konvertieren!"
++
++msgid "Unable to copy Windows 2000 printer driver files!"
++msgstr "Kann Windows 2000 Druckertreiberdateien nicht kopieren!"
++
++msgid "Unable to install Windows 2000 printer driver files!"
++msgstr "Kann Windows 2000 Druckertreiberdateien nicht installieren!"
++
++msgid "Unable to copy Windows 9x printer driver files!"
++msgstr "Kann Windows 9x Druckertreiberdateien nicht kopieren!"
++
++msgid "Unable to install Windows 9x printer driver files!"
++msgstr "Kann Windows 9x Druckertreiberdateien nicht installieren!"
++
++msgid "Unable to set Windows printer driver!"
++msgstr "Kann Windows Druckertreiber nicht festlegen!"
++
++msgid "No printer drivers found!"
++msgstr "Keine Druckertreiber gefunden!"
++
++msgid "Unable to execute cupsaddsmb command!"
++msgstr "Kann Befehl cupsaddsmb nicht ausführen!"
++
++#, c-format
++msgid "cupsaddsmb failed with status %d"
++msgstr "cupsaddsmb fehlgeschlagen mit Status %d"
++
++#, c-format
++msgid "cupsaddsmb crashed on signal %d"
++msgstr "cupsaddsmb abgestürzt mit Signal %d"
++
++msgid "A Samba username is required to export printer drivers!"
++msgstr "Ein Samba Benutzername wird benötigt um Drucker für Samba bereitzustellen!"
++
++msgid "A Samba password is required to export printer drivers!"
++msgstr "Ein Samba Passwort wird benötigt um Druckertreiber bereitzustellen!"
++
++msgid "Unable to open cupsd.conf file:"
++msgstr "Kann die Datei cupsd.conf nicht öffnen:"
++
++msgid "Unable to change printer:"
++msgstr "Kann Drucker nicht ändern:"
++
++msgid "Set Allowed Users"
++msgstr "Erlaubte Benutzer festlegen:"
++
++msgid "Unable to get printer attributes:"
++msgstr "Kann Druckereigenschaften nicht holen:"
++
++msgid "Set Publishing"
++msgstr "Veröffentlichung setzen"
++
++msgid "Unable to change printer-is-shared attribute:"
++msgstr "Kann die Eigenschaft printer-is-shared nicht ändern:"
++
++msgid "Classes"
++msgstr "Klassen"
++
++msgid "Unable to get class list:"
++msgstr "Kann Klassenliste nicht holen:"
++
++msgid "Unable to get class status:"
++msgstr "Kann Klassenstatus nicht holen:"
++
++msgid "Move Job"
++msgstr "Verschiebe Auftrag"
++
++msgid "Unable to find destination for job!"
++msgstr "Kann das Ziel für den Auftrag nicht ermitteln!"
++
++msgid "Move All Jobs"
++msgstr "Verschiebe alle Aufträge"
++
++msgid "Unable to move job"
++msgstr "Kann Auftrag nicht verschieben"
++
++msgid "Unable to move jobs"
++msgstr "Kann Aufträge nicht verschieben"
++
++msgid "Print Test Page"
++msgstr "Drucke Testseite"
++
++msgid "Unable to print test page:"
++msgstr "Kann Testseite nicht drucken:"
++
++msgid "Jobs"
++msgstr "Aufträge"
++
++msgid "Job operation failed:"
++msgstr "Auftragsdurchführung fehlgeschlagen:"
++
++msgid "Printers"
++msgstr "Drucker"
++
++msgid "Unable to get printer list:"
++msgstr "Kann Druckerliste nicht holen:"
++
++msgid "Unable to get printer status:"
++msgstr "Kann Druckerstatus nicht holen:"
++
++msgid "OK"
++msgstr "OK"
++
++msgid "Unable to open PPD file"
++msgstr "Kann PPD Datei nicht öffnen"
++
++msgid "NULL PPD file pointer"
++msgstr "Zeiger für PPD Datei ist NULL"
++
++msgid "Memory allocation error"
++msgstr "Speicherreservierungsfehler"
++
++msgid "Missing PPD-Adobe-4.x header"
++msgstr "Vermisse PPD-Adobe-4.x header"
++
++msgid "Missing value string"
++msgstr "Vermisse Zeichenkette für Wert"
++
++msgid "Internal error"
++msgstr "Interner Fehler"
++
++msgid "Bad OpenGroup"
++msgstr "Falsche OpenGroup-Angabe"
++
++msgid "OpenGroup without a CloseGroup first"
++msgstr "OpenGroup ohne vorheriges CloseGroup"
++
++msgid "Bad OpenUI/JCLOpenUI"
++msgstr "Falsche OpenUI/JCLOpenUI-Angabe"
++
++msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first"
++msgstr "OpenUI/JCLOpenUI ohne vorheriges CloseUI/JCLCloseUI"
++
++msgid "Bad OrderDependency"
++msgstr "Falsche OrderDependency-Angabe"
++
++msgid "Bad UIConstraints"
++msgstr "Falsche UIConstraints-Angabe"
++
++msgid "Missing asterisk in column 1"
++msgstr "Vermisse Stern in Zeile 1"
++
++msgid "Line longer than the maximum allowed (255 characters)"
++msgstr "Zeile ist länger als maximal erlaubt (255 Zeichen)"
++
++msgid "Illegal control character"
++msgstr "Ungültiges Steuerzeichen"
++
++msgid "Illegal main keyword string"
++msgstr "Ungültige Zeichenkette für Hauptschlüsselwort"
++
++msgid "Illegal option keyword string"
++msgstr "Ungültige Zeichenkette für Eigenschafts-Schlüsselwort"
++
++msgid "Illegal translation string"
++msgstr "Ungültige Übersetzungszeichenkette"
++
++# Whitespace. Tab, Space, CR...
++msgid "Illegal whitespace character"
++msgstr "Ungültiges Whitespace-Zeichen"
++
++msgid "Bad custom parameter"
++msgstr "Falscher benutzerspezifischer Parameter"
++
++msgid "Unknown"
++msgstr "Unbekannt"
++
++msgid "Custom"
++msgstr "Benutzerspezifisch"
++
++msgid "JCL"
++msgstr "JCL"
++
++msgid "No authentication information provided!"
++msgstr "Keine Authentifizierungsinformationen übergeben!"
++
++#, c-format
++msgid "Password for %s required to access %s via SAMBA: "
++msgstr "Passwort für %s benötigt um auf %s via SAMBA zugreifen zu können."
++
++#, c-format
++msgid "Running command: %s %s -N -U '%s%%%s' -c '%s'\n"
++msgstr "Befehl wird ausgeführt: %s %s -N -U '%s%%%s' -c '%s'\n"
++
++#, c-format
++msgid "cupsaddsmb: Unable to run \"%s\": %s\n"
++msgstr "cupsaddsmb: Kann \"%s\" nicht ausführen: %s\n"
++
++msgid "cupsaddsmb: No Windows printer drivers are installed!\n"
++msgstr "cupsaddsmb: Keine Windows Druckertreiber installiert!\n"
++
++msgid "cupsaddsmb: Warning, no Windows 2000 printer drivers are installed!\n"
++msgstr "cupsaddsmb: Warnung, keine Windows 2000 Druckertreiber installiert!\n"
++
++#, c-format
++msgid "lpadmin: Printer %s is already a member of class %s.\n"
++msgstr "lpadmin: Drucker %s ist bereits Mitglied der Klasse %s.\n"
++
++msgid "lpadmin: No member names were seen!\n"
++msgstr "lpadmin: Keine Mitgliedernamen gesehen!\n"
++
++#, c-format
++msgid "lpadmin: Printer %s is not a member of class %s.\n"
++msgstr "lpadmin: Drucker %s ist kein Mitglied der Klasse %s.\n"
++
++#, c-format
++msgid ""
++"Device: uri = %s\n"
++"        class = %s\n"
++"        info = %s\n"
++"        make-and-model = %s\n"
++"        device-id = %s\n"
++msgstr ""
++"Gerät: uri = %s\n"
++"        class = %s\n"
++"        info = %s\n"
++"        make-and-model = %s\n"
++"        device-id = %s\n"
++
++#, c-format
++msgid ""
++"Model:  name = %s\n"
++"        natural_language = %s\n"
++"        make-and-model = %s\n"
++"        device-id = %s\n"
++msgstr ""
++"Modell:  Name = %s\n"
++"         natural_language = %s\n"
++"         make-and-model = %s\n"
++"         device-id = %s\n"
++
++msgid "Usage: lpmove job/src dest\n"
++msgstr "Benutzung: lpmove Auftrag/Quelle Ziel\n"
++
++msgid "lpstat: Need \"completed\", \"not-completed\", or \"all\" after -W!\n"
++msgstr "lpstat: Brauche \"completed\", \"not-completed\", oder \"all\" hinter dem Parameter -W!\n"
++
++#, c-format
++msgid "%s accepting requests since %s\n"
++msgstr "%s akzeptiert Anfragen seit %s\n"
++
++#, c-format
++msgid ""
++"%s not accepting requests since %s -\n"
++"\t%s\n"
++msgstr ""
++"%s akzeptiert keine Anfragen seit %s -\n"
++"\t%s\n"
++
++#, c-format
++msgid "%s/%s accepting requests since %s\n"
++msgstr "%s/%s akzeptiert Anfragen seit %s\n"
++
++#, c-format
++msgid ""
++"%s/%s not accepting requests since %s -\n"
++"\t%s\n"
++msgstr ""
++"%s/%s akzeptiert keine Anfragen seit %s -\n"
++"\t%s\n"
++
++msgid "lpc> "
++msgstr "lpc> "
++
++#, c-format
++msgid "%s: Unable to contact server!\n"
++msgstr "%s: Kann Server nicht erreichen!\n"
++
++#, c-format
++msgid "%s: Error - expected username after '-U' option!\n"
++msgstr "%s: Fehler - Benutzername wird hinter dem Parameter '-U' erwartet!\n"
++
++#, c-format
++msgid "%s: Error - unknown destination \"%s/%s\"!\n"
++msgstr "%s: Fehler - Unbekanntes Ziel \"%s/%s\"!\n"
++
++#, c-format
++msgid "%s: Unknown destination \"%s\"!\n"
++msgstr "%s: Unbekanntes Ziel \"%s\"!\n"
++
++#, c-format
++msgid "%s: Error - expected hostname after '-h' option!\n"
++msgstr "%s: Fehler - Hostname wird hinter dem Parameter '-h' erwartet!\n"
++
++#, c-format
++msgid "%s: error - %s environment variable names non-existent destination \"%s\"!\n"
++msgstr "%s: Fehler - Die Umgebungsvariable %s enthält das nicht existierende Ziel \"%s\"!\n"
++
++#, c-format
++msgid "%s: error - no default destination available.\n"
++msgstr "%s: Fehler - Kein Standardziel verfügbar.\n"
++
++msgid "Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]\n"
++msgstr "Benutzung: lpq [-P Ziel] [-U Benutzername] [-h Hostname[:Port]] [-l] [+Intervall]\n"
++
++#, c-format
++msgid "%s: Error - expected hostname after '-H' option!\n"
++msgstr "%s: Fehler - Hostname wird hinter dem Parameter '-H' erwartet!\n"
++
++#, c-format
++msgid "%s: Error - expected value after '-%c' option!\n"
++msgstr "%s: Fehler - Wert wird hinter dem Paramter '-%c' erwartet!\n"
++
++#, c-format
++msgid "%s: Warning - '%c' format modifier not supported - output may not be correct!\n"
++msgstr "%s: Warnung - Formatangabe '%c' nicht unterstützt - Ausgabe ist möglicherweise falsch!\n"
++
++#, c-format
++msgid "%s: error - expected option=value after '-o' option!\n"
++msgstr "%s: Fehler - Parameter=Wert wird hinter dem Parameter '-o' erwartet!\n"
++
++#, c-format
++msgid "%s: Error - expected destination after '-P' option!\n"
++msgstr "%s: Fehler - Ziel wird hinter dem Parameter '-P' erwartet!\n"
++
++#, c-format
++msgid "%s: Error - expected copy count after '-#' option!\n"
++msgstr "%s: Fehler - Kopienanzahl wird hinter dem Parameter '-#' erwartet!\n"
++
++#, c-format
++msgid "%s: Error - expected name after '-%c' option!\n"
++msgstr "%s: Fehler - Name wird hinter dem Paramter '-%c' erwartet!\n"
++
++#, c-format
++msgid "%s: Error - unknown option '%c'!\n"
++msgstr "%s: Fehler - Unbekannter Parameter '%c'!\n"
++
++#, c-format
++msgid "%s: Error - unable to access \"%s\" - %s\n"
++msgstr "%s: Fehler - Kann auf \"%s\" nicht zugreifen - %s\n"
++
++#, c-format
++msgid "%s: Error - too many files - \"%s\"\n"
++msgstr "%s: Fehler - Zu viele Dateien - \"%s\"\n"
++
++#, c-format
++msgid "%s: Error - %s environment variable names non-existent destination \"%s\"!\n"
++msgstr "%s: Fehler - Die Umgebungsvariable %s enthält das nicht existierende Ziel \"%s\"!\n"
++
++#, c-format
++msgid "%s: Error - no default destination available.\n"
++msgstr "%s: Fehler - Kein Standardziel verfügbar.\n"
++
++#, c-format
++msgid "%s: Error - scheduler not responding!\n"
++msgstr "%s: Fehler - Scheduler antwortet nicht!\n"
++
++#, c-format
++msgid "%s: Error - unable to create temporary file \"%s\" - %s\n"
++msgstr "%s: Fehler - Kann die temporäre Datei \"%s\" nicht erzeugen - %s\n"
++
++#, c-format
++msgid "%s: Error - unable to write to temporary file \"%s\" - %s\n"
++msgstr "%s: Fehler - Kann nicht in die temporäre Datei \"%s\" schreiben - %s\n"
++
++#, c-format
++msgid "%s: Error - stdin is empty, so no job has been sent.\n"
++msgstr "%s: Fehler - stdin ist leer, somit wurde kein Auftrag gesendet.\n"
++
++#, c-format
++msgid "%s: Error - unknown destination \"%s\"!\n"
++msgstr "%s: Fehler - unbekanntes Ziel \"%s\"!\n"
++
++#, c-format
++msgid "%s: Error - expected reason text after '-r' option!\n"
++msgstr "%s: Fehler - Begründungstext wird hinter dem Parameter '-r' erwartet!\n"
++
++#, c-format
++msgid "%s: Error - expected username after '-u' option!\n"
++msgstr "%s: Fehler - Benutzernamen wird hinter dem Parameter '-u' erwartet!\n"
++
++#, c-format
++msgid "%s: %s failed: %s\n"
++msgstr "%s: %s fehlgeschlagen: %s\n"
++
++#, c-format
++msgid "%s: Error - expected destination after '-d' option!\n"
++msgstr "%s: Fehler - Ziel wird hinter dem Parameter '-d' erwartet!\n"
++
++#, c-format
++msgid "%s: Error - expected form after '-f' option!\n"
++msgstr "%s: Fehler - Formular wird hinter dem Parameter '-f' erwartet!\n"
++
++#, c-format
++msgid "%s: Warning - form option ignored!\n"
++msgstr "%s: Warnung - Parameter für Formular ignoriert!\n"
++
++#, c-format
++msgid "%s: Expected job ID after '-i' option!\n"
++msgstr "%s: Auftrags ID wird hinter dem Parameter '-i' erwartet!\n"
++
++#, c-format
++msgid "%s: Error - cannot print files and alter jobs simultaneously!\n"
++msgstr "%s: Fehler - Kann nicht gleichzeitig Dateien drucken und Aufträge abändern!\n"
++
++#, c-format
++msgid "%s: Error - bad job ID!\n"
++msgstr "%s: Fehler - Falsche Auftrags ID!\n"
++
++#, c-format
++msgid "%s: Error - expected copies after '-n' option!\n"
++msgstr "%s: Fehler - Kopienanzahl wird hinter dem Parameter '-n' erwartet!\n"
++
++#, c-format
++msgid "%s: Error - expected option string after '-o' option!\n"
++msgstr "%s: Fehler - Zeichenkette mit Parametern wird hinter dem Parameter '-o' erwartet!\n"
++
++#, c-format
++msgid "%s: Error - expected priority after '-%c' option!\n"
++msgstr "%s: Fehler - Priorität wird hinter dem Parameter '-%c' erwartet!\n"
++
++#, c-format
++msgid "%s: Error - priority must be between 1 and 100.\n"
++msgstr "%s: Fehler - Priorität muss zwischen 1 und 100 sein.\n"
++
++#, c-format
++msgid "%s: Error - expected title after '-t' option!\n"
++msgstr "%s: Fehler - Titel wird hinter dem Parameter '-t' erwartet!\n"
++
++#, c-format
++msgid "%s: Error - expected mode list after '-y' option!\n"
++msgstr "%s: Fehler - Modusliste wird hinter dem Parameter '-y' erwartet!\n"
++
++#, c-format
++msgid "%s: Warning - mode option ignored!\n"
++msgstr "%s: Warnung - Modusangabe ignoriert!\n"
++
++#, c-format
++msgid "%s: Error - expected hold name after '-H' option!\n"
++msgstr "%s: Fehler - Haltebezeichnung wird hinter dem Parameter '-H' erwartet!\n"
++
++#, c-format
++msgid "%s: Need job ID ('-i jobid') before '-H restart'!\n"
++msgstr "%s: Brauche Auftrags ID ('-i jobid') vor '-H restart'!\n"
++
++#, c-format
++msgid "%s: Error - expected page list after '-P' option!\n"
++msgstr "%s: Fehler - Seitenliste wird hinter dem Paramter '-P' erwartet!\n"
++
++#, c-format
++msgid "%s: Error - expected character set after '-S' option!\n"
++msgstr "%s: Fehler - Zeichensatz wird hinter dem Paramter '-S' erwartet!\n"
++
++#, c-format
++msgid "%s: Warning - character set option ignored!\n"
++msgstr "%s: Warnung - Zeichensatzangabe ignoriert!\n"
++
++#, c-format
++msgid "%s: Error - expected content type after '-T' option!\n"
++msgstr "%s: Fehler - Inhaltstyp hinter dem Parameter '-T' erwartet!\n"
++
++#, c-format
++msgid "%s: Warning - content type option ignored!\n"
++msgstr "%s: Warnung - Parameter für Inhaltstyp ignoriert!\n"
++
++#, c-format
++msgid "%s: Error - cannot print from stdin if files or a job ID are provided!\n"
++msgstr "%s: Fehler - Kann nicht von stdin drucken wenn Dateien oder eine Autrags ID übergeben wurde!\n"
++
++#, c-format
++msgid "%s: Error - need \"completed\", \"not-completed\", or \"all\" after '-W' option!\n"
++msgstr "%s: Fehler - Brauche \"completed\", \"not-completed\", oder \"all\" hinter dem Parameter '-W'!\n"
++
++#, c-format
++msgid "%s: Error - expected destination after '-b' option!\n"
++msgstr "%s: Fehler - Ziel wird hinter dem Parameter '-b' erwartet!\n"
++
++#, c-format
++msgid "%s: Invalid destination name in list \"%s\"!\n"
++msgstr "%s: Ungültiger Zielname in der Liste \"%s\"!\n"
++
++#, c-format
++msgid "%s: Unable to connect to server\n"
++msgstr "%s: Kann Server nicht erreichen\n"
++
++msgid "Print Job:"
++msgstr "Druckauftrag:"
++
++msgid "pending"
++msgstr "schwebend"
++
++msgid "held"
++msgstr "gehalten"
++
++msgid "processing"
++msgstr "verarbeite"
++
++msgid "stopped"
++msgstr "gestoppt"
++
++msgid "canceled"
++msgstr "abgebrochen"
++
++msgid "aborted"
++msgstr "abgebrochen"
++
++msgid "completed"
++msgstr "beendet"
++
++msgid "unknown"
++msgstr "unbekannt"
++
++msgid "untitled"
++msgstr "unbenannt"
++
++msgid "Printer:"
++msgstr "Drucker:"
++
++msgid "idle"
++msgstr "frei"
++
++msgid "Missing notify-subscription-ids attribute!"
++msgstr "Vermisse Eigenschaft notify-subscription-ids!"
++
++msgid "Job subscriptions cannot be renewed!"
++msgstr "Auftragssubkription kann nicht erneuert werden!"
++
++msgid "cupsd: Expected config filename after \"-c\" option!\n"
++msgstr "cupsd: Konfigurationsdateiname wird hinter dem Paramter \"-c\" erwartet!\n"
++
++msgid "cupsd: launchd(8) support not compiled in, running in normal mode.\n"
++msgstr "cupsd: launchd(8)-unterstützung wurde nicht kompiliert, laufe im normalen Modus.\n"
++
++#, c-format
++msgid "cupsd: Unknown option \"%c\" - aborting!\n"
++msgstr "cupsd: Unbekannter Paramter \"%c\" - Abbruch!\n"
++
++#, c-format
++msgid "cupsd: Unknown argument \"%s\" - aborting!\n"
++msgstr "cupsd: Unbekanntes Argument \"%s\" - Abbruch!\n"
++
++msgid ""
++"Usage: cupsd [-c config-file] [-f] [-F] [-h] [-l]\n"
++"\n"
++"-c config-file      Load alternate configuration file\n"
++"-f                  Run in the foreground\n"
++"-F                  Run in the foreground but detach\n"
++"-h                  Show this usage message\n"
++"-l                  Run cupsd from launchd(8)\n"
++msgstr ""
++"Benutzung: cupsd [-c Konfigurationsdatei] [-f] [-F] [-h] [-l]\n"
++"\n"
++"-c Konfig. Datei    Lade alternative Konfigurationsdatei\n"
++"-f                  Laufe im Vordergrund\n"
++"-F                  Laufe abgetrennt im Vordergrund\n"
++"-h                  Zeige diese Gebrauchsanweisung\n"
++"-l                  cupsd über launchd(8) laufen lassen\n"
++
++#, c-format
++msgid "        WARN    Line %d only contains whitespace!\n"
++msgstr "        WARNUNG    Zeile %d enthält nur Whitespace!\n"
++
++msgid "        WARN    File contains a mix of CR, LF, and CR LF line endings!\n"
++msgstr "        WARNUNG    Datei enthält gemischt CR, LF und CR LF als Zeilenende!\n"
++
++msgid "        WARN    Non-Windows PPD files should use lines ending with only LF, not CR LF!\n"
++msgstr "        WARNUNG    Nicht-Windows PPD Dateien sollten nur das Zeilenende LF benutzen, nicht CR LF!\n"
++
++msgid "Printer Maintenance"
++msgstr "Druckerwartung"
++
++msgid "Unable to send maintenance job:"
++msgstr "Kann Wartungsauftrag nicht senden:"
++
++#, c-format
++msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s\n"
++msgstr "cupsaddsmb: Keine PPD Datei für Drucker \"%s\" vorhanden - %s\n"
++
++#, c-format
++msgid "      **FAIL**  %s %s does not exist!\n"
++msgstr "      **FEHLGESCHLAGEN**  %s %s existiert nicht!\n"
++
++#, c-format
++msgid "      **FAIL**  Bad language \"%s\"!\n"
++msgstr "      **FEHLGESCHLAGEN**  Falsche Sprache \"%s\"!\n"
++
++#, c-format
++msgid "      **FAIL**  Missing \"%s\" translation string for option %s!\n"
++msgstr "      **FEHLGESCHLAGEN**  Vermisse \"%s\" Übersetzung für Parameter %s!\n"
++
++#, c-format
++msgid "      **FAIL**  Default translation string for option %s contains 8-bit characters!\n"
++msgstr "      **FEHLGESCHLAGEN**  Standardübersetzung für Parameter %s enthält 8-bit Zeichen!\n"
++
++#, c-format
++msgid "      **FAIL**  Missing \"%s\" translation string for option %s, choice %s!\n"
++msgstr "      **FEHLGESCHLAGEN**  Vermisse \"%s\" Übersetzung für Parameter %s, Auswahl %s!\n"
++
++#, c-format
++msgid "      **FAIL**  Default translation string for option %s choice %s contains 8-bit characters!\n"
++msgstr "      **FEHLGESCHLAGEN**  Standardübersetzung für Parameter %s Auswahl %s enthält 8-bit Zeichen!\n"
++
++#, c-format
++msgid "      **FAIL**  Bad cupsFilter value \"%s\"!\n"
++msgstr "      **FEHLGESCHLAGEN**  Falscher cupsFilter Wert \"%s\"!\n"
++
++msgid "Help"
++msgstr "Hilfe"
++
++#, c-format
++msgid "Missing value on line %d!\n"
++msgstr "Vermisse Wert in Zeile %d!\n"
++
++#, c-format
++msgid "Missing double quote on line %d!\n"
++msgstr "Vermisse doppelte Anführungszeichen in Zeile %d!\n"
++
++#, c-format
++msgid "Bad option + choice on line %d!\n"
++msgstr "Falscher Parameter + Auswahl in Zeile %d!\n"
++
++#, c-format
++msgid "Unable to copy Windows 2000 printer driver files (%d)!\n"
++msgstr "Kann Windows 2000 Druckertreiberdateien nicht kopieren (%d)!\n"
++
++#, c-format
++msgid "Unable to copy CUPS printer driver files (%d)!\n"
++msgstr "Kann CUPS Druckertreiberdateien nicht kopieren (%d)!\n"
++
++#, c-format
++msgid "Unable to install Windows 2000 printer driver files (%d)!\n"
++msgstr "Kann Windows 2000 Druckertreiberdateien nicht installieren (%d)!\n"
++
++#, c-format
++msgid "Unable to copy Windows 9x printer driver files (%d)!\n"
++msgstr "Kann Windows 9x Druckertreiberdateien nicht kopieren (%d)!\n"
++
++#, c-format
++msgid "Unable to install Windows 9x printer driver files (%d)!\n"
++msgstr "Kann Windows 9x Druckertreiberdateien nicht installieren (%d)!\n"
++
++msgid "No Windows printer drivers are installed!\n"
++msgstr "Keine Windows Druckertreiber installiert!\n"
++
++msgid "Warning, no Windows 2000 printer drivers are installed!\n"
++msgstr "Warnung, keine Windows 2000 Druckertreiber installiert!\n"
++
++#, c-format
++msgid "Unable to set Windows printer driver (%d)!\n"
++msgstr "Kann Windows Druckertreiber nicht setzen (%d)!\n"
++
++msgid ""
++"Usage: cupsaddsmb [options] printer1 ... printerN\n"
++"       cupsaddsmb [options] -a\n"
++"\n"
++"Options:\n"
++"  -E               Encrypt the connection to the server\n"
++"  -H samba-server  Use the named SAMBA server\n"
++"  -U samba-user    Authenticate using the named SAMBA user\n"
++"  -a               Export all printers\n"
++"  -h cups-server   Use the named CUPS server\n"
++"  -v               Be verbose (show commands)\n"
++msgstr ""
++"Benutzung: cupsaddsmb [Parameter] Drucker1 ... DruckerN\n"
++"           cupsaddsmb [Parameter] -a\n"
++"\n"
++"Options:\n"
++"  -E                Verbindung zum Server verschlüsseln\n"
++"  -H Samba-Server   Benutze den angegebenen Samba Server\n"
++"  -U Samba-Benutzer Authentifiziere mit dem angegebenen Samba Benutzer\n"
++"  -a                Alle Drucker bereitstellen\n"
++"  -h CUPS-Server    Benutze den angegebenen CUPS Server\n"
++"  -v                zusätzliche Ausgaben einschalten (zeige Befehle)\n"
++
++#, c-format
++msgid "Unable to copy Windows 2000 printer driver files (%d)!"
++msgstr "Kann Windows 2000 Druckertreiberdateien nicht kopieren (%d)!"
++
++#, c-format
++msgid "Unable to copy CUPS printer driver files (%d)!"
++msgstr "Kann CUPS Druckertreiberdateien nicht kopieren (%d)!"
++
++#, c-format
++msgid "Unable to install Windows 2000 printer driver files (%d)!"
++msgstr "Kann Windows 2000 Druckertreiberdateien nicht installieren (%d)!"
++
++#, c-format
++msgid "Unable to copy Windows 9x printer driver files (%d)!"
++msgstr "Kann Windows 9x Druckertreiberdateien nicht kopieren (%d)!"
++
++#, c-format
++msgid "Unable to install Windows 9x printer driver files (%d)!"
++msgstr "Kann Windows 9x Druckertreiberdateien nicht installieren (%d)!"
++
++msgid "No Windows printer drivers are installed!"
++msgstr "Keine Windows Druckertreiber installiert!"
++
++msgid "Warning, no Windows 2000 printer drivers are installed!"
++msgstr "Warnung, keine Windows 2000 Druckertreiber installiert!"
++
++#, c-format
++msgid "open of %s failed: %s"
++msgstr "öffnen von %s fehlgeschlagen: %s"
++
++#, c-format
++msgid "Running command: %s %s -N -A %s -c '%s'\n"
++msgstr "Befehl wird ausgeführt: %s %s -N -A %s -c '%s'\n"
++
++#, c-format
++msgid "stat of %s failed: %s"
++msgstr "Prüfung von %s fehlgeschlagen: %s"
++
++#, c-format
++msgid "Job #%d is already cancelled - can't cancel."
++msgstr "Auftrag #%d wurde bereits abgebrochen - abbrechen nicht möglich."
++
++#, c-format
++msgid "Job #%d is already aborted - can't cancel."
++msgstr "Auftrag #%d wurde bereits abgebrochen - abbrechen nicht möglich."
++
++#, c-format
++msgid "Job #%d is already completed - can't cancel."
++msgstr "Auftrag #%d wurde bereits beendet - abbrechen nicht möglich."
++
++#, c-format
++msgid "You must access this page using the URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A>."
++msgstr "Um auf diese Seite zuzugreifen müssen Sie die URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A> verwenden."
++
++#, c-format
++msgid "Unsupported format '%s'!"
++msgstr "Nicht unterstütztes Format '%s'!"
++
++msgid "FAIL\n"
++msgstr "FEHLGESCHLAGEN\n"
++
++#, c-format
++msgid ""
++"    Line %d is longer than 255 characters (%d)!\n"
++"        REF: Page 25, Line Length\n"
++msgstr ""
++"    Zeile %d ist länger als 255 Zeichen (%d)!\n"
++"        REF: Seite 25, Zeilenlänge\n"
++
++msgid ""
++"    Missing %!PS-Adobe-3.0 on first line!\n"
++"        REF: Page 17, 3.1 Conforming Documents\n"
++msgstr ""
++"    Vermisse %!PS-Adobe-3.0 in der ersten Zeile!\n"
++"        REF: Seite 17, 3.1 Den Konventionen entsprechende Dokumente\n"
++
++#, c-format
++msgid ""
++"    Bad %%%%Pages: on line %d!\n"
++"        REF: Page 43, %%%%Pages:\n"
++msgstr ""
++"    Falsche %%%%Pages: in Zeile %d!\n"
++"        REF: Seite 43, %%%%Pages:\n"
++
++#, c-format
++msgid ""
++"    Bad %%%%BoundingBox: on line %d!\n"
++"        REF: Page 39, %%%%BoundingBox:\n"
++msgstr ""
++"    Falsche %%%%BoundingBox: in Zeile %d!\n"
++"        REF: Seite 39, %%%%BoundingBox:\n"
++
++#, c-format
++msgid ""
++"    Bad %%%%Page: on line %d!\n"
++"        REF: Page 53, %%%%Page:\n"
++msgstr ""
++"    Falsche %%%%Page: in Zeile %d!\n"
++"        REF: Seite 53, %%%%Page:\n"
++
++#, c-format
++msgid ""
++"    Missing or bad %%BoundingBox: comment!\n"
++"        REF: Page 39, %%BoundingBox:\n"
++msgstr ""
++"    Vermisster oder falscher %%BoundingBox: Kommentar!\n"
++"        REF: Seite 39, %%BoundingBox:\n"
++
++#, c-format
++msgid ""
++"    Missing or bad %%Pages: comment!\n"
++"        REF: Page 43, %%Pages:\n"
++msgstr ""
++"    Vermisster oder Falscher %%Pages: Kommentar!\n"
++"        REF: Seite 43, %%Pages:\n"
++
++#, c-format
++msgid ""
++"    Missing %%EndComments comment!\n"
++"        REF: Page 41, %%EndComments\n"
++msgstr ""
++"    Vermisster %%EndComments Kommentar!\n"
++"        REF: Seite 41, %%EndComments\n"
++
++#, c-format
++msgid ""
++"    Missing or bad %%Page: comments!\n"
++"        REF: Page 53, %%Page:\n"
++msgstr ""
++"    Vermisste oder falsche %%Page: Kommentare!\n"
++"        REF: Seite 53, %%Page:\n"
++
++#, c-format
++msgid "    Too many %%EndDocument comments!\n"
++msgstr "    Zu viele %%EndDocument Kommentare!\n"
++
++#, c-format
++msgid "    Too many %%BeginDocument comments!\n"
++msgstr "    Zu viele %%BeginDocument Kommentare!\n"
++
++#, c-format
++msgid "    Saw %d lines that exceeded 255 characters!\n"
++msgstr "    Sah %d Zeilen welche 255 Zeichen überschreiten!\n"
++
++msgid "PASS\n"
++msgstr "PASS\n"
++
++msgid "    Warning: file contains binary data!\n"
++msgstr "    Warnung: Datei enthält binäre Daten!\n"
++
++#, c-format
++msgid "    Warning: obsolete DSC version %.1f in file!\n"
++msgstr "    Warnung: obsolete DSC Version %.1f in Datei!\n"
++
++#, c-format
++msgid "    Warning: no %%EndComments comment in file!\n"
++msgstr "    Warnung: keine %%EndComments Kommentare in Datei!\n"
++
++msgid ""
++"Usage: cupstestdsc [options] filename.ps [... filename.ps]\n"
++"       cupstestdsc [options] -\n"
++"\n"
++"Options:\n"
++"\n"
++"    -h       Show program usage\n"
++"\n"
++"    Note: this program only validates the DSC comments, not the PostScript itself.\n"
++msgstr ""
++"Benutzung: cupstestdsc [Parameter] Dateiname.ps [... Dateiname.ps]\n"
++"       cupstestdsc [Parameter] -\n"
++"\n"
++"Parameter:\n"
++"\n"
++"    -h       Zeige Gebrauchsanleitung\n"
++"\n"
++"    Notiz: Dieses Programm validiert nur die DSC Kommentare, nicht das PostScript selbst.\n"
++
++#, c-format
++msgid "Password for %s on %s? "
++msgstr "Passwort für %s auf %s? "
++
++msgid ""
++"      **FAIL**  1284DeviceId must be 1284DeviceID!\n"
++"                REF: Page 72, section 5.5\n"
++msgstr ""
++"      **FEHLGESCHLAGEN**  1284DeviceId muss 1284DeviceID sein!\n"
++"                REF: Seite 72, Kapitel 5.5\n"
+diff -urNad cupsys-1.2.1~/locale/cups_es.po cupsys-1.2.1/locale/cups_es.po
+--- cupsys-1.2.1~/locale/cups_es.po	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/locale/cups_es.po	2006-07-19 00:40:14.000000000 +0000
+@@ -1,29 +1,32 @@
++#
+ # "$Id$"
+-# Message catalog template for the Common UNIX Printing System (CUPS).
+-# Copyright 2005-2006 by Easy Software Products.
+-# These coded instructions, statements, and computer programs are the
+-# property of Easy Software Products and are protected by Federal
+-# copyright law.  Distribution and use rights are outlined in the file
+-# "LICENSE.txt" which should have been included with this file.  If this
+-# file is missing or damaged please contact Easy Software Products
+-# at:
+-# Attn: CUPS Licensing Information
+-# Easy Software Products
+-# 44141 Airport View Drive, Suite 204
+-# Hollywood, Maryland 20636 USA
+-# Voice: (301) 373-9600
+-# EMail: cups-info at cups.org
+-# WWW: http://www.cups.org
+-# , fuzzy
+-# <>, 2006.
+-# 
+-# 
++#
++#   Spanish message catalog for the Common UNIX Printing System (CUPS).
++#
++#   Copyright 2005-2006 by Easy Software Products.
++#
++#   These coded instructions, statements, and computer programs are the
++#   property of Easy Software Products and are protected by Federal
++#   copyright law.  Distribution and use rights are outlined in the file
++#   "LICENSE.txt" which should have been included with this file.  If this
++#   file is missing or damaged please contact Easy Software Products
++#   at:
++#
++#       Attn: CUPS Licensing Information
++#       Easy Software Products
++#       44141 Airport View Drive, Suite 204
++#       Hollywood, Maryland 20636 USA
++#
++#       Voice: (301) 373-9600
++#       EMail: cups-info at cups.org
++#         WWW: http://www.cups.org
++#
+ msgid ""
+ msgstr ""
+ "Project-Id-Version: CUPS 1.2\n"
+ "Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
+-"POT-Creation-Date: 2006-05-21 10:08-0400\n"
+-"PO-Revision-Date: 2006-03-25 21:48+0100\n"
++"POT-Creation-Date: 2006-05-21 10:07-0400\n"
++"PO-Revision-Date: 2006-06-12 19:01+0100\n"
+ "Last-Translator: Juan Pablo González Riopedre <riopedre at tiscali.es>\n"
+ "Language-Team: Spanish\n"
+ "MIME-Version: 1.0\n"
+@@ -72,19 +75,15 @@
+ msgid "Auto"
+ msgstr "Auto"
+ 
+-msgid ""
+-"Enter your username and password or the root username and password to access "
+-"this page."
+-msgstr ""
+-"Introduzca su nombre de usuario y contraseña o el nombre de usuario y "
+-"contraseña de root para poder acceder a esta página."
++msgid "Enter your username and password or the root username and password to access this page."
++msgstr "Introduzca su nombre de usuario y contraseña o el nombre de usuario y contraseña de root para poder acceder a esta página."
+ 
+ msgid "You must use a https: URL to access this page."
+ msgstr "Debe escribir un URL https para acceder a esta página."
+ 
+ #, c-format
+ msgid "Bad request version number %d.%d!"
+-msgstr "Petición incorrecta de número de versión %d %d."
++msgstr "Petición incorrecta de número de versión %d.%d."
+ 
+ msgid "No attributes in request!"
+ msgstr "No hay atributos en la solicitud."
+@@ -103,11 +102,8 @@
+ msgid "The printer or class was not found."
+ msgstr "No se ha encontrado la impresora o la clase."
+ 
+-msgid ""
+-"The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"."
+-msgstr ""
+-"El printer-uri debe ser de la forma \"ipp://NOMBRE_ORDENADOR/classes/"
+-"NOMBRE_CLASE\"."
++msgid "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"."
++msgstr "El printer-uri debe ser de la forma \"ipp://NOMBRE_ORDENADOR/classes/NOMBRE_CLASE\"."
+ 
+ #, c-format
+ msgid "The printer-uri \"%s\" contains invalid characters."
+@@ -119,9 +115,7 @@
+ 
+ #, c-format
+ msgid "Attempt to set %s printer-state to bad value %d!"
+-msgstr ""
+-"Se ha intentado cambiar el valor printer-state de %s a un valor incorrecto %"
+-"d."
++msgstr "Se ha intentado cambiar el valor printer-state de %s a un valor incorrecto %d."
+ 
+ #, c-format
+ msgid "add_class: Unknown printer-op-policy \"%s\"."
+@@ -146,29 +140,19 @@
+ msgid "The notify-user-data value is too large (%d > 63 octets)!"
+ msgstr "El valor notify-user-data es demasiado grande (%d > 63 octetos)."
+ 
+-msgid ""
+-"The notify-lease-duration attribute cannot be used with job subscriptions."
+-msgstr ""
+-"El atributo notify-lease-duration no puede ser usado con subscripciones de "
+-"trabajos."
++msgid "The notify-lease-duration attribute cannot be used with job subscriptions."
++msgstr "El atributo notify-lease-duration no puede ser usado con subscripciones de trabajos."
+ 
+-msgid ""
+-"The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
+-msgstr ""
+-"El printer-uri debe ser de la forma \"ipp://NOMBRE_ORDENADOR/printers/"
+-"NOMBRE_IMPRESORA\"."
++msgid "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
++msgstr "El printer-uri debe ser de la forma \"ipp://NOMBRE_ORDENADOR/printers/NOMBRE_IMPRESORA\"."
+ 
+ #, c-format
+ msgid "A class named \"%s\" already exists!"
+ msgstr "Ya existe una clase llamada \"%s\"."
+ 
+ #, c-format
+-msgid ""
+-"File device URIs have been disabled! To enable, see the FileDevice directive "
+-"in \"%s/cupsd.conf\"."
+-msgstr ""
+-"Los URIs del dispositivo de archivo han sido deshabilitados. Para "
+-"habilitarlos, vea la directiva FileDevice en \"%s/cupsd.conf\"."
++msgid "File device URIs have been disabled! To enable, see the FileDevice directive in \"%s/cupsd.conf\"."
++msgstr "Los URIs del dispositivo de archivo han sido deshabilitados. Para habilitarlos, vea la directiva FileDevice en \"%s/cupsd.conf\"."
+ 
+ #, c-format
+ msgid "Bad device-uri \"%s\"!"
+@@ -218,8 +202,7 @@
+ 
+ #, c-format
+ msgid "You are not authorized to authenticate job #%d owned by \"%s\"!"
+-msgstr ""
+-"No tiene permiso para autentificar el trabajo #%d que pertenece a \"%s\"."
++msgstr "No tiene permiso para autentificar el trabajo #%d que pertenece a \"%s\"."
+ 
+ msgid "The printer-uri attribute is required!"
+ msgstr "Se necesita el atributo printer-uri."
+@@ -360,14 +343,11 @@
+ 
+ #, c-format
+ msgid "You are not authorized to restart job id %d owned by \"%s\"!"
+-msgstr ""
+-"No tiene permiso para reiniciar el trabajo id %d que pertenece a \"%s\"."
++msgstr "No tiene permiso para reiniciar el trabajo id %d que pertenece a \"%s\"."
+ 
+ #, c-format
+ msgid "You are not authorized to send document for job #%d owned by \"%s\"!"
+-msgstr ""
+-"No tiene permiso para enviar el documento para el trabajo #%d que pertenece "
+-"a \"%s\"."
++msgstr "No tiene permiso para enviar el documento para el trabajo #%d que pertenece a \"%s\"."
+ 
+ #, c-format
+ msgid "Bad document-format \"%s\"!"
+@@ -465,11 +445,8 @@
+ msgstr "lpq: Destino desconocido \"%s\".\n"
+ 
+ #, c-format
+-msgid ""
+-"lp: error - %s environment variable names non-existent destination \"%s\"!\n"
+-msgstr ""
+-"lp: error - los nombres de la variable de entorno %s no existentes en el "
+-"destino \"%s\".\n"
++msgid "lp: error - %s environment variable names non-existent destination \"%s\"!\n"
++msgstr "lp: error - los nombres de la variable de entorno %s no existentes en el destino \"%s\".\n"
+ 
+ msgid "lpq: error - no default destination available.\n"
+ msgstr "lpq: error - no está disponible el destino predeterminado.\n"
+@@ -478,10 +455,8 @@
+ msgid "lpq: get-jobs failed: %s\n"
+ msgstr "lpq: get-jobs ha fallado: %s\n"
+ 
+-msgid ""
+-"Rank   Owner      Pri  Job        Files                       Total Size\n"
+-msgstr ""
+-"Rango  Propiet.   Pri  Trabajo    Archivos                    Tamaño total\n"
++msgid "Rank   Owner      Pri  Job        Files                       Total Size\n"
++msgstr "Rango  Propiet.   Pri  Trabajo    Archivos                    Tamaño total\n"
+ 
+ msgid "Rank    Owner   Job     File(s)                         Total Size\n"
+ msgstr "Rango  Propiet. Trabajo Archivo(s)                      Tamaño total\n"
+@@ -492,15 +467,15 @@
+ 
+ #, c-format
+ msgid "        %-39.39s %.0f bytes\n"
+-msgstr "        %-39.39s %.de bytes\n"
++msgstr "        %-39.39s %.0f bytes\n"
+ 
+ #, c-format
+ msgid "%-6s %-10.10s %-4d %-10d %-27.27s %.0f bytes\n"
+-msgstr "%-6s %-10.10s %-4d %-10d %-27.27s %.de bytes\n"
++msgstr "%-6s %-10.10s %-4d %-10d %-27.27s %.0f bytes\n"
+ 
+ #, c-format
+ msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes\n"
+-msgstr "%-7s %-7.7s %-7d %-31.31s %.de bytes\n"
++msgstr "%-7s %-7.7s %-7d %-31.31s %.0f bytes\n"
+ 
+ msgid "no entries\n"
+ msgstr "no hay entradas\n"
+@@ -529,20 +504,14 @@
+ msgstr "lpr: error - se esperaba un valor tras la opción %c\n"
+ 
+ #, c-format
+-msgid ""
+-"lpr: warning - '%c' format modifier not supported - output may not be "
+-"correct!\n"
+-msgstr ""
+-"lpr: advertencia - no admite el uso del modificador de formato '%c' - la "
+-"salida puede que no sea correcta.\n"
++msgid "lpr: warning - '%c' format modifier not supported - output may not be correct!\n"
++msgstr "lpr: advertencia - no admite el uso del modificador de formato '%c' - la salida puede que no sea correcta.\n"
+ 
+ msgid "lpr: error - expected option=value after -o option!\n"
+ msgstr "lpr: error - se esperaba opción=valor tras la opción -o.\n"
+ 
+ msgid "lpr: warning - email notification is not currently supported!\n"
+-msgstr ""
+-"lpr: advertencia - actualmente no admite el uso de la notificación por "
+-"email.\n"
++msgstr "lpr: advertencia - actualmente no admite el uso de la notificación por email.\n"
+ 
+ msgid "lpr: error - expected destination after -P option!\n"
+ msgstr "lpr: error - se esperaba un destino tras la opción -P.\n"
+@@ -563,18 +532,15 @@
+ 
+ #, c-format
+ msgid "lpr: error - unable to access \"%s\" - %s\n"
+-msgstr "lpr: error - no se ha podido acceder a \"%s\" - \"s\n"
++msgstr "lpr: error - no se ha podido acceder a \"%s\" - %s\n"
+ 
+ #, c-format
+ msgid "lpr: error - too many files - \"%s\"\n"
+ msgstr "lpr: error - demasiados archivos - \"%s\"\n"
+ 
+ #, c-format
+-msgid ""
+-"lpr: error - %s environment variable names non-existent destination \"%s\"!\n"
+-msgstr ""
+-"lpr: error - los nombres de variables de entorno %s no existen en el destino "
+-"\"%s\".\n"
++msgid "lpr: error - %s environment variable names non-existent destination \"%s\"!\n"
++msgstr "lpr: error - los nombres de variables de entorno %s no existen en el destino \"%s\".\n"
+ 
+ msgid "lpr: error - no default destination available.\n"
+ msgstr "lpr: error - no está disponible el destino predeterminado.\n"
+@@ -588,13 +554,10 @@
+ 
+ #, c-format
+ msgid "lpr: error - unable to write to temporary file \"%s\" - %s\n"
+-msgstr ""
+-"lpr: error - no se ha podido escribir en el archivo temporal \"%s\" - %s\n"
++msgstr "lpr: error - no se ha podido escribir en el archivo temporal \"%s\" - %s\n"
+ 
+ msgid "lpr: error - stdin is empty, so no job has been sent.\n"
+-msgstr ""
+-"lpr: error - stdin está vacío, por lo tanto no se ha enviado ningún "
+-"trabajo.\n"
++msgstr "lpr: error - stdin está vacío, por lo tanto no se ha enviado ningún trabajo.\n"
+ 
+ #, c-format
+ msgid "lpr: error - unable to print file: %s\n"
+@@ -652,12 +615,10 @@
+ msgstr "%s: La operación ha fallado: %s\n"
+ 
+ msgid "cancel: Error - expected hostname after '-h' option!\n"
+-msgstr ""
+-"cancel: Error - se esperaba un nombre de ordenador tras la opción '-h'.\n"
++msgstr "cancel: Error - se esperaba un nombre de ordenador tras la opción '-h'.\n"
+ 
+ msgid "cancel: Error - expected username after '-u' option!\n"
+-msgstr ""
+-"cancel: Error - se esperaba un nombre de usuario tras la opción '-u'.\n"
++msgstr "cancel: Error - se esperaba un nombre de usuario tras la opción '-u'.\n"
+ 
+ #, c-format
+ msgid "cancel: Unknown option '%c'!\n"
+@@ -704,39 +665,27 @@
+ 
+ #, c-format
+ msgid "cupsaddsmb: Unable to copy Windows 2000 printer driver files (%d)!\n"
+-msgstr ""
+-"cupsaddsmb: No se han podido copiar los archivos de los controladores de "
+-"impresoras de Windows 2000 (%d).\n"
++msgstr "cupsaddsmb: No se han podido copiar los archivos de los controladores de impresoras de Windows 2000 (%d).\n"
+ 
+ #, c-format
+ msgid "cupsaddsmb: Unable to copy CUPS printer driver files (%d)!\n"
+-msgstr ""
+-"cupsaddsmb: No se han podido copiar los archivos de los controladores de "
+-"impresoras de CUPS (%d).\n"
++msgstr "cupsaddsmb: No se han podido copiar los archivos de los controladores de impresoras de CUPS (%d).\n"
+ 
+ #, c-format
+ msgid "cupsaddsmb: Unable to install Windows 2000 printer driver files (%d)!\n"
+-msgstr ""
+-"cupsaddsmb: No se han podido instalar los archivos de los controladores de "
+-"impresoras de Windows 2000 (%d).\n"
++msgstr "cupsaddsmb: No se han podido instalar los archivos de los controladores de impresoras de Windows 2000 (%d).\n"
+ 
+ #, c-format
+ msgid "cupsaddsmb: Unable to copy Windows 9x printer driver files (%d)!\n"
+-msgstr ""
+-"cupsaddsmb: No se han podido copiar los archivos de los controladores de "
+-"impresoras de Windows 9x (%d).\n"
++msgstr "cupsaddsmb: No se han podido copiar los archivos de los controladores de impresoras de Windows 9x (%d).\n"
+ 
+ #, c-format
+ msgid "cupsaddsmb: Unable to install Windows 9x printer driver files (%d)!\n"
+-msgstr ""
+-"cupsaddsmb: No se han podido instalar los archivos de los controladores de "
+-"impresoras de Windows 9x (%d).\n"
++msgstr "cupsaddsmb: No se han podido instalar los archivos de los controladores de impresoras de Windows 9x (%d).\n"
+ 
+ #, c-format
+ msgid "cupsaddsmb: Unable to set Windows printer driver (%d)!\n"
+-msgstr ""
+-"cupsaddsmb: No se ha podido poner el controlador de impresora de Windows (%"
+-"d).\n"
++msgstr "cupsaddsmb: No se ha podido poner el controlador de impresora de Windows (%d).\n"
+ 
+ msgid ""
+ "Usage: cupsaddsmb [options] printer1 ... printerN\n"
+@@ -1115,17 +1064,14 @@
+ 
+ #, c-format
+ msgid ""
+-"        WARN    Duplex option keyword %s should be named Duplex or "
+-"JCLDuplex!\n"
++"        WARN    Duplex option keyword %s should be named Duplex or JCLDuplex!\n"
+ "                REF: Page 122, section 5.17\n"
+ msgstr ""
+-"        ADVERTENCIA    Clave de opción Duplex %s debería llamarse Duplex o "
+-"JCLDuplex.\n"
++"        ADVERTENCIA    Clave de opción Duplex %s debería llamarse Duplex o JCLDuplex.\n"
+ "                REF: Página 122, sección 5.17\n"
+ 
+ msgid "        WARN    Default choices conflicting!\n"
+-msgstr ""
+-"        ADVERTENCIA    Las preferencias predeterminadas están en conflicto.\n"
++msgstr "        ADVERTENCIA    Las preferencias predeterminadas están en conflicto.\n"
+ 
+ #, c-format
+ msgid ""
+@@ -1139,48 +1085,42 @@
+ "        WARN    LanguageEncoding required by PPD 4.3 spec.\n"
+ "                REF: Pages 56-57, section 5.3.\n"
+ msgstr ""
+-"        ADVERTENCIA    Se necesita LanguageEncoding por especificación de "
+-"PPD 4.3.\n"
++"        ADVERTENCIA    Se necesita LanguageEncoding por especificación de PPD 4.3.\n"
+ "                REF: Páginas 56-57, sección 5.3.\n"
+ 
+ msgid ""
+ "        WARN    Manufacturer required by PPD 4.3 spec.\n"
+ "                REF: Pages 58-59, section 5.3.\n"
+ msgstr ""
+-"        ADVERTENCIA    Se necesita Manufacturer por especificación de PPD "
+-"4.3.\n"
++"        ADVERTENCIA    Se necesita Manufacturer por especificación de PPD 4.3.\n"
+ "                REF: Páginas 58-59, seccion 5.3.\n"
+ 
+ msgid ""
+ "        WARN    PCFileName longer than 8.3 in violation of PPD spec.\n"
+ "                REF: Pages 61-62, section 5.3.\n"
+ msgstr ""
+-"        ADVERTENCIA    PCFileName es mas largo que 8.3 violando la "
+-"especificación PPD.\n"
++"        ADVERTENCIA    PCFileName es mas largo que 8.3 violando la especificación PPD.\n"
+ "                REF: Páginas 61-62, sección 5.3.\n"
+ 
+ msgid ""
+ "        WARN    ShortNickName required by PPD 4.3 spec.\n"
+ "                REF: Pages 64-65, section 5.3.\n"
+ msgstr ""
+-"        ADVERTENCIA    Se necesita ShortNickName por especificación de PPD "
+-"4.3.\n"
++"        ADVERTENCIA    Se necesita ShortNickName por especificación de PPD 4.3.\n"
+ "                REF: Páginas 64-65, sección 5.3.\n"
+ 
+ msgid ""
+ "        WARN    Protocols contains both PJL and BCP; expected TBCP.\n"
+ "                REF: Pages 78-79, section 5.7.\n"
+ msgstr ""
+-"        ADVERTENCIA    Protocols contiene a ambos, PJL y BCP; se esperaba "
+-"TBCP.\n"
++"        ADVERTENCIA    Protocols contiene a ambos, PJL y BCP; se esperaba TBCP.\n"
+ "                REF: Páginas 78-79, sección 5.7.\n"
+ 
+ msgid ""
+ "        WARN    Protocols contains PJL but JCL attributes are not set.\n"
+ "                REF: Pages 78-79, section 5.7.\n"
+ msgstr ""
+-"        ADVERTENCIA    Protocols contiene a PJL pero no se especifican los "
+-"atributos JCL.\n"
++"        ADVERTENCIA    Protocols contiene a PJL pero no se especifican los atributos JCL.\n"
+ "                REF: Páginas 78-79, sección 5.7.\n"
+ 
+ #, c-format
+@@ -1207,12 +1147,10 @@
+ "                (restricción=\"%s %s %s %s\")\n"
+ 
+ msgid ""
+-"Usage: cupstestppd [-q] [-r] [-v[v]] filename1.ppd[.gz] [... filenameN.ppd[."
+-"gz]]\n"
++"Usage: cupstestppd [-q] [-r] [-v[v]] filename1.ppd[.gz] [... filenameN.ppd[.gz]]\n"
+ "       program | cupstestppd [-q] [-r] [-v[v]] -\n"
+ msgstr ""
+-"Uso: cupstestppd [-q] [-r] [-v[v]] nombre_archivo1.ppd[.gz] [... "
+-"nombre_archivoN.ppd[.gz]]\n"
++"Uso: cupstestppd [-q] [-r] [-v[v]] nombre_archivo1.ppd[.gz] [... nombre_archivoN.ppd[.gz]]\n"
+ "       programa | cupstestppd [-q] [-r] [-v[v]] -\n"
+ 
+ msgid "lpstat: Need \"completed\" or \"not-completed\" after -W!\n"
+@@ -1285,20 +1223,15 @@
+ msgstr "destino predeterminado del sistema: %s\n"
+ 
+ #, c-format
+-msgid ""
+-"lpstat: error - %s environment variable names non-existent destination \"%s"
+-"\"!\n"
+-msgstr ""
+-"lpstat: error - Los nombre de variable de entorno %s no existen en el "
+-"destino \"%s\".\n"
++msgid "lpstat: error - %s environment variable names non-existent destination \"%s\"!\n"
++msgstr "lpstat: error - Los nombre de variable de entorno %s no existen en el destino \"%s\".\n"
+ 
+ msgid "no system default destination\n"
+ msgstr "no hay un destino predeterminado del sistema\n"
+ 
+ #, c-format
+ msgid "Output for printer %s is sent to remote printer %s on %s\n"
+-msgstr ""
+-"La salida de la impresora %s se ha enviado a la impresora remota %s en %s\n"
++msgstr "La salida de la impresora %s se ha enviado a la impresora remota %s en %s\n"
+ 
+ #, c-format
+ msgid "Output for printer %s is sent to %s\n"
+@@ -1306,9 +1239,7 @@
+ 
+ #, c-format
+ msgid "Output for printer %s/%s is sent to remote printer %s on %s\n"
+-msgstr ""
+-"La salida de la impresora %s/%s se ha enviado a la impresora remota %s en %"
+-"s\n"
++msgstr "La salida de la impresora %s/%s se ha enviado a la impresora remota %s en %s\n"
+ 
+ #, c-format
+ msgid "Output for printer %s/%s is sent to %s\n"
+@@ -1452,16 +1383,13 @@
+ msgstr "lpadmin: Se esperaba un nombre de clase tras la opción '-c'\n"
+ 
+ msgid "lpadmin: Class name can only contain printable characters!\n"
+-msgstr ""
+-"lpadmin: El nombre de la clase sólo puede contener caracteres imprimibles.\n"
++msgstr "lpadmin: El nombre de la clase sólo puede contener caracteres imprimibles.\n"
+ 
+ msgid "lpadmin: Expected printer name after '-d' option!\n"
+ msgstr "lpadmin: Se esperaba un nombre de impresora tras la opción '-d'\n"
+ 
+ msgid "lpadmin: Printer name can only contain printable characters!\n"
+-msgstr ""
+-"lpadmin: El nombre de la impresora sólo puede contener caracteres "
+-"imprimibles.\n"
++msgstr "lpadmin: El nombre de la impresora sólo puede contener caracteres imprimibles.\n"
+ 
+ msgid "lpadmin: Expected hostname after '-h' option!\n"
+ msgstr "lpadmin: Se esperaba un nombre de ordenador tras la opción '-h'.\n"
+@@ -1536,8 +1464,7 @@
+ msgstr "lpadmin: Se esperaba tipo(s) de archivo(s) tras la opción '-l'.\n"
+ 
+ msgid "lpadmin: Warning - content type list ignored!\n"
+-msgstr ""
+-"lpadmin: Advertencia - lista de tipo de contenido no tenida en cuenta.\n"
++msgstr "lpadmin: Advertencia - lista de tipo de contenido no tenida en cuenta.\n"
+ 
+ msgid ""
+ "lpadmin: Unable to set the printer location:\n"
+@@ -1640,9 +1567,7 @@
+ msgstr "lp: Se esperaba un ID de trabajo tras la opción -i.\n"
+ 
+ msgid "lp: Error - cannot print files and alter jobs simultaneously!\n"
+-msgstr ""
+-"lp: Error - no se pueden imprimir archivos y alterar trabajos al mismo "
+-"tiempo.\n"
++msgstr "lp: Error - no se pueden imprimir archivos y alterar trabajos al mismo tiempo.\n"
+ 
+ msgid "lp: Error - bad job ID!\n"
+ msgstr "lp: Error - ID de trabajo incorrecta.\n"
+@@ -1694,11 +1619,8 @@
+ msgid "lp: Unknown option '%c'!\n"
+ msgstr "lp: Opción '%c' desconocida.\n"
+ 
+-msgid ""
+-"lp: Error - cannot print from stdin if files or a job ID are provided!\n"
+-msgstr ""
+-"lp: Error - no se puede imprimir desde stdin si se proporcionan archivos o "
+-"un ID de trabajo.\n"
++msgid "lp: Error - cannot print from stdin if files or a job ID are provided!\n"
++msgstr "lp: Error - no se puede imprimir desde stdin si se proporcionan archivos o un ID de trabajo.\n"
+ 
+ #, c-format
+ msgid "lp: Unable to access \"%s\" - %s\n"
+@@ -1720,8 +1642,7 @@
+ 
+ #, c-format
+ msgid "lp: error - unable to write to temporary file \"%s\" - %s\n"
+-msgstr ""
+-"lp: error - no se ha podido escribir en el archivo temporal \"%s\" - %s\n"
++msgstr "lp: error - no se ha podido escribir en el archivo temporal \"%s\" - %s\n"
+ 
+ msgid "lp: stdin is empty, so no job has been sent.\n"
+ msgstr "lp: stdin está vacío, por lo tanto no se ha enviado ningún trabajo.\n"
+@@ -1883,9 +1804,7 @@
+ 
+ #, c-format
+ msgid "lppasswd: failed to backup old password file: %s\n"
+-msgstr ""
+-"lppasswd: falló al hacer una copia de seguridad del antiguo archivo de "
+-"contraseñas: %s\n"
++msgstr "lppasswd: falló al hacer una copia de seguridad del antiguo archivo de contraseñas: %s\n"
+ 
+ #, c-format
+ msgid "lppasswd: failed to rename password file: %s\n"
+@@ -1936,12 +1855,8 @@
+ msgid "Add Class"
+ msgstr "Añadir clase"
+ 
+-msgid ""
+-"The class name may only contain up to 127 printable characters and may not "
+-"contain spaces, slashes (/), or the pound sign (#)."
+-msgstr ""
+-"El nombre de la clase sólo puede contener hasta 127 caracteres imprimibles y "
+-"no puede contener espacios, barras (/), o la almohadilla (#)."
++msgid "The class name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)."
++msgstr "El nombre de la clase sólo puede contener hasta 127 caracteres imprimibles y no puede contener espacios, barras (/), o la almohadilla (#)."
+ 
+ msgid "Unable to modify class:"
+ msgstr "No se ha podido modificar la clase:"
+@@ -1955,12 +1870,8 @@
+ msgid "Add Printer"
+ msgstr "Añadir impresora"
+ 
+-msgid ""
+-"The printer name may only contain up to 127 printable characters and may not "
+-"contain spaces, slashes (/), or the pound sign (#)."
+-msgstr ""
+-"El nombre de la impresora sólo puede contener hasta 127 caracteres "
+-"imprimibles y no puede contener espacios, barras (/), o la almohadilla (#)."
++msgid "The printer name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)."
++msgstr "El nombre de la impresora sólo puede contener hasta 127 caracteres imprimibles y no puede contener espacios, barras (/), o la almohadilla (#)."
+ 
+ msgid "Unable to get list of printer drivers:"
+ msgstr "No se ha podido obtener la lista de controladores de impresora:"
+@@ -2059,24 +1970,16 @@
+ msgstr "No se ha podido convertir el archivo PPD."
+ 
+ msgid "Unable to copy Windows 2000 printer driver files!"
+-msgstr ""
+-"No se han podido copiar los archivos del controlador de impresora de Windows "
+-"2000."
++msgstr "No se han podido copiar los archivos del controlador de impresora de Windows 2000."
+ 
+ msgid "Unable to install Windows 2000 printer driver files!"
+-msgstr ""
+-"No se han podido instalar los archivos del controlador de impresora de "
+-"Windows 2000."
++msgstr "No se han podido instalar los archivos del controlador de impresora de Windows 2000."
+ 
+ msgid "Unable to copy Windows 9x printer driver files!"
+-msgstr ""
+-"No se han podido copiar los archivos del controlador de impresora de Windows "
+-"9x."
++msgstr "No se han podido copiar los archivos del controlador de impresora de Windows 9x."
+ 
+ msgid "Unable to install Windows 9x printer driver files!"
+-msgstr ""
+-"No se han podido instalar los archivos del controlador de impresora de "
+-"Windows 9x."
++msgstr "No se han podido instalar los archivos del controlador de impresora de Windows 9x."
+ 
+ msgid "Unable to set Windows printer driver!"
+ msgstr "No se ha podido configurar el controlador de impresora de Windows."
+@@ -2096,14 +1999,10 @@
+ msgstr "cupsaddsmb se ha estropeado con señal %d"
+ 
+ msgid "A Samba username is required to export printer drivers!"
+-msgstr ""
+-"Se requiere un nombre de usuario Samba para exportar los controladores de "
+-"impresora."
++msgstr "Se requiere un nombre de usuario Samba para exportar los controladores de impresora."
+ 
+ msgid "A Samba password is required to export printer drivers!"
+-msgstr ""
+-"Se requiere una contraseña Samba para exportar los controladores de "
+-"impresora."
++msgstr "Se requiere una contraseña Samba para exportar los controladores de impresora."
+ 
+ msgid "Unable to open cupsd.conf file:"
+ msgstr "No se ha podido abrir el archivo cupsd.conf:"
+@@ -2256,13 +2155,10 @@
+ msgstr "cupsaddsmb: No se ha podido ejecutar \"%s\": %s\n"
+ 
+ msgid "cupsaddsmb: No Windows printer drivers are installed!\n"
+-msgstr ""
+-"cupsaddsmb: No está instalado ningún controlador de impresora de Windows.\n"
++msgstr "cupsaddsmb: No está instalado ningún controlador de impresora de Windows.\n"
+ 
+ msgid "cupsaddsmb: Warning, no Windows 2000 printer drivers are installed!\n"
+-msgstr ""
+-"cupsaddsmb: Advertencia, no está instalado ningún controlador de impresora "
+-"de Windows 2000.\n"
++msgstr "cupsaddsmb: Advertencia, no está instalado ningún controlador de impresora de Windows 2000.\n"
+ 
+ #, c-format
+ msgid "lpadmin: Printer %s is already a member of class %s.\n"
+@@ -2305,8 +2201,7 @@
+ msgstr "Uso: lpmove trabajo/fuente destino\n"
+ 
+ msgid "lpstat: Need \"completed\", \"not-completed\", or \"all\" after -W!\n"
+-msgstr ""
+-"lpstat: Se necesita \"completed\", \"not completed\", o \"all\" tras -W.\n"
++msgstr "lpstat: Se necesita \"completed\", \"not completed\", o \"all\" tras -W.\n"
+ 
+ #, c-format
+ msgid "%s accepting requests since %s\n"
+@@ -2356,21 +2251,15 @@
+ msgstr "%s: Error - se esperaba un nombre de ordenador tras la opción '-h'.\n"
+ 
+ #, c-format
+-msgid ""
+-"%s: error - %s environment variable names non-existent destination \"%s\"!\n"
+-msgstr ""
+-"%s: error - %s nombres de variables de entorno no existen en destino \"%s"
+-"\".\n"
++msgid "%s: error - %s environment variable names non-existent destination \"%s\"!\n"
++msgstr "%s: error - %s nombres de variables de entorno no existen en destino \"%s\".\n"
+ 
+ #, c-format
+ msgid "%s: error - no default destination available.\n"
+ msgstr "%s: error - destino predeterminado no disponible.\n"
+ 
+-msgid ""
+-"Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]\n"
+-msgstr ""
+-"Uso: lpq (-P dest) (-U nombre_usuario) (-h nombre_ordenador(:puerto)) (-l) "
+-"(+intervalo)\n"
++msgid "Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]\n"
++msgstr "Uso: lpq (-P dest) (-U nombre_usuario) (-h nombre_ordenador(:puerto)) (-l) (+intervalo)\n"
+ 
+ #, c-format
+ msgid "%s: Error - expected hostname after '-H' option!\n"
+@@ -2381,12 +2270,8 @@
+ msgstr "%s: Error - se esperaba un valor tras la opción '%c'.\n"
+ 
+ #, c-format
+-msgid ""
+-"%s: Warning - '%c' format modifier not supported - output may not be "
+-"correct!\n"
+-msgstr ""
+-"%s: Advertencia - no se admite el uso del modificador de formato '%c' - la "
+-"salida puede no ser correcta.\n"
++msgid "%s: Warning - '%c' format modifier not supported - output may not be correct!\n"
++msgstr "%s: Advertencia - no se admite el uso del modificador de formato '%c' - la salida puede no ser correcta.\n"
+ 
+ #, c-format
+ msgid "%s: error - expected option=value after '-o' option!\n"
+@@ -2417,11 +2302,8 @@
+ msgstr "%s: Error - demasiados archivos - \"%s\"\n"
+ 
+ #, c-format
+-msgid ""
+-"%s: Error - %s environment variable names non-existent destination \"%s\"!\n"
+-msgstr ""
+-"%s: Error - %s nombres de variables de entorno no existen en destino \"%s"
+-"\".\n"
++msgid "%s: Error - %s environment variable names non-existent destination \"%s\"!\n"
++msgstr "%s: Error - %s nombres de variables de entorno no existen en destino \"%s\".\n"
+ 
+ #, c-format
+ msgid "%s: Error - no default destination available.\n"
+@@ -2441,8 +2323,7 @@
+ 
+ #, c-format
+ msgid "%s: Error - stdin is empty, so no job has been sent.\n"
+-msgstr ""
+-"%s: Error - stdin está vacío, por lo tanto no se ha enviado ningún trabajo.\n"
++msgstr "%s: Error - stdin está vacío, por lo tanto no se ha enviado ningún trabajo.\n"
+ 
+ #, c-format
+ msgid "%s: Error - unknown destination \"%s\"!\n"
+@@ -2478,9 +2359,7 @@
+ 
+ #, c-format
+ msgid "%s: Error - cannot print files and alter jobs simultaneously!\n"
+-msgstr ""
+-"%s: Error - no se pueden imprimir archivos y alterar trabajos al mismo "
+-"tiempo.\n"
++msgstr "%s: Error - no se pueden imprimir archivos y alterar trabajos al mismo tiempo.\n"
+ 
+ #, c-format
+ msgid "%s: Error - bad job ID!\n"
+@@ -2520,8 +2399,7 @@
+ 
+ #, c-format
+ msgid "%s: Need job ID ('-i jobid') before '-H restart'!\n"
+-msgstr ""
+-"%s: Se necesita un ID de trabajo ('-i id_trabajo') antes de '-H restart'.\n"
++msgstr "%s: Se necesita un ID de trabajo ('-i id_trabajo') antes de '-H restart'.\n"
+ 
+ #, c-format
+ msgid "%s: Error - expected page list after '-P' option!\n"
+@@ -2544,19 +2422,12 @@
+ msgstr "%s: Advertencia - opción de tipo de contenido no tenida en cuenta.\n"
+ 
+ #, c-format
+-msgid ""
+-"%s: Error - cannot print from stdin if files or a job ID are provided!\n"
+-msgstr ""
+-"%s: Error - no se puede imprimir desde stdin si se proporcionan archivos o "
+-"una ID de trabajo.\n"
++msgid "%s: Error - cannot print from stdin if files or a job ID are provided!\n"
++msgstr "%s: Error - no se puede imprimir desde stdin si se proporcionan archivos o una ID de trabajo.\n"
+ 
+ #, c-format
+-msgid ""
+-"%s: Error - need \"completed\", \"not-completed\", or \"all\" after '-W' "
+-"option!\n"
+-msgstr ""
+-"%s: Error - se necesita \"completed\", \"not completed\", o \"all\" tras la "
+-"opción '-W'.\n"
++msgid "%s: Error - need \"completed\", \"not-completed\", or \"all\" after '-W' option!\n"
++msgstr "%s: Error - se necesita \"completed\", \"not completed\", o \"all\" tras la opción '-W'.\n"
+ 
+ #, c-format
+ msgid "%s: Error - expected destination after '-b' option!\n"
+@@ -2613,14 +2484,10 @@
+ msgstr "Las suscripciones de trabajos no han podido ser renovadas."
+ 
+ msgid "cupsd: Expected config filename after \"-c\" option!\n"
+-msgstr ""
+-"cupsd: Se esperaba un nombre de archivo de configuración tras la opción \"-c"
+-"\".\n"
++msgstr "cupsd: Se esperaba un nombre de archivo de configuración tras la opción \"-c\".\n"
+ 
+ msgid "cupsd: launchd(8) support not compiled in, running in normal mode.\n"
+-msgstr ""
+-"cupsd: el uso de launchd(8) no ha sido compilado, ejecutándose en modo "
+-"normal.\n"
++msgstr "cupsd: el uso de launchd(8) no ha sido compilado, ejecutándose en modo normal.\n"
+ 
+ #, c-format
+ msgid "cupsd: Unknown option \"%c\" - aborting!\n"
+@@ -2651,18 +2518,11 @@
+ msgid "        WARN    Line %d only contains whitespace!\n"
+ msgstr "        ADVERTENCIA    La línea %d solo contiene espacios en blanco.\n"
+ 
+-msgid ""
+-"        WARN    File contains a mix of CR, LF, and CR LF line endings!\n"
+-msgstr ""
+-"        ADVERTENCIA    El archivo contiene una mezcla de líneas acabadas en "
+-"CR, LF y CR LF.\n"
++msgid "        WARN    File contains a mix of CR, LF, and CR LF line endings!\n"
++msgstr "        ADVERTENCIA    El archivo contiene una mezcla de líneas acabadas en CR, LF y CR LF.\n"
+ 
+-msgid ""
+-"        WARN    Non-Windows PPD files should use lines ending with only LF, "
+-"not CR LF!\n"
+-msgstr ""
+-"        ADVERTENCIA    Los archivos PPD que no sean de Windows deben tener "
+-"líneas que acaben sólo en LF, no en CR LF.\n"
++msgid "        WARN    Non-Windows PPD files should use lines ending with only LF, not CR LF!\n"
++msgstr "        ADVERTENCIA    Los archivos PPD que no sean de Windows deben tener líneas que acaben sólo en LF, no en CR LF.\n"
+ 
+ msgid "Printer Maintenance"
+ msgstr "Mantenimiento de impresora"
+@@ -2684,31 +2544,19 @@
+ 
+ #, c-format
+ msgid "      **FAIL**  Missing \"%s\" translation string for option %s!\n"
+-msgstr ""
+-"      **FALLO**  Cadena de traducción \"%s\" para opción %s desaparecida.\n"
++msgstr "      **FALLO**  Cadena de traducción \"%s\" para opción %s desaparecida.\n"
+ 
+ #, c-format
+-msgid ""
+-"      **FAIL**  Default translation string for option %s contains 8-bit "
+-"characters!\n"
+-msgstr ""
+-"      **FALLO**  Cadena de traducción predeterminada para opción %s contiene "
+-"caracteres de 8-bits.\n"
++msgid "      **FAIL**  Default translation string for option %s contains 8-bit characters!\n"
++msgstr "      **FALLO**  Cadena de traducción predeterminada para opción %s contiene caracteres de 8-bits.\n"
+ 
+ #, c-format
+-msgid ""
+-"      **FAIL**  Missing \"%s\" translation string for option %s, choice %s!\n"
+-msgstr ""
+-"      **FALLO**  Cadena de traducción \"%s\" para opción %s, preferencia %"
+-"s.\n"
++msgid "      **FAIL**  Missing \"%s\" translation string for option %s, choice %s!\n"
++msgstr "      **FALLO**  Cadena de traducción \"%s\" para opción %s, preferencia %s.\n"
+ 
+ #, c-format
+-msgid ""
+-"      **FAIL**  Default translation string for option %s choice %s contains "
+-"8-bit characters!\n"
+-msgstr ""
+-"      **FALLO**  Cadena de traducción predeterminada para opción %s "
+-"preferencia %s contiene caracteres de 8-bits.\n"
++msgid "      **FAIL**  Default translation string for option %s choice %s contains 8-bit characters!\n"
++msgstr "      **FALLO**  Cadena de traducción predeterminada para opción %s preferencia %s contiene caracteres de 8-bits.\n"
+ 
+ #, c-format
+ msgid "      **FAIL**  Bad cupsFilter value \"%s\"!\n"
+@@ -2727,50 +2575,37 @@
+ 
+ #, c-format
+ msgid "Bad option + choice on line %d!\n"
+-msgstr "Opción incorrecta + preferencia en línea %s.\n"
++msgstr "Opción incorrecta + preferencia en línea %d.\n"
+ 
+ #, c-format
+ msgid "Unable to copy Windows 2000 printer driver files (%d)!\n"
+-msgstr ""
+-"No se han podido copiar los archivos del controlador de impresora de Windows "
+-"2000 (%d).\n"
++msgstr "No se han podido copiar los archivos del controlador de impresora de Windows 2000 (%d).\n"
+ 
+ #, c-format
+ msgid "Unable to copy CUPS printer driver files (%d)!\n"
+-msgstr ""
+-"No se han podido copiar los archivos del controlador de impresora de CUPS (%"
+-"d).\n"
++msgstr "No se han podido copiar los archivos del controlador de impresora de CUPS (%d).\n"
+ 
+ #, c-format
+ msgid "Unable to install Windows 2000 printer driver files (%d)!\n"
+-msgstr ""
+-"No se han podido instalar los archivos del controlador de impresora de "
+-"Windows 2000 (%d).\n"
++msgstr "No se han podido instalar los archivos del controlador de impresora de Windows 2000 (%d).\n"
+ 
+ #, c-format
+ msgid "Unable to copy Windows 9x printer driver files (%d)!\n"
+-msgstr ""
+-"No se han podido copiar los archivos del controlador de impresora de Windows "
+-"9x (%d).\n"
++msgstr "No se han podido copiar los archivos del controlador de impresora de Windows 9x (%d).\n"
+ 
+ #, c-format
+ msgid "Unable to install Windows 9x printer driver files (%d)!\n"
+-msgstr ""
+-"No se han podido instalar los archivos del controlador de impresora de "
+-"Windows 9x (%d).\n"
++msgstr "No se han podido instalar los archivos del controlador de impresora de Windows 9x (%d).\n"
+ 
+ msgid "No Windows printer drivers are installed!\n"
+ msgstr "No está instalado ningún controlador de impresora de Windows.\n"
+ 
+ msgid "Warning, no Windows 2000 printer drivers are installed!\n"
+-msgstr ""
+-"Advertencia, no está instalado ningún controlador de impresora de Windows "
+-"2000.\n"
++msgstr "Advertencia, no está instalado ningún controlador de impresora de Windows 2000.\n"
+ 
+ #, c-format
+ msgid "Unable to set Windows printer driver (%d)!\n"
+-msgstr ""
+-"No se ha podido configurar el controlador de impresora de Windows (%d).\n"
++msgstr "No se ha podido configurar el controlador de impresora de Windows (%d).\n"
+ 
+ msgid ""
+ "Usage: cupsaddsmb [options] printer1 ... printerN\n"
+@@ -2788,8 +2623,7 @@
+ "       cupsaddsmb [opciones] -a\n"
+ "\n"
+ "Opciones:\n"
+-"  -E               Hace que se use encriptación en la conexión con el "
+-"servidor\n"
++"  -E               Hace que se use encriptación en la conexión con el servidor\n"
+ "  -H servidor_samba  Usa el servidor SAMBA especificado\n"
+ "  -U usuario_samba    Autentifica usando el usuario SAMBA especificado\n"
+ "  -a               Exporta todas las impresoras\n"
+@@ -2798,41 +2632,29 @@
+ 
+ #, c-format
+ msgid "Unable to copy Windows 2000 printer driver files (%d)!"
+-msgstr ""
+-"No se han podido copiar los archivos del controlador de impresora de Windows "
+-"2000 (%d)."
++msgstr "No se han podido copiar los archivos del controlador de impresora de Windows 2000 (%d)."
+ 
+ #, c-format
+ msgid "Unable to copy CUPS printer driver files (%d)!"
+-msgstr ""
+-"No se han podido copiar los archivos del controlador de impresora de CUPS (%"
+-"d)."
++msgstr "No se han podido copiar los archivos del controlador de impresora de CUPS (%d)."
+ 
+ #, c-format
+ msgid "Unable to install Windows 2000 printer driver files (%d)!"
+-msgstr ""
+-"No se han podido instalar los archivos del controlador de impresora de "
+-"Windows 2000 (%d)."
++msgstr "No se han podido instalar los archivos del controlador de impresora de Windows 2000 (%d)."
+ 
+ #, c-format
+ msgid "Unable to copy Windows 9x printer driver files (%d)!"
+-msgstr ""
+-"No se han podido copiar los archivos del controlador de impresora de Windows "
+-"9x (%d)."
++msgstr "No se han podido copiar los archivos del controlador de impresora de Windows 9x (%d)."
+ 
+ #, c-format
+ msgid "Unable to install Windows 9x printer driver files (%d)!"
+-msgstr ""
+-"No se han podido instalar los archivos del controlador de impresora de "
+-"Windows 9x (%d)."
++msgstr "No se han podido instalar los archivos del controlador de impresora de Windows 9x (%d)."
+ 
+ msgid "No Windows printer drivers are installed!"
+ msgstr "No está instalado ningún controlador de impresora de Windows."
+ 
+ msgid "Warning, no Windows 2000 printer drivers are installed!"
+-msgstr ""
+-"Advertencia, no está instalado ningún controlador de impresora de Windows "
+-"2000."
++msgstr "Advertencia, no está instalado ningún controlador de impresora de Windows 2000."
+ 
+ #, c-format
+ msgid "open of %s failed: %s"
+@@ -2859,12 +2681,8 @@
+ msgstr "El trabajo #%d ya ha sido completado - no se puede cancelar."
+ 
+ #, c-format
+-msgid ""
+-"You must access this page using the URL <A HREF=\"https://%s:%d%s\">https://%"
+-"s:%d%s</A>."
+-msgstr ""
+-"Debe acceder a esta página usando el URL <A HREF=\"https://%s:%d%s\">https://"
+-"%s:%d%s</A>."
++msgid "You must access this page using the URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A>."
++msgstr "Debe acceder a esta página usando el URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A>."
+ 
+ #, c-format
+ msgid "Unsupported format '%s'!"
+@@ -2978,8 +2796,7 @@
+ "\n"
+ "    -h       Show program usage\n"
+ "\n"
+-"    Note: this program only validates the DSC comments, not the PostScript "
+-"itself.\n"
++"    Note: this program only validates the DSC comments, not the PostScript itself.\n"
+ msgstr ""
+ "Uso: cupstestdsc [opciones] nombre_archivo.ps [... nombre_archivo.ps]\n"
+ "       cupstestdsc [opciones] -\n"
+@@ -2988,17 +2805,16 @@
+ "\n"
+ "    -h       Muestra cómo se usa el programa\n"
+ "\n"
+-"    Nota: este programa sólo valida los comentarios DSC, no el PostScript en "
+-"sí mismo.\n"
++"    Nota: este programa sólo valida los comentarios DSC, no el PostScript en sí mismo.\n"
+ 
+ #, c-format
+ msgid "Password for %s on %s? "
+-msgstr ""
++msgstr "¿Contraseña de %s en %s? "
+ 
+-#, fuzzy
+ msgid ""
+ "      **FAIL**  1284DeviceId must be 1284DeviceID!\n"
+ "                REF: Page 72, section 5.5\n"
+ msgstr ""
+-"      **FALLO**  Preferencia %s incorrecta %s.\n"
+-"                REF: Página 122, sección 5.17\n"
++"      **FALLO**  1284DeviceId debe ser 1284DeviceID.\n"
++"                REF: Página 72, sección 5.5\n"
++
+diff -urNad cupsys-1.2.1~/locale/cups_ja.po cupsys-1.2.1/locale/cups_ja.po
+--- cupsys-1.2.1~/locale/cups_ja.po	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/locale/cups_ja.po	2006-07-19 00:40:14.000000000 +0000
+@@ -26,7 +26,7 @@
+ "Project-Id-Version: CUPS 1.2\n"
+ "Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
+ "POT-Creation-Date: 2006-05-21 10:08-0400\n"
+-"PO-Revision-Date: 2006-03-29 23:44+0900\n"
++"PO-Revision-Date: 2006-06-27 22:55+0900\n"
+ "Last-Translator: Kenshi Muto <kmuto at debian.org>\n"
+ "Language-Team: Japanese <LL at li.org>\n"
+ "MIME-Version: 1.0\n"
+@@ -2929,12 +2929,11 @@
+ 
+ #, c-format
+ msgid "Password for %s on %s? "
+-msgstr ""
++msgstr "%s のパスワード (%s 上)? "
+ 
+-#, fuzzy
+ msgid ""
+ "      **FAIL**  1284DeviceId must be 1284DeviceID!\n"
+ "                REF: Page 72, section 5.5\n"
+ msgstr ""
+-"      **FAIL**  不正な %s が %s を選んでいます!\n"
+-"                REF: 122 ページ、セクション 5.17\n"
++"      **FAIL**  1284DeviceId は 1284DeviceID でなければなりません!\n"
++"                REF: 72 ページ、セクション 5.5\n"
+diff -urNad cupsys-1.2.1~/man/Makefile cupsys-1.2.1/man/Makefile
+--- cupsys-1.2.1~/man/Makefile	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/man/Makefile	2006-07-19 00:40:14.000000000 +0000
+@@ -44,6 +44,7 @@
+ 		client.conf.$(MAN5EXT) \
+ 		cups-snmp.conf.$(MAN5EXT) \
+ 		cupsd.conf.$(MAN5EXT) \
++		mailto.conf.$(MAN5EXT) \
+ 		mime.convs.$(MAN5EXT) \
+ 		mime.types.$(MAN5EXT) \
+ 		printers.conf.$(MAN5EXT) \
+diff -urNad cupsys-1.2.1~/man/cupsaddsmb.man.in cupsys-1.2.1/man/cupsaddsmb.man.in
+--- cupsys-1.2.1~/man/cupsaddsmb.man.in	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/man/cupsaddsmb.man.in	2006-07-19 00:40:14.000000000 +0000
+@@ -21,7 +21,7 @@
+ .\"       EMail: cups-info at cups.org
+ .\"         WWW: http://www.cups.org
+ .\"
+-.TH cupsaddsmb 8 "Common UNIX Printing System" "19 April 2006" "Easy Software Products"
++.TH cupsaddsmb 8 "Common UNIX Printing System" "13 June 2006" "Easy Software Products"
+ .SH NAME
+ cupsaddsmb \- export printers to samba for windows clients
+ 
+@@ -162,13 +162,14 @@
+ .nf
+ 
+     [Windows 2000 and higher]
+-    cups6.ini
+-    cupsui6.dll
+-    cupsdrv6.dll
+-    ps5ui.dll
+-    pscript.hlp
+-    pscript.ntf
+-    pscript5.dll
++    cups6.inf (from www.cups.org)
++    cups6.ini (from www.cups.org)
++    cupsps6.dll (from www.cups.org)
++    cupsui6.dll (from www.cups.org)
++    ps5ui.dll (from your Windows system)
++    pscript.hlp (from your Windows system)
++    pscript.ntf (from your Windows system)
++    pscript5.dll (from your Windows system)
+ .fi
+ .LP
+ \fBNote:\fR Unlike Windows, case is significant - make sure that
+diff -urNad cupsys-1.2.1~/man/cupsd.conf.man.in cupsys-1.2.1/man/cupsd.conf.man.in
+--- cupsys-1.2.1~/man/cupsd.conf.man.in	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/man/cupsd.conf.man.in	2006-07-19 00:40:14.000000000 +0000
+@@ -21,7 +21,7 @@
+ .\"       EMail: cups-info at cups.org
+ .\"         WWW: http://www.cups.org
+ .\"
+-.TH cupsd.conf 5 "Common UNIX Printing System" "23 March 2006" "Easy Software Products"
++.TH cupsd.conf 5 "Common UNIX Printing System" "6 June 2006" "Easy Software Products"
+ .SH NAME
+ cupsd.conf \- server configuration file for cups
+ .SH DESCRIPTION
+@@ -367,8 +367,10 @@
+ Listen ip-address:port
+ .TP 5
+ Listen *:port
++.TP 5
++Listen /path/to/domain/socket
+ .br
+-Listens to the specified address and port.
++Listens to the specified address and port or domain socket path.
+ .TP 5
+ <Location /path> ... </Location>
+ .br
+diff -urNad cupsys-1.2.1~/man/lpadmin.man cupsys-1.2.1/man/lpadmin.man
+--- cupsys-1.2.1~/man/lpadmin.man	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/man/lpadmin.man	2006-07-19 00:40:14.000000000 +0000
+@@ -21,7 +21,7 @@
+ .\"       EMail: cups-info at cups.org
+ .\"         WWW: http://www.cups.org
+ .\"
+-.TH lpadmin 8 "Common UNIX Printing System" "23 March 2006" "Easy Software Products"
++.TH lpadmin 8 "Common UNIX Printing System" "13 July 2006" "Easy Software Products"
+ .SH NAME
+ lpadmin \- configure cups printers and classes
+ .SH SYNOPSIS
+@@ -123,6 +123,27 @@
+ Sets the binary communications program to use when printing,
+ "none", "bcp", or "tbcp". The default program is "none".
+ .TP 5
++-o printer-error-policy=name
++.br
++Sets the error policy to be used when the printer backend is 
++unable to send the job to the printer. The name must be one of 
++"cancel-job", "retry-job" or "stop-printer". The default error 
++policy is "stop-printer".
++.TP 5
++-o printer-is-shared=true/false
++.br
++Sets the printer to shared/published or unshared/unpublished.
++Shared/published printers are publically announced by the server
++on the LAN based on the browsing configuration in
++\fBcupsd.conf\fR, while unshared/unpublished printers are not
++announced. The default value is "true".
++.TP 5
++-o printer-op-policy=name
++.br
++Sets the IPP operation policy associated with the printer. The
++name must be defined in the \fBcupsd.conf\fR in a Policy section.
++The default operation policy is "default".
++.TP 5
+ -r class
+ .br
+ Removes the named \fIprinter\fR from \fIclass\fR.  If the
+@@ -144,7 +165,8 @@
+ .br
+ Sets the \fIdevice-uri\fR attribute of the printer queue.  If
+ \fIdevice-uri\fR is a filename it is automatically converted to
+-the form \fIfile:///file/name\fR.
++the form \fIfile:///file/name\fR. Use the \fIlpinfo(8)\fR command
++to get a list of supported device URIs and schemes.
+ .TP 5
+ -D "info"
+ .br
+@@ -176,7 +198,8 @@
+ The CUPS version of \fIlpadmin\fR does not support all of the
+ System V or Solaris printing system configuration options.
+ .SH SEE ALSO
+-\fIaccept(8)\fR, \fIcupsenable(8)\fR, \fIlpoptions(1)\fR,
++\fIaccept(8)\fR, \fIcupsenable(8)\fR, \fIlpinfo(8)\fR,
++\fIlpoptions(1)\fR,
+ .br
+ http://localhost:631/help
+ .SH COPYRIGHT
+diff -urNad cupsys-1.2.1~/man/mailto.conf.man cupsys-1.2.1/man/mailto.conf.man
+--- cupsys-1.2.1~/man/mailto.conf.man	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/man/mailto.conf.man	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1,69 @@
++.\"
++.\" "$Id$"
++.\"
++.\"   mailto.conf man page for the Common UNIX Printing System (CUPS).
++.\"
++.\"   Copyright 1997-2006 by Easy Software Products.
++.\"
++.\"   These coded instructions, statements, and computer programs are the
++.\"   property of Easy Software Products and are protected by Federal
++.\"   copyright law.  Distribution and use rights are outlined in the file
++.\"   "LICENSE.txt" which should have been included with this file.  If this
++.\"   file is missing or damaged please contact Easy Software Products
++.\"   at:
++.\"
++.\"       Attn: CUPS Licensing Information
++.\"       Easy Software Products
++.\"       44141 Airport View Drive, Suite 204
++.\"       Hollywood, Maryland 20636 USA
++.\"
++.\"       Voice: (301) 373-9600
++.\"       EMail: cups-info at cups.org
++.\"         WWW: http://www.cups.org
++.\"
++.TH mailto.conf 5 "Common UNIX Printing System" "12 July 2006" "Easy Software Products"
++.SH NAME
++mailto.conf \- configuration file for cups email notifier
++.SH DESCRIPTION
++The \fImailto.conf\fR file defines the local mail server and
++email notification preferences for CUPS.
++.LP
++Each line in the file can be a configuration directive, a blank line,
++or a comment. Comment lines start with the # character.
++.SH DIRECTIVES
++.TP 5
++Cc \fIcc-address at domain.com\fR
++.br
++Specifies an additional recipient for all email notifications.
++.TP 5
++From \fIfrom-address at domain.com\fR
++.br
++Specifies the sender of email notifications.
++.TP 5
++Sendmail \fIsendmail command and options\fR
++.br
++Specifies the sendmail command to use when sending email
++notifications. Only one \fISendmail\fR or \fISMTPServer\fR line
++may be present in the \fImailto.conf\fR file. If multiple lines
++are present, only the last one is used.
++.TP 5
++SMTPServer \fIservername\fR
++.br
++Specifies a SMTP server to send email notifications to. Only one
++\fISendmail\fR or \fISMTPServer\fR line may be present in the
++\fImailto.conf\fR file. If multiple lines are present, only the
++last one is used.
++.TP 5
++Subject \fIsubject-prefix\fR
++.br
++Specifies a prefix string for the subject line of an email notification.
++.SH SEE ALSO
++\fIclasses.conf(5)\fR, \fIcupsd(8)\fR, \fIcupsd.conf(5)\fR,
++\fImime.convs(5)\fR, \fImime.types(5)\fR, \fIprinters.conf(5)\fR,
++.br
++http://localhost:631/help
++.SH COPYRIGHT
++Copyright 1997-2006 by Easy Software Products, All Rights Reserved.
++.\"
++.\" End of "$Id$".
++.\"
+diff -urNad cupsys-1.2.1~/notifier/testnotify.c cupsys-1.2.1/notifier/testnotify.c
+--- cupsys-1.2.1~/notifier/testnotify.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/notifier/testnotify.c	2006-07-19 00:40:11.000000000 +0000
+@@ -82,6 +82,14 @@
+ 
+     print_attributes(event, 4);
+     ippDelete(event);
++
++   /*
++    * If the recipient URI is "testnotify://nowait", then we exit after each
++    * event...
++    */
++
++    if (!strcmp(argv[1], "testnotify://nowait"))
++      return (0);
+   }
+ }
+ 
+diff -urNad cupsys-1.2.1~/packaging/cups.list.in cupsys-1.2.1/packaging/cups.list.in
+--- cupsys-1.2.1~/packaging/cups.list.in	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/packaging/cups.list.in	2006-07-19 00:40:11.000000000 +0000
+@@ -97,6 +97,9 @@
+ %provides cups-lpd 1:@CUPS_VERSION@
+ %format all
+ 
++%subpackage de
++%description Common UNIX Printing System - German support
++
+ %subpackage es
+ %description Common UNIX Printing System - Spanish support
+ 
+@@ -173,6 +176,7 @@
+ $MAN1EXT=@MAN1EXT@
+ $MAN5EXT=@MAN5EXT@
+ $MAN7EXT=@MAN7EXT@
++$MAN8EXT=@MAN8EXT@
+ $MAN8DIR=@MAN8DIR@
+ 
+ $DSOLIBS=@DSOLIBS@
+@@ -270,7 +274,7 @@
+ f 0755 root sys $BINDIR/cupstestppd systemv/cupstestppd
+ f 0755 root sys $BINDIR/lp systemv/lp
+ f 0755 root sys $BINDIR/lpoptions systemv/lpoptions
+-f 4755 $CUPS_USER sys $BINDIR/lppasswd systemv/lppasswd
++f 4755 root sys $BINDIR/lppasswd systemv/lppasswd
+ f 0755 root sys $BINDIR/lpq berkeley/lpq
+ f 0755 root sys $BINDIR/lpr berkeley/lpr
+ f 0755 root sys $BINDIR/lprm berkeley/lprm
+@@ -337,12 +341,14 @@
+ d 0511 root $CUPS_PRIMARY_SYSTEM_GROUP $STATEDIR/certs -
+ 
+ # Data files
++%subpackage de
++f 0644 root sys $LOCALEDIR/es/cups_de.po locale/cups_de.po
+ %subpackage es
+ f 0644 root sys $LOCALEDIR/es/cups_es.po locale/cups_es.po
+ %subpackage ja
+ f 0644 root sys $LOCALEDIR/ja/cups_ja.po locale/cups_ja.po
+ %subpackage pl
+-#f 0644 root sys $LOCALEDIR/pl/cups_pl.po locale/cups_pl.po
++f 0644 root sys $LOCALEDIR/pl/cups_pl.po locale/cups_pl.po
+ %subpackage sv
+ f 0644 root sys $LOCALEDIR/sv/cups_sv.po locale/cups_sv.po
+ %subpackage
+@@ -400,6 +406,9 @@
+ c 0644 root sys $DATADIR/templates templates/*.tmpl
+ 
+ # Japanese template files
++%subpackage de
++d 0755 root sys $DATADIR/templates/de
++f 0644 root sys $DATADIR/templates/de templates/de/*.tmpl
+ %subpackage es
+ d 0755 root sys $DATADIR/templates/es
+ f 0644 root sys $DATADIR/templates/es templates/es/*.tmpl
+@@ -418,6 +427,7 @@
+ d 0755 root sys $SERVERROOT -
+ d 0755 root $CUPS_GROUP $SERVERROOT/interfaces -
+ d 0755 root $CUPS_GROUP $SERVERROOT/ppd -
++d 0700 root $CUPS_GROUP $SERVERROOT/ssl -
+ c $CUPS_PERM root $CUPS_GROUP $SERVERROOT conf/*.conf
+ f $CUPS_PERM root $CUPS_GROUP $SERVERROOT/cupsd.conf.default conf/cupsd.conf
+ f 0644 root $CUPS_GROUP $SERVERROOT/mime.convs conf/mime.convs
+@@ -462,6 +472,7 @@
+ f 0644 root sys $DOCDIR/help/network.html doc/help/network.html
+ f 0644 root sys $DOCDIR/help/options.html doc/help/options.html
+ f 0644 root sys $DOCDIR/help/overview.html doc/help/overview.html
++f 0644 root sys $DOCDIR/help/policies.html doc/help/policies.html
+ f 0644 root sys $DOCDIR/help/security.html doc/help/security.html
+ f 0644 root sys $DOCDIR/help/standard.html doc/help/standard.html
+ f 0644 root sys $DOCDIR/help/translation.html doc/help/translation.html
+@@ -475,6 +486,11 @@
+ f 0644 root sys $DOCDIR/robots.txt doc/robots.txt
+ 
+ # Localized documentation files
++%subpackage de
++d 0755 root sys $DOCDIR/de
++f 0644 root sys $DOCDIR/de doc/de/*.html
++d 0755 root sys $DOCDIR/de/images -
++f 0644 root sys $DOCDIR/de/images doc/de/images/*.gif
+ %subpackage es
+ d 0755 root sys $DOCDIR/es
+ f 0644 root sys $DOCDIR/es doc/es/*.html
+@@ -518,6 +534,7 @@
+ 
+ f 0644 root sys $MANDIR/man5/classes.conf.$MAN5EXT man/classes.conf.$MAN5EXT
+ f 0644 root sys $MANDIR/man5/cupsd.conf.$MAN5EXT man/cupsd.conf.$MAN5EXT
++f 0644 root sys $MANDIR/man5/mailto.conf.$MAN5EXT man/mailto.conf.$MAN5EXT
+ f 0644 root sys $MANDIR/man5/mime.convs.$MAN5EXT man/mime.convs.$MAN5EXT
+ f 0644 root sys $MANDIR/man5/mime.types.$MAN5EXT man/mime.types.$MAN5EXT
+ f 0644 root sys $MANDIR/man5/printers.conf.$MAN5EXT man/printers.conf.$MAN5EXT
+diff -urNad cupsys-1.2.1~/packaging/cups.spec.in cupsys-1.2.1/packaging/cups.spec.in
+--- cupsys-1.2.1~/packaging/cups.spec.in	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/packaging/cups.spec.in	2006-07-19 00:40:11.000000000 +0000
+@@ -76,6 +76,11 @@
+ Group: System Environment/Daemons
+ Requires: %{name} = %{epoch}:%{version} xinetd
+ 
++%package de
++Summary: Common UNIX Printing System - German support
++Group: System Environment/Daemons
++Requires: %{name} = %{epoch}:%{version}
++
+ %package es
+ Summary: Common UNIX Printing System - Spanish support
+ Group: System Environment/Daemons
+@@ -204,6 +209,7 @@
+ /etc/cups/mime.types
+ /etc/cups/mime.convs
+ %dir /etc/cups/ppd
++%attr(0700,root,root) %dir /etc/cups/ssl
+ 
+ %if %{?_with_dbus:1}%{!?_with_dbus:0}
+ # DBUS
+@@ -291,6 +297,7 @@
+ /usr/share/doc/cups/help/network.html
+ /usr/share/doc/cups/help/options.html
+ /usr/share/doc/cups/help/overview.html
++/usr/share/doc/cups/help/policies.html
+ /usr/share/doc/cups/help/ref-*.html
+ /usr/share/doc/cups/help/security.html
+ /usr/share/doc/cups/help/standard.html
+@@ -371,6 +378,16 @@
+ %dir /usr/share/man/man8
+ /usr/share/man/man8/cups-lpd.8.gz
+ 
++%files de
++%defattr(-,root,root)
++%dir /usr/share/doc/cups/de
++/usr/share/doc/cups/de/index.html
++%dir /usr/share/doc/cups/de/images
++/usr/share/doc/cups/de/images/*
++%dir /usr/share/cups/templates/de
++/usr/share/cups/templates/de/*
++/usr/share/locale/de/cups_de.po
++
+ %files es
+ %defattr(-,root,root)
+ %dir /usr/share/doc/cups/es
+@@ -399,7 +416,7 @@
+ /usr/share/doc/cups/pl/images/*
+ %dir /usr/share/cups/templates/pl
+ /usr/share/cups/templates/pl/*
+-#/usr/share/locale/pl/cups_pl.po
++/usr/share/locale/pl/cups_pl.po
+ 
+ %files sv
+ %defattr(-,root,root)
+diff -urNad cupsys-1.2.1~/pdftops/PSOutputDev.cxx cupsys-1.2.1/pdftops/PSOutputDev.cxx
+--- cupsys-1.2.1~/pdftops/PSOutputDev.cxx	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/pdftops/PSOutputDev.cxx	2006-07-19 00:40:11.000000000 +0000
+@@ -1158,7 +1158,7 @@
+     break;
+   }
+ 
+-  writePSFmt("% Produced by xpdf/pdftops %s\n", xpdfVersion);
++  writePSFmt("%%Producer: xpdf/pdftops %s\n", xpdfVersion);
+   xref->getDocInfo(&info);
+   if (info.dictLookup("Creator", &obj1)->isString()) {
+     writePS("%%Creator: ");
+diff -urNad cupsys-1.2.1~/ppd/zebracpl.ppd cupsys-1.2.1/ppd/zebracpl.ppd
+--- cupsys-1.2.1~/ppd/zebracpl.ppd	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/ppd/zebracpl.ppd	2006-07-19 00:40:11.000000000 +0000
+@@ -120,6 +120,14 @@
+ *Resolution 203dpi/203 DPI: "<</HWResolution[203 203]>>setpagedevice"
+ *CloseUI: *Resolution
+ 
++*OpenUI *zeMediaTracking/Media Tracking: PickOne
++*OrderDependency: 20 AnySetup *zeMediaTracking
++*DefaultzeMediaTracking: Web
++*zeMediaTracking Continuous: ""
++*zeMediaTracking Web/Non-continuous (Web sensing): ""
++*zeMediaTracking Mark/Non-continuous (Mark sensing): ""
++*CloseUI: *zeMediaTracking
++
+ *OpenGroup: PrinterSettings/Printer Settings
+ *OpenUI *Darkness/Media Darkness: PickOne
+ *OrderDependency: 20 AnySetup *Darkness
+diff -urNad cupsys-1.2.1~/scheduler/Makefile cupsys-1.2.1/scheduler/Makefile
+--- cupsys-1.2.1~/scheduler/Makefile	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/scheduler/Makefile	2006-07-19 00:40:15.000000000 +0000
+@@ -127,6 +127,9 @@
+ 	echo Creating $(SERVERROOT)/ppd...
+ 	$(INSTALL_DIR) -m 755 $(SERVERROOT)/ppd
+ 	-chgrp $(CUPS_GROUP) $(SERVERROOT)/ppd
++	echo Creating $(SERVERROOT)/ssl...
++	$(INSTALL_DIR) -m 700 $(SERVERROOT)/ssl
++	-chgrp $(CUPS_GROUP) $(SERVERROOT)/ssl
+ 	echo Creating $(STATEDIR)...
+ 	$(INSTALL_DIR) -m 755 $(STATEDIR)
+ 	echo Creating $(STATEDIR)/certs...
+diff -urNad cupsys-1.2.1~/scheduler/auth.c cupsys-1.2.1/scheduler/auth.c
+--- cupsys-1.2.1~/scheduler/auth.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/scheduler/auth.c	2006-07-19 00:40:15.000000000 +0000
+@@ -869,9 +869,12 @@
+ 	    */
+ 
+ 	    for (iface = (cupsd_netif_t *)cupsArrayFirst(NetIFList);
+-	         iface && !strcmp(masks->mask.name.name, iface->name);
++	         iface;
+ 		 iface = (cupsd_netif_t *)cupsArrayNext(NetIFList))
+ 	    {
++              if (strcmp(masks->mask.name.name, iface->name))
++                continue;
++
+               if (iface->address.addr.sa_family == AF_INET)
+ 	      {
+ 	       /*
+diff -urNad cupsys-1.2.1~/scheduler/client.c cupsys-1.2.1/scheduler/client.c
+--- cupsys-1.2.1~/scheduler/client.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/scheduler/client.c	2006-07-19 00:40:15.000000000 +0000
+@@ -54,6 +54,11 @@
+ 
+ #ifdef HAVE_CDSASSL
+ #  include <Security/Security.h>
++#  ifdef HAVE_SECBASEPRIV_H
++#    include <Security/SecBasePriv.h>
++#  else
++     extern const char *cssmErrorString(int error);
++#  endif /* HAVE_SECBASEPRIV_H */
+ #endif /* HAVE_CDSASSL */
+ #ifdef HAVE_GNUTLS
+ #  include <gnutls/x509.h>
+@@ -78,9 +83,9 @@
+ static int		is_cgi(cupsd_client_t *con, const char *filename,
+ 		               struct stat *filestats, mime_type_t *type);
+ static int		is_path_absolute(const char *path);
+-#ifdef HAVE_GNUTLS
+-static void		make_certificate(void);
+-#endif /* HAVE_GNUTLS */
++#ifdef HAVE_SSL
++static int		make_certificate(void);
++#endif /* HAVE_SSL */
+ static int		pipe_command(cupsd_client_t *con, int infile, int *outfile,
+ 			             char *command, char *options, int root);
+ static int		write_file(cupsd_client_t *con, http_status_t code,
+@@ -1882,24 +1887,27 @@
+ 
+ 
+   if (con->filename)
++  {
+     fd = open(con->filename, O_RDONLY);
+-  else
+-    fd = open("/dev/null", O_RDONLY);
+ 
+-  if (fd < 0)
+-  {
+-    cupsdLogMessage(CUPSD_LOG_ERROR,
+-                    "cupsdSendCommand: %d Unable to open \"%s\" for reading: %s",
+-                    con->http.fd, con->filename ? con->filename : "/dev/null",
+-	            strerror(errno));
+-    return (0);
+-  }
++    if (fd < 0)
++    {
++      cupsdLogMessage(CUPSD_LOG_ERROR,
++                      "cupsdSendCommand: %d Unable to open \"%s\" for reading: %s",
++                      con->http.fd, con->filename ? con->filename : "/dev/null",
++	              strerror(errno));
++      return (0);
++    }
+ 
+-  fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC);
++    fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC);
++  }
++  else
++    fd = -1;
+ 
+   con->pipe_pid = pipe_command(con, fd, &(con->file), command, options, root);
+ 
+-  close(fd);
++  if (fd >= 0)
++    close(fd);
+ 
+   cupsdLogMessage(CUPSD_LOG_INFO, "Started \"%s\" (pid=%d)", command,
+                   con->pipe_pid);
+@@ -2520,6 +2528,20 @@
+ 
+ 
+  /*
++  * Verify that we have a certificate...
++  */
++
++  if (access(ServerKey, 0) || access(ServerCertificate, 0))
++  {
++   /*
++    * Nope, make a self-signed certificate...
++    */
++
++    if (!make_certificate())
++      return (0);
++  }
++
++ /*
+   * Create the SSL context and accept the connection...
+   */
+ 
+@@ -2571,7 +2593,8 @@
+     * Nope, make a self-signed certificate...
+     */
+ 
+-    make_certificate();
++    if (!make_certificate())
++      return (0);
+   }
+ 
+  /*
+@@ -2646,6 +2669,16 @@
+ 
+   if (!conn->certsArray)
+   {
++   /*
++    * No keychain (yet), make a self-signed certificate...
++    */
++
++    if (make_certificate())
++      conn->certsArray = get_cdsa_server_certs();
++  }
++
++  if (!conn->certsArray)
++  {
+     cupsdLogMessage(CUPSD_LOG_ERROR,
+         	    "EncryptClient: Could not find signing key in keychain "
+ 		    "\"%s\"", ServerCertificate);
+@@ -2659,7 +2692,7 @@
+     error = SSLSetIOFuncs(conn->session, _httpReadCDSA, _httpWriteCDSA);
+ 
+   if (!error)
+-    error = SSLSetProtocolVersion(conn->session, kSSLProtocol3);
++    error = SSLSetProtocolVersionEnabled(conn->session, kSSLProtocol2, false);
+ 
+   if (!error)
+   {
+@@ -2697,8 +2730,8 @@
+                     "encrypt_client: Unable to encrypt connection from %s!",
+                     con->http.hostname);
+ 
+-    cupsdLogMessage(CUPSD_LOG_ERROR,
+-                    "encrypt_client: CDSA error code is %d", (int)error);
++    cupsdLogMessage(CUPSD_LOG_ERROR, "encrypt_client: %s (%d)",
++                    cssmErrorString(error), (int)error);
+ 
+     con->http.error  = error;
+     con->http.status = HTTP_ERROR;
+@@ -3308,14 +3341,92 @@
+ }
+ 
+ 
+-#ifdef HAVE_GNUTLS
++#ifdef HAVE_SSL
+ /*
+  * 'make_certificate()' - Make a self-signed SSL/TLS certificate.
+  */
+ 
+-static void
++static int				/* O - 1 on success, 0 on failure */
+ make_certificate(void)
+ {
++#if defined(HAVE_LIBSSL) && defined(HAVE_WAITPID)
++  int	pid,				/* Process ID of command */
++	status;				/* Status of command */
++  char	command[1024],			/* Command */
++	*argv[11],			/* Command-line arguments */
++	*envp[MAX_ENV];			/* Environment variables */
++
++
++ /*
++  * Run the "openssl" command to generate a self-signed certificate
++  * that is good for 10 years:
++  *
++  *     openssl req -new -x509 -keyout ServerKey \
++  *             -out ServerCertificate -days 3650 -nodes
++  */
++
++  if (!cupsFileFind("openssl", getenv("PATH"), 1, command, sizeof(command)))
++  {
++    cupsdLogMessage(CUPSD_LOG_ERROR,
++                    "No SSL certificate and openssl command not found!");
++    return (0);
++  }
++
++  cupsdLogMessage(CUPSD_LOG_INFO,
++                  "Generating SSL server key and certificate...");
++
++  argv[0]  = "openssl";
++  argv[1]  = "req";
++  argv[2]  = "-new";
++  argv[3]  = "-x509";
++  argv[4]  = "-keyout";
++  argv[5]  = ServerKey;
++  argv[6]  = "-out";
++  argv[7]  = ServerCertificate;
++  argv[8]  = "-days";
++  argv[9]  = "3650";
++  argv[10] = "-nodes";
++  argv[11] = NULL;
++
++  cupsdLoadEnv(envp, MAX_ENV);
++
++  if (!cupsdStartProcess(command, argv, envp, -1, -1, -1, -1, 1, &pid))
++    return (0);
++
++  while (waitpid(pid, &status, 0) < 0)
++    if (errno != EINTR)
++    {
++      status = 1;
++      break;
++    }
++
++  cupsdFinishProcess(pid, command, sizeof(command));
++
++  if (status)
++  {
++    if (WIFEXITED(status))
++      cupsdLogMessage(CUPSD_LOG_ERROR,
++                      "Unable to create SSL server key and certificate - "
++		      "the openssl command stopped with status %d!",
++	              WEXITSTATUS(status));
++    else
++      cupsdLogMessage(CUPSD_LOG_ERROR,
++                      "Unable to create SSL server key and certificate - "
++		      "the openssl command crashed on signal %d!",
++	              WTERMSIG(status));
++  }
++  else
++  {
++    cupsdLogMessage(CUPSD_LOG_INFO, "Created SSL server key file \"%s\"...",
++		    ServerKey);
++    cupsdLogMessage(CUPSD_LOG_INFO,
++                    "Created SSL server certificate file \"%s\"...",
++		    ServerCertificate);
++  }
++
++  return (!status);
++
++#elif defined(HAVE_GNUTLS)
+   gnutls_x509_crt	crt;		/* Self-signed certificate */
+   gnutls_x509_privkey	key;		/* Encryption key */
+   cups_lang_t		*language;	/* Default language info */
+@@ -3331,7 +3442,7 @@
+   * Create the encryption key...
+   */
+ 
+-  cupsdLogMessage(CUPSD_LOG_INFO, "Generating server key...");
++  cupsdLogMessage(CUPSD_LOG_INFO, "Generating SSL server key...");
+ 
+   gnutls_x509_privkey_init(&key);
+   gnutls_x509_privkey_generate(key, GNUTLS_PK_RSA, 2048, 0);
+@@ -3345,33 +3456,33 @@
+   if ((result = gnutls_x509_privkey_export(key, GNUTLS_X509_FMT_PEM,
+                                            buffer, &bytes)) < 0)
+   {
+-    cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to export server key - %s",
++    cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to export SSL server key - %s",
+                     gnutls_strerror(result));
+     gnutls_x509_privkey_deinit(key);
+-    return;
++    return (0);
+   }
+   else if ((fp = cupsFileOpen(ServerKey, "w")) != NULL)
+   {
+     cupsFileWrite(fp, (char *)buffer, bytes);
+     cupsFileClose(fp);
+ 
+-    cupsdLogMessage(CUPSD_LOG_INFO, "Created server key file \"%s\"...",
++    cupsdLogMessage(CUPSD_LOG_INFO, "Created SSL server key file \"%s\"...",
+ 		    ServerKey);
+   }
+   else
+   {
+     cupsdLogMessage(CUPSD_LOG_ERROR,
+-                    "Unable to create server key file \"%s\" - %s",
++                    "Unable to create SSL server key file \"%s\" - %s",
+ 		    ServerKey, strerror(errno));
+     gnutls_x509_privkey_deinit(key);
+-    return;
++    return (0);
+   }
+ 
+  /*
+   * Create the self-signed certificate...
+   */
+ 
+-  cupsdLogMessage(CUPSD_LOG_INFO, "Generating self-signed certificate...");
++  cupsdLogMessage(CUPSD_LOG_INFO, "Generating self-signed SSL certificate...");
+ 
+   language  = cupsLangDefault();
+   curtime   = time(NULL);
+@@ -3424,7 +3535,7 @@
+   if ((result = gnutls_x509_crt_export(crt, GNUTLS_X509_FMT_PEM,
+                                        buffer, &bytes)) < 0)
+     cupsdLogMessage(CUPSD_LOG_ERROR,
+-                    "Unable to export server certificate - %s",
++                    "Unable to export SSL server certificate - %s",
+ 		    gnutls_strerror(result));
+   else if ((fp = cupsFileOpen(ServerCertificate, "w")) != NULL)
+   {
+@@ -3432,12 +3543,12 @@
+     cupsFileClose(fp);
+ 
+     cupsdLogMessage(CUPSD_LOG_INFO,
+-                    "Created 10-year server certificate file \"%s\"...",
++                    "Created SSL server certificate file \"%s\"...",
+ 		    ServerCertificate);
+   }
+   else
+     cupsdLogMessage(CUPSD_LOG_ERROR,
+-                    "Unable to create server certificate file \"%s\" - %s",
++                    "Unable to create SSL server certificate file \"%s\" - %s",
+ 		    ServerCertificate, strerror(errno));
+ 
+  /*
+@@ -3446,8 +3557,83 @@
+ 
+   gnutls_x509_crt_deinit(crt);
+   gnutls_x509_privkey_deinit(key);
++
++  return (1);
++
++#elif defined(HAVE_CDSASSL) && defined(HAVE_WAITPID)
++  int	pid,				/* Process ID of command */
++	status;				/* Status of command */
++  char	command[1024],			/* Command */
++	keychain[1024],			/* Keychain argument */
++	*argv[5],			/* Command-line arguments */
++	*envp[MAX_ENV];			/* Environment variables */
++
++
++ /*
++  * Run the "certtool" command to generate a self-signed certificate:
++  *
++  *     certtool c Z k=ServerCertificate
++  */
++
++  if (!cupsFileFind("certtool", getenv("PATH"), 1, command, sizeof(command)))
++  {
++    cupsdLogMessage(CUPSD_LOG_ERROR,
++                    "No SSL certificate and certtool command not found!");
++    return (0);
++  }
++
++  cupsdLogMessage(CUPSD_LOG_INFO,
++                  "Generating SSL server key and certificate...");
++
++  snprintf(keychain, sizeof(keychain), "k=%s", ServerCertificate);
++
++  argv[0] = "certtool";
++  argv[1] = "c";
++  argv[2] = "Z";
++  argv[3] = keychain;
++  argv[4] = NULL;
++
++  cupsdLoadEnv(envp, MAX_ENV);
++
++  if (!cupsdStartProcess(command, argv, envp, -1, -1, -1, -1, 1, &pid))
++    return (0);
++
++  while (waitpid(pid, &status, 0) < 0)
++    if (errno != EINTR)
++    {
++      status = 1;
++      break;
++    }
++
++  cupsdFinishProcess(pid, command, sizeof(command));
++
++  if (status)
++  {
++    if (WIFEXITED(status))
++      cupsdLogMessage(CUPSD_LOG_ERROR,
++                      "Unable to create SSL server key and certificate - "
++		      "the certtool command stopped with status %d!",
++	              WEXITSTATUS(status));
++    else
++      cupsdLogMessage(CUPSD_LOG_ERROR,
++                      "Unable to create SSL server key and certificate - "
++		      "the certtool command crashed on signal %d!",
++	              WTERMSIG(status));
++  }
++  else
++  {
++    cupsdLogMessage(CUPSD_LOG_INFO,
++                    "Created SSL server certificate file \"%s\"...",
++		    ServerCertificate);
++  }
++
++  return (!status);
++
++#else
++  return (0);
++#endif /* HAVE_LIBSSL && HAVE_WAITPID */
+ }
+-#endif /* HAVE_GNUTLS */
++#endif /* HAVE_SSL */
+ 
+ 
+ /*
+diff -urNad cupsys-1.2.1~/scheduler/conf.c cupsys-1.2.1/scheduler/conf.c
+--- cupsys-1.2.1~/scheduler/conf.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/scheduler/conf.c	2006-07-19 00:40:15.000000000 +0000
+@@ -289,6 +289,11 @@
+   cupsdSetString(&ServerHeader, "CUPS/1.2");
+   cupsdSetString(&StateDir, CUPS_STATEDIR);
+ 
++  if (!strcmp(CUPS_DEFAULT_PRINTCAP, "/etc/printers.conf"))
++    PrintcapFormat = PRINTCAP_SOLARIS;
++  else
++    PrintcapFormat = PRINTCAP_BSD;
++
+   strlcpy(temp, ConfigurationFile, sizeof(temp));
+   if ((slash = strrchr(temp, '/')) != NULL)
+     *slash = '\0';
+@@ -463,6 +468,14 @@
+   RunUser = getuid();
+ 
+  /*
++  * See if the ServerName is an IP address...
++  */
++
++  for (slash = ServerName; isdigit(*slash & 255) || *slash == '.'; slash ++);
++
++  ServerNameIsIP = !*slash;
++
++ /*
+   * Use the default system group if none was supplied in cupsd.conf...
+   */
+ 
+@@ -780,6 +793,24 @@
+                   MaxClientsPerHost);
+ 
+  /*
++  * Make sure that BrowseTimeout is at least twice the interval...
++  */
++
++  if (BrowseTimeout < (2 * BrowseInterval) || BrowseTimeout <= 0)
++  {
++    cupsdLogMessage(CUPSD_LOG_ALERT, "Invalid BrowseTimeout value %d!",
++                    BrowseTimeout);
++
++    if (BrowseInterval)
++      BrowseTimeout = BrowseInterval * 2;
++    else
++      BrowseTimeout = DEFAULT_TIMEOUT;
++
++    cupsdLogMessage(CUPSD_LOG_ALERT, "Reset BrowseTimeout to %d!",
++                    BrowseTimeout);
++  }
++
++ /*
+   * Update the default policy, as needed...
+   */
+ 
+@@ -1277,33 +1308,14 @@
+   const char	*maskval,		/* Pointer to start of mask value */
+ 		*ptr,			/* Pointer into value */
+ 		*ptr2;			/* ... */
+-  static unsigned netmasks[4][4] =	/* Standard IPv4 netmasks... */
+-  {
+-    { 0xffffffff, 0xffffffff, 0xffffffff, 0xff000000 },
+-    { 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0000 },
+-    { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffff00 },
+-    { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff }
+-  };
+-#ifdef AF_INET6
+-  static unsigned netmasks6[8][4] =	/* Standard IPv6 netmasks... */
+-  {
+-    { 0xffff0000, 0x00000000, 0x00000000, 0x00000000 },
+-    { 0xffffffff, 0x00000000, 0x00000000, 0x00000000 },
+-    { 0xffffffff, 0xffff0000, 0x00000000, 0x00000000 },
+-    { 0xffffffff, 0xffffffff, 0x00000000, 0x00000000 },
+-    { 0xffffffff, 0xffffffff, 0xffff0000, 0x00000000 },
+-    { 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000 },
+-    { 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0000 },
+-    { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff }
+-  };
+-#endif /* AF_INET6 */
+ 
+ 
+  /*
+   * Get the address...
+   */
+ 
+-  memset(ip, 0, sizeof(unsigned) * 4);
++  ip[0]   = ip[1]   = ip[2]   = ip[2]   = 0x00000000;
++  mask[0] = mask[1] = mask[2] = mask[3] = 0xffffffff;
+ 
+   if ((maskval = strchr(value, '/')) != NULL)
+     maskval ++;
+@@ -1334,6 +1346,7 @@
+ 	     ptr2 = strchr(ptr2 + 1, ':'), j ++);
+ 
+         i = 7 - j;
++	ptr ++;
+       }
+       else if (isxdigit(*ptr & 255))
+       {
+@@ -1343,9 +1356,9 @@
+ 	  return (0);
+ 
+         if (i & 1)
+-          ip[i] |= ipval;
++          ip[i / 2] |= ipval;
+ 	else
+-          ip[i] |= ipval << 16;
++          ip[i / 2] |= ipval << 16;
+       }
+       else
+         return (0);
+@@ -1354,7 +1367,10 @@
+         ptr ++;
+     }
+ 
+-    ipcount = i;
++    if (*ptr != ']')
++      return (0);
++
++    ptr ++;
+ 
+     if (*ptr && *ptr != '/')
+       return (0);
+@@ -1366,70 +1382,55 @@
+     * Parse dotted-decimal IPv4 address...
+     */
+ 
+-    family  = AF_INET;
+-    ipcount = sscanf(value, "%u.%u.%u.%u", ip + 0, ip + 1, ip + 2, ip + 3);
++    unsigned val[4];			/* IPv4 address values */
+ 
+-    ip[3] |= ((((ip[0] << 8) | ip[1]) << 8) | ip[2]) << 8;
+-    ip[0] = ip[1] = ip[2] = 0;
+-  }
+ 
+-  if (*maskval)
+-  {
++    family  = AF_INET;
++    ipcount = sscanf(value, "%u.%u.%u.%u", val + 0, val + 1, val + 2, val + 3);
++
+    /*
+-    * Get the netmask value(s)...
++    * Range check the IP numbers...
+     */
+ 
+-    memset(mask, 0, sizeof(unsigned) * 4);
++    for (i = 0; i < ipcount; i ++)
++      if (val[i] > 255)
++        return (0);
+ 
+-#ifdef AF_INET6
+-    if (*maskval == '[')
+-    {
+-     /*
+-      * Get hexadecimal mask value...
+-      */
++   /*
++    * Make sure the trailing values are zeroed, as some C libraries like
++    * glibc apparently like to fill the unused arguments with garbage...
++    */
+ 
+-      for (i = 0, ptr = maskval + 1; *ptr && i < 8; i ++)
+-      {
+-	if (*ptr == ']')
+-	  break;
+-	else if (!strncmp(ptr, "::", 2))
+-	{
+-          for (ptr2 = strchr(ptr + 2, ':'), j = 0;
+-	       ptr2;
+-	       ptr2 = strchr(ptr2 + 1, ':'), j ++);
++    for (i = ipcount; i < 4; i ++)
++      val[i] = 0;
+ 
+-          i = 7 - j;
+-	}
+-	else if (isxdigit(*ptr & 255))
+-	{
+-          ipval = strtoul(ptr, (char **)&ptr, 16);
++   /*
++    * Merge everything into a 32-bit IPv4 address in ip[3]...
++    */
+ 
+-	  if (ipval > 0xffff)
+-	    return (0);
++    ip[3] = (((((val[0] << 8) | val[1]) << 8) | val[2]) << 8) | val[3];
+ 
+-          if (i & 1)
+-            mask[i] |= ipval;
+-	  else
+-            mask[i] |= ipval << 16;
+-	}
+-	else
+-          return (0);
++    if (ipcount < 4)
++      mask[3] = (0xffffffff << (32 - 8 * ipcount)) & 0xffffffff;
++  }
+ 
+-        while (*ptr == ':')
+-          ptr ++;
+-      }
++  if (*maskval)
++  {
++   /*
++    * Get the netmask value(s)...
++    */
++
++    memset(mask, 0, sizeof(unsigned) * 4);
+ 
+-      if (*ptr)
+-	return (0);
+-    }
+-    else
+-#endif /* AF_INET6 */
+     if (strchr(maskval, '.'))
+     {
+      /*
+       * Get dotted-decimal mask...
+       */
+ 
++      if (family != AF_INET)
++        return (0);
++
+       if (sscanf(maskval, "%u.%u.%u.%u", mask + 0, mask + 1, mask + 2, mask + 3) != 4)
+         return (0);
+ 
+@@ -1447,6 +1448,9 @@
+ #ifdef AF_INET6
+       if (family == AF_INET6)
+       {
++        if (i > 128)
++	  return (0);
++
+         i = 128 - i;
+ 
+ 	if (i <= 96)
+@@ -1478,25 +1482,20 @@
+       else
+ #endif /* AF_INET6 */
+       {
+-        i = 32 - i;
++        if (i > 32)
++	  return (0);
+ 
+         mask[0] = 0xffffffff;
+         mask[1] = 0xffffffff;
+         mask[2] = 0xffffffff;
+ 
+-	if (i > 0)
+-          mask[3] = (0xffffffff << i) & 0xffffffff;
++	if (i < 32)
++          mask[3] = (0xffffffff << (32 - i)) & 0xffffffff;
+ 	else
+ 	  mask[3] = 0xffffffff;
+       }
+     }
+   }
+-#ifdef AF_INET6
+-  else if (family == AF_INET6)
+-    memcpy(mask, netmasks6[ipcount - 1], sizeof(unsigned) * 4);
+-#endif /* AF_INET6 */
+-  else
+-    memcpy(mask, netmasks[ipcount - 1], sizeof(unsigned) * 4);
+ 
+   cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                   "get_addr_and_mask(value=\"%s\", "
+@@ -1634,7 +1633,12 @@
+       else
+ 	cupsdDenyIP(loc, ones, zeros);
+     }
++#ifdef AF_INET6
++    else if (value[0] == '*' || value[0] == '.' || 
++             (!isdigit(value[0] & 255) && value[0] != '['))
++#else
+     else if (value[0] == '*' || value[0] == '.' || !isdigit(value[0] & 255))
++#endif /* AF_INET6 */
+     {
+      /*
+       * Host or domain name...
+@@ -2406,7 +2410,12 @@
+ 	  else
+ 	    cupsdDenyIP(location, ones, zeros);
+ 	}
+-	else if (value[0] == '*' || value[0] == '.' || !isdigit(value[0]))
++#ifdef AF_INET6
++	else if (value[0] == '*' || value[0] == '.' || 
++        	 (!isdigit(value[0] & 255) && value[0] != '['))
++#else
++	else if (value[0] == '*' || value[0] == '.' || !isdigit(value[0] & 255))
++#endif /* AF_INET6 */
+ 	{
+ 	 /*
+           * Host or domain name...
+@@ -2490,7 +2499,12 @@
+       *    nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
+       */
+ 
+-      if (value[0] == '*' || value[0] == '.' || !isdigit(value[0]))
++#ifdef AF_INET6
++      if (value[0] == '*' || value[0] == '.' || 
++          (!isdigit(value[0] & 255) && value[0] != '['))
++#else
++      if (value[0] == '*' || value[0] == '.' || !isdigit(value[0] & 255))
++#endif /* AF_INET6 */
+       {
+        /*
+         * Host or domain name...
+@@ -2584,7 +2598,7 @@
+ 	    strlcpy(temp2, relay->from.mask.name.name, sizeof(temp2));
+   
+ 	  cupsdLogMessage(CUPSD_LOG_INFO, "Relaying from %s to %s:%d (IPv4)",
+-			  temp, temp2, ntohs(relay->to.ipv4.sin_port));
++			  temp2, temp, ntohs(relay->to.ipv4.sin_port));
+   
+ 	  NumRelays ++;
+ 	}
+@@ -2973,7 +2987,12 @@
+ 		  n *= 262144;
+ 	      }
+ 
+-	      *((int *)var->ptr) = n;
++              if (n < 0)
++		cupsdLogMessage(CUPSD_LOG_ERROR,
++	                	"Bad negative integer value for %s on line %d!",
++				line, linenum);
++	      else
++		*((int *)var->ptr) = n;
+ 	    }
+ 	    break;
+ 
+diff -urNad cupsys-1.2.1~/scheduler/conf.h cupsys-1.2.1/scheduler/conf.h
+--- cupsys-1.2.1~/scheduler/conf.h	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/scheduler/conf.h	2006-07-19 00:40:15.000000000 +0000
+@@ -74,6 +74,7 @@
+ 					/* Directory for request files */
+ 			*DocumentRoot		VALUE(NULL);
+ 					/* Root directory for documents */
++VAR int			ServerNameIsIP		VALUE(0);
+ VAR int			NumSystemGroups		VALUE(0);
+ 					/* Number of system group names */
+ VAR char		*SystemGroups[MAX_SYSTEM_GROUPS];
+diff -urNad cupsys-1.2.1~/scheduler/cups-polld.c cupsys-1.2.1/scheduler/cups-polld.c
+--- cupsys-1.2.1~/scheduler/cups-polld.c	2006-03-18 03:05:12.000000000 +0000
++++ cupsys-1.2.1/scheduler/cups-polld.c	2006-07-19 00:40:15.000000000 +0000
+@@ -3,7 +3,7 @@
+  *
+  *   Polling daemon for the Common UNIX Printing System (CUPS).
+  *
+- *   Copyright 1997-2005 by Easy Software Products, all rights reserved.
++ *   Copyright 1997-2006 by Easy Software Products, all rights reserved.
+  *
+  *   These coded instructions, statements, and computer programs are the
+  *   property of Easy Software Products and are protected by Federal
+@@ -24,6 +24,7 @@
+  * Contents:
+  *
+  *   main()        - Open sockets and poll until we are killed...
++ *   dequote()     - Remote quotes from a string.
+  *   poll_server() - Poll the server for the given set of printers or classes.
+  */
+ 
+@@ -43,8 +44,8 @@
+  * Local functions...
+  */
+ 
+-static int	poll_server(http_t *http, cups_lang_t *language, ipp_op_t op,
+-		            int sock, int port, int interval,
++static char	*dequote(char *d, const char *s, int dlen);
++static int	poll_server(http_t *http, int sock, int port, int interval,
+ 			    const char *prefix);
+ 
+ 
+@@ -53,18 +54,17 @@
+  */
+ 
+ int					/* O - Exit status */
+-main(int  argc,				/* I - Number of command-line arguments */
++main(int  argc,				/* I - Number of command-line args */
+      char *argv[])			/* I - Command-line arguments */
+ {
+-  http_t		*http;		/* HTTP connection */
+-  cups_lang_t		*language;	/* Language info */
+-  int			interval;	/* Polling interval */
+-  int			sock;		/* Browser sock */
+-  int			port;		/* Browser port */
+-  int			val;		/* Socket option value */
+-  int			seconds,	/* Seconds left from poll */
+-			remain;		/* Total remaining time to sleep */
+-  char			prefix[1024];	/* Prefix for log messages */
++  http_t	*http;			/* HTTP connection */
++  int		interval;		/* Polling interval */
++  int		sock;			/* Browser sock */
++  int		port;			/* Browser port */
++  int		val;			/* Socket option value */
++  int		seconds,		/* Seconds left from poll */
++		remain;			/* Total remaining time to sleep */
++  char		prefix[1024];		/* Prefix for log messages */
+ 
+ 
+  /*
+@@ -128,25 +128,22 @@
+     fprintf(stderr, "ERROR: %s Unable to connect to %s on port %s: %s\n",
+             prefix, argv[1], argv[2],
+ 	    h_errno ? hstrerror(h_errno) : strerror(errno));
+-    sleep (interval);
++    sleep(interval);
+   }
+ 
+  /*
+   * Loop forever, asking for available printers and classes...
+   */
+ 
+-  language = cupsLangDefault();
+-
+   for (;;)
+   {
+    /*
+-    * Get the printers, then the classes...
++    * Get the printers and classes...
+     */
+ 
+     remain = interval;
+ 
+-    if ((seconds = poll_server(http, language, CUPS_GET_PRINTERS, sock, port,
+-                               interval, prefix)) > 0)
++    if ((seconds = poll_server(http, sock, port, interval, prefix)) > 0)
+       remain -= seconds;
+ 
+    /*
+@@ -160,13 +157,41 @@
+ 
+ 
+ /*
++ * 'dequote()' - Remote quotes from a string.
++ */
++
++static char *				/* O - Dequoted string */
++dequote(char       *d,			/* I - Destination string */
++        const char *s,			/* I - Source string */
++	int        dlen)		/* I - Destination length */
++{
++  char	*dptr;				/* Pointer into destination */
++
++
++  if (s)
++  {
++    for (dptr = d, dlen --; *s && dlen > 0; s ++)
++      if (*s != '\"')
++      {
++	*dptr++ = *s;
++	dlen --;
++      }
++
++    *dptr = '\0';
++  }
++  else
++    *d = '\0';
++
++  return (d);
++}
++
++
++/*
+  * 'poll_server()' - Poll the server for the given set of printers or classes.
+  */
+ 
+ static int				/* O - Number of seconds or -1 on error */
+ poll_server(http_t      *http,		/* I - HTTP connection */
+-            cups_lang_t *language,	/* I - Language */
+-	    ipp_op_t    op,		/* I - Operation code */
+ 	    int         sock,		/* I - Broadcast sock */
+ 	    int         port,		/* I - Broadcast port */
+ 	    int         interval,	/* I - Polling interval */
+@@ -178,10 +203,12 @@
+   ipp_t			*request,	/* Request data */
+ 			*response;	/* Response data */
+   ipp_attribute_t	*attr;		/* Current attribute */
+-  const char		*uri,		/* printer-uri */
+-			*info,		/* printer-info */
+-			*location,	/* printer-location */
+-			*make_model;	/* printer-make-and-model */
++  const char		*uri;		/* printer-uri */
++  char			info[1024],	/* printer-info */
++			job_sheets[1024],/* job-sheets-default */
++			location[1024],	/* printer-location */
++			make_model[1024];
++					/* printer-make-and-model */
+   cups_ptype_t		type;		/* printer-type */
+   ipp_pstate_t		state;		/* printer-state */
+   int			accepting;	/* printer-is-accepting-jobs */
+@@ -189,6 +216,7 @@
+   char			packet[1540];	/* Data packet */
+   static const char * const attrs[] =	/* Requested attributes */
+ 			{
++			  "job-sheets-default",
+ 			  "printer-info",
+ 			  "printer-is-accepting-jobs",
+ 			  "printer-location",
+@@ -210,20 +238,12 @@
+   addr.sin_port        = htons(port);
+ 
+  /*
+-  * Build a CUPS_GET_PRINTERS or CUPS_GET_CLASSES request, which requires
+-  * only the attributes-charset and attributes-natural-language attributes.
++  * Build a CUPS_GET_PRINTERS request and pass along a list of the
++  * attributes we are interested in along with the types of printers
++  * (and classes) we want.
+   */
+ 
+-  request = ippNew();
+-
+-  request->request.op.operation_id = op;
+-  request->request.op.request_id   = 1;
+-
+-  ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
+-               "attributes-charset", NULL, cupsLangEncoding(language));
+-
+-  ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
+-               "attributes-natural-language", NULL, language->language);
++  request = ippNewRequest(CUPS_GET_PRINTERS);
+ 
+   ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
+                "requested-attributes", sizeof(attrs) / sizeof(attrs[0]),
+@@ -240,17 +260,18 @@
+   * Do the request and get back a response...
+   */
+ 
+-  if ((response = cupsDoRequest(http, request, "/")) != NULL)
++  response = cupsDoRequest(http, request, "/");
++
++  if (cupsLastError() > IPP_OK_CONFLICT)
+   {
+-    if (response->request.status.status_code > IPP_OK_CONFLICT)
+-    {
+-      fprintf(stderr, "ERROR: %s get-%s failed: %s\n", prefix,
+-              op == CUPS_GET_PRINTERS ? "printers" : "classes",
+-              ippErrorString(response->request.status.status_code));
+-      ippDelete(response);
+-      return (-1);
+-    }
++    fprintf(stderr, "ERROR: %s CUPS-Get-Printers failed: %s\n", prefix,
++            cupsLastErrorString());
++    ippDelete(response);
++    return (-1);
++  }
+ 
++  if (response)
++  {
+    /*
+     * Figure out how many printers/classes we have...
+     */
+@@ -261,8 +282,7 @@
+ 	 attr = ippFindNextAttribute(response, "printer-name", IPP_TAG_NAME),
+ 	     max_count ++);
+ 
+-    fprintf(stderr, "DEBUG: %s found %d %s.\n", prefix, max_count,
+-            op == CUPS_GET_PRINTERS ? "printers" : "classes");
++    fprintf(stderr, "DEBUG: %s Found %d printers.\n", prefix, max_count);
+ 
+     count     = 0;
+     seconds   = time(NULL);
+@@ -272,58 +292,65 @@
+     * Loop through the printers or classes returned in the list...
+     */
+ 
+-    for (attr = response->attrs; attr != NULL; attr = attr->next)
++    for (attr = response->attrs; attr; attr = attr->next)
+     {
+      /*
+       * Skip leading attributes until we hit a printer...
+       */
+ 
+-      while (attr != NULL && attr->group_tag != IPP_TAG_PRINTER)
++      while (attr && attr->group_tag != IPP_TAG_PRINTER)
+         attr = attr->next;
+ 
+-      if (attr == NULL)
++      if (!attr)
+         break;
+ 
+      /*
+       * Pull the needed attributes from this printer...
+       */
+ 
+-      uri        = NULL;
+-      info       = "";
+-      location   = "";
+-      make_model = "";
+-      type       = CUPS_PRINTER_REMOTE;
+-      accepting  = 1;
+-      state      = IPP_PRINTER_IDLE;
++      uri           = NULL;
++      info[0]       = '\0';
++      job_sheets[0] = '\0';
++      location[0]   = '\0';
++      make_model[0] = '\0';
++      type          = CUPS_PRINTER_REMOTE;
++      accepting     = 1;
++      state         = IPP_PRINTER_IDLE;
+ 
+       while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER)
+       {
+-        if (strcmp(attr->name, "printer-uri-supported") == 0 &&
+-	    attr->value_tag == IPP_TAG_URI)
++        if (!strcmp(attr->name, "job-sheets-default") &&
++	    (attr->value_tag == IPP_TAG_NAME ||
++	     attr->value_tag == IPP_TAG_KEYWORD))
++	{
++	  if (attr->num_values == 1)
++	    snprintf(job_sheets, sizeof(job_sheets), " job-sheets=%s",
++	             attr->values[0].string.text);
++          else
++	    snprintf(job_sheets, sizeof(job_sheets), " job-sheets=%s,%s",
++	             attr->values[0].string.text,
++	             attr->values[1].string.text);
++	}
++        else if (!strcmp(attr->name, "printer-uri-supported") &&
++	         attr->value_tag == IPP_TAG_URI)
+ 	  uri = attr->values[0].string.text;
+-
+-        if (strcmp(attr->name, "printer-info") == 0 &&
+-	    attr->value_tag == IPP_TAG_TEXT)
+-	  info = attr->values[0].string.text;
+-
+-        if (strcmp(attr->name, "printer-is-accepting-jobs") == 0 &&
+-	    attr->value_tag == IPP_TAG_BOOLEAN)
++        else if (!strcmp(attr->name, "printer-info") &&
++		 attr->value_tag == IPP_TAG_TEXT)
++	  dequote(info, attr->values[0].string.text, sizeof(info));
++        else if (!strcmp(attr->name, "printer-is-accepting-jobs") &&
++	         attr->value_tag == IPP_TAG_BOOLEAN)
+ 	  accepting = attr->values[0].boolean;
+-
+-        if (strcmp(attr->name, "printer-location") == 0 &&
+-	    attr->value_tag == IPP_TAG_TEXT)
+-	  location = attr->values[0].string.text;
+-
+-        if (strcmp(attr->name, "printer-make-and-model") == 0 &&
+-	    attr->value_tag == IPP_TAG_TEXT)
+-	  make_model = attr->values[0].string.text;
+-
+-        if (strcmp(attr->name, "printer-state") == 0 &&
+-	    attr->value_tag == IPP_TAG_ENUM)
++        else if (!strcmp(attr->name, "printer-location") &&
++	         attr->value_tag == IPP_TAG_TEXT)
++	  dequote(location, attr->values[0].string.text, sizeof(location));
++        else if (!strcmp(attr->name, "printer-make-and-model") &&
++	         attr->value_tag == IPP_TAG_TEXT)
++	  dequote(make_model, attr->values[0].string.text, sizeof(location));
++        else if (!strcmp(attr->name, "printer-state") &&
++	         attr->value_tag == IPP_TAG_ENUM)
+ 	  state = (ipp_pstate_t)attr->values[0].integer;
+-
+-        if (strcmp(attr->name, "printer-type") == 0 &&
+-	    attr->value_tag == IPP_TAG_ENUM)
++        else if (!strcmp(attr->name, "printer-type") &&
++	         attr->value_tag == IPP_TAG_ENUM)
+ 	  type = (cups_ptype_t)attr->values[0].integer;
+ 
+         attr = attr->next;
+@@ -350,8 +377,10 @@
+       if (!accepting)
+ 	type |= CUPS_PRINTER_REJECTING;
+ 
+-      snprintf(packet, sizeof(packet), "%x %x %s \"%s\" \"%s\" \"%s\"\n",
+-               type, state, uri, location, info, make_model);
++      snprintf(packet, sizeof(packet),
++               "%x %x %s \"%s\" \"%s\" \"%s\" lease-duration=%d%s\n",
++               type, state, uri, location, info, make_model, interval * 2,
++	       job_sheets);
+ 
+       fprintf(stderr, "DEBUG2: %s Sending %s", prefix, packet);
+ 
+@@ -376,22 +405,16 @@
+ 	*/
+ 
+ 	count = 0;
++
+ 	sleep(1);
+       }
+ 
+-      if (attr == NULL)
++      if (!attr)
+         break;
+     }
+ 
+     ippDelete(response);
+   }
+-  else
+-  {
+-    fprintf(stderr, "ERROR: %s get-%s failed: %s\n", prefix,
+-            op == CUPS_GET_PRINTERS ? "printers" : "classes",
+-            ippErrorString(cupsLastError()));
+-    return (-1);
+-  }
+ 
+  /*
+   * Return the number of seconds we used...
+diff -urNad cupsys-1.2.1~/scheduler/dirsvc.c cupsys-1.2.1/scheduler/dirsvc.c
+--- cupsys-1.2.1~/scheduler/dirsvc.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/scheduler/dirsvc.c	2006-07-19 00:40:15.000000000 +0000
+@@ -36,6 +36,7 @@
+  *   cupsdStopPolling()            - Stop polling servers as needed.
+  *   cupsdUpdateCUPSBrowse()       - Update the browse lists using the CUPS
+  *                                   protocol.
++ *   cupsdUpdateLDAPBrowse()       - Scan for new printers via LDAP...
+  *   cupsdUpdatePolling()          - Read status messages from the poll daemons.
+  *   cupsdUpdateSLPBrowse()        - Get browsing information via SLP.
+  *   dequote()                     - Remote quotes from a string.
+@@ -211,10 +212,11 @@
+ 	else
+           p = cupsdAddPrinter(value);
+ 
+-	p->accepting   = 1;
+-	p->state       = IPP_PRINTER_IDLE;
+-	p->type        |= CUPS_PRINTER_REMOTE;
+-	p->browse_time = now + BrowseTimeout;
++	p->accepting     = 1;
++	p->state         = IPP_PRINTER_IDLE;
++	p->type          |= CUPS_PRINTER_REMOTE;
++	p->browse_time   = now;
++	p->browse_expire = now + BrowseTimeout;
+ 
+        /*
+         * Set the default printer as needed...
+@@ -251,10 +253,11 @@
+ 	else
+           p = cupsdAddClass(value);
+ 
+-	p->accepting   = 1;
+-	p->state       = IPP_PRINTER_IDLE;
+-	p->type        |= CUPS_PRINTER_REMOTE;
+-	p->browse_time = now + BrowseTimeout;
++	p->accepting     = 1;
++	p->state         = IPP_PRINTER_IDLE;
++	p->type          |= CUPS_PRINTER_REMOTE;
++	p->browse_time   = now;
++	p->browse_expire = now + BrowseTimeout;
+ 
+        /*
+         * Set the default printer as needed...
+@@ -415,8 +418,8 @@
+       {
+         time_t t = atoi(value);
+ 
+-	if (t > (now + BrowseInterval))
+-          p->browse_time = t;
++	if (t > p->browse_expire)
++          p->browse_expire = t;
+       }
+       else
+       {
+@@ -590,7 +593,7 @@
+ 
+     cupsFilePrintf(fp, "Type %d\n", printer->type);
+ 
+-    cupsFilePrintf(fp, "BrowseTime %d\n", (int)printer->browse_time);
++    cupsFilePrintf(fp, "BrowseTime %d\n", (int)printer->browse_expire);
+ 
+     if (printer->info)
+       cupsFilePrintf(fp, "Info %s\n", printer->info);
+@@ -905,14 +908,21 @@
+     fcntl(BrowseSocket, F_SETFD, fcntl(BrowseSocket, F_GETFD) | FD_CLOEXEC);
+ 
+    /*
+-    * Finally, add the socket to the input selection set...
++    * Finally, add the socket to the input selection set as needed...
+     */
+ 
+-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
+-                    "cupsdStartBrowsing: Adding fd %d to InputSet...",
+-                    BrowseSocket);
++    if (BrowseRemoteProtocols & BROWSE_CUPS)
++    {
++     /*
++      * We only listen if we want remote printers...
++      */
+ 
+-    FD_SET(BrowseSocket, InputSet);
++      cupsdLogMessage(CUPSD_LOG_DEBUG2,
++                      "cupsdStartBrowsing: Adding fd %d to InputSet...",
++                      BrowseSocket);
++
++      FD_SET(BrowseSocket, InputSet);
++    }
+   }
+   else
+     BrowseSocket = -1;
+@@ -1526,39 +1536,57 @@
+   * Loop through the available printers...
+   */
+ 
+-  if ((e = ldap_first_entry(BrowseLDAPHandle, res)) == NULL)
++  for (e = ldap_first_entry(BrowseLDAPHandle, res);
++       e;
++       e = ldap_next_entry(BrowseLDAPHandle, e))
+   {
+-    cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to get LDAP printer entry!");
+-    return;
+-  }
++   /*
++    * Get the required values from this entry...
++    */
++
++    if ((value = ldap_get_values(BrowseLDAPHandle, e,
++                                 "printerDescription")) == NULL)
++      continue;
+ 
+-  while (e)
+-  {
+-    value = ldap_get_values(BrowseLDAPHandle, e, "printerDescription");
+     strlcpy(info, *value, sizeof(info));
+     ldap_value_free(value);
+ 
+-    value = ldap_get_values(BrowseLDAPHandle, e, "printerLocation");
++    if ((value = ldap_get_values(BrowseLDAPHandle, e,
++                                 "printerLocation")) == NULL)
++      continue;
++
+     strlcpy(location, *value, sizeof(location));
+     ldap_value_free(value);
+ 
+-    value = ldap_get_values(BrowseLDAPHandle, e, "printerMakeAndModel");
++    if ((value = ldap_get_values(BrowseLDAPHandle, e,
++                                 "printerMakeAndModel")) == NULL)
++      continue;
++
+     strlcpy(make_model, *value, sizeof(make_model));
+     ldap_value_free(value);
+ 
+-    value = ldap_get_values(BrowseLDAPHandle, e, "printerType");
++    if ((value = ldap_get_values(BrowseLDAPHandle, e,
++                                 "printerType")) == NULL)
++      continue;
++
+     type = atoi(*value);
+     ldap_value_free(value);
+ 
+-    value = ldap_get_values(BrowseLDAPHandle, e, "printerURI");
++    if ((value = ldap_get_values(BrowseLDAPHandle, e,
++                                 "printerURI")) == NULL)
++      continue;
++
+     strlcpy(uri, *value, sizeof(uri));
+     ldap_value_free(value);
+ 
++   /*
++    * Process the entry as browse data...
++    */
++
+     if (!is_local_queue(uri, host, sizeof(host), resource, sizeof(resource)))
+       process_browse_data(uri, host, resource, type, IPP_PRINTER_IDLE,
+                           location, info, make_model, 0, NULL);
+ 
+-    e = ldap_next_entry(BrowseLDAPHandle, e);
+   }
+ }
+ #endif /* HAVE_OPENLDAP */
+@@ -1866,7 +1894,7 @@
+   hptr   = strchr(host, '.');
+   sptr   = strchr(ServerName, '.');
+ 
+-  if (sptr != NULL && hptr != NULL)
++  if (!ServerNameIsIP && sptr != NULL && hptr != NULL)
+   {
+    /*
+     * Strip the common domain name components...
+@@ -2521,7 +2549,7 @@
+ 
+ 	  httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL,
+ 	                   iface->hostname, iface->port,
+-			   (p->type & CUPS_PRINTER_CLASS) ? "/classes/%s%s" :
++			   (p->type & CUPS_PRINTER_CLASS) ? "/classes/%s" :
+ 			                                    "/printers/%s",
+ 			   p->name);
+ 	  snprintf(packet, sizeof(packet), "%x %x %s \"%s\" \"%s\" \"%s\" %s\n",
+@@ -2660,13 +2688,13 @@
+ 
+   sprintf(typestring, "%u", p->type);
+ 
+-  cn_value[0]   = p->info;
++  cn_value[0]   = p->name;
+   cn_value[1]   = NULL;
+-  info[0]       = p->info;
++  info[0]       = p->info ? p->info : "Unknown";
+   info[1]       = NULL;
+-  location[0]   = p->location;
++  location[0]   = p->location ? p->location : "Unknown";
+   location[1]   = NULL;
+-  make_model[0] = p->make_model;
++  make_model[0] = p->make_model ? p->make_model : "Unknown";
+   make_model[1] = NULL;
+   type[0]       = typestring;
+   type[1]       = NULL;
+@@ -2674,7 +2702,7 @@
+   uri[1]        = NULL;
+ 
+   snprintf(filter, sizeof(filter),
+-           "(&(objectclass=cupsPrinter)(printerDescription~=%s))", p->info);
++           "(&(objectclass=cupsPrinter)(printerURI=%s))", p->uri);
+ 
+   ldap_search_s(BrowseLDAPHandle, BrowseLDAPDN, LDAP_SCOPE_SUBTREE,
+                 filter, (char **)ldap_attrs, 0, &res);
+@@ -2696,7 +2724,7 @@
+   mods[6].mod_type = "objectClass";
+   mods[6].mod_values = (char **)objectClass_values;
+ 
+-  snprintf(dn, sizeof(dn), "cn=%s,ou=printers,%s", p->info, BrowseLDAPDN);
++  snprintf(dn, sizeof(dn), "cn=%s,ou=printers,%s", p->name, BrowseLDAPDN);
+   cupsdLogMessage(CUPSD_LOG_DEBUG2, "send_ldap_browse: dn=\"%s\"", dn);
+ 
+   if (ldap_count_entries(BrowseLDAPHandle, res) > 0)
+@@ -2724,7 +2752,7 @@
+   else 
+   {
+    /*
+-    * Printer has already been registered, modify the current
++    * Printer has never been registered, add the current
+     * registration...
+     */
+ 
+@@ -2734,11 +2762,11 @@
+     for (i = 0; i < 7; i ++)
+     {
+       pmods[i]         = mods + i;
+-      pmods[i]->mod_op = LDAP_MOD_REPLACE;
++      pmods[i]->mod_op = LDAP_MOD_ADD;
+     }
+     pmods[i] = NULL;
+ 
+-    if ((rc = ldap_modify_s(BrowseLDAPHandle, dn, pmods)) != LDAP_SUCCESS)
++    if ((rc = ldap_add_s(BrowseLDAPHandle, dn, pmods)) != LDAP_SUCCESS)
+       cupsdLogMessage(CUPSD_LOG_ERROR,
+                       "LDAP add for %s failed with status %d: %s",
+                       p->name, rc, ldap_err2string(rc));
+diff -urNad cupsys-1.2.1~/scheduler/filter.c cupsys-1.2.1/scheduler/filter.c
+--- cupsys-1.2.1~/scheduler/filter.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/scheduler/filter.c	2006-07-19 00:40:15.000000000 +0000
+@@ -346,6 +346,8 @@
+     * any...)
+     */
+ 
++    tempcost += current->cost;
++
+     if (tempcost < mincost)
+     {
+       cupsArrayDelete(mintemp);
+@@ -356,7 +358,7 @@
+       */
+ 
+       mintemp = temp;
+-      mincost = tempcost + current->cost;
++      mincost = tempcost;
+       cupsArrayInsert(mintemp, current);
+     }
+     else
+diff -urNad cupsys-1.2.1~/scheduler/ipp.c cupsys-1.2.1/scheduler/ipp.c
+--- cupsys-1.2.1~/scheduler/ipp.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/scheduler/ipp.c	2006-07-19 00:40:15.000000000 +0000
+@@ -4334,7 +4334,8 @@
+   {
+     httpAssembleURIf(HTTP_URI_CODING_ALL, printer_uri, sizeof(printer_uri),
+                      "ipp", NULL, con->servername, con->serverport,
+-		     "/printers/%s", printer->name);
++		     (printer->type & CUPS_PRINTER_CLASS) ?
++		         "/classes/%s" : "/printers/%s", printer->name);
+     ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_URI,
+         	 "printer-uri-supported", NULL, printer_uri);
+     cupsdLogMessage(CUPSD_LOG_DEBUG2, "printer-uri-supported=\"%s\"",
+@@ -4677,8 +4678,8 @@
+   ipp_attribute_t	*attr;		/* Current attribute */
+   const char		*dest;		/* Destination */
+   cups_ptype_t		dtype;		/* Destination type (printer or class) */
+-  char			method[HTTP_MAX_URI],
+-					/* Method portion of URI */
++  char			scheme[HTTP_MAX_URI],
++					/* Scheme portion of URI */
+ 			userpass[HTTP_MAX_URI],
+ 					/* Username portion of URI */
+ 			host[HTTP_MAX_URI],
+@@ -4718,8 +4719,8 @@
+                   "cupsdCreateSubscription(con=%p(%d), uri=\"%s\")",
+                   con, con->http.fd, uri->values[0].string.text);
+ 
+-  httpSeparateURI(HTTP_URI_CODING_ALL, uri->values[0].string.text, method,
+-                  sizeof(method), userpass, sizeof(userpass), host,
++  httpSeparateURI(HTTP_URI_CODING_ALL, uri->values[0].string.text, scheme,
++                  sizeof(scheme), userpass, sizeof(userpass), host,
+ 		  sizeof(host), &port, resource, sizeof(resource));
+ 
+   if (!strcmp(resource, "/"))
+@@ -4811,10 +4812,55 @@
+     {
+       if (!strcmp(attr->name, "notify-recipient") &&
+           attr->value_tag == IPP_TAG_URI)
++      {
++       /*
++        * Validate the recipient scheme against the ServerBin/notifier
++	* directory...
++	*/
++
++	char	notifier[1024];		/* Notifier filename */
++
++
+         recipient = attr->values[0].string.text;
++
++	if (httpSeparateURI(HTTP_URI_CODING_ALL, recipient,
++	                    scheme, sizeof(scheme), userpass, sizeof(userpass),
++			    host, sizeof(host), &port,
++			    resource, sizeof(resource)) < HTTP_URI_OK)
++        {
++          send_ipp_status(con, IPP_NOT_POSSIBLE,
++	                  _("Bad notify-recipient URI \"%s\"!"), recipient);
++	  ippAddInteger(con->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_ENUM,
++	                "notify-status-code", IPP_URI_SCHEME);
++	  return;
++	}
++
++        snprintf(notifier, sizeof(notifier), "%s/notifier/%s", ServerBin,
++	         scheme);
++        if (access(notifier, X_OK))
++	{
++          send_ipp_status(con, IPP_NOT_POSSIBLE,
++	                  _("notify-recipient URI \"%s\" uses unknown scheme!"),
++			  recipient);
++	  ippAddInteger(con->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_ENUM,
++	                "notify-status-code", IPP_URI_SCHEME);
++	  return;
++	}
++      }
+       else if (!strcmp(attr->name, "notify-pull-method") &&
+                attr->value_tag == IPP_TAG_KEYWORD)
++      {
+         pullmethod = attr->values[0].string.text;
++
++        if (strcmp(pullmethod, "ippget"))
++	{
++          send_ipp_status(con, IPP_NOT_POSSIBLE,
++	                  _("Bad notify-pull-method \"%s\"!"), pullmethod);
++	  ippAddInteger(con->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_ENUM,
++	                "notify-status-code", IPP_ATTRIBUTES);
++	  return;
++	}
++      }
+       else if (!strcmp(attr->name, "notify-charset") &&
+                attr->value_tag == IPP_TAG_CHARSET &&
+ 	       strcmp(attr->values[0].string.text, "us-ascii") &&
+@@ -8764,19 +8810,11 @@
+   cupsdStartPrinter(printer, 1);
+ 
+   if (dtype & CUPS_PRINTER_CLASS)
+-  {
+     cupsdLogMessage(CUPSD_LOG_INFO, "Class \"%s\" started by \"%s\".", name,
+                     get_username(con));
+-    cupsdAddEvent(CUPSD_EVENT_PRINTER_MODIFIED, printer, NULL,
+-                  "Class \"%s\" started by \"%s\".", name, get_username(con));
+-  }
+   else
+-  {
+     cupsdLogMessage(CUPSD_LOG_INFO, "Printer \"%s\" started by \"%s\".", name,
+                     get_username(con));
+-    cupsdAddEvent(CUPSD_EVENT_PRINTER_MODIFIED, printer, NULL,
+-                  "Printer \"%s\" started by \"%s\".", name, get_username(con));
+-  }
+ 
+   cupsdCheckJobs();
+ 
+@@ -8860,19 +8898,11 @@
+   cupsdStopPrinter(printer, 1);
+ 
+   if (dtype & CUPS_PRINTER_CLASS)
+-  {
+     cupsdLogMessage(CUPSD_LOG_INFO, "Class \"%s\" stopped by \"%s\".", name,
+                     get_username(con));
+-    cupsdAddEvent(CUPSD_EVENT_PRINTER_MODIFIED, printer, NULL,
+-                  "Class \"%s\" stopped by \"%s\".", name, get_username(con));
+-  }
+   else
+-  {
+     cupsdLogMessage(CUPSD_LOG_INFO, "Printer \"%s\" stopped by \"%s\".", name,
+                     get_username(con));
+-    cupsdAddEvent(CUPSD_EVENT_PRINTER_MODIFIED, printer, NULL,
+-                  "Printer \"%s\" stopped by \"%s\".", name, get_username(con));
+-  }
+ 
+  /*
+   * Everything was ok, so return OK status...
+diff -urNad cupsys-1.2.1~/scheduler/job.c cupsys-1.2.1/scheduler/job.c
+--- cupsys-1.2.1~/scheduler/job.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/scheduler/job.c	2006-07-19 00:40:15.000000000 +0000
+@@ -506,8 +506,19 @@
+ 	  */
+ 
+ 	  cupsdStopJob(job, 0);
+-	  job->state->values[0].integer = IPP_JOB_PENDING;
+-	  job->state_value              = IPP_JOB_PENDING;
++
++          if (!(printer->type & CUPS_PRINTER_REMOTE) ||
++	      (printer->type & CUPS_PRINTER_IMPLICIT))
++	  {
++	   /*
++	    * Mark the job as pending again - we'll retry on another
++	    * printer...
++	    */
++
++	    job->state->values[0].integer = IPP_JOB_PENDING;
++	    job->state_value              = IPP_JOB_PENDING;
++          }
++
+ 	  cupsdSaveJob(job);
+ 
+ 	 /*
+@@ -1753,8 +1764,8 @@
+   int	diff;				/* Difference */
+ 
+ 
+-  if ((diff = ((cupsd_job_t *)first)->priority -
+-              ((cupsd_job_t *)second)->priority) != 0)
++  if ((diff = ((cupsd_job_t *)second)->priority -
++              ((cupsd_job_t *)first)->priority) != 0)
+     return (diff);
+   else
+     return (((cupsd_job_t *)first)->id - ((cupsd_job_t *)second)->id);
+@@ -3011,7 +3022,7 @@
+   {
+     snprintf(final_content_type, sizeof(final_content_type),
+              "FINAL_CONTENT_TYPE=%s/%s",
+-	     filter->dst->super, filter->dst->type);
++	     filter->src->super, filter->src->type);
+     envp[envc ++] = final_content_type;
+   }
+ 
+@@ -3090,28 +3101,6 @@
+   job->status = 0;
+   memset(job->filters, 0, sizeof(job->filters));
+ 
+-  filterfds[1][0] = open("/dev/null", O_RDONLY);
+-
+-  if (filterfds[1][0] < 0)
+-  {
+-    cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to open \"/dev/null\" - %s.",
+-                    strerror(errno));
+-    snprintf(printer->state_message, sizeof(printer->state_message),
+-             "Unable to open \"/dev/null\" - %s.", strerror(errno));
+-
+-    cupsdAddPrinterHistory(printer);
+-
+-    cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
+-                  "Job canceled because the server could not open /dev/null.");
+-
+-    goto abort_job;
+-  }
+-
+-  fcntl(filterfds[1][0], F_SETFD, fcntl(filterfds[1][0], F_GETFD) | FD_CLOEXEC);
+-
+-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "start_job: filterfds[%d] = [ %d %d ]",
+-                  1, filterfds[1][0], filterfds[1][1]);
+-
+   for (i = 0, slot = 0, filter = (mime_filter_t *)cupsArrayFirst(filters);
+        filter;
+        i ++, filter = (mime_filter_t *)cupsArrayNext(filters))
+@@ -3165,36 +3154,43 @@
+ 	else
+ 	{
+ 	  job->print_pipes[0] = -1;
+-	  if (!strncmp(printer->device_uri, "file:/dev/", 10) &&
+-	      strcmp(printer->device_uri, "file:/dev/null"))
+-	    job->print_pipes[1] = open(printer->device_uri + 5,
+-	                               O_WRONLY | O_EXCL);
+-	  else if (!strncmp(printer->device_uri, "file:///dev/", 12) &&
+-	           strcmp(printer->device_uri, "file:///dev/null"))
+-	    job->print_pipes[1] = open(printer->device_uri + 7,
+-	                               O_WRONLY | O_EXCL);
++	  if (!strcmp(printer->device_uri, "file:/dev/null") ||
++	      !strcmp(printer->device_uri, "file:///dev/null"))
++	    job->print_pipes[1] = -1;
+ 	  else
+-	    job->print_pipes[1] = open(printer->device_uri + 5,
+-	                               O_WRONLY | O_CREAT | O_TRUNC, 0600);
+-
+-	  if (job->print_pipes[1] < 0)
+ 	  {
+-            cupsdLogMessage(CUPSD_LOG_ERROR,
+-	                    "Unable to open output file \"%s\" - %s.",
+-	                    printer->device_uri, strerror(errno));
+-            snprintf(printer->state_message, sizeof(printer->state_message),
+-		     "Unable to open output file \"%s\" - %s.",
+-	             printer->device_uri, strerror(errno));
++	    if (!strncmp(printer->device_uri, "file:/dev/", 10))
++	      job->print_pipes[1] = open(printer->device_uri + 5,
++	                        	 O_WRONLY | O_EXCL);
++	    else if (!strncmp(printer->device_uri, "file:///dev/", 12))
++	      job->print_pipes[1] = open(printer->device_uri + 7,
++	                        	 O_WRONLY | O_EXCL);
++	    else if (!strncmp(printer->device_uri, "file:///", 8))
++	      job->print_pipes[1] = open(printer->device_uri + 7,
++	                        	 O_WRONLY | O_CREAT | O_TRUNC, 0600);
++	    else
++	      job->print_pipes[1] = open(printer->device_uri + 5,
++	                        	 O_WRONLY | O_CREAT | O_TRUNC, 0600);
+ 
+-	    cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
+-                	  "Job canceled because the server could not open the "
+-			  "output file.");
++	    if (job->print_pipes[1] < 0)
++	    {
++              cupsdLogMessage(CUPSD_LOG_ERROR,
++	                      "Unable to open output file \"%s\" - %s.",
++	                      printer->device_uri, strerror(errno));
++              snprintf(printer->state_message, sizeof(printer->state_message),
++		       "Unable to open output file \"%s\" - %s.",
++	               printer->device_uri, strerror(errno));
+ 
+-            goto abort_job;
+-	  }
++	      cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
++                	    "Job canceled because the server could not open the "
++			    "output file.");
+ 
+-	  fcntl(job->print_pipes[1], F_SETFD,
+-        	fcntl(job->print_pipes[1], F_GETFD) | FD_CLOEXEC);
++              goto abort_job;
++	    }
++
++	    fcntl(job->print_pipes[1], F_SETFD,
++        	  fcntl(job->print_pipes[1], F_GETFD) | FD_CLOEXEC);
++          }
+ 	}
+ 
+ 	cupsdLogMessage(CUPSD_LOG_DEBUG2,
+@@ -3274,25 +3270,7 @@
+       argv[0] = sani_uri;
+ 
+       filterfds[slot][0] = -1;
+-      filterfds[slot][1] = open("/dev/null", O_WRONLY);
+-
+-      if (filterfds[slot][1] < 0)
+-      {
+-	cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to open \"/dev/null\" - %s.",
+-	                strerror(errno));
+-	snprintf(printer->state_message, sizeof(printer->state_message),
+-        	 "Unable to open \"/dev/null\" - %s.", strerror(errno));
+-
+-	cupsdAddPrinterHistory(printer);
+-
+-	cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
+-                      "Job canceled because the server could not open a file.");
+-
+-        goto abort_job;
+-      }
+-
+-      fcntl(filterfds[slot][1], F_SETFD,
+-            fcntl(filterfds[slot][1], F_GETFD) | FD_CLOEXEC);
++      filterfds[slot][1] = -1;
+ 
+       cupsdLogMessage(CUPSD_LOG_DEBUG2, "start_job: backend=\"%s\"",
+                       command);
+diff -urNad cupsys-1.2.1~/scheduler/listen.c cupsys-1.2.1/scheduler/listen.c
+--- cupsys-1.2.1~/scheduler/listen.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/scheduler/listen.c	2006-07-19 00:40:15.000000000 +0000
+@@ -331,7 +331,7 @@
+     * "any" address...
+     */
+ 
+-    if (!LocalPort && p > 0 &&
++    if ((!LocalPort || LocalEncryption == HTTP_ENCRYPT_ALWAYS) && p > 0 &&
+         (httpAddrLocalhost(&(lis->address)) ||
+          httpAddrAny(&(lis->address))))
+     {
+@@ -373,6 +373,8 @@
+     */
+ 
+     cupsdSetEnv("CUPS_SERVER", have_domain);
++
++    LocalEncryption = HTTP_ENCRYPT_IF_REQUESTED;
+   }
+   else
+   {
+diff -urNad cupsys-1.2.1~/scheduler/main.c cupsys-1.2.1/scheduler/main.c
+--- cupsys-1.2.1~/scheduler/main.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/scheduler/main.c	2006-07-19 00:40:15.000000000 +0000
+@@ -357,8 +357,8 @@
+ 
+   getrlimit(RLIMIT_NOFILE, &limit);
+ 
+-  if (limit.rlim_max > CUPS_MAX_FDS)
+-    MaxFDs = CUPS_MAX_FDS;
++  if (limit.rlim_max > FD_SETSIZE)
++    MaxFDs = FD_SETSIZE;
+   else
+     MaxFDs = limit.rlim_max;
+ 
+diff -urNad cupsys-1.2.1~/scheduler/mime.c cupsys-1.2.1/scheduler/mime.c
+--- cupsys-1.2.1~/scheduler/mime.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/scheduler/mime.c	2006-07-19 00:40:15.000000000 +0000
+@@ -51,6 +51,7 @@
+ #include <stdlib.h>
+ #include <ctype.h>
+ 
++#include <cups/debug.h>
+ #include <cups/dir.h>
+ #include <cups/string.h>
+ #include "mime.h"
+@@ -486,6 +487,8 @@
+   if ((fp = cupsFileOpen(filename, "r")) == NULL)
+     return;
+ 
++  DEBUG_printf(("\"%s\":\n", filename));
++
+  /*
+   * Then read each line from the file, skipping any comments in the file...
+   */
+@@ -496,6 +499,8 @@
+     * Skip blank lines and lines starting with a #...
+     */
+ 
++    DEBUG_puts(line);
++
+     if (!line[0] || line[0] == '#')
+       continue;
+ 
+@@ -544,7 +549,10 @@
+       continue;
+ 
+     if ((dsttype = mimeType(mime, super, type)) == NULL)
++    {
++      DEBUG_printf(("    Destination type %s/%s not found!\n", super, type));
+       continue;
++    }
+ 
+    /*
+     * Then get the cost and filter program...
+@@ -575,7 +583,10 @@
+       */
+ 
+       if (!add_fcache(filtercache, filter, filterpath))
++      {
++        DEBUG_printf(("    Filter %s not found in %s!\n", filter, filterpath)); 
+         continue;
++      }
+     }
+ 
+    /*
+@@ -655,6 +666,8 @@
+   if ((fp = cupsFileOpen(filename, "r")) == NULL)
+     return;
+ 
++  DEBUG_printf(("\"%s\":\n", filename));
++
+  /*
+   * Then read each line from the file, skipping any comments in the file...
+   */
+@@ -665,6 +678,8 @@
+     * Skip blank lines and lines starting with a #...
+     */
+ 
++    DEBUG_puts(line);
++
+     if (!line[0] || line[0] == '#')
+       continue;
+ 
+diff -urNad cupsys-1.2.1~/scheduler/printers.c cupsys-1.2.1/scheduler/printers.c
+--- cupsys-1.2.1~/scheduler/printers.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/scheduler/printers.c	2006-07-19 00:40:15.000000000 +0000
+@@ -62,6 +62,7 @@
+  */
+ 
+ #include "cupsd.h"
++#include <cups/dir.h>
+ 
+ 
+ /*
+@@ -257,6 +258,11 @@
+ {
+   int			i;		/* Looping var */
+   ipp_attribute_t	*attr;		/* Attribute data */
++  cups_dir_t		*dir;		/* Notifier directory */
++  cups_dentry_t		*dent;		/* Notifier directory entry */
++  cups_array_t		*notifiers;	/* Notifier array */
++  char			filename[1024],	/* Filename */
++			*notifier;	/* Current notifier */
+   static const int nups[] =		/* number-up-supported values */
+ 		{ 1, 2, 4, 6, 9, 16 };
+   static const ipp_orient_t orients[4] =/* orientation-requested-supported values */
+@@ -502,11 +508,11 @@
+   ippAddInteger(CommonData, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
+                "notify-max-events-supported", MaxEvents);
+ 
+-  /* notify-notify-events-default */
++  /* notify-events-default */
+   ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD,
+                "notify-events-default", NULL, "job-completed");
+ 
+-  /* notify-notify-events-supported */
++  /* notify-events-supported */
+   ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD,
+                 "notify-events-supported",
+ 		(int)(sizeof(notify_events) / sizeof(notify_events[0])),
+@@ -516,10 +522,32 @@
+   ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD,
+                "notify-pull-method-supported", NULL, "ippget");
+ 
+-  /* TODO: scan notifier directory */
+   /* notify-schemes-supported */
+-  ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD,
+-               "notify-schemes-supported", NULL, "mailto");
++  snprintf(filename, sizeof(filename), "%s/notifier", ServerBin);
++  if ((dir = cupsDirOpen(filename)) != NULL)
++  {
++    notifiers = cupsArrayNew((cups_array_func_t)strcmp, NULL);
++
++    while ((dent = cupsDirRead(dir)) != NULL)
++      if (S_ISREG(dent->fileinfo.st_mode) &&
++          (dent->fileinfo.st_mode & S_IXOTH) != 0)
++        cupsArrayAdd(notifiers, _cupsStrAlloc(dent->filename));
++
++    if (cupsArrayCount(notifiers) > 0)
++    {
++      attr = ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD,
++        	           "notify-schemes-supported",
++			   cupsArrayCount(notifiers), NULL, NULL);
++
++      for (i = 0, notifier = (char *)cupsArrayFirst(notifiers);
++           notifier;
++	   i ++, notifier = (char *)cupsArrayNext(notifiers))
++	attr->values[i].string.text = notifier;
++    }
++
++    cupsArrayDelete(notifiers);
++    cupsDirClose(dir);
++  }
+ 
+   /* number-up-supported */
+   ippAddIntegers(CommonData, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
+@@ -618,6 +646,9 @@
+ 
+   cupsArrayRemove(Printers, p);
+ 
++  if (p->type & CUPS_PRINTER_IMPLICIT)
++    cupsArrayRemove(ImplicitPrinters, p);
++
+  /*
+   * Remove the dummy interface/icon/option files under IRIX...
+   */
+@@ -665,7 +696,7 @@
+ 	   dp = (cupsd_printer_t *)cupsArrayNext(Printers))
+ 	if (dp != p && (dp->type & CUPS_PRINTER_DEFAULT))
+ 	{
+-	  DefaultPrinter = p;
++	  DefaultPrinter = dp;
+ 	  break;
+ 	}
+     }
+@@ -1233,6 +1264,7 @@
+   */
+ 
+   cupsArrayAdd(Printers, p);
++
+   if (p->type & CUPS_PRINTER_IMPLICIT)
+     cupsArrayAdd(ImplicitPrinters, p);
+ }
+diff -urNad cupsys-1.2.1~/scheduler/subscriptions.c cupsys-1.2.1/scheduler/subscriptions.c
+--- cupsys-1.2.1~/scheduler/subscriptions.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/scheduler/subscriptions.c	2006-07-19 00:40:15.000000000 +0000
+@@ -36,7 +36,6 @@
+  *   cupsdStopAllNotifiers()       - Stop all notifier processes.
+  *   cupsdUpdateNotifierStatus()   - Read messages from notifiers.
+  *   cupsd_compare_subscriptions() - Compare two subscriptions.
+- *   cupsd_delete_all_events()     - Delete all cached events.
+  *   cupsd_delete_event()          - Delete a single event...
+  *   cupsd_send_dbus()             - Send a DBUS notification...
+  *   cupsd_send_notification()     - Send a notification for the specified
+@@ -61,7 +60,6 @@
+ static int	cupsd_compare_subscriptions(cupsd_subscription_t *first,
+ 		                            cupsd_subscription_t *second,
+ 		                            void *unused);
+-static void	cupsd_delete_all_events(void);
+ static void	cupsd_delete_event(cupsd_event_t *event);
+ #ifdef HAVE_DBUS
+ static void	cupsd_send_dbus(cupsd_eventmask_t event, cupsd_printer_t *dest,
+@@ -91,6 +89,11 @@
+   cupsd_subscription_t	*sub;		/* Current subscription */
+ 
+ 
++  cupsdLogMessage(CUPSD_LOG_DEBUG2,
++                  "cupsdAddEvent(event=%s, dest=%p(%s), job=%p(%d), text=\"%s\", ...)",
++		  cupsdEventName(event), dest, dest ? dest->name : "",
++		  job, job ? job->id : 0, text);
++
+  /*
+   * Keep track of events with any OS-supplied notification mechanisms...
+   */
+@@ -114,29 +117,11 @@
+   }
+ 
+  /*
+-  * Allocate memory for the event cache as needed...
+-  */
+-
+-  if (!Events)
+-  {
+-    Events    = calloc(MaxEvents, sizeof(cupsd_event_t *));
+-    NumEvents = 0;
+-
+-    if (!Events)
+-    {
+-      cupsdLogMessage(CUPSD_LOG_CRIT,
+-                      "Unable to allocate memory for event cache - %s",
+-        	      strerror(errno));
+-      return;
+-    }
+-  }
+-
+- /*
+   * Then loop through the subscriptions and add the event to the corresponding
+   * caches...
+   */
+ 
+-  for (sub = (cupsd_subscription_t *)cupsArrayFirst(Subscriptions), temp = NULL;
++  for (temp = NULL, sub = (cupsd_subscription_t *)cupsArrayFirst(Subscriptions);
+        sub;
+        sub = (cupsd_subscription_t *)cupsArrayNext(Subscriptions))
+   {
+@@ -149,178 +134,161 @@
+ 	(sub->job == job || !sub->job))
+     {
+      /*
+-      * Need this event...
++      * Need this event, so create a new event record...
+       */
+ 
+-      if (!temp)
++      if ((temp = (cupsd_event_t *)calloc(1, sizeof(cupsd_event_t))) == NULL)
+       {
+-       /*
+-	* Create the new event record...
+-	*/
++	cupsdLogMessage(CUPSD_LOG_CRIT,
++	                "Unable to allocate memory for event - %s",
++        	        strerror(errno));
++	return;
++      }
+ 
+-	if ((temp = (cupsd_event_t *)calloc(1, sizeof(cupsd_event_t))) == NULL)
+-	{
+-	  cupsdLogMessage(CUPSD_LOG_CRIT,
+-	                  "Unable to allocate memory for event - %s",
+-        	          strerror(errno));
+-	  return;
+-	}
++      temp->event = event;
++      temp->time  = time(NULL);
++      temp->attrs = ippNew();
++      temp->job   = job;
++      temp->dest  = dest;
+ 
+-	temp->event = event;
+-	temp->time  = time(NULL);
+-	temp->attrs = ippNew();
+-	temp->job   = job;
+-	temp->dest  = dest;
++     /*
++      * Add common event notification attributes...
++      */
+ 
+-       /*
+-        * Add common event notification attributes...
+-	*/
++      ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_CHARSET,
++                   "notify-charset", NULL, "utf-8");
+ 
+-        ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER,
+-	              "notify-subscription-id", sub->id);
++      ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_LANGUAGE,
++                   "notify-natural-langugage", NULL, "en-US");
+ 
+-	ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_KEYWORD,
+-	             "notify-subscribed-event", NULL, cupsdEventName(event));
++      ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER,
++	            "notify-subscription-id", sub->id);
+ 
+-        ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER,
+-	              "printer-up-time", time(NULL));
++      ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER,
++	            "notify-sequence-number", sub->next_event_id);
+ 
+-        va_start(ap, text);
+-	vsnprintf(ftext, sizeof(ftext), text, ap);
+-	va_end(ap);
++      ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_KEYWORD,
++	           "notify-subscribed-event", NULL, cupsdEventName(event));
+ 
+-	ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_TEXT,
+-	             "notify-text", NULL, ftext);
++      if (sub->user_data_len > 0)
++        ippAddOctetString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
++	                  "notify-user-data", sub->user_data,
++			  sub->user_data_len);
+ 
+-        if (dest)
+-	{
+-	 /*
+-	  * Add printer attributes...
+-	  */
++      ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER,
++	            "printer-up-time", time(NULL));
+ 
+-	  ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_URI,
+-	               "notify-printer-uri", NULL, dest->uri);
++      va_start(ap, text);
++      vsnprintf(ftext, sizeof(ftext), text, ap);
++      va_end(ap);
+ 
+-	  ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_NAME,
+-	               "printer-name", NULL, dest->name);
++      ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_TEXT,
++	           "notify-text", NULL, ftext);
+ 
+-	  ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_ENUM,
+-	                "printer-state", dest->state);
++      if (dest)
++      {
++       /*
++	* Add printer attributes...
++	*/
+ 
+-	  if (dest->num_reasons == 0)
+-	    ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
+-	                 IPP_TAG_KEYWORD, "printer-state-reasons", NULL,
+-			 dest->state == IPP_PRINTER_STOPPED ? "paused" : "none");
+-	  else
+-	    ippAddStrings(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
+-	                  IPP_TAG_KEYWORD, "printer-state-reasons",
+-			  dest->num_reasons, NULL,
+-			  (const char * const *)dest->reasons);
++	ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_URI,
++	             "notify-printer-uri", NULL, dest->uri);
+ 
+-	  ippAddBoolean(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
+-	                "printer-is-accepting-jobs", dest->accepting);
+-        }
++	ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_NAME,
++	             "printer-name", NULL, dest->name);
+ 
+-        if (job)
+-	{
+-	 /*
+-	  * Add job attributes...
+-	  */
++	ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_ENUM,
++	              "printer-state", dest->state);
+ 
+-	  ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER,
+-	                "notify-job-id", job->id);
+-	  ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_ENUM,
+-	                "job-state", job->state_value);
++	if (dest->num_reasons == 0)
++	  ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
++	               IPP_TAG_KEYWORD, "printer-state-reasons", NULL,
++		       dest->state == IPP_PRINTER_STOPPED ? "paused" : "none");
++	else
++	  ippAddStrings(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
++	                IPP_TAG_KEYWORD, "printer-state-reasons",
++			dest->num_reasons, NULL,
++			(const char * const *)dest->reasons);
+ 
+-          if ((attr = ippFindAttribute(job->attrs, "job-name",
+-	                               IPP_TAG_NAME)) != NULL)
+-	    ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_NAME,
+-	        	 "job-name", NULL, attr->values[0].string.text);
++	ippAddBoolean(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
++	              "printer-is-accepting-jobs", dest->accepting);
++      }
+ 
+-	  switch (job->state_value)
+-	  {
+-	    case IPP_JOB_PENDING :
+-        	if (dest && dest->state == IPP_PRINTER_STOPPED)
+-        	  ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
+-		               IPP_TAG_KEYWORD, "job-state-reasons", NULL,
+-			       "printer-stopped");
+-        	else
+-        	  ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
+-		               IPP_TAG_KEYWORD, "job-state-reasons", NULL,
+-			       "none");
+-        	break;
++      if (job)
++      {
++       /*
++	* Add job attributes...
++	*/
+ 
+-	    case IPP_JOB_HELD :
+-        	if (ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_KEYWORD) != NULL ||
+-		    ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_NAME) != NULL)
+-        	  ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
+-		               IPP_TAG_KEYWORD, "job-state-reasons", NULL,
+-			       "job-hold-until-specified");
+-        	else
+-        	  ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
+-		               IPP_TAG_KEYWORD, "job-state-reasons", NULL,
+-			       "job-incoming");
+-        	break;
++	ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER,
++	              "notify-job-id", job->id);
++	ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_ENUM,
++	              "job-state", job->state_value);
+ 
+-	    case IPP_JOB_PROCESSING :
+-        	ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
+-		             IPP_TAG_KEYWORD, "job-state-reasons", NULL,
+-			     "job-printing");
+-        	break;
++        if ((attr = ippFindAttribute(job->attrs, "job-name",
++	                             IPP_TAG_NAME)) != NULL)
++	  ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_NAME,
++	               "job-name", NULL, attr->values[0].string.text);
+ 
+-	    case IPP_JOB_STOPPED :
++	switch (job->state_value)
++	{
++	  case IPP_JOB_PENDING :
++              if (dest && dest->state == IPP_PRINTER_STOPPED)
+         	ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
+ 		             IPP_TAG_KEYWORD, "job-state-reasons", NULL,
+-			     "job-stopped");
+-        	break;
+-
+-	    case IPP_JOB_CANCELLED :
++			     "printer-stopped");
++              else
+         	ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
+ 		             IPP_TAG_KEYWORD, "job-state-reasons", NULL,
+-			     "job-canceled-by-user");
+-        	break;
++			     "none");
++              break;
+ 
+-	    case IPP_JOB_ABORTED :
++	  case IPP_JOB_HELD :
++              if (ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_KEYWORD) != NULL ||
++		  ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_NAME) != NULL)
+         	ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
+ 		             IPP_TAG_KEYWORD, "job-state-reasons", NULL,
+-			     "aborted-by-system");
+-        	break;
+-
+-	    case IPP_JOB_COMPLETED :
++			     "job-hold-until-specified");
++              else
+         	ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
+ 		             IPP_TAG_KEYWORD, "job-state-reasons", NULL,
+-			     "job-completed-successfully");
+-        	break;
+-	  }
+-
+-	  ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER,
+-	                "job-impressions-completed",
+-			job->sheets ? job->sheets->values[0].integer : 0);
+-	}
++			     "job-incoming");
++              break;
+ 
+-       /*
+-	* Purge an old event as needed...
+-	*/
++	  case IPP_JOB_PROCESSING :
++              ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
++		           IPP_TAG_KEYWORD, "job-state-reasons", NULL,
++			   "job-printing");
++              break;
+ 
+-	if (NumEvents >= MaxEvents)
+-	{
+-	 /*
+-	  * Purge the oldest event in the cache...
+-	  */
++	  case IPP_JOB_STOPPED :
++              ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
++		           IPP_TAG_KEYWORD, "job-state-reasons", NULL,
++			   "job-stopped");
++              break;
+ 
+-	  cupsd_delete_event(Events[0]);
++	  case IPP_JOB_CANCELLED :
++              ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
++		           IPP_TAG_KEYWORD, "job-state-reasons", NULL,
++			   "job-canceled-by-user");
++              break;
+ 
+-	  NumEvents --;
++	  case IPP_JOB_ABORTED :
++              ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
++		           IPP_TAG_KEYWORD, "job-state-reasons", NULL,
++			   "aborted-by-system");
++              break;
+ 
+-	  memmove(Events, Events + 1, NumEvents * sizeof(cupsd_event_t *));
++	  case IPP_JOB_COMPLETED :
++              ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
++		           IPP_TAG_KEYWORD, "job-state-reasons", NULL,
++			   "job-completed-successfully");
++              break;
+ 	}
+ 
+-       /*
+-	* Add the new event to the main cache...
+-	*/
+-
+-	Events[NumEvents] = temp;
+-	NumEvents ++;
++	ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER,
++	              "job-impressions-completed",
++		      job->sheets ? job->sheets->values[0].integer : 0);
+       }
+ 
+      /*
+@@ -438,8 +406,6 @@
+   cupsd_subscription_t	*sub;		/* Subscription */
+ 
+ 
+-  cupsd_delete_all_events();
+-
+   if (!Subscriptions)
+     return;
+ 
+@@ -462,6 +428,9 @@
+     cupsd_subscription_t *sub,		/* I - Subscription object */
+     int                  update)	/* I - 1 = update subscriptions.conf */
+ {
++  int	i;				/* Looping var */
++
++
+  /*
+   * Close the pipe to the notifier as needed...
+   */
+@@ -483,7 +452,12 @@
+   cupsdClearString(&(sub->recipient));
+ 
+   if (sub->events)
++  {
++    for (i = 0; i < sub->num_events; i ++)
++      cupsd_delete_event(sub->events[i]);
++
+     free(sub->events);
++  }
+ 
+   free(sub);
+ 
+@@ -1300,27 +1274,6 @@
+ 
+ 
+ /*
+- * 'cupsd_delete_all_events()' - Delete all cached events.
+- */
+-
+-static void
+-cupsd_delete_all_events(void)
+-{
+-  int	i;				/* Looping var */
+-
+-
+-  if (MaxEvents <= 0 || !Events)
+-    return;
+-
+-  for (i = 0; i < NumEvents; i ++)
+-    cupsd_delete_event(Events[i]);
+-
+-  free(Events);
+-  Events = NULL;
+-}
+-
+-
+-/*
+  * 'cupsd_delete_event()' - Delete a single event...
+  *
+  * Oldest events must be deleted first, otherwise the subscription cache
+@@ -1330,43 +1283,6 @@
+ static void
+ cupsd_delete_event(cupsd_event_t *event)/* I - Event to delete */
+ {
+-  cupsd_subscription_t	*sub;		/* Current subscription */
+-
+-
+- /*
+-  * Loop through the subscriptions and look for the event in the cache...
+-  */
+-
+-  for (sub = (cupsd_subscription_t *)cupsArrayFirst(Subscriptions);
+-       sub;
+-       sub = (cupsd_subscription_t *)cupsArrayNext(Subscriptions))
+-  {
+-   /*
+-    * Only check the first event in the subscription cache, since the
+-    * caller will only delete the oldest event in the cache...
+-    */
+-
+-    if (sub->num_events > 0 && sub->events[0] == event)
+-    {
+-     /*
+-      * Remove this event...
+-      */
+-
+-      sub->num_events --;
+-      sub->first_event_id ++;
+-
+-      if (sub->num_events > 0)
+-      {
+-       /*
+-        * Shift other events upward in cache...
+-	*/
+-
+-        memmove(sub->events, sub->events + 1,
+-	        sub->num_events * sizeof(cupsd_event_t *));
+-      }
+-    }
+-  }
+-
+  /*
+   * Free memory...
+   */
+@@ -1468,7 +1384,7 @@
+   ipp_state_t	state;			/* IPP event state */
+ 
+ 
+-  cupsdLogMessage(CUPSD_LOG_DEBUG,
++  cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                   "cupsd_send_notification(sub=%p(%d), event=%p(%s))\n",
+                   sub, sub->id, event, cupsdEventName(event->event));
+ 
+@@ -1490,6 +1406,25 @@
+   }
+ 
+  /*
++  * Purge an old event as needed...
++  */
++
++  if (sub->num_events >= MaxEvents)
++  {
++   /*
++    * Purge the oldest event in the cache...
++    */
++
++    cupsd_delete_event(sub->events[0]);
++
++    sub->num_events --;
++    sub->first_event_id ++;
++
++    memmove(sub->events, sub->events + 1,
++	    sub->num_events * sizeof(cupsd_event_t *));
++  }
++
++ /*
+   * Add the event to the subscription.  Since the events array is
+   * always MaxEvents in length, and since we will have already
+   * removed an event from the subscription cache if we hit the
+@@ -1505,13 +1440,16 @@
+ 
+   if (sub->recipient)
+   {
+-    if (sub->pipe < 0)
+-      cupsd_start_notifier(sub);
++    for (;;)
++    {
++      if (sub->pipe < 0)
++	cupsd_start_notifier(sub);
+ 
+-    cupsdLogMessage(CUPSD_LOG_DEBUG, "sub->pipe=%d", sub->pipe);
++      cupsdLogMessage(CUPSD_LOG_DEBUG2, "sub->pipe=%d", sub->pipe);
++
++      if (sub->pipe < 0)
++	break;
+ 
+-    if (sub->pipe >= 0)
+-    {
+       event->attrs->state = IPP_IDLE;
+ 
+       while ((state = ippWriteFile(sub->pipe, event->attrs)) != IPP_DATA)
+@@ -1519,9 +1457,34 @@
+ 	  break;
+ 
+       if (state == IPP_ERROR)
++      {
++        if (errno == EPIPE)
++	{
++	 /*
++	  * Notifier died, try restarting it...
++	  */
++
++          cupsdLogMessage(CUPSD_LOG_WARN,
++	                  "Notifier for subscription %d (%s) went away, "
++			  "retrying!",
++			  sub->id, sub->recipient);
++	  cupsdEndProcess(sub->pid, 0);
++
++	  close(sub->pipe);
++	  sub->pipe = -1;
++          continue;
++	}
++
+         cupsdLogMessage(CUPSD_LOG_ERROR,
+ 	                "Unable to send event for subscription %d (%s)!",
+ 			sub->id, sub->recipient);
++      }
++
++     /*
++      * If we get this far, break out of the loop...
++      */
++
++      break;
+     }
+   }
+ 
+diff -urNad cupsys-1.2.1~/scheduler/subscriptions.h cupsys-1.2.1/scheduler/subscriptions.h
+--- cupsys-1.2.1~/scheduler/subscriptions.h	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/scheduler/subscriptions.h	2006-07-19 00:40:15.000000000 +0000
+@@ -131,11 +131,9 @@
+ VAR cups_array_t *Subscriptions VALUE(NULL);
+ 					/* Active subscriptions */
+ 
+-VAR int		MaxEvents VALUE(100),	/* Maximum number of events */
+-		NumEvents VALUE(0);	/* Number of active events */
+-VAR cupsd_event_t **Events VALUE(NULL);	/* Active events */
++VAR int		MaxEvents VALUE(100);	/* Maximum number of events */
+ 
+-VAR unsigned	LastEvent VALUE(0);	/* Last events processed */
++VAR unsigned	LastEvent VALUE(0);	/* Last event(s) processed */
+ VAR int		NotifierPipes[2] VALUE2(-1, -1);
+ 					/* Pipes for notifier error/debug output */
+ VAR cupsd_statbuf_t *NotifierStatusBuffer VALUE(NULL);
+diff -urNad cupsys-1.2.1~/scheduler/testmime.c cupsys-1.2.1/scheduler/testmime.c
+--- cupsys-1.2.1~/scheduler/testmime.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/scheduler/testmime.c	2006-07-19 00:40:15.000000000 +0000
+@@ -71,7 +71,7 @@
+   mime        = NULL;
+   src         = NULL;
+   dst         = NULL;
+-  filter_path = "../filter:../pdftops";
++  filter_path = "../filter:../pdftops:" CUPS_SERVERBIN "/filter";
+ 
+   for (i = 1; i < argc; i ++)
+     if (!strcmp(argv[i], "-d"))
+diff -urNad cupsys-1.2.1~/systemv/Makefile cupsys-1.2.1/systemv/Makefile
+--- cupsys-1.2.1~/systemv/Makefile	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/systemv/Makefile	2006-07-19 00:40:14.000000000 +0000
+@@ -78,7 +78,7 @@
+ 	$(INSTALL_BIN) lp $(BINDIR)
+ 	$(INSTALL_BIN) lpoptions $(BINDIR)
+ 	$(INSTALL_BIN) lpstat $(BINDIR)
+-	$(INSTALL_BIN) -m 4755 -o $(CUPS_USER) -g $(CUPS_GROUP) lppasswd $(BINDIR) || $(INSTALL_BIN) lppasswd $(BINDIR)
++	$(INSTALL_BIN) -m 4755 -o root lppasswd $(BINDIR) || $(INSTALL_BIN) lppasswd $(BINDIR)
+ 
+ 
+ #
+diff -urNad cupsys-1.2.1~/systemv/cancel.c cupsys-1.2.1/systemv/cancel.c
+--- cupsys-1.2.1~/systemv/cancel.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/systemv/cancel.c	2006-07-19 00:40:14.000000000 +0000
+@@ -121,7 +121,10 @@
+ 
+         case 'h' : /* Connect to host */
+ 	    if (http != NULL)
++	    {
+ 	      httpClose(http);
++	      http = NULL;
++	    }
+ 
+ 	    if (argv[i][2] != '\0')
+               cupsSetServer(argv[i] + 2);
+diff -urNad cupsys-1.2.1~/systemv/cupsaddsmb.c cupsys-1.2.1/systemv/cupsaddsmb.c
+--- cupsys-1.2.1~/systemv/cupsaddsmb.c	2006-07-19 00:37:59.000000000 +0000
++++ cupsys-1.2.1/systemv/cupsaddsmb.c	2006-07-19 00:40:14.000000000 +0000
+@@ -249,7 +249,9 @@
+     if (!SAMBAPassword)
+     {
+       snprintf(prompt, sizeof(prompt),
+-               _("Password for %s required to access %s via SAMBA: "),
++               _cupsLangString(cupsLangDefault(),
++	                       _("Password for %s required to access %s via "
++			         "SAMBA: ")),
+ 	       SAMBAUser, SAMBAServer);
+ 
+       if ((SAMBAPassword = cupsGetPassword(prompt)) == NULL)
+diff -urNad cupsys-1.2.1~/systemv/lpoptions.c cupsys-1.2.1/systemv/lpoptions.c
+--- cupsys-1.2.1~/systemv/lpoptions.c	2006-01-13 01:55:20.000000000 +0000
++++ cupsys-1.2.1/systemv/lpoptions.c	2006-07-19 00:40:14.000000000 +0000
+@@ -164,6 +164,21 @@
+ 	    break;
+ 
+ 	case 'o' : /* -o option[=value] */
++            if (dest == NULL)
++	    {
++	      if (num_dests == 0)
++		num_dests = cupsGetDests(&dests);
++
++	      if ((dest = cupsGetDest(NULL, NULL, num_dests, dests)) == NULL)
++	        dest = dests;
++
++	      for (j = 0; j < dest->num_options; j ++)
++		if (cupsGetOption(dest->options[j].name, num_options, options) == NULL)
++		  num_options = cupsAddOption(dest->options[j].name,
++	                                      dest->options[j].value,
++	                                      num_options, &options);
++	    }
++
+ 	    if (argv[i][2])
+ 	      num_options = cupsParseOptions(argv[i] + 2, num_options, &options);
+ 	    else
+@@ -219,6 +234,21 @@
+ 	    break;
+ 
+ 	case 'r' : /* -r option (remove) */
++            if (dest == NULL)
++	    {
++	      if (num_dests == 0)
++		num_dests = cupsGetDests(&dests);
++
++	      if ((dest = cupsGetDest(NULL, NULL, num_dests, dests)) == NULL)
++	        dest = dests;
++
++	      for (j = 0; j < dest->num_options; j ++)
++		if (cupsGetOption(dest->options[j].name, num_options, options) == NULL)
++		  num_options = cupsAddOption(dest->options[j].name,
++	                                      dest->options[j].value,
++	                                      num_options, &options);
++	    }
++
+ 	    if (argv[i][2])
+ 	      option = argv[i] + 2;
+ 	    else
+@@ -231,7 +261,7 @@
+ 	    }
+ 
+             for (j = 0; j < num_options; j ++)
+-	      if (strcasecmp(options[j].name, option) == 0)
++	      if (!strcasecmp(options[j].name, option))
+ 	      {
+ 	       /*
+ 	        * Remove this option...
+diff -urNad cupsys-1.2.1~/systemv/lpstat.c cupsys-1.2.1/systemv/lpstat.c
+--- cupsys-1.2.1~/systemv/lpstat.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/systemv/lpstat.c	2006-07-19 00:40:14.000000000 +0000
+@@ -70,26 +70,59 @@
+  */
+ 
+ int
+-main(int  argc,			/* I - Number of command-line arguments */
+-     char *argv[])		/* I - Command-line arguments */
++main(int  argc,				/* I - Number of command-line arguments */
++     char *argv[])			/* I - Command-line arguments */
+ {
+-  int		i,		/* Looping var */
+-		status;		/* Exit status */
+-  http_t	*http;		/* Connection to server */
+-  int		num_dests;	/* Number of user destinations */
+-  cups_dest_t	*dests;		/* User destinations */
+-  int		long_status;	/* Long status report? */
+-  int		ranking;	/* Show job ranking? */
+-  const char	*which;		/* Which jobs to show? */
+-  char		op;		/* Last operation on command-line */
++  int		i,			/* Looping var */
++		status;			/* Exit status */
++  http_t	*http;			/* Connection to server */
++  int		num_dests;		/* Number of user destinations */
++  cups_dest_t	*dests;			/* User destinations */
++  int		long_status;		/* Long status report? */
++  int		ranking;		/* Show job ranking? */
++  const char	*which;			/* Which jobs to show? */
++  char		op;			/* Last operation on command-line */
+ 
+ 
+  /*
+   * Set the locale so that times, etc. are displayed properly.
++  *
++  * Unfortunately, while we need the localized time value, we *don't*
++  * want to use the localized charset for the time value, so we need
++  * to set LC_TIME to the locale name with .UTF-8 on the end (if
++  * the locale includes a character set specifier...)
+   */
+ 
+   setlocale(LC_ALL, "");
+ 
++#ifdef LC_TIME
++  {
++    const char	*lc_time;		/* Current LC_TIME value */
++    char	new_lc_time[255],	/* New LC_TIME value */
++		*charset;		/* Pointer to character set */
++
++    if ((lc_time = setlocale(LC_TIME, NULL)) == NULL)
++      lc_time = setlocale(LC_ALL, NULL);
++
++    if (lc_time)
++    {
++      strlcpy(new_lc_time, lc_time, sizeof(new_lc_time));
++      if ((charset = strchr(new_lc_time, '.')) == NULL)
++        charset = new_lc_time + strlen(new_lc_time);
++
++      strlcpy(charset, ".UTF-8", sizeof(new_lc_time) - (charset - new_lc_time));
++    }
++    else
++      strcpy(new_lc_time, "C");
++
++    setlocale(LC_TIME, new_lc_time);
++  }
++#endif /* LC_TIME */
++  
++ /*
++  * Parse command-line options...
++  */
++
+   http        = NULL;
+   num_dests   = 0;
+   dests       = NULL;
+diff -urNad cupsys-1.2.1~/templates/Makefile cupsys-1.2.1/templates/Makefile
+--- cupsys-1.2.1~/templates/Makefile	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/templates/Makefile	2006-07-19 00:40:14.000000000 +0000
+@@ -118,11 +118,13 @@
+ # Install files...
+ #
+ 
+-install: all
++install: all $(INSTALL_LANGUAGES)
+ 	$(INSTALL_DIR) -m 755 $(DATADIR)/templates
+ 	for file in $(FILES); do \
+ 		$(INSTALL_DATA) $$file $(DATADIR)/templates; \
+ 	done
++
++install-languages:
+ 	for lang in $(LANGUAGES); do \
+ 		$(INSTALL_DIR) -m 755 $(DATADIR)/templates/$$lang; \
+ 		for file in $(FILES); do \
+@@ -137,17 +139,19 @@
+ # Uninstall files...
+ #
+ 
+-uninstall:
++uninstall: $(UNINSTALL_LANGUAGES)
+ 	for file in $(FILES); do \
+ 		$(RM) $(DATADIR)/templates/$$file; \
+ 	done
++	-$(RMDIR) $(DATADIR)/templates
++
++uninstall-languages:
+ 	for lang in $(LANGUAGES); do \
+ 		for file in $(FILES); do \
+ 			$(RM) $(DATADIR)/templates/$$lang/$$file; \
+ 		done \
+ 		$(RMDIR) $(DATADIR)/templates/$$lang; \
+ 	done
+-	-$(RMDIR) $(DATADIR)/templates
+ 
+ 
+ #
+diff -urNad cupsys-1.2.1~/templates/de/add-class.tmpl cupsys-1.2.1/templates/de/add-class.tmpl
+--- cupsys-1.2.1~/templates/de/add-class.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/add-class.tmpl	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1,33 @@
++<FORM METHOD="POST" ACTION="/admin">
++<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
++
++<H2 CLASS="title">Klasse hinzuf&uuml;gen</H2>
++
++<TABLE>
++<TR>
++<TH CLASS="label">Name:</TH>
++<TD><INPUT TYPE="TEXT" NAME="PRINTER_NAME" SIZE="40" MAXLENGTH="127"></TD>
++</TR>
++<TR>
++<TH CLASS="label">Ort:</TH>
++<TD><INPUT TYPE="TEXT" NAME="PRINTER_LOCATION" SIZE="40" MAXLENGTH="127"></TD>
++</TR>
++<TR>
++<TH CLASS="label">Beschreibung:</TH>
++<TD><INPUT TYPE="TEXT" NAME="PRINTER_INFO" SIZE="40" MAXLENGTH="127"></TD>
++</TR>
++<TR>
++<TH CLASS="label">Mitglieder:</TH>
++<TD>
++<SELECT NAME="MEMBER_URIS" SIZE="10" MULTIPLE>
++{[member_uris]<OPTION VALUE="{member_uris}" {?member_selected}>{member_names}}
++</SELECT>
++</TD>
++</TR>
++<TR>
++<TD></TD>
++<TD><INPUT TYPE="IMAGE" SRC="/images/button-add-class.gif" ALT="Klasse hinzuf&uuml;gen"></TD>
++</TR>
++</TABLE>
++
++</FORM>
+diff -urNad cupsys-1.2.1~/templates/de/add-printer.tmpl cupsys-1.2.1/templates/de/add-printer.tmpl
+--- cupsys-1.2.1~/templates/de/add-printer.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/add-printer.tmpl	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1,28 @@
++<FORM METHOD="POST" ACTION="/admin">
++<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
++
++<H2 CLASS="title">Neuen Drucker hinzuf&uuml;gen</H2>
++
++<TABLE>
++<TR>
++<TH CLASS="label">Name:</TH>
++<TD><INPUT TYPE="TEXT" NAME="PRINTER_NAME" SIZE="40" MAXLENGTH="127"><BR>
++<SMALL>(Darf alle druckbaren Zeichen au&szlig;er "/", "#", und Leerzeichen enthalten)</SMALL></TD>
++</TR>
++<TR>
++<TH CLASS="label">Ort:</TH>
++<TD><INPUT TYPE="TEXT" NAME="PRINTER_LOCATION" SIZE="40" MAXLENGTH="127"><BR>
++<SMALL>(F&uuml;r Menschen lesbarer Ort wie "Labor 1")</SMALL></TD>
++</TR>
++<TR>
++<TH CLASS="label">Beschreibung:</TH>
++<TD><INPUT TYPE="TEXT" NAME="PRINTER_INFO" SIZE="40" MAXLENGTH="127"><BR>
++<SMALL>(F&uuml;r Menschen lesbare Beschreibung wie "HP LaserJet mit Duplexeinheit")</SMALL></TD>
++</TR>
++<TR>
++<TD></TD>
++<TD><INPUT TYPE="IMAGE" SRC="/images/button-continue.gif" ALT="Fortsetzen"></TD>
++</TR>
++</TABLE>
++
++</FORM>
+diff -urNad cupsys-1.2.1~/templates/de/admin.tmpl cupsys-1.2.1/templates/de/admin.tmpl
+--- cupsys-1.2.1~/templates/de/admin.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/admin.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,77 @@
++<TABLE CELLPADDING="0" CELLSPACING="0" WIDTH="100%" SUMMARY="Administration Tasks">
++<TR><TD VALIGN="TOP" NOWRAP>
++
++<H2 CLASS="title">Drucker</H2>
++
++<P>
++<A HREF="/admin?op=add-printer"><IMG
++SRC="/images/button-add-printer.gif" ALT="Drucker hinzuf&uuml;gen" CLASS="button"></A>
++<A HREF="/printers/"><IMG SRC="/images/button-manage-printers.gif"
++ALT="Drucker verwalten" CLASS="button"></A>
++{have_samba?<A HREF="/admin/?op=export-samba"><IMG
++SRC="/images/button-export-samba.gif" ALT="Drucker f&uuml;r Samba exportieren"
++CLASS="button"></A>:}
++</P>
++
++{#device_uri=0?:<P><B>Neue Drucker gefunden:</B></P><UL>{[device_uri]
++<LI><A HREF="/admin?op=add-printer&amp;{device_options}"><IMG
++SRC="/images/button-add-this-printer.gif" ALT="Diesen Drucker hinzufuegen" CLASS="button"
++ALIGN="MIDDLE"></A>
++{device_make_and_model} ({device_info})</LI>
++}</UL>}
++
++<H2 CLASS="title">Klassen</H2>
++
++<P>
++<A HREF="/admin?op=add-class"><IMG SRC="/images/button-add-class.gif"
++ALT="Klasse hinzuf&uuml;gen" CLASS="button"></A>
++<A HREF="/classes/"><IMG SRC="/images/button-manage-classes.gif"
++ALT="Klassen verwalten" CLASS="button"></A>
++</P>
++
++<H2 CLASS="title">Druckauftr&auml;ge</H2>
++
++<P>
++<A HREF="/jobs/"><IMG SRC="/images/button-manage-jobs.gif" ALT="Auftr&auml;ge
++verwalten" CLASS="button"></A>
++</P>
++
++</TD><TD>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD><TD VALIGN="TOP">
++
++<H2 CLASS="title">Server</H2>
++
++<P>
++<A HREF="/admin?op=config-server"><IMG
++SRC="/images/button-edit-configuration-file.gif" ALT="Konfigurationsdatei
++bearbeiten" CLASS="button"></A>
++<A HREF="/admin/log/access_log" TARGET="_blank"><IMG
++SRC="/images/button-view-access-log.gif" ALT="Zugriffsprotokoll betrachten"
++CLASS="button"></A>
++<A HREF="/admin/log/error_log" TARGET="_blank"><IMG
++SRC="/images/button-view-error-log.gif" ALT="Fehlerprotokoll betrachten"
++CLASS="button"></A>
++<A HREF="/admin/log/page_log" TARGET="_blank"><IMG
++SRC="/images/button-view-page-log.gif" ALT="Seitenprotokoll betrachten"
++CLASS="button"></A>
++</P>
++
++{SETTINGS_ERROR?<P>{SETTINGS_MESSAGE}</P>
++<BLOCKQUOTE>{SETTINGS_ERROR}</BLOCKQUOTE>:
++
++<FORM METHOD="POST" ACTION="/admin">
++
++<P><B>Grundlegende Servereinstellungen:</B></P>
++
++<P><INPUT TYPE="HIDDEN" NAME="OP" VALUE="config-server">
++<INPUT TYPE="CHECKBOX" NAME="REMOTE_PRINTERS" {?remote_printers}> Zeige verteilte Drucker von anderen Systemen<BR>
++<INPUT TYPE="CHECKBOX" NAME="SHARE_PRINTERS" {?share_printers}> Verteile publizierte Drucker welche mit diesem System verbunden sind<BR>
++<INPUT TYPE="CHECKBOX" NAME="REMOTE_ADMIN" {?remote_admin}> Erlaube entfernte Verwaltung<BR>
++<INPUT TYPE="CHECKBOX" NAME="USER_CANCEL_ANY" {?user_cancel_any}> Erlaube Benutzern jeden Auftrag abzubrechen (nicht nur die Eigenen)<BR>
++<INPUT TYPE="CHECKBOX" NAME="DEBUG_LOGGING" {?debug_logging}> Speichere Fehlerinformationen f&uuml;r Fehlersuche</P>
++
++<P><INPUT TYPE="IMAGE" SRC="/images/button-change-settings.gif" ALT="Einstellungen &auml;ndern"></P>
++
++</FORM>}
++
++</TD></TR>
++</TABLE>
+diff -urNad cupsys-1.2.1~/templates/de/choose-device.tmpl cupsys-1.2.1/templates/de/choose-device.tmpl
+--- cupsys-1.2.1~/templates/de/choose-device.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/choose-device.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,26 @@
++<FORM METHOD="POST" ACTION="/admin">
++<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
++<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
++<INPUT TYPE="HIDDEN" NAME="PRINTER_LOCATION" VALUE="{?printer_location}">
++<INPUT TYPE="HIDDEN" NAME="PRINTER_INFO" VALUE="{?printer_info}">
++<INPUT TYPE="HIDDEN" NAME="CURRENT_MAKE_AND_MODEL" VALUE="{?current_make_and_model}">
++
++<H2 CLASS="title">Ger&auml;t f&uuml;r {printer_name}</H2>
++
++<TABLE>
++<TR>
++<TH CLASS="label">Ger&auml;t:</TH>
++<TD>
++<SELECT NAME="DEVICE_URI">
++{[device_uri]<OPTION VALUE="{device_uri}{?device_make_and_model!Unknown?|{device_make_and_model}:}" {?current_device_uri={device_uri}?SELECTED:{current_device_scheme={device_uri}?SELECTED:}}>
++{device_info} {?device_make_and_model!Unknown?({device_make_and_model}):}</OPTION>
++}</SELECT>
++</TD>
++</TR>
++<TR>
++<TD></TD>
++<TD><INPUT TYPE="IMAGE" SRC="/images/button-continue.gif" ALT="Fortsetzen"></TD>
++</TR>
++</TABLE>
++
++</FORM>
+diff -urNad cupsys-1.2.1~/templates/de/choose-make.tmpl cupsys-1.2.1/templates/de/choose-make.tmpl
+--- cupsys-1.2.1~/templates/de/choose-make.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/choose-make.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,42 @@
++<FORM METHOD="POST" ACTION="/admin" ENCTYPE="multipart/form-data">
++<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
++<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
++<INPUT TYPE="HIDDEN" NAME="PRINTER_LOCATION" VALUE="{?printer_location}">
++<INPUT TYPE="HIDDEN" NAME="PRINTER_INFO" VALUE="{?printer_info}">
++<INPUT TYPE="HIDDEN" NAME="DEVICE_URI" VALUE="{device_uri}">
++<INPUT TYPE="HIDDEN" NAME="BAUDRATE" VALUE="{?baudrate}">
++<INPUT TYPE="HIDDEN" NAME="BITS" VALUE="{?bits}">
++<INPUT TYPE="HIDDEN" NAME="PARITY" VALUE="{?parity}">
++<INPUT TYPE="HIDDEN" NAME="FLOW" VALUE="{?flow}">
++
++<H2 CLASS="title">Marke/Hersteller f&uuml;r {printer_name}</H2>
++
++<TABLE>
++<TR>
++<TH CLASS="label">Marke:</TH>
++<TD>
++<SELECT NAME="PPD_MAKE" SIZE="10">
++{[ppd_make]<OPTION VALUE="{ppd_make}" {?current_make={ppd_make}?SELECTED:}>{ppd_make}}
++</SELECT>
++</TD>
++</TR>
++<TR>
++<TD></TD>
++<TD><INPUT TYPE="IMAGE" SRC="/images/button-continue.gif" ALT="Fortsetzen"></TD>
++</TR>
++<TR>
++<TD></TD>
++<TD>&nbsp;</TD>
++</TR>
++<TR>
++<TH CLASS="label">Oder stellen Sie eine PPD Datei bereit:</TH>
++<TD><INPUT TYPE="HIDDEN" NAME="MAX_FILE_SIZE" VALUE="262144"><INPUT
++TYPE="FILE" NAME="PPD_FILE"></TD>
++</TR>
++<TR>
++<TD></TD>
++<TD><INPUT TYPE="IMAGE" SRC="/images/button-{op}.gif" ALT="{op=add-printer?Add Printer:Modify Printer}"></TD>
++</TR>
++</TABLE>
++
++</FORM>
+diff -urNad cupsys-1.2.1~/templates/de/choose-model.tmpl cupsys-1.2.1/templates/de/choose-model.tmpl
+--- cupsys-1.2.1~/templates/de/choose-model.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/choose-model.tmpl	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1,34 @@
++<FORM METHOD="POST" ACTION="/admin" ENCTYPE="multipart/form-data">
++<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
++<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
++<INPUT TYPE="HIDDEN" NAME="PRINTER_LOCATION" VALUE="{?printer_location}">
++<INPUT TYPE="HIDDEN" NAME="PRINTER_INFO" VALUE="{?printer_info}">
++<INPUT TYPE="HIDDEN" NAME="DEVICE_URI" VALUE="{device_uri}">
++<INPUT TYPE="HIDDEN" NAME="BAUDRATE" VALUE="{?baudrate}">
++<INPUT TYPE="HIDDEN" NAME="BITS" VALUE="{?bits}">
++<INPUT TYPE="HIDDEN" NAME="PARITY" VALUE="{?parity}">
++<INPUT TYPE="HIDDEN" NAME="FLOW" VALUE="{?flow}">
++
++<H2 CLASS="title">Modell/Treiber f&uuml;r {printer_name}</H2>
++
++<TABLE>
++<TR>
++<TH CLASS="label">Modell:</TH>
++<TD>
++<SELECT NAME="PPD_NAME" SIZE="10">
++{[ppd_name]<OPTION VALUE="{ppd_name}" {?current_make_and_model={ppd_make_and_model}?SELECTED:}>{ppd_make_and_model} ({ppd_natural_language})
++}</SELECT>
++</TD>
++</TR>
++<TR>
++<TH CLASS="label">Oder stellen Sie eine PPD Datei bereit:</TH>
++<TD><INPUT TYPE="HIDDEN" NAME="MAX_FILE_SIZE" VALUE="262144"><INPUT
++TYPE="FILE" NAME="PPD_FILE"></TD>
++</TR>
++<TR>
++<TD></TD>
++<TD><INPUT TYPE="IMAGE" SRC="/images/button-{op}.gif" ALT="{op=add-printer?Add Printer:Modify Printer}"></TD>
++</TR>
++</TABLE>
++
++</FORM>
+diff -urNad cupsys-1.2.1~/templates/de/choose-serial.tmpl cupsys-1.2.1/templates/de/choose-serial.tmpl
+--- cupsys-1.2.1~/templates/de/choose-serial.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/choose-serial.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,47 @@
++<FORM METHOD="POST" ACTION="/admin">
++<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
++<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
++<INPUT TYPE="HIDDEN" NAME="PRINTER_LOCATION" VALUE="{?printer_location}">
++<INPUT TYPE="HIDDEN" NAME="PRINTER_INFO" VALUE="{?printer_info}">
++<INPUT TYPE="HIDDEN" NAME="DEVICE_URI" VALUE="{device_uri}">
++
++<H2 CLASS="title">Serielle Anschlusseinstellungen f&uuml;r {printer_name}</H2>
++
++<TABLE>
++<TR>
++<TH CLASS="label">Baud Rate:</TH>
++<TD><SELECT NAME="BAUDRATE">
++{[baudrates]<OPTION {?baudrate={baudrates}?SELECTED:}>{baudrates}}
++</SELECT></TD>
++</TR>
++<TR>
++<TH CLASS="label">Parit&auml;t:</TH>
++<TD><SELECT NAME="PARITY">
++<OPTION VALUE="none" {?parity=none?SELECTED:}>None
++<OPTION VALUE="even" {?parity=even?SELECTED:}>Even
++<OPTION VALUE="odd" {?parity=odd?SELECTED:}>Odd
++</SELECT></TD>
++</TR>
++<TR>
++<TH CLASS="label">Daten Bits:</TH>
++<TD><SELECT NAME="BITS">
++<OPTION {?bits=8?SELECTED:}>8
++<OPTION {?bits=7?SELECTED:}>7
++</SELECT></TD>
++</TR>
++<TR>
++<TH CLASS="label">Flu&szlig;kontrolle:</TH>
++<TD><SELECT NAME="FLOW">
++<OPTION VALUE="none" {?flow=none?SELECTED:}>None
++<OPTION VALUE="soft" {?flow=soft?SELECTED:}>XON/XOFF (Software)
++<OPTION VALUE="hard" {?flow=hard?SELECTED:}>RTS/CTS (Hardware)
++<OPTION VALUE="dtrdsr" {?flow=dtrdsr?SELECTED:}>DTR/DSR (Hardware)
++</SELECT></TD>
++</TR>
++<TR>
++<TD></TD>
++<TD><INPUT TYPE="IMAGE" SRC="/images/button-continue.gif" ALT="Fortsetzen"></TD>
++</TR>
++</TABLE>
++
++</FORM>
+diff -urNad cupsys-1.2.1~/templates/de/choose-uri.tmpl cupsys-1.2.1/templates/de/choose-uri.tmpl
+--- cupsys-1.2.1~/templates/de/choose-uri.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/choose-uri.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,42 @@
++<FORM METHOD="POST" ACTION="/admin">
++<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
++<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
++<INPUT TYPE="HIDDEN" NAME="PRINTER_LOCATION" VALUE="{?printer_location}">
++<INPUT TYPE="HIDDEN" NAME="PRINTER_INFO" VALUE="{?printer_info}">
++<INPUT TYPE="HIDDEN" NAME="CURRENT_MAKE_AND_MODEL" VALUE="{?current_make_and_model}">
++
++<H2 CLASS="title">Ger&auml;te URI f&uuml;r {printer_name}</H2>
++
++<TABLE>
++<TR>
++<TH CLASS="label">Ger&auml;te URI:</TH>
++<TD><INPUT TYPE="TEXT" SIZE="60" MAXLENGTH="1024" NAME="DEVICE_URI" VALUE="{device_uri}"></TD>
++</TR>
++<TR>
++<TD></TD>
++<TD>Beispiele:
++<PRE>
++    http://hostname:631/ipp/
++    http://hostname:631/ipp/port1
++
++    ipp://hostname/ipp/
++    ipp://hostname/ipp/port1
++
++    lpd://hostname/warteschlange
++
++    socket://hostname
++    socket://hostname:9100
++</PRE>
++
++<P>Bitte lesen Sie <A HREF="/help/network.html" TARGET="_blank">"Netzwerk
++Drucker"</A> um die korrekte URI f&uuml;r Ihren Drucker zu benutzen.</P>
++
++</TD>
++</TR>
++<TR>
++<TD></TD>
++<TD><INPUT TYPE="IMAGE" SRC="/images/button-continue.gif" ALT="Fortsetzen"></TD>
++</TR>
++</TABLE>
++
++</FORM>
+diff -urNad cupsys-1.2.1~/templates/de/class-added.tmpl cupsys-1.2.1/templates/de/class-added.tmpl
+--- cupsys-1.2.1~/templates/de/class-added.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/class-added.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,2 @@
++<P>Class <A HREF="/classes/{printer_name}">{printer_name}</A> wurde erfolgreich
++hinzugef&uuml;gt.
+diff -urNad cupsys-1.2.1~/templates/de/class-confirm.tmpl cupsys-1.2.1/templates/de/class-confirm.tmpl
+--- cupsys-1.2.1~/templates/de/class-confirm.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/class-confirm.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,7 @@
++<P><B>Warning:</B> Sind Sie sicher, da&szlig; Sie die Klasse
++{printer_name} l&ouml;schen zu wollen?</P>
++
++<P ALIGN="CENTER"><A
++HREF="/admin?op=delete-class&printer_name={printer_name}&confirm=yes"><IMG
++SRC="/images/button-delete-class.gif" ALT="Klasse l&ouml;schen"
++CLASS="button"></A></P>
+diff -urNad cupsys-1.2.1~/templates/de/class-deleted.tmpl cupsys-1.2.1/templates/de/class-deleted.tmpl
+--- cupsys-1.2.1~/templates/de/class-deleted.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/class-deleted.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1 @@
++<P>Klasse {printer_name} wurde erfolgreich gel&ouml;scht.
+diff -urNad cupsys-1.2.1~/templates/de/class-jobs-header.tmpl cupsys-1.2.1/templates/de/class-jobs-header.tmpl
+--- cupsys-1.2.1~/templates/de/class-jobs-header.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/class-jobs-header.tmpl	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1 @@
++<H3 CLASS="title">Auftr&auml;ge</H3>
+diff -urNad cupsys-1.2.1~/templates/de/class-modified.tmpl cupsys-1.2.1/templates/de/class-modified.tmpl
+--- cupsys-1.2.1~/templates/de/class-modified.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/class-modified.tmpl	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1,2 @@
++<P>Klasse <A HREF="/classes/{printer_name}">{printer_name}</A> wurde
++erfolgreich ge&auml;ndert.
+diff -urNad cupsys-1.2.1~/templates/de/classes-header.tmpl cupsys-1.2.1/templates/de/classes-header.tmpl
+--- cupsys-1.2.1~/templates/de/classes-header.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/classes-header.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1 @@
++<P ALIGN="CENTER">{total=0?Keine Klassen gefunden:Zeige {#printer_name} von {total} Klasse{total=1?:n}}.</P>
+diff -urNad cupsys-1.2.1~/templates/de/classes.tmpl cupsys-1.2.1/templates/de/classes.tmpl
+--- cupsys-1.2.1~/templates/de/classes.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/classes.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,54 @@
++{#printer_name=0?:
++{[printer_name]
++<H2 CLASS="title"><A HREF="{printer_uri_supported}">{printer_name}</A>{default_name={printer_name}? (Standarddrucker):}
++{?printer_state_message=?:<SPAN CLASS="message">"{printer_state_message}"</SPAN>}</H2>
++
++<TABLE WIDTH="100%" CLASS="button" CELLSPACING="0" CELLPADDING="0" SUMMARY="{printer_name}">
++<TR>
++<TD VALIGN=TOP><A HREF="{printer_uri_supported}">
++<IMG SRC="/images/classes.gif" CLASS="button" ALT=""></A></TD>
++<TD VALIGN=TOP><B>Beschreibung:</B> {printer_info}<BR>
++<B>Ort:</B> {printer_location}<BR>
++<B>Klassenstatus:</B> {printer_state=3?frei:{printer_state=4?verarbeitend:gestoppt}},
++{printer_is_accepting_jobs=0?Auftr&auml;ge ablehnen:Auftr&auml;ge akzeptieren}, {printer_is_shared=0?nicht:} publiziert.
++{?member_uris=?:<BR>Mitglieder: {member_uris}}
++
++<P>
++<A HREF="{printer_uri_supported}?op=print-test-page">
++<IMG SRC="/images/button-print-test-page.gif" ALT="Testseite drucken" CLASS="button"></A>
++{printer_state=5?
++<A HREF="{admin_uri}?op=start-class&amp;printer_name={%printer_name}&amp;is_class=Y">
++<IMG SRC="/images/button-start-class.gif" ALT="Klasse starten" CLASS="button"></A>
++:
++<A HREF="{admin_uri}?op=stop-class&amp;printer_name={%printer_name}&amp;is_class=Y">
++<IMG SRC="/images/button-stop-class.gif" ALT="Klasse stoppen" CLASS="button"></A>
++}
++{printer_is_accepting_jobs=0?
++<A HREF="{admin_uri}?op=accept-jobs&amp;printer_name={%printer_name}&amp;is_class=Y">
++<IMG SRC="/images/button-accept-jobs.gif" ALT="Auftr&auml;ge akzeptieren" CLASS="button"></A>
++:
++<A HREF="{admin_uri}?op=reject-jobs&amp;printer_name={%printer_name}&amp;is_class=Y">
++<IMG SRC="/images/button-reject-jobs.gif" ALT="Auftr&auml;ge ablehnen" CLASS="button"></A>
++}
++<A HREF="{admin_uri}?op=purge-jobs&amp;printer_name={%printer_name}&amp;is_class=Y">
++<IMG SRC="/images/button-cancel-all-jobs.gif" ALT="Alle Auftr&auml;ge abbrechen" CLASS="button"></A>
++{printer_is_shared=0?
++<A HREF="{admin_uri}?op=set-sharing&amp;printer_name={%printer_name}&amp;shared=1&amp;is_class=Y">
++<IMG SRC="/images/button-publish-printer.gif" ALT="Drucker publizieren" CLASS="button"></A>
++:
++<A HREF="{admin_uri}?op=set-sharing&amp;printer_name={%printer_name}&amp;shared=0&amp;is_class=Y">
++<IMG SRC="/images/button-unpublish-printer.gif" ALT="Druckerpublikation aufheben" CLASS="button"></A>
++}
++<A HREF="{admin_uri}?op=modify-class&amp;printer_name={%printer_name}">
++<IMG SRC="/images/button-modify-class.gif" ALT="Klasse &auml;ndern" CLASS="button"></A>
++<A HREF="{admin_uri}?op=delete-class&amp;printer_name={%printer_name}">
++<IMG SRC="/images/button-delete-class.gif" ALT="Klasse l&ouml;schen" CLASS="button"></A>
++<A HREF="{admin_uri}?op=set-as-default&amp;printer_name={%printer_name}&amp;is_class=Y">
++<IMG SRC="/images/button-set-as-default.gif" ALT="Setze als Standard" CLASS="button"></A>
++<A HREF="{admin_uri}?op=set-allowed-users&amp;printer_name={%printer_name}&amp;is_class=Y">
++<IMG SRC="/images/button-set-allowed-users.gif" ALT="Erlaubte Benutzer festlegen" CLASS="button"></A>
++</P>
++</TD>
++</TR>
++</TABLE>
++}}
+diff -urNad cupsys-1.2.1~/templates/de/edit-config.tmpl.in cupsys-1.2.1/templates/de/edit-config.tmpl.in
+--- cupsys-1.2.1~/templates/de/edit-config.tmpl.in	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/edit-config.tmpl.in	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,91 @@
++<SCRIPT TYPE="text/javascript">
++function reset_config()
++{
++  document.cups.CUPSDCONF.value =
++"# Log general information in error_log - change \\"info\\" to \\"debug\\" for\\n" +
++"# troubleshooting...\\n" +
++"LogLevel info\\n" +
++"\\n" +
++"\\n" +
++"# Administrator user group...\\n" +
++"SystemGroup @CUPS_SYSTEM_GROUPS@\\n" +
++"\\n" +
++"\\n" +
++"# Only listen for connections from the local machine.\\n" +
++"Listen 127.0.0.1:@DEFAULT_IPP_PORT@\\n" +
++"@CUPS_LISTEN_DOMAINSOCKET@\\n" +
++"\\n" +
++"\\n" +
++"# Show shared printers on the local network.\\n" +
++"Browsing On\\n" +
++"BrowseOrder allow,deny\\n" +
++"BrowseAllow @LOCAL\\n" +
++"\\n" +
++"\\n" +
++"# Authenticate against system accounts by default...\\n" +
++"DefaultAuthType Basic\\n" +
++"\\n" +
++"# Restrict access to the server...\\n" +
++"<Location />\\n" +
++"  Order allow,deny\\n" +
++"  Allow localhost\\n" +
++"</Location>\\n" +
++"\\n" +
++"# Restrict access to the admin pages...\\n" +
++"<Location /admin>\\n" +
++"@ENCRYPTION_REQUIRED@\\n" +
++"  Order allow,deny\\n" +
++"  Allow localhost\\n" +
++"</Location>\\n" +
++"\\n" +
++"# Restrict access to configuration files...\\n" +
++"<Location /admin/conf>\\n" +
++"  AuthType Basic\\n" +
++"  Require user @SYSTEM\\n" +
++"  Order allow,deny\\n" +
++"  Allow localhost\\n" +
++"</Location>\\n" +
++"\\n" +
++"# Set the default printer/job policies...\\n" +
++"<Policy default>\\n" +
++"  # Job-related operations must be done by the owner or an adminstrator...\\n" +
++"  <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job CUPS-Move-Job>\\n" +
++"    Require user @OWNER @SYSTEM\\n" +
++"    Order deny,allow\\n" +
++"  </Limit>\\n" +
++"\\n" +
++"  # All administration operations require an adminstrator to authenticate...\\n" +
++"  <Limit Pause-Printer Resume-Printer Set-Printer-Attributes Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After CUPS-Add-Printer CUPS-Delete-Printer CUPS-Add-Class CUPS-Delete-Class CUPS-Accept-Jobs CUPS-Reject-Jobs CUPS-Set-Default>\\n" +
++"    AuthType Basic\\n" +
++"    Require user @SYSTEM\\n" +
++"    Order deny,allow\\n" +
++"  </Limit>\\n" +
++"\\n" +
++"  # Only the owner or an administrator can cancel or authenticate a job...\\n" +
++"  <Limit Cancel-Job CUPS-Authenticate-Job>\\n" +
++"    Require user @OWNER @SYSTEM\\n" +
++"    Order deny,allow\\n" +
++"  </Limit>\\n" +
++"\\n" +
++"  <Limit All>\\n" +
++"    Order deny,allow\\n" +
++"  </Limit>\\n" +
++"</Policy>\\n";
++}
++</SCRIPT>
++
++<H2 CLASS="title">Server Konfigurationsdatei</H2>
++
++<FORM NAME="cups" METHOD="POST" ACTION="/admin/">
++
++<INPUT TYPE="HIDDEN" NAME="OP" VALUE="config-server">
++
++<TEXTAREA NAME="CUPSDCONF" COLS="80" ROWS="25">{CUPSDCONF}</TEXTAREA>
++
++<P><INPUT TYPE="IMAGE" SRC="/images/button-save-changes.gif"
++ALT="&Auml;nderungen speichern"> <A
++HREF="javascript:reset_config();"><IMG
++SRC="/images/button-use-default-config.gif" CLASS="button"
++ALT="Standard Konfigurationsdatei verwenden"></A></P>
++
++</FORM>
+diff -urNad cupsys-1.2.1~/templates/de/error-op.tmpl cupsys-1.2.1/templates/de/error-op.tmpl
+--- cupsys-1.2.1~/templates/de/error-op.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/error-op.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,3 @@
++<P>Fehler:</P>
++
++<BLOCKQUOTE>Unbekannte Operation "{op}"!</BLOCKQUOTE>
+diff -urNad cupsys-1.2.1~/templates/de/error.tmpl cupsys-1.2.1/templates/de/error.tmpl
+--- cupsys-1.2.1~/templates/de/error.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/error.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,3 @@
++<P>{?message?{message}:Fehler:}</P>
++
++<BLOCKQUOTE>{error}</BLOCKQUOTE>
+diff -urNad cupsys-1.2.1~/templates/de/header.tmpl.in cupsys-1.2.1/templates/de/header.tmpl.in
+--- cupsys-1.2.1~/templates/de/header.tmpl.in	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/header.tmpl.in	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,63 @@
++<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
++<HTML>
++<HEAD>
++	<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
++	<TITLE>{title} - CUPS @CUPS_VERSION@@CUPS_REVISION@</TITLE>
++	<!-- Prevent caching of CGI content -->
++	<META HTTP-EQUIV="Expires" CONTENT="now">
++	<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
++	{refresh_page?<META HTTP-EQUIV="Refresh" CONTENT="{refresh_page}">:}
++	<LINK REL="STYLESHEET" TYPE="text/css" HREF="/cups.css">
++	<LINK REL="SHORTCUT ICON" HREF="/favicon.ico" TYPE="image/x-icon">
++</HEAD>
++<BODY>
++<TABLE WIDTH="100%" STYLE="height: 100%;" BORDER="0" CELLSPACING="0" CELLPADDING="0" SUMMARY="{title}">
++<TR CLASS="HEADER">
++<TD VALIGN="TOP" WIDTH="15" ROWSPAN="2"><IMG SRC="/images/top-left.gif" WIDTH="15" HEIGHT="80" ALT=""></TD>
++<TD VALIGN="TOP" WIDTH="55" ROWSPAN="2"><IMG SRC="/images/top-middle.gif" WIDTH="55" HEIGHT="80" ALT=""></TD>
++<TD WIDTH="100%" HEIGHT="60"><H1>{title}</H1></TD>
++<TD ALIGN="RIGHT" VALIGN="TOP" WIDTH="15" ROWSPAN="2"><IMG
++SRC="/images/top-right.gif" WIDTH="15" HEIGHT="15" ALT=""></TD>
++</TR>
++<TR CLASS="HEADER"><TD WIDTH="100%" VALIGN="BOTTOM" NOWRAP>
++
++<A CLASS="unsel" HREF="/"><IMG SRC="/images/tab-left.gif"
++WIDTH="4" HEIGHT="4" ALIGN="TOP" BORDER="0"
++ALT="">&nbsp;&nbsp;Startseite&nbsp;&nbsp;<IMG
++SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
++BORDER="0" ALT=""></A>
++
++&nbsp;<A CLASS="{SECTION=admin?:un}sel" HREF="/admin"><IMG
++SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
++BORDER="0" ALT="">&nbsp;&nbsp;Verwaltung&nbsp;&nbsp;<IMG
++SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
++BORDER="0" ALT=""></A>
++
++&nbsp;<A CLASS="{SECTION=classes?:un}sel" HREF="/classes/"><IMG
++SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
++BORDER="0" ALT="">&nbsp;&nbsp;Klassen&nbsp;&nbsp;<IMG
++SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
++BORDER="0" ALT=""></A>
++
++&nbsp;<A CLASS="{SECTION=help?:un}sel" HREF="/help/"><IMG
++SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
++BORDER="0" ALT="">&nbsp;&nbsp;Dokumentation/Hilfe&nbsp;&nbsp;<IMG
++SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
++BORDER="0" ALT=""></A>
++
++&nbsp;<A CLASS="{SECTION=jobs?:un}sel" HREF="/jobs/"><IMG
++SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
++BORDER="0" ALT="">&nbsp;&nbsp;Auftr&auml;ge&nbsp;&nbsp;<IMG
++SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
++BORDER="0" ALT=""></A>
++
++&nbsp;<A CLASS="{SECTION=printers?:un}sel" HREF="/printers/"><IMG
++SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
++BORDER="0" ALT="">&nbsp;&nbsp;Drucker&nbsp;&nbsp;<IMG
++SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
++BORDER="0" ALT=""></A>
++
++</TD></TR>
++<TR CLASS="page">
++<TD WIDTH="15">&nbsp;</TD>
++<TD COLSPAN="2" WIDTH="100%" STYLE="height: 100%;" VALIGN="TOP" CLASS="page">
+diff -urNad cupsys-1.2.1~/templates/de/help-header.tmpl cupsys-1.2.1/templates/de/help-header.tmpl
+--- cupsys-1.2.1~/templates/de/help-header.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/help-header.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,46 @@
++<FORM ACTION="/help/{?HELPFILE}" METHOD="GET">
++{TOPIC?<INPUT TYPE="HIDDEN" NAME="TOPIC" VALUE="{TOPIC}">:}
++
++<P ALIGN="CENTER"><B>Suche in
++{HELPTITLE?{HELPTITLE}:{TOPIC?{TOPIC}:Alle Dokumente}}:</B> <INPUT
++TYPE="TEXT" NAME="QUERY" VALUE="{?QUERY}" SIZE="60"> <INPUT
++TYPE="IMAGE" SRC="/images/button-search.gif" ALT="Suche">
++<A HREF="/help/{?HELPFILE}{QUERY?{TOPIC??TOPIC={TOPIC}:}:}"><IMG
++SRC="/images/button-clear.gif" ALT="Leeren" CLASS="button"></A></P>
++
++</FORM>
++
++<!-- Bookmarks -->
++<DIV CLASS="sidebar">
++<H3 CLASS="title">On-Line Hilfe Dokumente</H3>
++
++<P CLASS="l0"><A HREF="/help{QUERY??QUERY={QUERY}:}">Alle Dokumente</A></P>
++<HR>
++
++{[BMTEXT]<P CLASS="l{BMINDENT}"><A HREF="{BMLINK}">{BMTEXT}</A></P>
++}
++</DIV>
++
++{QUERY?<P>Suchresultate in {HELPFILE?{HELPTITLE}:{TOPIC?{TOPIC}:Alle Dokumente}}\:</P>
++{QTEXT?<UL>
++{[QTEXT]<LI><A HREF="{QLINK}">{QTEXT}</A>{QPTEXT? (in <I><A HREF="{QPLINK}">{QPTEXT}</A></I>):}</LI>}
++{QTEXT?</UL>:}
++:<P>Keine &Uuml;bereinstimmung gefunden.</P>}
++<HR NOSHADE>:}
++{HELPTITLE?<H1>{HELPTITLE}
++<A HREF="/help/{HELPFILE}?PRINTABLE=YES" TARGET="_blank"><IMG
++SRC="/images/button-view-printable-version.gif" ALT="Druckversion anzeigen"
++CLASS="button"></A></H1>:<H1>CUPS Hilfeseiten</H1>
++
++<P>Dies ist das CUPS online Hilfesystem. Geben Sie Ihren Suchbegriff
++oben ein oder klicken Sie auf einen der Dokumentationslinks
++um sich die Online Hilfe Informationen anzeigen zu lassen</P>
++
++<P>Wenn Sie noch unerfahren im Umgang mit CUPS sind, lesen Sie die
++"<a href="overview.html">CUPS &Uuml;bersicht</a>".
++Erfahrene Benutzer sollten "<a href="whatsnew.html">Was ist neu in CUPS 1.2</a>" lesen.</P>
++
++<P>Die <A HREF="http://www.cups.org/">CUPS Home Page</A> bietet
++ebenfalls viele Angebote inklusive Benutzer Diskussionsforen,
++Antworten auf h&auml;ufig gestellte Fragen, und ein Formular für
++Fehlerberichte und W&uuml;nsche.</P>}
+diff -urNad cupsys-1.2.1~/templates/de/help-printable.tmpl cupsys-1.2.1/templates/de/help-printable.tmpl
+--- cupsys-1.2.1~/templates/de/help-printable.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/help-printable.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,11 @@
++<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
++<HTML>
++<HEAD>
++	<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
++	<TITLE>{HELPTITLE}</TITLE>
++	<LINK REL="STYLESHEET" TYPE="text/css" HREF="/cups-printable.css">
++	<LINK REL="SHORTCUT ICON" HREF="/favicon.ico" TYPE="image/x-icon">
++</HEAD>
++<BODY>
++
++<H1>{HELPTITLE}</H1>
+diff -urNad cupsys-1.2.1~/templates/de/job-cancel.tmpl cupsys-1.2.1/templates/de/job-cancel.tmpl
+--- cupsys-1.2.1~/templates/de/job-cancel.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/job-cancel.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1 @@
++<P><A HREF="{job_printer_uri}">Auftrag {job_id}</A> wurde abgebrochen.
+diff -urNad cupsys-1.2.1~/templates/de/job-hold.tmpl cupsys-1.2.1/templates/de/job-hold.tmpl
+--- cupsys-1.2.1~/templates/de/job-hold.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/job-hold.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1 @@
++<P><A HREF="{job_printer_uri}">Auftrag {job_id}</A> wurde angehalten.
+diff -urNad cupsys-1.2.1~/templates/de/job-move.tmpl cupsys-1.2.1/templates/de/job-move.tmpl
+--- cupsys-1.2.1~/templates/de/job-move.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/job-move.tmpl	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1,22 @@
++<FORM METHOD="POST" ACTION="/{SECTION}/{job_id?:{printer_name}}">
++<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
++{job_id?<INPUT TYPE="HIDDEN" NAME="JOB_ID" VALUE="{job_id}">:}
++
++<H2 CLASS="title">{job_id?Verschiebe Auftrag {job_id}:Verschiebe alle Auftr&auml;ge}</H2>
++
++<TABLE>
++<TR>
++<TH CLASS="label">Neues Ziel:</TH>
++<TD>
++<SELECT NAME="JOB_PRINTER_URI" SIZE="10">
++{[job_printer_uri]<OPTION VALUE="{job_printer_uri}">{job_printer_name}}
++</SELECT>
++</TD>
++</TR>
++<TR>
++<TD></TD>
++<TD><INPUT TYPE="IMAGE" SRC="/images/button-move-job{job_id?:s}.gif" ALT="Verschiebe {job_id?Auftrag:Auftr&auml;ge}"></TD>
++</TR>
++</TABLE>
++
++</FORM>
+diff -urNad cupsys-1.2.1~/templates/de/job-moved.tmpl cupsys-1.2.1/templates/de/job-moved.tmpl
+--- cupsys-1.2.1~/templates/de/job-moved.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/job-moved.tmpl	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1,2 @@
++<P>{job_id?<A HREF="/jobs/{job_id}">Auftrag {job_id}</A>:All jobs} verschoben nach 
++<A HREF="{job_printer_uri}">{job_printer_name}</A>.</P>
+diff -urNad cupsys-1.2.1~/templates/de/job-release.tmpl cupsys-1.2.1/templates/de/job-release.tmpl
+--- cupsys-1.2.1~/templates/de/job-release.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/job-release.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1 @@
++<P><A HREF="{job_printer_uri}">Auftrag {job_id}</A> wurde f&uuml;r Druck freigegeben.
+diff -urNad cupsys-1.2.1~/templates/de/job-restart.tmpl cupsys-1.2.1/templates/de/job-restart.tmpl
+--- cupsys-1.2.1~/templates/de/job-restart.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/job-restart.tmpl	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1 @@
++<P><A HREF="{job_printer_uri}">Auftrag {job_id}</A> wurde neu gestartet.
+diff -urNad cupsys-1.2.1~/templates/de/jobs-header.tmpl cupsys-1.2.1/templates/de/jobs-header.tmpl
+--- cupsys-1.2.1~/templates/de/jobs-header.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/jobs-header.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,15 @@
++<P>{?which_jobs=?<A
++HREF="{?printer_name=?/jobs:{printer_uri_supported}}?which_jobs=completed"><IMG
++SRC="/images/button-show-completed.gif" CLASS="button" ALT="Fertige Auftr&auml;ge anzeigen"></A>
++<A HREF="{?printer_name=?/jobs:{printer_uri_supported}}?which_jobs=all"><IMG
++SRC="/images/button-show-all.gif" CLASS="button" ALT="Alle Auftr&auml;ge anzeigen">:{which_jobs=all?<A
++HREF="{?printer_name=?/jobs:{printer_uri_supported}}?which_jobs=completed"><IMG
++SRC="/images/button-show-completed.gif" CLASS="button" ALT="Fertige Auftr&auml;ge anzeigen"></A>
++<A HREF="{?printer_name=?/jobs:{printer_uri_supported}}"><IMG
++SRC="/images/button-show-active.gif" CLASS="button" ALT="Aktive Auftr&auml;ge anzeigen">:<A
++HREF="{?printer_name=?/jobs:{printer_uri_supported}}"><IMG
++SRC="/images/button-show-active.gif" CLASS="button" ALT="Aktive Auftr&auml;ge anzeigen"></A>
++<A HREF="{?printer_name=?/jobs:{printer_uri_supported}}?which_jobs=all"><IMG
++SRC="/images/button-show-all.gif" CLASS="button" ALT="Alle Auftr&auml;ge anzeigen">}}</A></P>
++
++<P ALIGN="CENTER">{total=0?Keine Auftr&auml;ge gefunden:Zeige {#job_id} von {total} {?which_jobs=?active:{which_jobs=all?:fertigen}} {total=1?Auftrag:Auftr&auml;gen}}.</P>
+diff -urNad cupsys-1.2.1~/templates/de/jobs.tmpl cupsys-1.2.1/templates/de/jobs.tmpl
+--- cupsys-1.2.1~/templates/de/jobs.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/jobs.tmpl	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1,42 @@
++{#job_id=0?:
++<TABLE CELLPADDING="0" CELLSPACING="0" CLASS="button" WIDTH="100%" SUMMARY="Auftragsliste">
++<TR CLASS="data">
++<TH>ID&nbsp;</TH>
++<TH>Name&nbsp;</TH>
++<TH>Benutzer&nbsp;</TH>
++<TH>Gr&ouml;&szlig;e&nbsp;</TH>
++<TH>Seiten&nbsp;</TH>
++<TH>Status&nbsp;</TH>
++<TH>Kontrolle&nbsp;</TH>
++</TR>
++
++{[job_id]
++<TR CLASS="data" VALIGN="TOP">
++<TD><A HREF="{job_printer_uri}">{job_printer_name}</A>-{job_id}&nbsp;</TD>
++<TD>{?job_name=?Unbekannt:{job_name}}&nbsp;</TD>
++<TD>{job_originating_user_name}&nbsp;</TD>
++<TD>{job_k_octets}k&nbsp;</TD>
++<TD>{job_media_sheets_completed=0?Unbekannt:{?job_media_sheets_completed}}</TD>
++<TD>{job_state=3?schwebend seit<BR>{time_at_creation}:{job_state=4?angehalten seit<BR>{time_at_creation}:
++{job_state=5?verarbeitet seit<BR>{time_at_processing}:{job_state=6?gestoppt um<BR>{time_at_completed}:
++{job_state=7?abgebrochen um<BR>{time_at_completed}:{job_state=8?aborted:beendet um<BR>{time_at_completed}}}}}}}&nbsp;</TD>
++<TD>
++{job_preserved>0?
++<A HREF="/jobs/?op=restart-job&amp;job_id={job_id}&amp;job_printer_uri={job_printer_uri}">
++<IMG SRC="/images/button-restart-job.gif" ALT="Auftrag neu drucken" CLASS="button"></A>:}
++{job_state=4?
++<A HREF="/jobs/?op=release-job&amp;job_id={job_id}&amp;job_printer_uri={job_printer_uri}">
++<IMG SRC="/images/button-release-job.gif" ALT="Auftrag freigeben" CLASS="button"></A>:}
++{job_state=3?
++<A HREF="/jobs/?op=hold-job&amp;job_id={job_id}&amp;job_printer_uri={job_printer_uri}">
++<IMG SRC="/images/button-hold-job.gif" ALT="Auftrag anhalten" CLASS="button"></A>:}
++{job_state<7?
++<A HREF="/jobs/?op=cancel-job&amp;job_id={job_id}&amp;job_printer_uri={job_printer_uri}">
++<IMG SRC="/images/button-cancel-job.gif" ALT="Auftrag abbrechen" CLASS="button"></A>
++<A HREF="/jobs/?op=move-job&amp;job_id={job_id}"><IMG
++SRC="/images/button-move-job.gif" ALT="Auftrag verschieben" CLASS="button"></A>:}
++&nbsp;</TD>
++</TR>
++}
++</TABLE>
++}
+diff -urNad cupsys-1.2.1~/templates/de/maintenance.tmpl cupsys-1.2.1/templates/de/maintenance.tmpl
+--- cupsys-1.2.1~/templates/de/maintenance.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/maintenance.tmpl	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1,2 @@
++<P>Wartungskommando gesendet; Auftrags ID ist <A HREF="/printers/{printer_name}">
++{printer_name}-{job_id}</A>.</P>
+diff -urNad cupsys-1.2.1~/templates/de/modify-class.tmpl cupsys-1.2.1/templates/de/modify-class.tmpl
+--- cupsys-1.2.1~/templates/de/modify-class.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/modify-class.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,34 @@
++<FORM METHOD="POST" ACTION="/admin">
++<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
++
++<H2 CLASS="title">Klasse {printer_name} &auml;ndern</H2>
++
++<TABLE>
++<TR>
++<TH CLASS="label">Name:</TH>
++<TD><INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
++{printer_name}</TD>
++</TR>
++<TR>
++<TH CLASS="label">Ort:</TH>
++<TD><INPUT TYPE="TEXT" NAME="PRINTER_LOCATION" VALUE="{?printer_location}" SIZE="40" MAXLENGTH="127"></TD>
++</TR>
++<TR>
++<TH CLASS="label">Beschreibung:</TH>
++<TD><INPUT TYPE="TEXT" NAME="PRINTER_INFO" VALUE="{?printer_info}" SIZE="40" MAXLENGTH="127"></TD>
++</TR>
++<TR>
++<TH CLASS="label">Mitglieder:</TH>
++<TD>
++<SELECT NAME="MEMBER_URIS" SIZE="10" MULTIPLE>
++{[member_uris]<OPTION VALUE="{member_uris}" {?member_selected}>{member_names}}
++</SELECT>
++</TD>
++</TR>
++<TR>
++<TD></TD>
++<TD><INPUT TYPE="IMAGE" SRC="/images/button-modify-class.gif" ALT="Klasse &auml;ndern"></TD>
++</TR>
++</TABLE>
++
++</FORM>
+diff -urNad cupsys-1.2.1~/templates/de/modify-printer.tmpl cupsys-1.2.1/templates/de/modify-printer.tmpl
+--- cupsys-1.2.1~/templates/de/modify-printer.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/modify-printer.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,29 @@
++<FORM METHOD="POST" ACTION="/admin">
++<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
++{?device_uri=?:<INPUT TYPE="HIDDEN" NAME="CURRENT_DEVICE_URI" VALUE="{device_uri}">}
++{?printer_make_and_model=?:<INPUT TYPE="HIDDEN" NAME="CURRENT_MAKE_AND_MODEL" VALUE="{printer_make_and_model}">}
++
++<H2 CLASS="title">Drucker {printer_name} &auml;ndern</H2>
++
++<TABLE>
++<TR>
++<TH CLASS="label">Name:</TH>
++<TD><INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">{printer_name}</TD>
++</TR>
++<TR>
++<TH CLASS="label">Ort:</TH>
++<TD><INPUT TYPE="TEXT" NAME="PRINTER_LOCATION" VALUE="{?printer_location}" SIZE="40" MAXLENGTH="127"><BR>
++<SMALL>(F&uuml;r Menschen lesbarer Ort wie "Labor 1")</SMALL></TD>
++</TR>
++<TR>
++<TH CLASS="label">Beschreibung:</TH>
++<TD><INPUT TYPE="TEXT" NAME="PRINTER_INFO" VALUE="{?printer_info}" SIZE="40" MAXLENGTH="127"><BR>
++<SMALL>(F&uuml;r Menschen lesbare Beschreibung wie "HP LaserJet mit Duplexeinheit")</SMALL></TD>
++</TR>
++<TR>
++<TD></TD>
++<TD><INPUT TYPE="IMAGE" SRC="/images/button-continue.gif" ALT="Fortsetzen"></TD>
++</TR>
++</TABLE>
++
++</FORM>
+diff -urNad cupsys-1.2.1~/templates/de/option-boolean.tmpl cupsys-1.2.1/templates/de/option-boolean.tmpl
+--- cupsys-1.2.1~/templates/de/option-boolean.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/option-boolean.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,6 @@
++<TR>
++<TH CLASS="label"{conflicted=1? CLASS="conflict":}><A NAME="{keyword}">{keytext}</A>:</TH>
++<TD>
++{[choices]<INPUT TYPE="RADIO" NAME="{keyword}" {choices={defchoice}?CHECKED:} VALUE="{choices}">{text}}
++</TD>
++</TR>
+diff -urNad cupsys-1.2.1~/templates/de/option-conflict.tmpl cupsys-1.2.1/templates/de/option-conflict.tmpl
+--- cupsys-1.2.1~/templates/de/option-conflict.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/option-conflict.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,7 @@
++<P><B>Error:</B> Die folgenden Parameter stehen im Konflikt zueinander:</P>
++
++<UL>
++{[ckeyword]<LI><A HREF="#{ckeyword}">{ckeytext}</A></LI>
++}</UL>
++
++<P>Bitte ändern Sie einen oder mehrere Parameter um die Konflikte zu beheben.</P>
+diff -urNad cupsys-1.2.1~/templates/de/option-header.tmpl cupsys-1.2.1/templates/de/option-header.tmpl
+--- cupsys-1.2.1~/templates/de/option-header.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/option-header.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,3 @@
++<H2 CLASS="title">{printer_name}: {group}</H2>
++
++<TABLE>
+diff -urNad cupsys-1.2.1~/templates/de/option-pickmany.tmpl cupsys-1.2.1/templates/de/option-pickmany.tmpl
+--- cupsys-1.2.1~/templates/de/option-pickmany.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/option-pickmany.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,6 @@
++<TR>
++<TH CLASS="label"{conflicted=1? CLASS="conflict":}><A NAME="{keyword}">{keytext}</A>:</TH>
++<TD><SELECT NAME="{keyword}" MULTIPLE SIZE="10">
++{[choices]<OPTION {choices={defchoice}?SELECTED:} VALUE="{choices}">{text}}
++</SELECT></TD>
++</TR>
+diff -urNad cupsys-1.2.1~/templates/de/option-pickone.tmpl cupsys-1.2.1/templates/de/option-pickone.tmpl
+--- cupsys-1.2.1~/templates/de/option-pickone.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/option-pickone.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,6 @@
++<TR>
++<TH CLASS="label"{conflicted=1? CLASS="conflict":}><A NAME="{keyword}">{keytext}</A>:</TH>
++<TD><SELECT NAME="{keyword}">
++{[choices]<OPTION {choices={defchoice}?SELECTED:} VALUE="{choices}">{text}}
++</SELECT></TD>
++</TR>
+diff -urNad cupsys-1.2.1~/templates/de/option-trailer.tmpl cupsys-1.2.1/templates/de/option-trailer.tmpl
+--- cupsys-1.2.1~/templates/de/option-trailer.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/option-trailer.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,5 @@
++<TR>
++<TD></TD>
++<TD><INPUT TYPE="IMAGE" SRC="/images/button-set-printer-options.gif" ALT="Druckereinstellungen festlegen"></TD>
++</TR>
++</TABLE>
+diff -urNad cupsys-1.2.1~/templates/de/pager.tmpl cupsys-1.2.1/templates/de/pager.tmpl
+--- cupsys-1.2.1~/templates/de/pager.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/pager.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,7 @@
++<TABLE WIDTH="100%" CLASS="pager" SUMMARY="Paging Bar">
++<TR>
++	<TD WIDTH="33%">{PREVURL?<A HREF="{PREVURL}"><IMG SRC="/images/button-show-previous.gif" ALT="Vorherige anzeigen" CLASS="button"></A>:&nbsp;}</TD>
++	<TD WIDTH="34%" ALIGN="CENTER">{ORDER=dec?<A HREF="{THISURL}&amp;ORDER=asc"><IMG SRC="/images/button-sort-ascending.gif" ALT="Aufsteigend sortieren" CLASS="button"></A>:<A HREF="{THISURL}&amp;ORDER=dec"><IMG SRC="/images/button-sort-descending.gif" ALT="Absteigend sortieren" CLASS="button"></A>}</TD>
++	<TD WIDTH="33%" ALIGN="RIGHT">{NEXTURL?<A HREF="{NEXTURL}"><IMG SRC="/images/button-show-next.gif" ALT="N&auml;chste anzeigen" CLASS="button"></A>:&nbsp;}</TD>
++</TR>
++</TABLE>
+diff -urNad cupsys-1.2.1~/templates/de/printer-accept.tmpl cupsys-1.2.1/templates/de/printer-accept.tmpl
+--- cupsys-1.2.1~/templates/de/printer-accept.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/printer-accept.tmpl	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1,3 @@
++<P>{is_class?Klasse:Drucker} <A
++HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
++akzeptiert jetzt Auftr&auml;ge.</P>
+diff -urNad cupsys-1.2.1~/templates/de/printer-added.tmpl cupsys-1.2.1/templates/de/printer-added.tmpl
+--- cupsys-1.2.1~/templates/de/printer-added.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/printer-added.tmpl	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1,2 @@
++<P>Drucker <A HREF="/printers/{printer_name}">{printer_name}</A> wurde erfolgreich
++hinzugef&uuml;gt.
+diff -urNad cupsys-1.2.1~/templates/de/printer-configured.tmpl cupsys-1.2.1/templates/de/printer-configured.tmpl
+--- cupsys-1.2.1~/templates/de/printer-configured.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/printer-configured.tmpl	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1,2 @@
++<P>Drucker <A HREF="/printers/{printer_name}">{printer_name}</A> wurde
++erfolgreich konfiguriert.
+diff -urNad cupsys-1.2.1~/templates/de/printer-confirm.tmpl cupsys-1.2.1/templates/de/printer-confirm.tmpl
+--- cupsys-1.2.1~/templates/de/printer-confirm.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/printer-confirm.tmpl	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1,7 @@
++<P><B>Warnung:</B> Sind Sie sicher, da&szlig; Sie den Drucker
++{printer_name} l&ouml;schen wollen?</P>
++
++<P ALIGN="CENTER"><A
++HREF="/admin?op=delete-printer&printer_name={printer_name}&confirm=yes"><IMG
++SRC="/images/button-delete-printer.gif" ALT="Drucker l&ouml;schen"
++CLASS="button"></A></P>
+diff -urNad cupsys-1.2.1~/templates/de/printer-default.tmpl cupsys-1.2.1/templates/de/printer-default.tmpl
+--- cupsys-1.2.1~/templates/de/printer-default.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/printer-default.tmpl	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1,7 @@
++<P>{is_class?Klasse:Drucker} <A
++HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
++wurde zum Standarddrucker f&uuml;r diesen Server bestimmt.</P>
++
++<BLOCKQUOTE><B>Notiz:</B> Jede benutzerspezifische Standardeinstellung welche
++mit dem Befehl <TT>lpoptions</TT> gemacht wird &uuml;berschreibt diese
++Standardeinstellung.</BLOCKQUOTE>
+diff -urNad cupsys-1.2.1~/templates/de/printer-deleted.tmpl cupsys-1.2.1/templates/de/printer-deleted.tmpl
+--- cupsys-1.2.1~/templates/de/printer-deleted.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/printer-deleted.tmpl	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1 @@
++<P>Drucker {printer_name} wurde erfolgreich gel&ouml;scht.
+diff -urNad cupsys-1.2.1~/templates/de/printer-jobs-header.tmpl cupsys-1.2.1/templates/de/printer-jobs-header.tmpl
+--- cupsys-1.2.1~/templates/de/printer-jobs-header.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/printer-jobs-header.tmpl	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1 @@
++<H3 CLASS="title">Auftr&auml;ge</H3>
+diff -urNad cupsys-1.2.1~/templates/de/printer-modified.tmpl cupsys-1.2.1/templates/de/printer-modified.tmpl
+--- cupsys-1.2.1~/templates/de/printer-modified.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/printer-modified.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,2 @@
++<P>Drucker <A HREF="/printers/{printer_name}">{printer_name}</A> wurde
++erfolgreich ge&auml;ndert.
+diff -urNad cupsys-1.2.1~/templates/de/printer-purge.tmpl cupsys-1.2.1/templates/de/printer-purge.tmpl
+--- cupsys-1.2.1~/templates/de/printer-purge.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/printer-purge.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,3 @@
++<P>{is_class?Klasse:Drucker} <A
++HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
++wurde aus allen Auftr&auml;gen eliminiert.</P>
+diff -urNad cupsys-1.2.1~/templates/de/printer-reject.tmpl cupsys-1.2.1/templates/de/printer-reject.tmpl
+--- cupsys-1.2.1~/templates/de/printer-reject.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/printer-reject.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,3 @@
++<P>{is_class?Klasse:Drucker} <A
++HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
++akzeptiert ab sofort keine Auftr&auml;ge mehr.</P>
+diff -urNad cupsys-1.2.1~/templates/de/printer-start.tmpl cupsys-1.2.1/templates/de/printer-start.tmpl
+--- cupsys-1.2.1~/templates/de/printer-start.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/printer-start.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,3 @@
++<P>{is_class?Klasse:Drucker} <A
++HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
++wurde gestartet.</P>
+diff -urNad cupsys-1.2.1~/templates/de/printer-stop.tmpl cupsys-1.2.1/templates/de/printer-stop.tmpl
+--- cupsys-1.2.1~/templates/de/printer-stop.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/printer-stop.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,3 @@
++<P>{is_class?Klasse:Drucker} <A
++HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
++wurde gestoppt.</P>
+diff -urNad cupsys-1.2.1~/templates/de/printers-header.tmpl cupsys-1.2.1/templates/de/printers-header.tmpl
+--- cupsys-1.2.1~/templates/de/printers-header.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/printers-header.tmpl	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1 @@
++<P ALIGN="CENTER">{total=0?Keine Drucker gefunden:Zeige {#printer_name} von {total} Drucker{total=1?:n}}.</P>
+diff -urNad cupsys-1.2.1~/templates/de/printers.tmpl cupsys-1.2.1/templates/de/printers.tmpl
+--- cupsys-1.2.1~/templates/de/printers.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/printers.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,64 @@
++{printer_type?:}{#printer_name=0?:
++{[printer_name]
++<H2 CLASS="title"><A HREF="{printer_uri_supported}">{printer_name}</A>{default_name={printer_name}? (Standarddrucker):}
++{?printer_state_message=?:<SPAN CLASS="message">"{printer_state_message}"</SPAN>}</H2>
++
++<TABLE WIDTH="100%" CLASS="button" CELLSPACING="0" CELLPADDING="0" SUMMARY="{printer_name}">
++<TR>
++<TD VALIGN="TOP"><A HREF="{printer_uri_supported}">
++<IMG SRC="/images/printer-{printer_state=3?idle:{printer_state=4?verarbeitend:gestoppt}}.gif" CLASS="button" ALT=""></A>
++</TD>
++<TD VALIGN="TOP"><B>Beschreibung:</B> {printer_info}<BR>
++<B>Ort:</B> {printer_location}<BR>
++<B>Marke und Modell:</B> {printer_make_and_model}<BR>
++<B>Druckerstatus:</B> {printer_state=3?frei:{printer_state=4?verarbeitend:gestoppt}},
++{printer_is_accepting_jobs=0?Auftr&auml;ge ablehnen:Auftr&auml;ge akzeptieren}, {printer_is_shared=0?nicht:} publiziert.
++{?device_uri=?:<BR><B>Ger&auml;te URI:</B> {device_uri}}
++
++<P>
++<A HREF="{printer_uri_supported}?op=print-test-page">
++<IMG SRC="/images/button-print-test-page.gif" ALT="Testseite drucken" CLASS="button"></A>
++{?cupscommand=1?<A HREF="{printer_uri_supported}?op=clean-print-heads">
++<IMG SRC="/images/button-clean-print-heads.gif" ALT="Druckk&ouml;pfe reinigen" CLASS="button"></A>
++<A HREF="{printer_uri_supported}?op=print-self-test-page">
++<IMG SRC="/images/button-print-self-test-page.gif" ALT="Selbsttest-Seite drucken" CLASS="button"></A>:}
++{printer_state=5?
++<A HREF="{admin_uri}?op=start-printer&amp;printer_name={%printer_name}">
++<IMG SRC="/images/button-start-printer.gif" ALT="Drucker starten" CLASS="button"></A>
++:
++<A HREF="{admin_uri}?op=stop-printer&amp;printer_name={%printer_name}">
++<IMG SRC="/images/button-stop-printer.gif" ALT="Drucker stoppen" CLASS="button"></A>
++}
++{printer_is_accepting_jobs=0?
++<A HREF="{admin_uri}?op=accept-jobs&amp;printer_name={%printer_name}">
++<IMG SRC="/images/button-accept-jobs.gif" ALT="Auftr&auml;ge akzeptieren" CLASS="button"></A>
++:
++<A HREF="{admin_uri}?op=reject-jobs&amp;printer_name={%printer_name}">
++<IMG SRC="/images/button-reject-jobs.gif" ALT="Auftr&auml;ge ablehnen" CLASS="button"></A>
++}
++<A HREF="{printer_uri_supported}?op=move-jobs&amp;printer_name={%printer_name}">
++<IMG SRC="/images/button-move-jobs.gif" ALT="Alle Auftr&auml;ge verschieben" CLASS="button"></A>
++<A HREF="{admin_uri}?op=purge-jobs&amp;printer_name={%printer_name}">
++<IMG SRC="/images/button-cancel-all-jobs.gif" ALT="Auftr&auml;ge abbrechen" CLASS="button"></A>
++{printer_is_shared=0?
++<A HREF="{admin_uri}?op=set-sharing&amp;printer_name={%printer_name}&amp;shared=1">
++<IMG SRC="/images/button-publish-printer.gif" ALT="Drucker publizieren" CLASS="button"></A>
++:
++<A HREF="{admin_uri}?op=set-sharing&amp;printer_name={%printer_name}&amp;shared=0">
++<IMG SRC="/images/button-unpublish-printer.gif" ALT="Druckerpublikation aufheben" CLASS="button"></A>
++}
++<A HREF="{admin_uri}?op=modify-printer&amp;printer_name={%printer_name}">
++<IMG SRC="/images/button-modify-printer.gif" ALT="Drucker &auml;ndern" CLASS="button"></A>
++<A HREF="{admin_uri}?op=set-printer-options&amp;printer_name={%printer_name}">
++<IMG SRC="/images/button-set-printer-options.gif" ALT="Druckereinstellungen festlegen" CLASS="button"></A>
++<A HREF="{admin_uri}?op=delete-printer&amp;printer_name={%printer_name}">
++<IMG SRC="/images/button-delete-printer.gif" ALT="Drucker l&ouml;schen" CLASS="button"></A>
++<A HREF="{admin_uri}?op=set-as-default&amp;printer_name={%printer_name}">
++<IMG SRC="/images/button-set-as-default.gif" ALT="Als Standard festlegen" CLASS="button"></A>
++<A HREF="{admin_uri}?op=set-allowed-users&amp;printer_name={%printer_name}">
++<IMG SRC="/images/button-set-allowed-users.gif" ALT="Erlaubte Benutzer festlegen" CLASS="button"></A>
++</P>
++</TD>
++</TR>
++</TABLE>
++}}
+diff -urNad cupsys-1.2.1~/templates/de/restart.tmpl cupsys-1.2.1/templates/de/restart.tmpl
+--- cupsys-1.2.1~/templates/de/restart.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/restart.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1 @@
++<p>Bitte warten Sie w&auml;hrend der Server neu startet...</p>
+diff -urNad cupsys-1.2.1~/templates/de/samba-export.tmpl cupsys-1.2.1/templates/de/samba-export.tmpl
+--- cupsys-1.2.1~/templates/de/samba-export.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/samba-export.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,55 @@
++<SCRIPT TYPE="text/javascript"><!--
++function select_printers() {
++  var list = document.export_samba.EXPORT_NAME;
++  var sel = document.export_samba.EXPORT_ALL.checked;
++
++  for (i = 0; i < list.length; i ++) {
++    list.options[i].selected = sel;
++  }
++}
++--></SCRIPT>
++
++<FORM METHOD="POST" ACTION="/admin/" NAME="export_samba">
++<INPUT TYPE="HIDDEN" NAME="OP" VALUE="export-samba">
++
++<H2 CLASS="title">Exportiere Drucker f&uuml;r Samba</H2>
++
++{error?<P>Kann Drucker nicht f&uuml;r Samba exportieren\:</P>
++<BLOCKQUOTE>{error}</BLOCKQUOTE>
++<P>Konsultieren Sie die <A HREF="/admin/log/error_log"
++TARGET="_blank">error_log</A> Datei um mehr Informationen zu erhalten.</P>:
++<P>Diese Seite erlaubt es Ihnen Drucker f&uuml;r Samba bereitzustellen
++damit auf diese mittels Windows Clients &uuml;ber die Desktopsymbole
++<VAR>Netzwerk Nachbarn</VAR> oder <VAR>Netzwerkumgebung</VAR>
++zugegriffen werden kann. Sie müssen zuerst einen
++Windows PostScript Druckerteiber installieren wie diese in der Hilfe f&uuml;r <A
++HREF="/help/man-cupsaddsmb.html"
++TARGET="_blank">cupsaddsmb(8)</A> beschrieben ist.</P>}
++
++<TABLE>
++<TR>
++<TH CLASS="label">Drucker:</TH>
++<TD>
++<SELECT NAME="EXPORT_NAME" SIZE="10" MULTIPLE>
++{[printer_name]<OPTION VALUE="{printer_name}"{export_all? SELECTED:{printer_export? SELECTED:}}>{printer_name}}
++</SELECT><BR>
++<INPUT TYPE="CHECKBOX" NAME="EXPORT_ALL"{export_all? CHECKED:}
++onChange="select_printers()"> Alle Drucker exportieren
++</TD>
++</TR>
++<TR>
++<TH CLASS="label">Samba Benutzername:</TH>
++<TD><INPUT TYPE="TEXT" NAME="USERNAME" VALUE="{?USERNAME}"> (required)</TD>
++</TR>
++<TR>
++<TH CLASS="label">Samba Passwort:</TH>
++<TD><INPUT TYPE="PASSWORD" NAME="PASSWORD" VALUE=""> (required)</TD>
++</TR>
++<TR>
++<TD></TD>
++<TD><INPUT TYPE="IMAGE" SRC="/images/button-export-samba.gif"
++ALT="Exportiere Drucker f&uuml;r Samba"></TD>
++</TR>
++</TABLE>
++
++</FORM>
+diff -urNad cupsys-1.2.1~/templates/de/samba-exported.tmpl cupsys-1.2.1/templates/de/samba-exported.tmpl
+--- cupsys-1.2.1~/templates/de/samba-exported.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/samba-exported.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1 @@
++<P>Drucker wurden f&uuml; Samba erfolgreich exportiert.</P>
+diff -urNad cupsys-1.2.1~/templates/de/search.tmpl cupsys-1.2.1/templates/de/search.tmpl
+--- cupsys-1.2.1~/templates/de/search.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/search.tmpl	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1,13 @@
++<FORM ACTION="/{SECTION}/{?SEARCH_DEST}" METHOD="GET">
++{WHICH_JOBS?<INPUT TYPE="HIDDEN" NAME="WHICH_JOBS" VALUE="{WHICH_JOBS}">:}
++{ORDER?<INPUT TYPE="HIDDEN" NAME="ORDER" VALUE="{ORDER}">:}
++
++<P ALIGN="CENTER"><B>Suche in
++{SEARCH_DEST?{SEARCH_DEST}:{SECTION=classes?Klassen:{SECTION=jobs?Auftr&auml;ge:Drucker}}}:</B>
++<INPUT TYPE="TEXT" NAME="QUERY" VALUE="{?QUERY}" SIZE="60"> <INPUT
++TYPE="IMAGE" SRC="/images/button-search.gif" ALT="Suche">
++<A
++HREF="/{SECTION}/{?SEARCH_DEST}{WHICH_JOBS??WHICH_JOBS={WHICH_JOBS}{ORDER?&amp;ORDER={ORDER}:}:{ORDER??ORDER={ORDER}:}}"><IMG
++SRC="/images/button-clear.gif" ALT="Leeren" CLASS="button"></A></P>
++
++</FORM>
+diff -urNad cupsys-1.2.1~/templates/de/set-printer-options-header.tmpl cupsys-1.2.1/templates/de/set-printer-options-header.tmpl
+--- cupsys-1.2.1~/templates/de/set-printer-options-header.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/set-printer-options-header.tmpl	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1,3 @@
++<FORM METHOD="POST" ACTION="/admin">
++<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
++<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+diff -urNad cupsys-1.2.1~/templates/de/set-printer-options-trailer.tmpl cupsys-1.2.1/templates/de/set-printer-options-trailer.tmpl
+--- cupsys-1.2.1~/templates/de/set-printer-options-trailer.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/set-printer-options-trailer.tmpl	2006-07-19 00:40:14.000000000 +0000
+@@ -0,0 +1 @@
++</FORM>
+diff -urNad cupsys-1.2.1~/templates/de/test-page.tmpl cupsys-1.2.1/templates/de/test-page.tmpl
+--- cupsys-1.2.1~/templates/de/test-page.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/test-page.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,2 @@
++<P>Testseite gesendet; Auftrags ID ist <A HREF="/{SECTION}/{printer_name}">
++{printer_name}-{job_id}</A>.</P>
+diff -urNad cupsys-1.2.1~/templates/de/trailer.tmpl cupsys-1.2.1/templates/de/trailer.tmpl
+--- cupsys-1.2.1~/templates/de/trailer.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/trailer.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,21 @@
++</TD>
++<TD WIDTH="15">&nbsp;</TD>
++</TR>
++<TR CLASS="trailer">
++<TD VALIGN="BOTTOM" WIDTH="15"><IMG SRC="/images/bottom-left.gif"
++WIDTH="15" HEIGHT="15" ALT=""></TD>
++<TD COLSPAN="2" WIDTH="100%" STYLE="padding: 5;">
++
++<P><SMALL>Das Common UNIX Printing System, CUPS, und das CUPS Logo sind
++eingetragene Warenzeichen der <A HREF="http://www.easysw.com">Easy Software
++Products</A>. CUPS ist urheberrechtlich geschützt 1997-2006 von Easy Software Products,
++Alle Rechte vorbehalten.</SMALL></P>
++
++</TD>
++
++<TD ALIGN="RIGHT" VALIGN="BOTTOM" WIDTH="15"><IMG SRC="/images/bottom-right.gif"
++WIDTH="15" HEIGHT="15" ALT=""></TD>
++</TR>
++</TABLE>
++</BODY>
++</HTML>
+diff -urNad cupsys-1.2.1~/templates/de/users.tmpl cupsys-1.2.1/templates/de/users.tmpl
+--- cupsys-1.2.1~/templates/de/users.tmpl	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/templates/de/users.tmpl	2006-07-19 00:40:15.000000000 +0000
+@@ -0,0 +1,26 @@
++<FORM METHOD="POST" ACTION="/admin">
++<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{OP}">
++<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
++{IS_CLASS?<INPUT TYPE="HIDDEN" NAME="IS_CLASS" VALUE="{IS_CLASS}">:}
++
++<H2 CLASS="title">Berechtigte Benutzer f&uuml;r {printer_name}</H2>
++
++<TABLE>
++<TR>
++<TH CLASS="label">Benutzer:</TH>
++<TD>
++<INPUT TYPE='TEXT' NAME='users' SIZE='60' VALUE='{?requesting_user_name_allowed}{?requesting_user_name_denied}'>
++<BR>
++<INPUT TYPE='RADIO' NAME='type' VALUE='requesting-user-name-allowed' {requesting_user_name_allowed?checked:}>Erlaube diesen Benutzern zu drucken
++<INPUT TYPE='RADIO' NAME='type' VALUE='requesting-user-name-denied' {requesting_user_name_denied?checked:}>Verweigere diesen Benutzern zu drucken
++</TD>
++</TR>
++<TR>
++<TD></TD>
++<TD>
++<INPUT TYPE="IMAGE" SRC="/images/button-set-allowed-users.gif" ALT="Erlaubte Benutzer festlegen">
++</TD>
++</TR>
++</TABLE>
++
++</FORM>
+diff -urNad cupsys-1.2.1~/templates/ja/printers.tmpl cupsys-1.2.1/templates/ja/printers.tmpl
+--- cupsys-1.2.1~/templates/ja/printers.tmpl	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/templates/ja/printers.tmpl	2006-07-19 00:40:14.000000000 +0000
+@@ -12,7 +12,7 @@
+ <B>場所:</B> {printer_location}<BR>
+ <B>メーカとモデル:</B> {printer_make_and_model}<BR>
+ <B>プリンタの状態:</B> {printer_state=3?待機中:{printer_state=4?処理中:停止}},
+-{printer_is_accepting_jobs=0?ジョブを拒否中:ジョブを受け付け中}, {printer_is_shared=0?not:} 公開。
++{printer_is_accepting_jobs=0?ジョブを拒否中:ジョブを受け付け中}, {printer_is_shared=0?非:}公開。
+ {?device_uri=?:<BR><B>デバイス URI:</B> {device_uri}}
+ 
+ <P>
+diff -urNad cupsys-1.2.1~/test/ipptest.c cupsys-1.2.1/test/ipptest.c
+--- cupsys-1.2.1~/test/ipptest.c	2006-07-19 00:38:01.000000000 +0000
++++ cupsys-1.2.1/test/ipptest.c	2006-07-19 00:40:14.000000000 +0000
+@@ -122,6 +122,7 @@
+   int		status;			/* Status of tests... */
+   const char	*uri;			/* URI to use */
+   const char	*testfile;		/* Test file to use */
++  int		interval;		/* Test interval */
+ 
+ 
+  /*
+@@ -133,6 +134,7 @@
+   uri      = NULL;
+   testfile = NULL;
+   status   = 0;
++  interval = 0;
+ 
+   for (i = 1; i < argc; i ++)
+   {
+@@ -140,6 +142,15 @@
+     {
+       if (!strcmp(argv[i], "-v"))
+         Verbosity ++;
++      else if (!strcmp(argv[i], "-i"))
++      {
++        i++;
++
++	if (i >= argc)
++	  usage(NULL);
++	else
++	  interval = atoi(argv[i]);
++      }
+       else
+         usage(argv[i]);
+     }
+@@ -174,6 +185,19 @@
+     usage(NULL);
+ 
+  /*
++  * Loop if the interval is set...
++  */
++
++  if (interval)
++  {
++    for (;;)
++    {
++      sleep(interval);
++      do_tests(uri, testfile);
++    }
++  }
++
++ /*
+   * Exit...
+   */
+ 
+@@ -890,7 +914,8 @@
+   fputs("Usage: ipptest [options] URL testfile [ ... testfileN ]\n", stderr);
+   fputs("Options:\n", stderr);
+   fputs("\n", stderr);
+-  fputs("-v     Show all attributes in response, even on success.\n", stderr);
++  fputs("-i N    Repeat the last test file once every N seconds.\n", stderr);
++  fputs("-v      Show all attributes in response, even on success.\n", stderr);
+ 
+   exit(1);
+ }

Modified: cupsys/branches/cups-1.2/debian/patches/00list
==============================================================================
--- cupsys/branches/cups-1.2/debian/patches/00list	(original)
+++ cupsys/branches/cups-1.2/debian/patches/00list	Wed Jul 19 02:23:15 2006
@@ -1,4 +1,4 @@
-00_r5743.dpatch
+00_r5754.dpatch
 02_configure.dpatch
 #03_manext.dpatch
 03_clean.dpatch
@@ -20,4 +20,6 @@
 53_usr_share_ppd_support.dpatch
 55_ppd_okidata_name.dpatch
 #56_dirsvc.dpatch
-57_cupsaddsmb.dpatch
+#57_cupsaddsmb.dpatch
+58_fixdestc.dpatch
+59_de_docroot.dpatch

Added: cupsys/branches/cups-1.2/debian/patches/58_fixdestc.dpatch
==============================================================================
--- (empty file)
+++ cupsys/branches/cups-1.2/debian/patches/58_fixdestc.dpatch	Wed Jul 19 02:23:15 2006
@@ -0,0 +1,18 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 58_fixdestc.dpatch by Kenshi Muto <kmuto at debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: No description.
+
+ at DPATCH@
+diff -urNad cupsys-1.2.1~/cups/dest.c cupsys-1.2.1/cups/dest.c
+--- cupsys-1.2.1~/cups/dest.c	2006-07-19 01:40:09.000000000 +0000
++++ cupsys-1.2.1/cups/dest.c	2006-07-19 01:43:15.000000000 +0000
+@@ -45,6 +45,7 @@
+ #include <stdlib.h>
+ #include <ctype.h>
+ #include <sys/stat.h>
++#include "ipp-private.h"
+ 
+ #ifdef HAVE_NOTIFY_H
+ #  include <notify.h>

Added: cupsys/branches/cups-1.2/debian/patches/59_de_docroot.dpatch
==============================================================================
--- (empty file)
+++ cupsys/branches/cups-1.2/debian/patches/59_de_docroot.dpatch	Wed Jul 19 02:23:15 2006
@@ -0,0 +1,791 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 59_de_docroot.dpatch by Kenshi Muto <kmuto at debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: No description.
+
+ at DPATCH@
+diff -urNad cupsys-1.2.1~/doc/de/doc-de-images.tar.gz.uu cupsys-1.2.1/doc/de/doc-de-images.tar.gz.uu
+--- cupsys-1.2.1~/doc/de/doc-de-images.tar.gz.uu	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/doc/de/doc-de-images.tar.gz.uu	2006-07-19 02:14:23.000000000 +0000
+@@ -0,0 +1,633 @@
++begin 644 doc-de-images.tar.gz
++M'XL(`+>1O40``^S:9U13^;H&\+V3D-Y$0'#0"2 at 8(&!"$RD"4NP#*$U%)9`H
++M*$T(5=`@(I!0E5"D&$-OTI6F!E%1!*0((B,=!`454!R=<?2 at SLR9<6:=.?<N
++M]<Y=B^?+_I"]5O:'K-__W<\;9U?Z`:;7:@=O%LO=39GNZ,CT8"D?='?P4CG@
++MO!_X/*'.1U-=_?V5MD:#^OOK^]!H:V@`C:JNL8:FN4954PV at TC0T:52`1/U,
++MW_\?X^W%HGN22,`A5V^6^W^X[^\^_W^:#9M,M=;2XP`QX`01`)(!(!V_)$M*
++MJ8!B6*)C7;%A>^V.0]=<CC<?.WTW/OM!3L5 at 6<MDR\!LW_C+1V_>_?3N?QB9
++MM^)&GDPZB\D@^3JSG$B63DS2ADW;S`&9US`0#1`!ROM'>O\P@,A;TLIHXB+`
++M*?^\R^1E#\H=5A\<EA>3\^2=D&\NV1.!;LCTO/5"G+51[MR,TZY#74I3:QU4
++ML;U4BI+;C$,X8KVI_,7\I[.K53:(RY3=.%?_7?ODMF/><C0X%L#"CBIZ$*)C
++M/!!X*P at F&@/Q01/PS at K(TV@]15YB,D`X0L!"R7F6A6?/Z147%.7F1U07\0F"
++M\[54>1H&`2`PW";7HU?"Y4$4FHS"@&`"&9D$HE&4B'L=YQ\@PW+'QK^']`U,
++M3#T<G;X\C9U\, at O.K,Y0@>!70;2TQN0Q:C8YUDAC&C&43<&Y_1Q22K2*`>"K
++MU\=/"'FF,3[+G2(G2C*NQQKUBQH$#)[G*S%S+8GVP*.Q,AYE?W=D=62<4JJN
++M:\V+\@Z^&>?-T at 1=&5%F6P at 6!VL6O)#AP%&[M6+10,:V<QM*RR2U[_)ZQ)GN
++M9,]@%Q.:,1(2_^/CP824(@#F(MB/VYW@#<"W[@ZV*6Y/;P(P;YO4BI9N#4;D
++MM$0T7D\4%\'C^'GC5+:ZAZ48OV/GXE5FO?;!]5M_9(_?V*!?L/]-K]SQ^X9>
++MY<1V at GDD&!B(23R<,SLM at 1I5\?"M>XT6M4C-B1TMN/ABR,[4^$IKVA&?9=VU
++MW,0=#\+#Z2.=^^KI*V&`SO_U#W\A'^+\1_\9#&5'%[K7Y]3_O_!?4_53_U4U
++M:`O^?XU\]#_LH_].3*K+(1UOEO'1H.VA)_=R(VQB8@\F\AQYR;YY.>%55?SF
++MEDM#@_<>/QI\-CWY\[LW7\;_L-_\-Y?YM_\5%#'&NG3O9_/^F_$7+SMQ,]-3
++M06<TNA*Q6#ZM#!N5WS4F_;IBM[B6AH0JD=[S-&N9EBC;TW9=$.S:C#H'>4Z`
++MQ#OY!S!.A)RDR!V%X^&A`!1#(&!TX5@"S at -(3$X!T?AX7R4":N<\_E;9N?F'
++M3Y^.*2 at IL]\.GG*WX at LPF46$/*J\)1('\P.P<)"/(0>#4'0[LK,+0/.J[SL\
++M0&,K#@\.*Z+:1D9V7>SE04Z1Y\^!@C&JK at OA>+D"B">K7T(GV9/8\&(80+F^
++M`BBPPM7;R7H[$75T\7MQN<<][EQ%+(I+.I at 9"63;'KLGH>5$"F=O3BAPN*68
++M-354""[[Z7XA^3H>'49CYA?TR.[#*"`A>@[^B%RTJ1)_N7J3(,V$"8GER<K9
++MYY@!>T"&<2F-9)7^"OT*!)QVB#O'Y5,DB0:/']1 at VMNC+"L?MBEB-?/L^22@
++M+NT$KC'%5S*TW_E188VP5*(CQ=!6UVJM?/,BH+5Y>ZKH#;/QFC/K;SET5'@)
++M'\.J6/4249MC1R5D6V5[]43&1=<%^6'V"0P`7?>-&PVD6J4W0O:)A;*D2NNJ
++MYQYV>DU<;@W"3,O*<KR_??=-6#1Q`?Y_5O[LOX>GLQN+Z?DUYW_--7^:_]74
++M%_S_&OG#_/^+_U[&08$6X2=MX^(/S^-?D,NMJ#A36Y=SHZGJ;D?#O/]/ID:G
++M9Y]],?]_-__+_'[^1_\V_Y-[(K`?YG\IULW]4W&9FVU"3\[U!D17E;B:I\IB
++MI$2FN3\$5"V+-'9W>MF5$L/F!.R3D*&301@*#[4*/P@$<>2"%9%H,@&QBWOD
++M>"@>P23#4@`PE(`.X/(8\;NP88DY!45N96EI98'SLSTAQ5J`S\S.)Q12Y6,4
++MH/CY-P4':R0&"D&EB>"=@39H]5UN,R7S>R3V].WA444$IF+L_--$%`8"P=QI
++M?_`0'*%ZJ3!`Z^7-AT\*#`OT$-+$C71B*,#D_LA[!):D&1 at ZH*G4.152[9:3
++MYMB2#J*P89/8`ZE;I-.%:5ML_(4:!B6-"8T2,+J#Z,[9L99H[E8K.T;G`6R$
++MTDWC6>?-P*T0)EQ]T)+X*"U5?P_*J<3#K/,L;=MV%,J>8>6ALV?03SW7G"*.
++M)<*(?$RHID5:YO9+. at 8=M17:P1![`_'S=C7Z(ZU%W[COU:O]X<>E07$KFE.T
++MH%9$^VG[@ZNWA1:Y9"6[BE\HT"F'5_`<O,:A^GN.X+-N@\>5D5O-?&0@>8(!
++MX<Z-<\_EJ at Z/>$YX;UDOVS0S;B^J3<ZZ=ALYWE9^*(:^)^S9D\&S[VBJ5VU?
++M/1<>ED2!"X?`/R9_]I_EY.SU>0^!O_-?;8WZ)_YK:E(7YO^ODH_^UW_B?V"@
++M1=A)VWG\3_$.%^1%5E:F7KZ2-^]_5T?#\%#/%_:__J_]=QVH4B0R]-.K^1X;
++M*4MC(&=S/5RTS[:1B]H<-Q=?15@<T5"OLA7SCH>&G7OHJ:3,D&S-'Y at T]*42
++M#;0X;TM&N"YK at K<10,5=(::;B%2[#V=!P!%R3-QIHPCU%':\@ER4$A+-`T`D
++MGH`^";Q_+T`DY!44$1#[L,EA&5E`U3[AI9PX?'DVK#&GLO!(M7,]H3:[XZXP
++MT'Y_>&"#PBX0'82(;KG8=D]%7J`(Q6?/'Q`@"D7&PT'H2V#F^=P1L68C(=MD
++MJ2\8[&(T9`9<H<.G:?$;8@;R=0=@`L4)URZ#:`4\Y97IUMW%,,Q;&-)6>'W?
++M=?:W='N[<EE at B0I.%>6',)`H3M?V7P<X=-JWI/A+0#3\A&"PV%J+J0=JI_.S
++M4JS-DOV[FG9KG%HI=TZ2K>;4+=AI39I*BL($B^"7UM4GM,3O*5'H5BSJGML-
++MA87U]LN]["JX!UK,^%A&YHKW7K`5OYB[.6EH=6J\A;%Q.__QWEN93R5.[>HF
++M.3#T]&K-E]Z/!^!FA$K1M@!UH!>X!B'=WEDY*J[3LZ>CQ62T#KRB[@:WMQL8
++M:\H^>4#5:Q4;.+SX79QNE&#M;'TD)L6!K6TR-UETQW%#WBFF+V<`YS[<GMN:
++MEBGCW3*GZJKB];-`BC'PK>\B@$N)EG0(6;JD&'RY[]B at 2)6D[?%S]O:4T1YO
++MF>,YX5Y8R8GF.2F,+./EK0BR:7"2+"-S8IB[865;>HAQK+U(I-9#6Z,=>"VC
++M:Y(K'N2.Q!IO!AD$>8F\T5-J%,$UY"1582R>,L4W1BX<0N_S1_\=Z6Z.3!=E
++MNHO+Y]P!_*W_:M1/_5=37_#_J^2C_^=_Z?]!0&KI$GFRW#8S$P<&W9-U."#0
++M/X(;?IIW*B-+4%916E-7U=QZ>V"H__'4E^O_S__F?QOQ#_X[4V/?^`T+W_O?
++M`=%K%]Z<]]]<&%U1H6=N,\&/BVJM4?2PL$OE>.PLB[.8.[K[(#UP at BN^/)3:
++M[7.GL<8+L`GV]/CNA,%&HBI.!!=P7#,JYIA"^-Z#B1IGULC1H%C`)>$(&8$G
++MH%3X`E?[$$)I64BT#02=B]$'4`2\KT).GO+%:GV_W'Q;D5L)E=DM]?@K"3`[
++M+*2CP;:;T$.5IZ%A``R=&0?`:^J0RB-CXUE9[`24?@:`:$*@01!=5J at 3)^SC
++M!/Y4\@KJ9S"D+X(3Z3.BE:0I[`&QFW7II'AM'Y'2K5-(QT0,B'^[7>MF at LH6
++M:`*X_;Q!WJFQ`G_VUOS8UZ*A0"*5>3GV-3L+V&P2)-O7M=A at J]BVABD(9SB/
++MGV>$;PX at TG`)192*UL?HO'Y=`"+!YWAKXGJ2#S(KTU*>3A:63TQ<NK13]$:3
++MF/KN]5W5P\5F at K5UPY;M;+N\;'U$@U.DBL*N3-,X57EI#?<:^(G7-6TS5Q^@
++M_3 at X\DUY at YWH3L5!&G6PXIYN@[TTQ3DM:\`HN*"]QKKZ^PO\4.(R5=V",QKZ
++M/HLFLP^II#[--U&9S;+/LNW3:%2HR+"78]>'W.C#\4]='M,-5KDD+3GA,*C#
++M?3F1:++XFDL*ZUD_VQ>MT=VUA.^M'+[.(.D;;*OQIA!B/Q_ILVB]G]"HW2I7
++M!FOI<I,$=F+'A\*_GVF#1Y"S)4.E="FYPUSJ\K at 3$2HWG!PCM5<N at BS8_M_F
++M+_V?M_]S+@#^%_M?=9K:@O]?(Q_]Y_[.?XD/_ALS]CMZL3SG_>?\ZG]I>4E-
++M7?5[_X?[)Y]\.?^Y?^T_#@;]I?\ID>B)@+_O?R+'-FX<X\\XW<BG4';<#N0D
++M1>;.7=_&.WU`;K6UGQBC]X66,J$[U"2\T-!)V.*HS++V72_W'1:@L]F$Z)AH
++MP,T2@*#Q!(P>@,+C72D)26?(!'@Z:G\./B]+)!Y`)!61R\[N#R)@(0IEA`I"
++M=>VOQD=FM;2>0NEQ2XL^P'Z@$U%$N`=B$%F#PUGM9'@F"EEY!GPRO at H>`3Q>
++M-37[<DXE106"WZXU*+=))$%K_YL\))(/&H*ADNO\)C:(7M^>(BU`"LU'.(B4
++M$K_1\#BI6&AL__)(I9O(H?+-&*J)PSS[[*28O<O5<]68V]*R`CND>]</<8(5
++M@'68DN=22]9%ZJYG@%WWC5/$BZV;\@7!%C&Z&4O'/!&-&*92M(*JQPK#'<#&
++M,&T#6:&KLD>O;7,1PT:TGS=0H@`47F5#]GKWI=FN%>/2K_5?K;DYX["+`T;`
++MJ'["\2=YBG;9'O+\ZT50Z`%C7Y_0IJW!W1HX\U*725P;JSPC-E3FJA-_*43Q
++M[?*G*V*6#ZOCD?LCZ]8^6^206DL"=M?,B>^-MAMH[8M8A+Q<RW5W>W,D8GJD
++M4VEA__L/RB?^.]'=#C"5O9 at LEK/;@:\U_]/6J'TZ_VM0%_S_*OGH?_+O^A]M
++MEI=14)!%1/C.1)[CZ03/P at _]SQ5A?F-3U=WVJT.#]R8GAYY-3WVQ_B?YK_N?
++M/9A?^W^/'M$I8Q&!YRT7.*8FL_,'`ZN<GNY*U#*+G'NN/EBBFG]Q6,`R]?*K
++MH[NZ<!F+HV)_[$@_WM at 8:"07X&Z-P+W_=\^'=H?I\J'K`:W/,!7I81%<`)P?
++M\Q$V\0E))\,Y%"CF($:/</:\(#,[EY>8S#Q[I>B<BOP))3H:&H_]T.J at 4@`D
++MI at G5D=KK<+,)V0R at T!!(*;GKWOW$_D%%[!W(L/6MV^/E8S83&8]'GD]1]3H*
++M+<H?&<8`-B1<)YQO2`;QZ.^^]YGFA)A#1==%VF;+1 at +2.(%!#S;#5(PX6`03
++M4U",Q6H?U:SW;!,**X)A%[=%5K<LV;0)ZEM&&@S'-:2O:!@4ZUUE:J!L'G.&
++M1E0U"<D1O?U*5- at IV"1F@]'88_'\FIF;G`4#QK4ZN(H-B[SDC6$O[ZH`\+8A
++MV20E*`R$D2<XZZ77>OG_@)_88A.J=OE$7I]1H<U]A^S%80\725J.VT*+7!ZV
++M.&^I.`M&DTSP5%L;3D?2#O91%N=1[O9*"Z%;8'QH^(5C-[!.Q#HM0#<ERG&3
++MAV3PK/[*3%UW3P->\2/;FLC8Z$NU/TCU>@/OOKNL,[M"EL/;5RS=&+>P"/YG
++MY!/_79ATMX_EO[(3D\[X/"?`W_FOJJKQJ?]K:`O[WZ^2C_['_^;_H8/:'_O_
++M\#";#_V_5V%^](4+Z?/^W[AUH:NC863X_I.G#V=>3'\Q_^/_VG_<O_T/_]7_
++M;G1-YN*7]E:A)V]X-P49;NB[IZGQEH9MF=W<-QKQ+0$!;?\F_SY;,5T:^=-N
++M4Z+EQPWP_"1[+$I)+N27#;"_H at T8AD<PR+#T9$!P-A6/1P7Y(_"$`G\/*Q!9
++MC"X\DUAQ at 5#%X]5B(S+_Q<Z9QT.]MWW\]YL9LR_(EB,),3,&8Z=28RD2(F1I
++M0;8A199""&,=LA/A)&0K2R*T#A5"(DOV;!4BZG0Z+>=TGL&YSUU.]ZO[>3W5
++MZ]SWX_KO]_O_>G^OZ_I<GROS""+C^LT2JUM4B002%)^"5K<S7U2"L^%X>OK(
++M6#\$@D&F8)Y.L8B(@<SA at SWS+U&OS&]`001VKO7L5>XRZQLNOWT8BC268-W8
++MT&ND*)+?`H+RI3(YM-`#5NL/0`6O0:D7D55*WN_T()SN+]>=#?A!8[_QW8I=
++MA(@84Q]QI<0NQEY[P4+,ADINJ4S?V/H+BIA87 at .#4]M>%24[=_YXG*FM)8>2
++MD@(52(FHMU-VC`I`%=+[%LC3_1$W72FPZA?2SC-R&]N2HW\.W\:?@2U:<VN$
++M!H#HBD.KC"K1EC9QH+A-Q.%):/-S'SXL->B!(&_&QIL9Q35K-'QSYASO:7#$
++M"FW(SI/S<3]J(EEI#N.1./?>M,"B9#^X5DP_,Y_WCLY:V=3>SM2)8MO(D6>Z
++MNCW3TIHR*''D5=$Y>>Y*J0VAH3SSM%+&L<<V??&R8FVY9W9N@?NOZ7KV3.?^
++M;Y%(^GN.221>)Q18>1F^8_R5_U]S\V<IOL!_JI+R\OI?46EE___[Q!+_:?^L
++M_]G\]](.##2)CEK at _^G,XV6E2965&8O\KW[8>9O-_^>S$W,OGW\S_M,6^?_P
++M8_X'T>)?^=3[E)9I2O-=S>8TSP8CFNR+57=M2+K\<'S[XRB;SF(^H_H*"+)1
++MBXL6?,>^:[P][<=&!]:M=D>LC<3<=#DGC!M%]`\,<D&K,$X$>T2P>4Q5V47!
++M'9/#$U.(D#2/Q-.G7%1`2[US)$)1L4MQD0NYI-2C7#51NB#]<BVE`'?E4F$"
++MS(_L#P6AZ!!,X]TR4D-3,^N^C(+%Q1!O>/M`=S\!.]@U01&]N6=*SF!ZEBBN
++M\WR/OMB+ESM?*4[^LD%]L[COF\?QHV)_M\G'LOQW.\QN_+T=OBX"OI3_*O++
++M\U])7G&E_OLNL93_YI_6?PO]/W.Q_T]F]__%)]GU7UW]!7;^]RS5?S,3+[]A
++M_6?^F?HO$PUSCBNX,.=?AE8QKM.A")IS#,PWN3Y/%"OPFJZ_+FQ!F=.8V&5)
++M0[8^$W.[6?(@C5=752@*F#Y"MZ^"-^0>H7%PLEM]CV/`,?L3P0Q/;P(62I4X
++M*(5<V-%#>J+5[!<;>F(*]%!N.`6!(9TKR,A'8JEJYF$`/AZ`XCVK[/VO$'%7
++M(->+R+X>M^XT$M1`QWT40DN')]D>BL'CX)X1O23H[;[1IC'9*ND'-5>N34V2
++MX(VX9U,0+$SJ=5=?Y?O2\D(ODLFUO42>M)R(`RE%(-I(!,8:&4!'G!5M/EB0
++MTR#.>VCX=M0Q$4X`>E25G$_/XZ9MEWDJF%])#[=#<_W2/DGAWM;:=F:K+ at 74
++M,X4G<VE%D[=RPS3;SFTYKBS]@J=XE:"&YO^V>OHT_^T=7!V\'+ZV!>1+_1]5
++M:;G^KZ2BI+*2_]\CEO+?\T_]1_`'?C*%9+!3Q][1SNW(8?\`O^@89GI&6D'1
++MN:KJRH:F.P^ZVH='AR:?/?WUPS?2?SP_J_^X4N/?^#SPG_N=92HB*0B+:YIX
++ML4W^I;#>:E.UDSEIHM;=_?W"UXV'SI/I/(#-81>,0>- at TSJ8,J\JDJAJ_KMI
++M at 9X7.XT-Z400S0;!1BB6@/,)B4L@(9BH?20D'H\DQ<8G`J?P3KXP'`$+24T[
++M6'2^1%;""XJ[Y$O$&B+2 at 5``/,/:=HL(CP&0M\DFB)A(!+&N,:^CTQ<E"<<T
++M-;?V#P[+;K0CA%VAX(F.3X#GY)J(&2D3_"6'68ZYGUX_,?F5H_`70"01`0LI
++MT5AG$YR#\.96<A>EY:R*%*C3M[W5GK/A>-M+^T$![H:-?$8GX;SH&H\[(J=^
++M%LR$H2C6T+19#^E!TBJ'[?S*$-25W%*K$!+*ZCHLWFNR>C<D,"64CR;(S-]1
++ME-A?)+.ZRUK(^=[JI/JV=%*UMD'4'0S'@";<M.I<[0632]6E^D>40O6?WSDC
++MK=WZ2JN&2E"SPTGMQ^:BQAOC.49U^6LK>"FJ\#W#_FE-]O<RM<Z7:ZS(-?^]
++M\5G^?V4+R!?YK_+7_2^%%?Y_EUCB?\#'_"=)$7<:J1L:&;BX.A_U\6:$!L?&
++MG\S(.LU^`B[75-V[W]+3VSTV,?K^MW??AO\!G^6_HB#V#_^?C53V*MR"_R^J
++M/B%6OT],S6QWKJ&QUU'<T;!'CY__3-PB@!"6GWEFV">GFH@,WL>!C.C?L:\Y
++M8?U1*02:2(#CW<CFOG at XR0R"YR`BHL+"(ZW-40XH$IO[2:23<>$<45@(*960
++M!A"*G"[(2H2007PX>M/A%`P((N,!&![&DD3=OGB=8H:L`S$(8A/[60`0G??:
++M)!'89J#UVNBX['%I6S."RTT`7Q5=].HGY:L7GX4_K$I\B)ZIJQ[;)^=;Y;4Z
++MI-HQK-XB6E0S]`E+4%S!X=W%SD)C%@31*\&7'"F7VY2DE>5>5<\CNX<W)-HK
++M*[&1T-9RXAUMBN%KE"M,Y]XW:!058<.OV,=C.G5T;"`9P!FNMF#I`3OX._*E
++MZ?E!W7(>ANL-2_RJG#!"1UNI-!8U#(#GHJF0[=O%3*-/"XAK]5WJ9!QJT%;J
++MQ60;#R69OWQ^J$\3=E,Z7LSMK(E.Q>,6O1]MAEO3M_&)96E%&[Y(OSW>47C*
++M2.;`A-?T0\7#/"L&CO^>^)3_#O;.7 at M#`$=G)V\/6R]G]B]'9]?_ZSC at 2_Q7
++MHB[3?^2I<O+**_S_'K'$_^Y/YG_L_G]!_]FSY/]8Z/^KS[#JSB_I/R,C/<^F
++M1^=>S'RS_:_N?^7_\+F!ADW%268M^C]TTT<DR>)GV at N]-E#>9!IKCFN<\TAZ
++M9%?34A&;CX6Z"#G\,*2LLE?5K=N;9>XSHCHH#.X/\5,]%A:Q;0<GU1J&=SFQ
++M+US[6!(E52F-?%I^?0P`CR.!*#P>%0P0$'NPT&+"Q6)B'B'`VJ[FPEXHYB)&
++M\F*%=5Y^X<&KI8OK`X%`537Q^LVZ^HZ%)8(B#\1`8]_`4-<-`JMI3_$(80QD
++MMP/E%?,3PW?+9"5BX#@8F1-850[4"7)`(4(VY1)W^(,AR+%^+ZKN:0#"3:0W
++M<8EJ,(HYR?;($>,@$/7!R.=5V-B!AI.7C(0LXJD:S6D9<+[D[4E=!J<$I4H[
++M4!Z.]S)6^0JKI[FOBQ'Q$Z;IC=+6GE'2@(B?M$SI[TDC9!<C1X+$S,\[F#G\
++M]E)_+;,4 at ->L.W at Y>#/H_-CB4%"]#/H:9;+8NZ9Z;NB:-\'NW)TI;M4 at O(FS
++M$J9G5/"N]4UN>CA.4J8U^0=I]W:`6Z2!J(P9N&+%U]94..6]>TB-G]Y7:EF-
++M7Z,UL]XH9SCG\:QES<.6$S=3-\O5^MP=+>L+E1<^50(^V?/#F\#K^51 at EI*J
++MTS*SYE?FS("G>MA,CO':%.VH"-_"GS`,J`"OOY(:;8OW.ZY9GC5H40,$2\]Z
++M_OS31YYZ6;`DH1>@33+#;?6(C2.78>]:'7?G-R);WU,TD4ISW6-MFU+5^(,"
++M.X'L?@7KM^.MH'5[$X<<ZK9HK%]V)21*45'F$D>,?&UJC'-L6!(S=#-:S<YQ
++M-O+6!-39W3Y7WP#_)@0YD*"!L]X?3GJ2)D,4S4E#PI#<Z:Z7^SA0%J%]AFJ'
++M>YR?<CG&<#[-\G\]58#Q?=?^^$PHGV!^NGXD*^YLC/([&$'_/URO6L9_'W<W
++M#R]I3]M#!VR_W_Q'26GY_0]EJOS*_M=WB27^#RWC_X+_+\+R'_R/_7/_JZ?S
++M]J/AKNFID?F%^Q_?B/]#_Y+_FS$?\3_K'_Q'2[_)-.UFT.FNE\KG#+"E`7<W
++M/"O,U!P7 at +]N4<_%S-KQ#,,SMPCCL4 at -K>/>H!40#D'MQZ./'%,+WW`\W(G]
++M'OQA#==.ELNC8%!0$`+'A"49IY[STUF?24:B_1#[F5$`F(U''"+";K$6>!_)
++MO&9_XL2-.X1V*4(;&8HY@='HV8^#[2-@<^ZWH-H&AT,/(:;;P.;6MM$]KUKN
++M53[8\Q at 7^7;'Y3EAZ9#71WW5$+=NE_!`A2:-@>?\(1QL!BJ,B#S8:H;BUO<_
++M%F^UA5GP at 8>S'9X='&R&\B+MRIX&%,R0`I-O)6Q`"(^,;7-7?:<D,ZY.NPT;
++MHCBA(;<&BC4BYY.Z&;LEQ[K>AHAC%,$V3B:<)RO5![9+D29)RQ$MD[B[.4A*
++MY"D#CM*%NV^L-K&V<6K'T5D'YLSK0O=4/-Y!EV9>WMDM3#WX0`YHZKIAT?"K
++MRLSY0_XGU!V*"NKN*W^@5G&*F3>8FL,$L(K;W[=>D[WH=+"V1-)[^]8;"@4B
++MY:S at EL0BLS,H0S[XX($:^VV>$C0%!W5&%/BS2X32S])YFZYN&JU]78:(#!84
++MF8.K,^L&;A;36;^IH&/73[44Y*_-F.3;-#B&(D[&KVLBH_W;7R1LJ[2/J`<%
++MMJ_/PAP0(M)"*HO*67[4*9YN0.`T8 at BZ->NU;:0VJKW3F;,8,N8FK>=C1"2V
++M\P"!0#N2%B.+KK8+55=^JDFPU15KLB!/\+7SUZD&M6I`TEZ/:"9XJ62Z[G!,
++M"P'1E'':?@"P[W2[9REV/V`L)LI@$^%"$D31O1?AE$(PA!J)*P?(.=F;G-:2
++M])*)G,\4"N5SF3Q+IE>@<F*4IXF\XC8O)O.2=ULQ!,5T7:;R,W<SBPB,H^3I
++MPEW$YE`D/J%XNCC]U;S6W]9M^"G_Z0ZN[E]=_O^R_D]=[O]05%"47^'_]X at E
++M_LLNT_\"`W=%1YDOW?\H+_M$_Q\;[?W&^K_L(O_/_9/_&"2,%%=P\%$)-1K^
++M_'<2XP)BK[I16`,748C7I&5][CRLW76'&1\GSM0[?H"OZN1NX_5RS^B!-7%@
++MZ/C9^7Y]%[%3K3IK^!;<V"I*%FZ1QYF6."@1 at G>R.A@=L#?2CA(NG>X:$),1
++M!O--<F0")X*A:!6Y/*.4 at D(]$Q71LXF)-K:UUW>+:=\P,V#5[[PM7],@=76C
++MJ$\+B;IQW=\UK?_M6);_;J[V7]O]]6_L_\O]Q?\E1UWI_[]+?#+_O0<`]SG0
++M'8*KN]=+WM=2'*!MN6^I,V)A.>'E.1D5-5N0_^+JU3?=W6_'Q]_.S'SX5OI?
++MP&?O?RH*<GXT_UV]./^5GXAMUAROP^YR-L_WO+U7J+C'*K4V>ITPTO(H=G>T
++ML>LZ+E$[$8'#/N]/=B>AY!`8`,M!LC,E,*.9`-T$@&+P!`R$A,;CG"B)R:GN
++M"!,L]&SNN82DE%.QL=%$%!Z/WD3((>11)>3V`R$19/.#$97$,`!$H<LQ((@Y
++MTGBW)18-N<OH?HCJ>]`<:#GX$(UR[^FE;I*%XDGXPLC`$O<+E%D`5P@](O4+
++M8;H>N#PO*;L6#>)&D#R)01T,CY]88!(B.ZAX&Y="3KDNRNY:C+GJC=/5#>NV
++M!I)+NW#:O%'9.-M5"LJJ[J(L7D;"6.L%E.=88U:3GZ.SD6Q^`Z_*_E]W=41K
++MJ(%H/XB/3D?=*=#8ML./K]$E[X+(SIQY9I6D&8#D2ZXGO^:(Y<?>*'QC%E3'
++M,-C%9=3LPRK-HJ3/5TQ&1YOTW at K]_5W'<8XZ8NW:?9%&M8V-P*84A8*)G/1M
++M(0"$CS:3F0[C>4!]U9838]62U%-N5]";PZB:&=!_PK/Z(J;:34W5ZS^\!_[_
++M')_R_Y#M8?;GTOZ'PU?;`/FR_VOY_3=E!>J*_O==XK/W/[>RZ[\_Y[_YN8RR
++MDL0K5W(;FVO9]=_P4.="__\-Y[\1G^W_*RF<']W_Y%V\_RFU</_34V_K]H*V
++MA#FK6=':UJ'HC>XB@$W9E6,&F"C.WI01JL5#G]?J^O%0K#?)_(^3GS@"#D%D
++MQL2R4;[H_T)$8Z%D"'X3D"V9G)JV&QF-^Q%(A.*(H>&1Q\+#V<]!.CV#D$65
++M\&`&A!!Q<#`93?0&H:A[=]N)R$@0W4%'0T`D5 at KEU-W?,]2W>Q!`Q3JD(_J;
++MFE&M]./`D][^4T./J#DRV#[C48D at AMW_L'?N\5#OZQ[_S?R&N9I!"*FF(C,,
++MQEVN0T1*D7NIQC5RB5R26NV9<1D&(W(7<BG7$&)4:N0N(95%J29T52VJM;+:
++MJ]8QIK7VWF6?_3JO<_+:KWT\_W[_?S^?[W/Y/(C=ZQP0-$F4K5,DS`I4M@>8
++M(GM,S4_%RT#A;`F, at WLP;F72JJFU5F'M3VG1'L<09([V`3KH14",=B3$^:QB
++MD*1&U6UK%6\>6[E*UF7H9%9_R2_%LJWA.RO1-%(I('O4XF&I%LTI)C#^;N4J
++MD"?-#;"52AIJW&8?F>^[*VC/&;6 at .0C%<ECR`"CA9D?&<UVNQ^$F]MCJ!3MF
++M)F>?JQOAK)%V9#LD at X#+S!KX>8))0]*/0NQ6H.]T"[1";-H1W)/BT.F+E\Z$
++MKTFJ%K[\$L at H64,(R#^&@[K-1>7%KBL.*'@VQ/1-V-'Z$2-N6^W_"(N_$?]J
++MO/W9;$%[R]R[K3P)F768UF-X7=9RUO at WB$7YO\3^_QJ:7^]_:>N0E___2Q("
++M_B?]??TW;*'^&\_D^[^=6N!_S?FTEI;B>?[SZ[\/[@CX_]WJOTF+UW^3__3_
++M'-KXQ?\_73+,ZBS?_Y]Y]VEHAY=T#97:U,O7_V,;:++-E6^"-5>ME.+[_Q?M
++MN/N$IA3F!>,?`-AW@@'P_1^2$0[S?P`VV at B"PF$/$!:200`1BC4"RA7G_P&!
++MIW`B(`%.`(]G9.%R`I-3@)K2<_SC`!?5-JJCF^'HQ&'/.RBC^7P`1:((XU!H
++M%@&!!O.0RDB_R>?`U%/4ZU)%9#.(#8"_'KTW?BV9^##?OX0K!S57<VCA=&^D
++M@=Y!PI_\2\FQFR5P(=Y%X>UM+#>135#1A$H;'/C at LZ@>YRSO!BL1\&0[.*6M
++M+S?1%J=$X5-2MQ]40I!I=[H<`'T#5](<8WCGKAS(7&3""#?=MEB]PBA9NJ08
++MQ>Q3>NSO94WK*%2JN]B7=F%X2ZT25D$IIICNK+M-S,:FR"F[0SW"-=C&JEFH
++M47)`?-U0EY_''EULO8 at OAK>'0X(J-@^M4*&V`+G>EVYK1JVF]9PA-CAFMN3Y
++MGB8<OF(KL?*6H]&!06["-B%=PHZ"KI[BU at DNF`6I&(K0Y+4A&]S+^C4^[_R@
++M]T05?ED4HBN:Y/:P_08GVM(P"<:3:M0<W">40'B=>$U#LO!3IMC,]/2CO^RW
++M_/`)B#,M$%M/7L&C._%`ZK)!VY+$HOS_,O^W=/X/W\S_::LO^[\M20CXG_#M
++M_(?`_U.P_W&Q,:_U:GE7'V?T3N>7_M_L]_/_3UB4_UHJ?^A_O.T7_;]U7O]O
++M']M@'6A3,F"G'?$@Z'+_ at VG3"+*HH?SHJM::6'/$*UF\O%ST5-[Y,,MMH<H+
++M^[XB]M2P(U at XT1F6+/#ZA,0R]T*Q?OE\[9\;+W(4$":`(E5H+[1A at I=]<58.
++M$!>/*5?=2%<"L;&H>B7!NF]*!;82Z`4AJ)LMG<I(-@'^X^V[/V8IW@>NYSSD
++M?Q'Z8UIBB;R1CCL(#-E/U1\2Y,=Z&66DSZ-16/8$?<GAYDK3<P`"8NZ0G<B$
++MF,$<B?'GUG/)D7B%XN(YFJ6)MO*#F,[0KK>0&D\14;D2"Q^%1*%*5>/B%W`A
++M<P"#(9V,3P3`7.7+,Z_\;@NU2_H+:X?GS%AW>%9SMAZ_I"AI+"Q\-\21_JYJ
++M*%K8[.=7PU32MC+W#[\V1I>]R(E`G21Z/B7YZWI#A*],*\URAR3B*I!!43UV
++MDQ)#T&=[75=2/'KMW7G9FZ?[322WK-72J^NAEV9`/2+N2R:3_=A5:V&!UF?D
++M`0AN0I9L$:7P0CG/ARDW8-9A;]QS2BUA at V7+NV=F5A3ZO/Y/)&TXM^?1OM7'
++MV)/C[<[N^\P[U&:?9TT.+?NS_?O$HOP/]3X<\7]X`>!?\E_K&_\?]>7[+TL3
++M`O[3_K[_)_#_^:+__]C_$\Q_S//_P?BP@/_?K?Y#6Y3_[Y7^Y/_V+_QO49IB
++M]Y=K_7)2W_)VM9-CQIM]#//)Q[;23<]=FZODS:B)'7@\F30\]Z/^;H81E+1`
++M>QJ`@WMB#0%H$L"(B2,D>!)3DG-2HV.9F7RU?P``10B"*I%C=?7I4X4L'*9$
++M;6,P"L:<%_>A2&0&2A$))\([@;;VF[')A-X;-P<A'5T]?2"6UC_/_3`D*N,Y
++M]_K8+50H`K-9'3I3A%0L)J1D&);1(+\"L'&F[^Y*X=^AV#!NRIT6$)N>@^P0
++MM=.GMR",>6(TFS0(\DT'*UR,R]`4[AEPE&TIZ]P*$.WK`F20=SD&"#M1*EEC
++M=5Z. at E$3&5%20BE>(]+A2<%;@*6JZ5#J2XF#K%/;7NMI!U\O[ZRU=(V4.%CR
++M(O$4M*_3H"Z(9ETD,EI)->@.[)4,^8GD_]>((#>`E5X43!D(W`9O>2Y<AVY2
++M1\N1=XD?#L;%G@\Y at C,D7`S`^'2'ZM9RW/HF:<GL-5.,%ZZA^C?W6L%CUS%\
++M"^YSF!Z]-R\?08G;'D=WAWJ;SSSN.2]!IQJTO%L3E)DX^O.52TFK+/['^XC+
++ML;3Q%?\/>?GY'%WZ_<^O^[\Z9++V,O^7(@3\#_KJ_M<\_V/C]B<F.*=E!,]G
++M@<IR5DM+L<#_G_=HA'__ZSO6_X,6O?]%L_VR_VELNB,,D$VQFH0X3QFEV8YJ
++MYNYF'[>OE,JX^W+?&!V$/`]RW1FZ7432K)3`:.<:'1H;$A\G[[2!\ZENP*_]
++M>\TK>I:@]$^B,6+<$$P,2("@<)[V*:FG<IC>N;C3Y(V[XO)/$$1 at D!04(10"
++M<H!+5PC(F$(DJ;$)V9H&3<&TQ4#I at _VH3F^4P8V;9`,J+DSI(`3;@+CPY!D@
++M<@$ZI3;I9@"QQUX`[:<)KV=/O(W4PHGJX455L:`I8X(4/`3(T6-%6O#;.0RN
++M:4RX5T81C%K0D2"S.3/AUOG.%<8\]I9*34IO"<I8F5JI[)?DW4W<^WRLW=+^
++M;,]?M%%<"-Y2S"CSRCF"M"CEZ?"Y-Z(D*BJ at 4\W6I,PB;WU&93U#=N^X-(J"
++MR2$FB1<9282(W4^OE"[=GBH%V5%7:#9F([;2;4>=JOG[QLV<8+3N(8SROM,,
++M\Q5=)P==9&;UZKWE3X5 at KO;GW!>5J]%/]''WM%JNQ?RGQJ+\7^K]3YUO_-\T
++M=9?]?Y8D!/R/_,?ZC_G?ZO^9?/^WBXUY5UK+NGHY(\,=?/_/EX^_Y_W'R$7U
++M_P7*%_Y3LO"*2K"4GE)Q1ZY,5@/\O6(^-'=#U?PW)2*\ECG:1GEUTDT+W_H:
++MNZ[N(.UD,";M59#+?E:MZ$+Q9Y??X7`LG.@(8WTI_C!B`D"T!]H at .A9SY"02
++MQSJ<EI[IGUUUIEAUXPDE$,M`%2 at Y+E1\D@!AK##A, at A!7O-O)F&$(5?I-[H1
++MF,Y\:-Z/W;U-!:@[(VH'5`, at CK@#3()(;1(<"R.^)D`O^D^I0#Z\(#PC1-AB
++MRLUP-"/3EQ&_&:0E[*]A^CL\.4C#9V4G,JCJG'CL!.B(WL3J151/Z;D2<X%4
++MB5)KP/0(0UC+I4/UD>Q*$<QI!%(=3Z-KNU9KCEV/J]X4;GZ6"-K05?==I?66
++M'J4YTR##;X'C<1<]>_="ZQTKHC#3?7GFKN/QH1>2]"5A.@/F4SRQK1`).^KA
++M"*=8NEGHX'JE<-J-?1Z^0NVB[O8ID]U:#[GT[2UO)\1VDOR;DH3>/1U,,9CT
++MQ5QZC^LU-^_0N*G_-EENW;*B_T^*K_D?X;WT\Y\:VCK?S']J+?-_24+`_XRO
++MZC_'C]LF?.G_!@OZOYQY_=_;+-#_\_S_GOW?C,7[OZO_YO^9_8?_YSW4I=+A
++MH4B]6K6JG?=CV-D8,*)_HK+?FZ06%XGW2@%0-D'#CUTVF(_H:<V$AGL>48\Q
++M7[@![T[T<<*EIJ4"08X`B$X5M(`#E?B]WU+%A:_!X0Q$%@OW`Z$26\0^@<.`
++M=*#Y?&U0=4U3U?70RZU_G()G'[B6P489N2^T@)&GH;G*R$,$!/(%&BR8SKBW
++MX!+-`R;`AV-O$(FC`-[W0]``1VA&^)(]4)MA0E/=WB+-H^P`X%>AGR>NVWFP
++M$M]I8"F:9^B=PC*?[8KQVMT.($S&KMQM]LPI*15-5R?Q7^&4'7"50)G<5.IP
++M=-R(UF$'4UI;Z:9:Z)`KO at NX:KVE%H*OXYJ"ZAG[%![H*?J[%'D7'G2[?[V$
++ME:A.[$MH>.NC?7Z_O5];O(<\VB()4>K+^X4-.6/L^5!ANH&\,R>VNTGRE<<]
++ME&^2:-A?PY)_VAWUB]XS@\@RW$4)U&9_1]X;\N4?9D;N25K-%)A"IL1'NCZ4
++MCZU9F>P`!%E/<P/HZ?VVQ)K.%00[4E*TQ5X%SMN7U$-/AJ,,I=3J.M+.M@^L
++MCD,T,SS2MP_NBR]X]'J_/#>9?/63K'SI^/Z0,]FCGX`:7B?BHY`OCT["2)2#
++M40B=T8?'+.-Y2=$2(_1VL>7$\SUB<?XO[?UW+?5O[O]J:BS/_RQ)"/C/^6_X
++M?[:8L<#_(@'_!?K_>_*?\\_V/QLH?][_DA(RLFOCW_\:<J$W\^]_E1>E)D?M
++M?[![5&_UXWK/C>TS at 9>'@4AKX_>=HK at 85&#[M"<.XD)V#@OR.&#+/P`&%SD6
++MK<T^20ME,N,.V2TD!?^L$,$0$(-46!20%HVK;Z@/0;C-)XAZM`D_042>+:NH
++M(D"Q)D"OXKGR2I=FYT(<NP-[/31E/D&D#78-#U4]OA4R_O"/[%#B.O]SN(94
++M>3/SMJ[T=\#^D\L*"@4J1!!_+UZ'MF@]AGI;834#!Z`)N%EWNYEV.AT`1:&V
++M>ER>G-"'SZ*TCUGJZS-CT>1[MZ7AWD`&.9.?+6P!^*//WGZB6C+H`F/ZQTEP
++MFCX at 86)'N*G=6!XM"<K.R;,8R at U5(9G:%-%&_[%-5[.CM&45?9T:>KCZ*F>)
++M6Z"[<?(:G7E/555:4Z%L,U,:1(7T9(CG?8&6#$D-D0)A%"H]6K at 6>@'1X%SO
++M`T`DUA94OZA@%7JGHEX?E'UYQ\UHLEJ<ZQ",ZA^HW[Z:W!C.<L(@QG5$N@&7
++M6KK"SP]?->T")WKW/(\4.]1I?$YF<TUYC<=:$"9$;\N5[=I at -;O!?3BO(C^V
++MY`1V+!'C>3ORMS3QK=OZC->>ZS_V.J0)NT$UOMA,^:)-N"<5A2X>LG8?D3M)
++M57$/$'.7N@;33-KLII7-B*DM/4/U at 4?,]6G>(PG=B)^,;W?7E<>.,!!7W=]V
++M[M%YJM>Q'O9RS@(*):<7II@/4\PD+8Q#@$U;=9";93;@7TRE.T1!%'#:3A5/
++M,C?)MX$&;G'$C>C_IV?#_I'_`N?_4.\`'Y4P[]`PE>#YQ_]]*OA7_-?4^%K_
++MZVKJ+O-_24+`_[+%_/]=!?.?U54I%R_F+_B_-(\,=SSBS_\_^I[\+_LG_!^$
++MFKZ9/,K7_U:ER,ABLY#>>?['YJ?-41P+1WF.G+U;+&_XZ]XXFYO?FH6_%:DG
++M$9>5W;1Z\)7V;Y_&#<VH7Q;[#SN%$:/(21KLY.,V"LD005<X$_"`YR+SA0-%
++MX`6XBDK'[-S3A%+<N?(*X$(#<#XOW[&J)>=R%C((7AA8H.3,MXDI2P!@`]=J
++MKL`#^4ZR-!0LGP!'1R.10[@%2]D%Z?^T9PB8F'KWT^R[/1_?/I[,G*TZLA./
++MAKT82;#CE=R0C`%'2/4_8_'&RBCAU52 at G2D+PW@IZ-VBK`(@V,\#.7)#0"SQ
++MU,]-Z>;TX2>0[/?`%0?U=U[641HV(VZ/J6>E4[![)QJA+`JK8//:.010$7=E
++M<]5!R&MS22'^M=^.7E?%*N<ZC^D?1`QTIN7J?9P->1^;'CI)U=]38>4U>B;7
++MB!CN>-]8?Q8%FDP;2EZ!7MCK8@).GE?\U<).`GP9]5*>9SWH12I\X76Z02M1
++MCH9!X--IGFT0U(""%W.])]`-J#[3^55?![C/"0=_'UN5^V9"6;1RSYF<-H at 9
++M:@U[Q9F5KKZ)L\<_A!>!<1"A7+DDC'.ERFW;DCYFE>.K/FU7ST/)@8>V&1V=
++M&WI^OZ'60T;])BS&BZ71OQU,!CA7#+.<_-CQ%%D9T2V$=6(G?E-_'"OM0P"1
++M]K[/'S-7G%`W8^(S?3W$UK^9X260FD;-8JWBN?_%WIFX0[W_;?P[,\:L9B0R
++MI!,28RA+8ZDH))24?2FR3DT1JK&DTMB'8<:6+>M8LJ1D5ZJA+)&.K<A2UD-2
++MEM)V.IVGH=/I5.<ZSW-=Y7>>Z^?]/\QKWM_[<]_W.X).O)(`X5OZ3OB_S+?X
++M_QW1/S__Z/]1_.K^.W&I_W%Q9H'_07_A/T7[]*G/_#\<_B<OY/_OM]\<&>EY
++M]G1TYOF/Z_\.^K;_\U/^R\[@H_\'(3/"N$.>CLK225ESR(->JN-U,<1[,OOL
++MZ;&]PH5KM9R>6%EO&=VI/VT&#'KCP0M'OP`GCN\'.'GZ#-Z4QO"E^G!N?IEC
++M83S1!/,/7$^2-N?*B8T,29TO"#]!^+#`9R[<<+\2(EU]G5U>B6`G2]=7R99_
++MH'PR4HUD7@]FUW!7X^\T1B$KX6AE"H'G,@#&X(,FHJ2GQB<F9VJ>S3V5P4Q`
++MDM6F^_4;6#$0\.R+[4/+[!A)`DZWTG$<M0;R"C`LI<T8WCJY7SSGA%V>O8[?
++MZRJ]%2Y4T4[=6$Q76[1@)+0BQN^E4BXB6C+<=_G9E&()-E*3!D&^"<0U<=?B
++M#F+Z9K.!H$I`!01`W94*3*TA^4.];\_FET!;LU*<J*)4`-J5<S at S.M;H09'4
++MJJ&$Q%J!`$;8>Y9JJU2;:$W`5K%RK83+0PR"#JF'$LU.UV+I)5Z1HAX9LEA5
++M6,-;8T)_W)%K5'DBYDJ9LZ1$>G6JP3GNN&7%SD\>1 at QY,MJK`\[MM]&^)3O8
++M&-^'Y_MO7*+_'\\7_/=P<#ETG/R='X#_D?_*7_5_*1&7_#^+, at O\C_K6_L_A
++M_]EXC_GWWV2.__]V^8?]?VBP^^G3D>G9J1_&_ZAO[__]G_)?AOB/^:\7`I3&
++M`Y-B*>6Y9H/'8X/LKUZXA)3!!%A5=SD^M1/UN3DK)'K^YS/;:8("HA(BD!T>
++M=AX!7O)K3RX<_N(Q=;`$G<'`I"VYXC\^!C,B2<QT1*9G8E9NOA/#V?E"2EK&
++MI>RR=%96%-I/3C),&H)A(-5C\/,/PA>X,=S-+2!D*Z71?G[G9S at R^A\-%I!@
++MJ-([D*X'&>I/IQJ>P='R[NM)("?W)D`86'F<#?+C!QO!Y75T;27M(,*TS#F`
++MI4TAH.4-RPABU"#&@#?7 at TAFAA"I*\S`.I3AF,,]YG#;WV.[V=8X)Y?V=WQ'
++M1:\D$DE-M4(W!\,4P]WS^:AUPPFT!$.B_*9<\3`:(R[ZLNHR.L`-:X!FY3OD
++M"^U=[XZ?>`Y+P*F`N/#L]F=",KGXSJJ5K60!%;<!0_99_1QKNW``9[@YJ4O8
++M-LX'HO92/W$[1LZE[YV))K4F@!N&MPJ[,O&DRCC,BJ\O.__Y6&NAJX?`VU'4
++M1-WC4X,KGF@%MFT[2D7]WDBJC(ZI3XRD1:O!9W_95AYNA[EVQ8._W>/=];N_
++M[?IIS9I`C]6VT)"ELX__MODK_X^1#I,<*8N>_Y7_ZOZ/LN*2_W]1YB_YK_G^
++M'\2?_3^:&A_[?SPH8S3:TYSLF:HKKSH[WPP/O7[RX_I_/LM_+>/2^,1_];0/
++M_,_E\%\>UQV*YO#_ at A"ED90Q0T86K)O4=_90US6HSU at YDG]'EFA5%R/V$^U!
++MYODMD(F=2N^O^PJ(*8+0<+2Z_-Z3ISVM%$)MUBK"T``:2I<VPR:=2_*:SP+/
++M]P&!D%@>MUQ$%C*8P,K*28`742Y6)<!,T9!K-VH`T"7LY5HL6T%2$>4(0\6?
++MNG>_4?VL%`(IC4"!P"A+>$X>8EU/?;]7SM#XO5'P6`+R.2+&ZV7]F]D7;U_-
++MOHFZYT"%\(-$>(?]H6V))NOX<L@:+L"*,&DN(DUL9G==Q#UY<"LM3Y<:+#DN
++MQ[?FA-1:77]9/G<?@"F6HV^-#.\QY3.[F;B.$CW1V3[6LEFCT*PD-+:C[?SZ
++MW6P]/=G.&E:=\)!UVP`[-&:YS/[`UZPG7<&KF<JB^@9/6&7AN=LE@&W"*'(L
++M7Z#)G*F8*6P_;!K*7M=7R3_*S<7;!YX>JLGFJMZ<]%K!M")6$'_@`F4/!N=@
++MJ8>LLS.3<:Y4+(PLG03B3'-LSQSN]R]+",Z+,4/);Z:,->?Z,-_P;./:M9W(
++M#=>^F[PFX9<-+W8'[[X&#<7?LQDXEK[YY)S<FJ*3J_?LAWJO:F at NF'K>T`A?
++M_KBK&>9_<\E9^A^>+_GO0K(__KTM0/^X_RM]S?^E_K?%F07^^W^\_Y$(`*D8
++MP6PAR7P9C:+-%J6ZQE=-7.O<`EO\8^[%9O?FE`Z6M#QI>33[\)>Y\1_F__?_
++M9O\;9>6G_A_9C_K/`\((8Z?6<(WICKQ[`N43(@I"P2Y(Z]ZX.JK-Y+1J8_D!
++MDHBZ!1^G_V%F][V@,V9^>O/OO$[X`Z:<_@?@",84C&*@P!SS/\9E+S,:%HN'
++MQR+5+)-3TW-R\[.P2,+YDLLF'"5(`67/C?(E6+K[YN'1DB!$*?`!^*!X6?=&
++M`)Z8C*#C6]L[NWN0?=%M<?"<X=$2,`A.DU.3`V.D0)BDZ%O]OT6_E9G.:`S1
++M8HNH`BLGP8:75FL&6_*OH!3I/0+"``G%6Z^INE1-13X-'S;CT98S!UKA\M21
++MJ:P=\=$Z+QU+]23O."@?JDUH`*]F^TAM<B4H7\B&0%X5J1$M"_%AW`!]?02N
++M3#R,OJ?@8=^.@>U%`C?XQ."BZ3%;8:@6$1+YI57I(5A*6`>1+13GYGZOK>Q7
++M3\TK5<!$N4C@<!"+'\K+8YD7 at D<J1YCR)[1[FYS?<W0?N/NY1EM^\T7E,>0&
++MI#GR;JIM.6_-\@@FZ-0MMN>U#M13843C>GR%1,7:AQ46D52^4Q&')(LO"NB^
++M<ZIZ/J9P99S,<\UG>O-VG1?%=]6;(\271/E_Z7S)?PX-*8O-?Y6O^:^T=/]S
++M46:!_XS/\U\+_A]:B%5T+"?\M=#_5EF9T=!4U=E6^^/]GXQOZS^%G_2?::F/
++M^W^6$$6/L__OO=0T1KN-M[MAM_JC\3-?^'KQH2FG9>+.(L+CIM77^AK>::U5
++M@*(!&Q^"&98>3@<.<!9^^H+SDR2+]<)R0F`<]\]A9JAL(-:3&1X=BXUSAIM&
++M`)RK'VD9?[AZ:+?=FI'J-J`L)![1`HY-04)`\"``CNI!(IP+9#!0$*0]'_]S
++MFW/+"/[1X##S06__>G4Y".8P2(3F(.66^),O`<SBI3E0TV#QW40<GNU739<6
++M%L71%()J==\]W*5M=-3 at EAAB0%B]2#`D0C.<"S?B$TM at WSQ&L(DST>28<_;#
++MZY,?&#-WAE-=J^&-;6E)1`F/_>$0?M&5P=&NDLY4=P,":`>(OTBO*']]GF"5
++M9\\#<`/=488FI,6KH9%#MQQ.UO<2!)1`]TN;,ALJ5ME<]9V.L%%UO[2I%"CB
++M,P\AXE8)AICR at N4[,3V*8423&35"AV0-EYL?LN<--4VZ8&RCOT%2NHKNPURG
++M]6^UM"VV*'`/@':KU2<WU]E(`-7L_;-C!#UMOXM#P"73SC1G(07UJUY3O1[O
++MWN_><N?H&O'`L[9N2T+0OV;^RO_C]IZD=8YD>]>#WZ_]\W^A_ZA\Y?]76<I_
++M+<XL\#_["_W_]"FC4!I'_X^+IWSJ?UCP?\[WOX_^2/T_^V_\/PU_^G]B__#_
++MG`M*F9T#3(]TG?=T'F6Q,H_<UX^+L#IX1,[36\3U<;'(OBU:3A';(%NF?A_:
++M,[_\H[FE77D66(_%'&'.R_[X,#-'B^0(9E2,!2 at N(<G<)YPA$X@]<0X6C\C+
++MB4\\Q\+$A!9D`!6YQ?1\.GO]A_\!&C<J%`G)X6`?#$99W&]'(,XAMZ0.M,,[
++M[W?WX/LB'YFW=<ARGHV?8;L>P)^@^E^]@W!5GK1X9GW#<^!6S0;8S08Z"$.$
++MNK=.^#$!"SP+YYZM*0/"*&\4.3CJ4&\N\M[(6QMD/)))/+'WB%85C+T36'>U
++M.S:Q,:N)*:;_\M1&KIJ`3-U7CSM)=?>ELG03=][;,>O786"X-4]O`^<_ at I;$
++M5Q9]-L^,N.^R5LK.V:!M*Y:3M#JUC==08Y4?%1NLU7`6Y_><46Z]6EI4D(XE
++MYTOT14GUUI%_W^D9-1Q4(G`'Z=9\'L/V"X#P[R+-/Q_[)K*:/4=+2EN9%NP-
++MU(02XZXY[2<CDAIY!_ at K[7]/[=-JH&^[B(P*E`CEFW:T;T#;`<UOCG5F&;\+
++M2[TO0+$J-3[Q_N)RODLJEQLV#.T6X44N"_P-+618$GKRS8;)OIJM$IJ;'NWJ
++M:UB-EMBE,(`M496(I"\'_]0(QJW!C0\$\O<`@Y at 9L]R,X+=B8OZ**X/'[3!Z
++M2_6AWV.^X#_)_I at C^7M?`/D'_LLK*WRY_Q.5E9?N/RW*+/!?[8O^3]_3QF$T
++MR^CY^Q\7\CC\OWXCK[&YJKNS_E%_Q\+^_\/T'[5Y_D]]QO]BL.;=X3</O:\C
++M2\GC[($6^5\1`<S,,%5C\92\'OU(LII(6*T"`CHM6K'=@9>7?T7O^GS*22Y+
++M:WZ52'=53%Y#31,N'<Q!O9N<I+U5T#&"-1P%,3V!=(*C\0PG!$)%V>0LE@<A
++M=12PYO&5P2J#<G+!F,,$"(*<9>WJ'GX,6UVMFK+Q0G80N+#J!)Z'G<QE#P63
++M$'%H.`D9P03#&_M at 3!`$J:*H`D7Z8U@`!)T..^[AU4?'G\2B]\J)-U_^C6!K
++M]PYAJEG;J'%FEPY.K7OM(-H7[0%,B at T9WK)5)/_'8/;E[Y^RSM[%Q<V+Y+3.
++MX_CW:H#\Q_R/_)?[G[**RI+^NRBS\/N_^67_XVFCT(_^[V.%!8P__-^?][_\
++MN/S_S;_+_ZC*\#IM3:U*G[__AO?;8ZJQ*:TUE]]\7"D`:^W95"8DO.^(E]DJ
++MGIM*+[S['7"!$S-3<[F]^XY:;9DJWBJ"A.B<L at 2IV`<:[^25#\4SO*.(]F`X
++M.F!WI"S-A;`VPAMF!^R#H#Q0&N1]6!@&BPCV!4#P2\A@&3+(JJRBJM`.[9]%
++ML"KQM;^.K62R"KR:6P!;+`\LRVM?>Q4(<0;66WZ'_?--><GT<\A\_$(M,+.>
++MF0=&P>?P,!3D(9_+3J-#(.`,L!PN(?#ANU^_SKC(85`.6DME=O-,OL*N`6#3
++MW+(CE*),+7[X^^[1WF,S$MNH6'L@(V:R[8XJ2&1Z^!6UF\J]>27O\G23^-4P
++M_T!)Z;<`_%+*LGLXNT at 4U1C0/K*S>%/IN)+#Y at KKEK=MY[LO[CUTB%6B)`[B
++M+A&?G52>,3*PX9*1+&CN2+4&MM8<H#?#VFS`*)%JE'.\?'^]U_M-20_,68^\
++MI%*CF]92S^Y)/[;2\"%M*(_<;K3QN4`KE1W6X5U1ZVI/S2,59#:S<*+*KPB)
++M%Q^P'H(5V0!T'TZ$%O(NE7KJ5TH\EW=R*35!L$!?)R-YXU$'5[QGY_[N(6\?
++M0/B^CE^LK><+Z;2T(;U5OTT)J at GW7[-]VA-7<3]P^([,Y1<FNEMKJUWL8U?]
++M+OI:P[L7!*2?X?YI>7P`;]Q!(W_\B_-VJ at TNK]/]0:)C5"J.X)V&$A^Y?YLN
++M7SP3LXPNSS<<H:H313W5MDRS5F`CM[03[\5($VVA-<#&D>A=%_V<L.N5I4=C
++M-3LK`^&/#?-&XQ0FB_Z[BX:_P?_CZYQ(!^P]7"B+U?_".?;V!?\5-RSIOXLR
++M"_QG?2/_2=O[N?Y;Q;G_P>'_0O_[C^S_8OT-_Z_^^?U_"N$MOHWS_4\/3FE_
++MZ?TP7^-"?FOK_L*B\?$Q:$.3$C%35/N<R37<D)]AE96_=E>&W:,\33(69(L_
++M<T!W/OWIN6$^#P1%`2'$1#E_)^ESYO/ZL',:WAH;+AL@@RTR at Z"*4%NP$=B%
++M>C#,<7Q)607<!KC.KO6\?)LC%0<"^1<NFUF"6ML[FVIZ^CJ"JZY^5(GC at _$<
++M)1 at IBT)R=4[A>69/S"7P[](R1&J`]X'),\_C at 73B:AA48C(07.._`\G'CM%U
++M6YT3)GCZ$#%7 at Z4%K'BOP(A5+A)EX"`?/I8'J%VZ``]O]ZUM[F;^RUW)PK/+
++M`/T6>W*@PRQH`$\%\1_MX1^@IMW5_55X5V%/IZ2I[[Z0E^`Y<5`Y3,:(UW(@
++M?37:)[Z4UX[:,FQ@<;OH3N')CLB*W(-SQ1Z]@OIV-QQY4LK.A4JCDC8[\A%,
++MJ$_HK-._IK#[7N5T7%)%N2A?&#K>R?T_[)V'6Y/9NL6_A)*0!!(T!.0P&JH!
++M@@2D6D/3"(J`(`C2I`B")"!-:JC2BW1!#-50E#)(D3(!!1$4 at R"@HH:F@"#8
++MQ;$<$\;Q'G6>N?>>T?/,<WS_A^_W[;WVN]9*,C=]$<.C"A]X8^*W)7U"KUEH
++MU at .&J!9M<-'GT]=,5%\0=D`+KO7`&V[0>Y)F81P]![7S(Y^V,,%LMS%I>K9C
++ML%7L^N/QP4P3B\H:XS-8T5,KCY1;;&0&W5-W?OIP[:\\9S/B',Y7GK;1JW[&
++M0SOZTI7DR0H8;\>&NY-U<>*"7!HFNA)Q.^ECT6IOTIDDW10"SS&IS,8.4'^"
++M3J2(9(++>#Q!H'U<`-7E,I$H;Q<3"9UF31<E:F+_*RV=_Z?YDO^_[7XKD"G>
++MKF2/O^(&\&?\5U7ZW/^COE[M!_^_RRSS_^9G^5\?SO_+^>^<_%_V^7]9_QV\
++M?F%B_.8W]O_<_,/^YW>P_]'_G/NQ_SD`S^Y_EMPX"F[9+UP`:LMH&C+6\'FT
++MI75>-<X>U57&&'98L,.&>WC)^[GC(NV1(.>H<`,4P6:Y\_G8OFQ*.#Y;P2[?
++M2#I%'@J+ACC:6N)`Z0*0!.[JY;WP.-LRJ_K&\]%T1T0FP'81U00&?K at 0-.=6
++M)"!;.\_P(:M3F>TM%[O<KUYC-'?W7)F\<__F;<A<_P7DB*),L1R70#1,R\D&
++MBD&@4F at I((@/P(UFE;.R0G`8-?2+%'$P+P[%*\)")5SD_DGVW<1!P:(.'O`[
++M;CP0XW5`STIFGYX[GW)16**X;(AWHY&T0;2JK4TDJ+LS!Z``B=Q,HE at NEP"T
++MV"5.F]&F2*6#J^64H2;HWKSP_IZ,6W5GS[28:BLQX#<KD"WUJ]PJW2UR!N\Z
++MJPQAW*T;O;A*F-MKJF]:6XIBF=>OK%+523RM(%W-T(J(I$G$JP2]H%AV)VKZ
++MB0J+`DZ]V16N[VH?/LRZ8>#',K"/>[H.Y'%25+3:_9#Q!?Z0W,[X<;LQ5M%F
++M\GQE9I756,TJ):'\CE<3#_!#X.F-FYOL,9L6=Q0Z5B:<`L#H-^AJ"Y$%"T``
++M.NH_Z_EFB6MV_?8".R+P\-;E![8AN2"*3<"O)VO3K^OCH*13+A'%+&P8\.SE
++M/;-;1Y7L at S<K^=^COA:\I(U,61P[9B*'2KFBG-H"7J,*?M6/52HKH^Q*-"C0
++MV1[1>(6$3,+1LPW#0?1+B9$JVJ31Q$[IGQV"-H>W.RILZXB83-:OQX)]\KQW
++M\)!M[@+. at DF;5MS/,9:JM at MT::.5ZKL+:($QAX=V<)L*!#FLA?O/RNJ*2C*;
++M'M`B,3`Z<C^F?+IP7_KE2.A+ at MQ,,6F1\7>]17S&?Q>RGX*]@[>K[U_E_63/
++MG^H_7_ at _5=54?[S_?9=9YG_=%_U/G_8_?LM_:2SHNMPX^#'_:^$;[G_4_1'_
++MJS[EO_#R;$Y=SG_)9.>_%#*T)^+F`_8,""8]E`@%)70LN86\/A`#T;[!.WCL
++M\=$Y0>*=/>:A;A'XY>@7;WPX,38^D!J9KL<^]+L<"L%Q"W at B"WW9V2XERP%@
++MP?B<W+2TPOIZ7Z at 5P`4OY$3`T/97G*G"M_ZR%1GWX580TB![Z6QUUX5.W-!E
++MWVO]'Q=$TG@$\AS-^0(`*!_;*=3Q##_U8.9DW2-`]E6J#)7*#3/"HK$,\];`
++M)0OTIFQF$C@(JE)&S.I8O87G=2/>O;O303=>Y)WJ>8VI`]2(+2`Q4N\4%5#8
++MV"+*<">DK8TSZ;$!QV at .(+*H(19[CU"U9>)`^X,*#[R6<#;Q<%9N!V.%<(:`
++MX5&]DS//M0C;E5>,!J!JM5JJ;(7ILD;]?9:80^0H1V[ALK6\@W,,&.79(QB8
++MZMD>M9$X6\?8#A&.OJ*^_49U2^06%S%D&9Y7S5C%J#S<!985_.K-IH"!G1'@
++M\L;(*+D3=7'#->_?KF1BO>/Z$T_T%5_-J#,6V6!#,6U?@!T<.[]R*3"&3+1&
++M]^Y9=*`R6(0[]E>KX7;6D\3C at Y=MR9;$S6Z6B"MG"*YO[Y&./<$.V<ZY7(I7
++MD>_NX"$?B00/@Y"4 at .O]&*"<:0>KQ;X at 2BQ<7J^_U\JH.U'-$P]-#$<YQ]`\
++M;%?M14;,NY-V'EL;0BJ4E!C9>SE!3F6;)$(-8]\MKOX"2 at 0C%&C)R3`>S4F4
++ME*F6HS0$^[-0ZBZ;/;HBDKBFR0P+`2UII++SS%26W%QV)'2"ZEJ:]=\7`O,U
++M_KN[?]_\Q_5?Z?_^D?_X?6:9_\5?\I^C_Y"7^5_U.__[.?Q_^$WY7_P'_+_P
++M2?])^*C_Y+#U'Z+9*2J'_];]_0L]/LJP>W7E;^8Z4<B+MPY%]#HD`V_-G"K>
++MKU\6?HX`(82H8_ZR<=34Y8W`@\F!'.`'X#.S70*]D?0R>BP'^73X%K;L0\'E
++MY=/PU;5;D-$?F+^W7+;Y5('YA^,_T-,:>Z'S(_1/Q+)9?XY/X=;HW5+6W/RI
++M+0<YH9#/P.":L8DI_..GSU?(8H^QCL=YR%Y,W6.7=*<UR!S]8B6)28.O4>35
++M8*YDA"GYFHL&H5F,X2Z7U>^&4Y<RH45Q23B3-IAF[20\6\$GHP8-HY+04B^[
++MQ8 at KZ5<A==A^$FU6ZT)&[(E:N_)968EU%F8H.RK>F`XX%I\=N74.D07:NB96
++M^JFJ^SY=Q?UGIU\]OK&#SC_9ENYJOGLUS>A.F8L1BWLD>TUL87<SG5+'F.-6
++MP5:'/XZ3U]&958V/J(5'RC&U,C2P=C"F+%.)B+V6*9OC)(:&&KWNT0D&2+F&
++MXKGU#WWG1-RM"@*OS<>\T:]H4>O6DQ$J`C=([)7K?(HNZL8<;SOT('/^O/O8
++MN/+;#2\6(-AFZPQ*[U/G\8(I7]NXIW#!`.E at K8I0WO<2X2K#IX3Y6#\3=;@,
++M%9VPX3HI!+WPW6(,@]VH?#5[0?N$1;LH,5\+G>B-DP_&8E;SQD1"1U+H$I$_
++M9)Y_8[["?P?R88J[TX>/]+OI_U_)?U?]X?__+O-Y_N/O_:]L_G/*/TH_\;]A
++ML+]CC#4\]W#\6_+_?YG_^-OY/SNL(<'2.JIKHF<>7%KT<"C^`+I[U'/P94#C
++M'=5S at H^)W:M!Z7GG[A2]5R"A""'KH[3YH?Q^LL>HR2K2D7 at .^(\"/I;D8([$
++M[TW+S#XA_^&GX)PH%YQ/SHVSXH)[P+<6%)4`&5DY^(:FK4B()8(K(%^600^@
++M%18[7.O([4;V$&32Y#_0OX`O`-95!?"=!S?B6..P23SGSS#=G[N4O=49!%Z!
++M(Q88`LU*"UTUKX0I+!F><52UB:>B7H?_:]AJ;V'#L0LQ*ZW?N`P at B!%.P#MN
++M#>9ZDZLB$!PD03-6>XH`.0IF#)Z^YE24*N==.,)'E(&=D#5O0YUWS<HS*TNY
++M-0JATHW3<*>W4#9<3*Y4\@KRN(X&*O$8/L?+\-X]>!@8H3\.<JHOAC5ZV9>(
++M4-/WW:WQ?MM7V+.G6%V(GXK!N/F4CM-TX\>Y\U;@MU[D,4S_271`*8$W)W3?
++MMK4T4)A0[!)EFZ?J<UB]HK=8_8 at G54=3]Y*+.P1;,"\D9,9TBP)HN/PF,PT<
++MBE'_R*<E>*-IW^C2N/+SMAMMNU`;.N:';>>R#RO=7-71.F::>[^B84GHK&DE
++MF-K0'M8_L[6D^PGCW6N;0X,K3 at 59OA*^NV_*U>K(W=!!*9$U[NMB%D6$@[2T
++M=:(P;51QP7#$N!Z85P&[.UJ!VMT7([4"+1&GG6+$(PSA3M./0U\F.<"4M'6X
++M121;_">2B<KMDLB5O*Z3J372[3KJ)+698H$=/]8&_V6^PG\/)_^_[.F7,_\/
++M__]ZE1_[/]]EEOF?_$7_DTETC#V[_XDC`570X]G\Y[S_<O)_OVG_=_)7^Y^\
++M6V$\O_E_4+B16`&.__\G[^[[L^)G+`]?ZU?5NQ-@=D=^X;G%SB9JM0&_0^B]
++M<Q+%9XC4X$>J00ORY[CXN5RXX$BGS>ST1E\<$LJ/1(1SU'S?Z&@@=CG^Y7BZ
++M7&0T?'-R:EI2KGT^K="5_5=(L*XM*#I3JB!S&.!&U)DBN$&Q,!P?.P)F/PP<
++MB^"D at UT]UU?>,.!Z8QA_N9?O+FV(;T0.ZLP:@DU87P.#HYZ.)TT](@2D>#J3
++M]0`(#ESC3Z4;R-C9H\$H*F&7C at CD)^N=Q at D8(!;]DU.1"D.\)`4S?7BJK$9^
++MWYD#U6)'=772&&`(/R(F2.CI;4,A at OK;9YI$B=T%]U8S84P>S-I31E90=\%2
++MW$#R[0TY^_VW1X7%"9X6\$G;,VA&MV8?Z0O#1L@"I`U!%<[2,+$+)E@&#_$?
++MZFW`HG1ATYYV*F"[O3#&K_&V!2:D676^AR:XR274;WQ at .,K3N8[@-;FKYAJQ
++M>&<S6DGBS=4ZJ9,`:I-T)^!KC3EKO-5PX(BG_.UZRLSU7P,;X(+D)5R5B7=L
++MGF9OD?J.%')[HY14(>G>.N[VTS8[:A.8?:UO?!]O.)YK&SK5)"C8,=)+_N'_
++M_X_/5_A/\7+R=27[_'4&H#_EO\KG^>]JRC_\G]]GEOF?\]GYG[W_&6.Y_/Y;
++M49907W^JO:/R4D_3T`?^CW'._XO?;O\GY^OG?^M/_1\C'_L_>.'GBU<N9EM6
++M[9R>MN3QK>FKRGC at Q;T7O$U1AK?YGI+D9(E&I0"?Y3_Z%HKT%;GYY4#\7`";
++M_WP'32'\9L at 4).)8#/N%-RDMU107BQ2`6(-R<D^F9^(Y';";\S.RJAMD3Y_(
++MPY7R%944T%N24RO#W!3 at O+(0&`Y:"X9#6V$_P[A.(YCP6WQ'38=;F<,#UOWW
++MQG)O04?E$>P-T&OC\PM7X;(SL0^GP'T^>P[RKTEP5(!..A"!J`@#+K%GED]I
++MVZGKHHV@*:2H0IT8$<7#>2*'D.))0N\,R at D,AB`U`=@6#EY$=5)31(TM55PE
++M5P-<OP9HGB>MB\I>UT"YBG]MA[M>3#*;,\ZNH]\`$0*UG&9-W6Z4V,5?!&!V
++M^^).`!*6//&"XK>3U6[7:O04AH6MU+W7Y<XTTN-JL&;>U7WL=W8P(MC^8B\$
++M:TD\Y#8#UF`I,(#`XX+9 at 5'AM?6]J?LT4OPTRXW1B+G1,D1`Z?U+UINLNH(T
++MF'DUR.RIU\]IQM,#)Q-G,L6(H&K%BNAAFU5E6H16JUP^1<LWC<_T>\*:46-#
++M2/[*NU%4<XD'OJ]605>;;[25?%OW7)=$LD=.,-9E/7,8V5VBVQNSM,2#H\'>
++MS3#O4*%/^(WO"DIDI[`B/%B4O^O3ZM]B/N,_V8N]`.K at Y.'HZG'P>^D_*E_X
++M?]36K_^A_WR76>9_\[_Z/Y?UG]_Z/W[G/]O_V<_>_YF?O_\M]W^:_TC_J?^D
++M_X@:A^?3*6S]AU[!<-"WCNZ:@(UZ_:(R2]J&U5C%6_"RR:.^W2EG=[W%%8'D
++MB#E!_]9V7*A6.-5'>0?*$8ET5F(7@!`B;=/5,\VYXQ,)TM[QO at 1>!.`B>]@J
++M/AXH0B8#Y5:<Y9_@:HY5U/]\77WC44L$U_F6MM`S54#SAY_(A92:,L:YAK#!
++MOO:;U8-=!#C-<:OBB?(\!7@`I*#I=)@L^V;`]X3],-#\:A&*AJ((AFNVAH:A
++MG^D088RV,!YSYL\O%\2UN/E"*Q_75MF&A]:'>.M"#<8JHQ7>,0_'V3_JU#!;
++ML$!0F&NI$0Z+3\X<C5R_ALJKP:/1[;>R$U`DIB*BGDM2LPJ!I%I6&7CV"O&^
++M6B$)1L0-H?>W*M_0FY%N$I<;:"(:\3L8^KOQXBE,[*Z^0S9/QKU$Z2=V-P:^
++M[RYQRT+>_,72?BDX7K at FOD[>OL[1'N,,S]U\\(72J*HBG,O`SS#ZH-",BRE.
++M_Q?@I.@#LZ['(?E[^^U\W7O\'6J9G@)D1Z%'>ZOEH]@>T7SC;$=^H+PYA`L]
++M"8?V]QX)O&Z_<;_1R<XG)1CAQL-<-UZW3X=6%0VW at 6MO78K=;YI4TIQ^!UU4
++MJ$QY+G]0?@\@9 at 2'L="E<*^>8D\CFD.?U,`IV/N;SW>J7`#46:+P-B$[)=Z[
++MI1U!F4W8#A>@43A^`[6;0)22K:?'D'\IHY*".MK],^/=M"8Q29N&7!R"@10[
++MO61=Z#1575?F:(2()*)L,LTHI%T*^4_VSONKR73;XV\*I">`@J"H=%,HH0J.
++M)8*4`50$!$304`4$#550=))0I$DG4J1(+X+T2-.`="QT!061CH+ at Z"B6\5S*
++MF7+467/67:/KWAGW3^]?\'GV?I_]?+X26HX3<:JW<OWA4M29B8O1<YT:_]0S
++MYC/\M[7[BP^`_\7[+V7R-__[5ZE5_K,_X;_!*O_C+KH7%D14LE?XWUJYRO]G
++M7Y;_[#_B?^EO_.?[)?_)P(S!#@-O,I%2Z:C8JUW89*,O*^?TP'JPJM^K:6(Q
++M8>(X[Z at K\^F":NZ@'-T2SZ0$'#CE;7M:6H='CN;M+K-T"OR@=-XB4>72_B at W
++M.4FY8.\PZ55)P%DL#@'"Y^'B3&T!$+P866:Z<@SXUM?BKONS<&A(_<TF>@6[
++M>FF8*.W`N'*J6]M-;SVJNW'VX1VO$%R.M!0YS29&&E7('?-K(`@8K4/!-S&X
++M(/Z\+P,I]3OE\5 at I_6+RH09(/B#2V8+CH3!06W>^/-5D51_#]X&?3P$A(MD4
++MMTZQ.P8Z!B,8R7*KQO-SZLM(NV`68(.9J>_3=W&IJ at Z(3+.R\;%\;WE'\HP$
++M-`\N[A'UR"^XJI,A6V>]A at CDV?KQ$RN"X+D^))Y&T3<CI@>+4,)*#A,8TX08
++MSSZ^)_WW#E,MZ=SC0WJMSUC*CIO6!&X7B at EEJUD7N^2DYQQ(+ML$W9C8P+FO
++MA'%F#B&I'*,^[;H$SY\;7M[H*A'/T+EMC9GGCSQ96=BF%E8[2'MJ^?@^+H#I
++M7PDJWJ=&J6\+Q+$-V$>\0UO#I5- at 01_J?*SZ!WF1X]?MSYSP;E'>U;T]VQMI
++M0C(,]LO"4&3>R]3S\6[S=>&E at QL%G16IBESF4OK,'C)'1.G^RWLI=$<RA+IA
++MO0J<A0J^SV;"BP-`]T04/0)&0RC2-&MQJH.46"A1A,QW0;6;P at DC1!IHAN\6
++MIN]5I0@@&M>)OW<8C]9W8TC@))???ZFJ1C?"YY???\E.1_ZSQXN/^+]B_[)Q
++MMG+_FOY?\M+W)_N?W_*?ODJM\M_E-_]C,D8 at 2Y!X16Y7D:I9F=;>:WN=FUR8
++M'6?3!M*NCI1<'Z_MF^MZ]./PU*N9+_;_Q^6S_M\?OX]<#%K)_SZXFO]M6TQ7
++M?+6I/3>V1?CGM)XKK"P_*Q`$!EX8:F]75'*#!ULAL!JZ+EY==0/1&ZA!!<5@
++M)&Y9[[N2`G(^.)2PW-TCOB,%A83Y^0$,OP#WZ*1+43%Q[K!E/8R\U`EN3.$/
++MA&77(X+@"@)7`[77"?"`:S=(]3>.5FZI<L^Q)3:"F]V1O7"T_)83.#>2$PA+
++M"`TD3I!*">`QZ>ERF5'WR:[QLEGW[T"G(EE>,"R<KK>;6H]G(H65%K5$'C>H
++M9?0J&2_.Z=7[_33Y/CB7=QAUPANI2C.,N(=0.GO!+!/:23\2%G=4_]E3G3*[
++M4(7W`)0G"`8(:TEB7NK2)>OI`.F"F,M6&0[=AAA;Y$$F";$4C,_SG]%5S`C=
++M<,;07\@OBYZO:69=^#:;5<_6R7]8Z?`.`]I2EE!45(SB>C98I*:Y6*!QC8Q2
++M<4&33/29XZ,MA_+#:.BJ'WG;5+D/#UOXP<,/7]*X6KQ;`OI/)N3?NS['_[\V
++M_>._X+_*Q_Q745#\YG__*K7*_U._]__R9PH2"V0HQ=M-RK6-:HQHS33F+7IL
++M;TS6P^S*Q^6=LYU?V/][ZK/]?S$E<M%[F?\<UBK_,_D,.$(7RV`>ZYW#<Q4(
++M7GH]=9NH,$B)AE/>%-X#SG"$^/EG".MKS,F_+QD_(KH6CX-A#1V/N6%A!'-H
++M,![NCP0Q_+R at 2\=!")4*@%%4U'=,_TOFD;CH6,Q*^M-9(AC+0&80<])!B%!]
++M['YX#;(.R/-8ZN13Z,T$-!14>[N%06@`@QH9-7"TLH^T.<XNL.TJ*7,:P$R7
++M,UKQB1ZG017-$X0Y_'QS#`!ZN5#<<_>2W+'1]2*M=DZ74."E3MPLD`?88]2/
++M77\\OB0CU+OJO4''3W(C:J[@.*69T"UDS8SP=JF$*V8EH(Y(.>=6ICCLGB(4
++MM'.FW>36(5U-H!@D2"X-8)K*@50I.6$)-]<:;0XV'^P5#]UP0E5>)U*N"=!/
++MQ*K18N4GU`&8F7P:OI-N`<9C/8@<8J%VG?EH97IH3P`\TH*/Q*K/OCW:$GDT
++MTINO2L&6)(X_/!S&I8AMO*3QVD%_SQ[IKMQC]T6^93O]_>IC_I^D_>7M_Y_[
++M?^4_WO]45B9_N__]*K7*?X_?\C^X$5T;A/JD\'<UE`8U]]P]I#UL8CKNZ3D=
++M$CR;DC)?6KK8T_-F;.S-[-P7R__P^!W_?^O_E3;`H7D1ZLOWOY&2J_[?/*7I
++MR.LP=UW,-FV*HV='P'.J.2>-`?C7E"@.FOIG&HUIZ-:=Z'I:UEW3B<\M7XGW
++MV`%P+0'?;:7_1V"Q2+QT4(@;+LD0A%SJ_.%I+%Q&+"LJ,WUU!'"$88J71@`N
++M4!22@(5MK0-NU"^-`"D-I$9P at Q4B`(Q"N'?U](&[>X&6+<@[K<N#@",NC*V"
++M)=@&SL*?`14$,$9FCF3UPOJ5?:6-^X>?'IB>#+\,G#*>39S@[*\&H;E=F.+3
++M4?$A8:JN3KRMC"8RSM`1 at 7#,;%5;7ZH]&>HZ=IMQ=$9 at 3MT[+Q6Y<W:TGN.H
++MU;23_F'DY1D1<DYR')E6JP8MFR)3&>5X09XTSC;`J.#(#BU/N at +_H<*WI5PR
++M#Y05^RMY%6HN'`>NND=>;RV)/2HD$R\HTNDF<J!H[5E+-30]C1_B003_:T(%
++M3L\Y:+\O(`2=4/PXS,TRJ#,8=C?97W?PVHS^(`'5^;T.A6`YI7B1)&Y2EE+'
++M58F]4^X.X779XX_0J_:[>2W*1OL?_1OE_VU]AO]_=?O_Y_W_)_Y?%?(W_^_7
++MJ57^G_N-_S#D"O^7\Y^6X#]D9#CNX3[YPP_38:&SJ:E+_'_=O<3_\;=S7X[_
++MYS[__Y_X:_Z'WK_S/Q*(X^'Z`^*ZEMNT^^XK=7`].Q)1[!<U(LHV]F!K^7,J
++M&;O3Y77R$U[_=.7E:O^/,7)R6*(^C'`8@@D%@K#+$\`I;C0N`K"RPB.#Z:ST
++M,%@6(3J6Y8_VE%ON_S&, at F3B83@*#$*$`=Q8;GQ-'3(#QR;>!,!M>;5 at U(WD
++M[E[&O;YF4.M`'1Q-MI?U.8RS#\1[2#-GGUXM9XP3(L8=YL,95]\FOZ\`AMN>
++MQCZ[%<)X0G_L=`_8+;L_5:!T)?_5FF^-TRU^^*A:^)AMUN(:>&:9S'R&&X8*
++M$$1V!,NB@<;7)S>'G,,Y53L?*VW"1+D-YUF-T!)ECURG(ZB'G'<G at SK-\;GB
++MZ``_4T3YV223.88)4).B)8/HP`C*VR*SS:IF.)?WR+"E/>$C?)`P'P/;T[1U
++M37DREZ42U/MF8D?6>CU_92LZFI72,F$^OK>[67J\(\K'1!3$578L@"2%JE)(
++M?S'5<UIGBA96K1S=KKFGT6WONY9OD1Y_C_I/_GN>^!()L']Z__O)^Z^M\O+?
++M]O^_2JWRO^/3_9]5_T]TG-N5_`L5%<G7;^2MYG^O[/\_GE_X<O[/CC_T?\K\
++MSO])_M7_:3JMG%,`$TBS\S1ZY'*GLS/09LK:4\(D*W6^2/AUN`(Z][2>W/NZ
++M370L&D[1\-5R/:1T_@`.Y*,<IJK+0[9<M0!%!YX)44S9=S0C0T6218(C?6!V
++M%B?PH$0LC(J'5JYJ@"(LKMK#;B`:K-R:<:V1)9W5;`B*CMI"IW>68[%W;MJA
++M+Y%Z^RGM%@,CN-&RZYRVY>O@^J+'8[)2^40(U@=YIPU,I]8#(`1-B$8_G[;;
++M'%$%O>6^EP.&WDW9D>M]0#PS`#,/I=Q'KB^'"G^0UQ7N#`6AHB04U4E9=$GP
++M1>PAJ:!K!^B:<5R>/UX94$`D\H/&UZK#TG;O)#?#,VDAZIQ=LGHM&`<1HW"3
++M(D5+M<AV,4Z?(5[E\L)%F(ZAH'V-O>]()>H at 8/+"5]-UJUS_H9S:R.^^,\@@
++M;\483[9EWY989W5R8P=C^S%[:WZH(#DEZ7SI0_Z$K7J38:1D!VWZNE39V70>
++M//^5:N0:ZNN\86[V8O6SZM>N!Z\>KS<Y5ZQ\R at BR12R#*TT`>-!%6B\RI?QF
++MZ\PQC)?[3+(E;:;?UM*BO7?[K;0H9#54,ZA`-02"@\4:L_B:?$`SA+>S at BJL
++M,Y/<4)&CZR8NT[O/$>63LL`:X$D8YRQ6]C7:5[HMY]'^^::MFX]++U"_5_&3
++M#DBPOV9I&.IJ":<)`8T/N^*V-_B;I)O=EACC/7(QZCDG3-K)1DSD$3Z>&;Z]
++MW9MBUUDBN$\#QXE7#]5WN\:$#U:X:E!-[/.RD+'&I9(;CP82)E$2%O+9:+.4
++MO$G>XV'4R41:LYI]T at YCPE2R][:N"3ZQV9BI5/ID\4V^O]FQ]Y_\]W*T6_;_
++MV-BYN\LXG_QJ^S^?^C^5ONW_?)WZV/_\B__S0-"__<^NR_D?[%_V/[MO3DT.
++M+3R?77SW^O^2_SE'1F,,U.E6<N7J+&E?7#V]K&R;>M(!-,3BF4F>Y3AMHZ?V
++MAR,X+!/CC]7"@O!!!F=/*OJ0+IS><RI:19='!>$1&[Z?Q0IWNIRB'G<.JHR`
++M^7HM9T%A8+:PPXZ.N.H:"VXT%GW%L1*+"+[)+F8V5U4#[4TM1Z%E=TNZ"J]%
++M-=ZZ"\=@D<&UK180%!-%`3WJ\X7=0$-N6\R.C,X_?R$GI01O&"P5-=A"!0EQ
++M442XG*DB'#K4%RY+X<!$0QA at I"$ZZ(`-2<9CV[Y;*KJCS1#4!VX.4W"!H0FX
++M at N$Z:2/6[0GV:W/]+V(`W3B$6?7#-H";1PAF]JJWG_H(4-#F#TFHB(CHX?8-
++M5]&4!YXV%,ROSU0OX:>81EMQ&AYNX13$P[0/0A?,^^]LTP!-2+J>8>MTZQ1U
++M"Z/2#!X\6`L5X$E_024/*UPXND-E+'Z_WP5?X at 9LQ@!(+H_(=\9+RIO/7#/U
++MHGG(`_!$R=I0`+YH^"KO28I3N=G$$Q/-N6';OIV"/-)-\SU>O2K4H6XV8XV_
++M7]*P/DO--L/&4M!L89LF.0%Y/4@:O3[@#E#=$V]!=+,9>%48A/+;/W3G="IA
++M8S_4H!*M\?/HD/^`Y_NY%S'GV,^#8MI0&5E:'+DR7UXZN%28G(!/602C;1[J
++MB-]3'C(SPP5M:C<15AI:*R"@@N>4686F</5J;B^OC09$`5Z\=>ASLD`\2HQL
++M"G75BBQMB=*Q+DWCA=LJ&?)JB1$DUTM8/+ZW8RA!88)E42K/C+,()-C''WDE
++M,A[OD/W&/UHOJ#-BB?]"C5B]O_]CX<_PW\[-[:3;7XC__\+__,G_'T7RM_V?
++MKU*K_*_^J/]?>?^UZO_T6-[_K$Q=\?]7]G<W3D\-?V'^5_\1_RM^M_\/^F7_
++MWZ&`8X/=+'.E/#O.L8:PH%*;%1YB;7QZUOQ8GS3;^,3+NDW>VYWW[GKUSA9P
++MI#-,3VI]SW-&R=>9*>\?$4V,BE&_H"T92@(MXQOD!%NB/(0&)*=>SL"8X6"I
++MB'1FJ=GR/4$YTR>_NK;"'(J!<6KJHOU*&_`%:>D^Q6P`@JI![2IHMLK,SNW)
++M3^G*R,HA2R4182A(%<().9^9-S>/>,Y$[L(- at E$\K>\8(T<YQ@`2">`7HAC<
++MW`9XVWBGR/K`UR.BOAP<%P0"@DH8B'0EMY)??`#W)L7*IVX_C::^OR:.!;9)
++M8'J=W2.?9-,O,>UW4NPPTWX)F"`L.5&,$))5%`2FF9=;"V=1SBKT#8@!!OFQ
++M7F*][0?Y[^I)"^N_4R?$#292-_4B:2K/'E9;/<NWZC2X,&SG^N'ZS\J(6Q7U
++MY\;*DY7,(K)V*N+RJ#Q"HM2DN,TV%?K\3S+O:,'(JH'@\CY^C53[VP^YT(UK
++M0.5T&0^A,NM!:8\K>E&N0%O+JX=<"RX#CQK\6%)B.?FUH@)=F4FIV1Z\FO./
++MC"W]7A9FC0"@LV,LJ=-UWMLT3YG[OG-(F:@*BD at B0&)(APHA3E%J,1+4\@]O
++M6%6EFX&G]><W2Q,%]6EW0.;CW92M<QL=AL[\S][N5'!*Z[LS[6&;S+T)'%6R
++M61*/.E16.32)JD9->M0E.<N0J4OGF$:RB-ZGAH<]%L\\#K=[=2SHZW- at V]G$
++MYS7\RW!*`);ROP`H0LWBGXCU_^CG?YJ!E at 2-EO]T`%C*?]C^7_C]+]#U_\=/
++M[;AV^<C]>Y<AYS_0;/T/Z>6_U_HM[F)+8TLWKM*?8F74=7#;Y]6KPY+O^MX'
++MWPW%U<RC][1X.T.N:5U#G+NG@`'XY'\V[NJ,1,,6S1R=:=-=\V:9J!KP,^J`
++MQWD6-S;RKV58NGQE#'L9#_/FY9RK^+=$@6J!76O6[3]X>#4#"Q_[^@.'=M?'
++ML>]<M6'%XK7K]I0!ZX&UW/8;SDS?N^W(OF4W-F_=KJ_6Q<6R2H.=NY>3\U+\
++M]Y^_&T5,K`XT=%LP<@L4!'Y@/GBPY1*#A4A#P$,M9KXO'C49 at I/%^[Y]^,OT
++M at _5J/QO;/QG5@(9##QFLIK.P*4A<O'^BE9G[7*<B`V,S.Z_`G(P/?@W,=9H=
++MBPQ.I<K,+F>6,O%]R/#J8 at K#JD42!5.G,S.%K%7ZRA2JQ;#48U?<KXU*!T*W
++M),YQ<SEM,B%&F5G(Y=*RW!RK\(C)G4Z"!Y3%L]O8]R<)F_`D[9\N]]]W3=.!
++M\_L:7^7>BIFT_N$!W1NG-&K"MMQG6\9L?S<KK"<L/RMPS[-3JEG&-Y-8T[6Z
++MF4J7G=W+.T>A]INLZCG/X.Z/BYTG%KC;,=Z0.6!T\_7+J].EEW`8?CC2M2.Z
++M*28UVN9[GZ!^[W$YNX)C#%=V[WC#>>>7];=5B6\:$AT.:B;:SUD<*,[.H)90
++ME1.0]9G!*.G/)2XCUE^3#C1?5+CH8,RG%Y$HS:6D'*LKY2HQ@[$LYD:KX5.%
++MC/Y&A54_FCA6^B9U])A<F^$L:?9OVN,^FV7`VL&VZM+C";X3#)DFN*BM3!%Q
++M^R3P>%*`FR>SDE>/0/^4B+31V@%[^0\:^D],RDG5+4LM*L[,SZ.T(B!4_IL:
++MH)W_:61 at 8#0Z_D\7`"G_3V&>_]G>'@49_P'O_P7=_PH^_^$(=/R?AN?_G,)5
++M_O_001K_T8>-_WP)`X__>W>_K=J_YA5'SZ-59Y[(6/%&6]>O;[]ST(&A/:^\
++M\`''&A:>\IQF%R^!7`W(B']E(!>[-CMGRW17U0XM#JY4=MZHC!C&'K[)J1HL
++MRQG`%X#5`4OU(FZ'=0LA.\`TP0=(].W=OWE7%&@7P8HERS;-7\C3I[UU^\X%
++M_#>`W6;-D_P'5N[AY%^^9-^ST_<>Z*O-UJQ)Y=J9#MH!S#0M2+(@80&/'K#\
++M7Y"0H,#@X+_VT\?/X5H+NEA9`V4:;N0[N-8X<+!)"$SPMF?D^"?J]J6C at 9&[
++MC4_8P>3XI:5=S-Q!)7]N=,7;M:AIJFFL7*#&XZA[C>7!IP?G-$2.;]NC-.&1
++MXS;&(V$L!0'/_$(8F':L*YC6Q!C*$'^XS%=05WJ7F\:[K4R;1(Y=V[KG@@7W
++MM#`=\1U;=GPY&AU^0FJG_^IIG&%;&T\=[=PA4*'&%VM16"7!9##A<]'3>8?$
++M+#(F3'RYYE!GJ,^Q'$F3M>OG'6^L*YBEF;;L=]^USS=GF7$Q-MT-.]JUZNK5
++M-4O\%X1=9-#D/L=@L*ET7?J#VZOKBHW-%\AL3]K`>\[O?A/3!X:#5[9NO['1
++M4W!Q3L8KBQ"!+_>3=8_P+O*)V/>0X=?:AT\NUNL9I$QV$Q%<_D**P94U03:#
++M4^;(_::\CB_SRU\8!,1P,?693/;_77AQ8=/*K0><I1]=>3 at EZ[R+<2_SF at 7*
++M#<EK]PB=UF%K>924S7!D\L5B_C\K+IHN73GAL;GK,F5W4Q&[Y8\9)<X=DVIW
++M623,4/LFH#,EWZ#C at 8Q:0ELG2YB;1%''C(QEDBY,OVW-6#C#5V@^GZ-_HX)/
++M,*E'0'UNS;=*EWFV-2^?+VA1V^C"_T5DU8M%UCJCYXZ. at E$P"D;!*!@%HV`4
++AC()1,`I&P2 at 8!:-@%(R"43`*1L$H&*0``%%LBG4`0`$`
++`
++end
+diff -urNad cupsys-1.2.1~/doc/de/index.html cupsys-1.2.1/doc/de/index.html
+--- cupsys-1.2.1~/doc/de/index.html	1970-01-01 00:00:00.000000000 +0000
++++ cupsys-1.2.1/doc/de/index.html	2006-07-19 02:13:34.000000000 +0000
+@@ -0,0 +1,143 @@
++<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
++<HTML>
++<HEAD>
++	<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
++	<TITLE>Startseite - CUPS 1.2.1</TITLE>
++	<LINK REL="STYLESHEET" TYPE="text/css" HREF="/cups.css">
++	<LINK REL="SHORTCUT ICON" HREF="/favicon.ico" TYPE="image/x-icon">
++</HEAD>
++<BODY>
++<TABLE WIDTH="100%" STYLE="height: 100%;" BORDER="0" CELLSPACING="0" CELLPADDING="0" SUMMARY="Common UNIX Printing System 1.2">
++<TR CLASS="header">
++<TD VALIGN="TOP" WIDTH="15" ROWSPAN="2"><IMG SRC="/images/top-left.gif" WIDTH="15" HEIGHT="80" ALT=""></TD>
++<TD VALIGN="TOP" WIDTH="55" ROWSPAN="2"><IMG SRC="/images/top-middle.gif" WIDTH="55" HEIGHT="80" ALT=""></TD>
++<TD WIDTH="100%" HEIGHT="60"><H1>Common UNIX Printing System 1.2.1</H1></TD>
++<TD ALIGN="RIGHT" VALIGN="TOP" WIDTH="15" ROWSPAN="2"><IMG
++SRC="/images/top-right.gif" WIDTH="15" HEIGHT="15" ALT=""></TD>
++</TR>
++<TR CLASS="header"><TD WIDTH="100%" VALIGN="BOTTOM" NOWRAP>
++
++<A CLASS="sel" HREF="/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
++HEIGHT="4" ALIGN="TOP" BORDER="0"
++ALT="">&nbsp;&nbsp;Startseite&nbsp;&nbsp;<IMG
++SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
++BORDER="0" ALT=""></A>
++
++&nbsp;<A CLASS="unsel" HREF="/admin/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
++HEIGHT="4" ALIGN="TOP" BORDER="0"
++ALT="">&nbsp;&nbsp;Verwaltung&nbsp;&nbsp;<IMG
++SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
++BORDER="0" ALT=""></A>
++
++&nbsp;<A CLASS="unsel" HREF="/classes/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
++HEIGHT="4" ALIGN="TOP" BORDER="0"
++ALT="">&nbsp;&nbsp;Klassen&nbsp;&nbsp;<IMG
++SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
++BORDER="0" ALT=""></A>
++
++&nbsp;<A CLASS="unsel" HREF="/help/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
++HEIGHT="4" ALIGN="TOP" BORDER="0"
++ALT="">&nbsp;&nbsp;Dokumentation/Hilfe&nbsp;&nbsp;<IMG
++SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
++BORDER="0" ALT=""></A>
++
++&nbsp;<A CLASS="unsel" HREF="/jobs/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
++HEIGHT="4" ALIGN="TOP" BORDER="0"
++ALT="">&nbsp;&nbsp;Auftr&auml;ge&nbsp;&nbsp;<IMG
++SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
++BORDER="0" ALT=""></A>
++
++&nbsp;<A CLASS="unsel" HREF="/printers/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
++HEIGHT="4" ALIGN="TOP" BORDER="0"
++ALT="">&nbsp;&nbsp;Drucker&nbsp;&nbsp;<IMG
++SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
++BORDER="0" ALT=""></A>
++
++</TD></TR>
++<TR CLASS="page">
++<TD WIDTH="15">&nbsp;</TD>
++<TD COLSPAN="2" WIDTH="100%" VALIGN="TOP" CLASS="page">
++
++<H2 CLASS="title">Herzlich Willkommen!</H2>
++
++<P>Auf diesen Seiten k&ouml;nnen Sie Ihre Drucker und Aufträge &uuml;berwachen,
++sowie auch Verwaltungsaufgaben durchzuführen. Klicken Sie auf einen der
++oberen Karteireiter oder eine der Schaltflächen um eine T&auml;tigkeit auszuführen.</P>
++
++<P>
++<A HREF="/help/"><IMG SRC="/images/button-help.gif" CLASS="button" ALT="Hilfe"></A>
++<A HREF="/admin?OP=add-class"><IMG SRC="/images/button-add-class.gif" CLASS="button" ALT="Klasse hinzuf&uuml;gen"></A>
++<A HREF="/admin?OP=add-printer"><IMG SRC="/images/button-add-printer.gif" CLASS="button" ALT="Drucker hinzuf&uuml;gen"></A>
++<A HREF="/classes"><IMG SRC="/images/button-manage-classes.gif" CLASS="button" ALT="Klassen verwalten"></A>
++<A HREF="/jobs"><IMG SRC="/images/button-manage-jobs.gif" CLASS="button" ALT="Auftr&auml;ge verwalten"></A>
++<A HREF="/printers"><IMG SRC="/images/button-manage-printers.gif" CLASS="button" ALT="Drucker verwalten"></A>
++<A HREF="/admin"><IMG SRC="/images/button-manage-server.gif" CLASS="button" ALT="Server verwalten"></A>
++</P>
++
++<P><I>Wenn Sie nach einem Benutzernamen und Passwort gefragt werden,
++geben Sie bitte Ihren Benutzernamen und Ihr Passwort oder
++den Benutzernamen und das Passwort des "root" Benutzers ein.</I></P>
++
++<H2 CLASS="title">&Uuml;ber CUPS</H2>
++
++<P>
++<IMG SRC="/images/happy.gif" ALIGN="LEFT" WIDTH="196" HEIGHT="144"
++STYLE="padding-right: 10px;" ALT="Happy Computer and Printer">
++
++<A HREF="http://www.easysw.com/"><IMG SRC="/images/esp-logo.gif"
++ALIGN="RIGHT" WIDTH="110" HEIGHT="68" BORDER="0"
++STYLE="padding-left: 10px; padding-bottom: 10px;"
++ALT="Easy Software Products"></A>
++
++CUPS stellt eine portierbare Druckerschicht f&uuml;r
++UNIX<SUP>&reg;</SUP>-basierte Betriebssysteme bereit. Es wird entwickelt
++und gepflegt von <A HREF="http://www.easysw.com">Easy Software
++Products</a> um eine Standard Druckerl&ouml;sung zu f&ouml;rdern. CUPS ist das
++Standard Drucksystem welches von MacOS<SUP>&reg;</SUP> X und den meisten
++Linux<SUP>&reg;</SUP> Distributionen verwendet wird.</P>
++
++<P>CUPS benutzt das <A HREF="http://www.pwg.org/ipp/"
++TARGET="_blank"> Internet Printing Protocol ("IPP")</A> als
++Basis für die Verwaltung von Druckauftr&auml;ge und Warteschlangen und f&uuml;gt
++Drucker-Browsing und PostScript Printer Description ("PPD") basierte
++Druckeigenschaften hinzu um komplexe Druckumgebungen optimale zu
++unterst&uuml;tzen.<BR CLEAR="ALL"></P>
++
++<H2 CLASS="title">Druckertreiber und Unterst&uuml;tzung</H2>
++
++<P>Besuchen Sie die offizielle CUPS Seite um Druckertreiber und
++Unterst&uuml;tzung zu erhalten:</P>
++
++<PRE>
++    <A HREF="http://www.cups.org/" TARGET="_blank">www.cups.org</A>
++</PRE>
++
++<P>Kommerzieller Support und eine erweiterte Version von CUPS genannt <A
++HREF="http://www.easysw.com/printpro/">ESP Print Pro</A> ist
++verf&uuml;gbar unter:</P>
++
++<PRE>
++    <A HREF="http://www.easysw.com/" TARGET="_blank">www.easysw.com</A>
++</PRE>
++
++</TD>
++<TD WIDTH="15">&nbsp;</TD>
++</TR>
++<TR CLASS="header">
++<TD VALIGN="BOTTOM" WIDTH="15"><IMG SRC="/images/bottom-left.gif"
++WIDTH="15" HEIGHT="15" ALT=""></TD>
++<TD COLSPAN="2" WIDTH="100%" STYLE="padding: 5;">
++
++<P><SMALL>Das Common UNIX Printing System, CUPS, und das CUPS Logo sind
++Warenzeichen der <A HREF="http://www.easysw.com">Easy Software
++Products</A>. CUPS ist urheberrechtlich gesch&uuml;tzt 1997-2006 von Easy Software Products,
++Alle Rechte vorbehalten.</SMALL></P>
++
++</TD>
++
++<TD ALIGN="RIGHT" VALIGN="BOTTOM" WIDTH="15"><IMG SRC="/images/bottom-right.gif"
++WIDTH="15" HEIGHT="15" ALT=""></TD>
++</TR>
++</TABLE>
++</BODY>
++</HTML>

Modified: cupsys/branches/cups-1.2/debian/rules
==============================================================================
--- cupsys/branches/cups-1.2/debian/rules	(original)
+++ cupsys/branches/cups-1.2/debian/rules	Wed Jul 19 02:23:15 2006
@@ -47,6 +47,7 @@
 $(patsubst %,install/%,$(DEB_ALL_PACKAGES)) :: install/%:
 	dh_movefiles -p$(cdbs_curpkg)
 binary-post-install/cupsys::
+	uudecode -o - doc/de/doc-de-images.tar.gz.uu | tar zCxf debian/cupsys/usr/share/cups/doc-root/de -
 	mv debian/cupsys/usr/lib/cups/backend/* debian/cupsys/usr/lib/cups/backend-available
 	install -o root -g root -m 644 doc/favicon.ico debian/cupsys/usr/share/cups/doc-root
 	(cd $(DEB_DESTDIR) && mv var/spool var/log $(DEB_DESTDIR)/../cupsys/var)



More information about the Pkg-cups-devel mailing list