Comparar commits

..

1 Commits

Autor SHA1 Mensagem Data
msweet fe03b591e0 Import cups.org releases
git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/tags/release-1.1@4306 a1ca3aef-8c08-0410-bb20-df032aa958be
2013-05-10 18:56:23 +00:00
253 arquivos alterados com 66256 adições e 99272 exclusões
+1 -457
Ver Arquivo
@@ -1,462 +1,6 @@
CHANGES.txt - 12/20/2000
CHANGES.txt - 07/10/2000
------------------------
CHANGES IN CUPS V1.1.5
- Security updates - new default configuration does
not broadcast printer information and only allows
access from the local system.
- EXPERIMENTAL encryption support - CUPS now optionally
supports TLS/SSL encryption via the OpenSSL library.
- Documentation updates.
- Makefile/configure script updates.
- The RPM spec file didn't work out-of-the-box under
RedHat or Mandrake.
- Minor code cleanup to remove extraneous compiler
warnings.
- cupsTempFile() was using %p for the temporary
filename; this should have been %08x (just 8 digit
hex)
- Deleting a printer with active print jobs would still
crash the server.
- ippWrite() and ipp_write_file() didn't send the
correct value length for name-with-language and
text-with-language attributes.
- Updated IPP code to support copied strings (that
should not be freed); this provides slightly more
efficient IPP server performance.
- Updated PDF filter to Xpdf 0.91.
- httpGets() could go into an infinite loop if a line
longer than the input buffer size was sent by a
client. This could be used in a Denial-of-Service
attack.
- The lpstat and CUPS API functions now request only the
data required when getting the list of printer or
class information. This should improve performance
with large numbers of printers on slower machines.
- The scheduler was always enforcing the FilterLimit,
even if FilterLimit was set to 0.
- Updated the Linux USB backend to support Mandrake's
/dev/usb/usblp# filenames.
- The PRINTER and LPDEST environment variables did not
override the lpoptions default printer.
- The PPD read functions incorrectly included trailing
characters (usually whitespace) after quoted string
attributes.
- The multiple-document-handling attribute handling code
did not check for the correct value for collated
copies (separate-documents-uncollated-copies).
- The EPSON driver did not work with OKIDATA printers in
EPSON emulation mode (needed change-emulation command)
- The HP-GL/2 filter did not scale the plot properly in
scale mode 2.
- Added PPD files for 9-pin and 24-pin OKIDATA printers.
- The httpSeparate() function didn't handle passwords
that started with a number.
- ippDelete() could free the character set string
multiple times in name-with-language and
text-with-language attributes.
- The scheduler would access freed memory right after
freeing it (for debug messages); these parts of the
code have been reordered to avoid this situation
which was causing sporatic errors and crashes.
- The ppdClose() function didn't free all of the strings
in the ppd_file_t structure.
- The LoadAllJobs() function in the scheduler did not
close the spool directory.
- Changed all sprintf's that use string formats to
snprintf's, even if the destination buffer is
larger than the source string(s); this protects
against buffer overflows caused outside of CUPS...
- Changed all strcpy's to strncpy's between local and
global variables, even if the destination buffer is
larger than the source string; this protects
against buffer overflows caused outside of CUPS...
- The CUPS certificate functions didn't use the
CUPS_SERVERROOT environment variable when set.
- The directory services code was copying instead of
comparing the remote printer info, resulting in
unnecessary updates of the printer attributes for
remote printers.
- Added new mime.types rules to allow automatic raw
printing of PCL and ESC/P files; PJL headers are
parsed to differentiate between PostScript and
PCL job files. This should eliminate a lot of
the reports of SAMBA printing problems due to
the missing "-oraw" or "-l" options.
- The mimeLoadType() function didn't handle the
3-argument contains() function.
- The LoadPPDs() function in the scheduler didn't
properly set the alloc_ppds variable or handle a PPD
database containing 0 printers.
- The scheduler FindAvailablePrinter() function didn't
use the same queuing logic as the CheckJobs()
function. This caused classes to stall if a remote
printer was always busy.
- Jobs are now assigned to printers in a class
round-robin style. This should prevent the first
server in the class from bearing the brunt of the
jobs.
- The scheduler's LoadAllJobs() function didn't always
restore remote printers for queued jobs on startup.
- The serial backend didn't support the higher baud
rates with the old termios interface. It now supports
57600 and 115200 baud.
- The serial backend now supports different types of
flow control; previously it ignored the flow=XYZ
option in the device URI.
- The serial backend now supports DTR/DSR flow control,
which is popular on dot-matrix printers (access with
"flow=dtrdsr" in the device URI)
- Added new job-originating-host-name attribute for
jobs. The new attribute provides the hostname or
IP address of the machine that submitted the job.
- The set-job-attributes code no longer allows read-only
job attributes to be changed.
- Expanded the click area for the navigation bar in the
web interface.
- Updated the lp and cancel commands to support all of
the Solaris print options (some are simply ignored
since they do not map)
- Updated the scheduler to limit the number of file
descriptors to the maximum select() set size. This
was causing problems on Solaris systems where the
max FD count was increased beyond 1024.
- The scheduler's LoadDevices() function was getting
interrupted by the SIGCHLD signal handler; now ignore
child signals while loading devices.
- Added quota and allow/deny user support for printers
and classes.
- Removed black/CMY adjustment code from the PS and
image file RIPs; it was interfering with some CUPS
driver dithering code.
- The lpc program stopped listing the queue statuses
after the first active printer.
- The cups-lpd program used an output format that the
Solaris printing system did not understand.
- Updated the lpq program to use the Solaris format
except under Tru64 UNIX.
- Some DEC PPD files incorrectly use "Off" for the null
value in UI constraints. Added "Off" to the list of
accepted null values.
- Changed the *BSD define constants to __*BSD__ in all
of the backends.
- Added support for "lpstat printername", which is an
undocumented feature in Solaris.
- The HP-GL/2 filter now only sets the plot size if it
is set in the plot file.
- The lpmove command wasn't sending the requesting
user name, causing it to always fail.
- Updated the cupsTempFile() code to use GetTempPath()
under Windows.
- The cups-lpd mini-daemon didn't limit the number of
data files accepted, didn't use cupsTempFile(),
didn't handle control file job information in any
order, and didn't free job options after printing
a file.
- The scheduler copy_banner() function did not
explicitly set the owner and permissions of the banner
files, which could prevent the banner pages from
printing on some systems.
- The lpstat program wasn't listing remote classes.
- The scheduler did not verify that the printer-uri
attribute was specified in all requests that required
it.
CHANGES IN CUPS v1.1.4
- Makefile and configure script fixes.
- **** Changed the default Printcap setting **** to
/etc/printcap. There are just too many people asking
why application XYZ doesn't see their printers!
- The web admin interface now displays an error if it
can't get the list of printer drivers from cupsd.
- The IPP backend was putting the copies option before
the other job options were set. This caused the IPP
request to contain attribute groups in the wrong
order, which prevented remote printing.
- Added checks in scheduler to free memory used for
IPP requests and language information when closing
a client connection.
- Fixed the duplex option in the HP LaserJet driver. It
should now work with all LaserJet printers (and
compatibles)
- The add-printer web interface didn't initialize the
"old info" data pointer, which caused random crashes
on many OS's.
- Fixed many page sizes defined in the Level 1
compatibility file "gs_statd.ps" to match reality.
- Fixed another bug in the setpagedevice "code" in
Ghostscript. It should now accept all standard
Adobe attributes on all platforms.
- Fixed pstoraster so that it reallocates memory for
color depth changes as well as size/resolution
changes. This removes an ordering constraint on
the color, page size, and resolution options in
PPD files.
- The IPP backend didn't use the job's character set
when the destination printer supported it. This
caused problems when printing text files to other
CUPS servers.
- Updated the logic used to determine when to rebuild
the PPD file database. The scheduler now checks the
dates and the number of PPD files (was just checking
the dates.)
- Updated the ippSetCGIVars() function (used by the
web interfaces) to only filter valid string values.
- The PostScript filter was scaling 2-up pages
incorrectly. This caused the edges of some pages to
be clipped.
CHANGES IN CUPS v1.1.3
- Makefile fixes.
- RPM spec file changes.
- Documentation updates.
- Enabled pstoraster debug messages for everything
(only logged when LogLevel set to "debug"...)
- Changed the Input/OutputAttributes fix in
pstoraster so that it works on all platforms.
- The HP-GL/2 filter didn't set the right green
color value in encoded polylines or text.
- Updated the "fitplot" code to handle plot sizes
specified as "PSwidth,length" and "PSlength,width".
- Updated the Linux parallel and USB backends to open
the device files prior to looking in /proc for
autoprobe info. This makes sure that loadable device
driver modules are in fact loaded...
- Added new FilterLimit directive to limit the number
of processing jobs/filters on a system.
- set-job-attributes didn't change the job-state to
held/pending when the job-hold-until attribute was
specified.
- set-job-attributes didn't save the new job attributes.
- Now change the "requesting-user-name" attribute in
requests from remote systems to "remroot" when an
unauthenticated "root" user is sent. This can be
changed using the new RemoteRoot directive in
cupsd.conf.
- The cancel-job, hold-job, release-job, and restart-job
operations didn't log the authenticated username.
- The cups-lpd mini-daemon now checks for a
document-format option before forcing raw mode with
filter mode 'l'.
- The cups-lpd mini-daemon now supports "-o" options
on the command-line (passed by inetd) to set global
defaults for all print queues.
- The pstops filter assumed that a file with a Trailer
comment would also have an EOF comment.
- Added new cupsSetPasswordCB(), cupsSetServer(),
cupsSetUser(), and ippSetPort() functions to better
support client applications (especially GUIs...)
- The CUPS-add-class and CUPS-add-printer operations
didn't reset the printer-name attribute on remote
print queues that had to be renamed when a local
printer was defined with the same name.
- The lpoptions command now supports a "-r" option to
remove options for a printer or instance.
- The lpadmin and admin.cgi programs no longer allow
class and printer names to begin with a number; this
caused the command-line utilities to become confused.
- The Linux USB backend now looks for both the parallel
and usblp driver names in the device list.
- Added a new FontPath directive to cupsd.conf, and also
a "--with-fontpath" option for the configure script to
specify alternate font paths for pstoraster.
- The CUPS-move-job operation didn't update the
job-printer-uri attribute.
- The scheduler only looked up printers and classes by
name in IPP requests, instead of using the full URI.
This caused problems with KUPS and friends with
remote printers.
- The scheduler now handles better localization of
hostnames (e.g. server is host.foo.com, remote is
host.subfoo.foo.com, localized is not host.subfoo...)
- The scheduler logging functions now use a common
log file checking/rotation function (courtesy of
Crutcher Dunnavant at Red Hat)
- The scheduler could accept more client connections
than it allocated for if more than one Port or Listen
line was present in cupsd.conf.
- Other minor scheduler performance tweeks.
- The lpq and lprm commands didn't support the default
printer set using lpoptions.
- The lpoptions command now supports a "-l" option to
list the printer-specific options and their current
settings.
- The web printer and class lists now show a link to the
default printer or class at the top of the page.
- The text filter now supports pretty printing of shell
and perl scripts as well as C/C++ source files.
- The top and bottom margins were reversed for landscape
text printing.
- The lpq and lprm commands didn't understand printer
instances.
- The scheduler only selected on the first 100 file
descriptors instead of the maximum file descriptor
limit.
- The scheduler client, listener, and mainline functions
now share code to disable and enable monitoring for
new client connections.
- The imagetoraster filter didn't support all of the
required pagedevice parameters.
- The serial backend now checks for 100 serial ports
under Linux.
- The scheduler used sscanf() to pull out the remote
printer location, description, and make/model strings,
but if any of these options was empty then sscanf()
would stop processing.
- Added "debug2" log level to provide a little less
verbose debugging information at the "debug" level.
- The scheduler would crash if you stopped a printer
that was currently printing a job.
- The scheduler incorrectly allowed jobs in the cancelled,
aborted, or completed state to be cancelled.
- The image filters did not load TIFF images properly
for bottom-to-top and right-to-left orientations.
- Added new cupsEncodeOptions() function to encode
CUPS options as IPP job attributes.
- The IPP backend, LPD mini-daemon, client commands,
and CUPS API did not properly encode multiple
option values separated by commas.
- Added new scheduler malloc logging in debug mode
(provides summary of total arena size, allocated,
and free bytes once a minute)
- The EPM-based distributions didn't install the
correct symlinks for a few man pages.
- Fixed a memory leak in the scheduler - wasn't
freeing old filters when deleting or renaming
printers.
- The scheduler now queries the primary IP address
for the name of the server and maps any incoming
requests from that address to the server name.
This fixes web admin mapping problems from
server.domain.com to localhost.
- The web printer modify interface now remembers
the previous device and driver settings (except
for serial ports.)
- The job-k-octets attribute is now stored as part of
the job attributes; this preserves the information
after a job is completed when job file history is
turned off.
- Dropped option sub-group parsing code for the moment,
since many Xerox PPD files abuse this feature in PPD
files and don't follow the hierarchy rules.
- Added new wrapper code around options so that duplex
options for some HP printers don't prevent prints.
- Added support for Digital UNIX/Tru64 UNIX/OSF/1 format
for "lpstat -v" output.
- Now show the URI for remote printers instead of
/dev/null in "lpstat -v" output.
- Creating classes and adding printers to a class with
the lpadmin command didn't work.
- The banner pages and test page should now format
correctly in both portrait and landscape orientations.
- Updated banner page substitution so that { can appear
by itself without quoting.
CHANGES IN CUPS v1.1.2
- Makefile/configure fixes
- RPM spec file and EPM list file fixes
- The cupsTempFile() function now uses a different
algorithm for generating temp files and "reserves"
them to avoid possible security exploitation.
- Now use /dev/random (if available) to seed the random
number generator for certificates.
- The /var/spool/cups and /var/spool/cups/tmp directories
were incorrectly owned by root; they are now owned by
the filter user, typically "lp".
- The scheduler now resets the permissions on the spool
and temp directories as needed to match the filter
user.
- Now expose ppdCollect() as an externally callable
function.
- The image filters now support filtering from the
standard input.
- The imagetoraster filter now collects all printer
options and job patch files and applies them to the
page header as needed.
- Added format and banner options to LPD backend.
- The send-document operation didn't start a job
immediately when last-document was true.
- The set-job-attributes operation didn't correctly
replace the current job-hold-until value.
- Removed the option wrapper code from ppdEmit() and
friends since it caused problems with Ghostscript
and many PS printers.
- Was setting TZ environment variable twice for job
filters.
- Added syslog logging in cups-lpd to aide in
debugging problems.
- The HP-UX parallel port backend did not list the
available parallel ports on some systems (printf
calling problem...)
- The lp and lpr commands overrode user options if
-d/-P were specified after -o.
- The scheduler would crash with a */* filter.
- Added support for a "default" filter for unknown file
types. The example provided in the mime.types and
mime.convs file prints unknown files as if "-oraw" was
specified for the job. This functionality is disabled
by default.
- The "compatibility" mode fix for older backends did not
work for smbspool. Added a workaround for it.
- The HP-GL/2 filter didn't perform the right pen scaling
with some files and the "fitplot" option.
- New Software Performance Specification document that
describes the memory, disk, and CPU usage of all the
CUPS software.
CHANGES IN CUPS v1.1.1
- The pstoraster Makefile still referenced one of the
old PDF filter files.
- The filter Makefile used INSTALL_DATA instead of
INSTALL_LIB to install the CUPS image library.
- The administration CGI didn't work properly with
network devices.
- The BrowseACL variable was not updated after the
cupsd.conf file was loaded.
- The lpd mini-daemon didn't support printer instances.
- Now use a default umask of 077 for child processes.
- Now put temp files in /var/spool/cups/tmp for child
processes and the root user, unless TMPDIR or TempDir
is defined otherwise.
- cupsGetPPD() no longer uses easy-to-guess filenames.
- The CUPS-Delete-Class and CUPS-Delete-Printer
operations now save classes.conf file as needed.
- The lppasswd command wouldn't add a user.
- The ppdOpen() function could cause a segfault if a
0-length PPD file was read.
- The image filters were not handling images with
different X and Y resolutions properly.
- The imagetoraster filter defaulted to RGB output
instead of black output like pstoraster.
- The pstops filter didn't handle binary data properly.
- The pstops filter didn't handle copies properly for
PS files lacking DSC comments.
- The pstops filter now appends %%EOF to the end of
documents if they don't have it.
- The cupsGetPPD() function didn't work with remote
printers lacking the @server in the name.
- The configure script didn't work right when only
--prefix was specified.
- The ppdEmit() code now wraps all printer commands so
that buggy PostScript printers will still print a file
after receiving an option that isn't available.
- Fixed the DeskJet margin bug, and disabled 600dpi
color mode until it can be fixed.
- The cupsAddDest() function didn't sort instances
correctly in all cases.
- The time-at-xyz attributes now expand to the date and
time in banner files.
CHANGES IN CUPS v1.1
- Documentation updates.
-129
Ver Arquivo
@@ -1,129 +0,0 @@
ENCRYPTION - CUPS v1.1.5 - 12/20/2000
-------------------------------------
This file describes the encryption support provided by CUPS.
WARNING: CLIENTS CURRENTLY TRUST ALL CERTIFICATES FROM SERVERS.
This makes the CUPS client applications vulnerable to "man in
the middle" attacks, so we don't recommend using this to do
remote administration over WANs at this time.
Future versions of CUPS will keep track of server certificates
and provide a callback/confirmation interface for accepting new
certificates and warning when a certificate has changed.
LEGAL STUFF
BEFORE USING THE ENCRYPTION SUPPORT, PLEASE VERIFY THAT IT IS
LEGAL TO DO SO IN YOUR COUNTRY. CUPS by itself doesn't include
any encryption code, but it can link against the OpenSSL library
which does.
OVERVIEW OF ENCRYPTION SUPPORT IN CUPS
CUPS supports SSL/2.0, SSL/3.0, and TLS/1.0 encryption using
keys as large as 128-bits. Encryption support is provided via
the OpenSSL library and some new hooks in the CUPS code.
CUPS provides support for dedicated (https) and "upgrade" (TLS)
encryption of sessions. The "HTTP Upgrade" method is described
in RFC 2817; basically, the client can be secure or unsecure,
and the client or server initiates an upgrade to a secure
connection via some new HTTP fields and status codes. The HTTP
Upgrade method is new and no browsers we know of support it yet.
Stick with "https" for web browsers.
The current implementation is very basic. The CUPS client
software (lp, lpr, etc.) uses encryption as requested by the
server and/or as specified by the Encryption directive in the
client.conf file or in the CUPS_ENCRYPTION environment
variable:
Never
Never do encryption.
Always
Always do SSL/TLS encryption using the https scheme.
IfRequested
Upgrade to TLS encryption if the server asks for it.
This is the default setting.
Required
Always upgrade to TLS encryption as soon as the
connection is made. This is different than the "Always"
mode above since the connection is initially unsecure
and the client initiates the upgrade to TLS encryption.
These keywords are also used in the cupsd.conf file to secure
particular locations. To secure all traffic on the server, listen
on port 443 (https port) instead of port 631 and change the "ipp"
service listing (or add it if you don't have one) in /etc/services
to 443.
BEFORE YOU BEGIN
You'll need the OpenSSL library from:
http://www.openssl.org
CONFIGURING WITH ENCRYPTION SUPPORT
Once you have the OpenSSL library installed, you'll need to
configure CUPS to use it with the "--enable-ssl" option:
./configure --enable-ssl
If the OpenSSL stuff is not in a standard location, make sure to
define the CFLAGS, CXXFLAGS, and LDFLAGS environment variables
with the appropriate compiler and linker options first.
GENERATING A SERVER CERTIFICATE AND KEY
The following OpenSSL command will generate a server certificate
and key that you can play with. Since the certificate is not
properly signed it will generate all kinds of warnings in
Netscape and MSIE:
openssl req -new -x509 -keyout /etc/cups/ssl/server.key \
-out /etc/cups/ssl/server.crt -days 365 -nodes
chmod 600 /etc/cups/ssl/server.*
The "-nodes" option prevents the certificate and key from being
encrypted. The cupsd process runs in the background, detached
from any input source; if you encrypt these files then cupsd
will not be able to load them!
Send all rants about non-encrypted certificate and key files to
/dev/null. It makes sense to encrypt user files, but not for
files used by system processes/daemons...
REPORTING PROBLEMS
If you have problems, READ THE DOCUMENTATION FIRST! If the
documentation does not solve your problems please send an email
to "cups-support@cups.org". Include your operating system and
version, compiler and version, and any errors or problems you've
run into. The "/var/log/cups/error_log" file should also be sent,
as it often helps to determine the cause of your problem.
If you are running a version of Linux, be sure to provide the
Linux distribution you have, too.
Please note that the "cups-support@cups.org" email address goes
to the CUPS developers; they are busy people, so your email may
go unanswered for days or weeks. In general, only general build
or distribution problems will actually get answered - for
end-user support see the "README.txt" for a summary of the
resources available.
-154
Ver Arquivo
@@ -1,154 +0,0 @@
INSTALL - CUPS v1.1.5 - 12/20/2000
----------------------------------
This file describes how to compile and install CUPS from source
code. For more information on CUPS see the file called
"README.txt". A complete change log can be found in
"CHANGES.txt".
BEFORE YOU BEGIN
You'll need ANSI-compliant C and C++ compilers, plus a make
program and Bourne shell. The GNU compiler tools work well -
we've tested the current CUPS code against GCC 2.95.x with
excellent results.
The makefiles used by the project should work with all versions
of make. We've tested them with GNU make as well as the make
programs shipped by Compaq, HP, SGI, and Sun. FreeBSD users
should use GNU make (gmake).
Besides these tools you'll want the following libraries:
- JPEG 6b or higher
- PNG 1.0.6 or higher
- TIFF 3.4 or higher
- ZLIB 1.1.3 or higher
CUPS will compile and run without these, however you'll miss out on
many of the features provided by CUPS.
CONFIGURATION
CUPS uses GNU autoconf, so you should find the usual "configure"
script in the main CUPS source directory. To configure CUPS for
your system, type:
./configure ENTER
The default installation will put the CUPS software in the
"/etc", "/usr", and "/var" directories on your system, which
will overwrite any existing printing commands on your system.
Use the "--prefix" option to install the CUPS software in
another location:
./configure --prefix=/some/directory ENTER
If the PNG, JPEG, TIFF, and ZLIB libraries are not installed in
a system default location (typically "/usr/include" and
"/usr/lib") you'll need to set the CFLAGS, CXXFLAGS, and LDFLAGS
environment variables prior to running configure:
setenv CFLAGS "-I/some/directory" ENTER
setenv CXXFLAGS "-I/some/directory" ENTER
setenv LDFLAGS "-L/some/directory" ENTER
./configure ... ENTER
or:
CFLAGS="-I/some/directory"; export CFLAGS ENTER
CXXFLAGS="-I/some/directory"; export CXXFLAGS ENTER
LDFLAGS="-L/some/directory"; export LDFLAGS ENTER
./configure ... ENTER
To enable support for encryption, you'll also want to add the
"--enable-ssl" option:
./configure --enable-ssl
SSL and TLS support require the OpenSSL library, available at:
http://www.openssl.org
Once you have configured things, just type:
make ENTER
or if you have FreeBSD:
gmake ENTER
to build the software.
INSTALLING THE SOFTWARE
Once you have built the software you need to install it. The
"install" target provides a quick way to install the software on
your local system:
make install ENTER
or for FreeBSD:
gmake install ENTER
You can also build binary packages that can be installed on other
machines using the RPM spec file ("cups.spec") or EPM list file
("cups.list"). The latter also supports building of binary RPMs,
so it may be more convenient to use - we use EPM to build all of
our binary distributions.
You can find the RPM software at:
http://www.rpm.org
The RPM software is at:
http://www.easysw.com/epm
CREATING BINARY DISTRIBUTIONS WITH EPM
The top level makefile supports generation of many types of binary
distributions using EPM. To build a binary distribution type:
make <format> ENTER
or
gmake <format> ENTER
for FreeBSD, where <format> is one of the following:
epm - Builds a portable shell script and tar file based
distribution. This format will also backup your
existing printing system if you decide to remove
CUPS at some future time.
rpm - Builds a RPM binary distribution.
deb - Builds a Debian binary distribution.
depot - Builds a HP-UX binary distribution.
pkg - Builds a Solaris binary distribution.
tardist - Builds an IRIX binary distribution.
REPORTING PROBLEMS
If you have problems, READ THE DOCUMENTATION FIRST! If the
documentation does not solve your problems please send an email
to "cups-support@cups.org". Include your operating system and
version, compiler and version, and any errors or problems you've
run into. The "/var/log/cups/error_log" file should also be sent,
as it often helps to determine the cause of your problem.
If you are running a version of Linux, be sure to provide the
Linux distribution you have, too.
Please note that the "cups-support@cups.org" email address goes
to the CUPS developers; they are busy people, so your email may
go unanswered for days or weeks. In general, only general build
or distribution problems will actually get answered - for
end-user support see the "README.txt" for a summary of the
resources available.
+1 -5
Ver Arquivo
@@ -30,7 +30,6 @@ AR = @AR@
AWK = @AWK@
CC = @LIBTOOL@ @CC@
CHMOD = @CHMOD@
CHOWN = @CHOWN@
CP = @CP@
CXX = @LIBTOOL@ @CXX@
DSO = @DSO@
@@ -63,7 +62,6 @@ INSTALL_SYSV = @INSTALL_SYSV@
LIBCUPS = @LIBCUPS@
LIBCUPSIMAGE = @LIBCUPSIMAGE@
LIBJPEG = @LIBJPEG@
LIBMALLOC = @LIBMALLOC@
LIBPNG = @LIBPNG@
LIBTIFF = @LIBTIFF@
LIBZ = @LIBZ@
@@ -88,7 +86,6 @@ LIBS = $(LINKCUPS) $(NETLIBS) @LIBS@
NETLIBS = @NETLIBS@
OPTIM = @OPTIM@
OPTIONS =
SSLLIBS = @SSLLIBS@
#
# Directories...
@@ -122,9 +119,8 @@ top_srcdir = @top_srcdir@
BINDIR = @bindir@
DATADIR = @CUPS_DATADIR@
DOCDIR = @CUPS_DOCROOT@
ESP_ROOT = @ESP_ROOT@
INCLUDEDIR = $(includedir)
INITDIR = @INITDIR@
INITDDIR = @INITDDIR@
LIBDIR = $(libdir)
LOCALEDIR = @CUPS_LOCALEDIR@
LOGDIR = @CUPS_LOGDIR@
+26 -22
Ver Arquivo
@@ -28,7 +28,7 @@ include Makedefs
# Directories to make...
#
DIRS = cups backend berkeley cgi-bin filter man pdftops pstoraster \
DIRS = cups backend berkeley cgi-bin doc filter man pdftops pstoraster \
scheduler systemv
#
@@ -64,28 +64,32 @@ install:
(cd conf; $(MAKE) $(MFLAGS) install)
echo Installing in data...
(cd data; $(MAKE) $(MFLAGS) install)
echo Installing in doc...
(cd doc; $(MAKE) $(MFLAGS) install)
echo Installing in fonts...
(cd fonts; $(MAKE) $(MFLAGS) install)
(cd fonts; $(MAKE) $(MFLAGS) install)
echo Installing in locale...
(cd locale; $(MAKE) $(MFLAGS) install)
echo Installing in ppd...
\ (cd ppd; $(MAKE) $(MFLAGS) install)
(cd ppd; $(MAKE) $(MFLAGS) install)
echo Installing in templates...
(cd templates; $(MAKE) $(MFLAGS) install)
echo Installing startup script...
if test "x$INITDIR" != "x"; then \
$(MKDIR) $(prefix)/$(INITDIR)/init.d; \
$(RM) $(prefix)/$(INITDIR)/init.d/cups; \
$(INSTALL_SCRIPT) cups.sh $(prefix)/$(INITDIR)/init.d/cups; \
$(CHMOD) ugo+rx $(prefix)/$(INITDIR)/init.d/cups; \
$(MKDIR) $(prefix)/$(INITDIR)/rc0.d; \
$(RM) $(prefix)/$(INITDIR)/rc0.d/K00cups; \
ln -s $(INITDDIR)/cups $(prefix)/$(INITDIR)/rc0.d/K00cups; \
$(MKDIR) $(prefix)/$(INITDIR)/rc3.d; \
$(RM) $(prefix)/$(INITDIR)/rc3.d/S99cups; \
ln -s $(INITDDIR)/cups $(prefix)/$(INITDIR)/rc3.d/S99cups; \
if test -d $(prefix)/sbin/init.d; then \
$(INSTALL_SCRIPT) cups.sh $(prefix)/sbin/init.d/cups; \
$(CHMOD) ugo+rx $(prefix)/sbin/init.d/cups; \
ln -s ../init.d/cups $(prefix)/sbin/rc0.d/K000cups; \
ln -s ../init.d/cups $(prefix)/sbin/rc2.d/S999cups; \
fi
if test -d $(prefix)/etc/rc.d/init.d; then \
$(INSTALL_SCRIPT) cups.sh $(prefix)/etc/rc.d/init.d/cups; \
$(CHMOD) ugo+rx $(prefix)/etc/rc.d/cups; \
ln -s ../init.d/cups $(prefix)/etc/rc.d/rc0.d/K00cups; \
ln -s ../init.d/cups $(prefix)/etc/rc.d/rc2.d/S99cups; \
fi
if test -d $(prefix)/etc/init.d; then \
$(INSTALL_SCRIPT) cups.sh $(prefix)/etc/init.d/cups; \
$(CHMOD) ugo+rx $(prefix)/etc/init.d/cups; \
ln -s ../init.d/cups $(prefix)/etc/rc0.d/K00cups; \
ln -s ../init.d/cups $(prefix)/etc/rc2.d/S99cups; \
fi
#
@@ -94,12 +98,12 @@ install:
EPMFLAGS = -v \
BINDIR=$(BINDIR) DATADIR=$(DATADIR) \
DOCDIR=$(DOCDIR) INCLUDEDIR=$(INCLUDEDIR) \
LIBDIR=$(LIBDIR) LOCALEDIR=$(LOCALEDIR) \
LOGDIR=$(LOGDIR) MANDIR=$(MANDIR) \
PAMDIR=$(PAMDIR) REQUESTS=$(REQUESTS) \
SBINDIR=$(SBINDIR) SERVERBIN=$(SERVERBIN) \
SERVERROOT=$(SERVERROOT)
DOCDIR=$(DOCDIR) ESP_ROOT=$(ESP_ROOT) \
INCLUDEDIR=$(INCLUDEDIR) LIBDIR=$(LIBDIR) \
LOCALEDIR=$(LOCALEDIR) LOGDIR=$(LOGDIR) \
MANDIR=$(MANDIR) PAMDIR=$(PAMDIR) \
REQUESTS=$(REQUESTS) SBINDIR=$(SBINDIR) \
SERVERBIN=$(SERVERBIN) SERVERROOT=$(SERVERROOT)
epm:
epm $(EPMFLAGS) cups
+128 -138
Ver Arquivo
@@ -1,59 +1,52 @@
README - CUPS v1.1.5 - 12/20/2000
---------------------------------
Looking for compile instructions? Read the file "INSTALL.txt"
instead...
README - CUPS v1.1 - 07/10/2000
-------------------------------
INTRODUCTION
CUPS provides a portable printing layer for UNIX(r)-based
operating systems. It has been developed by Easy Software
Products to promote a standard printing solution for all UNIX
vendors and users. CUPS provides the System V and Berkeley
command-line interfaces.
CUPS provides a portable printing layer for UNIX(r)-based operating
systems. It has been developed by Easy Software Products to promote a
standard printing solution for all UNIX vendors and users. CUPS
provides the System V and Berkeley command-line interfaces.
CUPS uses the Internet Printing Protocol ("IPP") as the basis
for managing print jobs and queues. The Line Printer Daemon
("LPD") Server Message Block ("SMB"), and AppSocket (a.k.a.
JetDirect) protocols are also supported with reduced
functionality. CUPS adds network printer browsing and
PostScript Printer Description ("PPD") based printing options to
support real-world printing under UNIX.
CUPS uses the Internet Printing Protocol ("IPP") as the basis for
managing print jobs and queues. The Line Printer Daemon ("LPD") Server
Message Block ("SMB"), and AppSocket (a.k.a. JetDirect) protocols are
also supported with reduced functionality. CUPS adds network printer
browsing and PostScript Printer Description ("PPD") based printing
options to support real-world printing under UNIX.
CUPS also includes a customized version of GNU Ghostscript
(currently based off GNU Ghostscript 5.50) and an image file RIP
that are used to support non-PostScript printers. Sample
drivers for HP and EPSON printers are included that use these
filters.
CUPS also includes a customized version of GNU Ghostscript (currently
based off GNU Ghostscript 5.50) and an image file RIP that are used to
support non-PostScript printers. Sample drivers for HP and EPSON
printers are included that use these filters.
Drivers for over 2300 printers are provided with our ESP Print
Pro software, available at:
Drivers for over 2300 printers are provided with our ESP Print Pro
software, available at:
http://www.easysw.com/printpro
CUPS is licensed under the GNU General Public License and GNU
Library General Public License. Please contact Easy Software
Products for commercial support and "binary distribution"
rights.
CUPS is licensed under the GNU General Public License and GNU Library
General Public License. Please contact Easy Software Products for
commercial support and "binary distribution" rights.
SYSTEM REQUIREMENTS
Binary distributions require a minimum of 10MB of free disk
space. We do not recommend using CUPS on a workstation with less
than 32MB of RAM or a PC with less than 16MB of RAM.
Binary distributions require a minimum of 10MB of free disk space. We
do not recommend using CUPS on a workstation with less than 32MB of RAM
or a PC with less than 16MB of RAM.
If you are installing from source you'll need ANSI-compliant C
and C++ compilers and optionally one or more image file support
libraries. Complete source installation instructions can be
found in the file "INSTALL.txt".
If you are installing from source you'll need ANSI-compliant C and C++
compilers and optionally one or more image file support libraries.
Complete source installation instructions can be found in the CUPS
System Administrator's Manual in the files "doc/sam.html" or
"doc/sam.pdf".
SOFTWARE REQUIREMENTS
The following operating system software is required to install
one of the binary distributions from Easy Software Products:
The following operating system software is required to install one of
the binary distributions from Easy Software Products:
- Digital UNIX (aka OSF1 aka Compaq Tru64 UNIX) 4.0 or higher
- HP-UX 10.20 or higher
@@ -64,104 +57,77 @@ one of the binary distributions from Easy Software Products:
INSTALLING "PORTABLE" CUPS DISTRIBUTIONS
We are currently distributing "portable" CUPS binary
distributions in TAR format with installation and removal
scripts generated by our ESP Package Manager (EPM) software,
which is available from:
We are currently distributing "portable" CUPS binary distributions in
TAR format with installation and removal scripts generated by our ESP
Package Manager (EPM) software, which is available from:
http://www.easysw.com/epm
WARNING: Installing CUPS will overwrite your existing printing
system. Backup files are made by the installation script and
restored by the removal script, so if you experience problems
you should be able to remove the CUPS software to restore your
previous configuration. However, Easy Software Products makes
no warranty for this and will not be liable for any lost
revenues, etc.
WARNING: Installing CUPS will overwrite your existing printing system.
Backup files are made by the installation script and restored by the
removal script, so if you experience problems you should be able to
remove the CUPS software to restore your previous configuration.
However, Easy Software Products makes no warranty for this and will not
be liable for any lost revenues, etc.
To install the CUPS software you will need to be logged in as
root (doing an "su" is good enough). Once you are the root
user, run the installation script with:
To install the CUPS software you will need to be logged in as root
(doing an "su" is good enough). Once you are the root user, run the
installation script with:
./cups.install ENTER
After asking you a few yes/no questions the CUPS software will
be installed and the scheduler will be started automatically.
After asking you a few yes/no questions the CUPS software will be
installed and the scheduler will be started automatically.
INSTALLING HOST-SPECIFIC (RPM, DEBIAN, ETC.) DISTRIBUTIONS
The host-specific distributions use the operating system
software installation tools. To install a host-specific
distribution please consult the CUPS Software Administrators
Manual or your operating system documentation.
The host-specific distributions use the operating system software
installation tools. To install a host-specific distribution please
consult the CUPS Software Administrators Manual or your operating
system documentation.
READING THE DOCUMENTATION
Once you have installed the software you can access the
documentation (and a bunch of other stuff) on-line at:
Once you have installed the software you can access the documentation
(and a bunch of other stuff) on-line at:
http://localhost:631
If you're having trouble getting that far, the documentation is
located in the "/usr/share/doc/cups" directory in the binary
distributions, and under the "doc" directory in the source
archives.
If you're having trouble getting that far, the documentation is located
in the "/usr/share/doc/cups" directory in the binary distributions, and
under the "doc" directory in the source archives.
Please read the documentation before asking questions.
GETTING SUPPORT AND OTHER RESOURCES
If you have problems, READ THE DOCUMENTATION FIRST!
You can subscribe to the CUPS mailing list by sending a message
containing "subscribe cups" to majordomo@cups.org. This list is
provided to discuss problems, questions, and improvements to the
CUPS software. New releases of CUPS are announced to this list
as well.
Commercial support (with a guaranteed response time) is
available from Easy Software Products. For more information
see:
http://www.easysw.com/cups
See the CUPS web site at "http://www.cups.org" for other site
links.
SETTING UP PRINTER QUEUES USING YOUR WEB BROWSER
CUPS 1.1 includes a new web-based administration tool that
allows you to manage printers, classes, and jobs on your
server. To access the printer administration tools open the
following URL in your browser:
CUPS 1.1 includes a new web-based administration tool that allows you
to manage printers, classes, and jobs on your server. To access the
printer administration tools open the following URL in your browser:
http://localhost:631/admin
You will be asked for the administration password (root or any
other user in the sys/system/root group on your system) and then
shown a menu of available functions.
You will be asked for the administration password (root or any other
user in the sys/system/root group on your system) and then shown a
menu of available functions.
DO NOT use the hostname for your machine - it will not work with
the default CUPS configuration. To enable administration access
on other addresses, consult the CUPS Software Administrators
Manual.
DO NOT use the hostname for your machine - it will not work with the
default CUPS configuration. To enable administration access on other
addresses, consult the CUPS Software Administrators Manual.
SETTING UP PRINTER QUEUES FROM THE COMMAND-LINE
CUPS works best with PPD (PostScript Printer Description)
files. In a pinch you can also use System V style printer
interface scripts.
CUPS works best with PPD (PostScript Printer Description) files. In a
pinch you can also use System V style printer interface scripts.
Six sample PPD files are provided with this distribution that
utilize the PostScript and image file RIPs and the sample EPSON
and HP printer drivers. To add the sample DeskJet driver to the
system for a printer connected to the parallel port, use one of
the following commands:
Six sample PPD files are provided with this distribution that utilize
the PostScript and image file RIPs and the sample EPSON and HP printer
drivers. To add the sample DeskJet driver to the system for a printer
connected to the parallel port, use one of the following commands:
Digital UNIX:
@@ -197,67 +163,91 @@ Similarly, for the other sample drivers you can use:
EPSON 9-pin Series epson9.ppd
EPSON 24-pin Series epson24.ppd
These sample drivers provide basic printing capabilities, but
generally do not exercise the full potential of the printers or
CUPS. For commercial printer drivers check out our ESP Print
Pro software at:
These sample drivers provide basic printing capabilities, but generally
do not exercise the full potential of the printers or CUPS. For
commercial printer drivers check out our ESP Print Pro software at:
http://www.easysw.com/printpro
PRINTING FILES
CUPS provides both the System V "lp" and Berkeley "lpr" commands
for printing:
CUPS provides both the System V "lp" and Berkeley "lpr" commands for
printing:
lp filename
lpr filename
Both the "lp" and "lpr" commands support printing options for
the driver:
Both the "lp" and "lpr" commands support printing options for the
driver:
lp -omedia=A4 -oresolution=600dpi filename
lpr -omedia=A4 -oresolution=600dpi filename
CUPS recognizes many types of images files as well as PDF,
PostScript, HP-GL/2, and text files, so you can print those
files directly rather than through an application.
CUPS recognizes many types of images files as well as PDF, PostScript,
HP-GL/2, and text files, so you can print those files directly rather
than through an application.
If you have an application that generates output specifically
for your printer then you need to use the "-oraw" or "-l"
options:
If you have an application that generates output specifically for your
printer then you need to use the "-oraw" or "-l" options:
lp -oraw filename
lpr -l filename
This will prevent the filters from misinterpreting your print
file.
This will prevent the filters from misinterpreting your print file.
REPORTING PROBLEMS
If you have problems, READ THE DOCUMENTATION FIRST! If the
documentation does not solve your problems please send an email to
cups-support@cups.org. Include your operating system and version,
compiler and version, and any errors or problems you've run into. The
/var/log/error_log file should also be sent, as it often helps to
determine the cause of your problem.
If you are running a version of Linux, be sure to provide the Linux
distribution you have, too.
Please note that the "cups-support@cups.org" email address goes to the
CUPS developers; they are busy people, so your email may go unanswered
for days or weeks. Commercial support (with a guaranteed response
time) is available from Easy Software Products.
OTHER RESOURCES
See the CUPS web site at "http://www.cups.org" for other site links.
You can subscribe to the CUPS mailing list by sending a message
containing "subscribe cups" to majordomo@cups.org. This list is
provided to discuss problems, questions, and improvements to the CUPS
software. New releases of CUPS are announced to this list as well.
LEGAL STUFF
CUPS is Copyright 1993-2000 by Easy Software Products. CUPS,
the CUPS logo, and the Common UNIX Printing System are the
trademark property of Easy Software Products.
CUPS is Copyright 1993-2000 by Easy Software Products. CUPS, the CUPS
logo, and the Common UNIX Printing System are the trademark property of
Easy Software Products.
The MD5 Digest code is Copyright 1999 Aladdin Enterprises.
The PostScript RIP software (pstoraster) is based on the GNU
Ghostscript 5.50 core, Copyright 1986-1998 by Aladdin
Enterprises.
Ghostscript 5.50 core, Copyright 1986-1998 by Aladdin Enterprises.
The PDF filter (pdftops) is based on the Xpdf 0.90 software,
Copyright 1996-1999 by Derek B. Noonburg.
The PDF filter (pdftops) is based on the Xpdf 0.90 software, Copyright
1996-1999 by Derek B. Noonburg.
This software is based in part on the work of the Independent
JPEG Group.
This software is based in part on the work of the Independent JPEG
Group.
CUPS is provided under the terms of the GNU General Public
License and GNU Library General Public License. This program is
distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the "LICENSE.html",
"LICENSE.txt", or "cups.license" files for more information.
CUPS is provided under the terms of the GNU General Public License and
GNU Library General Public License. This program is distributed in the
hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the "LICENSE.html", "LICENSE.txt", or "cups.license" files
for more information.
For commercial licensing information, please contact:
@@ -270,7 +260,7 @@ For commercial licensing information, please contact:
Email: cups-info@cups.org
WWW: http://www.cups.org
Note that commercial licensors may also require a license from
Artifex Software Inc. which handles commercial licensing of the
Ghostscript software, and from Derek B. Noonburg who developed
the Xpdf software used to print PDF files.
Note that commercial licensors may also require a license from Artifex
Software Inc. which handles commercial licensing of the Ghostscript
software, and from Derek B. Noonburg who developed the Xpdf software
used to print PDF files.
+1 -1
Ver Arquivo
@@ -41,7 +41,7 @@ all: $(TARGETS)
#
clean:
$(RM) $(OBJS) $(TARGETS) http
$(RM) $(OBJS) $(TARGETS)
#
+120 -58
Ver Arquivo
@@ -54,6 +54,10 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
char *argv[]) /* I - Command-line arguments */
{
int i; /* Looping var */
int n, n2; /* Attribute values */
char *option, /* Name of option */
*s; /* Pointer into option value */
const char *val; /* Pointer to option value */
int num_options; /* Number of printer options */
cups_option_t *options; /* Printer options */
char method[255], /* Method in URI */
@@ -72,8 +76,6 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
*response; /* IPP response */
ipp_attribute_t *job_id; /* job-id attribute */
ipp_attribute_t *copies_sup; /* copies-supported attribute */
ipp_attribute_t *charset_sup; /* charset-supported attribute */
const char *charset; /* Character set to use */
cups_lang_t *language; /* Default language */
struct stat fileinfo; /* File statistics */
size_t nbytes, /* Number of bytes written */
@@ -89,8 +91,6 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
if (argc == 1)
{
char *s;
if ((s = strrchr(argv[0], '/')) != NULL)
s ++;
else
@@ -203,10 +203,9 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
* don't support the copies attribute...
*/
language = cupsLangDefault();
charset_sup = NULL;
copies_sup = NULL;
version = 1;
language = cupsLangDefault();
copies_sup = NULL;
version = 1;
do
{
@@ -248,7 +247,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
* Do the request...
*/
for (response = NULL, ipp_status = IPP_ERROR;;)
for (;;)
{
/*
* POST the request, retrying as needed...
@@ -329,8 +328,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
copies_sup = NULL; /* No */
}
charset_sup = ippFindAttribute(response, "charset-supported",
IPP_TAG_CHARSET);
ippDelete(response);
}
else
{
@@ -397,46 +395,6 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
else
copies = atoi(argv[4]);
/*
* Figure out the character set to use...
*/
charset = language ? cupsLangEncoding(language) : "us-ascii";
if (charset_sup)
{
/*
* See if IPP server supports the requested character set...
*/
for (i = 0; i < charset_sup->num_values; i ++)
if (strcasecmp(charset, charset_sup->values[i].string.text) == 0)
break;
/*
* If not, choose us-ascii or utf-8...
*/
if (i >= charset_sup->num_values)
{
/*
* See if us-ascii is supported...
*/
for (i = 0; i < charset_sup->num_values; i ++)
if (strcasecmp("us-ascii", charset_sup->values[i].string.text) == 0)
break;
if (i < charset_sup->num_values)
charset = "us-ascii";
else
charset = "utf-8";
}
}
if (response)
ippDelete(response);
/*
* Then issue the print-job request...
*/
@@ -453,7 +411,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
request->request.op.request_id = 1;
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, charset);
"attributes-charset", NULL, "utf-8");
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL,
@@ -481,16 +439,120 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
options = NULL;
num_options = cupsParseOptions(argv[5], 0, &options);
if ((content_type = getenv("CONTENT_TYPE")) != NULL &&
strcasecmp(content_type, "application/vnd.cups-raw") == 0)
num_options = cupsAddOption("raw", "", num_options, &options);
cupsEncodeOptions(request, num_options, options);
cupsFreeOptions(num_options, options);
if (cupsGetOption("raw", num_options, options) ||
((content_type = getenv("CONTENT_TYPE")) != NULL &&
strcasecmp(content_type, "application/vnd.cups-raw") == 0))
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
NULL, "application/vnd.cups-raw");
else if ((val = cupsGetOption("document-format", num_options, options)) != NULL)
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
NULL, val);
else
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
NULL, "application/octet-stream");
if (copies_sup)
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "copies", atoi(argv[4]));
for (i = 0; i < num_options; i ++)
{
/*
* Skip the "raw" option - handled above...
*/
if (strcasecmp(options[i].name, "raw") == 0 ||
strcasecmp(options[i].name, "document-format") == 0)
continue;
/*
* See what the option value is; for compatibility with older interface
* scripts, we have to support single-argument options as well as
* option=value, option=low-high, and option=MxN.
*/
option = options[i].name;
val = options[i].value;
if (*val == '\0')
val = NULL;
if (val != NULL)
{
if (strcasecmp(val, "true") == 0 ||
strcasecmp(val, "on") == 0 ||
strcasecmp(val, "yes") == 0)
{
/*
* Boolean value - true...
*/
n = 1;
val = "";
}
else if (strcasecmp(val, "false") == 0 ||
strcasecmp(val, "off") == 0 ||
strcasecmp(val, "no") == 0)
{
/*
* Boolean value - false...
*/
n = 0;
val = "";
}
n = strtol(val, &s, 0);
}
else
{
if (strncasecmp(option, "no", 2) == 0)
{
option += 2;
n = 0;
}
else
n = 1;
s = "";
}
if (*s != '\0' && *s != '-' && (*s != 'x' || s == val))
/*
* String value(s)...
*/
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, option, NULL, val);
else if (val != NULL)
{
/*
* Numeric value, range, or resolution...
*/
if (*s == '-')
{
n2 = strtol(s + 1, NULL, 0);
ippAddRange(request, IPP_TAG_JOB, option, n, n2);
}
else if (*s == 'x')
{
n2 = strtol(s + 1, &s, 0);
if (strcasecmp(s, "dpc") == 0)
ippAddResolution(request, IPP_TAG_JOB, option, IPP_RES_PER_CM, n, n2);
else if (strcasecmp(s, "dpi") == 0)
ippAddResolution(request, IPP_TAG_JOB, option, IPP_RES_PER_INCH, n, n2);
else
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, option, NULL, val);
}
else
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, option, n);
}
else
/*
* Boolean value...
*/
ippAddBoolean(request, IPP_TAG_JOB, option, (char)n);
}
/*
* Now fill in the HTTP request stuff...
*/
+7 -101
Ver Arquivo
@@ -60,8 +60,7 @@ extern int rresvport(int *port); /* Hello? No prototype for this... */
static int lpd_command(int lpd_fd, char *format, ...);
static int lpd_queue(char *hostname, char *printer, char *filename,
char *user, char *title, int copies, int banner,
int format);
char *user, int copies);
/*
@@ -80,15 +79,9 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
hostname[1024], /* Hostname */
username[255], /* Username info (not used) */
resource[1024], /* Resource info (printer name) */
*options, /* Pointer to options */
name[255], /* Name of option */
value[255], /* Value of option */
*ptr, /* Pointer into name or value */
filename[1024]; /* File to print */
int port; /* Port number (not used) */
int status; /* Status of LPD job */
int banner; /* Print banner page? */
int format; /* Print format */
if (argc == 1)
@@ -149,83 +142,6 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
httpSeparate(argv[0], method, username, hostname, &port, resource);
/*
* See if there are any options...
*/
banner = 0;
format = 'l';
if ((options = strchr(resource, '?')) != NULL)
{
/*
* Yup, terminate the device name string and move to the first
* character of the options...
*/
*options++ = '\0';
/*
* Parse options...
*/
while (*options)
{
/*
* Get the name...
*/
for (ptr = name; *options && *options != '=';)
*ptr++ = *options++;
*ptr = '\0';
if (*options == '=')
{
/*
* Get the value...
*/
options ++;
for (ptr = value; *options && *options != '+';)
*ptr++ = *options++;
*ptr = '\0';
if (*options == '+')
options ++;
}
else
value[0] = '\0';
/*
* Process the option...
*/
if (strcasecmp(name, "banner") == 0)
{
/*
* Set the banner...
*/
banner = !value[0] ||
strcasecmp(value, "on") == 0 ||
strcasecmp(value, "yes") == 0 ||
strcasecmp(value, "true") == 0;
}
else if (strcasecmp(name, "format") == 0 && value[0])
{
/*
* Set output format...
*/
if (strchr("cdfglnoprtv", value[0]) != NULL)
format = value[0];
else
fprintf(stderr, "ERROR: Unknown format character \"%c\"\n", value[0]);
}
}
}
/*
* Queue the job...
*/
@@ -233,16 +149,14 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
if (argc > 6)
{
status = lpd_queue(hostname, resource + 1, filename,
argv[2] /* user */, argv[3] /* title */,
atoi(argv[4]) /* copies */, banner, format);
argv[2] /* user */, atoi(argv[4]) /* copies */);
if (!status)
fprintf(stderr, "PAGE: 1 %d\n", atoi(argv[4]));
}
else
status = lpd_queue(hostname, resource + 1, filename,
argv[2] /* user */, argv[3] /* title */, 1,
banner, format);
argv[2] /* user */, 1);
/*
* Remove the temporary file if necessary...
@@ -317,10 +231,7 @@ lpd_queue(char *hostname, /* I - Host to connect to */
char *printer, /* I - Printer/queue name */
char *filename, /* I - File to print */
char *user, /* I - Requesting user */
char *title, /* I - Job title */
int copies, /* I - Number of copies */
int banner, /* I - Print LPD banner? */
int format) /* I - Format specifier */
int copies) /* I - Number of copies */
{
FILE *fp; /* Job file */
char localhost[255]; /* Local host name */
@@ -443,18 +354,13 @@ lpd_queue(char *hostname, /* I - Host to connect to */
gethostname(localhost, sizeof(localhost));
localhost[31] = '\0'; /* RFC 1179, Section 7.2 - host name < 32 chars */
snprintf(control, sizeof(control), "H%s\nP%s\nJ%s\n", localhost, user, title);
snprintf(control, sizeof(control), "H%s\nP%s\n", localhost, user);
cptr = control + strlen(control);
if (banner)
{
snprintf(cptr, sizeof(control) - (cptr - control), "L%s\n", user);
cptr += strlen(cptr);
}
while (copies > 0)
{
snprintf(cptr, sizeof(control) - (cptr - control), "%cdfA%03d%s\n", format,
snprintf(cptr, sizeof(control) - (cptr - control), "ldfA%03d%s\n",
getpid() % 1000, localhost);
cptr += strlen(cptr);
copies --;
+21 -47
Ver Arquivo
@@ -269,16 +269,13 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
void
list_devices(void)
{
#if defined(__hpux) || defined(__sgi) || defined(__sun)
static char *funky_hex = "0123456789abcdefghijklmnopqrstuvwxyz";
/* Funky hex numbering used for some devices */
#endif /* __hpux || __sgi || __sun */
#ifdef __linux
int i; /* Looping var */
int fd; /* File descriptor */
char device[255], /* Device filename */
probefile[255]; /* Probe filename */
char device[255]; /* Device filename */
FILE *probe; /* /proc/parport/n/autoprobe file */
char line[1024], /* Line from file */
*delim, /* Delimiter in file */
@@ -288,41 +285,9 @@ list_devices(void)
for (i = 0; i < 4; i ++)
{
/*
* First open the device to make sure the driver module is loaded...
*/
sprintf(device, "/dev/lp%d", i);
if ((fd = open(device, O_WRONLY)) >= 0)
close(fd);
else
sprintf(device, "/proc/parport/%d/autoprobe", i);
if ((probe = fopen(device, "r")) != NULL)
{
sprintf(device, "/dev/par%d", i);
if ((fd = open(device, O_WRONLY)) >= 0)
close(fd);
}
/*
* Then try looking at the probe file...
*/
sprintf(probefile, "/proc/parport/%d/autoprobe", i);
if ((probe = fopen(probefile, "r")) == NULL)
{
/*
* Linux 2.4 kernel has different path...
*/
sprintf(probefile, "/proc/sys/dev/parport/parport%d/autoprobe", i);
probe = fopen(probefile, "r");
}
if (probe != NULL)
{
/*
* Found a probe file!
*/
memset(make, 0, sizeof(make));
memset(model, 0, sizeof(model));
strcpy(model, "Unknown");
@@ -359,13 +324,23 @@ list_devices(void)
printf("direct parallel:/dev/lp%d \"%s\" \"Parallel Port #%d\"\n",
i, model, i + 1);
}
else if (fd >= 0)
else
{
/*
* No probe file, but we know the port is there...
*/
printf("direct parallel:%s \"Unknown\" \"Parallel Port #%d\"\n", device, i + 1);
sprintf(device, "/dev/lp%d", i);
if ((fd = open(device, O_WRONLY)) >= 0)
{
close(fd);
printf("direct parallel:%s \"Unknown\" \"Parallel Port #%d\"\n", device, i + 1);
}
else
{
sprintf(device, "/dev/par%d", i);
if ((fd = open(device, O_WRONLY)) >= 0)
{
close(fd);
printf("direct parallel:%s \"Unknown\" \"Parallel Port #%d\"\n", device, i + 1);
}
}
}
}
#elif defined(__sgi)
@@ -522,8 +497,7 @@ list_devices(void)
{
sprintf(device, "/dev/c%dt%dd0_lp", i, j);
if (access(device, 0) == 0)
printf("direct parallel:%s \"Unknown\" \"Parallel Port #%d,%d\"\n",
device, i, j);
printf("direct parallel:%s \"Unknown\" \"Parallel Port #%d,%d\"\n", i, j);
}
/*
@@ -565,7 +539,7 @@ list_devices(void)
printf("direct parallel:%s \"Unknown\" \"Parallel Port #%d\"\n", device, i + 1);
}
}
#elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__)
#elif defined(FreeBSD) || defined(OpenBSD) || defined(NetBSD)
int i; /* Looping var */
int fd; /* File descriptor */
char device[255]; /* Device filename */
+3 -107
Ver Arquivo
@@ -38,19 +38,12 @@
#include <cups/string.h>
#include <signal.h>
#ifdef __hpux
# include <sys/modem.h>
#endif /* __hpux */
#if defined(WIN32) || defined(__EMX__)
# include <io.h>
#else
# include <unistd.h>
# include <fcntl.h>
# include <termios.h>
# ifdef __linux
# include <sys/ioctl.h>
# endif /* __linux */
#endif /* WIN32 || __EMX__ */
#ifdef __sgi
@@ -64,14 +57,6 @@
# endif /* !INV_EPP_ECP_PLP */
#endif /* __sgi */
#ifndef CRTSCTS
# ifdef CNEW_RTSCTS
# define CRTSCTS CNEW_RTSCTS
# else
# define CRTSCTS 0
# endif /* CNEW_RTSCTS */
#endif /* !CRTSCTS */
/*
* Local functions...
@@ -107,8 +92,6 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
int wbytes; /* Number of bytes written */
size_t nbytes, /* Number of bytes read */
tbytes; /* Total number of 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 */
struct termios opts; /* Parallel port options */
@@ -203,9 +186,6 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
opts.c_lflag &= ~(ICANON | ECHO | ISIG); /* Raw mode */
bufsize = 480; /* 9600 baud / 10 bits/char / 2Hz */
dtrdsr = 0; /* No dtr/dsr flow control */
if (options != NULL)
while (*options)
{
@@ -245,8 +225,6 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
* Set the baud rate...
*/
bufsize = atoi(value) / 20;
#if B19200 == 19200
cfsetispeed(&opts, atoi(value));
cfsetospeed(&opts, atoi(value));
@@ -277,18 +255,6 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
cfsetispeed(&opts, B38400);
cfsetospeed(&opts, B38400);
break;
#ifdef B57600
case 57600 :
cfsetispeed(&opts, B57600);
cfsetospeed(&opts, B57600);
break;
#endif /* B57600 */
#ifdef B115200
case 115200 :
cfsetispeed(&opts, B115200);
cfsetospeed(&opts, B115200);
break;
#endif /* B115200 */
default :
fprintf(stderr, "WARNING: Unsupported baud rate %s!\n", value);
break;
@@ -335,36 +301,6 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
else if (strcasecmp(value, "none") == 0)
opts.c_cflag &= ~PARENB;
}
else if (strcasecmp(name, "flow") == 0)
{
/*
* Set flow control...
*/
if (strcasecmp(value, "none") == 0)
{
opts.c_iflag &= ~(IXON | IXOFF | IXANY);
opts.c_cflag &= ~CRTSCTS;
}
else if (strcasecmp(value, "soft") == 0)
{
opts.c_iflag |= IXON | IXOFF | IXANY;
opts.c_cflag &= ~CRTSCTS;
}
else if (strcasecmp(value, "hard") == 0 ||
strcasecmp(value, "rtscts") == 0)
{
opts.c_iflag &= ~(IXON | IXOFF | IXANY);
opts.c_cflag |= CRTSCTS;
}
else if (strcasecmp(value, "dtrdsr") == 0)
{
opts.c_iflag &= ~(IXON | IXOFF | IXANY);
opts.c_cflag &= ~CRTSCTS;
dtrdsr = 1;
}
}
}
tcsetattr(fd, TCSANOW, &opts);
@@ -391,9 +327,6 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
* Finally, send the print file...
*/
if (bufsize > sizeof(buffer))
bufsize = sizeof(buffer);
while (copies > 0)
{
copies --;
@@ -404,38 +337,8 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
rewind(fp);
}
if (dtrdsr)
{
/*
* Check the port and sleep until DSR is set...
*/
int status;
if (!ioctl(fd, TIOCMGET, &status))
if (!(status & TIOCM_DSR))
{
/*
* Wait for DSR to go high...
*/
fputs("DEBUG: DSR is low; waiting for device...\n", stderr);
do
{
sleep(1);
if (ioctl(fd, TIOCMGET, &status))
break;
}
while (!(status & TIOCM_DSR));
fputs("DEBUG: DSR is high; writing to device...\n", stderr);
}
}
tbytes = 0;
while ((nbytes = fread(buffer, 1, bufsize, fp)) > 0)
while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
{
/*
* Write the print data to the printer...
@@ -484,10 +387,8 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
void
list_devices(void)
{
#if defined(__hpux) || defined(__sgi) || defined(__sun)
static char *funky_hex = "0123456789abcdefghijklmnopqrstuvwxyz";
/* Funky hex numbering used for some devices */
#endif /* __hpux || __sgi || __sun */
#ifdef __linux
int i; /* Looping var */
@@ -495,7 +396,7 @@ list_devices(void)
char device[255]; /* Device filename */
for (i = 0; i < 100; i ++)
for (i = 0; i < 4; i ++)
{
sprintf(device, "/dev/ttyS%d", i);
if ((fd = open(device, O_WRONLY | O_NOCTTY | O_NDELAY)) >= 0)
@@ -616,13 +517,8 @@ list_devices(void)
{
sprintf(device, "/dev/cua/%c", 'a' + i);
if (access(device, 0) == 0)
#ifdef B115200
printf("serial serial:%s?baud=115200 \"Unknown\" \"Serial Port #%d\"\n",
device, i + 1);
#else
printf("serial serial:%s?baud=38400 \"Unknown\" \"Serial Port #%d\"\n",
device, i + 1);
#endif /* B115200 */
}
/*
@@ -718,7 +614,7 @@ list_devices(void)
printf("serial serial:%s?baud=38400 \"Unknown\" \"Serial Port #%d\"\n",
device, i + 1);
}
#elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__)
#elif defined(FreeBSD) || defined(OpenBSD) || defined(NetBSD)
int i, j; /* Looping vars */
int fd; /* File descriptor */
char device[255]; /* Device filename */
+1 -1
Ver Arquivo
@@ -137,7 +137,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
if ((hostaddr = gethostbyname(hostname)) == NULL)
{
fprintf(stderr, "ERROR: Unable to locate printer \'%s\' - %s\n",
fprintf(stderr, "ERROR: Unable to locate printer \'%s\' - %s",
hostname, strerror(errno));
return (1);
}
+5 -47
Ver Arquivo
@@ -262,35 +262,15 @@ list_devices(void)
int i; /* Looping var */
int fd; /* File descriptor */
char device[255]; /* Device filename */
FILE *probe; /* /proc/bus/usb/devices file */
FILE *probe; /* /proc/parport/n/autoprobe file */
char line[1024], /* Line from file */
*delim, /* Delimiter in file */
make[IPP_MAX_NAME], /* Make from file */
model[IPP_MAX_NAME]; /* Model from file */
/*
* First try opening one of the USB devices to load the driver
* module as needed...
*/
if ((fd = open("/dev/usb/lp0", O_WRONLY)) >= 0)
close(fd); /* 2.3.x and 2.4.x */
else if ((fd = open("/dev/usb/usblp0", O_WRONLY)) >= 0)
close(fd); /* Mandrake 7.x */
else if ((fd = open("/dev/usblp0", O_WRONLY)) >= 0)
close(fd); /* 2.2.x */
/*
* Then look at the device list for the USB bus...
*/
if ((probe = fopen("/proc/bus/usb/devices", "r")) != NULL)
{
/*
* Scan the device list...
*/
i = 0;
memset(make, 0, sizeof(make));
@@ -325,25 +305,15 @@ list_devices(void)
strncpy(model, line + 12, sizeof(model) - 1);
}
else if (strncmp(line, "I:", 2) == 0 &&
(strstr(line, "Driver=printer") != NULL ||
strstr(line, "Driver=usblp") != NULL) &&
strstr(line, "Driver=printer") != NULL &&
make[0] && model[0])
{
/*
* We were processing a printer device; send the info out...
*/
sprintf(device, "/dev/usb/lp%d", i);
if (access(device, 0))
{
sprintf(device, "/dev/usb/usblp%d", i);
if (access(device, 0))
sprintf(device, "/dev/usblp%d", i);
}
printf("direct usb:%s \"%s %s\" \"USB Printer #%d\"\n",
device, make, model, i + 1);
printf("direct usb:/dev/usb/lp%d \"%s %s\" \"USB Printer #%d\"\n",
i, make, model, i + 1);
i ++;
@@ -356,10 +326,6 @@ list_devices(void)
}
else
{
/*
* Just probe manually for USB devices...
*/
for (i = 0; i < 8; i ++)
{
sprintf(device, "/dev/usb/lp%d", i);
@@ -369,13 +335,6 @@ list_devices(void)
printf("direct usb:%s \"Unknown\" \"USB Printer #%d\"\n", device, i + 1);
}
sprintf(device, "/dev/usb/usblp%d", i);
if ((fd = open(device, O_WRONLY)) >= 0)
{
close(fd);
printf("direct usb:%s \"Unknown\" \"USB Printer #%d\"\n", device, i + 1);
}
sprintf(device, "/dev/usblp%d", i);
if ((fd = open(device, O_WRONLY)) >= 0)
{
@@ -388,12 +347,11 @@ list_devices(void)
#elif defined(__sun)
#elif defined(__hpux)
#elif defined(__osf)
#elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__)
#elif defined(FreeBSD) || defined(OpenBSD) || defined(NetBSD)
int i; /* Looping var */
int fd; /* File descriptor */
char device[255]; /* Device filename */
for (i = 0; i < 3; i ++)
{
sprintf(device, "/dev/ulpt%d", i);
+9 -24
Ver Arquivo
@@ -216,8 +216,7 @@ show_status(http_t *http, /* I - HTTP connection to server */
ipp_t *request, /* IPP Request */
*response, /* IPP Response */
*jobs; /* IPP Get Jobs response */
ipp_attribute_t *attr, /* Current attribute */
*jattr; /* Current job attribute */
ipp_attribute_t *attr; /* Current attribute */
cups_lang_t *language; /* Default language */
char *printer, /* Printer name */
*device; /* Device URI */
@@ -229,13 +228,6 @@ show_status(http_t *http, /* I - HTTP connection to server */
int match; /* Non-zero if this job matches */
char printer_uri[HTTP_MAX_URI];
/* Printer URI */
static const char *requested[] =
{ /* Requested attributes */
"printer-name",
"device-uri",
"printer-state",
"printer-is-accepting-jobs"
};
DEBUG_printf(("show_status(%08x, %08x)\n", http, dests));
@@ -258,15 +250,11 @@ show_status(http_t *http, /* I - HTTP connection to server */
language = cupsLangDefault();
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, cupsLangEncoding(language));
attr = 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);
ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
"requested-attributes", sizeof(requested) / sizeof(requested[0]),
NULL, requested);
attr = ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
/*
* Do the request and get back a response...
@@ -424,16 +412,13 @@ show_status(http_t *http, /* I - HTTP connection to server */
snprintf(printer_uri, sizeof(printer_uri),
"ipp://localhost/printers/%s", printer);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
"printer-uri", NULL, printer_uri);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
"requested-attributes", NULL, "job-id");
attr = ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
"printer-uri", NULL, printer_uri);
if ((jobs = cupsDoRequest(http, request, "/jobs/")) != NULL)
{
for (jattr = jobs->attrs; jattr != NULL; jattr = jattr->next)
if (jattr->name && strcmp(jattr->name, "job-id") == 0)
for (attr = jobs->attrs; attr != NULL; attr = attr->next)
if (strcmp(attr->name, "job-id") == 0)
jobcount ++;
ippDelete(jobs);
+7 -23
Ver Arquivo
@@ -65,13 +65,9 @@ main(int argc, /* I - Number of command-line arguments */
http_t *http; /* Connection to server */
const char *dest, /* Desired printer */
*user; /* Desired user */
char *instance; /* Printer instance */
int id, /* Desired job ID */
interval, /* Reporting interval */
longstatus; /* Show file details */
int num_dests; /* Number of destinations */
cups_dest_t *dests; /* Destinations */
/*
* Connect to the scheduler...
@@ -83,18 +79,12 @@ main(int argc, /* I - Number of command-line arguments */
* Check for command-line options...
*/
dest = NULL;
dest = cupsGetDefault();
user = NULL;
id = 0;
interval = 0;
longstatus = 0;
num_dests = cupsGetDests(&dests);
for (i = 0; i < num_dests; i ++)
if (dests[i].is_default)
dest = dests[i].name;
for (i = 1; i < argc; i ++)
if (argv[i][0] == '+')
interval = atoi(argv[i] + 1);
@@ -110,9 +100,6 @@ main(int argc, /* I - Number of command-line arguments */
i ++;
dest = argv[i];
}
if ((instance = strchr(dest, '/')) != NULL)
*instance = '\0';
break;
case 'l' : /* Long status */
@@ -121,8 +108,6 @@ main(int argc, /* I - Number of command-line arguments */
default :
fputs("Usage: lpq [-P dest] [-l] [+interval]\n", stderr);
httpClose(http);
cupsFreeDests(num_dests, dests);
return (1);
}
}
@@ -155,7 +140,6 @@ main(int argc, /* I - Number of command-line arguments */
* Close the connection to the server and return...
*/
cupsFreeDests(num_dests, dests);
httpClose(http);
return (0);
@@ -365,7 +349,7 @@ show_jobs(http_t *http, /* I - HTTP connection to server */
#ifdef __osf__
puts("Rank Owner Pri Job Files Total Size");
#else
puts("Rank Owner Job File(s) Total Size");
puts("Rank Owner Job Files Total Size");
#endif /* __osf__ */
jobcount ++;
@@ -378,7 +362,7 @@ show_jobs(http_t *http, /* I - HTTP connection to server */
strcpy(rankstr, "active");
else
{
snprintf(rankstr, sizeof(rankstr), "%d%s", rank, ranks[rank % 10]);
sprintf(rankstr, "%d%s", rank, ranks[rank % 10]);
rank ++;
}
@@ -395,15 +379,15 @@ show_jobs(http_t *http, /* I - HTTP connection to server */
namestr[sizeof(namestr) - 1] = '\0';
}
printf("%s: %-34.34s[job %d localhost]\n", jobuser, rankstr, jobid);
printf(" %-40.40s%d bytes\n", namestr, jobsize);
printf("%s: %-31s [job %d localhost]\n", jobuser, rankstr, jobid);
printf(" %-31.31s %d bytes\n", namestr, jobsize);
}
else
#ifdef __osf__
printf("%-6s %-10.10s %-4d %-10d %-27.27s %d bytes\n", rankstr, jobuser,
jobpriority, jobid, jobname, jobsize);
#else
printf("%-7s %-8.8s%-8d%-32.32s%d bytes\n", rankstr, jobuser,
printf("%-6s %-10.10s %-15d %-27.27s %d bytes\n", rankstr, jobuser,
jobid, jobname, jobsize);
#endif /* __osf */
@@ -468,7 +452,7 @@ show_printer(http_t *http, /* I - HTTP connection to server */
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
snprintf(uri, sizeof(uri), "ipp://localhost/printers/%s", dest);
sprintf(uri, "ipp://localhost/printers/%s", dest);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
"printer-uri", NULL, uri);
+8 -13
Ver Arquivo
@@ -123,17 +123,14 @@ main(int argc, /* I - Number of command-line arguments */
break;
case 'l' : /* Literal/raw */
num_options = cupsAddOption("raw", "", num_options, &options);
num_options = cupsParseOptions("raw", num_options, &options);
break;
case 'p' : /* Prettyprint */
num_options = cupsAddOption("prettyprint", "", num_options, &options);
num_options = cupsParseOptions("prettyprint", num_options, &options);
break;
case 'h' : /* Suppress burst page */
num_options = cupsAddOption("job-sheets", "none", num_options, &options);
break;
case 's' : /* Don't use symlinks */
break;
@@ -163,10 +160,9 @@ main(int argc, /* I - Number of command-line arguments */
if ((dest = cupsGetDest(printer, instance, num_dests, dests)) != NULL)
{
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);
num_options = cupsAddOption(dest->options[j].name,
dest->options[j].value,
num_options, &options);
}
break;
@@ -239,10 +235,9 @@ main(int argc, /* I - Number of command-line arguments */
printer = dests[j].name;
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);
num_options = cupsAddOption(dest->options[j].name,
dest->options[j].value,
num_options, &options);
break;
}
}
+1 -23
Ver Arquivo
@@ -50,14 +50,11 @@ main(int argc, /* I - Number of command-line arguments */
int i; /* Looping var */
int job_id; /* Job ID */
const char *dest; /* Destination printer */
char *instance; /* Pointer to instance name */
char uri[1024]; /* Printer or job URI */
ipp_t *request; /* IPP request */
ipp_t *response; /* IPP response */
ipp_op_t op; /* Operation */
cups_lang_t *language; /* Language */
int num_dests; /* Number of destinations */
cups_dest_t *dests; /* Destinations */
/*
@@ -66,16 +63,10 @@ main(int argc, /* I - Number of command-line arguments */
op = IPP_CANCEL_JOB;
job_id = 0;
dest = NULL;
dest = cupsGetDefault();
response = NULL;
http = NULL;
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...
*/
@@ -83,7 +74,6 @@ main(int argc, /* I - Number of command-line arguments */
if ((http = httpConnect(cupsServer(), ippPort())) == NULL)
{
fputs("lprm: Unable to contact server!\n", stderr);
cupsFreeDests(num_dests, dests);
return (1);
}
@@ -103,15 +93,10 @@ main(int argc, /* I - Number of command-line arguments */
i ++;
dest = argv[i];
}
if ((instance = strchr(dest, '/')) != NULL)
*instance = '\0';
break;
default :
fprintf(stderr, "lprm: Unknown option \'%c\'!\n", argv[i][1]);
cupsFreeDests(num_dests, dests);
httpClose(http);
return (1);
}
else
@@ -211,8 +196,6 @@ main(int argc, /* I - Number of command-line arguments */
else
{
fputs("lprm: Unable to cancel job(s)!\n", stderr);
cupsFreeDests(num_dests, dests);
httpClose(http);
return (1);
}
}
@@ -226,14 +209,9 @@ main(int argc, /* I - Number of command-line arguments */
if (!cupsCancelJob(dest, 0))
{
fputs("lprm: Unable to cancel job(s)!\n", stderr);
cupsFreeDests(num_dests, dests);
httpClose(http);
return (1);
}
cupsFreeDests(num_dests, dests);
httpClose(http);
return (0);
}
+49 -143
Ver Arquivo
@@ -263,12 +263,9 @@ do_am_class(http_t *http, /* I - HTTP connection */
}
name = cgiGetVariable("PRINTER_NAME");
if (isdigit(*name))
ptr = name;
else
for (ptr = name; *ptr; ptr ++)
if (!isalnum(*ptr) && *ptr != '_')
break;
for (ptr = name; *ptr; ptr ++)
if (!isalnum(*ptr) && *ptr != '_')
break;
if (*ptr || ptr == name)
{
@@ -486,8 +483,7 @@ do_am_printer(http_t *http, /* I - HTTP connection */
ipp_attribute_t *attr, /* Current attribute */
*last; /* Last attribute */
ipp_t *request, /* IPP request */
*response, /* IPP response */
*oldinfo; /* Old printer information */
*response; /* IPP response */
ipp_status_t status; /* Request status */
const char *var; /* CGI variable */
char uri[HTTP_MAX_URI], /* Device or printer URI */
@@ -511,52 +507,48 @@ do_am_printer(http_t *http, /* I - HTTP connection */
};
if (modify)
{
/*
* Build an IPP_GET_PRINTER_ATTRIBUTES request, which requires the
* following attributes:
*
* attributes-charset
* attributes-natural-language
* printer-uri
*/
request = ippNew();
request->request.op.operation_id = IPP_GET_PRINTER_ATTRIBUTES;
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);
snprintf(uri, sizeof(uri), "ipp://localhost/printers/%s",
cgiGetVariable("PRINTER_NAME"));
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
NULL, uri);
/*
* Do the request and get back a response...
*/
oldinfo = cupsDoRequest(http, request, "/");
}
else
oldinfo = NULL;
if ((name = cgiGetVariable("PRINTER_NAME")) == NULL)
if (cgiGetVariable("PRINTER_LOCATION") == NULL)
{
if (modify)
{
/*
* Update the location and description of an existing printer...
* Build an IPP_GET_PRINTER_ATTRIBUTES request, which requires the
* following attributes:
*
* attributes-charset
* attributes-natural-language
* printer-uri
*/
if (oldinfo)
ippSetCGIVars(oldinfo, NULL, NULL);
request = ippNew();
request->request.op.operation_id = IPP_GET_PRINTER_ATTRIBUTES;
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);
snprintf(uri, sizeof(uri), "ipp://localhost/printers/%s",
cgiGetVariable("PRINTER_NAME"));
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
NULL, uri);
/*
* Do the request and get back a response...
*/
if ((response = cupsDoRequest(http, request, "/")) != NULL)
{
ippSetCGIVars(response, NULL, NULL);
ippDelete(response);
}
/*
* Update the location and description of an existing printer...
*/
cgiCopyTemplateLang(stdout, TEMPLATES, "modify-printer.tmpl", getenv("LANG"));
}
@@ -569,18 +561,13 @@ do_am_printer(http_t *http, /* I - HTTP connection */
cgiCopyTemplateLang(stdout, TEMPLATES, "add-printer.tmpl", getenv("LANG"));
}
if (oldinfo)
ippDelete(oldinfo);
return;
}
if (isdigit(*name))
ptr = name;
else
for (ptr = name; *ptr; ptr ++)
if (!isalnum(*ptr) && *ptr != '_')
break;
name = cgiGetVariable("PRINTER_NAME");
for (ptr = name; *ptr; ptr ++)
if (!isalnum(*ptr) && *ptr != '_')
break;
if (*ptr || ptr == name)
{
@@ -629,32 +616,10 @@ do_am_printer(http_t *http, /* I - HTTP connection */
* Let the user choose...
*/
if (oldinfo &&
(attr = ippFindAttribute(oldinfo, "device-uri", IPP_TAG_URI)) != NULL)
{
strncpy(uri, attr->values[0].string.text, sizeof(uri) - 1);
uri[sizeof(uri) - 1] = '\0';
if ((uriptr = strchr(uri, ':')) != NULL && strncmp(uriptr, "://", 3) == 0)
*uriptr = '\0';
cgiSetVariable("CURRENT_DEVICE_URI", uri);
}
cgiCopyTemplateLang(stdout, TEMPLATES, "choose-device.tmpl", getenv("LANG"));
}
else if (strchr(var, '/') == NULL)
{
if (oldinfo &&
(attr = ippFindAttribute(oldinfo, "device-uri", IPP_TAG_URI)) != NULL)
{
/*
* Set the current device URI for the form to the old one...
*/
if (strncmp(attr->values[0].string.text, var, strlen(var)) == 0)
cgiSetVariable("DEVICE_URI", attr->values[0].string.text);
}
/*
* User needs to set the full URI...
*/
@@ -686,50 +651,6 @@ do_am_printer(http_t *http, /* I - HTTP connection */
}
else if ((var = cgiGetVariable("PPD_NAME")) == NULL)
{
if (modify)
{
/*
* Get the PPD file...
*/
FILE *fp; /* PPD file */
char filename[1024]; /* PPD filename */
ppd_file_t *ppd; /* PPD information */
char buffer[1024]; /* Buffer */
int bytes; /* Number of bytes */
snprintf(uri, sizeof(uri), "/printers/%s.ppd", name);
cupsTempFile(filename, sizeof(filename));
if (httpGet(http, uri))
httpGet(http, uri);
while (httpUpdate(http) == HTTP_CONTINUE);
if ((fp = fopen(filename, "w")) != NULL)
{
while ((bytes = httpRead(http, buffer, sizeof(buffer))) > 0)
fwrite(buffer, 1, bytes, fp);
fclose(fp);
if ((ppd = ppdOpenFile(filename)) != NULL)
{
if (ppd->manufacturer)
cgiSetVariable("CURRENT_MAKE", ppd->manufacturer);
if (ppd->nickname)
cgiSetVariable("CURRENT_MAKE_AND_MODEL", ppd->nickname);
ppdClose(ppd);
}
}
else
httpFlush(http);
unlink(filename);
}
/*
* Build a CUPS_GET_PPDS request, which requires the following
* attributes:
@@ -794,16 +715,7 @@ do_am_printer(http_t *http, /* I - HTTP connection */
ippDelete(response);
}
else
{
char message[1024];
snprintf(message, sizeof(message), "Unable to get list of printer drivers: %s",
ippErrorString(cupsLastError()));
cgiSetVariable("ERROR", message);
cgiCopyTemplateLang(stdout, TEMPLATES, "error.tmpl", getenv("LANG"));
}
}
else
{
@@ -847,8 +759,7 @@ do_am_printer(http_t *http, /* I - HTTP connection */
ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME, "ppd-name",
NULL, cgiGetVariable("PPD_NAME"));
strncpy(uri, cgiGetVariable("DEVICE_URI"), sizeof(uri) - 1);
uri[sizeof(uri) - 1] = '\0';
strcpy(uri, cgiGetVariable("DEVICE_URI"));
if (strncmp(uri, "serial:", 7) == 0)
{
/*
@@ -858,10 +769,9 @@ do_am_printer(http_t *http, /* I - HTTP connection */
if ((uriptr = strchr(uri, '?')) == NULL)
uriptr = uri + strlen(uri);
snprintf(uriptr, sizeof(uri) - (uriptr - uri),
"?baud=%s+bits=%s+parity=%s+flow=%s",
cgiGetVariable("BAUDRATE"), cgiGetVariable("BITS"),
cgiGetVariable("PARITY"), cgiGetVariable("FLOW"));
sprintf(uriptr, "?baud=%s+bits=%s+parity=%s+flow=%s",
cgiGetVariable("BAUDRATE"), cgiGetVariable("BITS"),
cgiGetVariable("PARITY"), cgiGetVariable("FLOW"));
}
ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_URI, "device-uri",
@@ -894,9 +804,6 @@ do_am_printer(http_t *http, /* I - HTTP connection */
else
cgiCopyTemplateLang(stdout, TEMPLATES, "printer-added.tmpl", getenv("LANG"));
}
if (oldinfo)
ippDelete(oldinfo);
}
@@ -1128,8 +1035,7 @@ do_config_printer(http_t *http, /* I - HTTP connection */
* Get default option name...
*/
strncpy(keyword, line + 8, sizeof(keyword) - 1);
keyword[sizeof(keyword) - 1] = '\0';
strcpy(keyword, line + 8);
for (keyptr = keyword; *keyptr; keyptr ++)
if (*keyptr == ':' || isspace(*keyptr))
-59
Ver Arquivo
@@ -46,7 +46,6 @@ main(int argc, /* I - Number of command-line arguments */
http_t *http; /* Connection to the server */
ipp_t *request, /* IPP request */
*response; /* IPP response */
ipp_attribute_t *attr; /* IPP attribute */
ipp_status_t status; /* Operation status... */
char uri[HTTP_MAX_URI];
/* Printer URI */
@@ -99,64 +98,6 @@ main(int argc, /* I - Number of command-line arguments */
if (op == NULL || strcasecmp(op, "print-test-page") != 0)
{
/*
* Get the default destination...
*/
request = ippNew();
request->request.op.operation_id = CUPS_GET_DEFAULT;
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);
if ((response = cupsDoRequest(http, request, "/")) != NULL)
{
if ((attr = ippFindAttribute(response, "printer-name", IPP_TAG_NAME)) != NULL)
cgiSetVariable("DEFAULT_NAME", attr->values[0].string.text);
if ((attr = ippFindAttribute(response, "printer-uri-supported", IPP_TAG_URI)) != NULL)
{
char method[HTTP_MAX_URI],
username[HTTP_MAX_URI],
hostname[HTTP_MAX_URI],
resource[HTTP_MAX_URI],
uri[HTTP_MAX_URI];
int port; /* URI data */
const char *server; /* Name of server */
/*
* Map localhost access to localhost...
*/
server = getenv("SERVER_NAME");
httpSeparate(attr->values[0].string.text, method, username,
hostname, &port, resource);
if (strcasecmp(hostname, server) == 0 &&
(strcmp(getenv("REMOTE_HOST"), "127.0.0.1") == 0 ||
strcmp(getenv("REMOTE_HOST"), "localhost") == 0 ||
strcmp(getenv("REMOTE_HOST"), server) == 0))
strcpy(hostname, "localhost");
/*
* Rewrite URI with HTTP address...
*/
snprintf(uri, sizeof(uri), "http://%s:%d%s", hostname, port,
resource);
cgiSetVariable("DEFAULT_URI", uri);
}
ippDelete(response);
}
/*
* Get the class info...
*/
+24 -34
Ver Arquivo
@@ -23,7 +23,6 @@
*
* Contents:
*
* ippGetTemplateDir() - Get the templates directory...
* ippSetServerVersion() - Set the server name and CUPS version...
* ippSetCGIVars() - Set CGI variables from an IPP response.
*/
@@ -97,12 +96,12 @@ ippSetCGIVars(ipp_t *response, /* I - Response data to be copied... */
resource[HTTP_MAX_URI],
uri[HTTP_MAX_URI];
int port; /* URI data */
const char *server; /* Name of server */
char server[1024]; /* Name of server */
ippSetServerVersion();
server = getenv("SERVER_NAME");
strcpy(server, cupsServer());
for (attr = response->attrs;
attr && attr->group_tag == IPP_TAG_OPERATION;
@@ -120,10 +119,6 @@ ippSetCGIVars(ipp_t *response, /* I - Response data to be copied... */
filter != NULL && filter->group_tag != IPP_TAG_ZERO;
filter = filter->next)
if (filter->name && strcmp(filter->name, filter_name) == 0 &&
(filter->value_tag == IPP_TAG_STRING ||
(filter->value_tag >= IPP_TAG_TEXTLANG &&
filter->value_tag <= IPP_TAG_MIMETYPE)) &&
filter->values[0].string.text != NULL &&
strcasecmp(filter->values[0].string.text, filter_value) == 0)
break;
@@ -197,38 +192,33 @@ ippSetCGIVars(ipp_t *response, /* I - Response data to be copied... */
break;
case IPP_TAG_URI :
if (strchr(attr->values[i].string.text, ':') != NULL)
{
httpSeparate(attr->values[i].string.text, method, username,
hostname, &port, resource);
httpSeparate(attr->values[i].string.text, method, username,
hostname, &port, resource);
if (strcmp(method, "ipp") == 0 ||
strcmp(method, "http") == 0)
{
/*
* Map localhost access to localhost...
*/
if (strcmp(method, "ipp") == 0 ||
strcmp(method, "http") == 0)
{
/*
* Map localhost access to localhost...
*/
if (strcasecmp(hostname, server) == 0 &&
(strcmp(getenv("REMOTE_HOST"), "127.0.0.1") == 0 ||
strcmp(getenv("REMOTE_HOST"), "localhost") == 0 ||
strcmp(getenv("REMOTE_HOST"), server) == 0))
strcpy(hostname, "localhost");
if (strcasecmp(hostname, server) == 0 &&
strcmp(getenv("REMOTE_ADDR"), "127.0.0.1") == 0)
strcpy(hostname, "localhost");
/*
* Rewrite URI with HTTP address...
*/
/*
* Rewrite URI with HTTP address...
*/
if (username[0])
snprintf(uri, sizeof(uri), "http://%s@%s:%d%s", username,
hostname, port, resource);
else
snprintf(uri, sizeof(uri), "http://%s:%d%s", hostname, port,
resource);
if (username[0])
snprintf(uri, sizeof(uri), "http://%s@%s:%d%s", username,
hostname, port, resource);
else
snprintf(uri, sizeof(uri), "http://%s:%d%s", hostname, port,
resource);
strcat(valptr, uri);
break;
}
strcat(valptr, uri);
break;
}
case IPP_TAG_STRING :
-59
Ver Arquivo
@@ -46,7 +46,6 @@ main(int argc, /* I - Number of command-line arguments */
http_t *http; /* Connection to the server */
ipp_t *request, /* IPP request */
*response; /* IPP response */
ipp_attribute_t *attr; /* IPP attribute */
ipp_status_t status; /* Operation status... */
char uri[HTTP_MAX_URI];
/* Printer URI */
@@ -99,64 +98,6 @@ main(int argc, /* I - Number of command-line arguments */
if (op == NULL || strcasecmp(op, "print-test-page") != 0)
{
/*
* Get the default destination...
*/
request = ippNew();
request->request.op.operation_id = CUPS_GET_DEFAULT;
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);
if ((response = cupsDoRequest(http, request, "/")) != NULL)
{
if ((attr = ippFindAttribute(response, "printer-name", IPP_TAG_NAME)) != NULL)
cgiSetVariable("DEFAULT_NAME", attr->values[0].string.text);
if ((attr = ippFindAttribute(response, "printer-uri-supported", IPP_TAG_URI)) != NULL)
{
char method[HTTP_MAX_URI],
username[HTTP_MAX_URI],
hostname[HTTP_MAX_URI],
resource[HTTP_MAX_URI],
uri[HTTP_MAX_URI];
int port; /* URI data */
const char *server; /* Name of server */
/*
* Map localhost access to localhost...
*/
server = getenv("SERVER_NAME");
httpSeparate(attr->values[0].string.text, method, username,
hostname, &port, resource);
if (strcasecmp(hostname, server) == 0 &&
(strcmp(getenv("REMOTE_HOST"), "127.0.0.1") == 0 ||
strcmp(getenv("REMOTE_HOST"), "localhost") == 0 ||
strcmp(getenv("REMOTE_HOST"), server) == 0))
strcpy(hostname, "localhost");
/*
* Rewrite URI with HTTP address...
*/
snprintf(uri, sizeof(uri), "http://%s:%d%s", hostname, port,
resource);
cgiSetVariable("DEFAULT_URI", uri);
}
ippDelete(response);
}
/*
* Get the printer info...
*/
+20 -64
Ver Arquivo
@@ -110,14 +110,14 @@ cgiCopyTemplateLang(FILE *out, /* I - Output file */
* See if we have a template file for this language...
*/
snprintf(filename, sizeof(filename), "%s/%s/%s", directory, locale, tmpl);
sprintf(filename, "%s/%s/%s", directory, locale, tmpl);
if (access(filename, 0))
{
locale[2] = '\0';
snprintf(filename, sizeof(filename), "%s/%s/%s", directory, locale, tmpl);
sprintf(filename, "%s/%s/%s", directory, locale, tmpl);
if (access(filename, 0))
snprintf(filename, sizeof(filename), "%s/%s", directory, tmpl);
sprintf(filename, "%s/%s", directory, tmpl);
}
/*
@@ -160,8 +160,7 @@ cgi_copy(FILE *out, /* I - Output file */
*s; /* String pointer */
const char *value; /* Value of variable */
const char *innerval; /* Inner value */
const char *outptr; /* Output string pointer */
char outval[1024], /* Formatted output string */
char outval[1024], /* Output string */
compare[1024]; /* Comparison string */
int result; /* Result of comparison */
@@ -180,7 +179,7 @@ cgi_copy(FILE *out, /* I - Output file */
*/
for (s = name; (ch = getc(in)) != EOF;)
if (strchr("}]<>=! \t\n", ch))
if (strchr("}]<>=!", ch))
break;
else if (s > name && ch == '?')
break;
@@ -189,17 +188,6 @@ cgi_copy(FILE *out, /* I - Output file */
*s = '\0';
if (s == name && isspace(ch))
{
if (out)
{
putc('{', out);
putc(ch, out);
}
continue;
}
/*
* See if it has a value...
*/
@@ -215,20 +203,14 @@ cgi_copy(FILE *out, /* I - Output file */
*nameptr++ = '\0';
if ((value = cgiGetArray(name + 1, atoi(nameptr) - 1)) != NULL)
outptr = value;
strcpy(outval, value);
else
{
outval[0] = '\0';
outptr = outval;
}
}
if ((value = cgiGetArray(name + 1, element)) != NULL)
outptr = value;
strcpy(outval, value);
else
{
outval[0] = '\0';
outptr = outval;
}
}
else if (name[0] == '#')
{
@@ -240,8 +222,6 @@ cgi_copy(FILE *out, /* I - Output file */
sprintf(outval, "%d", cgiGetSize(name + 1));
else
sprintf(outval, "%d", element + 1);
outptr = outval;
}
else if (name[0] == '[')
{
@@ -284,20 +264,14 @@ cgi_copy(FILE *out, /* I - Output file */
{
*nameptr++ = '\0';
if ((value = cgiGetArray(name, atoi(nameptr) - 1)) == NULL)
{
snprintf(outval, sizeof(outval), "{%s}", name);
outptr = outval;
}
sprintf(outval, "{%s}", name);
else
outptr = value;
strcpy(outval, value);
}
else if ((value = cgiGetArray(name, element)) == NULL)
{
snprintf(outval, sizeof(outval), "{%s}", name);
outptr = outval;
}
sprintf(outval, "{%s}", name);
else
outptr = value;
strcpy(outval, value);
}
/*
@@ -311,7 +285,7 @@ cgi_copy(FILE *out, /* I - Output file */
*/
if (out)
cgi_puts(outptr, out);
cgi_puts(outval, out);
continue;
}
@@ -345,8 +319,6 @@ cgi_copy(FILE *out, /* I - Output file */
for (s = compare; (ch = getc(in)) != EOF;)
if (ch == '?')
break;
else if (s >= (compare + sizeof(compare) - 1))
continue;
else if (ch == '#')
{
sprintf(s, "%d", element + 1);
@@ -373,28 +345,19 @@ cgi_copy(FILE *out, /* I - Output file */
if ((innerval = cgiGetArray(innername, atoi(innerptr) - 1)) == NULL)
*s = '\0';
else
{
strncpy(s, innerval, sizeof(compare) - (s - compare) - 1);
compare[sizeof(compare) - 1] = '\0';
}
strcpy(s, innerval);
}
else if (innername[0] == '?')
{
if ((innerval = cgiGetArray(innername + 1, element)) == NULL)
*s = '\0';
else
{
strncpy(s, innerval, sizeof(compare) - (s - compare) - 1);
compare[sizeof(compare) - 1] = '\0';
}
strcpy(s, innerval);
}
else if ((innerval = cgiGetArray(innername, element)) == NULL)
snprintf(s, sizeof(s), "{%s}", innername);
sprintf(s, "{%s}", innername);
else
{
strncpy(s, innerval, sizeof(compare) - (s - compare) - 1);
compare[sizeof(compare) - 1] = '\0';
}
strcpy(s, innerval);
s += strlen(s);
}
@@ -415,16 +378,16 @@ cgi_copy(FILE *out, /* I - Output file */
switch (op)
{
case '<' :
result = strcasecmp(outptr, compare) < 0;
result = strcasecmp(outval, compare) < 0;
break;
case '>' :
result = strcasecmp(outptr, compare) > 0;
result = strcasecmp(outval, compare) > 0;
break;
case '=' :
result = strcasecmp(outptr, compare) == 0;
result = strcasecmp(outval, compare) == 0;
break;
case '!' :
result = strcasecmp(outptr, compare) != 0;
result = strcasecmp(outval, compare) != 0;
break;
default :
result = 1;
@@ -460,13 +423,6 @@ cgi_copy(FILE *out, /* I - Output file */
}
else if (out)
putc(ch, out);
/*
* Flush any pending output...
*/
if (out)
fflush(out);
}
+1 -2
Ver Arquivo
@@ -611,8 +611,7 @@ cgi_initialize_string(const char *data) /* I - Form data string */
if ((s = strrchr(name, '-')) != NULL && isdigit(s[1]))
{
*s++ = '\0';
if (value[0])
cgiSetArray(name, atoi(s) - 1, value);
cgiSetArray(name, atoi(s) - 1, value);
}
else if (cgiGetVariable(name) != NULL)
cgiSetArray(name, cgiGetSize(name), value);
+7 -22
Ver Arquivo
@@ -1,5 +1,5 @@
#
# "$Id: client.conf 1485 2000-12-20 13:41:17Z mike $"
# "$Id: client.conf 969 2000-03-10 16:56:46Z mike $"
#
# Sample client configuration file for the Common UNIX Printing System
# (CUPS).
@@ -27,39 +27,24 @@
# #
# This is the CUPS client configuration file. This file is used to #
# define client-specific parameters, such as the default server or #
# default encryption settings. #
# default printer. #
# #
########################################################################
#
# ServerName: the hostname of your server. By default CUPS will use the
# hostname of the system or the value of the CUPS_SERVER environment
# variable.
# hostname of the system.
#
#ServerName myhost.domain.com
#
# Encryption: whether or not to use encryption; this depends on having
# the OpenSSL library linked into the CUPS library.
#
# Possible values:
#
# Always - Always use encryption (SSL)
# Never - Never use encryption
# Required - Use TLS encryption upgrade
# IfRequested - Use encryption if the server requests it
#
# The default value is "IfRequested". This parameter can also be set
# using the CUPS_ENCRYPTION environment variable.
# DefaultPrinter: the default printer (or class) that clients should use.
#
#Encryption Always
#Encryption Never
#Encryption Required
#Encryption IfRequested
#DefaultPrinter myprinter
#DefaultPrinter myprinter@host
#
# End of "$Id: client.conf 1485 2000-12-20 13:41:17Z mike $".
# End of "$Id: client.conf 969 2000-03-10 16:56:46Z mike $".
#
+21 -107
Ver Arquivo
@@ -1,5 +1,5 @@
#
# "$Id: cupsd.conf 1485 2000-12-20 13:41:17Z mike $"
# "$Id: cupsd.conf 1171 2000-06-27 21:15:41Z mike $"
#
# Sample configuration file for the Common UNIX Printing System (CUPS)
# scheduler.
@@ -111,19 +111,11 @@
#ErrorLog /var/log/cups/error_log
#
# FontPath: the path to locate all font files (currently only for pstoraster)
# By default /usr/share/cups/fonts.
#
#FontPath /usr/share/cups/fonts
#
# LogLevel: controls the number of messages logged to the ErrorLog
# file and can be one of the following:
#
# debug2 Log everything.
# debug Log almost everything.
# debug Log everything.
# info Log all requests and state changes.
# warn Log errors and warnings.
# error Log only errors.
@@ -165,21 +157,7 @@ LogLevel info
#PreserveJobFiles No
#
# AutoPurgeJobs: automatically purge jobs when not needed for quotas.
# Default is No.
#
#AutoPurgeJobs No
#
# MaxJobs: maximum number of jobs to keep in memory (active and completed.)
# Default is 0 (no limit.)
#
#MaxJobs 0
#
# Printcap: the name of the printcap file. Default is /etc/printcap.
# Printcap: the name of the printcap file. Default is no filename.
# Leave blank to disable printcap file generation.
#
@@ -192,13 +170,6 @@ LogLevel info
#RequestRoot /var/spool/cups
#
# RemoteRoot: the name of the user assigned to unauthenticated accesses
# from remote systems. By default "remroot".
#
#RemoteRoot remroot
#
# ServerBin: the root directory for the scheduler executables.
# By default /usr/lib/cups or /usr/lib32/cups (IRIX 6.5).
@@ -214,25 +185,6 @@ LogLevel info
#ServerRoot /etc/cups
########
######## Encryption Support
########
#
# ServerCertificate: the file to read containing the server's certificate.
# Defaults to "/etc/cups/ssl/server.crt".
#
#ServerCertificate /etc/cups/ssl/server.crt
#
# ServerKey: the file to read containing the server's key.
# Defaults to "/etc/cups/ssl/server.key".
#
#ServerKey /etc/cups/ssl/server.key
########
######## Filter Options
########
@@ -261,22 +213,12 @@ LogLevel info
#
# TempDir: the directory to put temporary files in. This directory must be
# writable by the user defined above! Defaults to "/var/spool/cups/tmp" or
# the value of the TMPDIR environment variable.
# writable by the user defined above! Defaults to "/var/tmp" or the value
# of the TMPDIR environment variable.
#
#TempDir /var/spool/cups/tmp
#TempDir /var/tmp
#
# FilterLimit: sets the maximum cost of all job filters that can be run
# at the same time. A limit of 0 means no limit. A typical job may need
# a filter limit of at least 200; limits less than the minimum required
# by a job force a single job to be printed at any time.
#
# The default limit is 0 (unlimited).
#
#FilterLimit 0
########
######## Network Options
@@ -297,13 +239,8 @@ LogLevel info
# Listen 1.2.3.4
# Listen 1.2.3.4:631
#
# NOTE: Unfortunately, most web browsers don't support TLS or HTTP Upgrades
# for encryption. If you want to support web-based encryption you'll
# probably need to listen on port 443 (the "https" port...)
#
#Port 80
#Port 443
Port 631
#
@@ -353,30 +290,12 @@ Port 631
########
#
# Browsing: whether or not to broadcast and/or listen for CUPS printer
# information on the network. Enabled by default.
# Browsing: whether or not to broadcast printer information to
# other CUPS servers. Enabled by default.
#
#Browsing On
#
# BrowseAddress: specifies a broadcast address to be used. By
# default browsing information is not sent!
#
# Note: HP-UX does not properly handle broadcast unless you have a
# Class A, B, C, or D netmask (i.e. no CIDR support).
#
# Note: Using the "global" broadcast address (255.255.255.255) will
# activate a Linux demand-dial link with the default configuration.
# If you have a LAN as well as the dial-up link, use the LAN's
# broadcast address.
#
#BrowseAddress x.y.z.255
#BrowseAddress x.y.255.255
#BrowseAddress x.255.255.255
#BrowseAddress 255.255.255.255
#
# BrowseShortNames: whether or not to use "short" names for remote printers
# when possible (e.g. "printer" instead of "printer@host".) Enabled by
@@ -385,6 +304,18 @@ Port 631
#BrowseShortNames Yes
#
# BrowseAddress: specifies a broadcast address to be used. By
# default browsing information is broadcast to all active interfaces.
#
# Note: HP-UX 10.20 and earlier do not properly handle broadcast unless
# you have a Class A, B, C, or D netmask (i.e. no CIDR support).
#
#BrowseAddress x.y.z.255
#BrowseAddress x.y.255.255
#BrowseAddress x.255.255.255
#
# BrowseAllow: specifies an address mask to allow for incoming browser
# packets. The default is to allow packets from all addresses.
@@ -541,23 +472,8 @@ Port 631
# The host and domain address require that you enable hostname lookups
# with "HostNameLookups On" above.
#
# Encryption: whether or not to use encryption; this depends on having
# the OpenSSL library linked into the CUPS library and scheduler.
#
# Possible values:
#
# Always - Always use encryption (SSL)
# Never - Never use encryption
# Required - Use TLS encryption upgrade
# IfRequested - Use encryption if the server requests it
#
# The default value is "IfRequested".
#
<Location />
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
</Location>
#<Location /classes>
@@ -619,10 +535,8 @@ AuthClass System
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
#Encryption Required
</Location>
#
# End of "$Id: cupsd.conf 1485 2000-12-20 13:41:17Z mike $".
# End of "$Id: cupsd.conf 1171 2000-06-27 21:15:41Z mike $".
#
+13 -27
Ver Arquivo
@@ -1,5 +1,5 @@
#
# "$Id: mime.convs 1340 2000-09-06 13:53:00Z mike $"
# "$Id: mime.convs 1019 2000-04-18 19:41:12Z mike $"
#
# MIME converts file for the Common UNIX Printing System (CUPS).
#
@@ -41,38 +41,24 @@
# PostScript filters
#
#application/msword application/postscript 33 mswordtops
application/pdf application/postscript 33 pdftops
application/postscript application/vnd.cups-postscript 66 pstops
application/vnd.hp-HPGL application/postscript 66 hpgltops
image/* application/vnd.cups-postscript 66 imagetops
#text/html application/postscript 33 htmltops
application/x-cshell application/postscript 33 texttops
application/x-perl application/postscript 33 texttops
application/x-shell application/postscript 33 texttops
text/html application/postscript 33 texttops
text/plain application/postscript 33 texttops
application/vnd.cups-form application/vnd.cups-postscript 33 formtops
#application/msword application/postscript 50 mswordtops
application/pdf application/postscript 50 pdftops
application/postscript application/vnd.cups-postscript 50 pstops
application/vnd.hp-HPGL application/postscript 50 hpgltops
image/* application/vnd.cups-postscript 50 imagetops
#text/html application/postscript 50 htmltops
text/html application/postscript 50 texttops
text/plain application/postscript 50 texttops
application/vnd.cups-form application/vnd.cups-postscript 50 formtops
########################################################################
#
# Raster filters...
#
image/* application/vnd.cups-raster 100 imagetoraster
application/vnd.cups-postscript application/vnd.cups-raster 100 pstoraster
########################################################################
#
# Raw filter...
#
# Uncomment the following filter and the application/octet-stream type
# in mime.types to allow printing of arbitrary files without the -oraw
# option.
#
#*/* application/vnd.cups-raw 0 -
image/* application/vnd.cups-raster 50 imagetoraster
application/vnd.cups-postscript application/vnd.cups-raster 50 pstoraster
#
# End of "$Id: mime.convs 1340 2000-09-06 13:53:00Z mike $".
# End of "$Id: mime.convs 1019 2000-04-18 19:41:12Z mike $".
#
+4 -26
Ver Arquivo
@@ -1,5 +1,5 @@
#
# "$Id: mime.types 1430 2000-11-06 16:39:17Z mike $"
# "$Id: mime.types 1152 2000-06-22 18:25:29Z mike $"
#
# MIME types file for the Common UNIX Printing System (CUPS).
#
@@ -110,13 +110,6 @@ image/x-bitmap bmp string(0,BM) && !printable(2,14)
text/html html htm printable(0,1024) +\
(string(0,"<HTML>") string(0,"<!DOCTYPE"))
application/x-cshell csh printable(0,1024) + string(0,#!) +\
(contains(2,80,/csh) contains(2,80,/tcsh))
application/x-perl pl printable(0,1024) + string(0,#!) +\
contains(2,80,/perl)
application/x-shell sh printable(0,1024) + string(0,#!) +\
(contains(2,80,/bash) contains(2,80,/ksh)\
contains(2,80,/sh) contains(2,80,/zsh))
text/plain txt printable(0,1024)
########################################################################
@@ -125,25 +118,10 @@ text/plain txt printable(0,1024)
#
application/vnd.cups-form string(0,"<CUPSFORM>")
application/vnd.cups-postscript string(0,<1B>%-12345X) + \
contains(9,512,"LANGUAGE=POSTSCRIPT")
application/vnd.cups-postscript string(0,<1B>%-12345X)
application/vnd.cups-raster string(0,"RaSt") string(0,"tSaR")
application/vnd.cups-raw string(0,<1B>E) \
string(0,<1B>@) \
(string(0,<1B>%-12345X) + \
contains(9,512,"LANGUAGE=PCL"))
########################################################################
#
# Raw print file support...
#
# Uncomment the following type and the application/octet-stream
# filter line in mime.convs to allow raw file printing without the
# -oraw option.
#
#application/octet-stream
application/vnd.cups-raw
#
# End of "$Id: mime.types 1430 2000-11-06 16:39:17Z mike $".
# End of "$Id: mime.types 1152 2000-06-22 18:25:29Z mike $".
#
+1 -16
Ver Arquivo
@@ -28,7 +28,7 @@
* Version of software...
*/
#define CUPS_SVERSION "CUPS v1.1.4"
#define CUPS_SVERSION "CUPS v1.1"
/*
* Where are files stored?
@@ -41,7 +41,6 @@
#define CUPS_REQUESTS "/var/spool/cups"
#define CUPS_LOGDIR "/var/logs/cups"
#define CUPS_DATADIR "/usr/share/cups"
#define CUPS_FONTPATH "/usr/share/cups/fonts"
/*
@@ -123,20 +122,6 @@
#undef HAVE_WAITPID
#undef HAVE_WAIT3
/*
* Do we have the mallinfo function and malloc.h?
*/
#undef HAVE_MALLINFO
#undef HAVE_MALLOC_H
/*
* Do we have the OpenSSL library?
*/
#undef HAVE_LIBSSL
/*
* End of "$Id$".
*/
+12 -114
Ver Arquivo
@@ -47,7 +47,6 @@ AC_ARG_ENABLE(debug, [ --enable-debug turn on debugging [default=no]],[i
OPTIM="-g "
fi])
AC_ARG_ENABLE(shared, [ --enable-shared turn on shared libraries [default=yes]])
AC_ARG_ENABLE(ssl, [ --enable-ssl turn on SSL/TLS support [default=no]])
AC_ARG_ENABLE(libtool_unsupported, [ --enable-libtool-unsupported=LIBTOOL_PATH
turn on building with libtool (UNSUPPORTED!) [default=no]],[if eval "test x$enable_libtool_unsupported != xno"; then
LIBTOOL="$enable_libtool_unsupported"
@@ -114,8 +113,6 @@ fi
AC_ARG_ENABLE(pam, [ --enable-pam turn on PAM support [default=yes]])
AC_ARG_WITH(fontpath, [ --with-fontpath set font path for pstoraster],fontpath="$withval",fontpath="")
dnl Checks for programs...
AC_PROG_AWK
AC_PROG_CC
@@ -124,7 +121,6 @@ AC_PROG_CPP
AC_PROG_RANLIB
AC_PATH_PROG(AR,ar)
AC_PATH_PROG(CHMOD,chmod)
AC_PATH_PROG(CHOWN,chown)
AC_PATH_PROG(CP,cp)
AC_PATH_PROG(MV,mv)
AC_PATH_PROG(NROFF,nroff)
@@ -145,23 +141,9 @@ dnl Architecture checks...
AC_C_BIGENDIAN
dnl Check for libraries...
AC_CHECK_LIB(c,crypt,LIBS="$LIBS")
if test "$ac_cv_lib_c_crypt" = "no"; then
AC_CHECK_LIB(crypt,crypt)
fi
AC_CHECK_LIB(c,crypt,LIBS="$LIBS",AC_CHECK_LIB(crypt,crypt))
AC_CHECK_HEADER(crypt.h, AC_DEFINE(HAVE_CRYPT_H))
AC_CHECK_LIB(sec,getspent)
LIBMALLOC=""
AC_CHECK_LIB(c,mallinfo,LIBS="$LIBS"; AC_DEFINE(HAVE_MALLINFO),LIBS="$LIBS")
if test "$ac_cv_lib_c_mallinfo" = "no"; then
AC_CHECK_LIB(malloc,mallinfo,
LIBS="$LIBS"
LIBMALLOC="-lmalloc"
AC_DEFINE(HAVE_MALLINFO),
LIBS="$LIBS")
fi
AC_SUBST(LIBMALLOC)
if test "$enable_pam" != "no"; then
OLDLIBS="$LIBS"
AC_CHECK_LIB(dl,dlopen)
@@ -190,18 +172,6 @@ else
echo "Not using -lnsl since you are running IRIX."
fi)
dnl Encryption support...
SSLLIBS=""
AC_SUBST(SSLLIBS)
if test "$enable_ssl" = "yes"; then
AC_CHECK_LIB(ssl,SSL_new,
SSLLIBS="-lssl -lcrypto"
AC_DEFINE(HAVE_LIBSSL)
)
fi
dnl Save the current libraries since we don't want the image libraries
dnl included with every program...
SAVELIBS="$LIBS"
@@ -244,11 +214,7 @@ LIBS="$SAVELIBS"
dnl Checks for header files.
AC_HEADER_STDC
AC_HEADER_DIRENT
AC_CHECK_HEADER(crypt.h,AC_DEFINE(HAVE_CRYPT_H))
AC_CHECK_HEADER(malloc.h,AC_DEFINE(HAVE_MALLOC_H))
AC_CHECK_HEADER(shadow.h,AC_DEFINE(HAVE_SHADOW_H))
AC_CHECK_HEADER(stddef.h,AC_DEFINE(HAVE_STDDEF_H))
AC_CHECK_HEADER(stdlib.h,AC_DEFINE(HAVE_STDLIB_H))
dnl Checks for string functions.
AC_CHECK_FUNCS(strdup)
@@ -273,8 +239,6 @@ AC_CHECK_FUNCS(wait3)
dnl Update compiler options...
if test -n "$GCC"; then
GXX="gcc"
if test -z "$OPTIM"; then
OPTIM="-O2 -g3"
fi
@@ -286,7 +250,7 @@ else
case $uname in
IRIX*)
if test -z "$OPTIM"; then
OPTIM="-O2"
OPTIM="-O2 -g3"
fi
if test $uversion -ge 62; then
OPTIM="$OPTIM -n32 -mips3"
@@ -302,7 +266,7 @@ else
SunOS*)
# Solaris
if test -z "$OPTIM"; then
OPTIM="-xO4"
OPTIM="-O -g3"
fi
if test $PICFLAG = 1; then
OPTIM="-KPIC $OPTIM"
@@ -364,12 +328,8 @@ if test "$prefix" = "NONE"; then
fi
dnl Fix "exec_prefix" variable if it hasn't been specified...
if test "$exec_prefix" = "NONE"; then
if test "$prefix" = "/"; then
exec_prefix="/usr"
else
exec_prefix="$prefix"
fi
if test "$exec_prefix" = "NONE" -a "$prefix" = "/"; then
exec_prefix="/usr"
fi
dnl Fix "sharedstatedir" variable if it hasn't been specified...
@@ -383,12 +343,8 @@ if test "$infodir" = "\${prefix}/info" -a "$prefix" = "/"; then
fi
dnl Fix "datadir" variable if it hasn't been specified...
if test "$datadir" = "\${prefix}/share"; then
if test "$prefix" = "/"; then
datadir="/usr/share"
else
datadir="$prefix/share"
fi
if test "$datadir" = "\${prefix}/share" -a "$prefix" = "/"; then
datadir="/usr/share"
fi
dnl Fix "includedir" variable if it hasn't been specified...
@@ -397,21 +353,13 @@ if test "$includedir" = "\${prefix}/include" -a "$prefix" = "/"; then
fi
dnl Fix "localstatedir" variable if it hasn't been specified...
if test "$localstatedir" = "\${prefix}/var"; then
if test "$prefix" = "/"; then
localstatedir="/var"
else
localstatedir="$prefix/var"
fi
if test "$localstatedir" = "\${prefix}/var" -a "$prefix" = "/"; then
localstatedir="/var"
fi
dnl Fix "sysconfdir" variable if it hasn't been specified...
if test "$sysconfdir" = "\${prefix}/etc"; then
if test "$prefix" = "/"; then
sysconfdir="/etc"
else
sysconfdir="$prefix/etc"
fi
if test "$sysconfdir" = "\${prefix}/etc" -a "$prefix" = "/"; then
sysconfdir="/etc"
fi
dnl Fix "libdir" variable for IRIX 6.x...
@@ -428,11 +376,6 @@ if test "$mandir" = "\${prefix}/man" -a "$prefix" = "/"; then
fi
fi
dnl Fix "fontpath" variable...
if test "x$fontpath" = "x"; then
fontpath="$datadir/cups/fonts"
fi
dnl Setup manpage extensions...
case "$uname" in
FreeBSD* | NetBSD* | OpenBSD*)
@@ -459,48 +402,6 @@ AC_SUBST(CAT1EXT)
AC_SUBST(CAT5EXT)
AC_SUBST(CAT8EXT)
dnl Setup init.d locations...
case "$uname" in
FreeBSD* | NetBSD* | OpenBSD*)
# *BSD
INITDIR=""
INITDDIR=""
;;
Linux*)
# Linux seems to choose an init.d directory at random...
if test -d /sbin/init.d; then
# SuSE
INITDIR="/sbin/init.d"
INITDDIR=".."
else
if test -d /etc/rc.d; then
# RedHat
INITDIR="/etc/rc.d"
INITDDIR="../init.d"
else
# Others
INITDIR="/etc"
INITDDIR="../init.d"
fi
fi
;;
OSF1* | HP-UX*)
INITDIR="/sbin"
INITDDIR="../init.d"
;;
*)
INITDIR="/etc"
INITDDIR="../init.d"
;;
esac
AC_SUBST(INITDIR)
AC_SUBST(INITDDIR)
dnl Setup default locations...
CUPS_SERVERROOT='${prefix}/etc/cups'
CUPS_LOGDIR='${prefix}/var/log/cups'
@@ -563,9 +464,6 @@ CUPS_DOCROOT='${exec_prefix}/share/doc/cups'
AC_DEFINE_UNQUOTED(CUPS_DOCROOT, "$exec_prefix/share/doc/cups")
AC_SUBST(CUPS_DOCROOT)
dnl Set the CUPS_FONTPATH directory...
AC_DEFINE_UNQUOTED(CUPS_FONTPATH, "$fontpath")
AC_OUTPUT(Makedefs cups.sh)
dnl
+211 -25
Ver Arquivo
@@ -1,5 +1,5 @@
#
# "$Id: cups.list 1471 2000-12-11 04:40:31Z mike $"
# "$Id: cups.list 1202 2000-07-07 21:25:17Z mike $"
#
# ESP Package Manager (EPM) file list for the Common UNIX Printing
# System (CUPS).
@@ -23,16 +23,14 @@
# WWW: http://www.cups.org
#
# Product information
%product Common UNIX Printing System
%copyright 1993-2000 by Easy Software Products, All Rights Reserved.
%vendor Easy Software Products
%license LICENSE.txt
%readme README.txt
%version 1.1.5
%version 1.1
%incompat printpro
# Server programs
%system all
# Server files
f 0555 root sys $SBINDIR/cupsd scheduler/cupsd
@@ -113,8 +111,7 @@ l 0555 root sys $LIBDIR/libcupsimage.so libcupsimage.so.2
# Directories
d 0755 root sys $LOGDIR -
d 0700 lp sys $REQUESTS -
d 1700 lp sys $REQUESTS/tmp -
d 0755 root sys $REQUESTS -
# Data files
f 0444 root sys $LOCALEDIR/C/cups_C locale/C/cups_C
@@ -164,34 +161,159 @@ f 0444 root sys $DATADIR/data/psglyphs data/psglyphs
f 0444 root sys $DATADIR/data/testprint.ps data/testprint.ps
d 0555 root sys $DATADIR/fonts -
f 0444 root sys $DATADIR/fonts fonts/*
f 0444 root sys $DATADIR/fonts/AvantGarde-Book fonts/AvantGarde-Book
f 0444 root sys $DATADIR/fonts/AvantGarde-BookOblique fonts/AvantGarde-BookOblique
f 0444 root sys $DATADIR/fonts/AvantGarde-Demi fonts/AvantGarde-Demi
f 0444 root sys $DATADIR/fonts/AvantGarde-DemiOblique fonts/AvantGarde-DemiOblique
f 0444 root sys $DATADIR/fonts/Bookman-Demi fonts/Bookman-Demi
f 0444 root sys $DATADIR/fonts/Bookman-DemiItalic fonts/Bookman-DemiItalic
f 0444 root sys $DATADIR/fonts/Bookman-Light fonts/Bookman-Light
f 0444 root sys $DATADIR/fonts/Bookman-LightItalic fonts/Bookman-LightItalic
f 0444 root sys $DATADIR/fonts/Charter-Bold fonts/Charter-Bold
f 0444 root sys $DATADIR/fonts/Charter-BoldItalic fonts/Charter-BoldItalic
f 0444 root sys $DATADIR/fonts/Charter-Italic fonts/Charter-Italic
f 0444 root sys $DATADIR/fonts/Charter-Roman fonts/Charter-Roman
f 0444 root sys $DATADIR/fonts/Courier fonts/Courier
f 0444 root sys $DATADIR/fonts/Courier-Bold fonts/Courier-Bold
f 0444 root sys $DATADIR/fonts/Courier-BoldOblique fonts/Courier-BoldOblique
f 0444 root sys $DATADIR/fonts/Courier-Oblique fonts/Courier-Oblique
f 0444 root sys $DATADIR/fonts/Helvetica fonts/Helvetica
f 0444 root sys $DATADIR/fonts/Helvetica-Bold fonts/Helvetica-Bold
f 0444 root sys $DATADIR/fonts/Helvetica-BoldOblique fonts/Helvetica-BoldOblique
f 0444 root sys $DATADIR/fonts/Helvetica-Narrow fonts/Helvetica-Narrow
f 0444 root sys $DATADIR/fonts/Helvetica-Narrow-Bold fonts/Helvetica-Narrow-Bold
f 0444 root sys $DATADIR/fonts/Helvetica-Narrow-BoldOblique fonts/Helvetica-Narrow-BoldOblique
f 0444 root sys $DATADIR/fonts/Helvetica-Narrow-Oblique fonts/Helvetica-Narrow-Oblique
f 0444 root sys $DATADIR/fonts/Helvetica-Oblique fonts/Helvetica-Oblique
f 0444 root sys $DATADIR/fonts/NewCenturySchlbk-Bold fonts/NewCenturySchlbk-Bold
f 0444 root sys $DATADIR/fonts/NewCenturySchlbk-BoldItalic fonts/NewCenturySchlbk-BoldItalic
f 0444 root sys $DATADIR/fonts/NewCenturySchlbk-Italic fonts/NewCenturySchlbk-Italic
f 0444 root sys $DATADIR/fonts/NewCenturySchlbk-Roman fonts/NewCenturySchlbk-Roman
f 0444 root sys $DATADIR/fonts/Palatino-Bold fonts/Palatino-Bold
f 0444 root sys $DATADIR/fonts/Palatino-BoldItalic fonts/Palatino-BoldItalic
f 0444 root sys $DATADIR/fonts/Palatino-Italic fonts/Palatino-Italic
f 0444 root sys $DATADIR/fonts/Palatino-Roman fonts/Palatino-Roman
f 0444 root sys $DATADIR/fonts/Symbol fonts/Symbol
f 0444 root sys $DATADIR/fonts/Times-Bold fonts/Times-Bold
f 0444 root sys $DATADIR/fonts/Times-BoldItalic fonts/Times-BoldItalic
f 0444 root sys $DATADIR/fonts/Times-Italic fonts/Times-Italic
f 0444 root sys $DATADIR/fonts/Times-Roman fonts/Times-Roman
f 0444 root sys $DATADIR/fonts/Utopia-Bold fonts/Utopia-Bold
f 0444 root sys $DATADIR/fonts/Utopia-BoldItalic fonts/Utopia-BoldItalic
f 0444 root sys $DATADIR/fonts/Utopia-Italic fonts/Utopia-Italic
f 0444 root sys $DATADIR/fonts/Utopia-Regular fonts/Utopia-Regular
f 0444 root sys $DATADIR/fonts/ZapfChancery-MediumItalic fonts/ZapfChancery-MediumItalic
f 0444 root sys $DATADIR/fonts/ZapfDingbats fonts/ZapfDingbats
d 0555 root sys $DATADIR/pstoraster -
f 0444 root sys $DATADIR/pstoraster/Fontmap pstoraster/Fontmap
f 0444 root sys $DATADIR/pstoraster pstoraster/gs*.ps
f 0444 root sys $DATADIR/pstoraster/gs_btokn.ps pstoraster/gs_btokn.ps
f 0444 root sys $DATADIR/pstoraster/gs_ccfnt.ps pstoraster/gs_ccfnt.ps
f 0444 root sys $DATADIR/pstoraster/gs_cff.ps pstoraster/gs_cff.ps
f 0444 root sys $DATADIR/pstoraster/gs_cidfn.ps pstoraster/gs_cidfn.ps
f 0444 root sys $DATADIR/pstoraster/gs_cmap.ps pstoraster/gs_cmap.ps
f 0444 root sys $DATADIR/pstoraster/gs_cmdl.ps pstoraster/gs_cmdl.ps
f 0444 root sys $DATADIR/pstoraster/gs_dbt_e.ps pstoraster/gs_dbt_e.ps
f 0444 root sys $DATADIR/pstoraster/gs_diskf.ps pstoraster/gs_diskf.ps
f 0444 root sys $DATADIR/pstoraster/gs_dpnxt.ps pstoraster/gs_dpnxt.ps
f 0444 root sys $DATADIR/pstoraster/gs_dps.ps pstoraster/gs_dps.ps
f 0444 root sys $DATADIR/pstoraster/gs_dps1.ps pstoraster/gs_dps1.ps
f 0444 root sys $DATADIR/pstoraster/gs_dps2.ps pstoraster/gs_dps2.ps
f 0444 root sys $DATADIR/pstoraster/gs_epsf.ps pstoraster/gs_epsf.ps
f 0444 root sys $DATADIR/pstoraster/gs_fform.ps pstoraster/gs_fform.ps
f 0444 root sys $DATADIR/pstoraster/gs_fonts.ps pstoraster/gs_fonts.ps
f 0444 root sys $DATADIR/pstoraster/gs_init.ps pstoraster/gs_init.ps
f 0444 root sys $DATADIR/pstoraster/gs_iso_e.ps pstoraster/gs_iso_e.ps
f 0444 root sys $DATADIR/pstoraster/gs_kanji.ps pstoraster/gs_kanji.ps
f 0444 root sys $DATADIR/pstoraster/gs_ksb_e.ps pstoraster/gs_ksb_e.ps
f 0444 root sys $DATADIR/pstoraster/gs_lev2.ps pstoraster/gs_lev2.ps
f 0444 root sys $DATADIR/pstoraster/gs_ll3.ps pstoraster/gs_ll3.ps
f 0444 root sys $DATADIR/pstoraster/gs_mex_e.ps pstoraster/gs_mex_e.ps
f 0444 root sys $DATADIR/pstoraster/gs_mro_e.ps pstoraster/gs_mro_e.ps
f 0444 root sys $DATADIR/pstoraster/gs_pfile.ps pstoraster/gs_pfile.ps
f 0444 root sys $DATADIR/pstoraster/gs_res.ps pstoraster/gs_res.ps
f 0444 root sys $DATADIR/pstoraster/gs_setpd.ps pstoraster/gs_setpd.ps
f 0444 root sys $DATADIR/pstoraster/gs_statd.ps pstoraster/gs_statd.ps
f 0444 root sys $DATADIR/pstoraster/gs_std_e.ps pstoraster/gs_std_e.ps
f 0444 root sys $DATADIR/pstoraster/gs_sym_e.ps pstoraster/gs_sym_e.ps
f 0444 root sys $DATADIR/pstoraster/gs_ttf.ps pstoraster/gs_ttf.ps
f 0444 root sys $DATADIR/pstoraster/gs_typ32.ps pstoraster/gs_typ32.ps
f 0444 root sys $DATADIR/pstoraster/gs_typ42.ps pstoraster/gs_typ42.ps
f 0444 root sys $DATADIR/pstoraster/gs_type1.ps pstoraster/gs_type1.ps
f 0444 root sys $DATADIR/pstoraster/gs_wan_e.ps pstoraster/gs_wan_e.ps
f 0444 root sys $DATADIR/pstoraster/gs_wl1_e.ps pstoraster/gs_wl1_e.ps
f 0444 root sys $DATADIR/pstoraster/gs_wl2_e.ps pstoraster/gs_wl2_e.ps
f 0444 root sys $DATADIR/pstoraster/gs_wl5_e.ps pstoraster/gs_wl5_e.ps
d 0555 root sys $DATADIR/model -
f 0444 root sys $DATADIR/model ppd/*.ppd
f 0444 root sys $DATADIR/model/deskjet.ppd ppd/deskjet.ppd
f 0444 root sys $DATADIR/model/laserjet.ppd ppd/laserjet.ppd
f 0444 root sys $DATADIR/model/epson9.ppd ppd/epson9.ppd
f 0444 root sys $DATADIR/model/epson24.ppd ppd/epson24.ppd
f 0444 root sys $DATADIR/model/stcolor.ppd ppd/stcolor.ppd
f 0444 root sys $DATADIR/model/stphoto.ppd ppd/stphoto.ppd
d 0555 root sys $DATADIR/templates -
f 0444 root sys $DATADIR/templates templates/*.tmpl
f 0444 root sys $DATADIR/templates/add-class.tmpl templates/add-class.tmpl
f 0444 root sys $DATADIR/templates/add-printer.tmpl templates/add-printer.tmpl
f 0444 root sys $DATADIR/templates/admin-op.tmpl templates/admin-op.tmpl
f 0444 root sys $DATADIR/templates/admin.tmpl templates/admin.tmpl
f 0444 root sys $DATADIR/templates/choose-device.tmpl templates/choose-device.tmpl
f 0444 root sys $DATADIR/templates/choose-make.tmpl templates/choose-make.tmpl
f 0444 root sys $DATADIR/templates/choose-members.tmpl templates/choose-members.tmpl
f 0444 root sys $DATADIR/templates/choose-model.tmpl templates/choose-model.tmpl
f 0444 root sys $DATADIR/templates/choose-serial.tmpl templates/choose-serial.tmpl
f 0444 root sys $DATADIR/templates/choose-uri.tmpl templates/choose-uri.tmpl
f 0444 root sys $DATADIR/templates/class-added.tmpl templates/class-added.tmpl
f 0444 root sys $DATADIR/templates/class-confirm.tmpl templates/class-confirm.tmpl
f 0444 root sys $DATADIR/templates/class-deleted.tmpl templates/class-deleted.tmpl
f 0444 root sys $DATADIR/templates/class-modified.tmpl templates/class-modified.tmpl
f 0444 root sys $DATADIR/templates/classes.tmpl templates/classes.tmpl
f 0444 root sys $DATADIR/templates/config-printer.tmpl templates/config-printer.tmpl
f 0444 root sys $DATADIR/templates/config-printer2.tmpl templates/config-printer2.tmpl
f 0444 root sys $DATADIR/templates/error.tmpl templates/error.tmpl
f 0444 root sys $DATADIR/templates/header.tmpl templates/header.tmpl
f 0444 root sys $DATADIR/templates/job-cancel.tmpl templates/job-cancel.tmpl
f 0444 root sys $DATADIR/templates/job-hold.tmpl templates/job-hold.tmpl
f 0444 root sys $DATADIR/templates/job-release.tmpl templates/job-release.tmpl
f 0444 root sys $DATADIR/templates/job-restart.tmpl templates/job-restart.tmpl
f 0444 root sys $DATADIR/templates/jobs.tmpl templates/jobs.tmpl
f 0444 root sys $DATADIR/templates/modify-class.tmpl templates/modify-class.tmpl
f 0444 root sys $DATADIR/templates/modify-printer.tmpl templates/modify-printer.tmpl
f 0444 root sys $DATADIR/templates/option-boolean.tmpl templates/option-boolean.tmpl
f 0444 root sys $DATADIR/templates/option-header.tmpl templates/option-header.tmpl
f 0444 root sys $DATADIR/templates/option-pickmany.tmpl templates/option-pickmany.tmpl
f 0444 root sys $DATADIR/templates/option-pickone.tmpl templates/option-pickone.tmpl
f 0444 root sys $DATADIR/templates/option-trailer.tmpl templates/option-trailer.tmpl
f 0444 root sys $DATADIR/templates/printer-accept.tmpl templates/printer-accept.tmpl
f 0444 root sys $DATADIR/templates/printer-added.tmpl templates/printer-added.tmpl
f 0444 root sys $DATADIR/templates/printer-configured.tmpl templates/printer-configured.tmpl
f 0444 root sys $DATADIR/templates/printer-confirm.tmpl templates/printer-confirm.tmpl
f 0444 root sys $DATADIR/templates/printer-deleted.tmpl templates/printer-deleted.tmpl
f 0444 root sys $DATADIR/templates/printer-modified.tmpl templates/printer-modified.tmpl
f 0444 root sys $DATADIR/templates/printer-reject.tmpl templates/printer-reject.tmpl
f 0444 root sys $DATADIR/templates/printer-start.tmpl templates/printer-start.tmpl
f 0444 root sys $DATADIR/templates/printer-stop.tmpl templates/printer-stop.tmpl
f 0444 root sys $DATADIR/templates/printers.tmpl templates/printers.tmpl
f 0444 root sys $DATADIR/templates/test-page.tmpl templates/test-page.tmpl
f 0444 root sys $DATADIR/templates/trailer.tmpl templates/trailer.tmpl
# Config files
d 0555 root sys $SERVERROOT -
d 0711 root sys $SERVERROOT/certs -
d 0755 root sys $SERVERROOT/interfaces -
d 0755 root sys $SERVERROOT/ppd -
c 0644 root sys $SERVERROOT conf/*.conf
c 0644 root sys $SERVERROOT/classes.conf conf/classes.conf
c 0644 root sys $SERVERROOT/cupsd.conf conf/cupsd.conf
f 0644 root sys $SERVERROOT/mime.convs conf/mime.convs
f 0644 root sys $SERVERROOT/mime.types conf/mime.types
c 0644 root sys $SERVERROOT/printers.conf conf/printers.conf
%system linux
# Linux version needs PAM...
%requires /lib/libpam.so.0
d 0555 root sys $PAMDIR -
c 0644 root sys $PAMDIR/cups data/cups.pam
c 0644 root sys $PAMDIR/cups.suse data/cups.suse
%install if test -f /lib/security/pam_unix.so; then
%install mv $PAMDIR/cups.suse $PAMDIR/cups
%install fi
%system all
# Developer files
@@ -210,10 +332,74 @@ f 0444 root sys $LIBDIR/libcups.a cups/libcups.a
# Documentation files
d 0555 root sys $DOCDIR -
f 0444 root sys $DOCDIR/cups.css doc/cups.css
f 0444 root sys $DOCDIR doc/*.html
f 0444 root sys $DOCDIR doc/*.pdf
f 0444 root sys $DOCDIR/documentation.html doc/documentation.html
f 0444 root sys $DOCDIR/index.html doc/index.html
d 0555 root sys $DOCDIR/images -
f 0444 root sys $DOCDIR/images doc/images/*.gif
f 0444 root sys $DOCDIR/images/classes.gif doc/images/classes.gif
f 0444 root sys $DOCDIR/images/printer-idle.gif doc/images/printer-idle.gif
f 0444 root sys $DOCDIR/images/printer-processing.gif doc/images/printer-processing.gif
f 0444 root sys $DOCDIR/images/printer-stopped.gif doc/images/printer-stopped.gif
f 0444 root sys $DOCDIR/images/accept-jobs.gif doc/images/accept-jobs.gif
f 0444 root sys $DOCDIR/images/add-class.gif doc/images/add-class.gif
f 0444 root sys $DOCDIR/images/add-printer.gif doc/images/add-printer.gif
f 0444 root sys $DOCDIR/images/cancel-job.gif doc/images/cancel-job.gif
f 0444 root sys $DOCDIR/images/cancel-jobs.gif doc/images/cancel-jobs.gif
f 0444 root sys $DOCDIR/images/cancel.gif doc/images/cancel.gif
f 0444 root sys $DOCDIR/images/continue.gif doc/images/continue.gif
f 0444 root sys $DOCDIR/images/config-printer.gif doc/images/config-printer.gif
f 0444 root sys $DOCDIR/images/cups-block-diagram.gif doc/images/cups-block-diagram.gif
f 0444 root sys $DOCDIR/images/delete-class.gif doc/images/delete-class.gif
f 0444 root sys $DOCDIR/images/delete-printer.gif doc/images/delete-printer.gif
f 0444 root sys $DOCDIR/images/hold-job.gif doc/images/hold-job.gif
f 0444 root sys $DOCDIR/images/left.gif doc/images/left.gif
f 0444 root sys $DOCDIR/images/logo.gif doc/images/logo.gif
f 0444 root sys $DOCDIR/images/manage-classes.gif doc/images/manage-classes.gif
f 0444 root sys $DOCDIR/images/manage-jobs.gif doc/images/manage-jobs.gif
f 0444 root sys $DOCDIR/images/manage-printers.gif doc/images/manage-printers.gif
f 0444 root sys $DOCDIR/images/modify-class.gif doc/images/modify-class.gif
f 0444 root sys $DOCDIR/images/modify-printer.gif doc/images/modify-printer.gif
f 0444 root sys $DOCDIR/images/navbar.gif doc/images/navbar.gif
f 0444 root sys $DOCDIR/images/print-test-page.gif doc/images/print-test-page.gif
f 0444 root sys $DOCDIR/images/reject-jobs.gif doc/images/reject-jobs.gif
f 0444 root sys $DOCDIR/images/release-job.gif doc/images/release-job.gif
f 0444 root sys $DOCDIR/images/restart-job.gif doc/images/restart-job.gif
f 0444 root sys $DOCDIR/images/right.gif doc/images/right.gif
f 0444 root sys $DOCDIR/images/show-active.gif doc/images/show-active.gif
f 0444 root sys $DOCDIR/images/show-completed.gif doc/images/show-completed.gif
f 0444 root sys $DOCDIR/images/start-class.gif doc/images/start-class.gif
f 0444 root sys $DOCDIR/images/start-printer.gif doc/images/start-printer.gif
f 0444 root sys $DOCDIR/images/stop-class.gif doc/images/stop-class.gif
f 0444 root sys $DOCDIR/images/stop-printer.gif doc/images/stop-printer.gif
f 0444 root sys $DOCDIR/cmp.html doc/cmp.html
f 0444 root sys $DOCDIR/cmp.pdf doc/cmp.pdf
f 0444 root sys $DOCDIR/cupsdoc.css doc/cupsdoc.css
f 0444 root sys $DOCDIR/idd.html doc/idd.html
f 0444 root sys $DOCDIR/idd.pdf doc/idd.pdf
f 0444 root sys $DOCDIR/ipp.html doc/ipp.html
f 0444 root sys $DOCDIR/ipp.pdf doc/ipp.pdf
f 0444 root sys $DOCDIR/overview.html doc/overview.html
f 0444 root sys $DOCDIR/overview.pdf doc/overview.pdf
f 0444 root sys $DOCDIR/sam.html doc/sam.html
f 0444 root sys $DOCDIR/sam.pdf doc/sam.pdf
f 0444 root sys $DOCDIR/sdd.html doc/sdd.html
f 0444 root sys $DOCDIR/sdd.pdf doc/sdd.pdf
f 0444 root sys $DOCDIR/spm.html doc/spm.html
f 0444 root sys $DOCDIR/spm.pdf doc/spm.pdf
f 0444 root sys $DOCDIR/ssr.html doc/ssr.html
f 0444 root sys $DOCDIR/ssr.pdf doc/ssr.pdf
f 0444 root sys $DOCDIR/sum.html doc/sum.html
f 0444 root sys $DOCDIR/sum.pdf doc/sum.pdf
f 0444 root sys $DOCDIR/svd.html doc/svd.html
f 0444 root sys $DOCDIR/svd.pdf doc/svd.pdf
f 0444 root sys $DOCDIR/images/cups-bar.gif doc/images/cups-bar.gif
f 0444 root sys $DOCDIR/images/cups-large.gif doc/images/cups-large.gif
f 0444 root sys $DOCDIR/images/cups-medium.gif doc/images/cups-medium.gif
f 0444 root sys $DOCDIR/images/cups-small.gif doc/images/cups-small.gif
# Man pages
%system irix
@@ -255,7 +441,7 @@ d 0555 root sys $MANDIR/man5 -
d 0555 root sys $MANDIR/man1m -
f 0444 root sys $MANDIR/man1m/accept.1m man/accept.man
l 0444 root sys $MANDIR/man1m/reject.1m accept.1m
l 0444 root sys $MANDIR/man1m/reject.1m accept.man
f 0444 root sys $MANDIR/man1/backend.1 man/backend.man
f 0444 root sys $MANDIR/man1/classes.conf.5 man/classes.conf.man
f 0444 root sys $MANDIR/man1m/cups-lpd.1m man/cups-lpd.man
@@ -263,7 +449,7 @@ f 0444 root sys $MANDIR/man1m/cups-polld.1m man/cups-polld.man
f 0444 root sys $MANDIR/man1m/cupsd.1m man/cupsd.man
f 0444 root sys $MANDIR/man5/cupsd.conf.5 man/cupsd.conf.man
f 0444 root sys $MANDIR/man1m/enable.1m man/enable.man
l 0444 root sys $MANDIR/man1m/disable.1m enable.1m
l 0444 root sys $MANDIR/man1m/disable.1m enable.man
f 0444 root sys $MANDIR/man1/filter.1 man/filter.man
f 0444 root sys $MANDIR/man1m/lpadmin.1m man/lpadmin.man
f 0444 root sys $MANDIR/man1m/lpc.1m man/lpc.man
@@ -275,7 +461,7 @@ f 0444 root sys $MANDIR/man1/lprm.1 man/lprm.man
f 0444 root sys $MANDIR/man1/lpr.1 man/lpr.man
f 0444 root sys $MANDIR/man1/lpstat.1 man/lpstat.man
f 0444 root sys $MANDIR/man1/lp.1 man/lp.man
l 0444 root sys $MANDIR/man1/cancel.1 lp.1
l 0444 root sys $MANDIR/man1/cancel.1 lp.man
f 0444 root sys $MANDIR/man5/mime.convs.5 man/mime.convs.man
f 0444 root sys $MANDIR/man5/mime.types.5 man/mime.types.man
f 0444 root sys $MANDIR/man5/printers.conf.5 man/printers.conf.man
@@ -286,7 +472,7 @@ d 0555 root sys $MANDIR/man5 -
d 0555 root sys $MANDIR/man8 -
f 0444 root sys $MANDIR/man8/accept.8 man/accept.man
l 0444 root sys $MANDIR/man8/reject.8 accept.8
l 0444 root sys $MANDIR/man8/reject.8 accept.man
f 0444 root sys $MANDIR/man1/backend.1 man/backend.man
f 0444 root sys $MANDIR/man1/classes.conf.5 man/classes.conf.man
f 0444 root sys $MANDIR/man8/cups-lpd.8 man/cups-lpd.man
@@ -294,7 +480,7 @@ f 0444 root sys $MANDIR/man8/cups-polld.8 man/cups-polld.man
f 0444 root sys $MANDIR/man8/cupsd.8 man/cupsd.man
f 0444 root sys $MANDIR/man5/cupsd.conf.5 man/cupsd.conf.man
f 0444 root sys $MANDIR/man8/enable.8 man/enable.man
l 0444 root sys $MANDIR/man8/disable.8 enable.8
l 0444 root sys $MANDIR/man8/disable.8 enable.man
f 0444 root sys $MANDIR/man1/filter.1 man/filter.man
f 0444 root sys $MANDIR/man8/lpadmin.8 man/lpadmin.man
f 0444 root sys $MANDIR/man8/lpc.8 man/lpc.man
@@ -306,7 +492,7 @@ f 0444 root sys $MANDIR/man1/lprm.1 man/lprm.man
f 0444 root sys $MANDIR/man1/lpr.1 man/lpr.man
f 0444 root sys $MANDIR/man1/lpstat.1 man/lpstat.man
f 0444 root sys $MANDIR/man1/lp.1 man/lp.man
l 0444 root sys $MANDIR/man1/cancel.1 lp.1
l 0444 root sys $MANDIR/man1/cancel.1 lp.man
f 0444 root sys $MANDIR/man5/mime.convs.5 man/mime.convs.man
f 0444 root sys $MANDIR/man5/mime.types.5 man/mime.types.man
f 0444 root sys $MANDIR/man5/printers.conf.5 man/printers.conf.man
@@ -316,5 +502,5 @@ f 0444 root sys $MANDIR/man5/printers.conf.5 man/printers.conf.man
i 0555 root sys cups cups.sh
#
# End of "$Id: cups.list 1471 2000-12-11 04:40:31Z mike $".
# End of "$Id: cups.list 1202 2000-07-07 21:25:17Z mike $".
#
+1 -1
Ver Arquivo
@@ -6,7 +6,7 @@
#
# Linux chkconfig stuff:
#
# chkconfig: 0235 99 00
# chkconfig: 02 99 00
# description: Startup/shutdown script for the Common UNIX \
# Printing System (CUPS).
#
+24 -87
Ver Arquivo
@@ -1,5 +1,5 @@
#
# "$Id: cups.spec 1421 2000-10-19 20:55:06Z mike $"
# "$Id: cups.spec 1214 2000-07-10 20:58:19Z mike $"
#
# RPM "spec" file for the Common UNIX Printing System (CUPS).
#
@@ -26,16 +26,16 @@
Summary: Common Unix Printing System
Name: cups
Version: 1.1.5
Version: 1.1
Release: 0
Copyright: GPL
Group: System Environment/Daemons
Source: ftp://ftp.easysw.com/pub/cups/%{version}/cups-%{version}-source.tar.gz
Source: ftp://ftp.easysw.com/pub/cups/1.1/cups-1.1-source.tar.gz
Url: http://www.cups.org
Packager: Michael Sweet <mike@easysw.com>
Vendor: Easy Software Products
# use buildroot so as not to disturb the version already installed
BuildRoot: /var/tmp/%{name}-root
BuildRoot: /tmp/rpmbuild
Conflicts: lpr
%package devel
@@ -67,110 +67,47 @@ make
# RPM_BUILD_ROOT exists
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/etc/rc.d/init.d
mkdir -p $RPM_BUILD_ROOT/etc/rc.d/rc0.d
mkdir -p $RPM_BUILD_ROOT/etc/rc.d/rc3.d
mkdir -p $RPM_BUILD_ROOT/etc/rc.d/rc5.d
make prefix=$RPM_BUILD_ROOT \
make datadir=$RPM_BUILD_ROOT/usr/share \
exec_prefix=$RPM_BUILD_ROOT/usr \
BINDIR=$RPM_BUILD_ROOT/usr/bin \
DATADIR=$RPM_BUILD_ROOT/usr/share/cups \
DOCDIR=$RPM_BUILD_ROOT/usr/share/doc/cups \
INCLUDEDIR=$RPM_BUILD_ROOT/usr/include \
LIBDIR=$RPM_BUILD_ROOT/usr/lib \
LOCALEDIR=$RPM_BUILD_ROOT/usr/share/locale \
MANDIR=$RPM_BUILD_ROOT/usr/man \
PAMDIR=$RPM_BUILD_ROOT/etc/pam.d \
REQUESTS=$RPM_BUILD_ROOT/var/spool/cups \
SBINDIR=$RPM_BUILD_ROOT/usr/sbin \
SERVERBIN=$RPM_BUILD_ROOT/usr/lib/cups \
SERVERROOT=$RPM_BUILD_ROOT/etc/cups \
includedir=$RPM_BUILD_ROOT/usr/include \
infodir=$RPM_BUILD_ROOT/usr/info \
libdir=$RPM_BUILD_ROOT/usr/lib \
localestatedir=$RPM_BUILD_ROOT/var \
prefix=$RPM_BUILD_ROOT \
sharedstatedir=$RPM_BUILD_ROOT/usr/com \
sysconfdir=$RPM_BUILD_ROOT/etc \
install
%post
if test -x /sbin/chkconfig; then
/sbin/chkconfig --add cups
/sbin/chkconfig cups on
fi
install -m 755 -o root -g root cups.sh $RPM_BUILD_ROOT/etc/rc.d/init.d/cups
if test -f /sbin/init.d/cups; then
/sbin/init.d/cups start
fi
if test -f /etc/rc.d/init.d/cups; then
/etc/rc.d/init.d/cups start
fi
if test -f /etc/init.d/cups; then
/etc/init.d/cups start
fi
%post
/sbin/chkconfig --add cups
/sbin/chkconfig cups on
/etc/rc.d/init.d/cups start
%preun
if test -f /sbin/init.d/cups; then
/sbin/init.d/cups stop
fi
if test -f /etc/rc.d/init.d/cups; then
/etc/rc.d/init.d/cups stop
fi
if test -f /etc/init.d/cups; then
/etc/init.d/cups stop
fi
if test -x /sbin/chkconfig; then
/sbin/chkconfig --del cups
fi
/etc/rc.d/init.d/cups stop
/sbin/chkconfig --del cups
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root)
%dir /etc/cups
%config /etc/cups/*.conf
%dir /etc/cups/certs
%dir /etc/cups/interfaces
/etc/cups/mime.types
/etc/cups/mime.convs
%dir /etc/cups/ppd
%dir /etc/pam.d
/etc/pam.d/*
# RC dirs are a pain under Linux... Uncomment the appropriate ones if you
# don't use Red Hat or Mandrake...
/etc/rc.d/init.d/*
/etc/rc.d/rc0.d/*
/etc/rc.d/rc3.d/*
/etc/rc.d/rc5.d/*
#/etc/init.d/*
#/etc/rc0.d/*
#/etc/rc3.d/*
#/etc/rc5.d/*
#/sbin/rc.d/*
#/sbin/rc.d/rc0.d/*
#/sbin/rc.d/rc3.d/*
#/sbin/rc.d/rc5.d/*
/etc/*
/usr/bin/*
/usr/lib/*.so*
%dir /usr/lib/cups
/usr/lib/cups/*
/usr/man/*
/usr/sbin/*
%dir /usr/share/cups
/usr/share/cups/*
%dir /usr/share/doc/cups
/usr/share/doc/cups/*
%dir /usr/share/locale
/usr/share/locale/*
%attr(0700,lp,root) %dir /var/spool/cups
%attr(1700,lp,root) %dir /var/spool/cups/tmp
/usr/share/*
/usr/lib/cups/*
/var/*
%files devel
%dir /usr/include/cups
/usr/include/cups/*
/usr/lib/*.a
#
# End of "$Id: cups.spec 1421 2000-10-19 20:55:06Z mike $".
# End of "$Id: cups.spec 1214 2000-07-10 20:58:19Z mike $".
#
+4 -4
Ver Arquivo
@@ -59,7 +59,7 @@ all: $(TARGETS)
#
clean:
$(RM) $(OBJS) $(TARGETS) `basename $(LIBCUPS) .2`
$(RM) $(OBJS) $(TARGETS)
#
@@ -76,8 +76,8 @@ install: all
$(INSTALL_LIB) $(LIBCUPS) $(LIBDIR)
if test $(LIBCUPS) != "libcups.a" -a $(LIBCUPS) != "libcups.la"; then \
$(INSTALL_LIB) libcups.a $(LIBDIR); \
$(RM) $(LIBDIR)/`basename $(LIBCUPS) .2`; \
$(LN) $(LIBCUPS) $(LIBDIR)/`basename $(LIBCUPS) .2`; \
$(RM) `basename $(LIBCUPS) .2`; \
$(LN) $(LIBCUPS) `basename $(LIBCUPS) .2`; \
fi
@@ -87,7 +87,7 @@ install: all
libcups.so.2 libcups.sl.2: $(LIBOBJS) ../Makedefs
echo Linking $@...
$(DSO) $@ $(LIBOBJS) $(SSLLIBS)
$(DSO) $@ $(LIBOBJS)
$(RM) `basename $@ .2`
$(LN) $@ `basename $@ .2`
+3 -11
Ver Arquivo
@@ -29,8 +29,8 @@
* Include necessary headers...
*/
# include "ipp.h"
# include "ppd.h"
# include <cups/ipp.h>
# include <cups/ppd.h>
/*
@@ -46,7 +46,7 @@ extern "C" {
* Constants...
*/
# define CUPS_VERSION 1.0103
# define CUPS_VERSION 1.0100
# define CUPS_DATE_ANY -1
@@ -75,7 +75,6 @@ enum /* Not a typedef'd enum so we can OR */
CUPS_PRINTER_LARGE = 0x4000, /* Can do D/E/A1/A0 */
CUPS_PRINTER_VARIABLE = 0x8000, /* Can do variable sizes */
CUPS_PRINTER_IMPLICIT = 0x10000, /* Implicit class */
CUPS_PRINTER_DEFAULT = 0x20000, /* Default printer on network */
CUPS_PRINTER_OPTIONS = 0xfffc /* ~(CLASS | REMOTE | IMPLICIT) */
};
@@ -103,7 +102,6 @@ extern int cupsCancelJob(const char *printer, int job);
#define cupsDoRequest(http,request,resource) cupsDoFileRequest((http),(request),(resource),NULL)
extern ipp_t *cupsDoFileRequest(http_t *http, ipp_t *request,
const char *resource, const char *filename);
extern http_encryption_t cupsEncryption(void);
extern int cupsGetClasses(char ***classes);
extern const char *cupsGetDefault(void);
extern const char *cupsGetPPD(const char *printer);
@@ -127,8 +125,6 @@ extern void cupsSetDests(int num_dests, cups_dest_t *dests);
extern int cupsAddOption(const char *name, const char *value,
int num_options, cups_option_t **options);
extern void cupsEncodeOptions(ipp_t *ipp, int num_options,
cups_option_t *options);
extern void cupsFreeOptions(int num_options, cups_option_t *options);
extern const char *cupsGetOption(const char *name, int num_options,
cups_option_t *options);
@@ -139,10 +135,6 @@ extern int cupsMarkOptions(ppd_file_t *ppd, int num_options,
extern const char *cupsGetPassword(const char *prompt);
extern const char *cupsServer(void);
extern void cupsSetEncryption(http_encryption_t e);
extern void cupsSetPasswordCB(const char *(*cb)(const char *));
extern void cupsSetServer(const char *server);
extern void cupsSetUser(const char *user);
extern const char *cupsUser(void);
# ifdef __cplusplus
-1
Ver Arquivo
@@ -124,7 +124,6 @@
"The request is too large for this server to process.",
"The request URI is too large for this server to process.",
"The request format is not understood by this server.",
"426 An upgrade to a secure connection is required. If you are seeing this message in a web browser then it does not support HTTP encryption upgrades.",
"500 The server has detected an unrecoverable error and cannot process your request.",
"The requested method is not implemented by this server.",
"The proxy server received an invalid response from an upstream server.",
+8 -17
Ver Arquivo
@@ -87,8 +87,9 @@ cupsAddDest(const char *name, /* I - Name of destination */
for (i = num_dests; i > 0; i --, dest ++)
if (strcasecmp(name, dest->name) < 0)
break;
else if (strcasecmp(name, dest->name) == 0 &&
instance != NULL && dest->instance != NULL &&
else if (instance == NULL && dest->instance != NULL)
break;
else if (instance != NULL && dest->instance != NULL &&
strcasecmp(instance, dest->instance) < 0)
break;
@@ -304,10 +305,10 @@ cupsSetDests(int num_dests, /* I - Number of destinations */
if (getuid() == 0)
{
if ((home = getenv("CUPS_SERVERROOT")) == NULL)
home = CUPS_SERVERROOT;
snprintf(filename, sizeof(filename), "%s/lpoptions", home);
if ((home = getenv("CUPS_SERVERROOT")) != NULL)
snprintf(filename, sizeof(filename), "%s/lpoptions", home);
else
strcpy(filename, CUPS_SERVERROOT "/lpoptions");
}
else if ((home = getenv("HOME")) != NULL)
snprintf(filename, sizeof(filename), "%s/.lpoptions", home);
@@ -369,18 +370,8 @@ cups_get_dests(const char *filename, /* I - File to read from */
*lineptr, /* Pointer into line */
*name, /* Name of destination/option */
*instance; /* Instance of destination */
const char *printer; /* PRINTER or LPDEST */
/*
* Check environment variables...
*/
if ((printer = getenv("LPDEST")) == NULL)
if ((printer = getenv("PRINTER")) != NULL)
if (strcmp(printer, "lp") == 0)
printer = NULL;
/*
* Try to open the file...
*/
@@ -490,7 +481,7 @@ cups_get_dests(const char *filename, /* I - File to read from */
* Set this as default if needed...
*/
if (strncasecmp(line, "default", 7) == 0 && printer == NULL)
if (strncasecmp(line, "default", 7) == 0)
{
for (i = 0; i < num_dests; i ++)
(*dests)[i].is_default = 0;
+171 -206
Ver Arquivo
@@ -25,10 +25,8 @@
*
* Contents:
*
* ppdCollect() - Collect all marked options that reside in the specified
* ppdEmit() - Emit code for marked options to a file.
* ppdEmitFd() - Emit code for marked options to a file.
* ppd_sort() - Sort options by ordering numbers...
* ppdEmit() - Emit code for marked options to a file.
* ppdEmitFd() - Emit code for marked options to a file.
*/
/*
@@ -51,17 +49,180 @@
*/
static int ppd_sort(ppd_choice_t **c1, ppd_choice_t **c2);
static int ppd_collect(ppd_file_t *ppd, ppd_section_t section,
ppd_choice_t ***choices);
/*
* 'ppdCollect()' - Collect all marked options that reside in the specified
* section.
* 'ppdEmit()' - Emit code for marked options to a file.
*/
int /* O - Number of options marked */
ppdCollect(ppd_file_t *ppd, /* I - PPD file data */
ppd_section_t section, /* I - Section to collect */
ppd_choice_t ***choices) /* O - Pointers to choices */
int /* O - 0 on success, -1 on failure */
ppdEmit(ppd_file_t *ppd, /* I - PPD file record */
FILE *fp, /* I - File to write to */
ppd_section_t section) /* I - Section to write */
{
int i, /* Looping var */
count; /* Number of choices */
ppd_choice_t **choices; /* Choices */
ppd_size_t *size; /* Custom page size */
if ((count = ppd_collect(ppd, section, &choices)) == 0)
return (0);
for (i = 0; i < count; i ++)
if (section != PPD_ORDER_EXIT && section != PPD_ORDER_JCL)
{
/*
* Send DSC comments with option...
*/
if (fprintf(fp, "%%%%BeginFeature: %s %s\n",
((ppd_option_t *)choices[i]->option)->keyword,
choices[i]->choice) < 0)
{
free(choices);
return (-1);
}
if (strcasecmp(((ppd_option_t *)choices[i]->option)->keyword, "PageSize") == 0 &&
strcasecmp(choices[i]->choice, "Custom") == 0)
{
/*
* Variable size; write out standard size options (this should
* eventually be changed to use the parameter positions defined
* in the PPD file...)
*/
size = ppdPageSize(ppd, "Custom");
fprintf(fp, "%.0f %.0f 0 0 0\n", size->width, size->length);
if (choices[i]->code == NULL)
{
/*
* This can happen with certain buggy PPD files that don't include
* a CustomPageSize command sequence... We just use a generic
* Level 2 command sequence...
*/
fputs("pop pop pop\n", fp);
fputs("<</PageSize[5 -2 roll]/ImagingBBox null>>setpagedevice\n", fp);
}
}
if (choices[i]->code != NULL && choices[i]->code[0] != '\0')
{
if (fputs(choices[i]->code, fp) < 0)
{
free(choices);
return (-1);
}
if (choices[i]->code[strlen(choices[i]->code) - 1] != '\n')
putc('\n', fp);
}
if (fputs("%%EndFeature\n", fp) < 0)
{
free(choices);
return (-1);
}
}
else if (fputs(choices[i]->code, fp) < 0)
{
free(choices);
return (-1);
}
free(choices);
return (0);
}
/*
* 'ppdEmitFd()' - Emit code for marked options to a file.
*/
int /* O - 0 on success, -1 on failure */
ppdEmitFd(ppd_file_t *ppd, /* I - PPD file record */
int fd, /* I - File to write to */
ppd_section_t section) /* I - Section to write */
{
int i, /* Looping var */
count; /* Number of choices */
ppd_choice_t **choices; /* Choices */
char buf[1024]; /* Output buffer for feature */
if ((count = ppd_collect(ppd, section, &choices)) == 0)
return (0);
for (i = 0; i < count; i ++)
if (section != PPD_ORDER_EXIT && section != PPD_ORDER_JCL)
{
/*
* Send DSC comments with option...
*/
sprintf(buf, "%%%%BeginFeature: %s %s\n",
((ppd_option_t *)choices[i]->option)->keyword, choices[i]->choice);
if (write(fd, buf, strlen(buf)) < 1)
{
free(choices);
return (-1);
}
if (write(fd, choices[i]->code, strlen(choices[i]->code)) < 1)
{
free(choices);
return (-1);
}
if (write(fd, "%%EndFeature\n", 13) < 1)
{
free(choices);
return (-1);
}
}
else if (write(fd, choices[i]->code, strlen(choices[i]->code)) < 1)
{
free(choices);
return (-1);
}
free(choices);
return (0);
}
/*
* 'ppd_sort()' - Sort options by ordering numbers...
*/
static int /* O - -1 if c1 < c2, 0 if equal, 1 otherwise */
ppd_sort(ppd_choice_t **c1, /* I - First choice */
ppd_choice_t **c2) /* I - Second choice */
{
if (((ppd_option_t *)(*c1)->option)->order < ((ppd_option_t *)(*c2)->option)->order)
return (-1);
else if (((ppd_option_t *)(*c1)->option)->order > ((ppd_option_t *)(*c2)->option)->order)
return (1);
else
return (0);
}
/*
* 'ppd_collect()' - Collect all marked options that reside in the specified
* section.
*/
static int /* O - Number of options marked */
ppd_collect(ppd_file_t *ppd, /* I - PPD file data */
ppd_section_t section, /* I - Section to collect */
ppd_choice_t ***choices) /* O - Pointers to choices */
{
int i, j, k, m; /* Looping vars */
ppd_group_t *g, /* Current group */
@@ -135,202 +296,6 @@ ppdCollect(ppd_file_t *ppd, /* I - PPD file data */
}
/*
* 'ppdEmit()' - Emit code for marked options to a file.
*/
int /* O - 0 on success, -1 on failure */
ppdEmit(ppd_file_t *ppd, /* I - PPD file record */
FILE *fp, /* I - File to write to */
ppd_section_t section) /* I - Section to write */
{
int i, /* Looping var */
count; /* Number of choices */
ppd_choice_t **choices; /* Choices */
ppd_size_t *size; /* Custom page size */
if ((count = ppdCollect(ppd, section, &choices)) == 0)
return (0);
for (i = 0; i < count; i ++)
if (section != PPD_ORDER_EXIT && section != PPD_ORDER_JCL)
{
/*
* Send wrapper commands to prevent printer errors for unsupported
* options...
*/
if (fputs("[{\n", fp) < 0)
{
free(choices);
return (-1);
}
/*
* Send DSC comments with option...
*/
if (fprintf(fp, "%%%%BeginFeature: %s %s\n",
((ppd_option_t *)choices[i]->option)->keyword,
choices[i]->choice) < 0)
{
free(choices);
return (-1);
}
if (strcasecmp(((ppd_option_t *)choices[i]->option)->keyword, "PageSize") == 0 &&
strcasecmp(choices[i]->choice, "Custom") == 0)
{
/*
* Variable size; write out standard size options (this should
* eventually be changed to use the parameter positions defined
* in the PPD file...)
*/
size = ppdPageSize(ppd, "Custom");
fprintf(fp, "%.0f %.0f 0 0 0\n", size->width, size->length);
if (choices[i]->code == NULL)
{
/*
* This can happen with certain buggy PPD files that don't include
* a CustomPageSize command sequence... We just use a generic
* Level 2 command sequence...
*/
fputs("pop pop pop\n", fp);
fputs("<</PageSize[5 -2 roll]/ImagingBBox null>>setpagedevice\n", fp);
}
}
if (choices[i]->code != NULL && choices[i]->code[0] != '\0')
{
if (fputs(choices[i]->code, fp) < 0)
{
free(choices);
return (-1);
}
if (choices[i]->code[strlen(choices[i]->code) - 1] != '\n')
putc('\n', fp);
}
if (fputs("%%EndFeature\n", fp) < 0)
{
free(choices);
return (-1);
}
if (fputs("} stopped cleartomark\n", fp) < 0)
{
free(choices);
return (-1);
}
}
else if (fputs(choices[i]->code, fp) < 0)
{
free(choices);
return (-1);
}
free(choices);
return (0);
}
/*
* 'ppdEmitFd()' - Emit code for marked options to a file.
*/
int /* O - 0 on success, -1 on failure */
ppdEmitFd(ppd_file_t *ppd, /* I - PPD file record */
int fd, /* I - File to write to */
ppd_section_t section) /* I - Section to write */
{
int i, /* Looping var */
count; /* Number of choices */
ppd_choice_t **choices; /* Choices */
char buf[1024]; /* Output buffer for feature */
if ((count = ppdCollect(ppd, section, &choices)) == 0)
return (0);
for (i = 0; i < count; i ++)
if (section != PPD_ORDER_EXIT && section != PPD_ORDER_JCL)
{
/*
* Send wrapper commands to prevent printer errors for unsupported
* options...
*/
if (write(fd, "[{\n", 3) < 1)
{
free(choices);
return (-1);
}
/*
* Send DSC comments with option...
*/
snprintf(buf, sizeof(buf), "%%%%BeginFeature: %s %s\n",
((ppd_option_t *)choices[i]->option)->keyword,
choices[i]->choice);
if (write(fd, buf, strlen(buf)) < 1)
{
free(choices);
return (-1);
}
if (write(fd, choices[i]->code, strlen(choices[i]->code)) < 1)
{
free(choices);
return (-1);
}
if (write(fd, "%%EndFeature\n", 13) < 1)
{
free(choices);
return (-1);
}
if (write(fd, "} stopped cleartomark\n", 22) < 1)
{
free(choices);
return (-1);
}
}
else if (write(fd, choices[i]->code, strlen(choices[i]->code)) < 1)
{
free(choices);
return (-1);
}
free(choices);
return (0);
}
/*
* 'ppd_sort()' - Sort options by ordering numbers...
*/
static int /* O - -1 if c1 < c2, 0 if equal, 1 otherwise */
ppd_sort(ppd_choice_t **c1, /* I - First choice */
ppd_choice_t **c2) /* I - Second choice */
{
if (((ppd_option_t *)(*c1)->option)->order < ((ppd_option_t *)(*c2)->option)->order)
return (-1);
else if (((ppd_option_t *)(*c1)->option)->order > ((ppd_option_t *)(*c2)->option)->order)
return (1);
else
return (0);
}
/*
* End of "$Id$".
*/
+33 -338
Ver Arquivo
@@ -5,7 +5,7 @@
*
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* These statusd 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
@@ -29,7 +29,6 @@
* the server.
* httpClose() - Close an HTTP connection...
* httpConnect() - Connect to a HTTP server.
* httpEncryption() - Set the required encryption on the link.
* httpReconnect() - Reconnect to a HTTP server...
* httpSeparate() - Separate a Universal Resource Identifier into its
* components.
@@ -57,7 +56,6 @@
* http_field() - Return the field index for a field name.
* http_send() - Send a request with all fields and the trailing
* blank line.
* http_upgrade() - Force upgrade to TLS encryption.
*/
/*
@@ -80,12 +78,6 @@
# include <signal.h>
#endif /* !WIN32 && !__EMX__ */
#ifdef HAVE_LIBSSL
# include <openssl/rand.h>
# include <openssl/ssl.h>
#endif /* HAVE_LIBSSL */
/*
* Some operating systems have done away with the Fxxxx constants for
* the fcntl() call; this works around that "feature"...
@@ -103,7 +95,6 @@
static http_field_t http_field(const char *name);
static int http_send(http_t *http, http_state_t request,
const char *uri);
static int http_upgrade(http_t *http);
/*
@@ -175,13 +166,6 @@ static const char *months[12] =
void
httpInitialize(void)
{
#ifdef HAVE_LIBSSL
# if defined(WIN32) || defined(__EMX__)
# else
struct timeval curtime; /* Current time in microseconds */
# endif /* WIN32 || __EMX__ */
#endif /* HAVE_LIBSSL */
#if defined(WIN32) || defined(__EMX__)
WSADATA winsockdata; /* WinSock data */
static int initialized = 0;/* Has WinSock been initialized? */
@@ -205,21 +189,6 @@ httpInitialize(void)
#else
signal(SIGPIPE, SIG_IGN);
#endif /* WIN32 || __EMX__ */
#ifdef HAVE_LIBSSL
SSL_library_init();
/*
* Using the current time is a dubious random seed, but on some systems
* it is the best we can do (on others, this seed isn't even used...)
*/
# if defined(WIN32) || defined(__EMX__)
# else
gettimeofday(&curtime, NULL);
RAND_seed(&curtime, sizeof(curtime));
# endif /* WIN32 || __EMX__ */
#endif /* HAVE_LIBSSL */
}
@@ -265,29 +234,9 @@ httpCheck(http_t *http) /* I - HTTP connection */
void
httpClose(http_t *http) /* I - Connection to close */
{
#ifdef HAVE_LIBSSL
SSL_CTX *context; /* Context for encryption */
SSL *conn; /* Connection for encryption */
#endif /* HAVE_LIBSSL */
if (!http)
if (http == NULL)
return;
#ifdef HAVE_LIBSSL
if (http->tls)
{
conn = (SSL *)(http->tls);
context = SSL_get_SSL_CTX(conn);
SSL_shutdown(conn);
SSL_CTX_free(context);
SSL_free(conn);
http->tls = NULL;
}
#endif /* HAVE_LIBSSL */
#ifdef WIN32
closesocket(http->fd);
#else
@@ -346,18 +295,6 @@ httpConnect(const char *host, /* I - Host to connect to */
#else
http->hostaddr.sin_port = htons(port);
#endif /* WIN32 */
/*
* Set the default encryption status...
*/
if (port == 443)
http->encryption = HTTP_ENCRYPT_ALWAYS;
/*
* Connect to the remote system...
*/
if (httpReconnect(http))
{
free(http);
@@ -368,36 +305,6 @@ httpConnect(const char *host, /* I - Host to connect to */
}
/*
* 'httpEncryption()' - Set the required encryption on the link.
*/
int /* O - -1 on error, 0 on success */
httpEncryption(http_t *http, /* I - HTTP data */
http_encryption_t e) /* I - New encryption preference */
{
#ifdef HAVE_LIBSSL
if (!http)
return (0);
http->encryption = e;
if ((http->encryption == HTTP_ENCRYPT_ALWAYS && !http->tls) ||
(http->encryption == HTTP_ENCRYPT_NEVER && http->tls))
return (httpReconnect(http));
else if (http->encryption == HTTP_ENCRYPT_REQUIRED && !http->tls)
return (http_upgrade(http));
else
return (0);
#else
if (e == HTTP_ENCRYPT_ALWAYS || e == HTTP_ENCRYPT_REQUIRED)
return (-1);
else
return (0);
#endif /* HAVE_LIBSSL */
}
/*
* 'httpReconnect()' - Reconnect to a HTTP server...
*/
@@ -405,25 +312,9 @@ httpEncryption(http_t *http, /* I - HTTP data */
int /* O - 0 on success, non-zero on failure */
httpReconnect(http_t *http) /* I - HTTP data */
{
int val; /* Socket option value */
#ifdef HAVE_LIBSSL
SSL_CTX *context; /* Context for encryption */
SSL *conn; /* Connection for encryption */
int val; /* Socket option value */
if (http->tls)
{
conn = (SSL *)(http->tls);
context = SSL_get_SSL_CTX(conn);
SSL_shutdown(conn);
SSL_CTX_free(context);
SSL_free(conn);
http->tls = NULL;
}
#endif /* HAVE_LIBSSL */
/*
* Close any previously open socket...
*/
@@ -489,44 +380,6 @@ httpReconnect(http_t *http) /* I - HTTP data */
http->error = 0;
http->status = HTTP_CONTINUE;
#ifdef HAVE_LIBSSL
if (http->encryption == HTTP_ENCRYPT_ALWAYS)
{
/*
* Always do encryption via SSL.
*/
context = SSL_CTX_new(SSLv23_method());
conn = SSL_new(context);
SSL_set_fd(conn, http->fd);
if (SSL_connect(conn) != 1)
{
SSL_CTX_free(context);
SSL_free(conn);
#if defined(WIN32) || defined(__EMX__)
http->error = WSAGetLastError();
#else
http->error = errno;
#endif /* WIN32 || __EMX__ */
http->status = HTTP_ERROR;
#ifdef WIN32
closesocket(http->fd);
#else
close(http->fd);
#endif
return (-1);
}
http->tls = conn;
}
else if (http->encryption == HTTP_ENCRYPT_REQUIRED)
return (http_upgrade(http));
#endif /* HAVE_LIBSSL */
return (0);
}
@@ -544,9 +397,7 @@ httpSeparate(const char *uri, /* I - Universal Resource Identifier */
int *port, /* O - Port number to use */
char *resource) /* O - Resource/filename [1024] */
{
char *ptr; /* Pointer into string... */
const char *atsign, /* @ sign */
*slash; /* Separator */
char *ptr; /* Pointer into string... */
if (uri == NULL || method == NULL || username == NULL || host == NULL ||
@@ -639,49 +490,44 @@ httpSeparate(const char *uri, /* I - Universal Resource Identifier */
}
/*
* Grab the usenname, if any...
* Grab the hostname...
*/
while (*uri == '/')
uri ++;
if ((slash = strchr(uri, '/')) == NULL)
slash = uri + strlen(uri);
if ((atsign = strchr(uri, '@')) != NULL && atsign < slash)
{
/*
* Got a username:password combo...
*/
for (ptr = username;
uri < atsign && ptr < (username + sizeof(username) - 1);
*ptr++ = *uri++);
*ptr = '\0';
uri = atsign + 1;
}
else
username[0] = '\0';
/*
* Grab the hostname...
*/
ptr = host;
while (*uri != ':' && *uri != '/' && *uri != '\0')
while (!(*uri == ':' && isdigit(uri[1])) && *uri != '@' && *uri != '/' && *uri != '\0')
*ptr ++ = *uri ++;
*ptr = '\0';
if (*uri == '@')
{
/*
* Got a username...
*/
strncpy(username, host, 31);
username[31] = '\0';
ptr = host;
uri ++;
while (*uri != ':' && *uri != '/' && *uri != '\0')
*ptr ++ = *uri ++;
*ptr = '\0';
}
else
username[0] = '\0';
if (*uri != ':')
{
if (strcasecmp(method, "http") == 0)
*port = 80;
else if (strcasecmp(method, "https") == 0)
*port = 443;
else if (strcasecmp(method, "ipp") == 0)
else if (strcasecmp(method, "ipp") == 0) /* Not registered yet... */
*port = ippPort();
else if (strcasecmp(method, "socket") == 0) /* Not registered yet... */
*port = 9100;
@@ -1032,10 +878,6 @@ httpRead(http_t *http, /* I - HTTP data */
if (http->used > 0)
memcpy(http->buffer, http->buffer + length, http->used);
}
#ifdef HAVE_LIBSSL
else if (http->tls)
bytes = SSL_read((SSL *)(http->tls), buffer, length);
#endif /* HAVE_LIBSSL */
else
{
DEBUG_printf(("httpRead: reading %d bytes from socket...\n", length));
@@ -1118,13 +960,7 @@ httpWrite(http_t *http, /* I - HTTP data */
while (length > 0)
{
#ifdef HAVE_LIBSSL
if (http->tls)
bytes = SSL_write((SSL *)(http->tls), buffer, length);
else
#endif /* HAVE_LIBSSL */
bytes = send(http->fd, buffer, length, 0);
if (bytes < 0)
{
DEBUG_puts("httpWrite: error writing data...\n");
@@ -1204,21 +1040,13 @@ httpGets(char *line, /* I - Line to read into */
else
bufptr ++;
if (bufptr >= bufend && http->used < HTTP_MAX_BUFFER)
if (bufptr >= bufend)
{
/*
* No newline; see if there is more data to be read...
*/
#ifdef HAVE_LIBSSL
if (http->tls)
bytes = SSL_read((SSL *)(http->tls), bufend,
HTTP_MAX_BUFFER - http->used);
else
#endif /* HAVE_LIBSSL */
bytes = recv(http->fd, bufend, HTTP_MAX_BUFFER - http->used, 0);
if (bytes < 0)
if ((bytes = recv(http->fd, bufend, HTTP_MAX_BUFFER - http->used, 0)) < 0)
{
/*
* Nope, can't get a line this time...
@@ -1260,7 +1088,7 @@ httpGets(char *line, /* I - Line to read into */
bufend += bytes;
}
}
while (bufptr >= bufend && http->used < HTTP_MAX_BUFFER);
while (bufptr >= bufend);
http->activity = time(NULL);
@@ -1324,17 +1152,8 @@ httpPrintf(http_t *http, /* I - HTTP data */
DEBUG_printf(("httpPrintf: %s", buf));
for (tbytes = 0, bufptr = buf; tbytes < bytes; tbytes += nbytes, bufptr += nbytes)
{
#ifdef HAVE_LIBSSL
if (http->tls)
nbytes = SSL_write((SSL *)(http->tls), bufptr, bytes - tbytes);
else
#endif /* HAVE_LIBSSL */
nbytes = send(http->fd, bufptr, bytes - tbytes, 0);
if (nbytes < 0)
if ((nbytes = send(http->fd, bufptr, bytes - tbytes, 0)) < 0)
return (-1);
}
return (bytes);
}
@@ -1349,10 +1168,6 @@ httpStatus(http_status_t status) /* I - HTTP status code */
{
switch (status)
{
case HTTP_CONTINUE :
return ("Continue");
case HTTP_SWITCHING_PROTOCOLS :
return ("Switching Protocols");
case HTTP_OK :
return ("OK");
case HTTP_CREATED :
@@ -1375,8 +1190,6 @@ httpStatus(http_status_t status) /* I - HTTP status code */
return ("Request Entity Too Large");
case HTTP_URI_TOO_LONG :
return ("URI Too Long");
case HTTP_UPGRADE_REQUIRED :
return ("Upgrade Required");
case HTTP_NOT_IMPLEMENTED :
return ("Not Implemented");
case HTTP_NOT_SUPPORTED :
@@ -1399,9 +1212,9 @@ httpGetDateString(time_t t) /* I - UNIX time */
tdate = gmtime(&t);
snprintf(datetime, sizeof(datetime), "%s, %02d %s %d %02d:%02d:%02d GMT",
days[tdate->tm_wday], tdate->tm_mday, months[tdate->tm_mon],
tdate->tm_year + 1900, tdate->tm_hour, tdate->tm_min, tdate->tm_sec);
sprintf(datetime, "%s, %02d %s %d %02d:%02d:%02d GMT",
days[tdate->tm_wday], tdate->tm_mday, months[tdate->tm_mon],
tdate->tm_year + 1900, tdate->tm_hour, tdate->tm_min, tdate->tm_sec);
return (datetime);
}
@@ -1455,10 +1268,6 @@ httpUpdate(http_t *http) /* I - HTTP data */
http_field_t field; /* Field index */
int major, minor; /* HTTP version numbers */
http_status_t status; /* Authorization status */
#ifdef HAVE_LIBSSL
SSL_CTX *context; /* Context for encryption */
SSL *conn; /* Connection for encryption */
#endif /* HAVE_LIBSSL */
DEBUG_printf(("httpUpdate(%08x)\n", http));
@@ -1492,43 +1301,6 @@ httpUpdate(http_t *http) /* I - HTTP data */
if (http->status == HTTP_CONTINUE)
return (http->status);
#ifdef HAVE_LIBSSL
if (http->status == HTTP_SWITCHING_PROTOCOLS && !http->tls)
{
context = SSL_CTX_new(SSLv23_method());
conn = SSL_new(context);
SSL_set_fd(conn, http->fd);
if (SSL_connect(conn) != 1)
{
SSL_CTX_free(context);
SSL_free(conn);
#if defined(WIN32) || defined(__EMX__)
http->error = WSAGetLastError();
#else
http->error = errno;
#endif /* WIN32 || __EMX__ */
http->status = HTTP_ERROR;
#ifdef WIN32
closesocket(http->fd);
#else
close(http->fd);
#endif
return (HTTP_ERROR);
}
http->tls = conn;
return (HTTP_CONTINUE);
}
else if (http->status == HTTP_UPGRADE_REQUIRED &&
http->encryption != HTTP_ENCRYPT_NEVER)
http->encryption = HTTP_ENCRYPT_REQUIRED;
#endif /* HAVE_LIBSSL */
httpGetLength(http);
switch (http->state)
@@ -1858,14 +1630,6 @@ http_send(http_t *http, /* I - HTTP data */
http->status = HTTP_CONTINUE;
#ifdef HAVE_LIBSSL
if (http->encryption == HTTP_ENCRYPT_REQUIRED && !http->tls)
{
httpSetField(http, HTTP_FIELD_CONNECTION, "Upgrade");
httpSetField(http, HTTP_FIELD_UPGRADE, "TLS/1.0,SSL/2.0,SSL/3.0");
}
#endif /* HAVE_LIBSSL */
if (httpPrintf(http, "%s %s HTTP/1.1\r\n", codes[request], buf) < 1)
{
http->status = HTTP_ERROR;
@@ -1896,75 +1660,6 @@ http_send(http_t *http, /* I - HTTP data */
}
#ifdef HAVE_LIBSSL
/*
* 'http_upgrade()' - Force upgrade to TLS encryption.
*/
static int /* O - Status of connection */
http_upgrade(http_t *http) /* I - HTTP data */
{
SSL_CTX *context; /* Context for encryption */
SSL *conn; /* Connection for encryption */
char buffer[1024]; /* Status from server... */
/*
* Send an OPTIONS request to the server, requiring SSL or TLS
* encryption on the link...
*/
if (httpPrintf(http, "OPTIONS * HTTP/1.1\r\n") < 0)
return (-1);
if (httpPrintf(http, "Host: %s\r\n", http->hostname) < 0)
return (-1);
if (httpPrintf(http, "Connection: upgrade\r\n") < 0)
return (-1);
if (httpPrintf(http, "Upgrade: TLS/1.0, SSL/2.0, SSL/3.0\r\n") < 0)
return (-1);
if (httpPrintf(http, "\r\n") < 0)
return (-1);
/*
* Wait for the response data...
*/
while (httpGets(buffer, sizeof(buffer), http) != NULL)
if (!buffer[0])
break;
context = SSL_CTX_new(SSLv23_method());
conn = SSL_new(context);
SSL_set_fd(conn, http->fd);
if (SSL_connect(conn) != 1)
{
SSL_CTX_free(context);
SSL_free(conn);
#if defined(WIN32) || defined(__EMX__)
http->error = WSAGetLastError();
#else
http->error = errno;
#endif /* WIN32 || __EMX__ */
http->status = HTTP_ERROR;
#ifdef WIN32
closesocket(http->fd);
#else
close(http->fd);
#endif
return (-1);
}
http->tls = conn;
return (0);
}
#endif /* HAVE_LIBSSL */
/*
* End of "$Id$".
*/
+1 -18
Ver Arquivo
@@ -47,7 +47,7 @@
# include <netinet/tcp.h>
# endif /* WIN32 || __EMX__ */
# include "md5.h"
# include <cups/md5.h>
/*
@@ -126,19 +126,6 @@ typedef enum
} http_encoding_t;
/*
* HTTP encryption values...
*/
typedef enum
{
HTTP_ENCRYPT_IF_REQUESTED, /* Encrypt if requested (TLS upgrade) */
HTTP_ENCRYPT_NEVER, /* Never encrypt */
HTTP_ENCRYPT_REQUIRED, /* Encryption is required (TLS upgrade) */
HTTP_ENCRYPT_ALWAYS /* Always encrypt (SSL) */
} http_encryption_t;
/*
* HTTP authentication types...
*/
@@ -163,7 +150,6 @@ typedef enum
HTTP_ERROR = -1, /* An error response from httpXxxx() */
HTTP_CONTINUE = 100, /* Everything OK, keep going... */
HTTP_SWITCHING_PROTOCOLS, /* HTTP upgrade to TLS/SSL */
HTTP_OK = 200, /* OPTIONS/GET/HEAD/POST/TRACE command was successful */
HTTP_CREATED, /* PUT command was successful */
@@ -196,7 +182,6 @@ typedef enum
HTTP_REQUEST_TOO_LARGE, /* Request entity too large */
HTTP_URI_TOO_LONG, /* URI too long */
HTTP_UNSUPPORTED_MEDIATYPE, /* The requested media type is unsupported */
HTTP_UPGRADE_REQUIRED = 426, /* Upgrade to SSL/TLS required */
HTTP_SERVER_ERROR = 500, /* Internal server error */
HTTP_NOT_IMPLEMENTED, /* Feature not implemented */
@@ -276,7 +261,6 @@ typedef struct
/* Nonce value */
int nonce_count; /* Nonce count */
void *tls; /* TLS state information */
http_encryption_t encryption; /* Encryption requirements */
} http_t;
@@ -291,7 +275,6 @@ extern int httpCheck(http_t *http);
extern void httpClose(http_t *http);
extern http_t *httpConnect(const char *host, int port);
extern int httpDelete(http_t *http, const char *uri);
extern int httpEncryption(http_t *http, http_encryption_t e);
# define httpError(http) ((http)->error)
extern void httpFlush(http_t *http);
extern int httpGet(http_t *http, const char *uri);
+23 -64
Ver Arquivo
@@ -44,7 +44,6 @@
* ippNew() - Allocate a new IPP request.
* ippPort() - Return the default IPP port number.
* ippRead() - Read data for an IPP request.
* ippSetPort() - Set the default port number.
* ippTimeToDate() - Convert from UNIX time to RFC 1903 format.
* ippWrite() - Write data for an IPP request.
* _ipp_add_attr() - Add a new attribute to the request.
@@ -66,13 +65,6 @@
#include <ctype.h>
/*
* Local globals...
*/
static int ipp_port = 0;
/*
* Local functions...
*/
@@ -93,7 +85,7 @@ ippAddBoolean(ipp_t *ipp, /* I - IPP request */
ipp_attribute_t *attr; /* New attribute */
DEBUG_printf(("ippAddBoolean(%p, %02x, \'%s\', %d)\n", ipp, group, name, value));
DEBUG_printf(("ippAddBoolean(%08x, %02x, \'%s\', %d)\n", ipp, group, name, value));
if (ipp == NULL || name == NULL)
return (NULL);
@@ -125,7 +117,7 @@ ippAddBooleans(ipp_t *ipp, /* I - IPP request */
ipp_attribute_t *attr; /* New attribute */
DEBUG_printf(("ippAddBooleans(%p, %02x, \'%s\', %d, %p)\n", ipp,
DEBUG_printf(("ippAddBooleans(%08x, %02x, \'%s\', %d, %08x)\n", ipp,
group, name, num_values, values));
if (ipp == NULL || name == NULL)
@@ -159,7 +151,7 @@ ippAddDate(ipp_t *ipp, /* I - IPP request */
ipp_attribute_t *attr; /* New attribute */
DEBUG_printf(("ippAddDate(%p, %02x, \'%s\', %p)\n", ipp, group, name,
DEBUG_printf(("ippAddDate(%08x, %02x, \'%s\', %08x)\n", ipp, group, name,
value));
if (ipp == NULL || name == NULL || value == NULL)
@@ -191,7 +183,7 @@ ippAddInteger(ipp_t *ipp, /* I - IPP request */
ipp_attribute_t *attr; /* New attribute */
DEBUG_printf(("ippAddInteger(%p, %d, \'%s\', %d)\n", ipp, group, name,
DEBUG_printf(("ippAddInteger(%08x, %d, \'%s\', %d)\n", ipp, group, name,
value));
if (ipp == NULL || name == NULL)
@@ -268,10 +260,9 @@ ippAddString(ipp_t *ipp, /* I - IPP request */
attr->group_tag = group;
attr->value_tag = type;
attr->values[0].string.charset = charset ? strdup(charset) : NULL;
attr->values[0].string.text = value ? strdup(value) : NULL;
attr->values[0].string.text = strdup(value);
if ((type == IPP_TAG_LANGUAGE || type == IPP_TAG_CHARSET) &&
attr->values[0].string.text)
if (type == IPP_TAG_LANGUAGE || type == IPP_TAG_CHARSET)
{
/*
* Convert to lowercase and change _ to - as needed...
@@ -481,7 +472,7 @@ ippAddSeparator(ipp_t *ipp) /* I - IPP request */
ipp_attribute_t *attr; /* New attribute */
DEBUG_printf(("ippAddSeparator(%p)\n", ipp));
DEBUG_printf(("ippAddSeparator(%08x)\n", ipp));
if (ipp == NULL)
return (NULL);
@@ -556,8 +547,6 @@ ippDelete(ipp_t *ipp) /* I - IPP request */
*next; /* Next attribute */
DEBUG_printf(("ippNew(): %p\n", ipp));
if (ipp == NULL)
return;
@@ -659,26 +648,23 @@ ippFindAttribute(ipp_t *ipp, /* I - IPP request */
const char *name, /* I - Name of attribute */
ipp_tag_t type) /* I - Type of attribute */
{
ipp_attribute_t *attr; /* Current atttribute */
ipp_tag_t value_tag; /* Value tag */
ipp_attribute_t *attr; /* Current atttribute */
DEBUG_printf(("ippFindAttribute(%p, \'%s\')\n", ipp, name));
DEBUG_printf(("ippFindAttribute(%08x, \'%s\')\n", ipp, name));
if (ipp == NULL || name == NULL)
return (NULL);
for (attr = ipp->attrs; attr != NULL; attr = attr->next)
{
DEBUG_printf(("ippFindAttribute: attr = %p, name = \'%s\'\n", attr,
DEBUG_printf(("ippFindAttribute: attr = %08x, name = \'%s\'\n", attr,
attr->name));
value_tag = attr->value_tag & ~IPP_TAG_COPY;
if (attr->name != NULL && strcasecmp(attr->name, name) == 0 &&
(value_tag == type || type == IPP_TAG_ZERO ||
(value_tag == IPP_TAG_TEXTLANG && type == IPP_TAG_TEXT) ||
(value_tag == IPP_TAG_NAMELANG && type == IPP_TAG_NAME)))
(attr->value_tag == type || type == IPP_TAG_ZERO ||
(attr->value_tag == IPP_TAG_TEXTLANG && type == IPP_TAG_TEXT) ||
(attr->value_tag == IPP_TAG_NAMELANG && type == IPP_TAG_NAME)))
return (attr);
}
@@ -733,7 +719,7 @@ ippLength(ipp_t *ipp) /* I - IPP request */
bytes += 2 * attr->num_values; /* Name lengths */
bytes += 2 * attr->num_values; /* Value lengths */
switch (attr->value_tag & ~IPP_TAG_COPY)
switch (attr->value_tag)
{
case IPP_TAG_INTEGER :
case IPP_TAG_ENUM :
@@ -814,8 +800,6 @@ ippNew(void)
temp->request.any.version[1] = 1;
}
DEBUG_printf(("ippNew(): %p\n", temp));
return (temp);
}
@@ -835,7 +819,7 @@ ippRead(http_t *http, /* I - HTTP data */
ipp_tag_t tag; /* Current tag */
DEBUG_printf(("ippRead(%p, %p)\n", http, ipp));
DEBUG_printf(("ippRead(%08x, %08x)\n", http, ipp));
if (http == NULL || ipp == NULL)
return (IPP_ERROR);
@@ -881,10 +865,6 @@ ippRead(http_t *http, /* I - HTTP data */
ipp->current = NULL;
ipp->curtag = IPP_TAG_ZERO;
DEBUG_printf(("ippRead: version=%d.%d\n", buffer[0], buffer[1]));
DEBUG_printf(("ippRead: op_status=%04x\n", ipp->request.any.op_status));
DEBUG_printf(("ippRead: request_id=%d\n", ipp->request.any.request_id));
/*
* If blocking is disabled, stop here...
*/
@@ -1219,10 +1199,6 @@ ippWrite(http_t *http, /* I - HTTP data */
ipp->current = ipp->attrs;
ipp->curtag = IPP_TAG_ZERO;
DEBUG_printf(("ippWrite: version=%d.%d\n", buffer[0], buffer[1]));
DEBUG_printf(("ippWrite: op_status=%04x\n", ipp->request.any.op_status));
DEBUG_printf(("ippWrite: request_id=%d\n", ipp->request.any.request_id));
/*
* If blocking is disabled, stop here...
*/
@@ -1268,7 +1244,7 @@ ippWrite(http_t *http, /* I - HTTP data */
memcpy(bufptr, attr->name, n);
bufptr += n;
switch (attr->value_tag & ~IPP_TAG_COPY)
switch (attr->value_tag)
{
case IPP_TAG_INTEGER :
case IPP_TAG_ENUM :
@@ -1463,7 +1439,7 @@ ippWrite(http_t *http, /* I - HTTP data */
n = strlen(attr->values[i].string.charset) +
strlen(attr->values[i].string.text) +
4;
2;
if ((sizeof(buffer) - (bufptr - buffer)) < (n + 2))
{
@@ -1601,25 +1577,12 @@ ippPort(void)
struct servent *port; /* Port number info */
if (ipp_port)
return (ipp_port);
else if ((server_port = getenv("IPP_PORT")) != NULL)
return (ipp_port = atoi(server_port));
if ((server_port = getenv("IPP_PORT")) != NULL)
return (atoi(server_port));
else if ((port = getservbyname("ipp", NULL)) == NULL)
return (ipp_port = IPP_PORT);
return (IPP_PORT);
else
return (ipp_port = ntohs(port->s_port));
}
/*
* 'ippSetPort()' - Set the default port number.
*/
void
ippSetPort(int p) /* I - Port number to use */
{
ipp_port = p;
return (ntohs(port->s_port));
}
@@ -1634,7 +1597,7 @@ _ipp_add_attr(ipp_t *ipp, /* I - IPP request */
ipp_attribute_t *attr; /* New attribute */
DEBUG_printf(("_ipp_add_attr(%p, %d)\n", ipp, num_values));
DEBUG_printf(("_ipp_add_attr(%08x, %d)\n", ipp, num_values));
if (ipp == NULL || num_values < 0)
return (NULL);
@@ -1654,8 +1617,6 @@ _ipp_add_attr(ipp_t *ipp, /* I - IPP request */
ipp->last = attr;
DEBUG_printf(("_ipp_add_attr(): %p\n", attr));
return (attr);
}
@@ -1670,8 +1631,6 @@ _ipp_free_attr(ipp_attribute_t *attr) /* I - Attribute to free */
int i; /* Looping var */
DEBUG_printf(("_ipp_free_attr(): %p\n", attr));
switch (attr->value_tag)
{
case IPP_TAG_TEXT :
@@ -1691,7 +1650,7 @@ _ipp_free_attr(ipp_attribute_t *attr) /* I - Attribute to free */
case IPP_TAG_NAMELANG :
for (i = 0; i < attr->num_values; i ++)
{
if (attr->values[i].string.charset && i == 0)
if (attr->values[i].string.charset)
free(attr->values[i].string.charset);
free(attr->values[i].string.text);
}
+2 -4
Ver Arquivo
@@ -30,7 +30,7 @@
* Include necessary headers...
*/
# include "http.h"
# include <cups/http.h>
/*
@@ -100,8 +100,7 @@ typedef enum /**** Format tags for attribute formats... ****/
IPP_TAG_URISCHEME,
IPP_TAG_CHARSET,
IPP_TAG_LANGUAGE,
IPP_TAG_MIMETYPE,
IPP_TAG_COPY = 0x80000000
IPP_TAG_MIMETYPE
} ipp_tag_t;
typedef enum /**** Resolution units... ****/
@@ -343,7 +342,6 @@ extern ipp_state_t ippRead(http_t *http, ipp_t *ipp);
extern const ipp_uchar_t *ippTimeToDate(time_t t);
extern ipp_state_t ippWrite(http_t *http, ipp_t *ipp);
extern int ippPort(void);
extern void ippSetPort(int p);
extern ipp_attribute_t *_ipp_add_attr(ipp_t *, int);
extern void _ipp_free_attr(ipp_attribute_t *);
+3 -8
Ver Arquivo
@@ -263,10 +263,7 @@ cupsLangGet(const char *language) /* I - Language or locale */
*/
if (fp == NULL)
{
strncpy(line, lang_default[0], sizeof(line) - 1);
line[sizeof(line) - 1] = '\0';
}
strcpy(line, lang_default[0]);
else if (fgets(line, sizeof(line), fp) == NULL)
{
/*
@@ -323,8 +320,7 @@ cupsLangGet(const char *language) /* I - Language or locale */
*/
lang->used ++;
strncpy(lang->language, langname, sizeof(lang->language) - 1);
lang->language[sizeof(lang->language) - 1] = '\0';
strcpy(lang->language, langname);
for (i = 0; i < (sizeof(lang_encodings) / sizeof(lang_encodings[0])); i ++)
if (strcmp(lang_encodings[i], line) == 0)
@@ -351,8 +347,7 @@ cupsLangGet(const char *language) /* I - Language or locale */
if (lang_default[count] == NULL)
break;
strncpy(line, lang_default[count], sizeof(line) - 1);
/* Already set last byte to 0 above... */
strcpy(line, lang_default[count]);
}
else if (fgets(line, sizeof(line), fp) == NULL)
break;
+2 -6
Ver Arquivo
@@ -118,9 +118,7 @@ ppdConflicts(ppd_file_t *ppd) /* I - PPD to check */
if (c1->marked)
break;
if (j == 0 ||
strcasecmp(c1->choice, "None") == 0 ||
strcasecmp(c1->choice, "Off") == 0 ||
if (j == 0 || strcasecmp(c1->choice, "None") == 0 ||
strcasecmp(c1->choice, "False") == 0)
c1 = NULL;
}
@@ -151,9 +149,7 @@ ppdConflicts(ppd_file_t *ppd) /* I - PPD to check */
if (c2->marked)
break;
if (j == 0 ||
strcasecmp(c2->choice, "None") == 0 ||
strcasecmp(c2->choice, "Off") == 0 ||
if (j == 0 || strcasecmp(c2->choice, "None") == 0 ||
strcasecmp(c2->choice, "False") == 0)
c2 = NULL;
}
+5 -286
Ver Arquivo
@@ -23,12 +23,11 @@
*
* Contents:
*
* cupsAddOption() - Add an option to an option array.
* cupsEncodeOptions() - Encode printer options into IPP attributes.
* cupsFreeOptions() - Free all memory used by options.
* cupsGetOption() - Get an option value.
* cupsParseOptions() - Parse options from a command-line argument.
* cupsMarkOptions() - Mark command-line options in a PPD file.
* cupsAddOption() - Add an option to an option array.
* cupsFreeOptions() - Free all memory used by options.
* cupsGetOption() - Get an option value.
* cupsParseOptions() - Parse options from a command-line argument.
* cupsMarkOptions() - Mark command-line options in a PPD file.
*/
/*
@@ -39,7 +38,6 @@
#include <stdlib.h>
#include <ctype.h>
#include "string.h"
#include "debug.h"
/*
@@ -102,274 +100,6 @@ cupsAddOption(const char *name, /* I - Name of option */
}
/*
* 'cupsEncodeOptions()' - Encode printer options into IPP attributes.
*/
void
cupsEncodeOptions(ipp_t *ipp, /* I - Request to add to */
int num_options, /* I - Number of options */
cups_option_t *options) /* I - Options */
{
int i, j; /* Looping vars */
int count; /* Number of values */
int n; /* Attribute value */
char *s, /* Pointer into option value */
*val, /* Pointer to option value */
*copy, /* Copy of option value */
*sep; /* Option separator */
ipp_attribute_t *attr; /* IPP job-id attribute */
DEBUG_printf(("cupsEncodeOptions(%p, %d, %p)\n", ipp, num_options, options));
if (ipp == NULL || num_options < 1 || options == NULL)
return;
/*
* Handle the document format stuff first...
*/
if ((val = (char *)cupsGetOption("document-format", num_options, options)) != NULL)
ippAddString(ipp, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
NULL, val);
else if (cupsGetOption("raw", num_options, options))
ippAddString(ipp, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
NULL, "application/vnd.cups-raw");
else
ippAddString(ipp, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
NULL, "application/octet-stream");
/*
* Then add all other options...
*/
for (i = 0; i < num_options; i ++)
{
/*
* Skip document format options - handled above...
*/
if (strcasecmp(options[i].name, "raw") == 0 ||
strcasecmp(options[i].name, "document-format") == 0)
continue;
/*
* Count the number of values...
*/
for (count = 1, sep = options[i].value;
(sep = strchr(sep + 1, ',')) != NULL;
count ++);
DEBUG_printf(("cupsEncodeOptions: option = \'%s\', count = %d\n",
options[i].name, count));
if ((attr = _ipp_add_attr(ipp, count)) == NULL)
{
/*
* Ran out of memory!
*/
DEBUG_puts("cupsEncodeOptions: Ran out of memory for attributes!");
return;
}
attr->group_tag = IPP_TAG_JOB;
if ((attr->name = strdup(options[i].name)) == NULL)
{
/*
* Ran out of memory!
*/
DEBUG_puts("cupsEncodeOptions: Ran out of memory for name!");
return;
}
if (count > 1)
{
/*
* Make a copy of the value we can fiddle with...
*/
if ((copy = strdup(options[i].value)) == NULL)
{
/*
* Ran out of memory!
*/
DEBUG_puts("cupsEncodeOptions: Ran out of memory for value copy!");
return;
}
val = copy;
}
else
{
/*
* Since we have a single value, use the value directly...
*/
val = options[i].value;
copy = NULL;
}
/*
* See what the option value is; for compatibility with older interface
* scripts, we have to support single-argument options as well as
* option=value, option=low-high, option=MxN, and option=val1,val2,...,valN.
*/
if (*val == '\0')
{
/*
* Old-style System V boolean value...
*/
attr->value_tag = IPP_TAG_BOOLEAN;
if (strncasecmp(attr->name, "no", 2) == 0)
{
DEBUG_puts("cupsEncodeOptions: Added boolean false value...");
strcpy(attr->name, attr->name + 2);
attr->values[0].boolean = 0;
}
else
{
DEBUG_puts("cupsEncodeOptions: Added boolean true value...");
attr->values[0].boolean = 1;
}
}
else
{
/*
* Scan the value string for values...
*/
for (j = 0; *val != '\0'; val = sep, j ++)
{
/*
* Find the end of this value and mark it if needed...
*/
if ((sep = strchr(val, ',')) != NULL)
*sep++ = '\0';
else
sep = val + strlen(val);
/*
* See what kind of value it is...
*/
if (strcasecmp(val, "true") == 0 ||
strcasecmp(val, "on") == 0 ||
strcasecmp(val, "yes") == 0)
{
/*
* Boolean value - true...
*/
attr->value_tag = IPP_TAG_BOOLEAN;
attr->values[j].boolean = 1;
DEBUG_puts("cupsEncodeOptions: Added boolean true value...");
}
else if (strcasecmp(val, "false") == 0 ||
strcasecmp(val, "off") == 0 ||
strcasecmp(val, "no") == 0)
{
/*
* Boolean value - false...
*/
attr->value_tag = IPP_TAG_BOOLEAN;
attr->values[j].boolean = 0;
DEBUG_puts("cupsEncodeOptions: Added boolean false value...");
}
else
{
/*
* Number, range, resolution, or string...
*/
n = strtol(val, &s, 0);
if (*s != '\0' && *s != '-' && (*s != 'x' || s == val))
{
/*
* String value(s)...
*/
if ((attr->values[j].string.text = strdup(val)) == NULL)
{
/*
* Ran out of memory!
*/
DEBUG_puts("cupsEncodeOptions: Ran out of memory for string!");
return;
}
attr->value_tag = IPP_TAG_NAME;
DEBUG_printf(("cupsEncodeOptions: Added string value \'%s\'...\n", val));
}
else if (*s == '-')
{
attr->value_tag = IPP_TAG_RANGE;
attr->values[j].range.lower = n;
attr->values[j].range.upper = strtol(s + 1, NULL, 0);
DEBUG_printf(("cupsEncodeOptions: Added range option value %d-%d...\n",
n, attr->values[j].range.upper));
}
else if (*s == 'x')
{
attr->value_tag = IPP_TAG_RESOLUTION;
attr->values[j].resolution.xres = n;
attr->values[j].resolution.yres = strtol(s + 1, &s, 0);
if (strcasecmp(s, "dpc") == 0)
attr->values[j].resolution.units = IPP_RES_PER_CM;
else if (strcasecmp(s, "dpi") == 0)
attr->values[j].resolution.units = IPP_RES_PER_INCH;
else
{
if ((attr->values[j].string.text = strdup(val)) == NULL)
{
/*
* Ran out of memory!
*/
DEBUG_puts("cupsEncodeOptions: Ran out of memory for string!");
return;
}
attr->value_tag = IPP_TAG_NAME;
DEBUG_printf(("cupsEncodeOptions: Added string value \'%s\'...\n", val));
continue;
}
DEBUG_printf(("cupsEncodeOptions: Adding resolution option value %s...\n",
val));
}
else
{
attr->value_tag = IPP_TAG_INTEGER;
attr->values[j].integer = n;
DEBUG_printf(("cupsEncodeOptions: Adding integer option value %d...\n", n));
}
}
}
}
}
}
/*
* 'cupsFreeOptions()' - Free all memory used by options.
*/
@@ -442,17 +172,6 @@ cupsParseOptions(const char *arg, /* I - Argument to parse */
copyarg = strdup(arg);
ptr = copyarg;
/*
* Skip leading spaces...
*/
while (isspace(*ptr))
ptr ++;
/*
* Loop through the string...
*/
while (*ptr != '\0')
{
/*
+42 -86
Ver Arquivo
@@ -108,7 +108,6 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */
ppd_emul_t *emul; /* Current emulation */
ppd_group_t *group; /* Current group */
char **font; /* Current font */
char **filter; /* Current filter */
/*
@@ -122,10 +121,6 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */
* Free all strings at the top level...
*/
safe_free(ppd->patches);
safe_free(ppd->jcl_begin);
safe_free(ppd->jcl_ps);
safe_free(ppd->jcl_end);
safe_free(ppd->lang_encoding);
safe_free(ppd->lang_version);
safe_free(ppd->modelname);
@@ -176,18 +171,6 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */
if (ppd->num_consts > 0)
safe_free(ppd->consts);
/*
* Free any filters...
*/
if (ppd->num_filters > 0)
{
for (i = ppd->num_filters, filter = ppd->filters; i > 0; i --, filter ++)
safe_free(*filter);
safe_free(ppd->filters);
}
/*
* Free any fonts...
*/
@@ -1045,6 +1028,45 @@ ppdOpen(FILE *fp) /* I - File to read from */
}
else if (strcmp(keyword, "CloseGroup") == 0)
group = NULL;
else if (strcmp(keyword, "OpenSubGroup") == 0)
{
/*
* Open a new sub-group...
*/
DEBUG_printf(("group = %p, subgroup = %p\n", group, subgroup));
if (group == NULL || subgroup != NULL)
{
ppdClose(ppd);
safe_free(string);
return (NULL);
}
if (group->num_subgroups == 0)
subgroup = malloc(sizeof(ppd_group_t));
else
subgroup = realloc(group->subgroups,
(group->num_subgroups + 1) * sizeof(ppd_group_t));
if (subgroup == NULL)
{
ppdClose(ppd);
safe_free(string);
return (NULL);
}
group->subgroups = subgroup;
subgroup += group->num_subgroups;
group->num_subgroups ++;
memset(subgroup, 0, sizeof(ppd_group_t));
ppd_decode(string);
ppd_fix(string);
strncpy(subgroup->text, string, sizeof(subgroup->text) - 1);
}
else if (strcmp(keyword, "CloseSubGroup") == 0)
subgroup = NULL;
else if (strcmp(keyword, "OrderDependency") == 0 ||
strcmp(keyword, "NonUIOrderDependency") == 0)
{
@@ -1551,7 +1573,7 @@ ppd_read(FILE *fp, /* I - File to read from */
*textptr, /* Text pointer */
*strptr, /* Pointer into string */
*lineptr, /* Current position in line buffer */
line[65536]; /* Line buffer (64k) */
line[262144]; /* Line buffer (256k) */
/*
@@ -1566,8 +1588,6 @@ ppd_read(FILE *fp, /* I - File to read from */
* Now loop until we have a valid line...
*/
*string = NULL;
do
{
/*
@@ -1601,12 +1621,10 @@ ppd_read(FILE *fp, /* I - File to read from */
ungetc(ch, fp);
}
ch = '\n';
*lineptr++ = '\n';
if (!endquote) /* Continue for multi-line text */
break;
*lineptr++ = '\n';
}
else
{
@@ -1617,72 +1635,10 @@ ppd_read(FILE *fp, /* I - File to read from */
*lineptr++ = ch;
if (ch == '\"')
{
endquote = !endquote;
if (!endquote)
{
/*
* End of quoted string; ignore trailing characters...
*/
while ((ch = getc(fp)) != EOF)
if (ch == '\n')
break;
else if (ch == '\r')
{
ch = getc(fp);
if (ch != '\n')
ungetc(ch, fp);
break;
}
break;
}
}
endquote = !endquote;
}
}
if (endquote)
{
/*
* Didn't finish this quoted string...
*/
while ((ch = getc(fp)) != EOF)
if (ch == '\"')
break;
}
if (ch != '\n')
{
/*
* Didn't finish this line...
*/
while ((ch = getc(fp)) != EOF)
if (ch == '\r' || ch == '\n')
{
/*
* Line feed or carriage return...
*/
if (ch == '\r')
{
/*
* Check for a trailing line feed...
*/
if ((ch = getc(fp)) == EOF)
break;
if (ch != 0x0a)
ungetc(ch, fp);
}
break;
}
}
if (lineptr > line && lineptr[-1] == '\n')
lineptr --;
-2
Ver Arquivo
@@ -207,8 +207,6 @@ typedef struct /**** Files ****/
*/
extern void ppdClose(ppd_file_t *ppd);
extern int ppdCollect(ppd_file_t *ppd, ppd_section_t section,
ppd_choice_t ***choices);
extern int ppdConflicts(ppd_file_t *ppd);
extern int ppdEmit(ppd_file_t *ppd, FILE *fp,
ppd_section_t section);
-11
Ver Arquivo
@@ -171,17 +171,6 @@ main(int argc, /* I - Number of command-line arguments */
}
}
printf(" num_profiles = %d\n", ppd->num_profiles);
for (j = 0; j < ppd->num_profiles; j ++)
printf(" profiles[%d] = %s/%s %.3f %.3f [ %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f ]\n",
j, ppd->profiles[j].resolution, ppd->profiles[j].media_type,
ppd->profiles[j].gamma, ppd->profiles[j].density,
ppd->profiles[j].matrix[0][0], ppd->profiles[j].matrix[0][1],
ppd->profiles[j].matrix[0][2], ppd->profiles[j].matrix[1][0],
ppd->profiles[j].matrix[1][1], ppd->profiles[j].matrix[1][2],
ppd->profiles[j].matrix[2][0], ppd->profiles[j].matrix[2][1],
ppd->profiles[j].matrix[2][2]);
printf(" num_fonts = %d\n", ppd->num_fonts);
for (j = 0; j < ppd->num_fonts; j ++)
printf(" fonts[%d] = %s\n", j, ppd->fonts[j]);
+105 -315
Ver Arquivo
@@ -24,15 +24,9 @@
*
* Contents:
*
* cupsEncryption() - Get the default encryption settings...
* cupsGetPassword() - Get a password from the user...
* cupsServer() - Return the hostname of the default server...
* cupsSetEncryption() - Set the encryption preference.
* cupsSetPasswordCB() - Set the password callback for CUPS.
* cupsSetServer() - Set the default server name...
* cupsSetUser() - Set the default user name...
* cupsUser() - Return the current users name.
* cups_get_password() - Get a password from the user...
* cupsUser() - Return the current users name.
* cupsGetPassword() - Get a password from the user...
* cupsServer() - Return the hostname of the default server...
*/
/*
@@ -40,278 +34,11 @@
*/
#include "cups.h"
#include "string.h"
#include <config.h>
#include <stdlib.h>
#include <ctype.h>
/*
* Local functions...
*/
static const char *cups_get_password(const char *prompt);
/*
* Local globals...
*/
static http_encryption_t cups_encryption = (http_encryption_t)-1;
static char cups_user[65] = "",
cups_server[256] = "";
static const char *(*cups_pwdcb)(const char *) = cups_get_password;
/*
* 'cupsEncryption()' - Get the default encryption settings...
*/
http_encryption_t
cupsEncryption(void)
{
FILE *fp; /* client.conf file */
char *encryption; /* CUPS_ENCRYPTION variable */
const char *home; /* Home directory of user */
static char line[1024]; /* Line from file */
/*
* First see if we have already set the encryption stuff...
*/
if (cups_encryption == (http_encryption_t)-1)
{
/*
* Then see if the CUPS_ENCRYPTION environment variable is set...
*/
if ((encryption = getenv("CUPS_ENCRYPTION")) == NULL)
{
/*
* Next check to see if we have a $HOME/.cupsrc or client.conf file...
*/
if ((home = getenv("HOME")) != NULL)
{
snprintf(line, sizeof(line), "%s/.cupsrc", home);
fp = fopen(line, "r");
}
else
fp = NULL;
if (fp == NULL)
{
if ((home = getenv("CUPS_SERVERROOT")) != NULL)
{
snprintf(line, sizeof(line), "%s/client.conf", home);
fp = fopen(line, "r");
}
else
fp = fopen(CUPS_SERVERROOT "/client.conf", "r");
}
encryption = "IfRequested";
if (fp != NULL)
{
/*
* Read the config file and look for a ServerName line...
*/
while (fgets(line, sizeof(line), fp) != NULL)
if (strncmp(line, "Encryption ", 11) == 0)
{
/*
* Got it! Drop any trailing newline and find the name...
*/
encryption = line + strlen(line) - 1;
if (*encryption == '\n')
*encryption = '\0';
for (encryption = line + 11; isspace(*encryption); encryption ++);
break;
}
fclose(fp);
}
}
/*
* Set the encryption preference...
*/
if (strcasecmp(encryption, "never") == 0)
cups_encryption = HTTP_ENCRYPT_NEVER;
else if (strcasecmp(encryption, "always") == 0)
cups_encryption = HTTP_ENCRYPT_ALWAYS;
else if (strcasecmp(encryption, "required") == 0)
cups_encryption = HTTP_ENCRYPT_REQUIRED;
else
cups_encryption = HTTP_ENCRYPT_IF_REQUESTED;
}
return (cups_encryption);
}
/*
* 'cupsGetPassword()' - Get a password from the user...
*/
const char * /* O - Password */
cupsGetPassword(const char *prompt) /* I - Prompt string */
{
return ((*cups_pwdcb)(prompt));
}
/*
* 'cupsSetEncryption()' - Set the encryption preference.
*/
void
cupsSetEncryption(http_encryption_t e) /* I - New encryption preference */
{
cups_encryption = e;
}
/*
* 'cupsServer()' - Return the hostname of the default server...
*/
const char * /* O - Server name */
cupsServer(void)
{
FILE *fp; /* client.conf file */
char *server; /* Pointer to server name */
const char *home; /* Home directory of user */
static char line[1024]; /* Line from file */
/*
* First see if we have already set the server name...
*/
if (!cups_server[0])
{
/*
* Then see if the CUPS_SERVER environment variable is set...
*/
if ((server = getenv("CUPS_SERVER")) == NULL)
{
/*
* Next check to see if we have a $HOME/.cupsrc or client.conf file...
*/
if ((home = getenv("HOME")) != NULL)
{
snprintf(line, sizeof(line), "%s/.cupsrc", home);
fp = fopen(line, "r");
}
else
fp = NULL;
if (fp == NULL)
{
if ((home = getenv("CUPS_SERVERROOT")) != NULL)
{
snprintf(line, sizeof(line), "%s/client.conf", home);
fp = fopen(line, "r");
}
else
fp = fopen(CUPS_SERVERROOT "/client.conf", "r");
}
server = "localhost";
if (fp != NULL)
{
/*
* Read the config file and look for a ServerName line...
*/
while (fgets(line, sizeof(line), fp) != NULL)
if (strncmp(line, "ServerName ", 11) == 0)
{
/*
* Got it! Drop any trailing newline and find the name...
*/
server = line + strlen(line) - 1;
if (*server == '\n')
*server = '\0';
for (server = line + 11; isspace(*server); server ++);
break;
}
fclose(fp);
}
}
/*
* Copy the server name over...
*/
strncpy(cups_server, server, sizeof(cups_server) - 1);
cups_server[sizeof(cups_server) - 1] = '\0';
}
return (cups_server);
}
/*
* 'cupsSetPasswordCB()' - Set the password callback for CUPS.
*/
void
cupsSetPasswordCB(const char *(*cb)(const char *)) /* I - Callback function */
{
if (cb == (const char *(*)(const char *))0)
cups_pwdcb = cups_get_password;
else
cups_pwdcb = cb;
}
/*
* 'cupsSetServer()' - Set the default server name...
*/
void
cupsSetServer(const char *server) /* I - Server name */
{
if (server)
{
strncpy(cups_server, server, sizeof(cups_server) - 1);
cups_server[sizeof(cups_server) - 1] = '\0';
}
else
cups_server[0] = '\0';
}
/*
* 'cupsSetUser()' - Set the default user name...
*/
void
cupsSetUser(const char *user) /* I - User name */
{
if (user)
{
strncpy(cups_user, user, sizeof(cups_user) - 1);
cups_user[sizeof(cups_user) - 1] = '\0';
}
else
cups_user[0] = '\0';
}
#if defined(WIN32) || defined(__EMX__)
/*
* WIN32 and OS/2 username and password stuff...
@@ -324,19 +51,16 @@ cupsSetUser(const char *user) /* I - User name */
const char * /* O - User name */
cupsUser(void)
{
if (!cups_user[0])
strcpy(cups_user, "WindowsUser");
return (cups_user);
return ("WindowsUser");
}
/*
* 'cups_get_password()' - Get a password from the user...
* 'cupsGetPassword()' - Get a password from the user...
*/
static const char * /* O - Password */
cups_get_password(const char *prompt) /* I - Prompt string */
const char * /* O - Password */
cupsGetPassword(const char *prompt) /* I - Prompt string */
{
return (NULL);
}
@@ -357,55 +81,121 @@ cupsUser(void)
struct passwd *pwd; /* User/password entry */
if (!cups_user[0])
{
/*
* Rewind the password file...
*/
/*
* Rewind the password file...
*/
setpwent();
setpwent();
/*
* Lookup the password entry for the current user.
*/
/*
* Lookup the password entry for the current user.
*/
if ((pwd = getpwuid(getuid())) == NULL)
strcpy(cups_user, "unknown"); /* Unknown user! */
else
{
/*
* Copy the username...
*/
if ((pwd = getpwuid(getuid())) == NULL)
return ("unknown"); /* Unknown user! */
setpwent();
/*
* Rewind the password file again and return the username...
*/
strncpy(cups_user, pwd->pw_name, sizeof(cups_user) - 1);
cups_user[sizeof(cups_user) - 1] = '\0';
}
setpwent();
/*
* Rewind the password file again...
*/
setpwent();
}
return (cups_user);
return (pwd->pw_name);
}
/*
* 'cups_get_password()' - Get a password from the user...
* 'cupsGetPassword()' - Get a password from the user...
*/
static const char * /* O - Password */
cups_get_password(const char *prompt) /* I - Prompt string */
const char * /* O - Password */
cupsGetPassword(const char *prompt) /* I - Prompt string */
{
return (getpass(prompt));
}
#endif /* WIN32 || __EMX__ */
/*
* 'cupsServer()' - Return the hostname of the default server...
*/
const char * /* O - Server name */
cupsServer(void)
{
FILE *fp; /* client.conf file */
char *server; /* Pointer to server name */
const char *home; /* Home directory of user */
static char line[1024]; /* Line from file */
/*
* First see if the CUPS_SERVER environment variable is set...
*/
if ((server = getenv("CUPS_SERVER")) != NULL)
return (server);
/*
* Next check to see if we have a $HOME/.cupsrc or client.conf file...
*/
if ((home = getenv("HOME")) != NULL)
{
snprintf(line, sizeof(line), "%s/.cupsrc", home);
fp = fopen(line, "r");
}
else
fp = NULL;
if (fp == NULL)
{
if ((home = getenv("CUPS_SERVERROOT")) != NULL)
{
snprintf(line, sizeof(line), "%s/client.conf", home);
fp = fopen(line, "r");
}
else
fp = fopen(CUPS_SERVERROOT "/client.conf", "r");
}
if (fp == NULL)
return ("localhost");
/*
* Read the config file and look for a ServerName line...
*/
while (fgets(line, sizeof(line), fp) != NULL)
if (strncmp(line, "ServerName ", 11) == 0)
{
/*
* Got it! Drop any trailing newline and find the name...
*/
server = line + strlen(line) - 1;
if (*server == '\n')
*server = '\0';
for (server = line + 11; isspace(*server); server ++);
if (*server)
{
fclose(fp);
return (server);
}
}
/*
* Didn't see a ServerName line, so return "localhost"...
*/
fclose(fp);
return ("localhost");
}
/*
* End of "$Id$".
*/
+179 -250
Ver Arquivo
@@ -29,10 +29,8 @@
* cupsGetDefault() - Get the default printer or class.
* cupsGetPPD() - Get the PPD file for a printer.
* cupsGetPrinters() - Get a list of printers.
* cupsLastError() - Return the last IPP error that occurred.
* cupsPrintFile() - Print a file to a printer or class.
* cupsPrintFiles() - Print one or more files to a printer or class.
* cupsTempFile() - Generate a temporary filename.
* cups_connect() - Connect to the specified host...
* cups_local_auth() - Get the local authorization certificate if
* available/applicable...
@@ -50,7 +48,6 @@
#include <stdlib.h>
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/stat.h>
#if defined(WIN32) || defined(__EMX__)
# include <io.h>
@@ -177,19 +174,9 @@ cupsDoFileRequest(http_t *http, /* I - HTTP connection to server */
nonce[HTTP_MAX_VALUE], /* nonce="xyz" string */
plain[255], /* Plaintext username:password */
encode[255]; /* Encoded username:password */
char prompt[1024]; /* Prompt string */
if (http == NULL || request == NULL || resource == NULL)
{
if (request != NULL)
ippDelete(request);
last_error = IPP_INTERNAL_ERROR;
return (NULL);
}
DEBUG_printf(("cupsDoFileRequest(%p, %08s, \'%s\', \'%s\')\n",
DEBUG_printf(("cupsDoFileRequest(%08x, %08s, \'%s\', \'%s\')\n",
http, request, resource, filename ? filename : "(null)"));
/*
@@ -309,10 +296,10 @@ cupsDoFileRequest(http_t *http, /* I - HTTP connection to server */
* Nope - get a password from the user...
*/
snprintf(prompt, sizeof(prompt), "Password for %s on %s? ", cupsUser(),
http->hostname);
printf("Authentication required for %s on %s...\n", cupsUser(),
http->hostname);
if ((password = cupsGetPassword(prompt)) != NULL)
if ((password = cupsGetPassword("UNIX Password: ")) != NULL)
{
/*
* Got a password; send it to the server...
@@ -445,12 +432,6 @@ cupsGetClasses(char ***classes) /* O - Classes */
char **temp; /* Temporary pointer */
if (classes == NULL)
{
last_error = IPP_INTERNAL_ERROR;
return (0);
}
/*
* Try to connect to the server...
*/
@@ -467,7 +448,6 @@ cupsGetClasses(char ***classes) /* O - Classes */
*
* attributes-charset
* attributes-natural-language
* requested-attributes
*/
request = ippNew();
@@ -483,9 +463,6 @@ cupsGetClasses(char ***classes) /* O - Classes */
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
"requested-attributes", NULL, "printer-name");
/*
* Do the request and get back a response...
*/
@@ -572,10 +549,10 @@ cupsGetDefault(void)
* Next check to see if we have a client.conf file...
*/
if ((var = getenv("CUPS_SERVERROOT")) == NULL)
var = CUPS_SERVERROOT;
snprintf(line, sizeof(line), "%s/client.conf", var);
if ((var = getenv("CUPS_SERVERROOT")) != NULL)
snprintf(line, sizeof(line), "%s/client.conf", var);
else
strcpy(line, CUPS_SERVERROOT "/client.conf");
if ((fp = fopen(line, "r")) != NULL)
{
@@ -673,42 +650,22 @@ cupsGetDefault(void)
const char * /* O - Filename for PPD file */
cupsGetPPD(const char *name) /* I - Printer name */
{
int i; /* Looping var */
ipp_t *request, /* IPP request */
*response; /* IPP response */
ipp_attribute_t *attr; /* Current attribute */
cups_lang_t *language; /* Local language */
FILE *fp; /* PPD file */
int bytes; /* Number of bytes read */
char buffer[8192]; /* Buffer for file */
char printer[HTTP_MAX_URI], /* Printer name */
method[HTTP_MAX_URI], /* Method/scheme name */
username[HTTP_MAX_URI], /* Username:password */
hostname[HTTP_MAX_URI], /* Hostname */
resource[HTTP_MAX_URI]; /* Resource name */
int port; /* Port number */
char *tempdir; /* Temporary file directory */
const char *password; /* Password string */
char realm[HTTP_MAX_VALUE], /* realm="xyz" string */
nonce[HTTP_MAX_VALUE], /* nonce="xyz" string */
plain[255], /* Plaintext username:password */
encode[255]; /* Encoded username:password */
http_status_t status; /* HTTP status from server */
char prompt[1024]; /* Prompt string */
static char filename[HTTP_MAX_URI]; /* Local filename */
static const char *requested_attrs[] =/* Requested attributes */
{
"printer-uri-supported",
"printer-type",
"member-uris"
};
if (name == NULL)
{
last_error = IPP_INTERNAL_ERROR;
return (NULL);
}
/*
* See if we can connect to the server...
*/
@@ -720,119 +677,19 @@ cupsGetPPD(const char *name) /* I - Printer name */
}
/*
* Build an IPP_GET_PRINTER_ATTRIBUTES request, which requires the following
* attributes:
*
* attributes-charset
* attributes-natural-language
* printer-uri
* requested-attributes
* Then check for the cache file...
*/
request = ippNew();
#if defined(WIN32) || defined(__EMX__)
tempdir = "C:/WINDOWS/TEMP";
request->request.op.operation_id = IPP_GET_PRINTER_ATTRIBUTES;
request->request.op.request_id = 1;
snprintf(filename, sizeof(filename), "%s/%s.ppd", tempdir, printer);
#else
if ((tempdir = getenv("TMPDIR")) == NULL)
tempdir = "/tmp";
language = cupsLangDefault();
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);
snprintf(buffer, sizeof(buffer), "ipp://localhost/printers/%s", name);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
"printer-uri", NULL, buffer);
ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
"requested-attributes",
sizeof(requested_attrs) / sizeof(requested_attrs[0]),
NULL, requested_attrs);
/*
* Do the request and get back a response...
*/
if ((response = cupsDoRequest(cups_server, request, "/")) != NULL)
{
last_error = response->request.status.status_code;
printer[0] = '\0';
hostname[0] = '\0';
if ((attr = ippFindAttribute(response, "member-uris", IPP_TAG_URI)) != NULL)
{
/*
* Get the first actual server and printer name in the class...
*/
for (i = 0; i < attr->num_values; i ++)
{
httpSeparate(attr->values[0].string.text, method, username, hostname,
&port, resource);
if (strncmp(resource, "/printers/", 10) == 0)
{
/*
* Found a printer!
*/
strncpy(printer, resource + 10, sizeof(printer) - 1);
printer[sizeof(printer) - 1] = '\0';
break;
}
}
}
else if ((attr = ippFindAttribute(response, "printer-uri-supported",
IPP_TAG_URI)) != NULL)
{
/*
* Get the actual server and printer names...
*/
httpSeparate(attr->values[0].string.text, method, username, hostname,
&port, resource);
strncpy(printer, strrchr(resource, '/') + 1, sizeof(printer) - 1);
printer[sizeof(printer) - 1] = '\0';
}
ippDelete(response);
/*
* Remap local hostname to localhost...
*/
gethostname(buffer, sizeof(buffer));
if (strcasecmp(buffer, hostname) == 0)
strcpy(hostname, "localhost");
}
cupsLangFree(language);
if (!printer[0])
return (NULL);
/*
* Reconnect to the correct server as needed...
*/
if (strcasecmp(cups_server->hostname, hostname) != 0)
{
httpClose(cups_server);
if ((cups_server = httpConnect(hostname, ippPort())) == NULL)
{
last_error = IPP_SERVICE_UNAVAILABLE;
return (NULL);
}
}
/*
* Get a temp file...
*/
cupsTempFile(filename, sizeof(filename));
snprintf(filename, sizeof(filename), "%s/%d.%s.ppd", tempdir, getuid(), printer);
#endif /* WIN32 || __EMX__ */
/*
* And send a request to the HTTP server...
@@ -875,10 +732,10 @@ cupsGetPPD(const char *name) /* I - Printer name */
* Nope, get a password from the user...
*/
snprintf(prompt, sizeof(prompt), "Password for %s on %s? ", cupsUser(),
cups_server->hostname);
printf("Authentication required for %s on %s...\n", cupsUser(),
cups_server->hostname);
if ((password = cupsGetPassword(prompt)) != NULL)
if ((password = cupsGetPassword("UNIX Password: ")) != NULL)
{
/*
* Got a password; send it to the server...
@@ -924,13 +781,13 @@ cupsGetPPD(const char *name) /* I - Printer name */
* OK, we need to copy the file; open the file and copy it...
*/
unlink(filename);
if ((fp = fopen(filename, "w")) == NULL)
{
/*
* Can't open file; close the server connection and return NULL...
*/
httpFlush(cups_server);
httpClose(cups_server);
cups_server = NULL;
return (NULL);
@@ -960,12 +817,6 @@ cupsGetPrinters(char ***printers) /* O - Printers */
char **temp; /* Temporary pointer */
if (printers == NULL)
{
last_error = IPP_INTERNAL_ERROR;
return (0);
}
/*
* Try to connect to the server...
*/
@@ -982,7 +833,6 @@ cupsGetPrinters(char ***printers) /* O - Printers */
*
* attributes-charset
* attributes-natural-language
* requested-attributes
*/
request = ippNew();
@@ -998,9 +848,6 @@ cupsGetPrinters(char ***printers) /* O - Printers */
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
"requested-attributes", NULL, "printer-name");
/*
* Do the request and get back a response...
*/
@@ -1075,7 +922,7 @@ cupsPrintFile(const char *name, /* I - Printer or class name */
int num_options,/* I - Number of options */
cups_option_t *options) /* I - Options */
{
DEBUG_printf(("cupsPrintFile(\'%s\', \'%s\', %d, %p)\n",
DEBUG_printf(("cupsPrintFile(\'%s\', \'%s\', %d, %08x)\n",
printer, filename, num_options, options));
return (cupsPrintFiles(name, 1, &filename, title, num_options, options));
@@ -1095,6 +942,9 @@ cupsPrintFiles(const char *name, /* I - Printer or class name */
cups_option_t *options) /* I - Options */
{
int i; /* Looping var */
int n, n2; /* Attribute values */
char *option, /* Name of option */
*s; /* Pointer into option value */
const char *val; /* Pointer to option value */
ipp_t *request; /* IPP request */
ipp_t *response; /* IPP response */
@@ -1106,7 +956,7 @@ cupsPrintFiles(const char *name, /* I - Printer or class name */
int jobid; /* New job ID */
DEBUG_printf(("cupsPrintFiles(\'%s\', %d, %p, %d, %p)\n",
DEBUG_printf(("cupsPrintFiles(\'%s\', %d, %p, %d, %08x)\n",
printer, num_files, files, num_options, options));
if (name == NULL || num_files < 1 || files == NULL)
@@ -1150,6 +1000,20 @@ cupsPrintFiles(const char *name, /* I - Printer or class name */
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
NULL, uri);
/*
* Handle raw print files...
*/
if (cupsGetOption("raw", num_options, options))
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
NULL, "application/vnd.cups-raw");
else if ((val = cupsGetOption("document-format", num_options, options)) != NULL)
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
NULL, val);
else
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
NULL, "application/octet-stream");
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
NULL, cupsUser());
@@ -1157,10 +1021,129 @@ cupsPrintFiles(const char *name, /* I - Printer or class name */
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name", NULL, title);
/*
* Then add all options...
* Then add all options on the command-line...
*/
cupsEncodeOptions(request, num_options, options);
for (i = 0; i < num_options; i ++)
{
/*
* Skip the "raw" option - handled above...
*/
if (strcasecmp(options[i].name, "raw") == 0 ||
strcasecmp(options[i].name, "document-format") == 0)
continue;
/*
* See what the option value is; for compatibility with older interface
* scripts, we have to support single-argument options as well as
* option=value, option=low-high, and option=MxN.
*/
option = options[i].name;
val = options[i].value;
if (*val == '\0')
val = NULL;
if (val != NULL)
{
if (strcasecmp(val, "true") == 0 ||
strcasecmp(val, "on") == 0 ||
strcasecmp(val, "yes") == 0)
{
/*
* Boolean value - true...
*/
n = 1;
val = "";
}
else if (strcasecmp(val, "false") == 0 ||
strcasecmp(val, "off") == 0 ||
strcasecmp(val, "no") == 0)
{
/*
* Boolean value - false...
*/
n = 0;
val = "";
}
n = strtol(val, &s, 0);
}
else
{
if (strncasecmp(option, "no", 2) == 0)
{
option += 2;
n = 0;
}
else
n = 1;
s = "";
}
if (*s != '\0' && *s != '-' && (*s != 'x' || s == val))
{
/*
* String value(s)...
*/
DEBUG_printf(("cupsPrintFile: Adding string option \'%s\' with value \'%s\'...\n",
option, val));
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, option, NULL, val);
}
else if (val != NULL)
{
/*
* Numeric value, range, or resolution...
*/
if (*s == '-')
{
n2 = strtol(s + 1, NULL, 0);
ippAddRange(request, IPP_TAG_JOB, option, n, n2);
DEBUG_printf(("cupsPrintFile: Adding range option \'%s\' with value %d-%d...\n",
option, n, n2));
}
else if (*s == 'x')
{
n2 = strtol(s + 1, &s, 0);
if (strcasecmp(s, "dpc") == 0)
ippAddResolution(request, IPP_TAG_JOB, option, IPP_RES_PER_CM, n, n2);
else if (strcasecmp(s, "dpi") == 0)
ippAddResolution(request, IPP_TAG_JOB, option, IPP_RES_PER_INCH, n, n2);
else
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, option, NULL, val);
DEBUG_printf(("cupsPrintFile: Adding resolution option \'%s\' with value %s...\n",
option, val));
}
else
{
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, option, n);
DEBUG_printf(("cupsPrintFile: Adding integer option \'%s\' with value %d...\n",
option, n));
}
}
else
{
/*
* Boolean value...
*/
DEBUG_printf(("cupsPrintFile: Adding boolean option \'%s\' with value %d...\n",
option, n));
ippAddBoolean(request, IPP_TAG_JOB, option, (char)n);
}
}
/*
* Do the request...
@@ -1270,13 +1253,7 @@ char * /* O - Filename */
cupsTempFile(char *filename, /* I - Pointer to buffer */
int len) /* I - Size of buffer */
{
int fd; /* File descriptor for temp file */
#ifdef WIN32
char tmpdir[1024]; /* Windows temporary directory */
#else
char *tmpdir; /* TMPDIR environment var */
#endif /* WIN32 */
struct timeval curtime; /* Current time */
static char buf[1024] = ""; /* Buffer if you pass in NULL and 0 */
@@ -1294,65 +1271,27 @@ cupsTempFile(char *filename, /* I - Pointer to buffer */
* See if TMPDIR is defined...
*/
#ifdef WIN32
GetTempPath(sizeof(tmpdir), tmpdir);
#else
if ((tmpdir = getenv("TMPDIR")) == NULL)
tmpdir = "/var/tmp";
if ((int)(strlen(tmpdir) + 8) > len)
{
/*
* Put root temp files in restricted temp directory...
* The specified directory exceeds the size of the buffer; default it...
*/
if (getuid() == 0)
tmpdir = CUPS_REQUESTS "/tmp";
else
tmpdir = "/var/tmp";
strcpy(buf, "/var/tmp/XXXXXX");
return (mktemp(buf));
}
#endif /* WIN32 */
/*
* Make the temporary name using the specified directory...
*/
do
else
{
/*
* Get the current time of day...
* Make the temporary name using the specified directory...
*/
gettimeofday(&curtime, NULL);
/*
* Format a string using the hex time values...
*/
snprintf(filename, len - 1, "%s/%08lx%05lx", tmpdir,
curtime.tv_sec, curtime.tv_usec);
/*
* Open the file in "exclusive" mode, making sure that we don't
* stomp on an existing file or someone's symlink crack...
*/
#ifdef O_NOFOLLOW
fd = open(filename, O_WRONLY | O_CREAT | O_EXCL | O_NOFOLLOW, 0600);
#else
fd = open(filename, O_WRONLY | O_CREAT | O_EXCL, 0600);
#endif /* O_NOFOLLOW */
sprintf(filename, "%s/XXXXXX", tmpdir);
return (mktemp(filename));
}
while (fd < 0);
/*
* Close the temp file - it'll be reopened later as needed...
*/
close(fd);
/*
* Return the temp filename...
*/
return (filename);
}
@@ -1413,10 +1352,7 @@ cups_connect(const char *name, /* I - Destination (printer[@host]) */
return (NULL);
}
else
{
httpEncryption(cups_server, cupsEncryption());
return (printer);
}
}
@@ -1435,11 +1371,10 @@ cups_local_auth(http_t *http) /* I - Connection */
return (0);
#else
int pid; /* Current process ID */
FILE *fp; /* Certificate file */
char filename[1024], /* Certificate filename */
certificate[33];/* Certificate string */
const char *root; /* Server root directory */
int pid; /* Current process ID */
FILE *fp; /* Certificate file */
char filename[1024], /* Certificate filename */
certificate[33]; /* Certificate string */
/*
@@ -1455,16 +1390,10 @@ cups_local_auth(http_t *http) /* I - Connection */
* try the root certificate...
*/
if ((root = getenv("CUPS_SERVERROOT")) == NULL)
root = CUPS_SERVERROOT;
pid = getpid();
snprintf(filename, sizeof(filename), "%s/certs/%d", root, pid);
sprintf(filename, CUPS_SERVERROOT "/certs/%d", pid);
if ((fp = fopen(filename, "r")) == NULL && pid > 0)
{
snprintf(filename, sizeof(filename), "%s/certs/0", root);
fp = fopen(filename, "r");
}
fp = fopen(CUPS_SERVERROOT "/certs/0", "r");
if (fp == NULL)
return (0);
@@ -1480,7 +1409,7 @@ cups_local_auth(http_t *http) /* I - Connection */
* Set the authorization string and return...
*/
snprintf(authstring, sizeof(authstring), "Local %s", certificate);
sprintf(authstring, "Local %s", certificate);
return (1);
#endif /* WIN32 || __EMX__ */
+1 -5
Ver Arquivo
@@ -94,11 +94,7 @@ install:
-if test "$(PAMDIR)" != ""; then \
$(MKDIR) $(PAMDIR); \
$(CHMOD) ugo+rx $(PAMDIR); \
if test -f /lib/security/pam_unix.so; then \
$(INSTALL_DATA) cups.suse $(PAMDIR)/cups; \
else \
$(INSTALL_DATA) cups.pam $(PAMDIR)/cups; \
fi \
$(INSTALL_DATA) cups.pam $(PAMDIR)/cups; \
fi
+25 -33
Ver Arquivo
@@ -22,28 +22,28 @@
% to third parties or copied or duplicated in any form, in whole or
% in part, without the prior written consent of Easy Software Products.
%
/CENTER { % Draw centered text
/CENTER \{ % Draw centered text
% (name) CENTER -
dup stringwidth pop % Get the width of the string
0.5 mul neg 0 rmoveto % Shift left 1/2 of the distance
show % Show the string
} bind def
/RIGHT { % Draw right-justified text
/RIGHT \{ % Draw right-justified text
% (name) RIGHT -
dup stringwidth pop % Get the width of the string
neg 0 rmoveto % Shift left the entire distance
show % Show the string
} bind def
/NUMBER { % Draw a number
/NUMBER \{ % Draw a number
% power n NUMBER -
1 index 1 eq { % power == 1?
1 index 1 eq \{ % power == 1?
round cvi exch pop % Convert "n" to integer
} {
} \{
1 index mul round exch div % Truncate extra decimal places
} ifelse
100 string cvs show % Convert to a string and show it...
} bind def
/CUPSLOGO { % Draw the CUPS logo
/CUPSLOGO \{ % Draw the CUPS logo
% height CUPSLOGO
% Start with a big C...
/Helvetica findfont 1 index scalefont setfont
@@ -61,14 +61,14 @@
dup 1.2 mul moveto
(System) show
} bind def
/ESPLOGO { % Draw the ESP logo
/ESPLOGO \{ % Draw the ESP logo
% height ESPLOGO
% Compute the size of the logo...
0 0
2 index 1.5 mul 3 index
% Do the "metallic" fill from 10% black to 40% black...
1 -0.001 0 {
1 -0.001 0 \{
dup % loopval
-0.15 mul % loopval * -0.15
0.9 add % 0.9 - loopval * 0.15
@@ -151,20 +151,14 @@ gsave
/pageWidth pageRight pageLeft sub def % pageWidth = pageRight - pageLeft
/pageHeight pageTop pageBottom sub def% pageHeight = pageTop - pageBottom
/boxWidth % width of text box
pageWidth pageHeight lt
{ pageWidth 54 mul }
{ pageHeight 42 mul }
ifelse def
newpath % Clear bounding path
% Create fonts...
/bigFont /Helvetica-Bold findfont % bigFont = Helvetica-Bold
pageHeight 3 mul scalefont def % size = pageHeight * 3 (nominally 33)
pageWidth 4 mul scalefont def % size = pageWidth * 4 (nominally 34)
/mediumFont /Helvetica findfont % mediumFont = Helvetica
pageHeight 1.5 mul scalefont def % size = pageHeight * 1.5 (nominally 16.5)
pageWidth 2 mul scalefont def % size = pageWidth * 2 (nominally 17)
% Offset page to account for lower-left margin...
pageLeft 72 mul
@@ -176,30 +170,28 @@ gsave
pageWidth 36 mul % Center of page
pageHeight 72 mul % Top of page
pageWidth -7 mul add % - 2 lines
pageWidth -9 mul add % - 1 line
moveto % Position text
bigFont setfont % Font
(Classified) CENTER % Show text centered
pageWidth 36 mul % Center of page
pageHeight 6 mul % Bottom of page
pageWidth 8 mul % Bottom of page
moveto % Position text
bigFont setfont % Font
(Classified) CENTER % Show text centered
% Job information box...
pageWidth 36 mul 9 add % x = pageWidth * 1/2 * 72 + 9
boxWidth 0.5 mul sub % x-= 1/2 box width
pageHeight 30 mul 9 sub % y = pageHeight * 1/2 * 72 - 9
boxWidth % w = box width
pageHeight 14 mul % h = pageHeight * 1/2 * 72
pageWidth 18 mul 9 add % x = pageWidth * 1/4 * 72 + 9
pageHeight 27 mul 9 sub % y = pageHeight * 3/8 * 72 - 9
pageWidth 36 mul % w = pageWidth * 1/2 * 72
pageHeight 18 mul % h = pageHeight * 1/4 * 72
0.5 setgray rectfill % Draw a shadow
pageWidth 36 mul % x = pageWidth * 1/2 * 72
boxWidth 0.5 mul sub % x-= 1/2 box width
pageHeight 30 mul % y = pageHeight * 1/4 * 72
boxWidth % w = box width
pageHeight 14 mul % h = pageHeight * 1/2 * 72
pageWidth 18 mul % x = pageWidth * 1/4 * 72
pageHeight 27 mul % y = pageHeight * 3/8 * 72
pageWidth 36 mul % w = pageWidth * 1/2 * 72
pageHeight 18 mul % h = pageHeight * 1/4 * 72
4 copy 1 setgray rectfill % Clear the box to white
0 setgray rectstroke % Draw a black box around it...
@@ -209,7 +201,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageHeight 5 mul add % y += 2 lines
pageWidth 4 mul add % y += 2 lines
2 copy % Copy X & Y
moveto
(Job ID: ) RIGHT
@@ -218,7 +210,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageHeight 2 mul add % y += 1 line
pageWidth 1 mul add % y += 1 line
2 copy % Copy X & Y
moveto
(Title: ) RIGHT
@@ -227,7 +219,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageHeight -1 mul add % y -= 1 line
pageWidth -2 mul add % y -= 1 line
2 copy % Copy X & Y
moveto
(Requesting User: ) RIGHT
@@ -236,7 +228,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageHeight -4 mul add % y -= 2 lines
pageWidth -5 mul add % y -= 2 lines
2 copy % Copy X & Y
moveto
(Billing Info: ) RIGHT
@@ -262,6 +254,6 @@ gsave
grestore
showpage
%
% End of "$Id: classified 1379 2000-09-18 17:12:42Z mike $".
% End of "$Id: classified 1075 2000-05-11 20:02:21Z mike $".
%
%%EOF
+25 -33
Ver Arquivo
@@ -22,28 +22,28 @@
% to third parties or copied or duplicated in any form, in whole or
% in part, without the prior written consent of Easy Software Products.
%
/CENTER { % Draw centered text
/CENTER \{ % Draw centered text
% (name) CENTER -
dup stringwidth pop % Get the width of the string
0.5 mul neg 0 rmoveto % Shift left 1/2 of the distance
show % Show the string
} bind def
/RIGHT { % Draw right-justified text
/RIGHT \{ % Draw right-justified text
% (name) RIGHT -
dup stringwidth pop % Get the width of the string
neg 0 rmoveto % Shift left the entire distance
show % Show the string
} bind def
/NUMBER { % Draw a number
/NUMBER \{ % Draw a number
% power n NUMBER -
1 index 1 eq { % power == 1?
1 index 1 eq \{ % power == 1?
round cvi exch pop % Convert "n" to integer
} {
} \{
1 index mul round exch div % Truncate extra decimal places
} ifelse
100 string cvs show % Convert to a string and show it...
} bind def
/CUPSLOGO { % Draw the CUPS logo
/CUPSLOGO \{ % Draw the CUPS logo
% height CUPSLOGO
% Start with a big C...
/Helvetica findfont 1 index scalefont setfont
@@ -61,14 +61,14 @@
dup 1.2 mul moveto
(System) show
} bind def
/ESPLOGO { % Draw the ESP logo
/ESPLOGO \{ % Draw the ESP logo
% height ESPLOGO
% Compute the size of the logo...
0 0
2 index 1.5 mul 3 index
% Do the "metallic" fill from 10% black to 40% black...
1 -0.001 0 {
1 -0.001 0 \{
dup % loopval
-0.15 mul % loopval * -0.15
0.9 add % 0.9 - loopval * 0.15
@@ -151,20 +151,14 @@ gsave
/pageWidth pageRight pageLeft sub def % pageWidth = pageRight - pageLeft
/pageHeight pageTop pageBottom sub def% pageHeight = pageTop - pageBottom
/boxWidth % width of text box
pageWidth pageHeight lt
{ pageWidth 54 mul }
{ pageHeight 42 mul }
ifelse def
newpath % Clear bounding path
% Create fonts...
/bigFont /Helvetica-Bold findfont % bigFont = Helvetica-Bold
pageHeight 3 mul scalefont def % size = pageHeight * 3 (nominally 33)
pageWidth 4 mul scalefont def % size = pageWidth * 4 (nominally 34)
/mediumFont /Helvetica findfont % mediumFont = Helvetica
pageHeight 1.5 mul scalefont def % size = pageHeight * 1.5 (nominally 16.5)
pageWidth 2 mul scalefont def % size = pageWidth * 2 (nominally 17)
% Offset page to account for lower-left margin...
pageLeft 72 mul
@@ -176,30 +170,28 @@ gsave
pageWidth 36 mul % Center of page
pageHeight 72 mul % Top of page
pageWidth -7 mul add % - 2 lines
pageWidth -9 mul add % - 1 line
moveto % Position text
bigFont setfont % Font
(Confidential) CENTER % Show text centered
pageWidth 36 mul % Center of page
pageHeight 6 mul % Bottom of page
pageWidth 8 mul % Bottom of page
moveto % Position text
bigFont setfont % Font
(Confidential) CENTER % Show text centered
% Job information box...
pageWidth 36 mul 9 add % x = pageWidth * 1/2 * 72 + 9
boxWidth 0.5 mul sub % x-= 1/2 box width
pageHeight 30 mul 9 sub % y = pageHeight * 1/2 * 72 - 9
boxWidth % w = box width
pageHeight 14 mul % h = pageHeight * 1/2 * 72
pageWidth 18 mul 9 add % x = pageWidth * 1/4 * 72 + 9
pageHeight 27 mul 9 sub % y = pageHeight * 3/8 * 72 - 9
pageWidth 36 mul % w = pageWidth * 1/2 * 72
pageHeight 18 mul % h = pageHeight * 1/4 * 72
0.5 setgray rectfill % Draw a shadow
pageWidth 36 mul % x = pageWidth * 1/2 * 72
boxWidth 0.5 mul sub % x-= 1/2 box width
pageHeight 30 mul % y = pageHeight * 1/4 * 72
boxWidth % w = box width
pageHeight 14 mul % h = pageHeight * 1/2 * 72
pageWidth 18 mul % x = pageWidth * 1/4 * 72
pageHeight 27 mul % y = pageHeight * 3/8 * 72
pageWidth 36 mul % w = pageWidth * 1/2 * 72
pageHeight 18 mul % h = pageHeight * 1/4 * 72
4 copy 1 setgray rectfill % Clear the box to white
0 setgray rectstroke % Draw a black box around it...
@@ -209,7 +201,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageHeight 5 mul add % y += 2 lines
pageWidth 4 mul add % y += 2 lines
2 copy % Copy X & Y
moveto
(Job ID: ) RIGHT
@@ -218,7 +210,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageHeight 2 mul add % y += 1 line
pageWidth 1 mul add % y += 1 line
2 copy % Copy X & Y
moveto
(Title: ) RIGHT
@@ -227,7 +219,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageHeight -1 mul add % y -= 1 line
pageWidth -2 mul add % y -= 1 line
2 copy % Copy X & Y
moveto
(Requesting User: ) RIGHT
@@ -236,7 +228,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageHeight -4 mul add % y -= 2 lines
pageWidth -5 mul add % y -= 2 lines
2 copy % Copy X & Y
moveto
(Billing Info: ) RIGHT
@@ -262,6 +254,6 @@ gsave
grestore
showpage
%
% End of "$Id: confidential 1379 2000-09-18 17:12:42Z mike $".
% End of "$Id: confidential 1075 2000-05-11 20:02:21Z mike $".
%
%%EOF
-2
Ver Arquivo
@@ -1,2 +0,0 @@
auth required /lib/security/pam_unix.so nullok shadow
account required /lib/security/pam_unix.so
+25 -33
Ver Arquivo
@@ -22,28 +22,28 @@
% to third parties or copied or duplicated in any form, in whole or
% in part, without the prior written consent of Easy Software Products.
%
/CENTER { % Draw centered text
/CENTER \{ % Draw centered text
% (name) CENTER -
dup stringwidth pop % Get the width of the string
0.5 mul neg 0 rmoveto % Shift left 1/2 of the distance
show % Show the string
} bind def
/RIGHT { % Draw right-justified text
/RIGHT \{ % Draw right-justified text
% (name) RIGHT -
dup stringwidth pop % Get the width of the string
neg 0 rmoveto % Shift left the entire distance
show % Show the string
} bind def
/NUMBER { % Draw a number
/NUMBER \{ % Draw a number
% power n NUMBER -
1 index 1 eq { % power == 1?
1 index 1 eq \{ % power == 1?
round cvi exch pop % Convert "n" to integer
} {
} \{
1 index mul round exch div % Truncate extra decimal places
} ifelse
100 string cvs show % Convert to a string and show it...
} bind def
/CUPSLOGO { % Draw the CUPS logo
/CUPSLOGO \{ % Draw the CUPS logo
% height CUPSLOGO
% Start with a big C...
/Helvetica findfont 1 index scalefont setfont
@@ -61,14 +61,14 @@
dup 1.2 mul moveto
(System) show
} bind def
/ESPLOGO { % Draw the ESP logo
/ESPLOGO \{ % Draw the ESP logo
% height ESPLOGO
% Compute the size of the logo...
0 0
2 index 1.5 mul 3 index
% Do the "metallic" fill from 10% black to 40% black...
1 -0.001 0 {
1 -0.001 0 \{
dup % loopval
-0.15 mul % loopval * -0.15
0.9 add % 0.9 - loopval * 0.15
@@ -151,20 +151,14 @@ gsave
/pageWidth pageRight pageLeft sub def % pageWidth = pageRight - pageLeft
/pageHeight pageTop pageBottom sub def% pageHeight = pageTop - pageBottom
/boxWidth % width of text box
pageWidth pageHeight lt
{ pageWidth 54 mul }
{ pageHeight 42 mul }
ifelse def
newpath % Clear bounding path
% Create fonts...
/bigFont /Helvetica-Bold findfont % bigFont = Helvetica-Bold
pageHeight 3 mul scalefont def % size = pageHeight * 3 (nominally 33)
pageWidth 4 mul scalefont def % size = pageWidth * 4 (nominally 34)
/mediumFont /Helvetica findfont % mediumFont = Helvetica
pageHeight 1.5 mul scalefont def % size = pageHeight * 1.5 (nominally 16.5)
pageWidth 2 mul scalefont def % size = pageWidth * 2 (nominally 17)
% Offset page to account for lower-left margin...
pageLeft 72 mul
@@ -176,30 +170,28 @@ gsave
pageWidth 36 mul % Center of page
pageHeight 72 mul % Top of page
pageWidth -7 mul add % - 2 lines
pageWidth -9 mul add % - 1 line
moveto % Position text
bigFont setfont % Font
(Secret) CENTER % Show text centered
pageWidth 36 mul % Center of page
pageHeight 6 mul % Bottom of page
pageWidth 8 mul % Bottom of page
moveto % Position text
bigFont setfont % Font
(Secret) CENTER % Show text centered
% Job information box...
pageWidth 36 mul 9 add % x = pageWidth * 1/2 * 72 + 9
boxWidth 0.5 mul sub % x-= 1/2 box width
pageHeight 30 mul 9 sub % y = pageHeight * 1/2 * 72 - 9
boxWidth % w = box width
pageHeight 14 mul % h = pageHeight * 1/2 * 72
pageWidth 18 mul 9 add % x = pageWidth * 1/4 * 72 + 9
pageHeight 27 mul 9 sub % y = pageHeight * 3/8 * 72 - 9
pageWidth 36 mul % w = pageWidth * 1/2 * 72
pageHeight 18 mul % h = pageHeight * 1/4 * 72
0.5 setgray rectfill % Draw a shadow
pageWidth 36 mul % x = pageWidth * 1/2 * 72
boxWidth 0.5 mul sub % x-= 1/2 box width
pageHeight 30 mul % y = pageHeight * 1/4 * 72
boxWidth % w = box width
pageHeight 14 mul % h = pageHeight * 1/2 * 72
pageWidth 18 mul % x = pageWidth * 1/4 * 72
pageHeight 27 mul % y = pageHeight * 3/8 * 72
pageWidth 36 mul % w = pageWidth * 1/2 * 72
pageHeight 18 mul % h = pageHeight * 1/4 * 72
4 copy 1 setgray rectfill % Clear the box to white
0 setgray rectstroke % Draw a black box around it...
@@ -209,7 +201,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageHeight 5 mul add % y += 2 lines
pageWidth 4 mul add % y += 2 lines
2 copy % Copy X & Y
moveto
(Job ID: ) RIGHT
@@ -218,7 +210,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageHeight 2 mul add % y += 1 line
pageWidth 1 mul add % y += 1 line
2 copy % Copy X & Y
moveto
(Title: ) RIGHT
@@ -227,7 +219,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageHeight -1 mul add % y -= 1 line
pageWidth -2 mul add % y -= 1 line
2 copy % Copy X & Y
moveto
(Requesting User: ) RIGHT
@@ -236,7 +228,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageHeight -4 mul add % y -= 2 lines
pageWidth -5 mul add % y -= 2 lines
2 copy % Copy X & Y
moveto
(Billing Info: ) RIGHT
@@ -262,6 +254,6 @@ gsave
grestore
showpage
%
% End of "$Id: secret 1379 2000-09-18 17:12:42Z mike $".
% End of "$Id: secret 1075 2000-05-11 20:02:21Z mike $".
%
%%EOF
+39 -31
Ver Arquivo
@@ -22,28 +22,28 @@
% to third parties or copied or duplicated in any form, in whole or
% in part, without the prior written consent of Easy Software Products.
%
/CENTER { % Draw centered text
/CENTER \{ % Draw centered text
% (name) CENTER -
dup stringwidth pop % Get the width of the string
0.5 mul neg 0 rmoveto % Shift left 1/2 of the distance
show % Show the string
} bind def
/RIGHT { % Draw right-justified text
/RIGHT \{ % Draw right-justified text
% (name) RIGHT -
dup stringwidth pop % Get the width of the string
neg 0 rmoveto % Shift left the entire distance
show % Show the string
} bind def
/NUMBER { % Draw a number
/NUMBER \{ % Draw a number
% power n NUMBER -
1 index 1 eq { % power == 1?
1 index 1 eq \{ % power == 1?
round cvi exch pop % Convert "n" to integer
} {
} \{
1 index mul round exch div % Truncate extra decimal places
} ifelse
100 string cvs show % Convert to a string and show it...
} bind def
/CUPSLOGO { % Draw the CUPS logo
/CUPSLOGO \{ % Draw the CUPS logo
% height CUPSLOGO
% Start with a big C...
/Helvetica findfont 1 index scalefont setfont
@@ -61,14 +61,14 @@
dup 1.2 mul moveto
(System) show
} bind def
/ESPLOGO { % Draw the ESP logo
/ESPLOGO \{ % Draw the ESP logo
% height ESPLOGO
% Compute the size of the logo...
0 0
2 index 1.5 mul 3 index
% Do the "metallic" fill from 10% black to 40% black...
1 -0.001 0 {
1 -0.001 0 \{
dup % loopval
-0.15 mul % loopval * -0.15
0.9 add % 0.9 - loopval * 0.15
@@ -151,39 +151,47 @@ gsave
/pageWidth pageRight pageLeft sub def % pageWidth = pageRight - pageLeft
/pageHeight pageTop pageBottom sub def% pageHeight = pageTop - pageBottom
/boxWidth % width of text box
pageWidth pageHeight lt
{ pageWidth 54 mul }
{ pageHeight 42 mul }
ifelse def
newpath % Clear bounding path
% Create fonts...
/bigFont /Helvetica-Bold findfont % bigFont = Helvetica-Bold
pageHeight 3 mul scalefont def % size = pageHeight * 3 (nominally 33)
pageWidth 4 mul scalefont def % size = pageWidth * 4 (nominally 34)
/mediumFont /Helvetica findfont % mediumFont = Helvetica
pageHeight 1.5 mul scalefont def % size = pageHeight * 1.5 (nominally 16.5)
pageWidth 2 mul scalefont def % size = pageWidth * 2 (nominally 17)
% Offset page to account for lower-left margin...
pageLeft 72 mul
pageBottom 72 mul
translate
% Draw the label at the top and bottom...
0 setgray % Color
pageWidth 36 mul % Center of page
pageHeight 72 mul % Top of page
pageWidth -9 mul add % - 1 line
moveto % Position text
bigFont setfont % Font
(Banner) CENTER % Show text centered
pageWidth 36 mul % Center of page
pageWidth 8 mul % Bottom of page
moveto % Position text
bigFont setfont % Font
(Banner) CENTER % Show text centered
% Job information box...
pageWidth 36 mul 9 add % x = pageWidth * 1/2 * 72 + 9
boxWidth 0.5 mul sub % x-= 1/2 box width
pageHeight 30 mul 9 sub % y = pageHeight * 1/2 * 72 - 9
boxWidth % w = box width
pageHeight 14 mul % h = pageHeight * 1/2 * 72
pageWidth 18 mul 9 add % x = pageWidth * 1/4 * 72 + 9
pageHeight 27 mul 9 sub % y = pageHeight * 3/8 * 72 - 9
pageWidth 36 mul % w = pageWidth * 1/2 * 72
pageHeight 18 mul % h = pageHeight * 1/4 * 72
0.5 setgray rectfill % Draw a shadow
pageWidth 36 mul % x = pageWidth * 1/2 * 72
boxWidth 0.5 mul sub % x-= 1/2 box width
pageHeight 30 mul % y = pageHeight * 1/4 * 72
boxWidth % w = box width
pageHeight 14 mul % h = pageHeight * 1/2 * 72
pageWidth 18 mul % x = pageWidth * 1/4 * 72
pageHeight 27 mul % y = pageHeight * 3/8 * 72
pageWidth 36 mul % w = pageWidth * 1/2 * 72
pageHeight 18 mul % h = pageHeight * 1/4 * 72
4 copy 1 setgray rectfill % Clear the box to white
0 setgray rectstroke % Draw a black box around it...
@@ -193,7 +201,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageHeight 5 mul add % y += 2 lines
pageWidth 4 mul add % y += 2 lines
2 copy % Copy X & Y
moveto
(Job ID: ) RIGHT
@@ -202,7 +210,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageHeight 2 mul add % y += 1 line
pageWidth 1 mul add % y += 1 line
2 copy % Copy X & Y
moveto
(Title: ) RIGHT
@@ -211,7 +219,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageHeight -1 mul add % y -= 1 line
pageWidth -2 mul add % y -= 1 line
2 copy % Copy X & Y
moveto
(Requesting User: ) RIGHT
@@ -220,7 +228,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageHeight -4 mul add % y -= 2 lines
pageWidth -5 mul add % y -= 2 lines
2 copy % Copy X & Y
moveto
(Billing Info: ) RIGHT
@@ -246,6 +254,6 @@ gsave
grestore
showpage
%
% End of "$Id: standard 1379 2000-09-18 17:12:42Z mike $".
% End of "$Id: standard 1075 2000-05-11 20:02:21Z mike $".
%
%%EOF
+28 -35
Ver Arquivo
@@ -213,22 +213,15 @@ gsave
/yResolution exch abs def % yResolution = abs(yres)
/xResolution exch abs def % xResolution = abs(xres)
% Figure out the sizes of things...
/wheelSize % size of wheels
pageWidth pageHeight lt
{ pageWidth 9 mul }
{ pageHeight 7 mul }
ifelse def
% Create fonts...
/bigFont /Helvetica-Bold findfont % bigFont = Helvetica-Bold
pageHeight 3 mul scalefont def % size = pageHeight * 3 (nominally 33)
pageWidth 4 mul scalefont def % size = pageWidth * 4 (nominally 34)
/mediumFont /Helvetica findfont % mediumFont = Helvetica
pageHeight 1.5 mul scalefont def % size = pageHeight * 1.5 (nominally 16.5)
pageWidth 2 mul scalefont def % size = pageWidth * 2 (nominally 17)
/smallFont /Times-Roman findfont % smallFont = Times-Roman
pageHeight scalefont def % size = pageHeight (nominally 11)
pageWidth 1.5 mul scalefont def % size = pageWidth * 1.5 (nominally 13)
% Offset page to account for lower-left margin...
pageLeft 72 mul
@@ -246,7 +239,7 @@ gsave
translate
% Size the wheel...
wheelSize
pageWidth 9 mul % radius = pageWidth * 1/8 * 72
% Draw the colors...
dup (C) exch 0 1 1 OCTANT 45 rotate
@@ -275,7 +268,7 @@ gsave
translate
% Size the wheel...
wheelSize
pageWidth 9 mul % radius = pageWidth * 1/8 * 72
% Loop at 1 degree increments
0 1 359 {
@@ -297,7 +290,7 @@ gsave
(1 Degree Radial Lines) CENTER % Show the text centered
% Imageable area...
pageHeight 15 mul % Height of imageable area
pageWidth 19.5 mul % Height of imageable area
pageWidth 4.5 mul % x = pageWidth * 1/16 * 72
pageHeight 35.5 mul % y = pageHeight * 1/2 * 72
@@ -326,7 +319,7 @@ gsave
smallFont setfont % Font
pageWidth 14 mul % x = pageWidth * 3/16 * 72
pageHeight 36 mul % y = pageWidth * 1/2 * 72
pageHeight -2 mul add % y -= 2 * smallFont height
pageWidth -3 mul add % y -= 2 * smallFont height
% Page Size inches
2 copy moveto % Move to x & y
@@ -337,7 +330,7 @@ gsave
(in) show % "in"
% Page Size millimeters
pageHeight sub % Move down...
pageWidth -1.5 mul add % Move down...
2 copy moveto % Move to x & y
10 pageWidth 25.4 mul NUMBER % pageWidth
@@ -346,7 +339,7 @@ gsave
(mm) show % "mm"
% Lower-left inches
pageHeight 2 mul sub % Move down...
pageWidth -3 mul add % Move down...
2 copy moveto % Move to x & y
(Lower-Left: ) RIGHT % Label
@@ -356,7 +349,7 @@ gsave
(in) show % "in"
% Lower-left millimeters
pageHeight sub % Move down...
pageWidth -1.5 mul add % Move down...
2 copy moveto % Move to x & y
10 pageLeft 25.4 mul NUMBER % pageLeft
@@ -365,7 +358,7 @@ gsave
(mm) show % "mm"
% Upper-right inches
pageHeight 2 mul sub % Move down...
pageWidth -3 mul add % Move down...
2 copy moveto % Move to x & y
(Upper-Right: ) RIGHT % Label
@@ -375,7 +368,7 @@ gsave
(in) show % "in"
% Upper-right millimeters
pageHeight sub % Move down...
pageWidth -1.5 mul add % Move down...
2 copy moveto % Move to x & y
10 pageRight 25.4 mul NUMBER % pageRight
@@ -384,7 +377,7 @@ gsave
(mm) show % "mm"
% Resolution dots-per-inch
pageHeight 2 mul sub % Move down...
pageWidth -3 mul add % Move down...
2 copy moveto % Move to x & y
(Resolution: ) RIGHT % Label
@@ -394,7 +387,7 @@ gsave
(dpi) show % "dpi"
% Resolution dots-per-meter
pageHeight sub % Move down...
pageWidth -1.5 mul add % Move down...
moveto % Move to x & y
1 xResolution 39.27 mul NUMBER % xResolution
@@ -403,7 +396,7 @@ gsave
(dpm) show % "dpm"
% Interpreter Information...
pageHeight 15 mul % Height of interpreter information
pageWidth 19.5 mul % Height of interpreter info
pageWidth 40.5 mul % x = pageWidth * 9/16 * 72
pageHeight 35.5 mul % y = pageHeight * 1/2 * 72
@@ -432,7 +425,7 @@ gsave
smallFont setfont % Font
pageWidth 49 mul % x = pageWidth * 11/16 * 72
pageHeight 36 mul % y = pageWidth * 1/2 * 72
pageHeight 2 mul sub % y -= 2 * smallFont height
pageWidth -3 mul add % y -= 2 * smallFont height
% Language level
2 copy moveto % Move to x & y
@@ -441,7 +434,7 @@ gsave
1 languagelevel NUMBER % Language level
% Version
pageHeight 2 mul sub % Move down...
pageWidth -3 mul add % Move down...
2 copy moveto % Move to x & y
(Version: ) RIGHT % Label
version show % Version
@@ -450,13 +443,13 @@ gsave
(\)) show % ")"
% Product
pageHeight 2 mul sub % Move down...
pageWidth -3 mul add % Move down...
2 copy moveto % Move to x & y
(Product: ) RIGHT % Label
product show % Product name
% Serial Number
pageHeight 2 mul sub % Move down...
pageWidth -3 mul add % Move down...
2 copy moveto % Move to x & y
(Serial #: ) RIGHT % Label
1 serialnumber NUMBER % S/N
@@ -470,28 +463,28 @@ gsave
% Draw the copyright notice at the bottom...
pageWidth 36 mul % Center of page
pageHeight 10 mul % Bottom of page
pageWidth 14 mul % Bottom of page
2 copy moveto % Position text
(Printed Using CUPS v1.1.x) CENTER % Show text centered
(Printed Using CUPS v1.1) CENTER % Show text centered
pageHeight 2 mul sub % Move down...
pageWidth 3 mul sub % Move down...
2 copy moveto % Position text
smallFont setfont % Font
(Copyright 1993-2000 Easy Software Products, All Rights Reserved.) CENTER
pageHeight sub % Move down...
pageWidth 1.5 mul sub % Move down...
2 copy moveto % Position text
(CUPS, and the CUPS logo are the trademark property of) CENTER
pageHeight sub % Move down...
pageWidth 1.5 mul sub % Move down...
2 copy moveto % Position text
(Easy Software Products, 44141 Airport View Drive, Suite 204,) CENTER
pageHeight sub % Move down...
pageWidth 1.5 mul sub % Move down...
2 copy moveto % Position text
(Hollywood, Maryland, 20636-3111, USA.) CENTER
% Then the CUPS logo....
gsave
pageWidth 4 mul
pageHeight 4 mul
pageWidth 6 mul
translate
pageWidth 9 mul CUPSLOGO
grestore
@@ -499,7 +492,7 @@ gsave
% And the ESP logo....
gsave
pageWidth 59 mul
pageHeight 4 mul
pageWidth 6 mul
translate
pageWidth 6 mul ESPLOGO
grestore
@@ -507,6 +500,6 @@ gsave
grestore
showpage
%
% End of "$Id: testprint.ps 1379 2000-09-18 17:12:42Z mike $".
% End of "$Id: testprint.ps 985 2000-03-13 18:55:00Z mike $".
%
%%EOF
+25 -33
Ver Arquivo
@@ -22,28 +22,28 @@
% to third parties or copied or duplicated in any form, in whole or
% in part, without the prior written consent of Easy Software Products.
%
/CENTER { % Draw centered text
/CENTER \{ % Draw centered text
% (name) CENTER -
dup stringwidth pop % Get the width of the string
0.5 mul neg 0 rmoveto % Shift left 1/2 of the distance
show % Show the string
} bind def
/RIGHT { % Draw right-justified text
/RIGHT \{ % Draw right-justified text
% (name) RIGHT -
dup stringwidth pop % Get the width of the string
neg 0 rmoveto % Shift left the entire distance
show % Show the string
} bind def
/NUMBER { % Draw a number
/NUMBER \{ % Draw a number
% power n NUMBER -
1 index 1 eq { % power == 1?
1 index 1 eq \{ % power == 1?
round cvi exch pop % Convert "n" to integer
} {
} \{
1 index mul round exch div % Truncate extra decimal places
} ifelse
100 string cvs show % Convert to a string and show it...
} bind def
/CUPSLOGO { % Draw the CUPS logo
/CUPSLOGO \{ % Draw the CUPS logo
% height CUPSLOGO
% Start with a big C...
/Helvetica findfont 1 index scalefont setfont
@@ -61,14 +61,14 @@
dup 1.2 mul moveto
(System) show
} bind def
/ESPLOGO { % Draw the ESP logo
/ESPLOGO \{ % Draw the ESP logo
% height ESPLOGO
% Compute the size of the logo...
0 0
2 index 1.5 mul 3 index
% Do the "metallic" fill from 10% black to 40% black...
1 -0.001 0 {
1 -0.001 0 \{
dup % loopval
-0.15 mul % loopval * -0.15
0.9 add % 0.9 - loopval * 0.15
@@ -151,20 +151,14 @@ gsave
/pageWidth pageRight pageLeft sub def % pageWidth = pageRight - pageLeft
/pageHeight pageTop pageBottom sub def% pageHeight = pageTop - pageBottom
/boxWidth % width of text box
pageWidth pageHeight lt
{ pageWidth 54 mul }
{ pageHeight 42 mul }
ifelse def
newpath % Clear bounding path
% Create fonts...
/bigFont /Helvetica-Bold findfont % bigFont = Helvetica-Bold
pageHeight 3 mul scalefont def % size = pageHeight * 3 (nominally 33)
pageWidth 4 mul scalefont def % size = pageWidth * 4 (nominally 34)
/mediumFont /Helvetica findfont % mediumFont = Helvetica
pageHeight 1.5 mul scalefont def % size = pageHeight * 1.5 (nominally 16.5)
pageWidth 2 mul scalefont def % size = pageWidth * 2 (nominally 17)
% Offset page to account for lower-left margin...
pageLeft 72 mul
@@ -176,30 +170,28 @@ gsave
pageWidth 36 mul % Center of page
pageHeight 72 mul % Top of page
pageWidth -7 mul add % - 2 lines
pageWidth -9 mul add % - 1 line
moveto % Position text
bigFont setfont % Font
(Top Secret) CENTER % Show text centered
pageWidth 36 mul % Center of page
pageHeight 6 mul % Bottom of page
pageWidth 8 mul % Bottom of page
moveto % Position text
bigFont setfont % Font
(Top Secret) CENTER % Show text centered
% Job information box...
pageWidth 36 mul 9 add % x = pageWidth * 1/2 * 72 + 9
boxWidth 0.5 mul sub % x-= 1/2 box width
pageHeight 30 mul 9 sub % y = pageHeight * 1/2 * 72 - 9
boxWidth % w = box width
pageHeight 14 mul % h = pageHeight * 1/2 * 72
pageWidth 18 mul 9 add % x = pageWidth * 1/4 * 72 + 9
pageHeight 27 mul 9 sub % y = pageHeight * 3/8 * 72 - 9
pageWidth 36 mul % w = pageWidth * 1/2 * 72
pageHeight 18 mul % h = pageHeight * 1/4 * 72
0.5 setgray rectfill % Draw a shadow
pageWidth 36 mul % x = pageWidth * 1/2 * 72
boxWidth 0.5 mul sub % x-= 1/2 box width
pageHeight 30 mul % y = pageHeight * 1/4 * 72
boxWidth % w = box width
pageHeight 14 mul % h = pageHeight * 1/2 * 72
pageWidth 18 mul % x = pageWidth * 1/4 * 72
pageHeight 27 mul % y = pageHeight * 3/8 * 72
pageWidth 36 mul % w = pageWidth * 1/2 * 72
pageHeight 18 mul % h = pageHeight * 1/4 * 72
4 copy 1 setgray rectfill % Clear the box to white
0 setgray rectstroke % Draw a black box around it...
@@ -209,7 +201,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageHeight 5 mul add % y += 2 lines
pageWidth 4 mul add % y += 2 lines
2 copy % Copy X & Y
moveto
(Job ID: ) RIGHT
@@ -218,7 +210,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageHeight 2 mul add % y += 1 line
pageWidth 1 mul add % y += 1 line
2 copy % Copy X & Y
moveto
(Title: ) RIGHT
@@ -227,7 +219,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageHeight -1 mul add % y -= 1 line
pageWidth -2 mul add % y -= 1 line
2 copy % Copy X & Y
moveto
(Requesting User: ) RIGHT
@@ -236,7 +228,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageHeight -4 mul add % y -= 2 lines
pageWidth -5 mul add % y -= 2 lines
2 copy % Copy X & Y
moveto
(Billing Info: ) RIGHT
@@ -262,6 +254,6 @@ gsave
grestore
showpage
%
% End of "$Id: topsecret 1379 2000-09-18 17:12:42Z mike $".
% End of "$Id: topsecret 1075 2000-05-11 20:02:21Z mike $".
%
%%EOF
+25 -33
Ver Arquivo
@@ -22,28 +22,28 @@
% to third parties or copied or duplicated in any form, in whole or
% in part, without the prior written consent of Easy Software Products.
%
/CENTER { % Draw centered text
/CENTER \{ % Draw centered text
% (name) CENTER -
dup stringwidth pop % Get the width of the string
0.5 mul neg 0 rmoveto % Shift left 1/2 of the distance
show % Show the string
} bind def
/RIGHT { % Draw right-justified text
/RIGHT \{ % Draw right-justified text
% (name) RIGHT -
dup stringwidth pop % Get the width of the string
neg 0 rmoveto % Shift left the entire distance
show % Show the string
} bind def
/NUMBER { % Draw a number
/NUMBER \{ % Draw a number
% power n NUMBER -
1 index 1 eq { % power == 1?
1 index 1 eq \{ % power == 1?
round cvi exch pop % Convert "n" to integer
} {
} \{
1 index mul round exch div % Truncate extra decimal places
} ifelse
100 string cvs show % Convert to a string and show it...
} bind def
/CUPSLOGO { % Draw the CUPS logo
/CUPSLOGO \{ % Draw the CUPS logo
% height CUPSLOGO
% Start with a big C...
/Helvetica findfont 1 index scalefont setfont
@@ -61,14 +61,14 @@
dup 1.2 mul moveto
(System) show
} bind def
/ESPLOGO { % Draw the ESP logo
/ESPLOGO \{ % Draw the ESP logo
% height ESPLOGO
% Compute the size of the logo...
0 0
2 index 1.5 mul 3 index
% Do the "metallic" fill from 10% black to 40% black...
1 -0.001 0 {
1 -0.001 0 \{
dup % loopval
-0.15 mul % loopval * -0.15
0.9 add % 0.9 - loopval * 0.15
@@ -151,20 +151,14 @@ gsave
/pageWidth pageRight pageLeft sub def % pageWidth = pageRight - pageLeft
/pageHeight pageTop pageBottom sub def% pageHeight = pageTop - pageBottom
/boxWidth % width of text box
pageWidth pageHeight lt
{ pageWidth 54 mul }
{ pageHeight 42 mul }
ifelse def
newpath % Clear bounding path
% Create fonts...
/bigFont /Helvetica-Bold findfont % bigFont = Helvetica-Bold
pageHeight 3 mul scalefont def % size = pageHeight * 3 (nominally 33)
pageWidth 4 mul scalefont def % size = pageWidth * 4 (nominally 34)
/mediumFont /Helvetica findfont % mediumFont = Helvetica
pageHeight 1.5 mul scalefont def % size = pageHeight * 1.5 (nominally 16.5)
pageWidth 2 mul scalefont def % size = pageWidth * 2 (nominally 17)
% Offset page to account for lower-left margin...
pageLeft 72 mul
@@ -176,30 +170,28 @@ gsave
pageWidth 36 mul % Center of page
pageHeight 72 mul % Top of page
pageWidth -7 mul add % - 2 lines
pageWidth -9 mul add % - 1 line
moveto % Position text
bigFont setfont % Font
(Unclassified) CENTER % Show text centered
pageWidth 36 mul % Center of page
pageHeight 6 mul % Bottom of page
pageWidth 8 mul % Bottom of page
moveto % Position text
bigFont setfont % Font
(Unclassified) CENTER % Show text centered
% Job information box...
pageWidth 36 mul 9 add % x = pageWidth * 1/2 * 72 + 9
boxWidth 0.5 mul sub % x-= 1/2 box width
pageHeight 30 mul 9 sub % y = pageHeight * 1/2 * 72 - 9
boxWidth % w = box width
pageHeight 14 mul % h = pageHeight * 1/2 * 72
pageWidth 18 mul 9 add % x = pageWidth * 1/4 * 72 + 9
pageHeight 27 mul 9 sub % y = pageHeight * 3/8 * 72 - 9
pageWidth 36 mul % w = pageWidth * 1/2 * 72
pageHeight 18 mul % h = pageHeight * 1/4 * 72
0.5 setgray rectfill % Draw a shadow
pageWidth 36 mul % x = pageWidth * 1/2 * 72
boxWidth 0.5 mul sub % x-= 1/2 box width
pageHeight 30 mul % y = pageHeight * 1/4 * 72
boxWidth % w = box width
pageHeight 14 mul % h = pageHeight * 1/2 * 72
pageWidth 18 mul % x = pageWidth * 1/4 * 72
pageHeight 27 mul % y = pageHeight * 3/8 * 72
pageWidth 36 mul % w = pageWidth * 1/2 * 72
pageHeight 18 mul % h = pageHeight * 1/4 * 72
4 copy 1 setgray rectfill % Clear the box to white
0 setgray rectstroke % Draw a black box around it...
@@ -209,7 +201,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageHeight 5 mul add % y += 2 lines
pageWidth 4 mul add % y += 2 lines
2 copy % Copy X & Y
moveto
(Job ID: ) RIGHT
@@ -218,7 +210,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageHeight 2 mul add % y += 1 line
pageWidth 1 mul add % y += 1 line
2 copy % Copy X & Y
moveto
(Title: ) RIGHT
@@ -227,7 +219,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageHeight -1 mul add % y -= 1 line
pageWidth -2 mul add % y -= 1 line
2 copy % Copy X & Y
moveto
(Requesting User: ) RIGHT
@@ -236,7 +228,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageHeight -4 mul add % y -= 2 lines
pageWidth -5 mul add % y -= 2 lines
2 copy % Copy X & Y
moveto
(Billing Info: ) RIGHT
@@ -262,6 +254,6 @@ gsave
grestore
showpage
%
% End of "$Id: unclassified 1379 2000-09-18 17:12:42Z mike $".
% End of "$Id: unclassified 1075 2000-05-11 20:02:21Z mike $".
%
%%EOF
+10 -15
Ver Arquivo
@@ -47,8 +47,7 @@ include ../Makedefs
#
DOCUMENTS = cmp.shtml idd.shtml ipp.shtml sam.shtml sdd.shtml \
spm.shtml sps.shtml ssr.shtml stp.shtml sum.shtml \
svd.shtml
spm.shtml ssr.shtml stp.shtml sum.shtml svd.shtml
DOCIMAGES = images/cups-block-diagram.gif images/cups-large.gif \
images/cups-medium.gif images/cups-small.gif
WEBPAGES = cups.css cupsdoc.css index.html documentation.html
@@ -79,7 +78,6 @@ WEBIMAGES = images/accept-jobs.gif \
images/printer-stopped.gif \
images/reject-jobs.gif \
images/release-job.gif \
images/restart-job.gif \
images/right.gif \
images/show-active.gif \
images/show-completed.gif \
@@ -103,6 +101,14 @@ all: $(DOCUMENTS:.shtml=.pdf) $(DOCUMENTS:.shtml=.html) overview.pdf
ps: $(DOCUMENTS:.shtml=.ps) overview.ps
#
# Make manuals for printing...
#
print: sam-7x8.pdf spm-7x8.pdf sum-7x8.pdf \
sam-7x8.ps spm-7x8.ps sum-7x8.ps
#
# Remove all generated files...
#
@@ -209,18 +215,7 @@ sum-7x8.ps: sum.shtml
--size 7x8.5in --left 0.5in --right 0.25in \
--top 0.25in --bottom 0.25in --fontsize 10 --headfootsize 10 -f $@ sum.shtml
$(DOCUMENTS:.shtml=.html): \
glossary.shtml printing-overview.shtml \
references.shtml system-overview.shtml \
../LICENSE.html
$(DOCUMENTS:.shtml=.pdf): \
glossary.shtml printing-overview.shtml \
references.shtml system-overview.shtml \
../LICENSE.html
$(DOCUMENTS:.shtml=.ps): \
glossary.shtml printing-overview.shtml \
$(DOCUMENTS): glossary.shtml printing-overview.shtml \
references.shtml system-overview.shtml \
../LICENSE.html
+541 -607
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+225 -234
Ver Arquivo
@@ -1,6 +1,6 @@
%PDF-1.2
%âãÏÓ
1 0 obj<</Producer(htmldoc 1.9b1 Copyright 1997-2000 Easy Software Products, All Rights Reserved.)/CreationDate(D:20001118180310Z)/Title( CUPS Configuration Management Plan)/Author(Easy Software Products)>>endobj
1 0 obj<</Producer(htmldoc 1.8.8 Copyright 1997-2000 Easy Software Products, All Rights Reserved.)/CreationDate(D:20000705214846Z)/Title( CUPS Configuration Management Plan)/Author(Easy Software Products)>>endobj
2 0 obj<</Type/Encoding/Differences[ 32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/minus/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 128/Euro 130/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE 145/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe 159/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]>>endobj
3 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding 2 0 R>>endobj
4 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Roman/Encoding 2 0 R>>endobj
@@ -50,49 +50,48 @@
34 0 R
36 0 R
]endobj
38 0 obj<</Subtype/Link/Rect[72.0 684.0 107.8 697.0]/Border[0 0 0]/Dest[157 0 R/XYZ null 798 0]>>endobj
39 0 obj<</Subtype/Link/Rect[108.0 670.8 183.8 683.8]/Border[0 0 0]/Dest[157 0 R/XYZ null 745 0]>>endobj
40 0 obj<</Subtype/Link/Rect[108.0 657.6 203.0 670.6]/Border[0 0 0]/Dest[157 0 R/XYZ null 672 0]>>endobj
41 0 obj<</Subtype/Link/Rect[108.0 644.4 216.4 657.4]/Border[0 0 0]/Dest[157 0 R/XYZ null 467 0]>>endobj
42 0 obj<</Subtype/Link/Rect[72.0 618.0 131.6 631.0]/Border[0 0 0]/Dest[163 0 R/XYZ null 798 0]>>endobj
43 0 obj<</Subtype/Link/Rect[108.0 604.8 222.6 617.8]/Border[0 0 0]/Dest[163 0 R/XYZ null 745 0]>>endobj
44 0 obj<</Subtype/Link/Rect[108.0 591.6 202.4 604.6]/Border[0 0 0]/Dest[163 0 R/XYZ null 540 0]>>endobj
45 0 obj<</Subtype/Link/Rect[72.0 565.2 162.4 578.2]/Border[0 0 0]/Dest[169 0 R/XYZ null 798 0]>>endobj
46 0 obj<</Subtype/Link/Rect[108.0 552.0 209.7 565.0]/Border[0 0 0]/Dest[169 0 R/XYZ null 745 0]>>endobj
47 0 obj<</Subtype/Link/Rect[108.0 538.8 179.2 551.8]/Border[0 0 0]/Dest[169 0 R/XYZ null 659 0]>>endobj
48 0 obj<</Subtype/Link/Rect[108.0 525.6 246.4 538.6]/Border[0 0 0]/Dest[169 0 R/XYZ null 599 0]>>endobj
49 0 obj<</Subtype/Link/Rect[72.0 499.2 206.7 512.2]/Border[0 0 0]/Dest[175 0 R/XYZ null 798 0]>>endobj
50 0 obj<</Subtype/Link/Rect[108.0 486.0 185.0 499.0]/Border[0 0 0]/Dest[175 0 R/XYZ null 626 0]>>endobj
51 0 obj<</Subtype/Link/Rect[108.0 472.8 183.8 485.8]/Border[0 0 0]/Dest[175 0 R/XYZ null 434 0]>>endobj
52 0 obj<</Subtype/Link/Rect[108.0 459.6 171.5 472.6]/Border[0 0 0]/Dest[175 0 R/XYZ null 308 0]>>endobj
53 0 obj<</Subtype/Link/Rect[108.0 446.4 177.7 459.4]/Border[0 0 0]/Dest[175 0 R/XYZ null 222 0]>>endobj
54 0 obj<</Subtype/Link/Rect[72.0 420.0 164.9 433.0]/Border[0 0 0]/Dest[181 0 R/XYZ null 798 0]>>endobj
55 0 obj<</Subtype/Link/Rect[108.0 406.8 212.2 419.8]/Border[0 0 0]/Dest[181 0 R/XYZ null 745 0]>>endobj
56 0 obj<</Subtype/Link/Rect[108.0 393.6 173.4 406.6]/Border[0 0 0]/Dest[181 0 R/XYZ null 325 0]>>endobj
57 0 obj<</Subtype/Link/Rect[108.0 380.4 157.5 393.4]/Border[0 0 0]/Dest[181 0 R/XYZ null 252 0]>>endobj
58 0 obj<</Subtype/Link/Rect[108.0 367.2 158.7 380.2]/Border[0 0 0]/Dest[181 0 R/XYZ null 179 0]>>endobj
59 0 obj<</Subtype/Link/Rect[72.0 340.8 124.2 353.8]/Border[0 0 0]/Dest[187 0 R/XYZ null 798 0]>>endobj
60 0 obj<</Subtype/Link/Rect[108.0 327.6 155.0 340.6]/Border[0 0 0]/Dest[187 0 R/XYZ null 745 0]>>endobj
61 0 obj<</Subtype/Link/Rect[108.0 314.4 172.8 327.4]/Border[0 0 0]/Dest[187 0 R/XYZ null 566 0]>>endobj
62 0 obj<</Subtype/Link/Rect[72.0 288.0 185.1 301.0]/Border[0 0 0]/Dest[193 0 R/XYZ null 798 0]>>endobj
63 0 obj<</Subtype/Link/Rect[108.0 274.8 181.0 287.8]/Border[0 0 0]/Dest[193 0 R/XYZ null 706 0]>>endobj
64 0 obj<</Subtype/Link/Rect[144.0 261.6 206.0 274.6]/Border[0 0 0]/Dest[193 0 R/XYZ null 657 0]>>endobj
65 0 obj<</Subtype/Link/Rect[144.0 248.4 238.4 261.4]/Border[0 0 0]/Dest[193 0 R/XYZ null 574 0]>>endobj
66 0 obj<</Subtype/Link/Rect[108.0 235.2 169.7 248.2]/Border[0 0 0]/Dest[196 0 R/XYZ null 737 0]>>endobj
67 0 obj<</Subtype/Link/Rect[144.0 222.0 206.0 235.0]/Border[0 0 0]/Dest[196 0 R/XYZ null 688 0]>>endobj
68 0 obj<</Subtype/Link/Rect[144.0 208.8 238.4 221.8]/Border[0 0 0]/Dest[196 0 R/XYZ null 566 0]>>endobj
69 0 obj<</Subtype/Link/Rect[108.0 195.6 164.8 208.6]/Border[0 0 0]/Dest[196 0 R/XYZ null 369 0]>>endobj
70 0 obj<</Subtype/Link/Rect[144.0 182.4 206.0 195.4]/Border[0 0 0]/Dest[196 0 R/XYZ null 320 0]>>endobj
71 0 obj<</Subtype/Link/Rect[144.0 169.2 238.4 182.2]/Border[0 0 0]/Dest[196 0 R/XYZ null 250 0]>>endobj
72 0 obj<</Subtype/Link/Rect[108.0 156.0 168.5 169.0]/Border[0 0 0]/Dest[199 0 R/XYZ null 726 0]>>endobj
73 0 obj<</Subtype/Link/Rect[144.0 142.8 206.0 155.8]/Border[0 0 0]/Dest[199 0 R/XYZ null 678 0]>>endobj
74 0 obj<</Subtype/Link/Rect[144.0 129.6 238.4 142.6]/Border[0 0 0]/Dest[199 0 R/XYZ null 542 0]>>endobj
75 0 obj<</Subtype/Link/Rect[108.0 116.4 153.2 129.4]/Border[0 0 0]/Dest[199 0 R/XYZ null 452 0]>>endobj
76 0 obj<</Subtype/Link/Rect[144.0 103.2 206.0 116.2]/Border[0 0 0]/Dest[199 0 R/XYZ null 404 0]>>endobj
77 0 obj<</Subtype/Link/Rect[144.0 90.0 238.4 103.0]/Border[0 0 0]/Dest[199 0 R/XYZ null 334 0]>>endobj
78 0 obj<</Subtype/Link/Rect[108.0 76.8 170.9 89.8]/Border[0 0 0]/Dest[199 0 R/XYZ null 236 0]>>endobj
79 0 obj<</Subtype/Link/Rect[144.0 63.6 206.0 76.6]/Border[0 0 0]/Dest[199 0 R/XYZ null 188 0]>>endobj
80 0 obj[38 0 R
38 0 obj<</Subtype/Link/Rect[72.0 670.8 107.8 683.8]/Border[0 0 0]/Dest[157 0 R/XYZ null 798 0]>>endobj
39 0 obj<</Subtype/Link/Rect[108.0 657.6 183.8 670.6]/Border[0 0 0]/Dest[157 0 R/XYZ null 745 0]>>endobj
40 0 obj<</Subtype/Link/Rect[108.0 644.4 203.0 657.4]/Border[0 0 0]/Dest[157 0 R/XYZ null 672 0]>>endobj
41 0 obj<</Subtype/Link/Rect[108.0 631.2 216.4 644.2]/Border[0 0 0]/Dest[157 0 R/XYZ null 467 0]>>endobj
42 0 obj<</Subtype/Link/Rect[72.0 604.8 131.6 617.8]/Border[0 0 0]/Dest[163 0 R/XYZ null 798 0]>>endobj
43 0 obj<</Subtype/Link/Rect[108.0 591.6 222.6 604.6]/Border[0 0 0]/Dest[163 0 R/XYZ null 745 0]>>endobj
44 0 obj<</Subtype/Link/Rect[108.0 578.4 202.4 591.4]/Border[0 0 0]/Dest[163 0 R/XYZ null 540 0]>>endobj
45 0 obj<</Subtype/Link/Rect[72.0 552.0 162.4 565.0]/Border[0 0 0]/Dest[169 0 R/XYZ null 798 0]>>endobj
46 0 obj<</Subtype/Link/Rect[108.0 538.8 209.7 551.8]/Border[0 0 0]/Dest[169 0 R/XYZ null 745 0]>>endobj
47 0 obj<</Subtype/Link/Rect[108.0 525.6 179.2 538.6]/Border[0 0 0]/Dest[169 0 R/XYZ null 659 0]>>endobj
48 0 obj<</Subtype/Link/Rect[108.0 512.4 246.4 525.4]/Border[0 0 0]/Dest[169 0 R/XYZ null 599 0]>>endobj
49 0 obj<</Subtype/Link/Rect[72.0 486.0 206.7 499.0]/Border[0 0 0]/Dest[175 0 R/XYZ null 798 0]>>endobj
50 0 obj<</Subtype/Link/Rect[108.0 472.8 185.0 485.8]/Border[0 0 0]/Dest[175 0 R/XYZ null 626 0]>>endobj
51 0 obj<</Subtype/Link/Rect[108.0 459.6 183.8 472.6]/Border[0 0 0]/Dest[175 0 R/XYZ null 434 0]>>endobj
52 0 obj<</Subtype/Link/Rect[108.0 446.4 171.5 459.4]/Border[0 0 0]/Dest[175 0 R/XYZ null 308 0]>>endobj
53 0 obj<</Subtype/Link/Rect[108.0 433.2 177.7 446.2]/Border[0 0 0]/Dest[175 0 R/XYZ null 222 0]>>endobj
54 0 obj<</Subtype/Link/Rect[72.0 406.8 164.9 419.8]/Border[0 0 0]/Dest[181 0 R/XYZ null 798 0]>>endobj
55 0 obj<</Subtype/Link/Rect[108.0 393.6 212.2 406.6]/Border[0 0 0]/Dest[181 0 R/XYZ null 745 0]>>endobj
56 0 obj<</Subtype/Link/Rect[108.0 380.4 173.4 393.4]/Border[0 0 0]/Dest[181 0 R/XYZ null 325 0]>>endobj
57 0 obj<</Subtype/Link/Rect[108.0 367.2 157.5 380.2]/Border[0 0 0]/Dest[181 0 R/XYZ null 252 0]>>endobj
58 0 obj<</Subtype/Link/Rect[108.0 354.0 158.7 367.0]/Border[0 0 0]/Dest[181 0 R/XYZ null 179 0]>>endobj
59 0 obj<</Subtype/Link/Rect[72.0 327.6 124.2 340.6]/Border[0 0 0]/Dest[187 0 R/XYZ null 798 0]>>endobj
60 0 obj<</Subtype/Link/Rect[108.0 314.4 155.0 327.4]/Border[0 0 0]/Dest[187 0 R/XYZ null 745 0]>>endobj
61 0 obj<</Subtype/Link/Rect[108.0 301.2 172.8 314.2]/Border[0 0 0]/Dest[187 0 R/XYZ null 566 0]>>endobj
62 0 obj<</Subtype/Link/Rect[72.0 274.8 185.1 287.8]/Border[0 0 0]/Dest[193 0 R/XYZ null 798 0]>>endobj
63 0 obj<</Subtype/Link/Rect[108.0 261.6 181.0 274.6]/Border[0 0 0]/Dest[193 0 R/XYZ null 706 0]>>endobj
64 0 obj<</Subtype/Link/Rect[144.0 248.4 206.0 261.4]/Border[0 0 0]/Dest[193 0 R/XYZ null 657 0]>>endobj
65 0 obj<</Subtype/Link/Rect[144.0 235.2 238.4 248.2]/Border[0 0 0]/Dest[193 0 R/XYZ null 574 0]>>endobj
66 0 obj<</Subtype/Link/Rect[108.0 222.0 169.7 235.0]/Border[0 0 0]/Dest[196 0 R/XYZ null 737 0]>>endobj
67 0 obj<</Subtype/Link/Rect[144.0 208.8 206.0 221.8]/Border[0 0 0]/Dest[196 0 R/XYZ null 688 0]>>endobj
68 0 obj<</Subtype/Link/Rect[144.0 195.6 238.4 208.6]/Border[0 0 0]/Dest[196 0 R/XYZ null 566 0]>>endobj
69 0 obj<</Subtype/Link/Rect[108.0 182.4 164.8 195.4]/Border[0 0 0]/Dest[196 0 R/XYZ null 369 0]>>endobj
70 0 obj<</Subtype/Link/Rect[144.0 169.2 206.0 182.2]/Border[0 0 0]/Dest[196 0 R/XYZ null 320 0]>>endobj
71 0 obj<</Subtype/Link/Rect[144.0 156.0 238.4 169.0]/Border[0 0 0]/Dest[196 0 R/XYZ null 250 0]>>endobj
72 0 obj<</Subtype/Link/Rect[108.0 142.8 168.5 155.8]/Border[0 0 0]/Dest[199 0 R/XYZ null 726 0]>>endobj
73 0 obj<</Subtype/Link/Rect[144.0 129.6 206.0 142.6]/Border[0 0 0]/Dest[199 0 R/XYZ null 678 0]>>endobj
74 0 obj<</Subtype/Link/Rect[144.0 116.4 238.4 129.4]/Border[0 0 0]/Dest[199 0 R/XYZ null 542 0]>>endobj
75 0 obj<</Subtype/Link/Rect[108.0 103.2 153.2 116.2]/Border[0 0 0]/Dest[199 0 R/XYZ null 452 0]>>endobj
76 0 obj<</Subtype/Link/Rect[144.0 90.0 206.0 103.0]/Border[0 0 0]/Dest[199 0 R/XYZ null 404 0]>>endobj
77 0 obj<</Subtype/Link/Rect[144.0 76.8 238.4 89.8]/Border[0 0 0]/Dest[199 0 R/XYZ null 334 0]>>endobj
78 0 obj<</Subtype/Link/Rect[108.0 63.6 170.9 76.6]/Border[0 0 0]/Dest[199 0 R/XYZ null 236 0]>>endobj
79 0 obj[38 0 R
39 0 R
40 0 R
41 0 R
@@ -133,20 +132,21 @@
76 0 R
77 0 R
78 0 R
79 0 R
]endobj
81 0 obj<</Subtype/Link/Rect[108.0 684.0 202.4 697.0]/Border[0 0 0]/Dest[202 0 R/XYZ null 768 0]>>endobj
82 0 obj<</Subtype/Link/Rect[72.0 670.8 123.3 683.8]/Border[0 0 0]/Dest[202 0 R/XYZ null 613 0]>>endobj
83 0 obj<</Subtype/Link/Rect[108.0 657.6 170.0 670.6]/Border[0 0 0]/Dest[202 0 R/XYZ null 565 0]>>endobj
84 0 obj<</Subtype/Link/Rect[108.0 644.4 202.4 657.4]/Border[0 0 0]/Dest[202 0 R/XYZ null 508 0]>>endobj
85 0 obj<</Subtype/Link/Rect[72.0 631.2 133.7 644.2]/Border[0 0 0]/Dest[202 0 R/XYZ null 354 0]>>endobj
86 0 obj<</Subtype/Link/Rect[108.0 618.0 170.0 631.0]/Border[0 0 0]/Dest[202 0 R/XYZ null 306 0]>>endobj
87 0 obj<</Subtype/Link/Rect[108.0 604.8 202.4 617.8]/Border[0 0 0]/Dest[202 0 R/XYZ null 196 0]>>endobj
88 0 obj<</Subtype/Link/Rect[72.0 591.6 113.6 604.6]/Border[0 0 0]/Dest[205 0 R/XYZ null 759 0]>>endobj
89 0 obj<</Subtype/Link/Rect[108.0 578.4 202.4 591.4]/Border[0 0 0]/Dest[205 0 R/XYZ null 710 0]>>endobj
90 0 obj<</Subtype/Link/Rect[108.0 565.2 157.2 578.2]/Border[0 0 0]/Dest[205 0 R/XYZ null 411 0]>>endobj
91 0 obj<</Subtype/Link/Rect[36.0 538.8 194.2 551.8]/Border[0 0 0]/Dest[211 0 R/XYZ null 798 0]>>endobj
92 0 obj[81 0 R
80 0 obj<</Subtype/Link/Rect[108.0 670.8 170.0 683.8]/Border[0 0 0]/Dest[199 0 R/XYZ null 188 0]>>endobj
81 0 obj<</Subtype/Link/Rect[108.0 657.6 202.4 670.6]/Border[0 0 0]/Dest[202 0 R/XYZ null 768 0]>>endobj
82 0 obj<</Subtype/Link/Rect[72.0 644.4 123.3 657.4]/Border[0 0 0]/Dest[202 0 R/XYZ null 613 0]>>endobj
83 0 obj<</Subtype/Link/Rect[108.0 631.2 170.0 644.2]/Border[0 0 0]/Dest[202 0 R/XYZ null 565 0]>>endobj
84 0 obj<</Subtype/Link/Rect[108.0 618.0 202.4 631.0]/Border[0 0 0]/Dest[202 0 R/XYZ null 508 0]>>endobj
85 0 obj<</Subtype/Link/Rect[72.0 604.8 133.7 617.8]/Border[0 0 0]/Dest[202 0 R/XYZ null 354 0]>>endobj
86 0 obj<</Subtype/Link/Rect[108.0 591.6 170.0 604.6]/Border[0 0 0]/Dest[202 0 R/XYZ null 306 0]>>endobj
87 0 obj<</Subtype/Link/Rect[108.0 578.4 202.4 591.4]/Border[0 0 0]/Dest[202 0 R/XYZ null 196 0]>>endobj
88 0 obj<</Subtype/Link/Rect[72.0 565.2 113.6 578.2]/Border[0 0 0]/Dest[205 0 R/XYZ null 759 0]>>endobj
89 0 obj<</Subtype/Link/Rect[108.0 552.0 202.4 565.0]/Border[0 0 0]/Dest[205 0 R/XYZ null 710 0]>>endobj
90 0 obj<</Subtype/Link/Rect[108.0 538.8 157.2 551.8]/Border[0 0 0]/Dest[205 0 R/XYZ null 411 0]>>endobj
91 0 obj<</Subtype/Link/Rect[36.0 512.4 194.2 525.4]/Border[0 0 0]/Dest[211 0 R/XYZ null 798 0]>>endobj
92 0 obj[80 0 R
81 0 R
82 0 R
83 0 R
84 0 R
@@ -284,12 +284,14 @@ endobj
endobj
157 0 obj<</Type/Page/Parent 150 0 R/Contents 158 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R/Fc 9 0 R>>>>/Annots 14 0 R>>endobj
158 0 obj<</Length 159 0 R/Filter/FlateDecode>>stream
VMoã6½ûW ö”µjÉŸémgS›¬j9|¡¥‘­ %:$eÃýõxÓ¢0¡9œyïÍãÐo­Â0‚îÒ²5ž·~ýrQæ9í †#˜g7!$©Úàíü‡Û ‡~·Ýí‘ÛB˜fXÙ"/Ra UùЄa ƒ‡Î×…TUy±ªµ …RTb…%d*­ýJ«m‘¡»FXÕô¯,*ZæJC†[”jãâD•Q’¢²X‰*EP9—§¢a×ããó÷ª,©ØËóô/ˆ5Õ
’½±XÂâæÓýKœ|ZÜÂwÔ†A1%£r»ƒŸ‰GAÏ9¾mQo ÜqìÃ¼Õ :$-„ü1{„Þ FÐïEA_IH¼ð'½ú½.çgT'l”¶b)‘¾kH±Gíaf‹¨?h/…Á ¨_¬/…Ð0µ°–ˆÕA?
\îÁÉõ°^Á̓0û¥C èG#¢Dd¢ ß,˜ËÜO%ŒÂãц9/ïgµ¤Ñœz¤²:µæ=¶ÎXÅ”Ê"éb,y@è줋Q²vîbi„”¾ñ[¬2¥sLm¨Õ¼“øß4íýîÎŒQ¿¢Ä=9¸$Ûfm6$°ót.R4A“ x¸äTÈ[xÊqÚ“ÿˆ¤U©’ìÀi³¥&Þéîzp°ã?ÔÒ㫱¦Š0§è¯ã»«AÖ˜dßS¯ñ„ $äSúþ ¡kc©ÒWÞNžÆ´ý‹Ëýy³Ièk‚º¸Ák øí¤Ð˜ZJ±i`ê”F]7õ†­JîÚv ©•´Èë*å¦YØ}#½È2$ÊNéWO‘À-µÚæÌ`bel’êbÓ‡ú¢ÚÛ.<ÏØóô×àhåö û¦AG°„lS]yVWú»ôa/™+õ;•µ¿im¬*‹¿©Ò¶™*‡Ççx\l‹@¥µÖ4ªä¾¥òŸ£úA¿³¸½àÆÐL,JîU^ÐÕŸMcrˆ°Nûš“QªTÕ>Ó«Ñ“\’ˆrC‡3]0Ng¬ßc'ïCœ|{¾¨z8çj4t3_•*²ACãrÿÇtìÂä0ÌÏçã/ÃñQ  ¥W¢ršJå®K®¤T;wñÑYÌüÆ…èQ;ö/„öù3–6ÚC<XDƒ!¼‡Ç{GQ"J0é‘©×déR–/Üǧ#¹kSõ(Õ\«šºþÓ@!l|u®MÚg™CxFÃŽüz5ÙÏ”ìQ*š4zmŽ1å¸W÷v†o5Í Öìÿ@6é­¡æEäËèâçLoÔ îüÁ°yêþlýÁdz{endstream
VMoÛ8½çW zJ€µjÉŸÙ[§Y/šTk9Å|¡%ÊfC‰
IÙpýÎtì¸éb³„â ç½7Ã<_ÄÐÅŸF ô†W“ÅÅÇÏ×taQâÎp4†EqC–«†_-¾»Ýxäw;½~”¸ý(†YÁk+J3+TíCûÇ!4EC
]l„\Õ¥X·Ú…BÅj¶æ¦C#Y …Ê[¿Òj+
nÀn8¬[üSŠ—¥ÒPð-—ªqq¬.ðQ[^³:ç J*EãžÇGù7ªª°ØãÃìoH5‹z ÙÞX^ÁòòÃÍcš}X^Á7® "JF•vÇ4~&žD}O<9œñuËõVðÅÞ..ºQ¥¥_1ýšßAGcô“¨ ôDŽͯ$d^ø£^ƒ~Î'TG4J[¶’¿’í¹vгe2vVÌð°_¤/†ÐD0³°aVœ×ý0pµ'×kÀz —·ÌìI0HÆH É$Ñ ,ˆËÜŒã—ÔÀœ–ב³Z©¢Í­y­{ÀV‘0•²u1=ÀtqÔÅ(Ù:w‘4LJßø-¯ ¥sLk°Õ¼’ø ß„ö~s9®Ÿ¸ä{tp…¶-:dH çé’åÜDá€dèýáÇBÞÂ3Š«¹=úIZ•+Iœ¥)ùXl¢ðNw׃‚7ø®VÿsË[¬ Œþ‚0ΰ»h)ãä{,ð%R }Šßï¹1xí`"UþDÛÙý·sg ?#Ôå%‹ž"ÁŸÜN…æ¹Å#š`§˜4ꬸi²*ºk'ì4ÇVâ¢l뜚¤°û =+
(ÊNé'OÁ­´ÚâL`Rel–kÑá¸>«6åÆm Ï3õ<ý5x1„rû†|Ð!,&;XWž„µuÁý]z³—ÄûËÖ_ȼ5VUâVچɡJ¸{x„» Âö¸TÞj£Jî,UþÝåÕ7g¢¨¨W¥À«?Ÿ¥èfö-vB©VuçD¯ 'º$cUƒÉ…„ÓëÔÉ{f_Ϊò\@·ðU±"Ô84î왎=˜†ùé|ü/ÃË£€AJ¯Yí4G”Ê]—RI©vîâsg1ó»/”‡B8n’c/—Ép¯‘à#×9}æò#ƒ*oeá¡0ç%Çîæ~~üçÔ¦~¦ŽÞ¿Ð|W~óZµô̹k?ÎDA7ç]' ˆúaðÎqÀ¡GßÇåžp'޽oTA›óç' éŠCT't•œý?Òw£k,B_Ã[õ×Å?/¥Õendstream
endobj
159 0 obj
993
990
endobj
160 0 obj<</Type/Page/Parent 150 0 R/Contents 161 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 7 0 R>>>>>>endobj
161 0 obj<</Length 162 0 R/Filter/FlateDecode>>stream
@@ -301,16 +303,15 @@ endobj
endobj
163 0 obj<</Type/Page/Parent 150 0 R/Contents 164 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R/Fc 9 0 R>>>>/Annots 37 0 R>>endobj
164 0 obj<</Length 165 0 R/Filter/FlateDecode>>stream
xÚµ˜MF†ïüŠ>nªl­4²õÁ 0°¤ ÖAbO¹yl”²$G’‹åß§{F–ÚY3rÀ)ªLõh>ºßy§ÇŸ9`㟾׃4?»ŒÏ¾Þ„ lˆ—øÄóˆ_<Ê¥¬d‘Êú·ø/…8¾FÆîÄ
²¸zšG0+Óm.‹&i²²Ðø§Å…oy„Ç/–åz]¾fÅJ¿¸à/BVCµuÏoмàW;æœ:Æ9…gM¨?êa|õ0;–s®û»*‹e¶ÚVº¿‡¤HV’Þ…ù:i'–¶ûV€³Ã~þžû³¦gcÇÕËTãÜÍflœè­ndwE#«e’J˜É:[ô/­²MŽ6竺Ë7kÙ‡©\>ÿTÿÑÅõoýÜ­§\6¯I%áb‘gEV7Á²ª)‚Ûdý¹¡ö·èÄ‹æï,h^•«*És’Ü)V=ZM$Óm•5o¸k6eÕ|nˆx~hˆXÖ'qôôNœžjy¢|ÿ8˜ïØ=‰÷¿%|g:càcWè/°ñ½yUç<õ‘®S”ÅxÏyj Ù ÙÎu|f[6:'}8ôñx‹þiÙà.Ž“ƒ êÆ¢4rœe€«5áŽãq~2È3"G7<'ÂòÍ<#Ÿú˜#ψ\ȧÈ{Î@8Ýi`¹=ïOöú¿ü%_ÕŠÎ;7˜hU\,Êg4‡²n"%Gô‰ŒÌœën²µ„›²Ê“¢L³e–* uržX®EéG³ÛÑŒÊ6èÉ·Qã;=©†IO-ÝêÉ€·zÚñm!#ÏÌ·#(ڞȻ¡55óŒ@Þ§¼ôüÁüõÛ›2é;Ú ~Éä}R¬¶xî÷Ìâ—¬ZÀõ"£ì}$aï8žÃçð{ù I±è$ɾo¤.Bêš)výUùèu‘– ò.#®’¢þÌÓuÛäû·Ûl!?ÝåC¹k5ÍHæIÑdéðê ;Áž(mL•PTã°”Càw¯¦@ûÆÀ9A>,H§&žÈÊ5M<#hŸ…VÈø#ö=Õûàñæ
¿õÃÜg…ìý,‘9ú–AM™–ë“z•T@›!Ý0dhG«˜h`…3€s2b<Œ<#È 'q#Ïä}ò]#ÏÊèt`þœ “•v•‘gò¡½üaňPè}KŠíŠñÛ2Y×X,U¸‡õݦíÉHþóÿh£ewR “†ZZKÄ@3s†u£ç˜ 'HC.îa#ϪÎ<Œ‰çi(èŸtú*ÅšxF ïÑÚÈ3ù`:ONPõGµAÏ¡Q?d
Fð¨Ód-•<±ô‡¨©¶i³ÅâïÃôEú˜…ú¥ëÂ,ñ
Ú£Rt'hÕ0 º¥µ^ 4ȇ:ç 4 t›xF ÒEËÈ3‚J庉ç]7B’«‰g•‡ ¨ã&!<’͆rü,›W) ¸ŸÏ”Z°|éò^ŸÖÛ¦ŽºèL«†I
-­3m @Þæ’SpNÐù5ÈûœÎÏ Zóô9A©u)µDj§BßáTj=ÇÁ·7,·ù³Ñõ1–ý]Fa<†oq¬*ÔÓ&× úòT7LÉmi;Í*O}
Žç•›ÁÀd8¡‹ßÈsB,æùp"ow¡‘g3¹PÇ!7ìË_3”m¸Ø¢ÁÓ Dçp™ÔYª¶û,[Ñ/ii*ëú½bÿõ#.FÁî¡þ¡ª›Ö¿6®P½í¶úúãìfck”endstream
xÚµ˜KH Çï|
ÙªÄãGâ7 À°5Ylæ´ãt‚·b;k;ÅðíGêöCYB;¶¨
ÕÉÏjEú·¤Î¿'˜øggƒãB’\D'ß®°Mˆ–ø‰ëù-NmxKQŠ<ÕÑ?±<…Œ‰aKȰàòq¬H¶™Èë¸N‹\á°¬·=Ã%<z°,Öëâ%ÍWêÁÒ
Êv×<½BýŒoµÌ™2œ4†mÛ®1!ÛÛ®»;ŸÒãËûùØ2¬3µße‘/ÓÕ¶TûÝÇy¼dæë8ßµŽ[Žúžï¿Í˜ñðµªE·y-Êeœ˜‰*]åô/)ÓMm1çþßf›u¯b øñÇm†ç÷dÓøÕ:^,ë—¸p¾ÈÒ<­jŒOQVŸm¼>ÂþnXZë_ŽpþŽëó²X•q–‘´Žö;|Øçw(’m™Ö¯x$6EYa7šï³‰êXá…ï„ᱟIÜÏÙ~³?Ñ*)îMîÚª0VÇѱÕq´qñ£~eWªËB^äãÒP9ðéºp˜†‰µ^,zy¸Á
h˜àø:’ëc9S5„{hd¸™oøZܲ\ÎOyFdXížÈÛ¶áéyF ?õ0NZž8¶9à'w­p:SßpzÞ›ìØ¿x“¯r½~°w9þD è|Q<a(ª:”âÄZR æj…ët-àº(³¸†p#’t™&²ŠŽ:qO Ç ©ôûšÝ¾­ºÆzùö iÔ器ÄV]r¡SWC7êÒàºZÞ¥§åÙ·lн†çòN`Lõ<#÷(7=@6=KØ7Ù¼‹óÕût?‘Œ zNË\-RÊà±IcÕÛèüY<Aœ/:ù„¢†¡†…êCÕí}“ÿ*OŠÕ52•q^}¸…t¶¨ùËi…JüÍ6]ˆãìÜ ±–…"‹ó:Mør…›™ó©€\ì—2ð½îÑý4è<˜8'¨ÚÚ¤?Ïä}Yu<#èüFÀøômN•¾®/ñ]/Á]š‹¾VÅ"ÄcL]$ÅúËëXÈ6YR M–ZZ&AG3£h[8'(KÆDË3‚ªÜ£®å¼G5UË3‚²:ðŸÔC)þZžÈæNð‡Uc¶Ê0©ÆžºÞ¨¢oŠx]áÜTâAVWŽ\4ÊÍÿ§#Œ˜ÙéH.t:jh% ÍÌŽ‘zœ¤#oÀNŽ<ËZž4‹¹%Ï Ò‘?`ŸÔ]¥ju<#wiºÕòŒ@ÞŸÄ“4ëQïïùL¥þdÓŒ×BJoÖå6©·8Ë㵕ÞèÛ^¬§ ½Ì?#j—†ÏVÔr¡uC+ÍjhPq©O)×ñŒ@> »—–g‰”tÏ º`$YÏ- "wjøLFØ"ïã͆òü$ê!r¸›Ï¤bp–ér_}}›ZòN¢²-:94´Ê¶†fÕ8‡*†çõ²AÞã¼m ñœPéÕ»Ï J¯CéíøÒ;µÕ}M¦×µÜ|Åñº¿j5ãxßeÆcøErdýú;~?²ª….Á ­ò§¡@#«GÒàœ Ôp†jXñ´<'T“Ñûɬ94ܸTA8A?£ p¸¡ŒÃù=]Kd9ƒ‹¸JyìgéŠ~3;OQUïu‹ÝÇUgð[¥à¶ãnßÿþÈ=ñMü
&}ä4úëä7ö2Uhendstream
endobj
165 0 obj
1334
1330
endobj
166 0 obj<</Type/Page/Parent 150 0 R/Contents 167 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 7 0 R>>>>>>endobj
167 0 obj<</Length 168 0 R/Filter/FlateDecode>>stream
@@ -338,15 +339,12 @@ endobj
endobj
175 0 obj<</Type/Page/Parent 150 0 R/Contents 176 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
176 0 obj<</Length 177 0 R/Filter/FlateDecode>>stream
VMs"7½ó+ºödW-ó±ÆÎÍq’ª\’ÍÖ^¸ˆ™£”f4+iÀüû¼–fÀ€ [@ ûu÷ë×-~ FtƒÇˆfcšÜR^ ~›~ùóžÆ74/ñËíìŽæÅÕ”æÎ¶KÃôÄu¾:›³÷º~¹žÿ)FÉc8¾ËÆâó@϶ åøØyqõéyþôiqM~¥Œ¡%“o—• â5»-]1)j=;²ŽÖ\xã׆æ¡ñcã,@+IaG“v£ÃŠÂŠéñÛ×gò]
Ù.s€?òª”®^«k *¨¥òLÄÖL¶ŒX¥5ÆnP-ù û_%(Žo³©DE=¤=åÆz€E÷ÜVá ½5mж¯áH8‡Ë(#9ã¸ËýŶá#ÿñ‡þ*Æ“P+…-®jÞ| ¢UQh ¨ ˆ)­«”œH­•6
,.®Ч }8þ²‡?æ{×ê&I¶¢Ÿ~¹ñYÕ=f¨&ãÄó4Ñ£QP^©sÕsr¨¿Yv+¦ßW,= yHÅŽs?èy ªõA’Ê;L|«Âû7P¦9íüÿh ¥è³^)ˆ³â:\jõï6oÅ.ËÎYw©»ßj¡ž‚…Ð-j+µ¹Øæc/|Pé#»÷šx6"žÆx}y¯õàÍç¶Ù‘ØM*4`[·BzépU?µ'v§Ï†sérʸRù
'è­SMÈÁaÑÕʪ.QüÐ4Fc¹ˆ7ÔÚÅDÕÅ –ù½h##{ÙŽé¯í¾,Û  HZÔ[Œ|À婞ßÐ(ýÊ“:L©.®<–­®×Ö¬ûõÓ£ÍÙwI|÷˜Øœ+©Ô¶°äª¶îjÚïmЩ±Ã°9Ï„mö}ÿrŒ¬3íg-Žt¬ñ£ÒV
ù-fº£›‹Ï¢®_P ²Úh46ЮÆ™ct_8ÁÁ°àâ(Oé]W]éŽríYæÿçܛУuØDgµ°7I÷•ÏW\´Ñä–ÂmlLJܚ:l£\ÒÅó*ÇÃùË(ŠK”²ô‘¯£:#{•*ø3Ý’JB^¨a}›Ë/[c‘äÞØ‰Î±a¹A}­Œ{è ×2:¢¥‡tŽ¢
t*êŠ ¸Eá߀p‹0€1™Á®²®ŽsLOéoûs7?•-R¯mÒmzé•ú5Þ±ýU(öúpÍm|Ô/ú´M qÁwYÞíƒßO~âßÕôî&»O[f&ç?æƒÿñnendstream
VMsÛ6½ëWìä$ÏĬõËîÍuÛ™^ÚÔV&] ri¢ JÖ¿ï[”,*t2¶G\¼Ý÷öíÂß&3ºÁÏŒVsZÜRZN~[O~ùóžæ7´ÎñävuGëlº¤µ³ÍÖ0=qm] ÏΦ콮^®ÖÿáÄ’f³öÄõü.™Ë™z¶yØ+ÇÃÛé‡çõÓ‡ÍùBC[&ßlKgÄ;v
ºdRÔxvdí¸Êð¯5;ÍRãaí,@K)ig‹6í^‡‚BÁôøåó3ù®„äXƒ‹5à<ê*•®þVW@ÌTP[å™"ˆ­˜l±rkŒÝƒ-ù û_%éüÈÞ&KÉ:KH¾š‚iO©± &µem8HfoM´­%ÏGÛ&ŒSiÐ;Ä,Ïcjè(,6ÓŠ÷$_BU•eZà•
¹u¥’O¤vJÉ6Wq-t{Ø¡˜Ç>Ö­/P~#æ¸kŸ´Ž¹§ÙªsÌbÞŠ¸Lfôhl•ëTõŒÏ͵Jn%ôkÁÒ°pV‡0tœ2d@CRTÚaâ[¾ßVÛ™ñ¶>ñ·†–‹ «BÁ%Wa¤¿Û´‘Ç­Žìœu#­ûR‰À,„ƒÁ(×f¬‡Ã`¼Qí[âÃǯ1—í„>µõQ˜n´ÐWÛ¨f¼!3ØØ•q^ÔI¬å85§ÒÁ¶ÀR¥NŒYþmlE(ÁA5±Êf)Gd{¨k£±ä|×¥À„?·[ä}2ÜœþÊЩî´<J3)véÄ7bI@¿‰dÕ]·¥m¦;PW;kvý¶@è€tß 9{ÂÄB+¤T‡àícç”MÕq:×)äÓØ-Xhï¤Mô}›RŒ¤ í§$cä8F­P¨oËÓÜœ}”†sõ6¨j¯ÑÈ @GŽ2Ű½p ‡ÀŒ³AÒ Œ¦.;íÕá0°Ú!³Lìç½´ Gë°CÞõÂ)¤½F|ZpÖd“Ë«¯¶r™épˆviïWùx>e Es‰“Û*}ÔkÀ3ªWªŒ?RÖí—VCØ ü‘Ö7©ìÞ¼1I6üÑtŽ ËÅæ+Uc¨£A_¸’Q/=­3È*Ð-I¸+Ž=p%‹Â%-Ú‚.– 3×1ëx¼§ô’þ¶?1wëKÛ¢ôʶ¢}o½\¿ÆK°¿´$^Ÿ/³=ŠþEŸ-hÜÍ]•w§ä÷‹Ÿø§gyw“Ü#‘+ùüÇzòïäd)ú´endstream
endobj
177 0 obj
945
930
endobj
178 0 obj<</Type/Page/Parent 150 0 R/Contents 179 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 7 0 R>>>>>>endobj
179 0 obj<</Length 180 0 R/Filter/FlateDecode>>stream
@@ -373,12 +371,11 @@ endobj
endobj
187 0 obj<</Type/Page/Parent 150 0 R/Contents 188 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F6 6 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
188 0 obj<</Length 189 0 R/Filter/FlateDecode>>stream
QsÚ0 ÇßùHÛ4´éAë]Ò»½ŽÍlSÆ>ý”À±önqéŽG"ñ“þ²¤üìÅpIŸ&ŽAÔ½ë¢w1û
ƒK(VdO¦P”Ÿ®àVç¸Ý.~´ñäàÐŽ¢AëÅP ­ÝÁc q|ôL¢qã‘,££…âõãáñÏ L½Ùz´ ¸®¶¼Âè-§ÿÚ}Ã-W
U70G]J]±`Q |inJî9ÔÆ"øg®IõRzàt—u8 Ü`({£±¿ãûFE½ÕRp/v (ŒFKô;D ~g`cMeyíBáZÉÿKÝ49#ÖèCª(ÝV•¦ô]w¨‹Þ¶Dc8ˆF‡¦À•°Fï}q•'YÈ£¦j:¯Üs]r[BbJ„‰Ï4}×m:ô›º§I©Â€èä‰åÝ¡H¨§‡ì;0+µoêšïÇ:ÀLóä‚uCS–?>ü#ù6Z ÏŠw&Ba¹v+lhÆaT€vÇú·ónÞîzßg\¬›Do-ß<Ká`~œÈ0š%`3ÂQ%´·FË¿ÿÿP[¸7ËsðYZ̺ámgÑ @ª+©‘º‘º¢àn 3cEËØØS§q†Yþø±®NçàÑV\Ëß­!Àž³›nöœ”ŸÊzñ¢Ù"íf-¶ªYN¥äp*‚Ké¯w˜…’dÆù\X¹ñSE×>סmk_ˆ´@zRÛ^+ZœVœÚÂÒ¶¦Ó Mïô5öËè¸%ß¼‚G“Q4¥%J†8n¤Eï[ï°#Âendstream
ÁrÚ0†ï<ÅÛnl ÇÄ1‰3¨cg¦WEÞ8*²D%JŸ¾kCi2S+$ƒ‡ÁÖòíþ«_럃ÎèÃ4ÑD3¸(_æ_!9ƒò‘V&Ó”Õ§s¸RÆ9nwŸË]@<Ý Gã(éB¢J´ÛGL ŽÉ4š´é~e|X¡|Ãxtø3Ó¬7-(®ë ¯1z; _sË•BÕ,PWR×`,X(ŸÛ›Š{±þ‰kRý =pºÀË&œP®1T½Ñ8Üò]«¢Ùh)¸—F;”F£‚ô[D ~k`mMmyãBéZÉ?¤îšœ+ô!UTn§JSùÆ®zÔE¯-Ñå%ÑxoŠÎ…5zðÅy‘æy Ž†º!h¿
ÏuÅm©©I|®é»éÊ¡ßäž¶¤¢Ó{Vô§JI ¡îoóïÀ¬Ô¾ík±s3+Ò/¬š±âîö?Åw кy^¸s©J˵{Ä–f¼Fh×lxµèç]ãV¡÷CÆÅª-ôÊòõ“F³ôìƒvj†öÖ¨SSÜ| Åy8Ÿgå¼Þ™‹Ždº–ÉdŒ’»ÌA.c'`f;aóâî-bw"¸:šÎÁ­¹–¿»…{Á.ûÙ R~lë%Ç&ˆZæË¬ŸµÜ¨v>U’ñ K.d¿Þ<ÃA§1Úæ÷ØŠ…3ã|!¬\ûºÑuÂ},–¡émŸ‰´Dz¡R±Šq€U§@iiúÓV‡¦Áì%6™ýï/_éãé8šÑP¦…8ndåàÛàfØ9endstream
endobj
189 0 obj
596
602
endobj
190 0 obj<</Type/Page/Parent 150 0 R/Contents 191 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 7 0 R>>>>>>endobj
191 0 obj<</Length 192 0 R/Filter/FlateDecode>>stream
@@ -470,30 +467,24 @@ endobj
216 0 obj
135
endobj
217 0 obj<</Type/Page/Parent 150 0 R/Contents 218 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F5 5 0 R/F8 7 0 R/F9 8 0 R>>>>/Annots 80 0 R>>endobj
217 0 obj<</Type/Page/Parent 150 0 R/Contents 218 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F5 5 0 R/F8 7 0 R/F9 8 0 R>>>>/Annots 79 0 R>>endobj
218 0 obj<</Length 219 0 R/Filter/FlateDecode>>stream
xÚÕ›MsÛ6†ïþ<¶‡2ø$€cœ6™š¤±š»"ÓŽ:–˜PR2þ÷° ÐÈ@o†“GÈšOŒ—»/@,óýŠvÄþ¦bºÍîêzuõê­ééVw•¦”èV·¿¬Ö_ÆnºëÞLûã¸?~]ý{õÇêŠôÄÜê¾|zçÝ ŒýºëtÏðóCwãØgß>ßw¯ÞÊŽR÷¯ÙË$qÿíž„Gà®ã²×9ÝGq³™¾Ãdçÿ¢oþ}rÖ|pšúùî:Éz‰œö«·%´÷p°ß¬½Š}ADz³×R§dŠÄ8¢þ¼µw|{·Ý¬Ûiï RÙHCºÖ´c¬íücÜŽ½b¬¦r´ê‡œƒa$Ý<Žã®Æñz+?§ËâHûðcœlÇŸ'hoš¾¦81½X÷ƒDqJzŠóšâÈ¡Äås‚x@ý>mN;›¦OóR„
aÿÌ€ø ˜ÉÎln<³ì´h¹RóÅráóâÑ`¥ö3ceƒ (ilþe,ˆzƧñnœÇýfô+uaÕ¸ÏòrÂÊÁD{…Á%{•Š€'²ª½¢föŒá@zóÏǛ ‰WÛ¤•ÄÝ’”ñÀ
õ0<ïm©©.‡hÌ0ˆ6!¥dUcM¬£d #éÃñë8ÄŽ—;_vFÁ0ް v¨ÖDð²MØI±`þó%›àn)´Sá£@Ó¶ú3D‘òvk·ŽO‚’‹wñ’§$ #ê¯õ~}?:Ñý.ÄôMîîd%é©õ©é­†ú’æu£AžQN¼”‡a°†í<nŽÓüø4-¸ôWNù‡q»9ΧÍñ4ûM6wñü7¢¦;á‰ÅûAb6Dô¨wÕl£Ý†9ã`I7ÓiÞ2?¹Þmp”«™”†q¤¹*òNCM[9_Q]-Qua(x)¯î‡úŒÌ@G”}B½ÛÞŸf¿¶ƒ ÇR•ÛfTû zf<Ã3,š»Äbîðù‚¹‹A‚—в¹˜Ðö‰#£A)«y:})ù{r½ýÉ„•3ƒaiŸÆoÓ\ØÃ'×;‡Ö¡ò âHû8OvzØîïý
݆IõªR/’ÆÕ—V!á&VW‡À£”/ô¬nôæam•JŸñÒÔêZ“«hî0Hl†k0QQ5÷ÀC „qýREjŠ1³$Š1 Æ'êÆŒcÎ9–Á—g·A±ÄЖXÿG0›Ë™ Á(ƒc·ŽTC%ÒùW
Â8¢ÞOg ÆìÍhJ3U\¸ÝÁ„3 ø|a=âÚg‡,¯F%ù9 ¢pì6Ý®çÂb”\n–Ù¥'cax€¥èa\`ËÅU{Éj™r¾rE£%ÂàÒJÂG“Õµ$í6‰æD #éó8Š›¯àŽâÜó^†Ã8âÞŸv_Æ9.ã 5Õ¤—:z+ ¢Up°æ¯­FãŽ&EÂ8¢Þûq^·l®5Å„Œæ
ƒD1;!ŠÕV£À±e}ÆÁ0’VãáˆÅy“G—5Á8ó»`˜–$‚q[`Y]G¶®2†yØš{?|‘‚ùň`·‹¸y’¬–¬F{^¯K„…àåç9ÃÈy÷0ëùÑëfzÚz7’V;Ì`+MØÅf°yõº¸¨DˆM@¾àCBI«qÞùÕ˜µ¹×¥SØóÓRyOŒil;½..
ñR—ÉîÔ?A|Amæiÿ¢ ÑÚÞ‘–ZLBŠº­ .Ô+“~¦×Åj¥ ÌnÎ`ð„rk—„ÂQ†JPîyúŒ…qì}?mçqé ²oçÜŽVÚ2Œc3Ì% .¹À¶Óu¥ÈùBôíŒá@ªž™Æë]j˜å‡M;ç -93í[:5-èo÷¼vJ ZPÆí÷`€óSÌŽ±ÿdU/éž\ ge$Gaaï×»e;Ô»*-?±Hä‰DT€:‰XM"$ÑÁm 3ÆEþŠAÒ\}.¥ªL ŸÅEH¶9d»iו¥†/ãº2†C‹ï´÷';‡V^–8×K”³‰jl¡¹ƒ˜MT£É±j¹”[¸n²Øjò(hRÁTÒ£rò(Ñ/ÕŠ- Ø2ÆÅ“o2<[±‰r±Ñ„-1ÇA,6:ÐàÖ¼RlcܱGÆÁpèEǯÓ-L ¾wSÍ&¡¢uà É&¡ƒuóz¹! Ë-Eaa/®à8´¸`<ép9‰¸ þÍë‡$,¸…q„½¤‚cØ"óeÁ’Ž–+8†ÚˆZ¹!ŸfnFÁ°ç|^Ï[÷îóàEkåFe%•ˆJ¼›¨Ü»‰Þ-êÕ†$¬¶…q„5Wm‰Œˆ»m#²Í¶‘Á½EµÔ•–r *ó·ÆZ¨³Ê«š†ó
Ÿc•i\ZVÊ !ÚíS³züÆd£/’ÖrhÐѰýç˜Cƒ v-«5†(±”Q$½´“2Ì6×rÒÔÊ !P^)¢/­¸G,‚æ¯+°`ÊC¥¸büK4ôìP%`–Wõš}:«¤ÓÉiˆÎCLðç¡~¢Ó£}~b=ñâÄ)‘å?Ni<‰£Âùvþmòü¸øîZ÷ña½‡©i› ¿)æ§·EÝþ¾ú3<ÔÀendstream
xÚÕ›MsÛ6†ïþ<¶‡2Ä óQgzh’ÆjîŠB;êXbBIÉøßw]€Fr3ìÌØ‚W|,¾Ä¾ b™ïW¬éàkÞˆ¾Ùì®^­®^\›†wÍê¶aÊ4ý ›Õ—ßVëÏ÷c3Ý6¯§ýqÜ¿¯þ»úsuÕµì7f¿}|kM/T«›]£[N¯ï›Ë>{û|×¼¸V cö¯ÙÃzx+ü5Ö<ŠÈ]ã~$|Œåf3}-ˆ+€Ã/Úê¿Ø£ç 'qÞöp⊷Štâ/®%É×±ç"VÇ6£dÙÁ±Ìj#)N¨¿¾ÀUßÞn7ëãvÚ[¨àˆŠt-i×™V.Ú¹¨UŒu­DÅxI1âè„I8ö¤›‡ÃqÜe&r8älùˆ~*»¸§½ÿ1Î?¶ãO‹“¬5U_P\™Ô$ÅqWf€±S\÷ÖÙùœ€(N¨7Óæ´ƒiú8/FPJP7ú71‘ÃïžXv–µ]Õ›ÅvñõâÁdÕС=ò¼Éz˜20š‹zÊÇñvœÇýftAšv¨ÜkEaÒª>X,.Y¬Rú"/Z¬'jŠ%D
éõ¿n2—$ Wuö¢Ä,ŠËgÂbÖ}ÿ´—¥¤ºÁœqY…KS§uÉœ=Gwà* ‡ÂDzü:αÃáÖ›­'0ŠÌ‹í3€W"ol€ïdîõ%«`.ÅEÁ(Å5ä~¨c\oaùø(&:t×'wÌ¡°ý½Þ¯ïF+·[ƒ˜¶Êµ*L÷N ·ºIéM¦“h²¢l2D„Â%S"…‰ôf;›ã4?<΋HqÞçÓæxšÝB[XûyúËQP_š.X<‚ÙHÃÐBEÑl<GÛ„Ca"ÝL§y“™ýÑñv‘c— âD³™äœ†™ºf~IõaƒHõA£—ŠâjÐs˜sˆDqBÁêíöî4»˜YF ÖÔ*¼!@Ïì§"ûQYs—Š-掯/˜»Tn…+óæîQRÃ=G¨c¬æéô9çïÑÑð©$LäEaŽëÉoÓœYÁGG[w’àNéǸc}˜'X—¶û;W™ë0§v(ä‰BmÀÁ¥Ú …F–ÅÚà‰Œ‰…ŸdŒG½¾_ƒZñ=~ßUU_KÒq»Dè,;qpS$Q\=—M‘’bp†Á”Ý RŒq4=Y6eâsΡ0÷ž<Ûõ‰%ûºÄúÁ„ÑaOA0a nØÌsX§ÀÁÅ õn:›`.FUš ÙZ$¶ìIàë µH Hå«‘‡)qNÃ(Qn¦ÛãÏõœ)H&-‡ò“Ð(ÌýÇý¸>à¢K õMYø2…Y«t0F\ª)ÂíõØËP¬)žëT–)L¤Oã|È.¿"€Ýë¬ð1Žâ„{wÚ}çPÐ+Øl*I/UpXD†(QðRMò»A)SÅ õvÜóºf-)&xd±n)&ú¢*Ö$ÏÛ§3…‰´GšQBT¹yYŒ·ÆÓrƒH0Þ¡\ÅŠDÝÛ‚S0ŒòÂg)–-GÜP¿«ƒ³ÄÁ…zÄ u½^æZ ÁI/R…‰óö~:ÖóƒÓÍ´¬ö~$+´vø@Í4 ¥
×Ô¾z™-(ÓO,x?ý\Ø“Vã¼s•˜×Y‰ËÒõÔs§Õ§]1ÞSãée¶ „CíL¶˜DqÚÌÓþE“²¶Õ#Ë·´¸À.³Ë\ÊWIݨWÙ|e g8 {Îëé ”„̆ÆÁì}õ ãré‘}?mçqéôª­gïŽZ3œSCÌN\LuN­§W…T Ñu¸"…‡_Ü7 ÇÛ b–Z´oÚÖ´sšÑn@à”¶¡Œ]ã€Îoà0¦¨žÓ=:wͺEq‚½[ï–Q Kì¢D]ç¬Ï "‰:†>h%â%‰ˆÄz»šNPgé£Qƒõ©”*%0ÓØWsÉ…ƒPp˜Fß,”±PŒ½éJ(Æ6ßiïvwµ<0q®•ÌÏ$6PÍ^l„™d{^­b²y&[‚¢8ÁªK¶’D=6ªð,ú¨Oe%꙯¼˜lž„É– (Î}šáÉ’M’M~a,h%›ÔÞ­E)݈cìT¡°ïGǯÓÜšê+|ö¦8›„ Öƒh6 å­[”ŽH”p1Šâ{v DZمgÁ£^—•ˆ/Ó8”n1ˆâü¹%[G­2—]ÔײÉÖiïÖ²”lÄ1¶›p(L¤OëykŸƒ>Ðm¼¬-ݘÊO%#ƒu™8·QÞ¸e1Õƒ™s0J¤êò¬ Žfa­Y²ÌÖÜû¶,¦a0ËbFyúÌX YVxp£×~¿Bàëè±iãýYRŒ Ú.Ÿc ³zø†¹ÅU¥‘–æRÁªÝë0‡¥—*¦A0½b
FŸerIÖÕ’%ËjɽO«br“+æ`”HÏ(¹¸Ž6WtòÀ7Þ‘ûÒ†Šö¶n ³<¨Wí½™“*œb·ü!MÛLÒî°õ†v‚÷Àtú”Wx<«ùp¿Þc~hPáû[RòŸ«ÿ=džýendstream
endobj
219 0 obj
1979
1953
endobj
220 0 obj<</Type/Page/Parent 150 0 R/Contents 221 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F5 5 0 R/F8 7 0 R/F9 8 0 R>>>>/Annots 92 0 R>>endobj
221 0 obj<</Length 222 0 R/Filter/FlateDecode>>stream
xÚÕ—ÏŽ›0Æï<…í!¬ÿ_7mzjµÝÐ`wI”*„–U}ûzìq0‘Ôšd³B þÁ|žo€Ÿ#Ôýþ_›ì±Ì–pJÊm$)ßÞ•Õ˶&íŠÌÛ]_ïúýûò{ö±ÌhN ÏŸˆá9%ZZwlˆ-rÁ–,~² [“‡…$ŒÁõ 'ZQ¸Üc®sNÎ^#Á6„iËñEB> >´¯‡ÆÝqÕoÚÝ醸TþŸÿ˜>[‘РšPyá*R2`Ans´Ú˜óÊ$KR˜S¦‘4ßVû}í·R0§÷UDùWÅBŸqîv:ö™°Rè%.\ËÙT7!‰ y䎺)¾TÍf·öš‰k5Ò_ID­³G”ȉDŒæ2J4i8$¡áRTÈGØYNY4h¹ –SDñê–‹·ÂŒ9˜F’Ÿû¾Âù)ùÍ™nª›T!†Á‚¡›T½TLÚ-r‚ÝF ÌË{4›ÒÖOÞPƒy ¼˜4[$³P!a÷d6¥ýŒ –ðAb6eâ´¶SfCŽ#¦‘4oßj ¹anoðኙ‰~’bÞ!HúIÊ8¼í´á„ý”¢0/ooxO©#hº¾$êøWTgÒmHbP˜Gزÿ½õ=ÅìÍôÔ™(¨DE˜$M>ÀÒ
ß¼á,‰/…ç¥JÎÄ
tIq˜Fβ]õ¿ª®¾àåàö™#¦Wví>AÎïã€Ç
?V÷1ä÷\ÿh»þB© ÀáTqzwî„¶h»Æuµ–`n`(„¿®
Üã™ßÎTèd2ÿö´„ϹÕf}è¼ÛÉçjW­kp?yÚVÞý3&µ›©3Ã}e Jö5ûI@âJendstream
xÚÕ—ÏŽ›0Æï<…í!Ä6þƒ¯›6=µÚnè°»$JBKˆª¾}Çö8˜H‰ÕS’ÝÒìÀæó|cø1Bá—‘BÙ¿·6{ª²ùÒNIµ&L¢´ Õû‡ª~Ý5¤[“E·šýpøXýÌ>WÍ)ìÙÃË¢yN‰*d^’–˜2WìÈÊÒÏ.è7d¾„1{?Íá\ç Ÿr•3rñ.¸§{âm0°ou»Ýo,¬(r Ãÿòþ0™sxü Ÿ °.+/ F‰xJ"$1¥r1EaaŸº·c [Ûno™pÁ”bêbM°  5PKK¤È °$èaÅh.¼:ú²6Ñ¥-)õ9ǧi±«‡Æu|Á@ñ›·Ïÿ(æúIÛ)ØO>ûI ±W,i¹@ò–› 0°»³\J¢²€cÈ‘Deh©¤áÇn¼x0»IeÜ”u¦ðÁh7©i˜×eÂn¢§Ÿ$ØaC[Œàwg¸d'I5oD$uÞeÚlHB³Å(Ì#ìáÌ&
7y}.ˆ$"Lð2m7$¡ÝbæöH†+¨›±Þ ç¶ §ŽI9ÚvÉ„ƒi$-º÷Æ’àåÀÜáæfÓ‰~b:Þ.ˆú‰á€2iÃ!»)a¾¼·^J)C‹ñEÜ2Tä'mNCã¶m&(Ì#l5üݹ~bænúéŠLqS„Â:úK/%~œØ³J|!¼,UDKÐe‚Ã4rVÝzøS÷ÍXCû²5ÁaqUßíWÚåuvSá§ÊÃ:ú<â^š_]?\)5N–çO'Œ´e×·nÈÈ›µÆBèé´Ä5ž¹õá‚ùm•,~<¯ìïz»9öÎíäk½¯7u?yÞÕÎý3&Ìә殲í%ûžý†(´endstream
endobj
222 0 obj
668
700
endobj
223 0 obj<</Count 9/First 224 0 R/Last 277 0 R>>endobj
224 0 obj<</Parent 223 0 R/Title(Table of Contents)/Dest[217 0 R/XYZ null 756 null]/Next 225 0 R>>endobj
@@ -630,22 +621,22 @@ xref
0000008296 00000 n
0000008401 00000 n
0000008506 00000 n
0000008611 00000 n
0000008715 00000 n
0000008818 00000 n
0000008921 00000 n
0000009232 00000 n
0000009337 00000 n
0000009441 00000 n
0000009546 00000 n
0000009651 00000 n
0000009755 00000 n
0000009860 00000 n
0000009965 00000 n
0000010069 00000 n
0000010174 00000 n
0000010279 00000 n
0000010383 00000 n
0000008610 00000 n
0000008713 00000 n
0000008816 00000 n
0000009120 00000 n
0000009225 00000 n
0000009330 00000 n
0000009434 00000 n
0000009539 00000 n
0000009644 00000 n
0000009748 00000 n
0000009853 00000 n
0000009958 00000 n
0000010062 00000 n
0000010167 00000 n
0000010272 00000 n
0000010376 00000 n
0000010477 00000 n
0000010509 00000 n
0000010541 00000 n
@@ -712,128 +703,128 @@ xref
0000020895 00000 n
0000020915 00000 n
0000021069 00000 n
0000022133 00000 n
0000022154 00000 n
0000022267 00000 n
0000022455 00000 n
0000022476 00000 n
0000022630 00000 n
0000024035 00000 n
0000024057 00000 n
0000024170 00000 n
0000024363 00000 n
0000024384 00000 n
0000024515 00000 n
0000025126 00000 n
0000025147 00000 n
0000025260 00000 n
0000025450 00000 n
0000025471 00000 n
0000025602 00000 n
0000026618 00000 n
0000026639 00000 n
0000026752 00000 n
0000026954 00000 n
0000026975 00000 n
0000027115 00000 n
0000028133 00000 n
0000028154 00000 n
0000028267 00000 n
0000028466 00000 n
0000028487 00000 n
0000028627 00000 n
0000029294 00000 n
0000029315 00000 n
0000029428 00000 n
0000029621 00000 n
0000029642 00000 n
0000029782 00000 n
0000030925 00000 n
0000030947 00000 n
0000031087 00000 n
0000031925 00000 n
0000031946 00000 n
0000032086 00000 n
0000032946 00000 n
0000032967 00000 n
0000033107 00000 n
0000033907 00000 n
0000033928 00000 n
0000034068 00000 n
0000034956 00000 n
0000034977 00000 n
0000035117 00000 n
0000035722 00000 n
0000035743 00000 n
0000035883 00000 n
0000036299 00000 n
0000036320 00000 n
0000036433 00000 n
0000036639 00000 n
0000036660 00000 n
0000036814 00000 n
0000038864 00000 n
0000038886 00000 n
0000039040 00000 n
0000039779 00000 n
0000039800 00000 n
0000039855 00000 n
0000039960 00000 n
0000040104 00000 n
0000040210 00000 n
0000040330 00000 n
0000040439 00000 n
0000040588 00000 n
0000040698 00000 n
0000040805 00000 n
0000040959 00000 n
0000041070 00000 n
0000041187 00000 n
0000041303 00000 n
0000041467 00000 n
0000041573 00000 n
0000041692 00000 n
0000041807 00000 n
0000041911 00000 n
0000042067 00000 n
0000042176 00000 n
0000042291 00000 n
0000042403 00000 n
0000042502 00000 n
0000042649 00000 n
0000042746 00000 n
0000042846 00000 n
0000043004 00000 n
0000043144 00000 n
0000043244 00000 n
0000043351 00000 n
0000043501 00000 n
0000043601 00000 n
0000043708 00000 n
0000043856 00000 n
0000043956 00000 n
0000044063 00000 n
0000044213 00000 n
0000044313 00000 n
0000044420 00000 n
0000044566 00000 n
0000044666 00000 n
0000044773 00000 n
0000044924 00000 n
0000045024 00000 n
0000045131 00000 n
0000045279 00000 n
0000045379 00000 n
0000045486 00000 n
0000045636 00000 n
0000045736 00000 n
0000045843 00000 n
0000045975 00000 n
0000046082 00000 n
0000046181 00000 n
0000046299 00000 n
0000022130 00000 n
0000022151 00000 n
0000022264 00000 n
0000022452 00000 n
0000022473 00000 n
0000022627 00000 n
0000024028 00000 n
0000024050 00000 n
0000024163 00000 n
0000024356 00000 n
0000024377 00000 n
0000024508 00000 n
0000025119 00000 n
0000025140 00000 n
0000025253 00000 n
0000025443 00000 n
0000025464 00000 n
0000025595 00000 n
0000026596 00000 n
0000026617 00000 n
0000026730 00000 n
0000026932 00000 n
0000026953 00000 n
0000027093 00000 n
0000028111 00000 n
0000028132 00000 n
0000028245 00000 n
0000028444 00000 n
0000028465 00000 n
0000028605 00000 n
0000029278 00000 n
0000029299 00000 n
0000029412 00000 n
0000029605 00000 n
0000029626 00000 n
0000029766 00000 n
0000030909 00000 n
0000030931 00000 n
0000031071 00000 n
0000031909 00000 n
0000031930 00000 n
0000032070 00000 n
0000032930 00000 n
0000032951 00000 n
0000033091 00000 n
0000033891 00000 n
0000033912 00000 n
0000034052 00000 n
0000034940 00000 n
0000034961 00000 n
0000035101 00000 n
0000035706 00000 n
0000035727 00000 n
0000035867 00000 n
0000036283 00000 n
0000036304 00000 n
0000036417 00000 n
0000036623 00000 n
0000036644 00000 n
0000036798 00000 n
0000038822 00000 n
0000038844 00000 n
0000038998 00000 n
0000039769 00000 n
0000039790 00000 n
0000039845 00000 n
0000039950 00000 n
0000040094 00000 n
0000040200 00000 n
0000040320 00000 n
0000040429 00000 n
0000040578 00000 n
0000040688 00000 n
0000040795 00000 n
0000040949 00000 n
0000041060 00000 n
0000041177 00000 n
0000041293 00000 n
0000041457 00000 n
0000041563 00000 n
0000041682 00000 n
0000041797 00000 n
0000041901 00000 n
0000042057 00000 n
0000042166 00000 n
0000042281 00000 n
0000042393 00000 n
0000042492 00000 n
0000042639 00000 n
0000042736 00000 n
0000042836 00000 n
0000042994 00000 n
0000043134 00000 n
0000043234 00000 n
0000043341 00000 n
0000043491 00000 n
0000043591 00000 n
0000043698 00000 n
0000043846 00000 n
0000043946 00000 n
0000044053 00000 n
0000044203 00000 n
0000044303 00000 n
0000044410 00000 n
0000044556 00000 n
0000044656 00000 n
0000044763 00000 n
0000044914 00000 n
0000045014 00000 n
0000045121 00000 n
0000045269 00000 n
0000045369 00000 n
0000045476 00000 n
0000045626 00000 n
0000045726 00000 n
0000045833 00000 n
0000045965 00000 n
0000046072 00000 n
0000046171 00000 n
0000046289 00000 n
trailer
<</Size 279/Root 278 0 R/Info 1 0 R/ID[<5b48a799cbdaa6a0d8d5f18bb0a35984><5b48a799cbdaa6a0d8d5f18bb0a35984>]>>
<</Size 279/Root 278 0 R/Info 1 0 R/ID[<49d7086a07a26d8f7455139812a43056><49d7086a07a26d8f7455139812a43056>]>>
startxref
46526
46516
%%EOF
-4
Ver Arquivo
@@ -56,10 +56,6 @@ The following documentation for CUPS is available on this server:
<A HREF="sdd.html">HTML</A> |
<A HREF="sdd.pdf">PDF</A> )
<LI>Software Performance Specification (
<A HREF="sps.html">HTML</A> |
<A HREF="sps.pdf">PDF</A> )
<LI>Software Version Description (
<A HREF="svd.html">HTML</A> |
<A HREF="svd.pdf">PDF</A> )
BIN
Ver Arquivo
Arquivo binário não exibido.
+953 -1104
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+738 -692
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+1200 -1405
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+1176 -1264
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+24 -50
Ver Arquivo
@@ -772,14 +772,14 @@ CUPS-Add-Printer request:
<P>The client OPTIONALLY supplies this attribute indicating a
textual reason for the current printer state.
<P>"requesting-user-name-allowed" (1setof name(127) | delete)
<P>"requesting-user-name-allowed" (1setof name(127))
<P><I>OR</I>
<P>"requesting-user-name-denied" (1setof name(127) | delete):
<P>"requesting-user-name-denied" (1setof name(127)):
<P>The client OPTIONALLY supplies one of these attributes to
specify an access control list for incoming print jobs. To allow
all users access to a printer, use the delete tag for the
attribute value.
specify an access control list for incoming print jobs. The
special name "ALLUSERS" is reserved to indicate that all users
are allowed or denied.
</UL>
@@ -988,7 +988,7 @@ CUPS-Add-Class request:
<P>"printer-is-accepting-jobs" (boolean):
<P>The client OPTIONALLY supplies this boolean attribute
indicating whether or not the class object should accept new jobs.
indicating whether or not the printer object should accept new jobs.
<P>"printer-info" (text(127)):
@@ -998,32 +998,32 @@ CUPS-Add-Class request:
<P>"printer-location" (text(127)):
<P>The client OPTIONALLY supplies this attribute indicating a
textual location of the class.
textual location of the printer.
<P>"printer-more-info" (uri):
<P>The client OPTIONALLY supplies this attribute indicating a
URI for additional class information.
URI for additional printer information.
<P>"printer-state" (type2 enum):
<P>The client OPTIONALLY supplies this attribute indicating the
initial/current state of the class. Only the "idle" and "stopped"
initial/current state of the printer. Only the "idle" and "stopped"
enumerations are recognized.
<P>"printer-state-message" (text(MAX)):
<P>The client OPTIONALLY supplies this attribute indicating a
textual reason for the current class state.
textual reason for the current printer state.
<P>"requesting-user-name-allowed" (1setof name(127))
<P><I>OR</I>
<P>"requesting-user-name-denied" (1setof name(127)):
<P>The client OPTIONALLY supplies one of these attributes to
specify an access control list for incoming print jobs. To allow
all users access to a class, use the delete tag for the
attribute value.
specify an access control list for incoming print jobs. The
special name "ALLUSERS" is reserved to indicate that all users
are allowed or denied.
</UL>
@@ -1508,12 +1508,9 @@ of the device-class attribute:
<LI>"serial" - The device-uri will be of the form
"serial:/dev/filename?baud=value+parity=value+flow=value".
The baud value is the data rate in bits per second; the
supported values depend on the underlying hardware.
The parity value can be one of "none", "even", or "odd".
The flow value can be one of "none", "soft" (XON/XOFF
handshaking), "hard" or "rts/cts" (RTS/CTS handshaking),
or "dtrdsr" (DTR/DSR handshaking).
handshaking), or "hard" (CTS/RTS handshaking).
<P>The URI returned by CUPS-Get-Devices will contain the
maximum baud rate supported by the device and the best
@@ -1615,18 +1612,6 @@ The default value is stored in the job-sheets-default attribute.
If two values are supplied, the first value is used as the starting banner
file and the second as the ending banner file.
<H3>job-originating-host-name (name(MAX))</H3>
<P><I>(CUPS 1.1.5 and higher)</I>
<P>The job-originating-host-name attribute specifies the host
from which the job was queued. The value will be the hostname or
IP address of the client depending on whether hostname
resolution is enabled. The localhost address (127.0.0.1) is
<B>always</B> resolved to the name "localhost".
<P>This attribute is read-only.
<H3>lpi (type2 enum)</H3>
<P>The lpi attribute specifies the number of lines per inch when
@@ -1760,30 +1745,13 @@ delineate directories.
<H2>Printer Attributes</H2>
<H3>job-k-limit (integer)</H3>
<H3>job-sheets-default (1setof type3 keyword | name(MAX))</H3>
<P><I>(CUPS 1.1 and higher)</I>
<P>The job-k-limit attribute specifies the maximum number of kilobytes that
may be printed by a user, including banner files. The default value of 0
specifies that there is no limit.
<H3>job-page-limit (integer)</H3>
<P><I>(CUPS 1.1 and higher)</I>
<P>The job-page-limit attribute specifies the maximum number of pages that
may be printed by a user, including banner files. The default value of 0
specifies that there is no limit.
<H3>job-quota-period (integer)</H3>
<P><I>(CUPS 1.1 and higher)</I>
<P>The job-quota-period attribute specifies the time period used for quota
calculations, in seconds. The default value of 0 specifies that the limits
apply to all jobs that have been printed by a user that are still known to
the system.
<P>The job-sheets-default attribute specifies the default banner file(s) to
print before and after each job. The value "none" specifies that no banner
should be printed.
<H3>job-sheets-supported (1setof type3 keyword | name(MAX))</H3>
@@ -1889,6 +1857,9 @@ identically to the printer-type attribute and default to all 1's.
allowed to access a printer or class. Either this attribute or the
requesting-user-name-denied attribute will be defined, but not both.
<P>The special name "ALLUSERS" is reserved to indicate that all users
are allowed.
<H3>requesting-user-name-denied (1setof name(127))</H3>
<P><I>(CUPS 1.1 and higher)</I>
@@ -1897,6 +1868,9 @@ requesting-user-name-denied attribute will be defined, but not both.
not allowed to access a printer or class. Either this attribute or the
requesting-user-name-allowed attribute will be defined, but not both.
<P>The special name "ALLUSERS" is reserved to indicate that all users
are denied.
<H2>Printer Class Attributes</H2>
<H3>member-names (1setof name(127))</H3>
Arquivo binário não exibido.
+2 -2
Ver Arquivo
@@ -7,14 +7,14 @@
<UL>
<LI>CUPS-CMP-1.1: CUPS Configuration Management Plan
<LI>CUPS-IDD-1.1: CUPS System Interface Design Description
<LI>CUPS-IPP-1.1: CUPS Implementation of IPP
<LI>CUPS-IPP-1.1: CUPS Implmentation of IPP
<LI>CUPS-SAM-1.1.x: CUPS Software Administrators Manual
<LI>CUPS-SDD-1.1: CUPS Software Design Description
<LI>CUPS-SPM-1.1.x: CUPS Software Programming Manual
<LI>CUPS-SSR-1.1: CUPS Software Security Report
<LI>CUPS-STP-1.1: CUPS Software Test Plan
<LI>CUPS-SUM-1.1.x: CUPS Software Users Manual
<LI>CUPS-SVD-1.1: CUPS Software Version Description
<LI>CUPS-SVD-1.1.x: CUPS Software Version Description
</UL>
<H2>Other Documents</H2>
+3781 -4735
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+2717 -2655
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+10 -112
Ver Arquivo
@@ -1,7 +1,7 @@
<HTML>
<HEAD>
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-2000, All Rights Reserved">
<META NAME="DOCNUMBER" CONTENT="CUPS-SAM-1.1.5">
<META NAME="DOCNUMBER" CONTENT="CUPS-SAM-1.1">
<META NAME="Author" CONTENT="Easy Software Products">
<TITLE>CUPS Software Administrators Manual</TITLE>
</HEAD>
@@ -11,7 +11,7 @@
<P>This software administrators manual provides printer administration
information for the Common UNIX Printing System<SUP>TM</SUP>
("CUPS<SUP>TM</SUP>"), version 1.1.5.
("CUPS<SUP>TM</SUP>"), version 1.1.
<EMBED SRC="system-overview.shtml">
@@ -219,19 +219,6 @@ prior to running configure:
<B>./configure ... ENTER</B>
</PRE></UL>
<P>To enable support for encryption, you'll also want to add the
"--enable-ssl" option:
<UL><PRE>
./configure --enable-ssl
</PRE></UL>
<P>SSL and TLS support require the OpenSSL library, available at:
<UL><PRE>
<A HREF="http://www.openssl.org">http://www.openssl.org</A>
</PRE></UL>
<P>Once you have configured things, just type:
<UL><PRE>
@@ -837,7 +824,6 @@ determine how the server operates:
<LI><A HREF="#AuthClass"><CODE>AuthClass</CODE></A>
<LI><A HREF="#AuthGroupName"><CODE>AuthGroupName</CODE></A>
<LI><A HREF="#AuthType"><CODE>AuthType</CODE></A>
<LI><A HREF="#AutoPurgeJobs"><CODE>AutoPurgeJobs</CODE></A>
<LI><A HREF="#BrowseAddress"><CODE>BrowseAddress</CODE></A>
<LI><A HREF="#BrowseAllow"><CODE>BrowseAllow</CODE></A>
<LI><A HREF="#BrowseDeny"><CODE>BrowseDeny</CODE></A>
@@ -862,7 +848,6 @@ determine how the server operates:
<LI><A HREF="#Deny"><CODE>Deny</CODE></A>
<LI><A HREF="#DocumentRoot"><CODE>DocumentRoot</CODE></A>
<LI><A HREF="#ErrorLog"><CODE>ErrorLog</CODE></A>
<LI><A HREF="#FilterLimit"><CODE>FilterLimit</CODE></A>
<LI><A HREF="#Group"><CODE>Group</CODE></A>
<LI><A HREF="#HostNameLookups"><CODE>HostNameLookups</CODE></A>
<LI><A HREF="#ImplicitClasses"><CODE>ImplicitClasses</CODE></A>
@@ -872,7 +857,6 @@ determine how the server operates:
<LI><A HREF="#Location"><CODE>Location</CODE></A>
<LI><A HREF="#LogLevel"><CODE>LogLevel</CODE></A>
<LI><A HREF="#MaxClients"><CODE>MaxClients</CODE></A>
<LI><A HREF="#MaxJobs"><CODE>MaxJobs</CODE></A>
<LI><A HREF="#MaxLogSize"><CODE>MaxLogSize</CODE></A>
<LI><A HREF="#MaxRequestSize"><CODE>MaxRequestSize</CODE></A>
@@ -888,7 +872,6 @@ determine how the server operates:
<LI><A HREF="#PreserveJobFiles"><CODE>PreserveJobFiles</CODE></A>
<LI><A HREF="#PreserveJobHistory"><CODE>PreserveJobHistory</CODE></A>
<LI><A HREF="#Printcap"><CODE>Printcap</CODE></A>
<LI><A HREF="#RemoteRoot"><CODE>RemoteRoot</CODE></A>
<LI><A HREF="#RequestRoot"><CODE>RequestRoot</CODE></A>
<LI><A HREF="#RIPCache"><CODE>RIPCache</CODE></A>
<LI><A HREF="#ServerAdmin"><CODE>ServerAdmin</CODE></A>
@@ -1092,23 +1075,6 @@ authenticate using <A HREF="#CERTIFICATES">certificates</A>.
<P>The <CODE>AuthType</CODE> directive must appear inside a
<A HREF="#Location"><CODE>Location</CODE></A> directive.
<!-- NEED 3in -->
<H3><A NAME="AutoPurgeJobs">AutoPurgeJobs</A></H3>
<HR>
<H4>Examples</H4>
<UL><PRE>
AutoPurgeJobs Yes
AutoPurgeJobs No
</PRE></UL>
<H4>Description</H4>
<P>The <CODE>AutoPurgeJobs</CODE> directive specifies whether or not to purge
completed jobs once they are no longer required for quotas. This option has
no effect if quotas are not enabled. The default setting is <CODE>No</CODE>.
<!-- NEED 5in -->
<H3><A NAME="BrowseAddress">BrowseAddress</A></H3>
<HR>
@@ -1570,33 +1536,6 @@ default error log file is <VAR>/var/log/cups/error_log</VAR>.
<P>The special name "syslog" can be used to send the error information
to the system log instead of a plain file.
<!-- NEED 3in -->
<H3><A NAME="FilterLimit">FilterLimit</A></H3>
<HR>
<H4>Examples</H4>
<UL><PRE>
FilterLimit 0
FilterLimit 200
FilterLimit 1000
</PRE></UL>
<H4>Description</H4>
<P>The <CODE>FilterLimit</CODE> directive sets the maximum cost
of all running job filters. It can be used to limit the number
of filter programs that are run on a server to minimize disk,
memory, and CPU resource problems. A limit of 0 disables filter
limiting.
<P>An average print to a non-PostScript printer needs a filter
limit of about 200. A PostScript printer needs about half that
(100). Setting the limit below these thresholds will effectively
limit the scheduler to printing a single job at any time.
<P>The default limit is 0.
<!-- NEED 3in -->
<H3><A NAME="Group">Group</A></H3>
<HR>
@@ -1806,29 +1745,6 @@ simultaneous clients that will be allowed by the server. The default is
</TR>
</TABLE></CENTER>
<!-- NEED 3in -->
<H3><A NAME="MaxJobs">MaxJobs</A></H3>
<HR>
<H4>Examples</H4>
<UL><PRE>
MaxJobs 100
MaxJobs 9999
MaxJobs 0
</PRE></UL>
<H4>Description</H4>
<P>The <CODE>MaxJobs</CODE> directive controls the maximum number of jobs
that are kept in memory. Once the number of jobs reaches the limit, the
oldest completed job is automatically purged from the system to make room
for the new one. If all of the known jobs are still pending or active then
the new job will be rejected.
<P>Setting the maximum size to 0 disables this functionality. The default
setting is 0.
<!-- NEED 3in -->
<H3><A NAME="MaxLogSize">MaxLogSize</A></H3>
<HR>
@@ -2009,34 +1925,15 @@ Printcap /etc/printcap
<H4>Description</H4>
<P>The <CODE>Printcap</CODE> directive controls whether or not a
printcap file is automatically generated and updated with a list
of available printers. If specified with no value, then no
printcap file will be generated. The default is to generate a
file named <VAR>/etc/printcap</VAR>.
printcap file is automatically generated and updated with a list of
available printers. If specified with no value (the default), then no
printcap file will be generated.
<P>When a filename is specified (e.g. <VAR>/etc/printcap</VAR>), the
printcap file is written whenever a printer is added or removed. The
printcap file can then be used by applications that are hardcoded to
look at the printcap file for the available printers.
<!-- NEED 3in -->
<H3><A NAME="RemoteRoot">RemoteRoot</A></H3>
<HR>
<H4>Examples</H4>
<UL><PRE>
RemoteRoot remroot
RemoteRoot root
</PRE></UL>
<H4>Description</H4>
<P>The <CODE>RemoteRoot</CODE> directive sets the username for
unauthenticated root requests from remote hosts. The default
username is <VAR>remroot</VAR>. Setting <CODE>RemoteRoot</CODE>
to <VAR>root</VAR> effectively disables this security mechanism.
<!-- NEED 3in -->
<H3><A NAME="RequestRoot">RequestRoot</A></H3>
<HR>
@@ -2503,10 +2400,11 @@ Password again: <B>(password) ENTER</B> [password is not echoed]
<!-- NEW PAGE -->
<H2><A NAME="PRINTER_ACCOUNTING">Printer Accounting</A></H2>
<P>ESP Print Pro maintains a log of all accesses, errors, and
pages that are printed. The log files are normally stored in the
<VAR>/var/log/cups</VAR> directory. You can change this by
editing the <VAR>/etc/cups/cupsd.conf</VAR> configuration file.
<P>CUPS maintains a log of all accesses, errors, and pages that are
<P>The log files are normally stored in the <VAR>/var/log/cups</VAR>
directory. You can change this by editing the
<VAR>/etc/cups/cupsd.conf</VAR> configuration file.
<H3>The access_log File</H3>
+492 -611
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+344 -350
Ver Arquivo
@@ -1,6 +1,6 @@
%PDF-1.2
%âãÏÓ
1 0 obj<</Producer(htmldoc 1.9b1 Copyright 1997-2000 Easy Software Products, All Rights Reserved.)/CreationDate(D:20001118181220Z)/Title( CUPS Software Design Description)/Author(Easy Software Products)>>endobj
1 0 obj<</Producer(htmldoc 1.8.8 Copyright 1997-2000 Easy Software Products, All Rights Reserved.)/CreationDate(D:20000710174133Z)/Title( CUPS Software Design Description)/Author(Easy Software Products)>>endobj
2 0 obj<</Type/Encoding/Differences[ 32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/minus/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 128/Euro 130/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE 145/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe 159/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]>>endobj
3 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding 2 0 R>>endobj
4 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier-Oblique/Encoding 2 0 R>>endobj
@@ -51,53 +51,52 @@
35 0 R
37 0 R
]endobj
39 0 obj<</Subtype/Link/Rect[72.0 684.0 107.8 697.0]/Border[0 0 0]/Dest[212 0 R/XYZ null 798 0]>>endobj
40 0 obj<</Subtype/Link/Rect[108.0 670.8 183.8 683.8]/Border[0 0 0]/Dest[212 0 R/XYZ null 745 0]>>endobj
41 0 obj<</Subtype/Link/Rect[108.0 657.6 203.0 670.6]/Border[0 0 0]/Dest[212 0 R/XYZ null 672 0]>>endobj
42 0 obj<</Subtype/Link/Rect[108.0 644.4 216.4 657.4]/Border[0 0 0]/Dest[212 0 R/XYZ null 467 0]>>endobj
43 0 obj<</Subtype/Link/Rect[72.0 618.0 131.6 631.0]/Border[0 0 0]/Dest[218 0 R/XYZ null 798 0]>>endobj
44 0 obj<</Subtype/Link/Rect[108.0 604.8 222.6 617.8]/Border[0 0 0]/Dest[218 0 R/XYZ null 745 0]>>endobj
45 0 obj<</Subtype/Link/Rect[108.0 591.6 202.4 604.6]/Border[0 0 0]/Dest[218 0 R/XYZ null 540 0]>>endobj
46 0 obj<</Subtype/Link/Rect[72.0 565.2 160.0 578.2]/Border[0 0 0]/Dest[224 0 R/XYZ null 798 0]>>endobj
47 0 obj<</Subtype/Link/Rect[108.0 552.0 167.3 565.0]/Border[0 0 0]/Dest[224 0 R/XYZ null 587 0]>>endobj
48 0 obj<</Subtype/Link/Rect[144.0 538.8 182.8 551.8]/Border[0 0 0]/Dest[224 0 R/XYZ null 327 0]>>endobj
49 0 obj<</Subtype/Link/Rect[144.0 525.6 182.8 538.6]/Border[0 0 0]/Dest[224 0 R/XYZ null 257 0]>>endobj
50 0 obj<</Subtype/Link/Rect[144.0 512.4 201.7 525.4]/Border[0 0 0]/Dest[224 0 R/XYZ null 164 0]>>endobj
51 0 obj<</Subtype/Link/Rect[144.0 499.2 192.6 512.2]/Border[0 0 0]/Dest[227 0 R/XYZ null 744 0]>>endobj
52 0 obj<</Subtype/Link/Rect[144.0 486.0 196.9 499.0]/Border[0 0 0]/Dest[227 0 R/XYZ null 478 0]>>endobj
53 0 obj<</Subtype/Link/Rect[144.0 472.8 184.0 485.8]/Border[0 0 0]/Dest[227 0 R/XYZ null 358 0]>>endobj
54 0 obj<</Subtype/Link/Rect[108.0 459.6 217.1 472.6]/Border[0 0 0]/Dest[227 0 R/XYZ null 280 0]>>endobj
55 0 obj<</Subtype/Link/Rect[144.0 446.4 182.2 459.4]/Border[0 0 0]/Dest[227 0 R/XYZ null 191 0]>>endobj
56 0 obj<</Subtype/Link/Rect[144.0 433.2 182.8 446.2]/Border[0 0 0]/Dest[230 0 R/XYZ null 768 0]>>endobj
57 0 obj<</Subtype/Link/Rect[144.0 420.0 181.0 433.0]/Border[0 0 0]/Dest[230 0 R/XYZ null 711 0]>>endobj
58 0 obj<</Subtype/Link/Rect[144.0 406.8 189.5 419.8]/Border[0 0 0]/Dest[230 0 R/XYZ null 641 0]>>endobj
59 0 obj<</Subtype/Link/Rect[108.0 393.6 143.4 406.6]/Border[0 0 0]/Dest[230 0 R/XYZ null 600 0]>>endobj
60 0 obj<</Subtype/Link/Rect[144.0 380.4 212.4 393.4]/Border[0 0 0]/Dest[230 0 R/XYZ null 499 0]>>endobj
61 0 obj<</Subtype/Link/Rect[144.0 367.2 215.5 380.2]/Border[0 0 0]/Dest[230 0 R/XYZ null 429 0]>>endobj
62 0 obj<</Subtype/Link/Rect[144.0 354.0 203.3 367.0]/Border[0 0 0]/Dest[230 0 R/XYZ null 359 0]>>endobj
63 0 obj<</Subtype/Link/Rect[144.0 340.8 218.5 353.8]/Border[0 0 0]/Dest[230 0 R/XYZ null 303 0]>>endobj
64 0 obj<</Subtype/Link/Rect[108.0 327.6 310.6 340.6]/Border[0 0 0]/Dest[230 0 R/XYZ null 248 0]>>endobj
65 0 obj<</Subtype/Link/Rect[144.0 314.4 272.3 327.4]/Border[0 0 0]/Dest[230 0 R/XYZ null 160 0]>>endobj
66 0 obj<</Subtype/Link/Rect[144.0 301.2 242.4 314.2]/Border[0 0 0]/Dest[233 0 R/XYZ null 768 0]>>endobj
67 0 obj<</Subtype/Link/Rect[144.0 288.0 230.8 301.0]/Border[0 0 0]/Dest[233 0 R/XYZ null 698 0]>>endobj
68 0 obj<</Subtype/Link/Rect[144.0 274.8 258.3 287.8]/Border[0 0 0]/Dest[233 0 R/XYZ null 628 0]>>endobj
69 0 obj<</Subtype/Link/Rect[144.0 261.6 235.1 274.6]/Border[0 0 0]/Dest[233 0 R/XYZ null 559 0]>>endobj
70 0 obj<</Subtype/Link/Rect[108.0 248.4 227.2 261.4]/Border[0 0 0]/Dest[233 0 R/XYZ null 504 0]>>endobj
71 0 obj<</Subtype/Link/Rect[144.0 235.2 317.9 248.2]/Border[0 0 0]/Dest[233 0 R/XYZ null 416 0]>>endobj
72 0 obj<</Subtype/Link/Rect[144.0 222.0 300.1 235.0]/Border[0 0 0]/Dest[233 0 R/XYZ null 346 0]>>endobj
73 0 obj<</Subtype/Link/Rect[144.0 208.8 302.6 221.8]/Border[0 0 0]/Dest[233 0 R/XYZ null 263 0]>>endobj
74 0 obj<</Subtype/Link/Rect[144.0 195.6 247.9 208.6]/Border[0 0 0]/Dest[233 0 R/XYZ null 207 0]>>endobj
75 0 obj<</Subtype/Link/Rect[144.0 182.4 262.2 195.4]/Border[0 0 0]/Dest[236 0 R/XYZ null 768 0]>>endobj
76 0 obj<</Subtype/Link/Rect[144.0 169.2 243.0 182.2]/Border[0 0 0]/Dest[236 0 R/XYZ null 711 0]>>endobj
77 0 obj<</Subtype/Link/Rect[108.0 156.0 166.0 169.0]/Border[0 0 0]/Dest[236 0 R/XYZ null 656 0]>>endobj
78 0 obj<</Subtype/Link/Rect[144.0 142.8 261.6 155.8]/Border[0 0 0]/Dest[236 0 R/XYZ null 568 0]>>endobj
79 0 obj<</Subtype/Link/Rect[144.0 129.6 240.6 142.6]/Border[0 0 0]/Dest[236 0 R/XYZ null 512 0]>>endobj
80 0 obj<</Subtype/Link/Rect[108.0 116.4 152.6 129.4]/Border[0 0 0]/Dest[236 0 R/XYZ null 444 0]>>endobj
81 0 obj<</Subtype/Link/Rect[144.0 103.2 206.6 116.2]/Border[0 0 0]/Dest[236 0 R/XYZ null 197 0]>>endobj
82 0 obj<</Subtype/Link/Rect[144.0 90.0 214.0 103.0]/Border[0 0 0]/Dest[239 0 R/XYZ null 768 0]>>endobj
83 0 obj<</Subtype/Link/Rect[144.0 76.8 228.6 89.8]/Border[0 0 0]/Dest[239 0 R/XYZ null 711 0]>>endobj
84 0 obj<</Subtype/Link/Rect[144.0 63.6 201.8 76.6]/Border[0 0 0]/Dest[239 0 R/XYZ null 655 0]>>endobj
85 0 obj[39 0 R
39 0 obj<</Subtype/Link/Rect[72.0 670.8 107.8 683.8]/Border[0 0 0]/Dest[212 0 R/XYZ null 798 0]>>endobj
40 0 obj<</Subtype/Link/Rect[108.0 657.6 183.8 670.6]/Border[0 0 0]/Dest[212 0 R/XYZ null 745 0]>>endobj
41 0 obj<</Subtype/Link/Rect[108.0 644.4 203.0 657.4]/Border[0 0 0]/Dest[212 0 R/XYZ null 672 0]>>endobj
42 0 obj<</Subtype/Link/Rect[108.0 631.2 216.4 644.2]/Border[0 0 0]/Dest[212 0 R/XYZ null 467 0]>>endobj
43 0 obj<</Subtype/Link/Rect[72.0 604.8 131.6 617.8]/Border[0 0 0]/Dest[218 0 R/XYZ null 798 0]>>endobj
44 0 obj<</Subtype/Link/Rect[108.0 591.6 222.6 604.6]/Border[0 0 0]/Dest[218 0 R/XYZ null 745 0]>>endobj
45 0 obj<</Subtype/Link/Rect[108.0 578.4 202.4 591.4]/Border[0 0 0]/Dest[218 0 R/XYZ null 540 0]>>endobj
46 0 obj<</Subtype/Link/Rect[72.0 552.0 160.0 565.0]/Border[0 0 0]/Dest[224 0 R/XYZ null 798 0]>>endobj
47 0 obj<</Subtype/Link/Rect[108.0 538.8 167.3 551.8]/Border[0 0 0]/Dest[224 0 R/XYZ null 587 0]>>endobj
48 0 obj<</Subtype/Link/Rect[144.0 525.6 182.8 538.6]/Border[0 0 0]/Dest[224 0 R/XYZ null 327 0]>>endobj
49 0 obj<</Subtype/Link/Rect[144.0 512.4 182.8 525.4]/Border[0 0 0]/Dest[224 0 R/XYZ null 257 0]>>endobj
50 0 obj<</Subtype/Link/Rect[144.0 499.2 201.7 512.2]/Border[0 0 0]/Dest[224 0 R/XYZ null 164 0]>>endobj
51 0 obj<</Subtype/Link/Rect[144.0 486.0 192.6 499.0]/Border[0 0 0]/Dest[227 0 R/XYZ null 744 0]>>endobj
52 0 obj<</Subtype/Link/Rect[144.0 472.8 196.9 485.8]/Border[0 0 0]/Dest[227 0 R/XYZ null 544 0]>>endobj
53 0 obj<</Subtype/Link/Rect[144.0 459.6 184.0 472.6]/Border[0 0 0]/Dest[227 0 R/XYZ null 424 0]>>endobj
54 0 obj<</Subtype/Link/Rect[108.0 446.4 217.1 459.4]/Border[0 0 0]/Dest[227 0 R/XYZ null 346 0]>>endobj
55 0 obj<</Subtype/Link/Rect[144.0 433.2 182.2 446.2]/Border[0 0 0]/Dest[227 0 R/XYZ null 257 0]>>endobj
56 0 obj<</Subtype/Link/Rect[144.0 420.0 182.8 433.0]/Border[0 0 0]/Dest[227 0 R/XYZ null 148 0]>>endobj
57 0 obj<</Subtype/Link/Rect[144.0 406.8 181.0 419.8]/Border[0 0 0]/Dest[230 0 R/XYZ null 768 0]>>endobj
58 0 obj<</Subtype/Link/Rect[144.0 393.6 189.5 406.6]/Border[0 0 0]/Dest[230 0 R/XYZ null 698 0]>>endobj
59 0 obj<</Subtype/Link/Rect[108.0 380.4 143.4 393.4]/Border[0 0 0]/Dest[230 0 R/XYZ null 656 0]>>endobj
60 0 obj<</Subtype/Link/Rect[144.0 367.2 212.4 380.2]/Border[0 0 0]/Dest[230 0 R/XYZ null 555 0]>>endobj
61 0 obj<</Subtype/Link/Rect[144.0 354.0 215.5 367.0]/Border[0 0 0]/Dest[230 0 R/XYZ null 485 0]>>endobj
62 0 obj<</Subtype/Link/Rect[144.0 340.8 203.3 353.8]/Border[0 0 0]/Dest[230 0 R/XYZ null 416 0]>>endobj
63 0 obj<</Subtype/Link/Rect[144.0 327.6 218.5 340.6]/Border[0 0 0]/Dest[230 0 R/XYZ null 359 0]>>endobj
64 0 obj<</Subtype/Link/Rect[108.0 314.4 310.6 327.4]/Border[0 0 0]/Dest[230 0 R/XYZ null 305 0]>>endobj
65 0 obj<</Subtype/Link/Rect[144.0 301.2 272.3 314.2]/Border[0 0 0]/Dest[230 0 R/XYZ null 217 0]>>endobj
66 0 obj<</Subtype/Link/Rect[144.0 288.0 242.4 301.0]/Border[0 0 0]/Dest[233 0 R/XYZ null 768 0]>>endobj
67 0 obj<</Subtype/Link/Rect[144.0 274.8 230.8 287.8]/Border[0 0 0]/Dest[233 0 R/XYZ null 698 0]>>endobj
68 0 obj<</Subtype/Link/Rect[144.0 261.6 258.3 274.6]/Border[0 0 0]/Dest[233 0 R/XYZ null 628 0]>>endobj
69 0 obj<</Subtype/Link/Rect[144.0 248.4 235.1 261.4]/Border[0 0 0]/Dest[233 0 R/XYZ null 559 0]>>endobj
70 0 obj<</Subtype/Link/Rect[108.0 235.2 227.2 248.2]/Border[0 0 0]/Dest[233 0 R/XYZ null 504 0]>>endobj
71 0 obj<</Subtype/Link/Rect[144.0 222.0 317.9 235.0]/Border[0 0 0]/Dest[233 0 R/XYZ null 416 0]>>endobj
72 0 obj<</Subtype/Link/Rect[144.0 208.8 300.1 221.8]/Border[0 0 0]/Dest[233 0 R/XYZ null 346 0]>>endobj
73 0 obj<</Subtype/Link/Rect[144.0 195.6 302.6 208.6]/Border[0 0 0]/Dest[233 0 R/XYZ null 263 0]>>endobj
74 0 obj<</Subtype/Link/Rect[144.0 182.4 247.9 195.4]/Border[0 0 0]/Dest[233 0 R/XYZ null 207 0]>>endobj
75 0 obj<</Subtype/Link/Rect[144.0 169.2 262.2 182.2]/Border[0 0 0]/Dest[236 0 R/XYZ null 768 0]>>endobj
76 0 obj<</Subtype/Link/Rect[144.0 156.0 243.0 169.0]/Border[0 0 0]/Dest[236 0 R/XYZ null 711 0]>>endobj
77 0 obj<</Subtype/Link/Rect[108.0 142.8 166.0 155.8]/Border[0 0 0]/Dest[236 0 R/XYZ null 656 0]>>endobj
78 0 obj<</Subtype/Link/Rect[144.0 129.6 261.6 142.6]/Border[0 0 0]/Dest[236 0 R/XYZ null 568 0]>>endobj
79 0 obj<</Subtype/Link/Rect[144.0 116.4 240.6 129.4]/Border[0 0 0]/Dest[236 0 R/XYZ null 512 0]>>endobj
80 0 obj<</Subtype/Link/Rect[108.0 103.2 152.6 116.2]/Border[0 0 0]/Dest[236 0 R/XYZ null 444 0]>>endobj
81 0 obj<</Subtype/Link/Rect[144.0 90.0 206.6 103.0]/Border[0 0 0]/Dest[236 0 R/XYZ null 197 0]>>endobj
82 0 obj<</Subtype/Link/Rect[144.0 76.8 214.0 89.8]/Border[0 0 0]/Dest[239 0 R/XYZ null 768 0]>>endobj
83 0 obj<</Subtype/Link/Rect[144.0 63.6 228.6 76.6]/Border[0 0 0]/Dest[239 0 R/XYZ null 711 0]>>endobj
84 0 obj[39 0 R
40 0 R
41 0 R
42 0 R
@@ -142,43 +141,44 @@
81 0 R
82 0 R
83 0 R
84 0 R
]endobj
86 0 obj<</Subtype/Link/Rect[108.0 684.0 160.9 697.0]/Border[0 0 0]/Dest[239 0 R/XYZ null 598 0]>>endobj
87 0 obj<</Subtype/Link/Rect[108.0 670.8 175.5 683.8]/Border[0 0 0]/Dest[239 0 R/XYZ null 529 0]>>endobj
88 0 obj<</Subtype/Link/Rect[108.0 657.6 191.4 670.6]/Border[0 0 0]/Dest[239 0 R/XYZ null 472 0]>>endobj
89 0 obj<</Subtype/Link/Rect[108.0 644.4 176.7 657.4]/Border[0 0 0]/Dest[239 0 R/XYZ null 403 0]>>endobj
90 0 obj<</Subtype/Link/Rect[108.0 631.2 167.6 644.2]/Border[0 0 0]/Dest[239 0 R/XYZ null 333 0]>>endobj
91 0 obj<</Subtype/Link/Rect[72.0 618.0 132.5 631.0]/Border[0 0 0]/Dest[239 0 R/XYZ null 292 0]>>endobj
92 0 obj<</Subtype/Link/Rect[108.0 604.8 193.9 617.8]/Border[0 0 0]/Dest[239 0 R/XYZ null 190 0]>>endobj
93 0 obj<</Subtype/Link/Rect[108.0 591.6 165.8 604.6]/Border[0 0 0]/Dest[242 0 R/XYZ null 768 0]>>endobj
94 0 obj<</Subtype/Link/Rect[108.0 578.4 159.6 591.4]/Border[0 0 0]/Dest[242 0 R/XYZ null 698 0]>>endobj
95 0 obj<</Subtype/Link/Rect[108.0 565.2 194.5 578.2]/Border[0 0 0]/Dest[242 0 R/XYZ null 575 0]>>endobj
96 0 obj<</Subtype/Link/Rect[108.0 552.0 168.2 565.0]/Border[0 0 0]/Dest[242 0 R/XYZ null 493 0]>>endobj
97 0 obj<</Subtype/Link/Rect[108.0 538.8 214.9 551.8]/Border[0 0 0]/Dest[242 0 R/XYZ null 423 0]>>endobj
98 0 obj<</Subtype/Link/Rect[108.0 525.6 148.6 538.6]/Border[0 0 0]/Dest[242 0 R/XYZ null 314 0]>>endobj
99 0 obj<</Subtype/Link/Rect[108.0 512.4 152.3 525.4]/Border[0 0 0]/Dest[242 0 R/XYZ null 231 0]>>endobj
100 0 obj<</Subtype/Link/Rect[108.0 499.2 170.0 512.2]/Border[0 0 0]/Dest[242 0 R/XYZ null 161 0]>>endobj
101 0 obj<</Subtype/Link/Rect[108.0 486.0 161.5 499.0]/Border[0 0 0]/Dest[245 0 R/XYZ null 768 0]>>endobj
102 0 obj<</Subtype/Link/Rect[108.0 472.8 168.2 485.8]/Border[0 0 0]/Dest[245 0 R/XYZ null 685 0]>>endobj
103 0 obj<</Subtype/Link/Rect[108.0 459.6 162.7 472.6]/Border[0 0 0]/Dest[245 0 R/XYZ null 602 0]>>endobj
104 0 obj<</Subtype/Link/Rect[108.0 446.4 172.5 459.4]/Border[0 0 0]/Dest[245 0 R/XYZ null 532 0]>>endobj
105 0 obj<</Subtype/Link/Rect[72.0 433.2 184.5 446.2]/Border[0 0 0]/Dest[245 0 R/XYZ null 478 0]>>endobj
106 0 obj<</Subtype/Link/Rect[108.0 420.0 160.8 433.0]/Border[0 0 0]/Dest[245 0 R/XYZ null 389 0]>>endobj
107 0 obj<</Subtype/Link/Rect[108.0 406.8 160.8 419.8]/Border[0 0 0]/Dest[245 0 R/XYZ null 333 0]>>endobj
108 0 obj<</Subtype/Link/Rect[108.0 393.6 163.9 406.6]/Border[0 0 0]/Dest[245 0 R/XYZ null 277 0]>>endobj
109 0 obj<</Subtype/Link/Rect[108.0 380.4 161.5 393.4]/Border[0 0 0]/Dest[245 0 R/XYZ null 220 0]>>endobj
110 0 obj<</Subtype/Link/Rect[108.0 367.2 141.3 380.2]/Border[0 0 0]/Dest[245 0 R/XYZ null 164 0]>>endobj
111 0 obj<</Subtype/Link/Rect[108.0 354.0 168.8 367.0]/Border[0 0 0]/Dest[248 0 R/XYZ null 768 0]>>endobj
112 0 obj<</Subtype/Link/Rect[108.0 340.8 159.0 353.8]/Border[0 0 0]/Dest[248 0 R/XYZ null 685 0]>>endobj
113 0 obj<</Subtype/Link/Rect[108.0 327.6 165.8 340.6]/Border[0 0 0]/Dest[248 0 R/XYZ null 628 0]>>endobj
114 0 obj<</Subtype/Link/Rect[108.0 314.4 173.7 327.4]/Border[0 0 0]/Dest[248 0 R/XYZ null 572 0]>>endobj
115 0 obj<</Subtype/Link/Rect[108.0 301.2 162.1 314.2]/Border[0 0 0]/Dest[248 0 R/XYZ null 515 0]>>endobj
116 0 obj<</Subtype/Link/Rect[108.0 288.0 162.7 301.0]/Border[0 0 0]/Dest[248 0 R/XYZ null 459 0]>>endobj
117 0 obj<</Subtype/Link/Rect[36.0 261.6 88.2 274.6]/Border[0 0 0]/Dest[254 0 R/XYZ null 798 0]>>endobj
118 0 obj<</Subtype/Link/Rect[72.0 248.4 119.0 261.4]/Border[0 0 0]/Dest[254 0 R/XYZ null 745 0]>>endobj
119 0 obj<</Subtype/Link/Rect[72.0 235.2 136.8 248.2]/Border[0 0 0]/Dest[254 0 R/XYZ null 566 0]>>endobj
120 0 obj[86 0 R
85 0 obj<</Subtype/Link/Rect[108.0 670.8 165.8 683.8]/Border[0 0 0]/Dest[239 0 R/XYZ null 655 0]>>endobj
86 0 obj<</Subtype/Link/Rect[108.0 657.6 160.9 670.6]/Border[0 0 0]/Dest[239 0 R/XYZ null 598 0]>>endobj
87 0 obj<</Subtype/Link/Rect[108.0 644.4 175.5 657.4]/Border[0 0 0]/Dest[239 0 R/XYZ null 529 0]>>endobj
88 0 obj<</Subtype/Link/Rect[108.0 631.2 191.4 644.2]/Border[0 0 0]/Dest[239 0 R/XYZ null 472 0]>>endobj
89 0 obj<</Subtype/Link/Rect[108.0 618.0 176.7 631.0]/Border[0 0 0]/Dest[239 0 R/XYZ null 403 0]>>endobj
90 0 obj<</Subtype/Link/Rect[108.0 604.8 167.6 617.8]/Border[0 0 0]/Dest[239 0 R/XYZ null 333 0]>>endobj
91 0 obj<</Subtype/Link/Rect[72.0 591.6 132.5 604.6]/Border[0 0 0]/Dest[239 0 R/XYZ null 292 0]>>endobj
92 0 obj<</Subtype/Link/Rect[108.0 578.4 193.9 591.4]/Border[0 0 0]/Dest[239 0 R/XYZ null 190 0]>>endobj
93 0 obj<</Subtype/Link/Rect[108.0 565.2 165.8 578.2]/Border[0 0 0]/Dest[242 0 R/XYZ null 768 0]>>endobj
94 0 obj<</Subtype/Link/Rect[108.0 552.0 159.6 565.0]/Border[0 0 0]/Dest[242 0 R/XYZ null 698 0]>>endobj
95 0 obj<</Subtype/Link/Rect[108.0 538.8 194.5 551.8]/Border[0 0 0]/Dest[242 0 R/XYZ null 575 0]>>endobj
96 0 obj<</Subtype/Link/Rect[108.0 525.6 168.2 538.6]/Border[0 0 0]/Dest[242 0 R/XYZ null 493 0]>>endobj
97 0 obj<</Subtype/Link/Rect[108.0 512.4 214.9 525.4]/Border[0 0 0]/Dest[242 0 R/XYZ null 423 0]>>endobj
98 0 obj<</Subtype/Link/Rect[108.0 499.2 148.6 512.2]/Border[0 0 0]/Dest[242 0 R/XYZ null 314 0]>>endobj
99 0 obj<</Subtype/Link/Rect[108.0 486.0 152.3 499.0]/Border[0 0 0]/Dest[242 0 R/XYZ null 231 0]>>endobj
100 0 obj<</Subtype/Link/Rect[108.0 472.8 170.0 485.8]/Border[0 0 0]/Dest[242 0 R/XYZ null 161 0]>>endobj
101 0 obj<</Subtype/Link/Rect[108.0 459.6 161.5 472.6]/Border[0 0 0]/Dest[245 0 R/XYZ null 768 0]>>endobj
102 0 obj<</Subtype/Link/Rect[108.0 446.4 168.2 459.4]/Border[0 0 0]/Dest[245 0 R/XYZ null 685 0]>>endobj
103 0 obj<</Subtype/Link/Rect[108.0 433.2 162.7 446.2]/Border[0 0 0]/Dest[245 0 R/XYZ null 602 0]>>endobj
104 0 obj<</Subtype/Link/Rect[108.0 420.0 172.5 433.0]/Border[0 0 0]/Dest[245 0 R/XYZ null 532 0]>>endobj
105 0 obj<</Subtype/Link/Rect[72.0 406.8 184.5 419.8]/Border[0 0 0]/Dest[245 0 R/XYZ null 478 0]>>endobj
106 0 obj<</Subtype/Link/Rect[108.0 393.6 160.8 406.6]/Border[0 0 0]/Dest[245 0 R/XYZ null 389 0]>>endobj
107 0 obj<</Subtype/Link/Rect[108.0 380.4 160.8 393.4]/Border[0 0 0]/Dest[245 0 R/XYZ null 333 0]>>endobj
108 0 obj<</Subtype/Link/Rect[108.0 367.2 163.9 380.2]/Border[0 0 0]/Dest[245 0 R/XYZ null 277 0]>>endobj
109 0 obj<</Subtype/Link/Rect[108.0 354.0 161.5 367.0]/Border[0 0 0]/Dest[245 0 R/XYZ null 220 0]>>endobj
110 0 obj<</Subtype/Link/Rect[108.0 340.8 141.3 353.8]/Border[0 0 0]/Dest[245 0 R/XYZ null 164 0]>>endobj
111 0 obj<</Subtype/Link/Rect[108.0 327.6 168.8 340.6]/Border[0 0 0]/Dest[248 0 R/XYZ null 768 0]>>endobj
112 0 obj<</Subtype/Link/Rect[108.0 314.4 159.0 327.4]/Border[0 0 0]/Dest[248 0 R/XYZ null 685 0]>>endobj
113 0 obj<</Subtype/Link/Rect[108.0 301.2 165.8 314.2]/Border[0 0 0]/Dest[248 0 R/XYZ null 628 0]>>endobj
114 0 obj<</Subtype/Link/Rect[108.0 288.0 173.7 301.0]/Border[0 0 0]/Dest[248 0 R/XYZ null 572 0]>>endobj
115 0 obj<</Subtype/Link/Rect[108.0 274.8 162.1 287.8]/Border[0 0 0]/Dest[248 0 R/XYZ null 515 0]>>endobj
116 0 obj<</Subtype/Link/Rect[108.0 261.6 162.7 274.6]/Border[0 0 0]/Dest[248 0 R/XYZ null 459 0]>>endobj
117 0 obj<</Subtype/Link/Rect[36.0 235.2 88.2 248.2]/Border[0 0 0]/Dest[254 0 R/XYZ null 798 0]>>endobj
118 0 obj<</Subtype/Link/Rect[72.0 222.0 119.0 235.0]/Border[0 0 0]/Dest[254 0 R/XYZ null 745 0]>>endobj
119 0 obj<</Subtype/Link/Rect[72.0 208.8 136.8 221.8]/Border[0 0 0]/Dest[254 0 R/XYZ null 566 0]>>endobj
120 0 obj[85 0 R
86 0 R
87 0 R
88 0 R
89 0 R
@@ -229,20 +229,20 @@
134 0 obj<</D[224 0 R/XYZ null 257 null]>>endobj
135 0 obj<</D[224 0 R/XYZ null 164 null]>>endobj
136 0 obj<</D[227 0 R/XYZ null 744 null]>>endobj
137 0 obj<</D[227 0 R/XYZ null 478 null]>>endobj
138 0 obj<</D[227 0 R/XYZ null 358 null]>>endobj
139 0 obj<</D[227 0 R/XYZ null 280 null]>>endobj
140 0 obj<</D[227 0 R/XYZ null 191 null]>>endobj
141 0 obj<</D[230 0 R/XYZ null 768 null]>>endobj
142 0 obj<</D[230 0 R/XYZ null 711 null]>>endobj
143 0 obj<</D[230 0 R/XYZ null 641 null]>>endobj
144 0 obj<</D[230 0 R/XYZ null 600 null]>>endobj
145 0 obj<</D[230 0 R/XYZ null 499 null]>>endobj
146 0 obj<</D[230 0 R/XYZ null 429 null]>>endobj
147 0 obj<</D[230 0 R/XYZ null 359 null]>>endobj
148 0 obj<</D[230 0 R/XYZ null 303 null]>>endobj
149 0 obj<</D[230 0 R/XYZ null 248 null]>>endobj
150 0 obj<</D[230 0 R/XYZ null 160 null]>>endobj
137 0 obj<</D[227 0 R/XYZ null 544 null]>>endobj
138 0 obj<</D[227 0 R/XYZ null 424 null]>>endobj
139 0 obj<</D[227 0 R/XYZ null 346 null]>>endobj
140 0 obj<</D[227 0 R/XYZ null 257 null]>>endobj
141 0 obj<</D[227 0 R/XYZ null 148 null]>>endobj
142 0 obj<</D[230 0 R/XYZ null 768 null]>>endobj
143 0 obj<</D[230 0 R/XYZ null 698 null]>>endobj
144 0 obj<</D[230 0 R/XYZ null 656 null]>>endobj
145 0 obj<</D[230 0 R/XYZ null 555 null]>>endobj
146 0 obj<</D[230 0 R/XYZ null 485 null]>>endobj
147 0 obj<</D[230 0 R/XYZ null 416 null]>>endobj
148 0 obj<</D[230 0 R/XYZ null 359 null]>>endobj
149 0 obj<</D[230 0 R/XYZ null 305 null]>>endobj
150 0 obj<</D[230 0 R/XYZ null 217 null]>>endobj
151 0 obj<</D[233 0 R/XYZ null 768 null]>>endobj
152 0 obj<</D[233 0 R/XYZ null 698 null]>>endobj
153 0 obj<</D[233 0 R/XYZ null 628 null]>>endobj
@@ -363,15 +363,14 @@ endobj
endobj
212 0 obj<</Type/Page/Parent 205 0 R/Contents 213 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>>>/Annots 15 0 R>>endobj
213 0 obj<</Length 214 0 R/Filter/FlateDecode>>stream
xÚ¥UMsÛ6½ëWìädÏDI}º·8r\u‡1åLº@$(! ¥Q}wÊúHÚi“±Çr»ï½}X~ëÅáO cÈ«Þí¢÷æý $,JŒŒ'SXW1d¹nÄõâ«Æ“í†,ñqüµ“¥Ì¹“º©Cˆã.5™°1¥.6Ò‚Õ¥Ûq# V®kú—ÙÐA(tÞVX
£·µ0\¬Km*_ð×mp“o¤¹k±¯ Èu!ë5è’Â[ǃ€ò®*<÷ô0ÿR#-ff{ëDË«WïžÒìÕò¾’bß3NØ00NG?m…ÙJ±£Ü»E/bjJbúóxÃq̦0&,
†SždAñ£P£áÀcE0G84Ú8¾RßuÀß ¨ˆ'´LFãþŠ[QÊpŸb=@Ë`î`Ã-¬„ ­·BaN«=x…Λ5\Ýq»ÿG:ø£dŠ”LÂFÝ÷cBÓøåhÇœo˜÷XvðDjtÑæÎžc‹ØÀi¦Ò'ÖáÔ¹)ŽºX­Zo’†+æ½õi-N˜Á™ÄV!ouãýâÏÜ
ó,”Ø£Áª
_ô•¬:Ò Sò\XÖHÆÁ¾86²Þ¦sÊ«…;ÚI:kEÆ›§)ùއ\}øš’=7øªWÿ·V´Ø˜ýa\`÷=Ð3.ÈîØàC:£úßÖòµ€[¥óg
go1üÚ×~Û4¾F¨Ë+Ξgð‡p3iðŽa‰¦ƒ@èÂ)«/šÛ¶!«¢»vÒmÀ%>”mÓP¸’nßIÏ‹Âвӿ9PDp+£w–8˜T[—ùÅ©‹n³“½DÒÀ3\ƒCh·ä›Ââª}ÕIZ["ܥΒ¸â¼sÕ† ™·ÖéJþ…¶ÝÂÀ¥sÿð÷p!¨¼5·™Úw°tù}Öˆ¢åõ7€× +šU)ñê?ÎStw^û–ŠPªuÝ?Ñ«Ó]’ñªÁÃ…‘„Óë÷ÔË{—fŸÎùÝ"tÅŽdPëÑøÚÿ²0;ìñÓýø‹ŸÌÓfÍk/;ÕþÆ”Z)½ów_x—Ùߨ~Ð^FCÿô–w úÜ=%,“ñÎRìE— <ŠRà,ó°-~¦Ê«Ì¿sUþ©·Xê^i¼ÊfÿjLAܾ I³Ë/ûp±›p0î–ÿçÞß•hssendstream
xÚ¥UÛnÛ8}÷W ú”kÖ’¯Ù·¦Îf½hS5rŠ>ø…¦( %º$eÃýúÎr}iº(PذAÍ휙ÃÑ×N=ü$0N¡?Qunç×ÿÜ@Úƒy‰–Ñxóâ*¼ž Öd­Ýþ€¥ÁΘ²öªT‚{eêè:€$i]Ó1‘ë|­8Sú·
éÔª¦?aÕ†¡0¢©0l¬Ù*´ÀJÖÒr ª.­BzÀ¯_KàV¬•—Â7˜Œ×S¨z¦$3ÀÒI?¢|kª
ãžfŸ!³
Ñ¢g¾w^V°¸zõö)Ë_-®á“´ŽJ )ö3ã” "ãôúa+íVÉùÞÍ;=ÖÞÒOB?÷0%lÃAÊzPÁ`BpâIC;~lÔpÐX̱6Æz¾ÔŸµÀ5ßK Ø‘@h‘GÝ%w²”åÁÅ€ŽÁÌÚ;XJI½ÞJ>:tØ®àꎻý/éà†é)!™” ÛqyûÑ¡‚Iò#´eNÇ4–4‘YS4»sl½6ð†SçqêÜǾ8£› j ×:Î{+ëÂX4Ò8œ0ƒ³_H…´ÕŽ÷Sˆ¹•öYj¹GU>èjUKT¤—¶äB:Ö&HGQ!9rA¦3ò«¥?ÊIz#Œ&áͲŒtÇ£/oÇ:|EÎ|1ˈÿk#¬sô~‡0.°‡()—$w,ð.›RuŠÏßKçøJ­6â™Ìùû[4ÿr¿Ùlr|ŒPWœ=3Îà?é§ÊâÃ6¡ §¹(îš IÕµS~ Vâ(ñP6µ ¡p­ü¾m=/
Ø”±Ï‘"[Z³sÄ™ÀdÆù<,hI]T›žì $Ežñü„ vGºiÑ!,®»XWŸ¸5u!ã]zq–Äç-t/¤hœ7•ú†•¶íÂÀ¥sÿð÷k„q!(ÑX‹ÛLï[X¦üÙkȆ½Åõ7j¯AU4«RáÕœe¨îCïJvB©6u÷¤_m?Q%9¯6\XE8ƒ°þÍB{ï²üÃÃEÕC\¨ÑÒ-bU¬HuMÈý?Û±ÓÃøJ@?cW¼mG &ܘÒhmváîË 2÷w¬%ÚZ¸qÒã8éh ç`ð×=}ʼn#ÈCc^ŠÂ¤ð(K‰q…üvhC§‘éy~3þ Æßkƒ7Ùî£iÒšº-ÛqÂ.ß݃IÝ`fzÚ®÷ïF6lêendstream
endobj
214 0 obj
941
936
endobj
215 0 obj<</Type/Page/Parent 205 0 R/Contents 216 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 8 0 R>>>>>>endobj
216 0 obj<</Length 217 0 R/Filter/FlateDecode>>stream
@@ -383,16 +382,15 @@ endobj
endobj
218 0 obj<</Type/Page/Parent 205 0 R/Contents 219 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>>>/Annots 38 0 R>>endobj
219 0 obj<</Length 220 0 R/Filter/FlateDecode>>stream
xÚµ˜MF†ïüŠ>nªl­4²õÁ 0°¤ ÖAbO¹yl”²$G’‹åß§{F–ÚY3rÀ)ªLõh>ºßy§ÇŸ9`㟾׃4?»ŒÏ¾Þ„ lˆ—øÄóˆ_<Ê¥¬d‘Êú·ø/…8¾FÆîÄ
²¸zšG0+Óm.‹&i²²Ðø§Å…oy„Ç/–åz]¾fÅJ¿¸à/BVCµuÏoмàW;æœ:Æ9…gM¨?êa|õ0;–s®û»*‹e¶ÚVº¿‡¤HV’Þ…ù:i'–¶ûV€³Ã~þžû³¦gcÇÕËTãÜÍflœè­ndwE#«e’J˜É:[ô/­²MŽ6竺Ë7kÙ‡©\>ÿTÿÑÅõoýÜ­§\6¯I%áb‘gEV7Á²ª)‚Ûdý¹¡ö·èÄ‹æï,h^•«*És’Ü)V=ZM$Óm•5o¸k6eÕ|nˆx~hˆXÖ'qôôNœžjy¢|ÿ8˜ïØ=‰÷¿%|g:càcWè/°ñ½yUç<õ‘®S”ÅxÏyj Ù ÙÎu|f[6:'}8ôñx‹þiÙà.Ž“ƒ êÆ¢4rœe€«5áŽãq~2È3"G7<'ÂòÍ<#Ÿú˜#ψ\ȧÈ{Î@8Ýi`¹=ïOöú¿ü%_ÕŠÎ;7˜hU\,Êg4‡²n"%Gô‰ŒÌœën²µ„›²Ê“¢L³e–* uržX®EéG³ÛÑŒÊ6èÉ·Qã;=©†IO-ÝêÉ€·zÚñm!#ÏÌ·#(ڞȻ¡55óŒ@Þ§¼ôüÁüõÛ›2é;Ú ~Éä}R¬¶xî÷Ìâ—¬ZÀõ"£ì}$aï8žÃçð{ù I±è$ɾo¤.Bêš)výUùèu‘– ò.#®’¢þÌÓuÛäû·Ûl!?ÝåC¹k5ÍHæIÑdéðê ;Áž(mL•PTã°”Càw¯¦@ûÆÀ9A>,H§&žÈÊ5M<#hŸ…VÈø#ö=Õûàñæ
¿õÃÜg…ìý,‘9ú–AM™–ë“z•T@›!Ý0dhG«˜h`…3€s2b<Œ<#È 'q#Ïä}ò]#ÏÊèt`þœ “•v•‘gò¡½üaňPè}KŠíŠñÛ2Y×X,U¸‡õݦíÉHþóÿh£ewR “†ZZKÄ@3s†u£ç˜ 'HC.îa#ϪÎ<Œ‰çi(èŸtú*ÅšxF ïÑÚÈ3ù`:ONPõGµAÏ¡Q?d
Fð¨Ód-•<±ô‡¨©¶i³ÅâïÃôEú˜…ú¥ëÂ,ñ
Ú£Rt'hÕ0 º¥µ^ 4ȇ:ç 4 t›xF ÒEËÈ3‚J庉ç]7B’«‰g•‡ ¨ã&!<’͆rü,›W) ¸ŸÏ”Z°|éò^ŸÖÛ¦ŽºèL«†I
-­3m @Þæ’SpNÐù5ÈûœÎÏ Zóô9A©u)µDj§BßáTj=ÇÁ·7,·ù³Ñõ1–ý]Fa<†oq¬*ÔÓ&× úòT7LÉmi;Í*O}
Žç•›ÁÀd8¡‹ßÈsB,æùp"ow¡‘g3¹PÇ!7ìË_3”m¸Ø¢ÁÓ Dçp™ÔYª¶û,[Ñ/ii*ëú½bÿõ#.FÁî¡þ¡ª›Ö¿6®P½í¶úúãìfck”endstream
xÚµ˜KH Çï|
ÙªÄãGâ7 À°5Ylæ´ãt‚·b;k;ÅðíGêöCYB;¶¨
ÕÉÏjEú·¤Î¿'˜øggƒãB’\D'ß®°Mˆ–ø‰ëù-NmxKQŠ<ÕÑ?±<…Œ‰aKȰàòq¬H¶™Èë¸N‹\á°¬·=Ã%<z°,Öëâ%ÍWêÁÒ
Êv×<½BýŒoµÌ™2œ4†mÛ®1!ÛÛ®»;ŸÒãËûùØ2¬3µße‘/ÓÕ¶TûÝÇy¼dæë8ßµŽ[Žúžï¿Í˜ñðµªE·y-Êeœ˜‰*]åô/)ÓMm1çþßf›u¯b øñÇm†ç÷dÓøÕ:^,ë—¸p¾ÈÒ<­jŒOQVŸm¼>ÂþnXZë_ŽpþŽëó²X•q–‘´Žö;|Øçw(’m™Ö¯x$6EYa7šï³‰êXá…ï„ᱟIÜÏÙ~³?Ñ*)îMîÚª0VÇѱÕq´qñ£~eWªËB^äãÒP9ðéºp˜†‰µ^,zy¸Á
h˜àø:’ëc9S5„{hd¸™oøZܲ\ÎOyFdXížÈÛ¶áéyF ?õ0NZž8¶9à'w­p:SßpzÞ›ìØ¿x“¯r½~°w9þD è|Q<a(ª:”âÄZR æj…ët-àº(³¸†p#’t™&²ŠŽ:qO Ç ©ôûšÝ¾­ºÆzùö iÔ器ÄV]r¡SWC7êÒàºZÞ¥§åÙ·lн†çòN`Lõ<#÷(7=@6=KØ7Ù¼‹óÕût?‘Œ zNË\-RÊà±IcÕÛèüY<Aœ/:ù„¢†¡†…êCÕí}“ÿ*OŠÕ52•q^}¸…t¶¨ùËi…JüÍ6]ˆãìÜ ±–…"‹ó:Mør…›™ó©€\ì—2ð½îÑý4è<˜8'¨ÚÚ¤?Ïä}Yu<#èüFÀøômN•¾®/ñ]/Á]š‹¾VÅ"ÄcL]$ÅúËëXÈ6YR M–ZZ&AG3£h[8'(KÆDË3‚ªÜ£®å¼G5UË3‚²:ðŸÔC)þZžÈæNð‡Uc¶Ê0©ÆžºÞ¨¢oŠx]áÜTâAVWŽ\4ÊÍÿ§#Œ˜ÙéH.t:jh% ÍÌŽ‘zœ¤#oÀNŽ<ËZž4‹¹%Ï Ò‘?`ŸÔ]¥ju<#wiºÕòŒ@ÞŸÄ“4ëQïïùL¥þdÓŒ×BJoÖå6©·8Ë㵕ÞèÛ^¬§ ½Ì?#j—†ÏVÔr¡uC+ÍjhPq©O)×ñŒ@> »—–g‰”tÏ º`$YÏ- "wjøLFØ"ïã͆òü$ê!r¸›Ï¤bp–ér_}}›ZòN¢²-:94´Ê¶†fÕ8‡*†çõ²AÞã¼m ñœPéÕ»Ï J¯CéíøÒ;µÕ}M¦×µÜ|Åñº¿j5ãxßeÆcøErdýú;~?²ª….Á ­ò§¡@#«GÒàœ Ôp†jXñ´<'T“Ñûɬ94ܸTA8A?£ p¸¡ŒÃù=]Kd9ƒ‹¸JyìgéŠ~3;OQUïu‹ÝÇUgð[¥à¶ãnßÿþÈ=ñMü
&}ä4úëä7ö2Uhendstream
endobj
220 0 obj
1334
1330
endobj
221 0 obj<</Type/Page/Parent 205 0 R/Contents 222 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 8 0 R>>>>>>endobj
222 0 obj<</Length 223 0 R/Filter/FlateDecode>>stream
@@ -404,41 +402,31 @@ endobj
endobj
224 0 obj<</Type/Page/Parent 205 0 R/Contents 225 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>>>>>endobj
225 0 obj<</Length 226 0 R/Filter/FlateDecode>>stream
xÚµVMsÛ8 ½ûW`rrf"ùsý‘=5ÉvÇ;¶›:{ò…– ›$2$Oþý¤äÈÞ4Ó8Ýñ…&AïxÐCg}ú `:„Ñ’¢sµìô>Îa؇eF'“é –iw7h妄/h%îΗßÉn ƒA°‹†³xÈ–×w_¿´¨B+‹)¨ æ`Uæv ØjÙ'ë°°à¶ÂÒh„Cpjƒn‹†@[™2û(T ÚÈÒÉrNØ{{É¡)×h8‰ÇñJ$÷X¦6¤”Ô)EÓxFyÑùj8™Âa¾| F!ã+4÷˜ã\S8ñG×.N¾Ê¬}Ð:—‰p05jcDQ ±°("|—÷E!6Lâ'¹6Â<êëF ½ÉÉ}”99ùú·d‹i•£9Ù¯=øç-=‡ÁÔúFÃPw£x‡µ×n‡i<a£åa],tŽ–ÎWvUÖmAQW€²*Ö´ ŽIe–¡aKÙ<¾áCž?;ãnJDžS‹í¤Ûrýgœ¢i‹Ž
³©8òÛçe‚pw»€ˆZ’V¥ôÝw‹VU†Ž)]”™¤ÔèÀÛ¨ÊéÊAoâš­~MBW Ãéå—=2ëé\’Ô½8´o%/µ¾ìõ¶ÊºRØ3u"G÷Wçñ ×øøQ!4°ÿRë6°ý;mÊc´$f¼¿êòSlм÷§ªïÎ’×Ï„©ŽWña­J$i`xÈvD†Ö‘þmÞu)]ÞDt¼î‘÷Èûþßc_+-ÑÖÁŸë; Û*i(ø¯ ÷‹Íb©úß+­¦¶¢áBåóp¥Ælß‘ ‰zúVÝàSä«ó:¯ŒÎüŒã¡ö;È,dTǦU©X —`záïÔ=Eeq&R¿ë=µ½÷žUx ëHá„IID¨[ߨ-Ú̓]µu‡Á¥T½~(s ’e‚«² ·‹ šø$h,*´yöƒ†>ƒªòÖ F‘ÄÑ÷ õ“wÉÎâ½,µï%™D™l_ÐãFétO¨õˆ<‚†q_Ž“/Ñ픹<sÙ`-Ø~0“Mëú …ƶS‰Êc PGP˜ ÉÙ
VÃ;VÎ1ªŒŒl¥µ2.ÓR?Žêt]¹Ö{eú:OCÈuú
Otú«xú$K Ñqø€àL±´ ÄLÕåÄÃè²ahÎyúñ5P(Ívi=TXá!îÈ›ÏÜ#hÓ+à“Ÿc W4ˆ÷øU–˜° <Jqteï—ß´Ÿob`öœí¸ì_ü6Ïúñ<¨Õoüÿeçïοoÿ~endstream
xÚµVMsã6 ½ûW`rrf"ù³þHO›¤Ûqg§»Í:{ò…– ™ITH*žüû¤äÈj6­:íøB‘ €÷øøi01ý&°œÂlQ>¸ÙF×0Ã6¡“ÅrÛx8ƒ;42-àó3êg‰ÇËíw²›Ãdâí‚é*œ²åíׯ D*/•ÁTk0*±G¡Ì‹±˜°aA•¨…E°*E{@M  ­Déœ}䪀RËÂÊ"+Ì£¹ö¡£:´‹Lᜣ曆%œç6¼Ñ#±9¿G)Of>å7/¡~Ä _à–r}oßþºégϤ}(ËLFÂJ‚üE«T<Gm`SXâCDØßå&)÷IîµÐ/½Ü $òûáþ(3ʵ߯Ñã*CÝï–Ó|ë¼Ï&K>÷r fS/Y8s´•» l´= ìk#y™aŽ…u"¬Šúa (*PTùž$îX& j¶”ÍC™>dÙ«3~$²Œªá(í3hÁÎ Zv(tZqäþJ¿Ãg!<Üo  ê¢U!]!Ý£Q•¦£MLŽe")u:p6ª²ee!öwwC Ó°v<n—BsúÙõˆÌFeVv_Û/ÃÕ+<Y–×£ÑAGºN¥ãawž£ Μ¼…ö7µoãñˆ¿Ó¦ì‚¤vÄû»!¿PŠú/ÁþFl†\ýNÙ×A*þƨHRëòÚÃ@ÁXj[ißP[i³&Œåõˆ\ÎáÿðV•MñUÕ‘ßÖøTIMÿ5wŸK_7>€ª¿ÞÁbJª ªÖŸû+5:Ó7<u$tìì†Þ‘Èv—u2 ¹qÃóåg‰O£H«BY0%F¬¥øÊÝ©kòÊXbGÄn×yàÈg¢uþ­rgc,µ)¡cjToE@#÷TÐ7ínÁ)Ǥ37õø25I¡_Ö÷›+©Ô†¸ÔióâEvGUe1ì9EEr§ûì_œKöpÑ  OÍtÞôÈõ©‘R+%Û7ºhÓCéôD“qˆ‚†G÷Ì–“/Е~ôì±ì40‚l7úÈŒæaý£U‘ÊB P(L†dmµ‚ÕðºýÌG *-S•¥ÒÖÓRK’ÛW¶õ†Lßçi
Y¿ÃþW<}zŽèØn~pÏT‡¥­3UˉGÄuÃКótºœ{(”f[ZOVxŽÛËxÝàžA3.Þߘü32Eãó„?RE÷†g):WN~ùMë¡Ö‹Õk¶ó±·óÏï|5×dEç?ñ÷/ÛÁƒ?^¡[Äendstream
endobj
226 0 obj
977
968
endobj
227 0 obj<</Type/Page/Parent 205 0 R/Contents 228 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 4 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>>>>>endobj
228 0 obj<</Length 229 0 R/Filter/FlateDecode>>stream
ÅV_oÛ6÷§¸Ç…eKvl'@1¬É‚õemc(Ð좨šµD*$eÇß~w¤äÄžmdiŠ!Çûýá‘Çû^ Cü‰a4¡_^õÞ§½ÁÍ. -hd2ÿò³šV–¢¼äb5(d)Þ¤?0ðâ1Eö1´ŸøÐQGc°ÂHV† 1Ä1 1dJ!éB´UnÁÑD-¸,¤Èá‡ÎÀi`PjŽ¡µ‘Ê \+%¸Ã€•d{KÚ¬µ6©ä"D#ˆ¢„ð¿Ü~iA~u¡Mu˜>êî'cT±!ã£îßtí¤VßÞ†ïÛ(ŠþÞ•¼˜tBCœÎd˜Ú ‚*“ŠÑø#‰²Ôk©¾o™„d!W ’±&¦“vúÌ0'váÏ sá‚™´(†Tú‘Ö•°†w”§Ñ ·1î’Év)ÐÜÖºL:»Ïa
˜{v‚…jª 7¥æÌ1 /&€•(ÝfŸ‚X u„MAX|!øM~etçGÀqæc+­,¹=dÜ€âÅè–ç»Ü™Üšcp×éíàz~ wg fò53âî Ð::²Îè´ú9|Ê{ ý6®Òù/D?eõ.ÐÏúlœåÎþJ´z@Ç|ýø×àëÇ›d`uá^Î`Û>’¢c µ[ƒ;ÕB|ÀóZˆn­ÍÚ:h,Šü½®ç!Km´Ó™ãå\iUn0Jä{#ÛÀŸb]
çúŸÝÇû<‡T,Q´’]²¾ëÀê3žÆå`@ «Ä·Kêb§{K.
Ö”.ô»ö–EÀ‹x8Œvîº;AuÙ kqöµ[3¥|žŒé<F¦[“FIКÀ{a–¢¸ÂÅí²tG[K·Ñ¼¦ÊXÉ;7XYÕ¥èfú¥T¼ð‚qA~\}ù4§¯m²J:_Ýðo¡õ=QýÁ‘èj|d²¤û{-Ýă´ŽÊ¶;qèó+éàš–"2­7ï_2NÕCÅPÖüD=àl— ½T,!ë%²¼’
Ùá;Cã²ð'ì¿c®±œ¸oD#Ús²ÂLøÚóeëˆ×ï­µMM%dwŸL[¾Zž¾˜îÜ…>|ÆOXóDÇsî§ñ¡²•„~A><Q‰…Û]^1í6ˆñzŸƒ9k'c_•“‹c0"0ï6ÿZXù]чé_˜´ºŸŸÕiâ³Nhl<"ÞÃCOó?ÒÞçÞ?Ätendstream
µVÁnÛ8½û+æ˜E!Ù’Û °Xl»[´·¶qOmEÕ¬)R&)»þûλŽ7²HÙäã¼y3#oGLð/ƒéœþy=z½ßNàV­Ì—ø©¼j˜eJ u;.Ån\I%þXý@à d3B&¦Y:'¬d*feš dAÕZt(ß]âW]:ð´Ñ.+)Jøa
ðÚX©½°ÀÖ‚{ì$;9ÒEmŒõ€™J.R@6ÊÙ³išÿçOïA:0U8][߯Lïu'ù U 6F¼×ý—i¼4úË«ø|•¦é·c™Ñ‹y/4âp¦¡ÀôÔ…ÔŒÖï“PÊì¥þÞe»`ùSÆh1™¯ù|pU°¶ü3®åýše^'u Ü -¦#@ÒV:¯Ž¹8v–XzwJ¼ ¸¼@­ÛºÀ;DÕ%ó (ÆóX±¥?œòŠÐ°ÒÄSÀׂoÐä— 4eù#îü„Úè3—ºj-× ú[¥'ÚUÒM¬$êÒkp»Ï_êÒxZ—já÷Æn`mœ‡ÖQ„ü»iîb”Æo¸QTÿµÑê€(Qžôfq€wb¯„÷Éde¶Ä–)a%6Þ-öcÀ…ƆgµrHãv<¦ 5«Å—[—Û·k•#¥«^$¼É&“‡'ÇîÎQ]qÁZÜ}ééG!_pôa¸3ó~1˜4Í£Ö^ »Jà Þ,^—;£;,мCSeìd‰Ãœ¬DI- ¯äÇ›ÏîèéÚ¢–>ÔZ‚µÑYD¾Å‘ò@õ{O¢;–2L=dhpRQãì¥_ƒø)§²u¦ò{f‘oÍÂÉ5–!7t™±hƒy¿É¸Tjø…zÀÝ>0z8b².Hde-5f‡CÛàfZ=Þ¿g¾ugœØ¶¢]Ÿì0¾nN| úƒµ®m¨„Üñ[iÐøÔ×Ó0¢¶-ÞRñc>Ðù¤©8Dêtâ]“9¤c5÷S!Ø@%€U Á„ÿš…9~UÍöâíl‡Ûq?o­½Ó]6ײ‹’]_§Kü•GaÑ仾ÀþN~×ôàV†
t:‰‡’E>¡3sZMɚɹ_Xÿ®FG¿êNendstream
endobj
229 0 obj
935
860
endobj
230 0 obj<</Type/Page/Parent 205 0 R/Contents 231 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
231 0 obj<</Length 232 0 R/Filter/FlateDecode>>stream
xÚ­VÛnÛ8}÷W ôÔ²6¾ÔN»éelñ¾õ…F»©” ÷ë;CJ²Wiå-Ppds.gΜêy2ƒú›ÁzäÕäÏíäw0[¶¤“Õ-=¯Ù<›ƒªŸ_o¿Òùf³x>¯ù|û„|
¹©*¡ pOæèÀÓ¯yc-jÏ 6Π߸,F9g™Îï²>Ï‚"ÙÑ<öœ§ÙUÒ;ðÕì 4j+µ—zŸÛÞÿ³y„Z'S_'R'{m,F˜‰LRH<Tüñ”¤ ϧæt‰KÀÔž‚]©aÉ™ªñ"*°X™0 W„&âçj.2¬[÷ż˰€û?Ÿ­º÷ÄÕüQx<Š<h9—Wäúå5%2{+*ÇY qxÄÝt'mŸ@ö^Þ<-=Ádºâù€!â7 'ºSÈ•péy åÀ{‘?q8apÐx©ä7„¿¶Ÿþ-”ÔnŠð ó¦"Ë‚q´x‡íQ”W³¿¨kG›´Èf ŠJê,ßË‘NÆÛ%vñ'é¼,…3Kî¬@â TÞÒÕØ8´¡&Q)ñYÈò”B
=åF ѦŽæF—rßt$ Ø$zHŽò›°Eriœƒypœ…. ó ¨ô85â ¤;ÕcêíšÐ'¨Q ŒØñ]°%¹’ù¿4 éP}h’€’4õ!T!©æÔRCÄddæƒï†ë›‡§*uœ‰ü¿4„ÝV\Œ.ÑO]Piq&Œ•þ f¯Nס zþˆ!
0sÙ+à
Ô^(׺
¸Ò´Öö—ÛÖƒø=}{¹ —qË¿­kŠ'rw[ÅiûÍ7¾.ÿWZžÉÛÍC×g\y\´4žÔií¤´Ð¶›6›áT+¡÷ØcéÍæÎŜŽ3¥?
‹cjXÒ»?§†]¸ŸÈâÒöœZ„­
+6^«„‘k kŠôáx! ¤Õ9¯é”5£Š÷o
{$§(qSôPun`¡Ëþò`ƒ ,E£ü嘛—$LºïA‹êÅJíL•ÉI—,á`Z‘ÔòHƒKª³üI¼mIœ½y“ÝÂêne›ôØ6 Þ¡£
þ—[ÞØ{¦ëùÍ‹÷¨åíMvá÷5¿|ž|‡®^endstream
xÚ­VÛnÛ8}÷W ô²_'Ùô²võ¾õ…¦F»©” ÷ëw†´d¯Ò*-Ppds.gΜêëd×ô7ƒÕ7 ëÉ›Éë÷w0[¦¢“›[z(¯żX€nÜ«Í:_Âl–ΧóŸožOAÚº¦ßnk<øb·PYS&(³+€mþY=:¯¬[E_¯4š  vÆ:ôÈ0SYš?ž²œ!PâaâÔœ.óØ&P0_$„ç
¦ó»¢¯aÉ™êñ"jpXÛ=° ×„&áçj.2¬Nî‹y—a¿¾¸é<CTóð ŽðhºJH„ÏWäúù%²;'jÏ{U"qxÀít+<¯A„փ꽂%xF‚Ét¥óCÄoDOtç µðéyåÀ;!Ÿ¸ €0xhƒÒꟛ¿ÿ‚€u£ -TÔ-‚l}°5Y–Œã„wØMy û‹¦Aá„‘8Ú¤E1QÖÊr§F:mo—اŸ”Î,ù³‰ƒXù‰†¤ÆÖ£‹5‰²Ì‰ÏRUÇp(7bØ…œˆ¶MâPZS©]ÛId€b“è!;¨o•Ù¦qæ=Âqº4̃¦ÒÓÔˆ½PZlu©·ch¡AS20V@d'tÁ”H­ä¿4 ¹é­Ð}h’€V4õ1T©<©æx¢"…HÉÈÌ#F#Þ I±ãd,’PÇ™ˆÁÿOÃ×[Òæyt‰~è’JK3a
ÇT0{uºŽeãöØóG Q€q˜Ë^/@í…òR×b/4ídûËmëAüž¾=ß…Ë´å⤉\§ÝVsÚ~ó¯ËŸ
AË3»_?fi}¦e Ó¢¥ñÜ£QHk'§…¶Yçð¸^§Z ³kÅÓH¯×o¡jŒ
s¥:8ÞVá Ž©aI[ìáœÞwá~ ‹KÛsj·J,(®Øt­®)Ò‡çe„,“ÎyM笉:Ý¿9윒Äm5\ÐCÕùý….û˃ ¢\°­—cmž[0é¾#êg+µ3ÕV.YÂÑ*¶"!i(ä—Tçø"x{"qöæMq 7Ëë.5éÓ©Ið=½Pð?éT|G`ïirš®æ×ÏÞo–·×ÅÄßWüýÝfòqò=?ââendstream
endobj
232 0 obj
914
891
endobj
233 0 obj<</Type/Page/Parent 205 0 R/Contents 234 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
234 0 obj<</Length 235 0 R/Filter/FlateDecode>>stream
@@ -451,12 +439,14 @@ endobj
endobj
236 0 obj<</Type/Page/Parent 205 0 R/Contents 237 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>>>>>endobj
237 0 obj<</Length 238 0 R/Filter/FlateDecode>>stream
xÚµVMoÛ8½ûWÌÑVJ,'þ螺IÓÍ"m½÷æ -R6[‰TI*ÿ}gø!;†áhIœ™7ïqfÈoƒ\áߦŒ'P6ƒ¿–ƒËû9Œ®aYáÊd†|8ÎoòxhØFÀ½¬ñ§S¥“ZÙ‹åt¸†Ñ(8dÅ”–[Ò›Wd^%sØ2ÅñC­—jºVׯLµi˜³y¼Ï$+æyŸËþcÖ óSy˜`ºÏ¡aŠà¬3‚5–r¸ý¼xJvœ9«!¶4r-8HÃ<(\­X)àNX¹Qp§Ë®Ê­. ³‚Sˆ;ç!¯w ´ÊÚº' Ô:hTÀÈga, }n²Æ¤§‘ŸH¤'pÇDsš).F®<Ø –~–\ã\iVƒîE›¯: Ôž™-·‚wµ09ÜvÆ ¥zzô!™G#é¶^Ãs»6ÉGð(•€EÔ!ð9³q5Y÷ªyëDÌ‚ÁW'àqqe-1g°]Ûjã¼® :¸ D0`\EŒ!†u|5œ­.^ƒ³¨–@fçù°ÐuMeüC*m4Œ˜ 8íW€%:V˜gªÜ†ü­óòÌdÍÖu/F¨´ÇÒQäy´=ý¶†p±rx‹(-3ÌJë@µ×þóÚõiî°lŸ ²Àåãʈqcëì#•ZUrÓ!8¦âþ\ÍOiØß³5‡H[ jÈ0HŠÚŒpHUYŠPñ¾Ná-ªž±²¡Ä1”*™¡oÓx?Òÿˆ3ßöö -àÔÌŠIH8¶b€Ì3÷¸…ôŒUë¤
ÌSU¯†ÞGʵºˆb”‘h6ÍgÈC¯ŠÉ^«@k}Rÿè5<pÌJVÃð/øQî?†vÇ=¦ï«!%°æ@?£®ðqO¶£wf­.%sIÌÄßCu)]=_bôÌÇþß±ou+±ŒâÞvÍ ãî–á³ß:iüwˆû© C:`éøv†¡mélJ­Í£Käl!:ð½|«aˆÉj<òB^¾ÓhŠQ=ÿ ²
El|Rs+J*AþGò¡Òo:œnxsÿQª¶ {Ôn•ÑM"3<˜žb“\NÊŠ®eãy÷ƒ1LbùððáÝáäð—OÒŸ*ý„¡K‹8R,é¸wÀCùj%Nqq»Ö«ÅP•-·gN—)ž–ÛvS;Ýž»Û$“$jÈÄYø{‘½¼,|8¢î¯"x#ŽnnP½ÉxLQÃ]èIWî…ÔIwò»J¾YpɦÅÕ¯‡×³«|JmNïï–ƒß>Þ:jendstream
xÚµVMsÛ6½ëWìQž i‹²%9=%vܺã$j­ÜxPBJ Ú£Ÿ]|P²Æ£$ít<#“àî¾÷» |ÿ&0/`:ƒª½_Îï®ar «¿ÌøÀÇÓü*¿‚û–mÜÉzU9©•=[}E‡K˜LCVÌÉaµ ½yMæu2‡-S͸TÐ5°¦yaªMËœÍCà=“¬¸Î.3ø›Y'ÌOñ0ÁtÏ¡eŠà¬3‚µ–8Ü|Y>&;΃rÌ…­Œ\ RÃ0÷
¿Ö¬p+¬Ü(¸ÕUß
åÊ3è­àÄq'Ó¼ äõ”VÙR[÷ˆ:‘Êù$ŒÌÄÀM6øï@ô<ª˜ n™h_WŠ£VlK?I.€q.I4k@ ÷¬Í?yÀT{e¶Ú
Þ7ÂäpÓƒ’šh…?è1„dFž¥ÛúžÚµY>©,c‚ž×õ5o„Y0øê<,o¡j$rÛw6ÎçU¢A¯7Œ‹ˆ1Æ°Ž—ãEyö|œ@˜Ål TvZOKÝ4TÆ?”ÒEÀô¨dÀiÿX’c…y¢zÀa¨ß:ß!OL6lÝ Éµ“öX:Šƒ:¶gØÖ.VBï¥c†¹×hdí¥¿@^»æ˶õQ~>®Œ7¶Î>R¥U-7=#ßð§j~NÆôž¬ùØ<8DºFPC†A‚PÔf„CY••ïëÞaÖ“#V6T8†R%3ôm[ïGù?ÒÆÌÆ·½}XU‘U±ÀïY1 äËb6‡£òJ…¯X+ ó™ñ¸ÅôŒUí¤
™IU_޽Ž*Lgy–¿„<`õÞŸz ÷©ÊZb¬€øå~1ÌÜxZ/Ç„ºæW‘¾`†áÓ^VOïÌZ]IæRZ`þƒ¨•tM‚qô|Ž!3ðÿ¼ÑÄÒ‰ûÕ·k”†;V…e#¾õÒ â¿ÎÝç.Lã ãÛ -¶£C(õ0.QýUx:Î}vÊqÄßG4£¨YŸ”ƱۉŠj‰¿I>T¸m³ ÏWî¥êúЖ„>Ï{NµÑm3<{ÞI†Žº;èVfaz’ãÇû»Ýàžº? †©@ %p X†“lï€c8h%9s»Î瀡Ö-'N„9žpÛnÓ8ݺ$“”ªÀÄYøc™ýþp^x¢î¯x#N®®0‹³é”¢†ûË£®Ý3e'ÝOü Æï•OfpÉæÅůt—‹‹ü¼á5½Xþ}YÚ*endstream
endobj
238 0 obj
988
982
endobj
239 0 obj<</Type/Page/Parent 205 0 R/Contents 240 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
240 0 obj<</Length 241 0 R/Filter/FlateDecode>>stream
@@ -532,35 +522,39 @@ endobj
259 0 obj
118
endobj
260 0 obj<</Type/Page/Parent 205 0 R/Contents 261 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F5 6 0 R/F8 8 0 R/F9 9 0 R>>>>/Annots 85 0 R>>endobj
260 0 obj<</Type/Page/Parent 205 0 R/Contents 261 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F5 6 0 R/F8 8 0 R/F9 9 0 R>>>>/Annots 84 0 R>>endobj
261 0 obj<</Length 262 0 R/Filter/FlateDecode>>stream
xÚÕ›]sÛ¶†ïý+xyzQ…ø$xÙ8u뙜©OìþF¦Uµú*¥¤“°À.hdnn±ÍŒtÁÇâ ðÝý}#ªÚÿU#+e«åöæíÓÍ›»¶’uõôR ÓV¶ÑÕÓ󞺛¾Ú¿T·ûݩߎ?<ýyóóÓM½¨=~øñáhTV·þç¶r ‰ÿÞTÀ>ë>¬ª7w¦~›¿ÌÔð»Dõ*<·•2 WÒC42—ûCiªð?³ÿO¼z×Ê‚¦á~·•‘ ƒ ¼í7w%ôch}gT\Lè˜A¶þZJæHŒ#êþÙøúe½ìNëý ¦ñ‘éÊi'åÂŽÚ…Þ((&•oÅ$§r\³°%ÃHzür<õÛ‰iœ®÷ò+1~DšÈ1Ž´ß>÷Ãçuÿà´X´³žS¼nzT<42ÅE½ÐQqÅ)ŽQÃ|.@1N¨wûå§­Ÿ¦¯ór„jíÿ.€Øˆ…ìÒÏ+Ë.&-×85Znü÷èÉ` w&§ –P¦õó¯`Åh`|è_ú¡ß-û ¼ 73÷Y5=am“½ÆÆ%{5M=Q²öJD'ý_1†‰tûûÃãÄ€¤«ý¤55 IΊqbÑS0µµ×Nuc“1ÇF² cšh€’5fâ¸Ú;JÁÁ0’~;ýÑb§ËÁ—Á
ÆFbÓ¨i›ð7%É&¿/Ù„‚TèoE1F0æ`N‹Q¤¼ëëÕîuTv¹ÿ`nü”ÈÂ0ÂÎ\yž®c˜Y/šh°an†ÆE¯á™V¼Ó ¯50=sçm·ü«ß=±ŒóSîuÙ ²Õ*¸` eilàmúå‹©õ‚äš*ßú…q„­ µ˜Õ2‚J·up°p/±‘„Ò­ˆöBIF("E¡
ƶ9<ÿ…jšP Æ{ L¨ÆÅB„RœPH…q„º¡Ûlú àÔ\ü‹“ÉêàÍñNB#“ÉL^&ÍÉ„$!a&(Œ#ìØë.ˆ$ÅŒ–š–ʈhÄá^B#ÊŒ2N&ä©ýr¯a<Š´÷Ž~
"5³ñsN"Õ$L"å’‰[N$$ ‘¸…Hûtü8Go²ÓE‚öc?–Ʊ‘Jc- ™8WÇuÉÁ0’ÞöÃ_ý¦ÿ2¡ºÉ>–ÐÆ§Ù‚×f´ÛývÛQ±á¼}^YxnV
%‚ÐÈf¥Ÿ`˜$[Z 2¦,QGØæ° ³²žY Ë(¥Z—rAl$¥TÛR.lmA¤X[(Œ#lsø{ŽÏoÃåLʱ‘ åèée+ ∺©…L °a–Ó‰S©)ÄF¦R#)H¶´ ’ðëS¢0Ž0¯Ô6HÕÎG¨f:(ãR.ˆ TxOTâÞ¦§W*8FÒí/÷A!»˜óî 7µ|†==6²©¥-yºb=HBá…q„uÏÛõn±\­ãûúÚq)™™yhd)Ef®x3G’ÐàÒ
ã[nºã±?Ž"Í`Šq"‰63rÑ–F.k’ˆ5räÀ~*A1Qî?Žê(9“µ'Qm2¯Méâµ%W¼‹#I„‰Q 0Ž°Ã°Þú!M¤ë¿eL\¶Ù&dl$—­"׌‰'¼ù/8FÒWì+J¨æü3aY?ÜþØ`Ë(žéË·3&u@èð_ ÝvëGqša¶•T³J(v@è=ÌŠ—n6ÿýïûÆ+æÁM›rPl¤Cºšrfs‘„±‹¶DÅ8Án÷»Ïýn [sªf¯j û;ôîÓn ƒO/¿ëzŽÓØÚ”Äb#ÓØ6”Ä4›Äˆ$d3r öëÓÓĸÙåÖ€†ÌwH¬3i¯äaŽÑب”c#ÓØŒ³˜ËÄ„ñ€º˜’7»žwþ‘¨ÃÅ™{ÍýPNdÕ¦,™Èº¦,ªÙ,J$¡%<Å9*Æ ö¾Û­>u«)§Èè,8EÄD¼¾ÞœÊҦ͑ØÈT–͘†Ù·´DÞù(Œ#ìááÝÔtNW{–…åHÁ¢+¾fè˜zG¨t(6²zGhÊ}†«w+’œƒa$}M½ƒ(!a}R°0ެûm·ZïVSŸ`BæœGø~ýqè†/XÔ_ueÈ=u¥Óº.ÓiM'†/YÍ…q„Ýî7ûáxè&+– Kúé;äD_ ÇÉr5gx¢_Õ·%:ˆK‰Z~Óu+3FÂ5)ÇFG„×øãnŸ©g!] )B{»*XÔ!ÀþÛí|ÂaŽêe ?4Òù¹V±ƒ»JÅN“ltšñœ‚aË%"ÅŠ²@aaàW=W‘Ž4¥gAƒŠt„}Ý%,Ë`;·$b}¹,øö nlvF"6²A²ã Ã[D
<¡@aaËn3T2,À‘
u—Jë$Nf°ˆLf=ž°0lµE$œËúü„ÅûºghÖ¹-< »[o&“RºÞx@ò(YØÁ]ZF«ï^´Ì`©ìœGldƒ¥LJýÜÞ<‘D¨Z Æö¡;žúaz´lÂ5bü˜i´Bs)I«kUZíti,¤Hc#•ƾrŒ2[¦0&J«Gd^#ç]×o“ïÎðÔ7)ëìÀHld“²ŒX¶%R\P(Œ#ìýz×s f`k²€Q¤=Ä7ÕS/ã²3l•@ì€À8¢a)¡¿ÿ·A˜ájuJ«­.²j;žY±leŠ˜¸WsbIû —QÇëam /s†‘–éj¯¶‹Î8‡iMíD±¤vã)•†1„8¨,rH Ê1óÁþ
ž.›ë>03mvXÅ–gUìxT¥a1xlÁ‰Q$ýqXmNûCL™yHÆèc²3*¦<¢b,©Ã=«uA‰ÑÀYCQFâhuõmMQs²SŠå©=JiøcÁx&%|‰DŸI!Š3„Z¿^yÅÙÃi#]öÕ•ïOÇ£( ÿ’:bàÄtɉQ$ž_Ægj»áQžtSõøMf‡ßÝð’ܶ¸wV…û—Ó?ÝÐWømÿ×rXè{ZJBrÿ±‰gÖ¨ÜÿnþMà_ endstream
xÚÕ›ÛrÜD†ïýº„ ÍYº$W…ÂÄæ”µ¼ö„v*oÏºç°ØêÜ$«@•“IKŸWÿÌüÝ£™ýçŠUýŸU†WBW«íÕ뇫W7]Å›êá©bª«´‘ÕÃãwýûÍPퟪëýî4ìNÇïþºúé᪩Kp?˜ûñîgר´Pu[m«¶æð÷MuïØg—OëêÕªs¿Íݦí¥ö·±êE|Bn+ÿGÁQ Ü¯ö‡Á¸²pûõâÿc/>·}(+çµ¶®x­ þêF‚Œ¶56ât¬g”Ì [{/sZæHˆêöÑöúø4®úÓ¸ß9¨2öŽéJi×tµŒÚù<¨SŒ5µ ŠqJ1à´Æ
SpBI÷ŸŽ§a;3ÓýV~ÁâGÄ¡ìãHûíã0}N²º[„ð„âªÓVMP<4’âª3¶í„âÈaÏâ€z³_}ØÚaú2/GX ”V݈±Û»°ìlÖv•î¢í†¿GwH&«Lì‘Ï›,ÂTgÇaAóQ¤¼ž†iØ­ŸdW›…{­ ­ÒÉbCã9‹UÊ_ä¤Å"±åV±‚a ]ÿqw?Ó%én;pUã:%gAX8¢Yk}Ùn¡T—"™shdV᧩ך2gä´u•‚a ývús˜fÄN·;ov0g óVÁŒý VáÿþœU0?Åa€’~æ¬õŒ7Ãq\ï^e7ÛÕÆO$·Ïxò2ýFã½Á\ý¨ôg]¦‘Áeí2@씚9Â@zݯþvG($øòÔ{Y:ít²k¼v®Ê xP»ˆ‘ h›“,»ÙÕ¾Í9
âGb¢^ÔB‚Êï_áY|#Ê´Á¼œPœ
H TŽ‚8À6‡ÇoQ(-}9žÅ72¡´
¥ JPB‰qW(ˆìÐOýf3lN,ÅÃ(™óîžÄ72™TIR"‡q7á
Ä=ê8LcïâlA MMˆ$L°aÿ$¾‘‰$Úhçv†2‰qi—{
â;î­£Ÿ¼Pf1~NÉd*™¸od2q•L\S2‰±Ä-dB؇ãû%z“ž/$c©0TKûÌ`âTaŒ[4%Â@z=L›áÓŒê*ûXL*›f ^—Ñ®÷ÛmÅFkíó£RtmJ¡‘F¥è:Lœ,-ä2&/QØæ°ò£²YXK)Õª” B#SªÕ¨UY 'Tâ:¨ôÏ·5wƒH†¥\™H†c.àd]$Öt[È„°ÍaZäp2„RªMé 42¥ü(PŠ*.ÄìêQ•(ˆÌ*µõRuËÊÌçaÍ6æ‚ÐH¹@H¹€zŸŠã\»à@H×?ßz…t½äýjh žyºodCKôtA{:˜tïƒ
ÄÖ?nÇ]½Za}yí(‰X—™¹odñ8L:Ÿ.@!P«M<Ç(Ð%P£2#oTiäF#´‘Éí÷ˆq€ýµ|!ëB&Þñäâ¡‘dâ@¤‹#‰ùÁQ  °Ã4îNÔÓåß¾&ÎM¶ ÉÄyÛ ‰KÂÄ‘ãßûœFÒgì* Š sþ™BY?ØžÙbË(–i Ý3&\€Ð»i¿žúíÖöâ 4Ãl+.\Z/¡á„ÞºQñÔ¯üö¿ý}_xåAM ­S
lbhƒ9H9ILéº+QØõ~÷qØncnFÕŒbUmÜ®FÁÄ zóa·r/¿êzŽÒX‰”ÄB#ÓXá¬"“r7Z(P¿<<ÜÍ›ÝlQÆÊe/@Ò™¨r¯–PWt)†F¦®l0J2"‰1Ww¨GØíÝœÀÙÝn6´ç .@ØùȽän(%5×YåºÌ¢Ü`•t“ÜÍâq€½íwëýzÎ)2„¶Ú9EÄ €xy½)•™H›#¡‘©ÌdLÃä{Z$1æÞùìîîÍÜ€Nw[–vË‘‚…¬ø’bKÔ;M“…FVï4 sŸ¢êà„Š$ç@HŸSïŠq·„+XÖí¶_»õœÏ'‚³!uÎà øv|?õÓ'(ê/º2$ækMJ§¡‘ækÁîY° ‡É.RóÙ¨ëýf?ýlµ’!\µâº½Ú Ï–?Óq¶PÍ –'UÝ•<¼ }nÂ}É5+Õ7F¤dYߘxd@‘Å’˜ß6)P˜ïŸ¹yîwéAZ«*hxà~íw6ÝGõ2ŠíÞÚ±V2áùlŠÿòs‹ê%S¬—t<§ È’ I¡ª,P˜ó«ªJ#­uU}AsUi„}^%†[–¹?K"\Àž/ ¾ü‚ê$™¬“d<#¡Èb ILxÓçg$"ì~Õoæ“JFpïK9/hëÅ, (™EvÂ"42™E<a¡Èj I0–Åù ‹û¼¹€4éÖ¹Íτ݌›ÙÄ”îvo<\þ/Ypzn-¾zÐųs¡‘u]EíÌ#‡ùEA‚¸G½ë§ašï)`†Å˜zÊ_°mI‰}QÌ“Žÿ…F*ŠYO‰h¢(FN'#4/Š#éM?l“ë.ðÌ1$»ì´HWéâYM£qK©îü¤’ÞŽ»Z¨!I¹Éœa@Ý…×Ósoà"Àed·7YÐBýâA~ýo€]Ô²”H[VäÑ6žRÑdE
˜°?sBHwû •Cãýn5í^ç0-ÓU_lßœp ݦU´n‹E´ŽçR õÕ¥i]–CB°‹¹Îí¨Ày²¥îü£QeÇSTy:E]Ò.âR¹.(!ê9Ö›ÓþàåjrÚÈìTŠ,¥Èx&ÅЇ‚áHŠŒÌòØ] ® C¤¸øF&kˆ÷‚ÙAÞží`Öqèo¹áŠÿ†oÿ·} çʃ8“¯€à+•AA›ôDMüŠn _I`Þ'`­ò¯Úî÷O§ûi¨àöÕ4ð{G‚»ä¶þGPí÷«ÿâ,$“endstream
endobj
262 0 obj
2356
2325
endobj
263 0 obj<</Type/Page/Parent 205 0 R/Contents 264 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F5 6 0 R/F8 8 0 R/F9 9 0 R>>>>/Annots 120 0 R>>endobj
264 0 obj<</Length 265 0 R/Filter/FlateDecode>>stream
xÚÕšMsÛ6†ïþ<¶‡0X€ £kÇ™tê·V{WdÚfFU’Nëþúâc—œ±Ð\*:É8³^ê‘ð
|]ðÏ3(˜ù …¨í¿Íîì§ÕÙû+]pV¬î º¨›ªXÝý°ZÞ¶E_\ôû©ÝOã«/gVg¬d†`€ýñÛÇ¢á%+êJ›Ÿ»B×¥Â`[ÜZú‹ Åû«ª°ï×ð¢–̾(›R¯¾G„ÝÀ«R§oâóu§þà>.oJ^¸ß•§ý,£žæó“z.ÀY…„ý-jTç4BmôLP˜G˜UiXS;X`§Ö)+çfð$ "‰¸01JÔä$BHYV)
óóòL}{û½eJ;GO¦SV!¦ÍxH!D
++RHåBT̨™ |ž`¤ÐãÁM"Ã>ñ4Êi$Íç礑FR[¿@tF#"3[æOdH‚›Ìé éˆJÆŒJJ8£•ÜÌwàÐÌš!Σ#³(z¡ÓúÓŽs»ylïž¶dC 1ìï™RµÞíƒhJ5Œ¼[•›RHi§_‚òy‚?MýÐý³ž:oL5+ÅÉtË
$ëàÜ>ˆ 9·2ß}F $×/Q˜GØÅv=Ží¢n9ȈdÌs6oD"U™·2_tF$$æv±í̾Î퓪S®kß%“`‘» ’Iù·2CÌÈ„$ÊšQŒÂ<ÂÌþ÷¾{xâ›ít&•š°÷A$Ì^”ÛkÌýÃSæê²ýÚmÞÖÆDd×.ˆbU°ëÜVH`V­&Eaa—ÝÐnÌnûùu`Ì0ÄFÙˆ¼m‡ |e>êÿ.|NçJ³àú>:W‚ëçöëD°;õ…y„}º¹±$Kq³ÿ¤SÓã÷A¤S£‚ñçvíD¨Í"‘ 0°ŸûÏnâ€^ŠLY‘ê*ؾ"jl?·m'˜»†¥(Ì#ì—þá¡Û?¸L.aBe5’à›YÇöQ$’œ%vć¢Û-„y‚¢ ízݹ‘ÃÉ ?Ôˆg47X?
E mÖ!«ÁÄ70ºyן®?,¨•U‰WÞpý(\©d&ÅìÝÀ³*Œ×f$0ºy77—#Î&õ6f€7\?E:™åjönY&l¹œÀèäÝ Ý~j‡ålºŽèäÚ B+ç¹®ì÷Ah'­É½u¦¡@e«¼„ƒi$Ý>S»{½Þ,)¶¢J`˜G”ðR» T/G‡yMuÄn·Þß¹¯­jNl˜¹©-” e„ÂÌ
ïmiǶì_€0ïPëͦ=Lh‘âMÜü¢PGø R¨á´’èlWƒH¨QŒÂ<Â6ëý¦Ý¾-•¤
U€"•¤.ç™”kk ¸mŽ%(Ì#ì®íÑ•sG¶‘²U2T>ˆ4ªjZE§A$¿oKP˜GX»'‰ÞÎLr»,RÉJBÌ‹H¶µA$`ÒúsŒÂ<¶îTC-©!U ¢cXD*qFåzÄ·ÁH@>ïQÛÃúnçk€…I"£Z}éÃêàÚ¹®‘l›•¥(Ì#l{èö÷ýÂÚ¬™¸Ž[}dâZÛÎ5%ˆä[ö
óÛvý×vIÄœFMtÜêƒH#Å‚mçzDa·… Êç ¶=ôÛ…ö[µ€b2+R§¤®„ñQ¤RÝÛη%f˜)%!…Ñ 9÷8­§eµ&rJIµo|)%çÙ”oLÌ(Wr'(ºÀŸÞ·_ÚÍ´¬’ûu•˜‰ã }.Á8°÷WŸ)²Wá1àù1¥f+LEŠÃ4r>nûq\Ïî¶³EÏÂŽ¨¿QQ/È9ø#BiŸ£òÁ,#=šeJsxRx~¬Î‹ ¦43žJsŸFÒªvôh–Z¢ŒYé˜?6ôÃb,éep†g†çÇŠ¾è¥v&Û3ý„yBm†~ÿìE«ª…lÖ_ÈÆÈæGüÎ#éžþì„¿ßÜ·ýýô×zh‹Ëvìöö¿ÍÐè€õ}2Kï¿Éì:”ò׳W}ïendstream
xÚÕšßSÜ6€ßù+üØ>Äh%Ë–i™tÊ -—¾_Cœ¹;_m“–þõÕ]K"Ã)yé™$YÖþÀòZZù¯3(˜ù …¨í¿Íîì—ÕÙù•.8+V÷H]ÔMU¬î~Z­?mÛ¢¿/Þöû©ÝOãÏ«/gïVg¬d†`?€ýðÇû¢á%+j!KUì
]O>Ø·–þì„á¡8¿ª
ûýn޵g˜o(ʦ¬Š¿KÞÀõóoƒy„îî§þà~fÁÍ—˜ýbyÊ?À29/ëY  ðʬ$.LŒ’dN’€W¥NQ˜GØa$G¼)ù}‡%¦Í !K.ˆ,++²Tç,! „6F”ÏÌZÖãÔXÁ©=åIóãsR䃠Hjû›FEMF@J£"Aaa^ÏÔ·‡±ß[¦´£ôdž²†”0É "CjB*ç9P1ã2a¾Ší|>¸dÈ'BY?µµÜ‘Ÿ†…z­s†Ì ™ |ž`SûÏôz
¶yÊK²veVr3Ö}€—f¬R6T°Œ¢èTgûÓHºÝ|nï·T†dX™¡?×nDꪨv«
I íLP˜GØÅãô¹º×Sç SÍJq2oYA‚E•Û T¹•ùOF’ü<)Aaao·ëqluÛAF4QñvA$ )9EÈ7J@˜W^Pg&¿nŽTò™öCŠ˜ˆê· "E¬*gI¹ù6@*[Šbæf ÷ÝÃãßh§+P9A•fa®íƒ ¨Ò0—îì\›H`0°Ëök·yU7ZÕ4¡\û ’Ô¨P®sSm"yj5)
ó»ì†vcfÛO/c†!š3uJ¤A|e~Ôÿ]|Ös]…ªïƒÈs-CÕÏÍ׉`—|
óûpscI –RѾ˓„Pø}y’³¥Ü¬8µyH$ Ì;Ô¯ý'7h@/EQVhBÙ÷A$H¨PösÓv"¹cXŠÂ<Â~ëºýƒ»¹ä¯|½f®^»(’Äe(ýÀŽT¡èt;…°×žÀèä]¯;÷TäpòÅO¾ÀúëpQäɘ0Y‡¬'‚‰o`tò®?\¿[P?*gIhå ®»
KBëP»ç,Í0^›A’ÀèäÝÜ\Ž8šÔ«MBI_rýu¸(ò¤Â='²–%ìr9AÑŽv3tû©–3á:âȵD®æºE¿B;A4œª·Î´ˆ£lÛ á`I·OãÔî^†Eç›GŠ]O%0L#ìÏ#”pªªçW‡yNëˆÝn½¿s¿¶ª9q±Ìk©Â2ÂѨ–šž%:ÛÐ ’mÙ?Caaëͦ=LX"Åë¸ù+Ö>ˆ,U5=I«A$´£0°Íz¿i·¯Ë’{6’%D–„ '‰Î66ˆÜ6Çæv×vÏUH¶IYG Ã
À#ÎÈP®«A?oK@>ïQížô¼žQÄ¢]XD†Ø¼Óª³ "ù,Ræ¶u»jIÍèœ%®£­VK\P·s "b$(Ì#l{Xßíü`! %qÔD­>ˆ)ªv®+A$Ûhe)Êç ¶=tûû~a­Öœ¦:ÚlõA¤©nBÙε%ˆä[ö
óÛvý×vIÄœ#m·ú r$ç”ëJ& Ìã0ê í§þj ɬ »¤nã£ÈPÅBÙÎ7%f˜YFB
È·=ŒÓzZV["gŠ×QûÆG)ÞDSîl[b†¹w£7´_ÚÍ´¬%÷˦˜Åpо™à¼´ó+‰/_Ù£pð☫™à§"Åa9ï·ý8®‡'wëÙe϶¨¿±(/ÊAùMBiߤòÁ¬‘Þa3ËsP8¶Î‹fq.f8-Î}ÚqVí°£×²Ôfµ5~ÛÐ_T#^4¸gxqlÁjG±-Y ó„Ú ýþÉK«ª…LÖŸé
×Èæ÷ Ž!éÞý¨p{¦xûñ涸íï§¿×C[\¶c÷°·Ÿ6Cw  Ö7ö­,U¼iüb¥ëPåïgÿ2´Oendstream
endobj
265 0 obj
1550
1567
endobj
266 0 obj<</Count 5/First 267 0 R/Last 345 0 R>>endobj
267 0 obj<</Parent 266 0 R/Title(Table of Contents)/Dest[260 0 R/XYZ null 756 null]/Next 268 0 R>>endobj
@@ -577,20 +571,20 @@ endobj
278 0 obj<</Parent 276 0 R/Title(3.1.2 lpd)/Dest[224 0 R/XYZ null 227 null]/Prev 277 0 R/Next 279 0 R>>endobj
279 0 obj<</Parent 276 0 R/Title(3.1.3 parallel)/Dest[224 0 R/XYZ null 133 null]/Prev 278 0 R/Next 280 0 R>>endobj
280 0 obj<</Parent 276 0 R/Title(3.1.4 serial)/Dest[227 0 R/XYZ null 713 null]/Prev 279 0 R/Next 281 0 R>>endobj
281 0 obj<</Parent 276 0 R/Title(3.1.5 socket)/Dest[227 0 R/XYZ null 448 null]/Prev 280 0 R/Next 282 0 R>>endobj
282 0 obj<</Parent 276 0 R/Title(3.1.6 usb)/Dest[227 0 R/XYZ null 328 null]/Prev 281 0 R>>endobj
283 0 obj<</Parent 275 0 R/Count -4/First 284 0 R/Last 287 0 R/Title(3.2 Berkeley Commands)/Dest[227 0 R/XYZ null 234 null]/Prev 276 0 R/Next 288 0 R>>endobj
284 0 obj<</Parent 283 0 R/Title(3.2.1 lpc)/Dest[227 0 R/XYZ null 161 null]/Next 285 0 R>>endobj
285 0 obj<</Parent 283 0 R/Title(3.2.2 lpq)/Dest[230 0 R/XYZ null 724 null]/Prev 284 0 R/Next 286 0 R>>endobj
286 0 obj<</Parent 283 0 R/Title(3.2.3 lpr)/Dest[230 0 R/XYZ null 681 null]/Prev 285 0 R/Next 287 0 R>>endobj
287 0 obj<</Parent 283 0 R/Title(3.2.4 lprm)/Dest[230 0 R/XYZ null 611 null]/Prev 286 0 R>>endobj
288 0 obj<</Parent 275 0 R/Count -4/First 289 0 R/Last 292 0 R/Title(3.3 CGI)/Dest[230 0 R/XYZ null 555 null]/Prev 283 0 R/Next 293 0 R>>endobj
289 0 obj<</Parent 288 0 R/Title(3.3.1 admin.cgi)/Dest[230 0 R/XYZ null 468 null]/Next 290 0 R>>endobj
290 0 obj<</Parent 288 0 R/Title(3.3.2 classes.cgi)/Dest[230 0 R/XYZ null 399 null]/Prev 289 0 R/Next 291 0 R>>endobj
291 0 obj<</Parent 288 0 R/Title(3.3.3 jobs.cgi)/Dest[230 0 R/XYZ null 329 null]/Prev 290 0 R/Next 292 0 R>>endobj
292 0 obj<</Parent 288 0 R/Title(3.3.4 printers.cgi)/Dest[230 0 R/XYZ null 273 null]/Prev 291 0 R>>endobj
293 0 obj<</Parent 275 0 R/Count -5/First 294 0 R/Last 298 0 R/Title(3.4 CUPS Application Programmers Interface)/Dest[230 0 R/XYZ null 203 null]/Prev 288 0 R/Next 299 0 R>>endobj
294 0 obj<</Parent 293 0 R/Title(3.4.1 Convenience Functions)/Dest[230 0 R/XYZ null 130 null]/Next 295 0 R>>endobj
281 0 obj<</Parent 276 0 R/Title(3.1.5 socket)/Dest[227 0 R/XYZ null 514 null]/Prev 280 0 R/Next 282 0 R>>endobj
282 0 obj<</Parent 276 0 R/Title(3.1.6 usb)/Dest[227 0 R/XYZ null 394 null]/Prev 281 0 R>>endobj
283 0 obj<</Parent 275 0 R/Count -4/First 284 0 R/Last 287 0 R/Title(3.2 Berkeley Commands)/Dest[227 0 R/XYZ null 300 null]/Prev 276 0 R/Next 288 0 R>>endobj
284 0 obj<</Parent 283 0 R/Title(3.2.1 lpc)/Dest[227 0 R/XYZ null 227 null]/Next 285 0 R>>endobj
285 0 obj<</Parent 283 0 R/Title(3.2.2 lpq)/Dest[227 0 R/XYZ null 118 null]/Prev 284 0 R/Next 286 0 R>>endobj
286 0 obj<</Parent 283 0 R/Title(3.2.3 lpr)/Dest[230 0 R/XYZ null 724 null]/Prev 285 0 R/Next 287 0 R>>endobj
287 0 obj<</Parent 283 0 R/Title(3.2.4 lprm)/Dest[230 0 R/XYZ null 668 null]/Prev 286 0 R>>endobj
288 0 obj<</Parent 275 0 R/Count -4/First 289 0 R/Last 292 0 R/Title(3.3 CGI)/Dest[230 0 R/XYZ null 611 null]/Prev 283 0 R/Next 293 0 R>>endobj
289 0 obj<</Parent 288 0 R/Title(3.3.1 admin.cgi)/Dest[230 0 R/XYZ null 525 null]/Next 290 0 R>>endobj
290 0 obj<</Parent 288 0 R/Title(3.3.2 classes.cgi)/Dest[230 0 R/XYZ null 455 null]/Prev 289 0 R/Next 291 0 R>>endobj
291 0 obj<</Parent 288 0 R/Title(3.3.3 jobs.cgi)/Dest[230 0 R/XYZ null 385 null]/Prev 290 0 R/Next 292 0 R>>endobj
292 0 obj<</Parent 288 0 R/Title(3.3.4 printers.cgi)/Dest[230 0 R/XYZ null 329 null]/Prev 291 0 R>>endobj
293 0 obj<</Parent 275 0 R/Count -5/First 294 0 R/Last 298 0 R/Title(3.4 CUPS Application Programmers Interface)/Dest[230 0 R/XYZ null 259 null]/Prev 288 0 R/Next 299 0 R>>endobj
294 0 obj<</Parent 293 0 R/Title(3.4.1 Convenience Functions)/Dest[230 0 R/XYZ null 186 null]/Next 295 0 R>>endobj
295 0 obj<</Parent 293 0 R/Title(3.4.2 HTTP Functions)/Dest[233 0 R/XYZ null 724 null]/Prev 294 0 R/Next 296 0 R>>endobj
296 0 obj<</Parent 293 0 R/Title(3.4.3 IPP Functions)/Dest[233 0 R/XYZ null 668 null]/Prev 295 0 R/Next 297 0 R>>endobj
297 0 obj<</Parent 293 0 R/Title(3.4.4 Language Functions)/Dest[233 0 R/XYZ null 598 null]/Prev 296 0 R/Next 298 0 R>>endobj
@@ -729,45 +723,45 @@ xref
0000008801 00000 n
0000008906 00000 n
0000009011 00000 n
0000009116 00000 n
0000009220 00000 n
0000009323 00000 n
0000009426 00000 n
0000009765 00000 n
0000009870 00000 n
0000009975 00000 n
0000010080 00000 n
0000010185 00000 n
0000010290 00000 n
0000010394 00000 n
0000010499 00000 n
0000010604 00000 n
0000010709 00000 n
0000010814 00000 n
0000010919 00000 n
0000011024 00000 n
0000011129 00000 n
0000011234 00000 n
0000011340 00000 n
0000011446 00000 n
0000011552 00000 n
0000011658 00000 n
0000011764 00000 n
0000011869 00000 n
0000011975 00000 n
0000012081 00000 n
0000012187 00000 n
0000012293 00000 n
0000012399 00000 n
0000012505 00000 n
0000012611 00000 n
0000012717 00000 n
0000012823 00000 n
0000012929 00000 n
0000013035 00000 n
0000013139 00000 n
0000013244 00000 n
0000013349 00000 n
0000009115 00000 n
0000009218 00000 n
0000009321 00000 n
0000009653 00000 n
0000009758 00000 n
0000009863 00000 n
0000009968 00000 n
0000010073 00000 n
0000010178 00000 n
0000010283 00000 n
0000010387 00000 n
0000010492 00000 n
0000010597 00000 n
0000010702 00000 n
0000010807 00000 n
0000010912 00000 n
0000011017 00000 n
0000011122 00000 n
0000011227 00000 n
0000011333 00000 n
0000011439 00000 n
0000011545 00000 n
0000011651 00000 n
0000011757 00000 n
0000011862 00000 n
0000011968 00000 n
0000012074 00000 n
0000012180 00000 n
0000012286 00000 n
0000012392 00000 n
0000012498 00000 n
0000012604 00000 n
0000012710 00000 n
0000012816 00000 n
0000012922 00000 n
0000013028 00000 n
0000013132 00000 n
0000013237 00000 n
0000013342 00000 n
0000013625 00000 n
0000013659 00000 n
0000013693 00000 n
@@ -861,143 +855,143 @@ xref
0000025759 00000 n
0000025779 00000 n
0000025934 00000 n
0000026946 00000 n
0000026967 00000 n
0000027080 00000 n
0000027265 00000 n
0000027286 00000 n
0000027441 00000 n
0000028846 00000 n
0000028868 00000 n
0000028981 00000 n
0000029171 00000 n
0000029192 00000 n
0000029342 00000 n
0000030390 00000 n
0000030411 00000 n
0000030570 00000 n
0000031576 00000 n
0000031597 00000 n
0000031728 00000 n
0000032713 00000 n
0000032734 00000 n
0000032865 00000 n
0000033789 00000 n
0000033810 00000 n
0000033960 00000 n
0000035019 00000 n
0000035040 00000 n
0000035171 00000 n
0000035917 00000 n
0000035938 00000 n
0000036069 00000 n
0000037202 00000 n
0000037224 00000 n
0000037364 00000 n
0000038318 00000 n
0000038339 00000 n
0000038470 00000 n
0000039061 00000 n
0000039082 00000 n
0000039195 00000 n
0000039384 00000 n
0000039405 00000 n
0000039545 00000 n
0000040213 00000 n
0000040234 00000 n
0000040347 00000 n
0000040536 00000 n
0000040557 00000 n
0000040711 00000 n
0000043138 00000 n
0000043160 00000 n
0000043315 00000 n
0000044936 00000 n
0000044958 00000 n
0000045013 00000 n
0000045118 00000 n
0000045262 00000 n
0000045368 00000 n
0000045488 00000 n
0000045597 00000 n
0000045746 00000 n
0000045856 00000 n
0000045963 00000 n
0000026941 00000 n
0000026962 00000 n
0000027075 00000 n
0000027260 00000 n
0000027281 00000 n
0000027436 00000 n
0000028837 00000 n
0000028859 00000 n
0000028972 00000 n
0000029162 00000 n
0000029183 00000 n
0000029333 00000 n
0000030372 00000 n
0000030393 00000 n
0000030552 00000 n
0000031483 00000 n
0000031504 00000 n
0000031635 00000 n
0000032597 00000 n
0000032618 00000 n
0000032749 00000 n
0000033673 00000 n
0000033694 00000 n
0000033844 00000 n
0000034897 00000 n
0000034918 00000 n
0000035049 00000 n
0000035795 00000 n
0000035816 00000 n
0000035947 00000 n
0000037080 00000 n
0000037102 00000 n
0000037242 00000 n
0000038196 00000 n
0000038217 00000 n
0000038348 00000 n
0000038939 00000 n
0000038960 00000 n
0000039073 00000 n
0000039262 00000 n
0000039283 00000 n
0000039423 00000 n
0000040091 00000 n
0000040112 00000 n
0000040225 00000 n
0000040414 00000 n
0000040435 00000 n
0000040589 00000 n
0000042985 00000 n
0000043007 00000 n
0000043162 00000 n
0000044800 00000 n
0000044822 00000 n
0000044877 00000 n
0000044982 00000 n
0000045126 00000 n
0000045232 00000 n
0000045352 00000 n
0000045461 00000 n
0000045610 00000 n
0000045720 00000 n
0000045827 00000 n
0000045981 00000 n
0000046117 00000 n
0000046253 00000 n
0000046350 00000 n
0000046460 00000 n
0000046575 00000 n
0000046688 00000 n
0000046801 00000 n
0000046898 00000 n
0000047056 00000 n
0000047153 00000 n
0000047263 00000 n
0000047373 00000 n
0000047471 00000 n
0000047615 00000 n
0000047718 00000 n
0000047836 00000 n
0000047951 00000 n
0000048057 00000 n
0000048236 00000 n
0000048351 00000 n
0000048472 00000 n
0000048592 00000 n
0000048717 00000 n
0000048824 00000 n
0000048985 00000 n
0000049110 00000 n
0000049243 00000 n
0000049376 00000 n
0000049500 00000 n
0000049627 00000 n
0000049737 00000 n
0000049885 00000 n
0000049998 00000 n
0000050106 00000 n
0000050254 00000 n
0000050356 00000 n
0000050472 00000 n
0000050592 00000 n
0000050706 00000 n
0000050819 00000 n
0000050936 00000 n
0000051056 00000 n
0000051173 00000 n
0000051275 00000 n
0000051426 00000 n
0000051533 00000 n
0000051647 00000 n
0000051760 00000 n
0000051880 00000 n
0000051994 00000 n
0000052119 00000 n
0000052229 00000 n
0000052340 00000 n
0000052454 00000 n
0000052566 00000 n
0000052678 00000 n
0000052790 00000 n
0000052893 00000 n
0000053039 00000 n
0000053139 00000 n
0000053252 00000 n
0000053366 00000 n
0000053479 00000 n
0000053588 00000 n
0000053702 00000 n
0000053815 00000 n
0000053928 00000 n
0000054044 00000 n
0000054158 00000 n
0000054259 00000 n
0000054393 00000 n
0000054490 00000 n
0000054590 00000 n
0000046214 00000 n
0000046324 00000 n
0000046439 00000 n
0000046552 00000 n
0000046665 00000 n
0000046762 00000 n
0000046920 00000 n
0000047017 00000 n
0000047127 00000 n
0000047237 00000 n
0000047335 00000 n
0000047479 00000 n
0000047582 00000 n
0000047700 00000 n
0000047815 00000 n
0000047921 00000 n
0000048100 00000 n
0000048215 00000 n
0000048336 00000 n
0000048456 00000 n
0000048581 00000 n
0000048688 00000 n
0000048849 00000 n
0000048974 00000 n
0000049107 00000 n
0000049240 00000 n
0000049364 00000 n
0000049491 00000 n
0000049601 00000 n
0000049749 00000 n
0000049862 00000 n
0000049970 00000 n
0000050118 00000 n
0000050220 00000 n
0000050336 00000 n
0000050456 00000 n
0000050570 00000 n
0000050683 00000 n
0000050800 00000 n
0000050920 00000 n
0000051037 00000 n
0000051139 00000 n
0000051290 00000 n
0000051397 00000 n
0000051511 00000 n
0000051624 00000 n
0000051744 00000 n
0000051858 00000 n
0000051983 00000 n
0000052093 00000 n
0000052204 00000 n
0000052318 00000 n
0000052430 00000 n
0000052542 00000 n
0000052654 00000 n
0000052757 00000 n
0000052903 00000 n
0000053003 00000 n
0000053116 00000 n
0000053230 00000 n
0000053343 00000 n
0000053452 00000 n
0000053566 00000 n
0000053679 00000 n
0000053792 00000 n
0000053908 00000 n
0000054022 00000 n
0000054123 00000 n
0000054257 00000 n
0000054354 00000 n
0000054454 00000 n
trailer
<</Size 349/Root 348 0 R/Info 1 0 R/ID[<37fb8667307f7e56a5efc07d8835ab6c><37fb8667307f7e56a5efc07d8835ab6c>]>>
<</Size 349/Root 348 0 R/Info 1 0 R/ID[<ec70ddc8d0e38ae276386e261362e97f><ec70ddc8d0e38ae276386e261362e97f>]>>
startxref
54818
54682
%%EOF
-14
Ver Arquivo
@@ -138,20 +138,6 @@ The options can be any combination of the following:
<LI><CODE>parity=<I>none</I></CODE> - Turns parity checking off.
<LI><CODE>flow=dtrdsr<I></I></CODE> - Turns DTR/DSR (hardware) flow
control on.
<LI><CODE>flow=hard<I></I></CODE> - Turns RTS/CTS
(hardware) flow control on.
<LI><CODE>flow=none<I></I></CODE> - Turns flow control off.
<LI><CODE>flow=rtscts<I></I></CODE> - Turns RTS/CTS
(hardware) flow control on.
<LI><CODE>flow=xonxoff<I></I></CODE> - Turns XON/XOFF
(software) flow control on.
</UL>
<H3>socket</H3>
+6765 -7853
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+8329 -8227
Ver Arquivo
Diff do arquivo suprimido porque uma ou mais linhas são muito longas
+3 -261
Ver Arquivo
@@ -1,7 +1,7 @@
<HTML>
<HEAD>
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-2000, All Rights Reserved">
<META NAME="DOCNUMBER" CONTENT="CUPS-SPM-1.1.5">
<META NAME="DOCNUMBER" CONTENT="CUPS-SPM-1.1">
<META NAME="Author" CONTENT="Easy Software Products">
<TITLE>CUPS Software Programmers Manual</TITLE>
</HEAD>
@@ -10,7 +10,7 @@
<H1 ALIGN="RIGHT">Preface</H1>
<P>This software programmers manual provides software programming
information for the Common UNIX Printing System ("CUPS") Version 1.1.5.
information for the Common UNIX Printing System ("CUPS") Version 1.1.
<EMBED SRC="system-overview.shtml">
@@ -450,65 +450,6 @@ if (jobid == 0)
puts(cupsErrorString(cupsLastError()));
</PRE></UL>
<H3>Passwords and Authentication</H3>
<P>CUPS supports authentication of any request, including
submission of print jobs. The default mechanism for getting the
username and password is to use the login user and a password
from the console.
<P>To support other types of applications, in particular
Graphical User Interfaces ("GUIs"), the CUPS API provides
functions to set the default username and to register a callback
function that returns a password string.
<P>The <A HREF="cupsSetPasswordCB"><CODE>cupsSetPasswordCB()</CODE></A>
function is used to set a password callback in your program. Only one
function can be used at any time.
<P>The <A HREF="cupsSetUser"><CODE>cupsSetUser()</CODE></A> function sets
the current username for authentication. This function can be called by
your password callback function to change the current username as needed.
<P>The following example shows a simple password callback that gets a
username and password from the user:
<UL><PRE>
#include &lt;cups/cups.h&gt;
const char *
my_password_cb(const char *prompt)
{
char user[65];
puts(prompt);
/* Get a username from the user */
printf("Username: ");
if (fgets(user, sizeof(user), stdin) == NULL)
return (NULL);
/* Strip the newline from the string and set the user */
user[strlen(user) - 1] = '\0';
cupsSetUser(user);
/* Use getpass() to ask for the password... */
return (getpass("Password: "));
}
...
cupsSetPasswordCB(my_password_cb);
</PRE></UL>
<P>Similarly, a GUI interface could display the prompt string in a
window with input fields for the username and password. The username
should probably default to the value of
<A HREF="#cupsUser"><CODE>cupsUser()</CODE></A> to make things easier
on the user.
<H2>PPD Services</H2>
<P>CUPS includes functions to access and manipulate PostScript Printer
@@ -3318,9 +3259,6 @@ password = cupsGetPassword("Please enter a password:");
<P>
<A HREF="#cupsServer">cupsServer()</A>,
<A HREF="#cupsSetPasswordCB">cupsSetPasswordCB()</A>,
<A HREF="#cupsSetServer">cupsSetServer()</A>,
<A HREF="#cupsSetUser">cupsSetUser()</A>,
<A HREF="#cupsUser()">cupsUser()</A>
<!-- NEW PAGE --><H2><A NAME="cupsGetPPD">cupsGetPPD()</A></H2>
@@ -4491,160 +4429,8 @@ server = cupsServer();
<P>
<A HREF="#cupsGetPassword">cupsGetPassword()</A>,
<A HREF="#cupsSetPasswordCB">cupsSetPasswordCB()</A>,
<A HREF="#cupsSetServer">cupsSetServer()</A>,
<A HREF="#cupsSetUser">cupsSetUser()</A>,
<A HREF="#cupsUser">cupsUser()</A>
<!-- NEW PAGE --><H2><A NAME="cupsSetPasswordCB">cupsSetPasswordCB()</A></H2>
<H3>Usage</H3>
<PRE>
void
cupsSetPasswordCB(const char *(*cb)(const char *prompt));
</PRE>
<H3>Arguments</H3>
<CENTER><TABLE WIDTH="80%" BORDER>
<TR>
<TH>Argument</TH>
<TH>Description</TH>
</TR>
<TR>
<TD>cb</TD>
<TD>The password callback function.</TD>
</TR>
</TABLE></CENTER>
<H3>Description</H3>
<P><CODE>cupsSetPasswordCB()</CODE> sets the callback function to use when
asking the user for a password. The callback function must accept a single
character string pointer (the prompt string) and return <CODE>NULL</CODE>
if the user did not enter a password string or a pointer to the password
string otherwise.
<H3>Example</H3>
<PRE>
#include &lt;cups/cups.h&gt;
const char *
my_password_cb(const char *prompt)
{
return (getpass(prompt));
}
...
char *password;
...
cupsSetPasswordCB(my_password_cb);
password = cupsGetPassword("Please enter a password:");
</PRE>
<H3>See Also</H3>
<P>
<A HREF="#cupsServer">cupsServer()</A>,
<A HREF="#cupsSetServer">cupsSetServer()</A>,
<A HREF="#cupsSetUser">cupsSetUser()</A>,
<A HREF="#cupsUser()">cupsUser()</A>
<!-- NEW PAGE --><H2><A NAME="cupsSetServer">cupsSetServer()</A></H2>
<H3>Usage</H3>
<PRE>
void
cupsSetServer(const char *server);
</PRE>
<H3>Arguments</H3>
<CENTER><TABLE WIDTH="80%" BORDER>
<TR>
<TH>Argument</TH>
<TH>Description</TH>
</TR>
<TR>
<TD>server</TD>
<TD>The default server to use.</TD>
</TR>
</TABLE></CENTER>
<H3>Description</H3>
<P><CODE>cupsSetServer()</CODE> sets the default server to use for
the CUPS API. If the <CODE>server</CODE> argument is <CODE>NULL</CODE>,
the default server is used.
<H3>Example</H3>
<PRE>
#include &lt;cups/cups.h&gt;
cupsSetServer("foo.bar.com");
</PRE>
<H3>See Also</H3>
<P>
<A HREF="#cupsServer">cupsServer()</A>,
<A HREF="#cupsSetPasswordCB">cupsSetPasswordCB()</A>,
<A HREF="#cupsSetUser">cupsSetUser()</A>,
<A HREF="#cupsUser()">cupsUser()</A>
<!-- NEW PAGE --><H2><A NAME="cupsSetUser">cupsSetUser()</A></H2>
<H3>Usage</H3>
<PRE>
void
cupsSetUser(const char *user);
</PRE>
<H3>Arguments</H3>
<CENTER><TABLE WIDTH="80%" BORDER>
<TR>
<TH>Argument</TH>
<TH>Description</TH>
</TR>
<TR>
<TD>user</TD>
<TD>The user name string to use.</TD>
</TR>
</TABLE></CENTER>
<H3>Description</H3>
<P><CODE>cupsSetUser()</CODE> sets the default user name for authentication.
If the <CODE>user</CODE> argument is <CODE>NULL</CODE> then the current
login user is used.
<H3>Example</H3>
<PRE>
#include &lt;cups/cups.h&gt;
...
cupsSetUser("root");
</PRE>
<H3>See Also</H3>
<P>
<A HREF="#cupsServer">cupsServer()</A>,
<A HREF="#cupsSetPasswordCB">cupsSetPasswordCB()</A>,
<A HREF="#cupsSetServer">cupsSetServer()</A>,
<A HREF="#cupsUser()">cupsUser()</A>
<!-- NEW PAGE --><H2><A NAME="cupsTempFile">cupsTempFile()</A></H2>
<H3>Usage</H3>
@@ -7261,8 +7047,7 @@ http = httpConnect(cupsServer(), ippPort());
<H3>See Also</H3>
<A HREF="#cupsServer"><CODE>cupsServer()</CODE></A>,
<A HREF="#ippSetPort"><CODE>ippSetPort()</CODE></A>
<A HREF="#cupsServer"><CODE>cupsServer()</CODE></A>
<!-- NEW PAGE --><H2><A NAME="ippRead">ippRead()</A></H2>
@@ -7327,49 +7112,6 @@ if (status == IPP_DATA)
<A HREF="#ippWrite"><CODE>ippWrite()</CODE></A>
<!-- NEW PAGE --><H2><A NAME="ippSetPort">ippSetPort()</A></H2>
<H3>Usage</H3>
<PRE>
void
ippSetPort(int port);
</PRE>
<H3>Arguments</H3>
<CENTER><TABLE WIDTH="80%" BORDER>
<TR>
<TH>Argument</TH>
<TH>Description</TH>
</TR>
<TR>
<TD>port</TD>
<TD>The port number to use</TD>
</TR>
</TABLE></CENTER>
<H3>Description</H3>
<P>The <CODE>ippSetPort()</CODE> function sets the default IPP port number
for requests.
<H3>Example</H3>
<PRE>
#include &lt;cups/http.h>
#include &lt;cups/ipp.h>
...
ippSetPort(8631);
</PRE>
<H3>See Also</H3>
<A HREF="#ippPort"><CODE>ippPort()</CODE></A>
<!-- NEW PAGE --><H2><A NAME="ippTimeToDate">ippTimeToDate()</A></H2>
<H3>Usage</H3>
-297
Ver Arquivo
@@ -1,297 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD>
<TITLE> CUPS Software Performance Specification</TITLE>
<META NAME="AUTHOR" CONTENT="Easy Software Products">
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-2000, All Rights Reserved">
<META NAME="DOCNUMBER" CONTENT="CUPS-SPS-1.1">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<STYLE>
BODY { font-family: serif; font-size: 11.0pt }
H1 { font-family: sans-serif; font-size: 20.0pt }
H2 { font-family: sans-serif; font-size: 17.0pt }
H3 { font-family: sans-serif; font-size: 14.0pt }
H4 { font-family: sans-serif; font-size: 11.0pt }
H5 { font-family: sans-serif; font-size: 9.0pt }
H6 { font-family: sans-serif; font-size: 8.0pt }
SUB { font-size: 8.0pt }
SUP { font-size: 8.0pt }
PRE { font-size: 9.0pt }
</STYLE>
</HEAD>
<BODY>
<CENTER><A HREF="#CONTENTS"><IMG SRC="images/cups-large.gif" BORDER="0" WIDTH="100%"><BR>
<H1> CUPS Software Performance Specification</H1></A><BR>
CUPS-SPS-1.1<BR>
Easy Software Products<BR>
Copyright 1997-2000, All Rights Reserved<BR>
</CENTER>
<HR>
<H1 ALIGN="CENTER"><A NAME="CONTENTS">Table of Contents</A></H1>
<BR>
<BR><B><A HREF="#1">1 Scope</A></B>
<UL>
<LI><A HREF="#1_1">1.1 Identification</A></LI>
<LI><A HREF="#1_2">1.2 System Overview</A></LI>
<LI><A HREF="#1_3">1.3 Document Overview</A></LI>
</UL>
<B><A HREF="#2">2 References</A></B>
<UL>
<LI><A HREF="#2_1">2.1 CUPS Documentation</A></LI>
<LI><A HREF="#2_2">2.2 Other Documents</A></LI>
</UL>
<B><A HREF="#3">3 Programs</A></B>
<BR>
<BR><B><A HREF="#4">4 Scheduler Objects</A></B>
<BR>
<BR><B><A HREF="#5">A Glossary</A></B>
<UL>
<LI><A HREF="#5_1">A.1 Terms</A></LI>
<LI><A HREF="#5_2">A.2 Acronyms</A></LI>
</UL>
<HR>
<H1><A NAME="1">1 Scope</A></H1>
<H2><A NAME="1_1">1.1 Identification</A></H2>
<P>This software performance specification provides an analysis of the
memory, disk, and processor utilitization of each program in the Common
UNIX Printing System (&quot;CUPS&quot;) Version 1.1.</P>
<P>For the purposes of comparison, all figures are for the Linux Intel
platform. Memory utilization on other platforms should be similar. </P>
<H2><A NAME="1_2">1.2 System Overview</A></H2>
<P>CUPS provides a portable printing layer for UNIX&reg;-based operating
systems. It has been developed by <A HREF="http://www.easysw.com">Easy
Software Products</A> to promote a standard printing solution for all
UNIX vendors and users. CUPS provides the System V and Berkeley
command-line interfaces. </P>
<P>CUPS uses the Internet Printing Protocol (&quot;IPP&quot;) as the basis for
managing print jobs and queues. The Line Printer Daemon (&quot;LPD&quot;) Server
Message Block (&quot;SMB&quot;), and AppSocket (a.k.a. JetDirect) protocols are
also supported with reduced functionality. CUPS adds network printer
browsing and PostScript Printer Description (&quot;PPD&quot;) based printing
options to support real-world printing under UNIX. </P>
<P>CUPS also includes a customized version of GNU Ghostscript
(currently based off GNU Ghostscript 5.50) and an image file RIP that
are used to support non-PostScript printers. Sample drivers for HP and
EPSON printers are included that use these filters. </P>
<H2><A NAME="1_3">1.3 Document Overview</A></H2>
<P>This software performance specification is organized into the
following sections:</P>
<UL>
<LI>1 - Scope</LI>
<LI>2 - References</LI>
<LI>3 - Programs</LI>
<LI>4 - Scheduler Objects</LI>
<LI>A - Glossary</LI>
</UL>
<H1><A NAME="2">2 References</A></H1>
<H2><A NAME="2_1">2.1 CUPS Documentation</A></H2>
<P>The following CUPS documentation is referenced by this document: </P>
<UL>
<LI>CUPS-CMP-1.1: CUPS Configuration Management Plan </LI>
<LI>CUPS-IDD-1.1: CUPS System Interface Design Description </LI>
<LI>CUPS-IPP-1.1: CUPS Implementation of IPP </LI>
<LI>CUPS-SAM-1.1.x: CUPS Software Administrators Manual </LI>
<LI>CUPS-SDD-1.1: CUPS Software Design Description </LI>
<LI>CUPS-SPM-1.1.x: CUPS Software Programming Manual </LI>
<LI>CUPS-SSR-1.1: CUPS Software Security Report </LI>
<LI>CUPS-STP-1.1: CUPS Software Test Plan </LI>
<LI>CUPS-SUM-1.1.x: CUPS Software Users Manual </LI>
<LI>CUPS-SVD-1.1: CUPS Software Version Description </LI>
</UL>
<H2><A NAME="2_2">2.2 Other Documents</A></H2>
<P>The following non-CUPS documents are referenced by this document: </P>
<UL>
<LI><A HREF="http://partners.adobe.com/asn/developer/PDFS/TN/5003.PPD_Spec_v4.3.pdf">
Adobe PostScript Printer Description File Format Specification,
Version 4.3.</A></LI>
<LI><A HREF="http://partners.adobe.com/asn/developer/PDFS/TN/PLRM.pdf">
Adobe PostScript Language Reference, Third Edition.</A></LI>
<LI>IPP: Job and Printer Set Operations </LI>
<LI>IPP/1.1: Encoding and Transport </LI>
<LI>IPP/1.1: Implementers Guide </LI>
<LI>IPP/1.1: Model and Semantics </LI>
<LI><A HREF="http://www.ietf.org/rfc/rfc1179.txt">RFC 1179, Line
Printer Daemon Protocol</A></LI>
<LI><A HREF="http://www.ietf.org/rfc/rfc2567.txt">RFC 2567, Design
Goals for an Internet Printing Protocol</A></LI>
<LI><A HREF="http://www.ietf.org/rfc/rfc2568.txt">RFC 2568, Rationale
for the Structure of the Model and Protocol</A> for the Internet
Printing Protocol</LI>
<LI><A HREF="http://www.ietf.org/rfc/rfc2569.txt">RFC 2569, Mapping
between LPD and IPP Protocols</A></LI>
<LI><A HREF="http://www.ietf.org/rfc/rfc2616.txt">RFC 2616, Hypertext
Transfer Protocol -- HTTP/1.1</A></LI>
<LI><A HREF="http://www.ietf.org/rfc/rfc2617.txt">RFC 2617, HTTP
Authentication: Basic and Digest Access</A> Authentication </LI>
</UL>
<H1><A NAME="3">3 Programs</A></H1>
<P>The following table describes the average memory, disk, and CPU
usage of each program in CUPS. </P>
<P>The base memory column shows the initial memory requirements for
each program, including any shared libraries that are provided by CUPS. </P>
<P>The max memory column shows the maximum amount of memory that will
be used by the program based upon the default configuration settings
supplied with CUPS. </P>
<P>The temp files column indicates whether any temporary files are
created. </P>
<P>The CPU usage column specifies a relative CPU usage by the program
under normal conditions, either low, medium, or high. Low usage
indicates that the program will never use more than 33% of the
available CPU time. Medium usage indicates the program will use as much
as 66% of the available CPU time. High usage indicates the program uses
66% or more of the available CPU time.
<CENTER>
<TABLE BORDER="1" WIDTH="80%">
<TR><TH COLSPAN="3">Backends</TH></TR>
<TR><TH>Program</TH><TH>Base Memory</TH><TH>Max Memory</TH><TH>Temp
Files</TH><TH>CPU Usage</TH></TR>
<TR><TD>ipp</TD><TD>91k</TD><TD>256k</TD><TD>Up to size of print file</TD><TD>
Low</TD></TR>
<TR><TD>lpd</TD><TD>89k</TD><TD>89k</TD><TD>Up to size of print file</TD><TD>
Low</TD></TR>
<TR><TD>parallel</TD><TD>85k</TD><TD>85k</TD><TD>Up to size of print
file</TD><TD>Low</TD></TR>
<TR><TD>serial</TD><TD>85k</TD><TD>85k</TD><TD>Up to size of print file</TD><TD>
Low</TD></TR>
<TR><TD>socket</TD><TD>85k</TD><TD>85k</TD><TD>Up to size of print file</TD><TD>
Low</TD></TR>
<TR><TD>usb</TD><TD>85k</TD><TD>85k</TD><TD>Up to size of print file</TD><TD>
Low</TD></TR>
<TR><TH COLSPAN="3">CGIs</TH></TR>
<TR><TH>Program</TH><TH>Base Memory</TH><TH>Max Memory</TH><TH>Temp
Files</TH><TH>CPU Usage</TH></TR>
<TR><TD>admin.cgi</TD><TD>107k</TD><TD>256k</TD><TD>Up to size of PPD
file</TD><TD>Medium</TD></TR>
<TR><TD>classes.cgi</TD><TD>95k</TD><TD>Size of class objects</TD><TD>
None</TD><TD>Medium</TD></TR>
<TR><TD>jobs.cgi</TD><TD>93k</TD><TD>Size of job objects</TD><TD>None</TD><TD>
Medium</TD></TR>
<TR><TD>printers.cgi</TD><TD>95k</TD><TD>Size of printer objects</TD><TD>
None</TD><TD>Medium</TD></TR>
<TR><TH COLSPAN="3">Command-Line Programs</TH></TR>
<TR><TH>Program</TH><TH>Base Memory</TH><TH>Max Memory</TH><TH>Temp
Files</TH><TH>CPU Usage</TH></TR>
<TR><TD>accept</TD><TD>88k</TD><TD>128k</TD><TD>None</TD><TD>Low</TD></TR>
<TR><TD>cancel</TD><TD>88k</TD><TD>128k</TD><TD>None</TD><TD>Low</TD></TR>
<TR><TD>disable</TD><TD>88k</TD><TD>128k</TD><TD>None</TD><TD>Low</TD></TR>
<TR><TD>enable</TD><TD>88k</TD><TD>128k</TD><TD>None</TD><TD>Low</TD></TR>
<TR><TD>lp</TD><TD>90k</TD><TD>256k</TD><TD>None</TD><TD>Low</TD></TR>
<TR><TD>lpadmin</TD><TD>148k</TD><TD>256k</TD><TD>None</TD><TD>Low</TD></TR>
<TR><TD>lpc</TD><TD>86k</TD><TD>Size of job and printer objects</TD><TD>
None</TD><TD>Medium</TD></TR>
<TR><TD>lpinfo</TD><TD>89k</TD><TD>Size of device and PPD objects</TD><TD>
None</TD><TD>Medium</TD></TR>
<TR><TD>lpmove</TD><TD>88k</TD><TD>128k</TD><TD>None</TD><TD>Low</TD></TR>
<TR><TD>lpoptions</TD><TD>89k</TD><TD>128k</TD><TD>None</TD><TD>Low</TD></TR>
<TR><TD>lppasswd</TD><TD>90k</TD><TD>90k</TD><TD>None</TD><TD>Low</TD></TR>
<TR><TD>lpq</TD><TD>87k</TD><TD>Size of job objects</TD><TD>None</TD><TD>
Medium</TD></TR>
<TR><TD>lpr</TD><TD>87k</TD><TD>256k</TD><TD>None</TD><TD>Low</TD></TR>
<TR><TD>lprm</TD><TD>84k</TD><TD>128k</TD><TD>None</TD><TD>Low</TD></TR>
<TR><TD>lpstat</TD><TD>119k</TD><TD>Size of job, printer, and class
objects</TD><TD>None</TD><TD>Medium</TD></TR>
<TR><TD>reject</TD><TD>88k</TD><TD>128k</TD><TD>None</TD><TD>Low</TD></TR>
<TR><TH COLSPAN="3">Daemons</TH></TR>
<TR><TH>Program</TH><TH>Base Memory</TH><TH>Max Memory</TH><TH>Temp
Files</TH><TH>CPU Usage</TH></TR>
<TR><TD>cups-lpd</TD><TD>92k</TD><TD>256k</TD><TD>One file per control
or data file from client</TD><TD>Low</TD></TR>
<TR><TD>cupsd</TD><TD>308k</TD><TD>See Scheduler Requirements</TD><TD>
See Scheduler Requirements</TD><TD>Medium</TD></TR>
<TR><TD>cups-polld</TD><TD>84k</TD><TD>Size of printer and class objects</TD><TD>
None</TD><TD>Low</TD></TR>
<TR><TH COLSPAN="3">Filters</TH></TR>
<TR><TH>Program</TH><TH>Base Memory</TH><TH>Max Memory</TH><TH>Temp
Files</TH><TH>CPU Usage</TH></TR>
<TR><TD>hpgltops</TD><TD>263k</TD><TD>320k</TD><TD>None</TD><TD>Medium</TD>
</TR>
<TR><TD>imagetops</TD><TD>628k</TD><TD>10M</TD><TD>Swap file for
uncompressed image data</TD><TD>Medium</TD></TR>
<TR><TD>imagetoraster</TD><TD>652k</TD><TD>10M</TD><TD>Swap file for
uncompressed image data</TD><TD>High</TD></TR>
<TR><TD>pstops</TD><TD>775k</TD><TD>840k</TD><TD>Up to size of print
file</TD><TD>Medium</TD></TR>
<TR><TD>pstoraster</TD><TD>4M</TD><TD>14M</TD><TD>Swap file for command
lists</TD><TD>High</TD></TR>
<TR><TD>rastertoepson</TD><TD>693k</TD><TD>1M</TD><TD>None</TD><TD>Low</TD>
</TR>
<TR><TD>rastertohp</TD><TD>690k</TD><TD>1M</TD><TD>None</TD><TD>Low</TD></TR>
<TR><TD>texttops</TD><TD>638k</TD><TD>4*cols*rows</TD><TD>None</TD><TD>
Low</TD></TR>
</TABLE>
</CENTER>
</P>
<H1><A NAME="4">4 Scheduler Objects</A></H1>
<P>The <CODE>cupsd</CODE> program is the CUPS scheduler process. It
manages many interdependent server objects that are used to manage and
print files to printers. </P>
<P>The following table provides the memory and disk cost associated
with each server object.
<CENTER>
<TABLE BORDER="1" WIDTH="80%">
<TR><TH>Object</TH><TH>Memory Per</TH><TH>Disk Per</TH></TR>
<TR><TD>Browse ACL</TD><TD>1k</TD><TD>120</TD></TR>
<TR><TD>Browse Poll</TD><TD>24</TD><TD>80</TD></TR>
<TR><TD>Browse Relay</TD><TD>28</TD><TD>80</TD></TR>
<TR><TD>Certificate</TD><TD>76</TD><TD>32</TD></TR>
<TR><TD>Class</TD><TD>9k</TD><TD>200</TD></TR>
<TR><TD>Client</TD><TD>13k</TD><TD>-</TD></TR>
<TR><TD>Device</TD><TD>256</TD><TD>-</TD></TR>
<TR><TD>Job</TD><TD>2k</TD><TD>1k + size of document files</TD></TR>
<TR><TD>Location ACL</TD><TD>1k</TD><TD>120</TD></TR>
<TR><TD>MIME Filter</TD><TD>268</TD><TD>80</TD></TR>
<TR><TD>MIME Type</TD><TD>340</TD><TD>80</TD></TR>
<TR><TD>PPD</TD><TD>200</TD><TD>656</TD></TR>
<TR><TD>Printer</TD><TD>11k</TD><TD>32k</TD></TR>
</TABLE>
</CENTER>
</P>
<H1 TYPE="A" VALUE="1"><A NAME="5">A Glossary</A></H1>
<H2><A NAME="5_1">A.1 Terms</A></H2>
<DL>
<DT>C </DT>
<DD>A computer language. </DD>
<DT>parallel </DT>
<DD>Sending or receiving data more than 1 bit at a time. </DD>
<DT>pipe </DT>
<DD>A one-way communications channel between two programs. </DD>
<DT>serial </DT>
<DD>Sending or receiving data 1 bit at a time. </DD>
<DT>socket </DT>
<DD>A two-way network communications channel. </DD>
</DL>
<H2><A NAME="5_2">A.2 Acronyms</A></H2>
<DL>
<DT>ASCII </DT>
<DD>American Standard Code for Information Interchange </DD>
<DT>CUPS </DT>
<DD>Common UNIX Printing System </DD>
<DT>ESC/P </DT>
<DD>EPSON Standard Code for Printers </DD>
<DT>FTP </DT>
<DD>File Transfer Protocol </DD>
<DT>HP-GL </DT>
<DD>Hewlett-Packard Graphics Language </DD>
<DT>HP-PCL </DT>
<DD>Hewlett-Packard Page Control Language </DD>
<DT>HP-PJL </DT>
<DD>Hewlett-Packard Printer Job Language </DD>
<DT>IETF </DT>
<DD>Internet Engineering Task Force </DD>
<DT>IPP </DT>
<DD>Internet Printing Protocol </DD>
<DT>ISO </DT>
<DD>International Standards Organization </DD>
<DT>LPD </DT>
<DD>Line Printer Daemon </DD>
<DT>MIME </DT>
<DD>Multimedia Internet Mail Exchange </DD>
<DT>PPD </DT>
<DD>PostScript Printer Description </DD>
<DT>SMB </DT>
<DD>Server Message Block </DD>
<DT>TFTP </DT>
<DD>Trivial File Transfer Protocol </DD>
</DL>
</BODY>
</HTML>
BIN
Ver Arquivo
Arquivo binário não exibido.
-457
Ver Arquivo
@@ -1,457 +0,0 @@
<HTML>
<HEAD>
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-2000, All Rights Reserved">
<META NAME="DOCNUMBER" CONTENT="CUPS-SPS-1.1">
<META NAME="Author" CONTENT="Easy Software Products">
<TITLE>CUPS Software Performance Specification</TITLE>
</HEAD>
<BODY>
<H1>Scope</H1>
<H2>Identification</H2>
<P>This software performance specification provides an analysis of the
memory, disk, and processor utilitization of each program in the
Common UNIX Printing System ("CUPS") Version 1.1.</P>
<P>For the purposes of comparison, all figures are for the Linux Intel
platform. Memory utilization on other platforms should be similar.
<EMBED SRC="system-overview.shtml">
<H2>Document Overview</H2>
<P>This software performance specification is organized into the
following sections:</P>
<UL>
<LI>1 - Scope</LI>
<LI>2 - References</LI>
<LI>3 - Programs</LI>
<LI>4 - Scheduler Objects</LI>
<LI>A - Glossary</LI>
</UL>
<EMBED SRC="references.shtml">
<H1>Programs</H1>
<P>The following table describes the average memory, disk, and CPU usage of
each program in CUPS.
<P>The base memory column shows the initial memory requirements for each
program, including any shared libraries that are provided by CUPS.
<P>The max memory column shows the maximum amount of memory that will be
used by the program based upon the default configuration settings supplied
with CUPS.
<P>The temp files column indicates whether any temporary files are created.
<P>The CPU usage column specifies a relative CPU usage by the program under
normal conditions, either low, medium, or high. Low usage indicates that
the program will never use more than 33% of the available CPU time. Medium
usage indicates the program will use as much as 66% of the available CPU
time. High usage indicates the program uses 66% or more of the available CPU
time.
<CENTER><TABLE WIDTH="80%" BORDER="1">
<TR>
<TH COLSPAN="3">Backends</TH>
</TR>
<TR>
<TH>Program</TH>
<TH>Base Memory</TH>
<TH>Max Memory</TH>
<TH>Temp Files</TH>
<TH>CPU Usage</TH>
</TR>
<TR>
<TD>ipp</TD>
<TD>91k</TD>
<TD>256k</TD>
<TD>Up to size of print file</TD>
<TD>Low</TD>
</TR>
<TR>
<TD>lpd</TD>
<TD>89k</TD>
<TD>89k</TD>
<TD>Up to size of print file</TD>
<TD>Low</TD>
</TR>
<TR>
<TD>parallel</TD>
<TD>85k</TD>
<TD>85k</TD>
<TD>Up to size of print file</TD>
<TD>Low</TD>
</TR>
<TR>
<TD>serial</TD>
<TD>85k</TD>
<TD>85k</TD>
<TD>Up to size of print file</TD>
<TD>Low</TD>
</TR>
<TR>
<TD>socket</TD>
<TD>85k</TD>
<TD>85k</TD>
<TD>Up to size of print file</TD>
<TD>Low</TD>
</TR>
<TR>
<TD>usb</TD>
<TD>85k</TD>
<TD>85k</TD>
<TD>Up to size of print file</TD>
<TD>Low</TD>
</TR>
<TR>
<TH COLSPAN="3">CGIs</TH>
</TR>
<TR>
<TH>Program</TH>
<TH>Base Memory</TH>
<TH>Max Memory</TH>
<TH>Temp Files</TH>
<TH>CPU Usage</TH>
</TR>
<TR>
<TD>admin.cgi</TD>
<TD>107k</TD>
<TD>256k</TD>
<TD>Up to size of PPD file</TD>
<TD>Medium</TD>
</TR>
<TR>
<TD>classes.cgi</TD>
<TD>95k</TD>
<TD>Size of class objects</TD>
<TD>None</TD>
<TD>Medium</TD>
</TR>
<TR>
<TD>jobs.cgi</TD>
<TD>93k</TD>
<TD>Size of job objects</TD>
<TD>None</TD>
<TD>Medium</TD>
</TR>
<TR>
<TD>printers.cgi</TD>
<TD>95k</TD>
<TD>Size of printer objects</TD>
<TD>None</TD>
<TD>Medium</TD>
</TR>
<TR>
<TH COLSPAN="3">Command-Line Programs</TH>
</TR>
<TR>
<TH>Program</TH>
<TH>Base Memory</TH>
<TH>Max Memory</TH>
<TH>Temp Files</TH>
<TH>CPU Usage</TH>
</TR>
<TR>
<TD>accept</TD>
<TD>88k</TD>
<TD>128k</TD>
<TD>None</TD>
<TD>Low</TD>
</TR>
<TR>
<TD>cancel</TD>
<TD>88k</TD>
<TD>128k</TD>
<TD>None</TD>
<TD>Low</TD>
</TR>
<TR>
<TD>disable</TD>
<TD>88k</TD>
<TD>128k</TD>
<TD>None</TD>
<TD>Low</TD>
</TR>
<TR>
<TD>enable</TD>
<TD>88k</TD>
<TD>128k</TD>
<TD>None</TD>
<TD>Low</TD>
</TR>
<TR>
<TD>lp</TD>
<TD>90k</TD>
<TD>256k</TD>
<TD>None</TD>
<TD>Low</TD>
</TR>
<TR>
<TD>lpadmin</TD>
<TD>148k</TD>
<TD>256k</TD>
<TD>None</TD>
<TD>Low</TD>
</TR>
<TR>
<TD>lpc</TD>
<TD>86k</TD>
<TD>Size of job and printer objects</TD>
<TD>None</TD>
<TD>Medium</TD>
</TR>
<TR>
<TD>lpinfo</TD>
<TD>89k</TD>
<TD>Size of device and PPD objects</TD>
<TD>None</TD>
<TD>Medium</TD>
</TR>
<TR>
<TD>lpmove</TD>
<TD>88k</TD>
<TD>128k</TD>
<TD>None</TD>
<TD>Low</TD>
</TR>
<TR>
<TD>lpoptions</TD>
<TD>89k</TD>
<TD>128k</TD>
<TD>None</TD>
<TD>Low</TD>
</TR>
<TR>
<TD>lppasswd</TD>
<TD>90k</TD>
<TD>90k</TD>
<TD>None</TD>
<TD>Low</TD>
</TR>
<TR>
<TD>lpq</TD>
<TD>87k</TD>
<TD>Size of job objects</TD>
<TD>None</TD>
<TD>Medium</TD>
</TR>
<TR>
<TD>lpr</TD>
<TD>87k</TD>
<TD>256k</TD>
<TD>None</TD>
<TD>Low</TD>
</TR>
<TR>
<TD>lprm</TD>
<TD>84k</TD>
<TD>128k</TD>
<TD>None</TD>
<TD>Low</TD>
</TR>
<TR>
<TD>lpstat</TD>
<TD>119k</TD>
<TD>Size of job, printer, and class objects</TD>
<TD>None</TD>
<TD>Medium</TD>
</TR>
<TR>
<TD>reject</TD>
<TD>88k</TD>
<TD>128k</TD>
<TD>None</TD>
<TD>Low</TD>
</TR>
<TR>
<TH COLSPAN="3">Daemons</TH>
</TR>
<TR>
<TH>Program</TH>
<TH>Base Memory</TH>
<TH>Max Memory</TH>
<TH>Temp Files</TH>
<TH>CPU Usage</TH>
</TR>
<TR>
<TD>cups-lpd</TD>
<TD>92k</TD>
<TD>256k</TD>
<TD>One file per control or data file from client</TD>
<TD>Low</TD>
</TR>
<TR>
<TD>cupsd</TD>
<TD>308k</TD>
<TD>See Scheduler Requirements</TD>
<TD>See Scheduler Requirements</TD>
<TD>Medium</TD>
</TR>
<TR>
<TD>cups-polld</TD>
<TD>84k</TD>
<TD>Size of printer and class objects</TD>
<TD>None</TD>
<TD>Low</TD>
</TR>
<TR>
<TH COLSPAN="3">Filters</TH>
</TR>
<TR>
<TH>Program</TH>
<TH>Base Memory</TH>
<TH>Max Memory</TH>
<TH>Temp Files</TH>
<TH>CPU Usage</TH>
</TR>
<TR>
<TD>hpgltops</TD>
<TD>263k</TD>
<TD>320k</TD>
<TD>None</TD>
<TD>Medium</TD>
</TR>
<TR>
<TD>imagetops</TD>
<TD>628k</TD>
<TD>10M</TD>
<TD>Swap file for uncompressed image data</TD>
<TD>Medium</TD>
</TR>
<TR>
<TD>imagetoraster</TD>
<TD>652k</TD>
<TD>10M</TD>
<TD>Swap file for uncompressed image data</TD>
<TD>High</TD>
</TR>
<TR>
<TD>pstops</TD>
<TD>775k</TD>
<TD>840k</TD>
<TD>Up to size of print file</TD>
<TD>Medium</TD>
</TR>
<TR>
<TD>pstoraster</TD>
<TD>4M</TD>
<TD>14M</TD>
<TD>Swap file for command lists</TD>
<TD>High</TD>
</TR>
<TR>
<TD>rastertoepson</TD>
<TD>693k</TD>
<TD>1M</TD>
<TD>None</TD>
<TD>Low</TD>
</TR>
<TR>
<TD>rastertohp</TD>
<TD>690k</TD>
<TD>1M</TD>
<TD>None</TD>
<TD>Low</TD>
</TR>
<TR>
<TD>texttops</TD>
<TD>638k</TD>
<TD>4*cols*rows</TD>
<TD>None</TD>
<TD>Low</TD>
</TR>
</TABLE></CENTER>
<H1>Scheduler Objects</H1>
<P>The <CODE>cupsd</CODE> program is the CUPS scheduler process. It manages
many interdependent server objects that are used to manage and print files
to printers.
<P>The following table provides the memory and disk cost associated with each
server object.
<CENTER><TABLE WIDTH="80%" BORDER="1">
<TR>
<TH>Object</TH>
<TH>Memory Per</TH>
<TH>Disk Per</TH>
</TR>
<TR>
<TD>Browse ACL</TD>
<TD>1k</TD>
<TD>120</TD>
</TR>
<TR>
<TD>Browse Poll</TD>
<TD>24</TD>
<TD>80</TD>
</TR>
<TR>
<TD>Browse Relay</TD>
<TD>28</TD>
<TD>80</TD>
</TR>
<TR>
<TD>Certificate</TD>
<TD>76</TD>
<TD>32</TD>
</TR>
<TR>
<TD>Class</TD>
<TD>9k</TD>
<TD>200</TD>
</TR>
<TR>
<TD>Client</TD>
<TD>13k</TD>
<TD>-</TD>
</TR>
<TR>
<TD>Device</TD>
<TD>256</TD>
<TD>-</TD>
</TR>
<TR>
<TD>Job</TD>
<TD>2k</TD>
<TD>1k + size of document files</TD>
</TR>
<TR>
<TD>Location ACL</TD>
<TD>1k</TD>
<TD>120</TD>
</TR>
<TR>
<TD>MIME Filter</TD>
<TD>268</TD>
<TD>80</TD>
</TR>
<TR>
<TD>MIME Type</TD>
<TD>340</TD>
<TD>80</TD>
</TR>
<TR>
<TD>PPD</TD>
<TD>200</TD>
<TD>656</TD>
</TR>
<TR>
<TD>Printer</TD>
<TD>11k</TD>
<TD>32k</TD>
</TR>
</TABLE></CENTER>
<EMBED SRC="glossary.shtml">
</BODY>
</HTML>
+2 -2
Ver Arquivo
@@ -92,14 +92,14 @@ sections:</P>
<UL>
<LI>CUPS-CMP-1.1: CUPS Configuration Management Plan </LI>
<LI>CUPS-IDD-1.1: CUPS System Interface Design Description </LI>
<LI>CUPS-IPP-1.1: CUPS Implementation of IPP </LI>
<LI>CUPS-IPP-1.1: CUPS Implmentation of IPP </LI>
<LI>CUPS-SAM-1.1.x: CUPS Software Administrators Manual </LI>
<LI>CUPS-SDD-1.1: CUPS Software Design Description </LI>
<LI>CUPS-SPM-1.1.x: CUPS Software Programming Manual </LI>
<LI>CUPS-SSR-1.1: CUPS Software Security Report </LI>
<LI>CUPS-STP-1.1: CUPS Software Test Plan </LI>
<LI>CUPS-SUM-1.1.x: CUPS Software Users Manual </LI>
<LI>CUPS-SVD-1.1: CUPS Software Version Description </LI>
<LI>CUPS-SVD-1.1.x: CUPS Software Version Description </LI>
</UL>
<H2><A NAME="2_2">2.2 Other Documents</A></H2>
<P>The following non-CUPS documents are referenced by this document: </P>
BIN
Ver Arquivo
Arquivo binário não exibido.
+2 -2
Ver Arquivo
@@ -86,14 +86,14 @@ EPSON printers are included that use these filters. </P>
<UL>
<LI>CUPS-CMP-1.1: CUPS Configuration Management Plan </LI>
<LI>CUPS-IDD-1.1: CUPS System Interface Design Description </LI>
<LI>CUPS-IPP-1.1: CUPS Implementation of IPP </LI>
<LI>CUPS-IPP-1.1: CUPS Implmentation of IPP </LI>
<LI>CUPS-SAM-1.1.x: CUPS Software Administrators Manual </LI>
<LI>CUPS-SDD-1.1: CUPS Software Design Description </LI>
<LI>CUPS-SPM-1.1.x: CUPS Software Programming Manual </LI>
<LI>CUPS-SSR-1.1: CUPS Software Security Report </LI>
<LI>CUPS-STP-1.1: CUPS Software Test Plan </LI>
<LI>CUPS-SUM-1.1.x: CUPS Software Users Manual </LI>
<LI>CUPS-SVD-1.1: CUPS Software Version Description </LI>
<LI>CUPS-SVD-1.1.x: CUPS Software Version Description </LI>
</UL>
<H2><A NAME="2_2">2.2 Other Documents</A></H2>
<P>The following non-CUPS documents are referenced by this document: </P>
BIN
Ver Arquivo
Arquivo binário não exibido.
+1389 -1825
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+791 -748
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+2 -2
Ver Arquivo
@@ -2,7 +2,7 @@
<HEAD>
<META NAME="Description" CONTENT="Common UNIX Printing System Software Users Manual">
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-2000, All Rights Reserved">
<META NAME="DOCNUMBER" CONTENT="CUPS-SUM-1.1.5">
<META NAME="DOCNUMBER" CONTENT="CUPS-SUM-1.1">
<META NAME="Author" CONTENT="Easy Software Products">
<TITLE>CUPS Software Users Manual</TITLE>
</HEAD>
@@ -11,7 +11,7 @@
<H1 ALIGN="RIGHT">Preface</H1>
<P>This software users manual describes how to use the Common UNIX Printing
System<SUP>TM</SUP> ("CUPS<SUP>TM</SUP>") Version 1.1.5.
System<SUP>TM</SUP> ("CUPS<SUP>TM</SUP>") Version 1.1.
<EMBED SRC="system-overview.shtml">
+2 -2
Ver Arquivo
@@ -110,14 +110,14 @@ following sections:</P>
<UL>
<LI>CUPS-CMP-1.1: CUPS Configuration Management Plan </LI>
<LI>CUPS-IDD-1.1: CUPS System Interface Design Description </LI>
<LI>CUPS-IPP-1.1: CUPS Implementation of IPP </LI>
<LI>CUPS-IPP-1.1: CUPS Implmentation of IPP </LI>
<LI>CUPS-SAM-1.1.x: CUPS Software Administrators Manual </LI>
<LI>CUPS-SDD-1.1: CUPS Software Design Description </LI>
<LI>CUPS-SPM-1.1.x: CUPS Software Programming Manual </LI>
<LI>CUPS-SSR-1.1: CUPS Software Security Report </LI>
<LI>CUPS-STP-1.1: CUPS Software Test Plan </LI>
<LI>CUPS-SUM-1.1.x: CUPS Software Users Manual </LI>
<LI>CUPS-SVD-1.1: CUPS Software Version Description </LI>
<LI>CUPS-SVD-1.1.x: CUPS Software Version Description </LI>
</UL>
<H2><A NAME="2_2">2.2 Other Documents</A></H2>
<P>The following non-CUPS documents are referenced by this document: </P>
+66 -66
Ver Arquivo
@@ -1,6 +1,6 @@
%PDF-1.2
%âãÏÓ
1 0 obj<</Producer(htmldoc 1.8.8 Copyright 1997-2000 Easy Software Products, All Rights Reserved.)/CreationDate(D:20000824182343Z)/Title( CUPS Software Version Description)/Author(Easy Software Products)>>endobj
1 0 obj<</Producer(htmldoc 1.8.8 Copyright 1997-2000 Easy Software Products, All Rights Reserved.)/CreationDate(D:20000710174146Z)/Title( CUPS Software Version Description)/Author(Easy Software Products)>>endobj
2 0 obj<</Type/Encoding/Differences[ 32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/minus/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 128/Euro 130/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE 145/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe 159/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]>>endobj
3 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding 2 0 R>>endobj
4 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier-Bold/Encoding 2 0 R>>endobj
@@ -229,12 +229,12 @@ endobj
xÚµ˜KSãH Çï|
ÙªÄãGâ7 À°5Ylæ´ãt‚·b;k;ÅðíGêöCYB;¶¨
ÕÉÏjEú·¤Î¿'˜øggƒãB’\D'ß®°Mˆ–ø‰ëù-NmxKQŠ<ÕÑ?±<…Œ‰aKȰàòq¬H¶™Èë¸N‹\á°¬·=Ã%<z°,Öëâ%ÍWêÁÒ
Êv×<½BýŒoµÌ™2œ4†mÛ®1!ÛÛ®»;ŸÒãËûùØ2¬3µße‘/ÓÕ¶TûÝÇy¼dæë8ßµŽ[Žúžï¿Í˜ñðµªE·y-Êeœ˜‰*]åô/)ÓMm1çþßf›µèV,?ÿ¸ÑðüžŒ¿ZÏ‹eýÎYš§U*ÊŠ´×GØßKký+âÎßq}^«2Î2ÒÖÑ~‡ûüE²-ÓúÏĦ(ë#ìFó}v#Q«¼ðñ0<Vâ3‰û¹7q?Ñ&éíMæÚ¢0V§Ñ±Õi´qñ£~eWª«B^äãÊP9ðé²p˜†‰¥^,zy¸Áh˜àø:’ëc5S5„{hd¸™oøZܲ\ÎOyFdXŽížÈÛ¶áéyF ?õ0NZž8¶9à'w­p:SßpzÞ›ìØ¿x“¯r½~°u9þD è|Q<áñ/ª:”âÄJR æj…ët-àº(³¸†p#’t™&²†Ž:qO Ç ©ôûšÝ¾­ºÆzùöiÔ器ÄV]r¡SWC7êÒàºZÞ¥§åÙ·lн†çòN`Lõ<#÷(7=@6=KØ7Ù¼‹óÕÛt?Œ zNË\-RÊà±Icµ›èüY<Aœ/:ù„¢†¡f…êCµí}“eô*OŠÕ52•q^}¸t¶ºÞOþf.Äqvî‹…XK‡B‘Åy&|9Â͉ÌùT
@.öK„ø^÷è~štÌœTmmÒŸŽgò¾¬t~#`üú6§Jß×—ø®Œà.ÍE_«b‘a Â!¦.býåuÈ,d,©…&K--“ £€Q´­œ”¥c¢åAUn‚Q×òŒ@Þ£šªåAYøÏ ê¡äs'øÃª±[e˜TcO]oÔÎÐ7E¼®pn*ñ «G.šÎGåæÿÓFÌìt$:5´’‰†fæ ÇH=Î Ò‘7à 'HGže-ÏšÅ\Œ’ŽçéÈ°Ï ê®Rµ:žÈ»4ÝjyF ïOâÉ šõ¨÷÷ü¦R²iÆk!%Š7ër›Ô[œåñÒJoômH/ÖÓ΄^柵KÃg+j¹Ð‰º¡•f54¨8ç‰Ô§”ëxF ÐÝKË3‚DJºŽç]0’¬Žg‰¨ã;5|&#l‘÷ñfCy~õ‹9ÜÍgR18Ët¹¯¾¾ÆM-y'QÙ– Ze[C3€jœCCƒs‚zÙ ïqÞ¶†xN¨ôêÝç¥×¡ôvüéÚê¾&ÓëZâx]‹_µq¼ï²
ã1|"9²~}‚¿YÕB—à†VùÓÐ  ‘Õ£ipNÐê8à 5¬xZžªÉèýáDÖœF-Ïn\ªF€ œ ‰Q8ÜPÆá|‹Åž®%²‡œÁE\¥‰<ö³tE¿˜'‰¨ª÷ºÅîãª3ø­RpÛq·ïãžø&~“>rýuòHÒU'endstream
Êv×<½BýŒoµÌ™2œ4†mÛ®1!ÛÛ®»;ŸÒãËûùØ2¬3µße‘/ÓÕ¶TûÝÇy¼dæë8ßµŽ[Žúžï¿Í˜ñðµªE·y-Êeœ˜‰*]åô/)ÓMm1çþßf›u¯b øñÇm†ç÷dÓøÕ:^,ë—¸p¾ÈÒ<­jŒOQVŸm¼>ÂþnXZë_ŽpþŽëó²X•q–‘´Žö;|Øçw(’m™Ö¯x$6EYa7šï³‰êXá…ï„ᱟIÜÏÙ~³?Ñ*)îMîÚª0VÇѱÕq´qñ£~eWªËB^äãÒP9ðéºp˜†‰µ^,zy¸Á
h˜àø:’ëc9S5„{hd¸™oøZܲ\ÎOyFdXížÈÛ¶áéyF ?õ0NZž8¶9à'w­p:SßpzÞ›ìØ¿x“¯r½~°w9þD è|Q<a(ª:”âÄZR æj…ët-àº(³¸†p#’t™&²ŠŽ:qO Ç ©ôûšÝ¾­ºÆzùö iÔ器ÄV]r¡SWC7êÒàºZÞ¥§åÙ·lн†çòN`Lõ<#÷(7=@6=KØ7Ù¼‹óÕût?‘Œ zNË\-RÊà±IcÕÛèüY<Aœ/:ù„¢†¡†…êCÕí}“ÿ*OŠÕ52•q^}¸…t¶¨ùËi…JüÍ6]ˆãìÜ ±–…"‹ó:Mør…›™ó©€\ì—2ð½îÑý4è<˜8'¨ÚÚ¤?Ïä}Yu<#èüFÀøômN•¾®/ñ]/Á]š‹¾VÅ"ÄcL]$ÅúËëXÈ6YR M–ZZ&AG3£h[8'(KÆDË3‚ªÜ£®å¼G5UË3‚²:ðŸÔC)þZžÈæNð‡Uc¶Ê0©ÆžºÞ¨¢oŠx]áÜTâAVWŽ\4ÊÍÿ§#Œ˜ÙéH.t:jh% ÍÌŽ‘zœ¤#oÀNŽ<ËZž4‹¹%Ï Ò‘?`ŸÔ]¥ju<#wiºÕòŒ@ÞŸÄ“4ëQïïùL¥þdÓŒ×BJoÖå6©·8Ë㵕ÞèÛ^¬§ ½Ì?#j—†ÏVÔr¡uC+ÍjhPq©O)×ñŒ@> »—–g‰”tÏ º`$YÏ- "wjøLFØ"ïã͆òü$ê!r¸›Ï¤bp–ér_}}›ZòN¢²-:94´Ê¶†fÕ8‡*†çõ²AÞã¼m ñœPéÕ»Ï J¯CéíøÒ;µÕ}M¦×µÜ|Åñº¿j5ãxßeÆcøErdýú;~?²ª….Á ­ò§¡@#«GÒàœ Ôp†jXñ´<'T“Ñûɬ94ܸTA8A?£ p¸¡ŒÃù=]Kd9ƒ‹¸JyìgéŠ~3;OQUïu‹ÝÇUgð[¥à¶ãnßÿþÈ=ñMü
&}ä4úëä7ö2Uhendstream
endobj
120 0 obj
1328
1330
endobj
121 0 obj<</Type/Page/Parent 105 0 R/Contents 122 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 8 0 R>>>>>>endobj
122 0 obj<</Length 123 0 R/Filter/FlateDecode>>stream
@@ -478,67 +478,67 @@ xref
0000018734 00000 n
0000018755 00000 n
0000018910 00000 n
0000020309 00000 n
0000020331 00000 n
0000020444 00000 n
0000020635 00000 n
0000020656 00000 n
0000020805 00000 n
0000021776 00000 n
0000021797 00000 n
0000021937 00000 n
0000022492 00000 n
0000022513 00000 n
0000022662 00000 n
0000023939 00000 n
0000023961 00000 n
0000024074 00000 n
0000024263 00000 n
0000024284 00000 n
0000024424 00000 n
0000025091 00000 n
0000025112 00000 n
0000025225 00000 n
0000025416 00000 n
0000025437 00000 n
0000025591 00000 n
0000027185 00000 n
0000027207 00000 n
0000027320 00000 n
0000027491 00000 n
0000027512 00000 n
0000027567 00000 n
0000027672 00000 n
0000027816 00000 n
0000027922 00000 n
0000028042 00000 n
0000028151 00000 n
0000028300 00000 n
0000028410 00000 n
0000028517 00000 n
0000028665 00000 n
0000028800 00000 n
0000028918 00000 n
0000029032 00000 n
0000029149 00000 n
0000029256 00000 n
0000029394 00000 n
0000029542 00000 n
0000029644 00000 n
0000029748 00000 n
0000029897 00000 n
0000030000 00000 n
0000030113 00000 n
0000030213 00000 n
0000030323 00000 n
0000030469 00000 n
0000030580 00000 n
0000030690 00000 n
0000030824 00000 n
0000030921 00000 n
0000031021 00000 n
0000020311 00000 n
0000020333 00000 n
0000020446 00000 n
0000020637 00000 n
0000020658 00000 n
0000020807 00000 n
0000021778 00000 n
0000021799 00000 n
0000021939 00000 n
0000022494 00000 n
0000022515 00000 n
0000022664 00000 n
0000023941 00000 n
0000023963 00000 n
0000024076 00000 n
0000024265 00000 n
0000024286 00000 n
0000024426 00000 n
0000025093 00000 n
0000025114 00000 n
0000025227 00000 n
0000025418 00000 n
0000025439 00000 n
0000025593 00000 n
0000027187 00000 n
0000027209 00000 n
0000027322 00000 n
0000027493 00000 n
0000027514 00000 n
0000027569 00000 n
0000027674 00000 n
0000027818 00000 n
0000027924 00000 n
0000028044 00000 n
0000028153 00000 n
0000028302 00000 n
0000028412 00000 n
0000028519 00000 n
0000028667 00000 n
0000028802 00000 n
0000028920 00000 n
0000029034 00000 n
0000029151 00000 n
0000029258 00000 n
0000029396 00000 n
0000029544 00000 n
0000029646 00000 n
0000029750 00000 n
0000029899 00000 n
0000030002 00000 n
0000030115 00000 n
0000030215 00000 n
0000030325 00000 n
0000030471 00000 n
0000030582 00000 n
0000030692 00000 n
0000030826 00000 n
0000030923 00000 n
0000031023 00000 n
trailer
<</Size 179/Root 178 0 R/Info 1 0 R/ID[<7c81fc334a74b7e117b3327dd928e447><7c81fc334a74b7e117b3327dd928e447>]>>
<</Size 179/Root 178 0 R/Info 1 0 R/ID[<93f5656e8149df39d50a4df79ce11b4c><93f5656e8149df39d50a4df79ce11b4c>]>>
startxref
31248
31250
%%EOF
+4 -4
Ver Arquivo
@@ -51,7 +51,7 @@ all: $(TARGETS)
#
clean:
$(RM) $(OBJS) $(TARGETS) $(LIBCUPSIMAGE) `basename $(LIBCUPSIMAGE) .2`
$(RM) $(OBJS) $(TARGETS) $(LIBCUPSIMAGE)
#
@@ -69,10 +69,10 @@ install:
$(INSTALL_DATA) raster.h $(INCLUDEDIR)/cups
-$(MKDIR) $(LIBDIR)
$(CHMOD) ugo+rx $(LIBDIR)
$(INSTALL_LIB) $(LIBCUPSIMAGE) $(LIBDIR)
$(INSTALL_DATA) $(LIBCUPSIMAGE) $(LIBDIR)
-if test $(LIBCUPSIMAGE) != "libcupsimage.a" -a $(LIBCUPSIMAGE) != "libcupsimage.la"; then \
$(RM) $(LIBDIR)/`basename $(LIBCUPSIMAGE) .2`; \
$(LN) $(LIBCUPSIMAGE) $(LIBDIR)/`basename $(LIBCUPSIMAGE) .2`; \
$(RM) `basename $(LIBCUPSIMAGE) .2`; \
$(LN) $(LIBCUPSIMAGE) `basename $(LIBCUPSIMAGE) .2`; \
fi
+4 -4
Ver Arquivo
@@ -153,13 +153,13 @@ SetCommonOptions(int num_options, /* I - Number of options */
PageBottom = (float)atof(val);
break;
case 1 :
PageLeft = (float)atof(val);
PageRight = PageWidth - (float)atof(val);
break;
case 2 :
PageTop = PageLength - (float)atof(val);
break;
case 3 :
PageRight = PageWidth - (float)atof(val);
PageLeft = (float)atof(val);
break;
}
}
@@ -172,13 +172,13 @@ SetCommonOptions(int num_options, /* I - Number of options */
PageTop = PageLength - (float)atof(val);
break;
case 1 :
PageRight = PageWidth - (float)atof(val);
PageLeft = (float)atof(val);
break;
case 2 :
PageBottom = (float)atof(val);
break;
case 3 :
PageLeft = (float)atof(val);
PageRight = PageWidth - (float)atof(val);
break;
}
}
-6
Ver Arquivo
@@ -237,7 +237,6 @@ PC_pen_color(int num_params, /* I - Number of parameters */
{ 0.0, 1.0, 1.0 } /* Cyan */
};
if (num_params == 0)
{
for (i = 0; i <= PenCount; i ++)
@@ -277,11 +276,6 @@ PC_pen_color(int num_params, /* I - Number of parameters */
(ColorRange[1][1] - ColorRange[1][0]);
Pens[i].rgb[2] = (params[3].value.number - ColorRange[2][0]) /
(ColorRange[2][1] - ColorRange[2][0]);
fprintf(stderr, "DEBUG: Pen %d %.0f %.0f %.0f = %.3f %.3f %.3f\n",
i, params[1].value.number, params[2].value.number,
params[3].value.number, Pens[i].rgb[0], Pens[i].rgb[1],
Pens[i].rgb[2]);
}
if (PageDirty && i == PenNumber)
+1 -1
Ver Arquivo
@@ -319,7 +319,7 @@ LB_label(int num_params, /* I - Number of parameters */
Pens[CharPen].rgb[CharPen], Pens[CharPen].rgb[2],
Pens[CharPen].width * PenScaling);
Outputf("%.3f %.3f %.3f %.2f SP\n", Pens[PenNumber].rgb[0],
Pens[PenNumber].rgb[1], Pens[PenNumber].rgb[2],
Pens[PenNumber].rgb[PenNumber], Pens[PenNumber].rgb[2],
Pens[PenNumber].width * PenScaling);
}
+11 -14
Ver Arquivo
@@ -43,8 +43,6 @@
#include "hpgltops.h"
#define max(a,b) ((a) < (b) ? (b) : (a))
/*
* 'update_transform()' - Update the page transformation matrix as needed.
@@ -136,8 +134,8 @@ update_transform(void)
case 2 :
left = Scaling1[0];
bottom = Scaling1[1];
right = left + page_width * Scaling2[0] * 1016.0f / 72.0f;
top = bottom + page_height * Scaling2[1] * 1016.0f / 72.0f;
right = left + page_width * Scaling2[0];
top = bottom + page_height * Scaling2[1];
break;
}
@@ -157,7 +155,12 @@ update_transform(void)
scaling = page_width / height;
if (FitPlot)
scaling *= max(page_width, page_height) / max(PlotSize[1], PlotSize[0]);
{
if (Rotation == 0 || Rotation == 180)
scaling *= page_width / PlotSize[1];
else
scaling *= page_width / PlotSize[0];
}
/*
* Offset for the current P1 location...
@@ -226,9 +229,9 @@ update_transform(void)
if (FitPlot)
{
if (Rotation == 0 || Rotation == 180)
PenScaling = page_width / PlotSize[1];
PenScaling *= page_width / PlotSize[1];
else
PenScaling = page_width / PlotSize[0];
PenScaling *= page_width / PlotSize[0];
}
else
PenScaling = 1.0;
@@ -518,8 +521,6 @@ PS_plot_size(int num_params, /* I - Number of parameters */
PlotSize[0] = PageLength;
PlotSize[1] = PageWidth;
}
PlotSizeSet = 0;
break;
case 1 : /* PS length ; */
if (Rotation == 0 || Rotation == 180)
@@ -532,8 +533,6 @@ PS_plot_size(int num_params, /* I - Number of parameters */
PlotSize[0] = 72.0f * params[0].value.number / 1016.0f;
PlotSize[1] = 0.75f * PlotSize[0];
}
PlotSizeSet = 1;
break;
case 2 : /* PS length, width ; */
/*
@@ -541,7 +540,7 @@ PS_plot_size(int num_params, /* I - Number of parameters */
* sends a two-argument PS command as documented in the
* HP-GL/2 Reference Manual from HP. Instead, applications
* send the width before the length, which causes all sorts
* of problems when scaling.
* of problems.
*
* Rather than fight it, we now look for them as width,length
* instead of length,width.
@@ -560,8 +559,6 @@ PS_plot_size(int num_params, /* I - Number of parameters */
PlotSize[0] = 72.0f * params[1].value.number / 1016.0f;
PlotSize[1] = 72.0f * params[0].value.number / 1016.0f;
}
PlotSizeSet = 1;
break;
}
+1 -1
Ver Arquivo
@@ -153,7 +153,7 @@ Outputf(const char *format, /* I - Printf-style string */
landscape = 0;
if (!FitPlot && PlotSizeSet)
if (!FitPlot)
{
/*
* Set the page size for this page...
+1 -1
Ver Arquivo
@@ -387,7 +387,7 @@ PE_polyline_encoded(int num_params, /* I - Number of parameters */
PenNumber = (int)decode_number(&s, base_bits, 1.0);
if (PageDirty)
printf("%.3f %.3f %.3f %.2f SP\n", Pens[PenNumber].rgb[0],
Pens[PenNumber].rgb[1], Pens[PenNumber].rgb[2],
Pens[PenNumber].rgb[PenNumber], Pens[PenNumber].rgb[2],
Pens[PenNumber].width * PenScaling);
#ifdef DEBUG
-1
Ver Arquivo
@@ -122,7 +122,6 @@ VAR int PenMotion VALUE(0), /* 0 = absolute, 1 = relative */
WidthUnits VALUE(0); /* 0 = mm, 1 = proportionate */
VAR float PlotSize[2] VALUE2(2592.0f, 3456.0f);
/* Plot size */
VAR int PlotSizeSet VALUE(0); /* Plot size set? */
VAR int CharFillMode VALUE(0), /* Where to draw labels */
CharPen VALUE(0), /* Pen to use for labels */
CharFont VALUE(0); /* Font to use for labels */
+2 -2
Ver Arquivo
@@ -169,7 +169,7 @@ ImageReadBMP(image_t *img, /* IO - Image */
switch (depth)
{
case 1 : /* Bitmap */
for (x = img->xsize, bit = 128, byte = 0; x > 0; x --)
for (x = img->xsize, bit = 128; x > 0; x --)
{
if (bit == 128)
byte = getc(fp);
@@ -202,7 +202,7 @@ ImageReadBMP(image_t *img, /* IO - Image */
break;
case 4 : /* 16-color */
for (x = img->xsize, bit = 0xf0, temp = 0; x > 0; x --)
for (x = img->xsize, bit = 0xf0; x > 0; x --)
{
/*
* Get a new count as needed...

Alguns arquivos não foram exibidos porque demasiados arquivos foram alterados neste diff Mostrar Mais