Comparar commits

..

1 Commits

Autor SHA1 Mensagem Data
msweet 53b898e28b Import cups.org releases
git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/tags/release-1.0b5@4306 a1ca3aef-8c08-0410-bb20-df032aa958be
2013-05-10 18:56:23 +00:00
231 arquivos alterados com 18223 adições e 5330 exclusões
+337 -220
Ver Arquivo
@@ -5,265 +5,382 @@
<BODY BGCOLOR=#ffffff>
<H1 ALIGN=CENTER><FONT FACE="Arial,HELVETICA">Aladdin Free Public License</FONT></H1>
<H2 ALIGN="CENTER">Common UNIX Printing System License Agreement</H2>
<P ALIGN=CENTER>(Version 6, June 17, 1997)</P>
<P ALIGN="CENTER">Copyright 1997-1999 by Easy Software Products<BR>
44141 AIRPORT VIEW DR STE 204<BR>
HOLLYWOOD, MARYLAND 20636-3111 USA<BR>
<BR>
Voice: +1.301.373.9603<BR>
Email: cups-info@cups.org<BR>
WWW: http://www.cups.org
<P ALIGN=CENTER>Copyright &copy; 1994, 1995, 1997 Aladdin Enterprises,<BR><BR>
Menlo Park, California, U.S.A. All rights reserved.</P>
<H3>Introduction</H3>
<BLOCKQUOTE>
NOTE: This License is not the same as any of the GNU Licenses published
by the Free Software Foundation. Its terms are substantially different
from those of the GNU Licenses. If you are familiar with the GNU
Licenses, please read this license with extra care.
<P>The Common UNIX Printing System<SUP>TM</SUP>, or CUPS<SUP>TM</SUP>,
is provided under the GNU General Public License, Version 2. A copy of
this license follows this introduction.
<P>For those not familiar with the GNU General Public License, the license
basically allows you to:
<UL>
<LI>Use the CUPS software at no charge.
<LI>Distribute verbatim copies of the software in source or
binary form.
<LI>Sell verbatim copies of the software for a media fee, or
sell support for the software.
<LI>Distribute or sell printer drivers and filters that use the
CUPS API so long as source code is made available under the GPL.
</UL>
<P>What this license <B>does not</B> allow you to do is make changes or
add features to CUPS and then sell a binary distribution without source
code. You have to provide source for any new drivers, changes, or
additions to the software, and all code must be provided under the GPL.
<P>Also, since we have trademarked the Common UNIX Printing System, CUPS,
and CUPS logo, you may not release a derivative product using those names
without permission from Easy Software Products.
<H3>Binary Distribution Rights</H3>
<P>Easy Software Products also sells rights to the CUPS source code
under a binary distribution license for vendors that are unable to
release source code for their drivers or additions and modifications to
CUPS under the GPL. For pricing information please contact us at the
address shown above.
<P>The Common UNIX Printing System utilizes GNU GhostScript 4.03 to
convert PostScript files into a stream of raster images. For binary
distribution licensing of this software, please contact:
<BLOCKQUOTE>Miles Jones<BR>
Director of Marketing<BR>
Artifex Software Inc.<BR>
454 Las Gallinas Ave., Suite 108<BR>
San Rafael, CA 94903 USA<BR>
Voice: +1.415.492.9861<BR>
Fax: +1.415.492.9862<BR>
EMail: info@arsoft.com
</BLOCKQUOTE>
<P>Aladdin Enterprises hereby grants to anyone the permission to apply
this License to their own work, as long as the entire License
(including the above notices and this paragraph) is copied with no
changes, additions, or deletions except for changing the first
paragraph of Section 0 to include a suitable description of the work to
which the license is being applied and of the person or entity that
holds the copyright in the work, and, if the License is being applied
to a work created in a country other than the United States, replacing
the first paragraph of Section 6 with an appropriate reference to the
laws of the appropriate country.</P>
<H3>Support</H3>
<H2><FONT FACE="Arial,HELVETICA">0. Subject Matter</FONT></H2>
<P>Easy Software Products sells software support for distributors and
resellers of CUPS. Support for users of CUPS is available from Easy
Software Products through our ESP Print software.
This License applies to the Common UNIX Printing System ("PROGRAM").
The Common UNIX Printing System is a copyrighted work whose copyright
is held by Easy Software Products (the "LICENSOR"). The Common UNIX
Printing System, CUPS, and the CUPS logo are the trademark property of
Easy Software Products.
<H3>Trademarks</H3>
<P>A "work based on the PROGRAM" means either the PROGRAM or any
derivative work of the PROGRAM, as defined in the United States
Copyright Act of 1976, such as a translation or a modification.
<P>The Common UNIX Printing System, CUPS, and the CUPS logo are the
trademark property of Easy Software Products. Any derivative of this
software may not use any of these trademarks without the expressed
written consent of Easy Software Products.
<P>BY MODIFYING OR DISTRIBUTING THE PROGRAM (OR ANY WORK BASED ON THE
PROGRAM), YOU INDICATE YOUR ACCEPTANCE OF THIS LICENSE TO DO SO, AND
ALL ITS TERMS AND CONDITIONS FOR COPYING, DISTRIBUTING OR MODIFYING THE
PROGRAM OR WORKS BASED ON IT. NOTHING OTHER THAN THIS LICENSE GRANTS
YOU PERMISSION TO MODIFY OR DISTRIBUTE THE PROGRAM OR ITS DERIVATIVE
WORKS. THESE ACTIONS ARE PROHIBITED BY LAW. IF YOU DO NOT ACCEPT THESE
TERMS AND CONDITIONS, DO NOT MODIFY OR DISTRIBUTE THE PROGRAM.
<H2 ALIGN="CENTER">GNU General Public License</H2>
<H2><FONT FACE="Arial,HELVETICA">1. Licenses</FONT></H2>
<P ALIGN="CENTER">Version 2, June 1991<BR>
<BR>
Copyright 1989, 1991 Free Software Foundation, Inc.<BR>
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
LICENSOR hereby grants you the following rights, provided that you comply
with all of the restrictions set forth in this License and provided,
further, that you distribute an unmodified copy of this License with the
PROGRAM:
<P ALIGN="CENTER">Everyone is permitted to copy and distribute verbatim
copies of this license document, but changing it is not allowed.
<OL TYPE=a>
<H3>Preamble</H3>
<LI>You may copy and distribute literal (i.e., verbatim) copies
of the PROGRAM's source code as you receive it throughout the
world, in any medium.<BR><BR>
<P>The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
<LI>You may modify the PROGRAM, create works based on the
PROGRAM and distribute copies of such throughout the world, in
any medium.<BR><BR>
<P>When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
<P>To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
<P>For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
<P>We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
<P>Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
<P>Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
<P>The precise terms and conditions for copying, distribution and
modification follow.
<H3>GNU GENERAL PUBLIC LICENSE<BR>
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</H3>
<OL START="0">
<LI>This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
<P>Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
<LI>You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
<P>You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
<LI>You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
<OL TYPE="a">
<LI>You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
<LI>You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
<LI>if the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
</OL>
<H2><FONT FACE="Arial,HELVETICA">2. Restrictions</FONT></H2>
<P>These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
This license is subject to the following restrictions:
<P>Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
<OL TYPE=a>
<P>In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
<LI>Distribution of the PROGRAM or any work based on the
PROGRAM by a commercial organization to any third party is
prohibited if any payment is made in connection with such
distribution, whether directly (as in payment for a copy of the
PROGRAM) or indirectly (as in payment for some service related
to the PROGRAM, or payment for some product or service that
includes a copy of the PROGRAM "without charge"; these are only
examples, and not an exhaustive enumeration of prohibited
activities). The following methods of distribution involving
payment shall not in and of themselves be a violation of this
restriction:<BR><BR>
<LI>You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
<OL TYPE=i>
<OL TYPE="a">
<LI>Posting the PROGRAM on a public access information
storage and retrieval service for which a fee is
received for retrieving information (such as an on-line
service), provided that the fee is not
content-dependent (i.e., the fee would be the same for
retrieving the same volume of information consisting of
random data) and that access to the service and to the
PROGRAM is available independent of any other product
or service. An example of a service that does not fall
under this section is an on-line service that is
operated by a company and that is only available to
customers of that company. (This is not an exhaustive
enumeration.)<BR><BR>
<LI>Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
<LI>Distributing the PROGRAM on removable
computer-readable media, provided that the files
containing the PROGRAM are reproduced entirely and
verbatim on such media, that all information on such
media be redistributable for non-commercial purposes
without charge, and that such media are distributed by
themselves (except for accompanying documentation)
independent of any other product or service. Examples
of such media include CD-ROM, magnetic tape, and
optical storage media. (This is not intended to be an
exhaustive list.) An example of a distribution that
does not fall under this section is a CD-ROM included
in a book or magazine. (This is not an exhaustive
enumeration.)<BR><BR>
<LI>Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
</OL>
<LI>Activities other than copying, distribution and
modification of the PROGRAM are not subject to this License and
they are outside its scope. Functional use (running) of the
PROGRAM is not restricted, and any output produced through the
use of the PROGRAM is subject to this license only if its
contents constitute a work based on the PROGRAM (independent of
having been made by running the PROGRAM).<BR><BR>
<LI>You must meet all of the following conditions with respect to any work
that you distribute or publish that in whole or in part contains or is
derived from the PROGRAM or any part thereof ("the Work"):<BR><BR>
<OL TYPE=i>
<LI>If you have modified the PROGRAM, you must cause
the Work to carry prominent notices stating that you
have modified the PROGRAM's files and the date of any
change;<BR><BR>
<LI>You must cause the Work to be licensed as a whole
and at no charge to all third parties under the terms
of this License;<BR><BR>
<LI>If the Work normally reads commands interactively
when run, you must cause it, at each time the Work
commences operation, to print or display an
announcement including an appropriate copyright notice
and a notice that there is no warranty (or else, saying
that you provide a warranty). Such notice must also
state that users may redistribute the Work only under
the conditions of this License and tell the user how to
view the copy of this License included with the Work.
(Exceptions: if the PROGRAM is interactive but normally
prints or displays such an announcement only at the
request of a user, such as in an "About box", the Work
is required to print or display the notice only under
the same circumstances; if the PROGRAM itself is
interactive but does not normally print such an
announcement, the Work is not required to print an
announcement.);<BR><BR>
<LI>You must accompany the Work with the complete
corresponding machine-readable source code, delivered
on a medium customarily used for software interchange.
The source code for a work means the preferred form of
the work for making modifications to it. For an
executable work, complete source code means all the
source code for all modules it contains, plus any
associated interface definition files, plus the scripts
used to control compilation and installation of the
executable code. If you distribute with the Work any
component that is normally distributed (in either
source or binary form) with the major components
(compiler, kernel, and so on) of the operating system
on which the executable runs, you must also distribute
the source code of that component if you have it and
are allowed to do so;<BR><BR>
<LI>If you distribute any written or printed material
at all with the Work, such material must include either
a written copy of this License, or a prominent written
indication that the Work is covered by this License and
written instructions for printing and/or displaying the
copy of the License on the distribution medium;<BR><BR>
<LI>You may not impose any further restrictions on the
recipient's exercise of the rights granted herein.<BR><BR>
</OL>
<LI>Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
</OL>
If distribution of executable or object code is made by offering the
equivalent ability to copy from a designated place, then offering
equivalent ability to copy the source code from the same place counts
as distribution of the source code, even though third parties are not
compelled to copy the source code along with the object code.
<P>The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
<H2><FONT FACE="Arial,HELVETICA">3. Reservation of Rights</FONT></H2>
<P>If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
No rights are granted to the PROGRAM except as expressly set forth
herein. You may not copy, modify, sublicense, or distribute the PROGRAM
except as expressly provided under this License. Any attempt otherwise
to copy, modify, sublicense or distribute the PROGRAM is void, and will
automatically terminate your rights under this License. However,
parties who have received copies, or rights, from you under this
License will not have their licenses terminated so long as such parties
remain in full compliance.
<LI>You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
<H2><FONT FACE="Arial,HELVETICA">4. Other Restrictions</FONT></H2>
<LI>You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
If the distribution and/or use of the PROGRAM is restricted in certain
countries for any reason, LICENSOR may add an explicit geographical
distribution limitation excluding those countries, so that distribution
is permitted only in or among countries not thus excluded. In such
case, this License incorporates the limitation as if written in the
body of this License.
<LI>Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
<H2><FONT FACE="Arial,HELVETICA">5. Limitations</FONT></H2>
<LI>If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
THE PROGRAM IS PROVIDED TO YOU "AS IS", WITHOUT WARRANTY. THERE IS NO
WARRANTY FOR THE PROGRAM, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS
WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
<P>If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
<P>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL LICENSOR, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING
ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT
OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED
BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
THE POSSIBILITY OF SUCH DAMAGES.
<P>It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
<H2><FONT FACE="Arial,HELVETICA">6. General</FONT></H2>
<P>This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
This License is governed by the laws of the State of Maryland, U.S.A.,
excluding choice of law rules.
<LI>If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
<P>If any part of this License is found to be in conflict with the law,
that part shall be interpreted in its broadest meaning consistent with
the law, and no other parts of the License shall be affected.
<LI>The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
<P>For United States Government users, the PROGRAM is provided with
RESTRICTED RIGHTS. If you are a unit or agency of the United States
Government or are acquiring the Software for any such unit or agency,
the following apply:
<P>Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
<BLOCKQUOTE>
If the unit or agency is the Department of Defense ("DOD"), the
Software and its documentation are classified as "commercial computer
software" and "commercial computer software documentation" respectively
and, pursuant to DFAR Section 227.7202, the Government is acquiring the
Software and its documentation in accordance with the terms of this
License. If the unit or agency is other than DOD, the Software and its
documentation are classified as "commercial computer software" and
"commercial computer software documentation" respectively and, pursuant
to FAR Section 12.212, the Government is acquiring the Software and its
documentation in accordance with the terms of this License.
</BLOCKQUOTE>
<LI>If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
</OL>
<H3>NO WARRANTY</H3>
<OL START="11">
<LI>BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
<LI>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
</OL>
<H3>END OF TERMS AND CONDITIONS</H3>
</BODY>
</HTML>
+293 -184
Ver Arquivo
@@ -1,223 +1,332 @@
Aladdin Free Public License
Common UNIX Printing System License Agreement
(Version 6, June 17, 1997)
Copyright 1997-1999 by Easy Software Products
44141 AIRPORT VIEW DR STE 204
HOLLYWOOD, MARYLAND 20636-3111 USA
Copyright © 1994, 1995, 1997 Aladdin Enterprises,
Voice: +1.301.373.9603
Email: cups-info@cups.org
WWW: http://www.cups.org
Menlo Park, California, U.S.A. All rights reserved.
Introduction
NOTE: This License is not the same as any of the GNU Licenses
published by the Free Software Foundation. Its terms are
substantially different from those of the GNU Licenses. If you are
familiar with the GNU Licenses, please read this license with
extra care.
The Common UNIX Printing SystemTM, or CUPSTM, is provided under the GNU
General Public License, Version 2. A copy of this license follows this
introduction.
Aladdin Enterprises hereby grants to anyone the permission to apply this
License to their own work, as long as the entire License (including the
above notices and this paragraph) is copied with no changes, additions, or
deletions except for changing the first paragraph of Section 0 to include a
suitable description of the work to which the license is being applied and
of the person or entity that holds the copyright in the work, and, if the
License is being applied to a work created in a country other than the
United States, replacing the first paragraph of Section 6 with an
appropriate reference to the laws of the appropriate country.
For those not familiar with the GNU General Public License, the license
basically allows you to:
0. Subject Matter
* Use the CUPS software at no charge.
* Distribute verbatim copies of the software in source or binary form.
* Sell verbatim copies of the software for a media fee, or sell support
for the software.
* Distribute or sell printer drivers and filters that use the CUPS API so
long as source code is made available under the GPL.
This License applies to the Common UNIX Printing System ("PROGRAM"). The
Common UNIX Printing System is a copyrighted work whose copyright is held by
Easy Software Products (the "LICENSOR"). The Common UNIX Printing System,
CUPS, and the CUPS logo are the trademark property of Easy Software
Products.
What this license does not allow you to do is make changes or add features
to CUPS and then sell a binary distribution without source code. You have to
provide source for any new drivers, changes, or additions to the software,
and all code must be provided under the GPL.
A "work based on the PROGRAM" means either the PROGRAM or any derivative
work of the PROGRAM, as defined in the United States Copyright Act of 1976,
such as a translation or a modification.
Also, since we have trademarked the Common UNIX Printing System, CUPS, and
CUPS logo, you may not release a derivative product using those names
without permission from Easy Software Products.
BY MODIFYING OR DISTRIBUTING THE PROGRAM (OR ANY WORK BASED ON THE PROGRAM),
YOU INDICATE YOUR ACCEPTANCE OF THIS LICENSE TO DO SO, AND ALL ITS TERMS AND
CONDITIONS FOR COPYING, DISTRIBUTING OR MODIFYING THE PROGRAM OR WORKS BASED
ON IT. NOTHING OTHER THAN THIS LICENSE GRANTS YOU PERMISSION TO MODIFY OR
DISTRIBUTE THE PROGRAM OR ITS DERIVATIVE WORKS. THESE ACTIONS ARE PROHIBITED
BY LAW. IF YOU DO NOT ACCEPT THESE TERMS AND CONDITIONS, DO NOT MODIFY OR
DISTRIBUTE THE PROGRAM.
Binary Distribution Rights
1. Licenses
Easy Software Products also sells rights to the CUPS source code under a
binary distribution license for vendors that are unable to release source
code for their drivers or additions and modifications to CUPS under the GPL.
For pricing information please contact us at the address shown above.
LICENSOR hereby grants you the following rights, provided that you comply
with all of the restrictions set forth in this License and provided,
further, that you distribute an unmodified copy of this License with the
PROGRAM:
The Common UNIX Printing System utilizes GNU GhostScript 4.03 to convert
PostScript files into a stream of raster images. For binary distribution
licensing of this software, please contact:
a. You may copy and distribute literal (i.e., verbatim) copies of the
PROGRAM's source code as you receive it throughout the world, in any
medium.
Miles Jones
Director of Marketing
Artifex Software Inc.
454 Las Gallinas Ave., Suite 108
San Rafael, CA 94903 USA
Voice: +1.415.492.9861
Fax: +1.415.492.9862
EMail: info@arsoft.com
b. You may modify the PROGRAM, create works based on the PROGRAM and
distribute copies of such throughout the world, in any medium.
Support
2. Restrictions
Easy Software Products sells software support for distributors and resellers
of CUPS. Support for users of CUPS is available from Easy Software Products
through our ESP Print software.
This license is subject to the following restrictions:
Trademarks
a. Distribution of the PROGRAM or any work based on the PROGRAM by a
commercial organization to any third party is prohibited if any payment
is made in connection with such distribution, whether directly (as in
payment for a copy of the PROGRAM) or indirectly (as in payment for
some service related to the PROGRAM, or payment for some product or
service that includes a copy of the PROGRAM "without charge"; these are
only examples, and not an exhaustive enumeration of prohibited
activities). The following methods of distribution involving payment
shall not in and of themselves be a violation of this restriction:
The Common UNIX Printing System, CUPS, and the CUPS logo are the trademark
property of Easy Software Products. Any derivative of this software may not
use any of these trademarks without the expressed written consent of Easy
Software Products.
i. Posting the PROGRAM on a public access information storage and
retrieval service for which a fee is received for retrieving
information (such as an on-line service), provided that the fee is
not content-dependent (i.e., the fee would be the same for
retrieving the same volume of information consisting of random
data) and that access to the service and to the PROGRAM is
available independent of any other product or service. An example
of a service that does not fall under this section is an on-line
service that is operated by a company and that is only available
to customers of that company. (This is not an exhaustive
enumeration.)
GNU General Public License
ii. Distributing the PROGRAM on removable computer-readable media,
provided that the files containing the PROGRAM are reproduced
entirely and verbatim on such media, that all information on such
media be redistributable for non-commercial purposes without
charge, and that such media are distributed by themselves (except
for accompanying documentation) independent of any other product
or service. Examples of such media include CD-ROM, magnetic tape,
and optical storage media. (This is not intended to be an
exhaustive list.) An example of a distribution that does not fall
under this section is a CD-ROM included in a book or magazine.
(This is not an exhaustive enumeration.)
Version 2, June 1991
b. Activities other than copying, distribution and modification of the
PROGRAM are not subject to this License and they are outside its scope.
Functional use (running) of the PROGRAM is not restricted, and any
output produced through the use of the PROGRAM is subject to this
license only if its contents constitute a work based on the PROGRAM
(independent of having been made by running the PROGRAM).
Copyright 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
c. You must meet all of the following conditions with respect to any work
that you distribute or publish that in whole or in part contains or is
derived from the PROGRAM or any part thereof ("the Work"):
Everyone is permitted to copy and distribute verbatim copies of this license
document, but changing it is not allowed.
i. If you have modified the PROGRAM, you must cause the Work to carry
prominent notices stating that you have modified the PROGRAM's
files and the date of any change;
Preamble
ii. You must cause the Work to be licensed as a whole and at no charge
to all third parties under the terms of this License;
The licenses for most software are designed to take away your freedom to
share and change it. By contrast, the GNU General Public License is intended
to guarantee your freedom to share and change free software--to make sure
the software is free for all its users. This General Public License applies
to most of the Free Software Foundation's software and to any other program
whose authors commit to using it. (Some other Free Software Foundation
software is covered by the GNU Library General Public License instead.) You
can apply it to your programs, too.
iii. If the Work normally reads commands interactively when run, you
must cause it, at each time the Work commences operation, to print
or display an announcement including an appropriate copyright
notice and a notice that there is no warranty (or else, saying
that you provide a warranty). Such notice must also state that
users may redistribute the Work only under the conditions of this
License and tell the user how to view the copy of this License
included with the Work. (Exceptions: if the PROGRAM is interactive
but normally prints or displays such an announcement only at the
request of a user, such as in an "About box", the Work is required
to print or display the notice only under the same circumstances;
if the PROGRAM itself is interactive but does not normally print
such an announcement, the Work is not required to print an
announcement.);
When we speak of free software, we are referring to freedom, not price. Our
General Public Licenses are designed to make sure that you have the freedom
to distribute copies of free software (and charge for this service if you
wish), that you receive source code or can get it if you want it, that you
can change the software or use pieces of it in new free programs; and that
you know you can do these things.
iv. You must accompany the Work with the complete corresponding
machine-readable source code, delivered on a medium customarily
used for software interchange. The source code for a work means
the preferred form of the work for making modifications to it. For
an executable work, complete source code means all the source code
for all modules it contains, plus any associated interface
definition files, plus the scripts used to control compilation and
installation of the executable code. If you distribute with the
Work any component that is normally distributed (in either source
or binary form) with the major components (compiler, kernel, and
so on) of the operating system on which the executable runs, you
must also distribute the source code of that component if you have
it and are allowed to do so;
To protect your rights, we need to make restrictions that forbid anyone to
deny you these rights or to ask you to surrender the rights. These
restrictions translate to certain responsibilities for you if you distribute
copies of the software, or if you modify it.
v. If you distribute any written or printed material at all with the
Work, such material must include either a written copy of this
License, or a prominent written indication that the Work is
covered by this License and written instructions for printing
and/or displaying the copy of the License on the distribution
medium;
For example, if you distribute copies of such a program, whether gratis or
for a fee, you must give the recipients all the rights that you have. You
must make sure that they, too, receive or can get the source code. And you
must show them these terms so they know their rights.
vi. You may not impose any further restrictions on the recipient's
exercise of the rights granted herein.
We protect your rights with two steps: (1) copyright the software, and (2)
offer you this license which gives you legal permission to copy, distribute
and/or modify the software.
If distribution of executable or object code is made by offering the
equivalent ability to copy from a designated place, then offering equivalent
ability to copy the source code from the same place counts as distribution
of the source code, even though third parties are not compelled to copy the
source code along with the object code.
Also, for each author's protection and ours, we want to make certain that
everyone understands that there is no warranty for this free software. If
the software is modified by someone else and passed on, we want its
recipients to know that what they have is not the original, so that any
problems introduced by others will not reflect on the original authors'
reputations.
3. Reservation of Rights
Finally, any free program is threatened constantly by software patents. We
wish to avoid the danger that redistributors of a free program will
individually obtain patent licenses, in effect making the program
proprietary. To prevent this, we have made it clear that any patent must be
licensed for everyone's free use or not licensed at all.
No rights are granted to the PROGRAM except as expressly set forth herein.
You may not copy, modify, sublicense, or distribute the PROGRAM except as
expressly provided under this License. Any attempt otherwise to copy,
modify, sublicense or distribute the PROGRAM is void, and will automatically
terminate your rights under this License. However, parties who have received
copies, or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.
The precise terms and conditions for copying, distribution and modification
follow.
4. Other Restrictions
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
If the distribution and/or use of the PROGRAM is restricted in certain
countries for any reason, LICENSOR may add an explicit geographical
distribution limitation excluding those countries, so that distribution is
permitted only in or among countries not thus excluded. In such case, this
License incorporates the limitation as if written in the body of this
License.
1. This License applies to any program or other work which contains a
notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
5. Limitations
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of running
the Program is not restricted, and the output from the Program is
covered only if its contents constitute a work based on the Program
(independent of having been made by running the Program). Whether that
is true depends on what the Program does.
2. You may copy and distribute verbatim copies of the Program's source
code as you receive it, in any medium, provided that you conspicuously
and appropriately publish on each copy an appropriate copyright notice
and disclaimer of warranty; keep intact all the notices that refer to
this License and to the absence of any warranty; and give any other
recipients of the Program a copy of this License along with the
Program.
THE PROGRAM IS PROVIDED TO YOU "AS IS", WITHOUT WARRANTY. THERE IS NO
WARRANTY FOR THE PROGRAM, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE
RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD
THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
3. You may modify your copy or copies of the Program or any portion of it,
thus forming a work based on the Program, and copy and distribute such
modifications or work under the terms of Section 1 above, provided that
you also meet all of these conditions:
a. You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b. You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c. if the modified program normally reads commands interactively when
run, you must cause it, when started running for such interactive
use in the most ordinary way, to print or display an announcement
including an appropriate copyright notice and a notice that there
is no warranty (or else, saying that you provide a warranty) and
that users may redistribute the program under these conditions,
and telling the user how to view a copy of this License.
(Exception: if the Program itself is interactive but does not
normally print such an announcement, your work based on the
Program is not required to print an announcement.)
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
LICENSOR, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM
AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL,
SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR
DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES
OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.
6. General
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
This License is governed by the laws of the State of Maryland, U.S.A.,
excluding choice of law rules.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of a
storage or distribution medium does not bring the other work under the
scope of this License.
4. You may copy and distribute the Program (or a work based on it, under
Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a. Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software
interchange; or,
b. Accompany it with a written offer, valid for at least three years,
to give any third party, for a charge no more than your cost of
physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c. Accompany it with the information you received as to the offer to
distribute corresponding source code. (This alternative is allowed
only for noncommercial distribution and only if you received the
program in object code or executable form with such an offer, in
accord with Subsection b above.)
If any part of this License is found to be in conflict with the law, that
part shall be interpreted in its broadest meaning consistent with the law,
and no other parts of the License shall be affected.
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to control
compilation and installation of the executable. However, as a special
exception, the source code distributed need not include anything that
is normally distributed (in either source or binary form) with the
major components (compiler, kernel, and so on) of the operating system
on which the executable runs, unless that component itself accompanies
the executable.
For United States Government users, the PROGRAM is provided with RESTRICTED
RIGHTS. If you are a unit or agency of the United States Government or are
acquiring the Software for any such unit or agency, the following apply:
If distribution of executable or object code is made by offering access
to copy from a designated place, then offering equivalent access to
copy the source code from the same place counts as distribution of the
source code, even though third parties are not compelled to copy the
source along with the object code.
5. You may not copy, modify, sublicense, or distribute the Program except
as expressly provided under this License. Any attempt otherwise to
copy, modify, sublicense or distribute the Program is void, and will
automatically terminate your rights under this License. However,
parties who have received copies, or rights, from you under this
License will not have their licenses terminated so long as such parties
remain in full compliance.
6. You are not required to accept this License, since you have not signed
it. However, nothing else grants you permission to modify or distribute
the Program or its derivative works. These actions are prohibited by
law if you do not accept this License. Therefore, by modifying or
distributing the Program (or any work based on the Program), you
indicate your acceptance of this License to do so, and all its terms
and conditions for copying, distributing or modifying the Program or
works based on it.
7. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further restrictions
on the recipients' exercise of the rights granted herein. You are not
responsible for enforcing compliance by third parties to this License.
8. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent license
would not permit royalty-free redistribution of the Program by all
those who receive copies directly or indirectly through you, then the
only way you could satisfy both it and this License would be to refrain
entirely from distribution of the Program.
If the unit or agency is the Department of Defense ("DOD"), the
Software and its documentation are classified as "commercial
computer software" and "commercial computer software
documentation" respectively and, pursuant to DFAR Section
227.7202, the Government is acquiring the Software and its
documentation in accordance with the terms of this License. If the
unit or agency is other than DOD, the Software and its
documentation are classified as "commercial computer software" and
"commercial computer software documentation" respectively and,
pursuant to FAR Section 12.212, the Government is acquiring the
Software and its documentation in accordance with the terms of
this License.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made generous
contributions to the wide range of software distributed through that
system in reliance on consistent application of that system; it is up
to the author/donor to decide if he or she is willing to distribute
software through any other system and a licensee cannot impose that
choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
9. If the distribution and/or use of the Program is restricted in certain
countries either by patents or by copyrighted interfaces, the original
copyright holder who places the Program under this License may add an
explicit geographical distribution limitation excluding those
countries, so that distribution is permitted only in or among countries
not thus excluded. In such case, this License incorporates the
limitation as if written in the body of this License.
10. The Free Software Foundation may publish revised and/or new versions of
the General Public License from time to time. Such new versions will be
similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation. If the Program does not specify a version
number of this License, you may choose any version ever published by
the Free Software Foundation.
11. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the
author to ask for permission. For software which is copyrighted by the
Free Software Foundation, write to the Free Software Foundation; we
sometimes make exceptions for this. Our decision will be guided by the
two goals of preserving the free status of all derivatives of our free
software and of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH
YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
NECESSARY SERVICING, REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL
DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM
(INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF
THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR
OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
+35 -9
Ver Arquivo
@@ -16,7 +16,7 @@
#
# Attn: CUPS Licensing Information
# Easy Software Products
# 44145 Airport View Drive, Suite 204
# 44141 Airport View Drive, Suite 204
# Hollywood, Maryland 20636-3111 USA
#
# Voice: (301) 373-9603
@@ -31,14 +31,30 @@
AR = @AR@
AWK = @AWK@
CC = @CC@
CHMOD = @CHMOD@
CP = @CP@
DSO = @DSO@
HTMLDOC = @HTMLDOC@
LN = /bin/ln -sf
MKDIR = @MKDIR@ -p
NROFF = @GROFF@ -T ascii
NROFF = @NROFF@
PACK = @PACK@
RANLIB = @RANLIB@
RM = @RM@ -f
SED = @SED@
SHELL = /bin/sh
SMBCLIENT = @SMBCLIENT@
#
# Libraries...
#
LIBCUPS = @LIBCUPS@
LIBCUPSIMAGE = @LIBCUPSIMAGE@
LIBJPEG = @LIBJPEG@
LIBPNG = @LIBPNG@
LIBTIFF = @LIBTIFF@
LIBZ = @LIBZ@
#
# Program options...
@@ -50,12 +66,19 @@ SHELL = /bin/sh
ARFLAGS = crvs
CFLAGS = @CFLAGS@ $(OPTIM) -I.. $(OPTIONS)
IMGLIBS = @IMGLIBS@ $(LIBS) -lm
DSOLIBS = @DSOLIBS@
IMGLIBS = @IMGLIBS@ -lm
LDFLAGS = @LDFLAGS@ $(OPTIM)
LIBS = @LIBS@ -L../cups -lcups
LIBS = -L../cups -lcups @LIBS@
OPTIM = @OPTIM@
OPTIONS =
#
# Formatted man page extension...
#
CAT = @CAT@
#
# Directories...
#
@@ -87,7 +110,7 @@ top_srcdir = @top_srcdir@
BINDIR = @bindir@
DATADIR = @CUPS_DATADIR@
INCLUDEDIR = $(includedir)/cups
INCLUDEDIR = $(includedir)
LIBDIR = $(libdir)
LOCALEDIR = @CUPS_LOCALEDIR@
MANDIR = @mandir@
@@ -98,13 +121,16 @@ SERVERROOT = @CUPS_SERVERROOT@
# Rules...
#
.SUFFIXES: .a .c .h .1 .2 .3 .4 .5 .6 .7 .8 .o .z
.SILENT:
.SUFFIXES: .a .c .gz .h .o .z .1 .5 .8
.c.o:
echo Compiling $<...
$(CC) $(CFLAGS) -c $<
.1.z .2.z .3.z .4.z .5.z .6.z .7.z .8.z:
.1.z .5.z .8.z .1.gz .5.gz .8.gz:
echo Formatting $<...
$(NROFF) -man $< >t
pack -f t
mv t.z $@
$(PACK) t
-mv t.$(CAT) $@
#
# End of "$Id$"
+10 -1
Ver Arquivo
@@ -14,7 +14,7 @@
#
# Attn: CUPS Licensing Information
# Easy Software Products
# 44145 Airport View Drive, Suite 204
# 44141 Airport View Drive, Suite 204
# Hollywood, Maryland 20636-3111 USA
#
# Voice: (301) 373-9603
@@ -37,6 +37,7 @@ DIRS = cups backend berkeley cgi-bin filter man pstoraster \
all:
for dir in $(DIRS); do\
echo Making all in $$dir... ;\
(cd $$dir; make);\
done
@@ -46,6 +47,7 @@ all:
clean:
for dir in $(DIRS); do\
echo Cleaning in $$dir... ;\
(cd $$dir; make clean);\
done
@@ -55,12 +57,19 @@ clean:
install:
for dir in $(DIRS); do\
echo Installing in $$dir... ;\
(cd $$dir; make install);\
done
echo Installing in conf...
(cd conf; make install)
echo Installing in data...
(cd data; make install)
echo Installing in doc...
(cd doc; make install)
echo Installing in fonts...
(cd fonts; make install)
echo Installing in ppd...
(cd ppd; make install)
#
# End of "$Id$".
+14 -118
Ver Arquivo
@@ -4,21 +4,18 @@
</HEAD>
<BODY>
<H1>README - CUPS v1.0b1</H1>
<H1>README - CUPS v1.0b4</H1>
<H2>Contents</H2>
<UL>
<LI><A HREF="#intro">Introduction</A>
<LI><A HREF="#require">Requirements</A>
<LI><A HREF="#compile">Compiling CUPS</A>
<LI><A HREF="#config">Configuring the Software</A>
<LI><A HREF="#run">Running the Software</A>
<LI><A HREF="#use">Using the Software</A>
<LI><A HREF="#use">Using CUPS</A>
<LI><A HREF="#known">Known Problems</A>
<LI><A HREF="#report">Reporting Problems</A>
<LI><A HREF="#resources">Other Resources</A>
<LI><A HREF="#license">Legal Stuff</A>
<LI><A HREF="#legal">Legal Stuff</A>
</UL>
<H2><A NAME="intro">Introduction</A></H2>
@@ -58,130 +55,29 @@ nroff-like package.
<P>The documentation is formatted using the HTMLDOC software (again, not
needed unless you make changes.)
<H2><A NAME="compile">Compiling CUPS</A></H2>
<H2><A NAME="use">Using CUPS</A></H2>
CUPS uses GNU autoconf to configure the makefiles and source code for your
system. To configure CUPS for your system type:
<P>Pre-compiled binary distributions are available for CUPS from our
web site at
<A HREF="http://www.cups.org/software.html">http://www.cups.org/software.html</A>.
If you'd like to build CUPS from the source, please read the Software
Administrator's Manual.
<UL><PRE>
% ./configure ENTER
</PRE></UL>
The default installation will put the CUPS software in the <CODE>/usr</CODE>
and <CODE>/var</CODE> directories on your system, which will overwrite any
existing printing commands on your system. To install the CUPS software in
another location use the <CODE>--prefix</CODE> option:
<UL><PRE>
% ./configure --prefix=/usr/local ENTER
</PRE></UL>
Once you have configured things, just type:
<UL><PRE>
% make ENTER
</PRE></UL>
to build the software.
<H2><A NAME="install">Installing the Software</A></H2>
To install the software type:
<UL><PRE>
% make install ENTER
</PRE></UL>
<H2><A NAME="config">Configuring the Software</A></H2>
Before you run CUPS for the first time you'll need to edit the CUPS
configuration files which are normally located in /var/cups/conf.
<UL>
The <CODE>cupsd.conf</CODE> file configures all of the
"global" server settings and access control. The default
settings are usually appropriate for most environments.
<P>The <CODE>printers.conf</CODE> file configures each printer
queue. You'll need to add a listing for each printer on your
system.
<P>The <CODE>classes.conf</CODE> file configures each printer
class. You'll need to add a listing for each printer class you
want.
<P>The <CODE>mime.types</CODE> file defines all of the
recognized file types. You don't normally have to edit this
file.
<P>The <CODE>mime.convs</CODE> file defines all of the file
conversion filters. You don't normally have to edit this file.
</UL>
In addition to the files in the /var/cups/conf directory, you'll also need
to copy PPD files for each printer to the /var/cups/ppd directory. If you
don't have a PPD file for your printer, the drivers will still work, just
with reduced functionality.
<H2><A NAME="run">Running the Software</A></H2>
Once you have configured the software you can start the CUPS daemon by
typing:
<UL><PRE>
% /usr/sbin/cupsd &amp; ENTER
</PRE></UL>
<H2><A NAME="use">Using the Software</A></H2>
Once you have installed the software, you can use the normal lp or lpr
commands to print jobs. If you installed the software under /usr then
you shouldn't have to reconfigure any applications to recognize the new
printing system.
<P>One of the advantages of CUPS is that you don't always have to send
PostScript or Text files to your printers. If you have a JPEG file, you
can just type "lp filename.jpg" and CUPS will handle converting it for
you!
<P>You can monitor the status of jobs via the lpstat command or with your
web browser by pointing it at "http://localhost:631".
<P>Once you have installed CUPS, the Software Administrator's Manual and
Software User's Manual are excellent places to start setting things up.
<H2><A NAME="known">Known Problems</A></H2>
The following known problems are being worked on and should be resolved for
the second beta release of CUPS:
the fourth beta release of CUPS:
<UL>
<LI>Documentation is not completed.
<LI>The lpadmin command is currently not provided.
<LI>The lpq command is currently not provided.
<LI>The lpc command currently only supports the help and status
commands.
<LI>While both GNU GhostScript and the CUPS image RIP are
provided, no sample raster printer driver is provided. The
final release of CUPS will include a PCL printer driver.
<LI>Automatic classing is currently not supported.
<LI>The CUPS server should disable core dumps by filters, backends,
and CGI programs.
<LI>The CUPS server should increase the FD limit to the maximum
allowed on the system.
<LI>The CUPS server should close stdin, stdout, and stderr and
run in the background ("daemon" mode...)
<LI>The class and job CGIs are currently not provided.
</UL>
CUPS has been built and tested on the following operating systems:
@@ -220,9 +116,9 @@ and the Common UNIX Printing System are the trademark property of Easy Software
Products.
<P>CUPS is provided under the terms of the
<A HREF="LICENSE.html">Aladdin Free Public License</A>
<A HREF="LICENSE.html">GNU General Public License</A>
which is located in the files "LICENSE.html" and "LICENSE.txt". For commercial
licensing information, please contact:
support and "binary-only" licensing information, please contact:
<UL>
Attn: CUPS Licensing Information
+17 -89
Ver Arquivo
@@ -1,18 +1,17 @@
README - CUPS v1.0b1
README - CUPS v1.0b4
--------------------
CONTENTS
* Introduction
* Requirements
* Compiling CUPS
* Configuring the Software
* Running the Software
* Using the Software
* Using CUPS
* Known Problems
* Reporting Problems
* Other Resources
* Legal Stuff
INTRODUCTION
The Common UNIX Printing System provides a portable printing layer for UNIX®
@@ -33,6 +32,7 @@ CUPS also includes a customized version of GNU GhostScript (currently based
off GNU GhostScript 4.03) and an image file RIP that can be used to support
non-PostScript printers.
REQUIREMENTS
You'll need an ANSI C compiler to build CUPS on your system. As its name
@@ -49,99 +49,24 @@ nroff-like package.
The documentation is formatted using the HTMLDOC software (again, not needed
unless you make changes.)
COMPILING CUPS
CUPS uses GNU autoconf to configure the makefiles and source code for your
system. To configure CUPS for your system type:
USING CUPS
% ./configure ENTER
Pre-compiled binary distributions are available for CUPS from our web site
at http://www.cups.org/software.html. If you'd like to build CUPS from the
source, please read the Software Administrator's Manual.
The default installation will put the CUPS software in the /usr and /var
directories on your system, which will overwrite any existing printing
commands on your system. To install the CUPS software in another location
use the --prefix option:
Once you have installed CUPS, the Software Administrator's Manual and
Software User's Manual are excellent places to start setting things up.
% ./configure --prefix=/usr/local ENTER
Once you have configured things, just type:
% make ENTER
to build the software.
INSTALLING THE SOFTWARE
To install the software type:
% make install ENTER
CONFIGURING THE SOFTWARE
Before you run CUPS for the first time you'll need to edit the CUPS
configuration files which are normally located in /var/cups/conf.
The cupsd.conf file configures all of the "global" server settings and
access control. The default settings are usually appropriate for most
environments.
The printers.conf file configures each printer queue. You'll need to
add a listing for each printer on your system.
The classes.conf file configures each printer class. You'll need to add
a listing for each printer class you want.
The mime.types file defines all of the recognized file types. You don't
normally have to edit this file.
The mime.convs file defines all of the file conversion filters. You
don't normally have to edit this file.
In addition to the files in the /var/cups/conf directory, you'll also need
to copy PPD files for each printer to the /var/cups/ppd directory. If you
don't have a PPD file for your printer, the drivers will still work, just
with reduced functionality.
RUNNING THE SOFTWARE
Once you have configured the software you can start the CUPS daemon by
typing:
% /usr/sbin/cupsd & ENTER
USING THE SOFTWARE
Once you have installed the software, you can use the normal lp or lpr
commands to print jobs. If you installed the software under /usr then you
shouldn't have to reconfigure any applications to recognize the new printing
system.
One of the advantages of CUPS is that you don't always have to send
PostScript or Text files to your printers. If you have a JPEG file, you can
just type "lp filename.jpg" and CUPS will handle converting it for you!
You can monitor the status of jobs via the lpstat command or with your web
browser by pointing it at "http://localhost:631".
KNOWN PROBLEMS
The following known problems are being worked on and should be resolved for
the second beta release of CUPS:
the fourth beta release of CUPS:
* Documentation is not completed.
* The lpadmin command is currently not provided.
* The lpq command is currently not provided.
* The lpc command currently only supports the help and status commands.
* While both GNU GhostScript and the CUPS image RIP are provided, no
sample raster printer driver is provided. The final release of CUPS
will include a PCL printer driver.
* Automatic classing is currently not supported.
* The CUPS server should disable core dumps by filters, backends, and CGI
programs.
* The CUPS server should increase the FD limit to the maximum allowed on
the system.
* The CUPS server should close stdin, stdout, and stderr and run in the
background ("daemon" mode...)
* The class and job CGIs are currently not provided.
CUPS has been built and tested on the following operating systems:
@@ -154,12 +79,14 @@ CUPS has been built and tested on the following operating systems:
The client libraries and filters have been successfully compiled under
Microsoft Windows using Visual C++ 6.0.
REPORTING PROBLEMS
If you have 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.
OTHER RESOURCES
See the CUPS web site at "http://www.cups.org" for other site links.
@@ -169,15 +96,16 @@ You can subscribe to the CUPS mailing list by sending a message containing
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-1999 by Easy Software Products. CUPS, the CUPS logo,
and the Common UNIX Printing System are the trademark property of Easy
Software Products.
CUPS is provided under the terms of the Aladdin Free Public License which is
CUPS is provided under the terms of the GNU General Public License which is
located in the files "LICENSE.html" and "LICENSE.txt". For commercial
licensing information, please contact:
support and "binary-only" licensing information, please contact:
Attn: CUPS Licensing Information
Easy Software Products
+32 -11
Ver Arquivo
@@ -14,7 +14,7 @@
#
# Attn: CUPS Licensing Information
# Easy Software Products
# 44145 Airport View Drive, Suite 204
# 44141 Airport View Drive, Suite 204
# Hollywood, Maryland 20636-3111 USA
#
# Voice: (301) 373-9603
@@ -24,8 +24,8 @@
include ../Makedefs
TARGETS = lpd parallel serial smb socket
OBJS = lpd.o parallel.o serial.o smb.o socket.o
TARGETS = ipp lpd parallel serial smb socket
OBJS = ipp.o lpd.o parallel.o serial.o socket.o
#
# Make all targets...
@@ -47,12 +47,26 @@ clean:
install:
-$(MKDIR) $(SERVERROOT)/backend
$(CP) $(TARGETS) $(SERVERROOT)/backend
-$(LN) ipp $(SERVERROOT)/backend/http
$(CHMOD) u+s $(SERVERROOT)/backend/lpd
#
# ipp
#
ipp: ipp.o ../cups/$(LIBCUPS)
echo Linking $@...
$(CC) $(LDFLAGS) -o ipp ipp.o $(LIBS)
-$(LN) ipp http
ipp.o: ../cups/cups.h ../Makedefs
#
# lpd
#
lpd: lpd.o ../cups/libcups.a
lpd: lpd.o ../cups/$(LIBCUPS)
echo Linking $@...
$(CC) $(LDFLAGS) -o lpd lpd.o $(LIBS)
lpd.o: ../cups/cups.h ../Makedefs
@@ -61,7 +75,8 @@ lpd.o: ../cups/cups.h ../Makedefs
# parallel
#
parallel: parallel.o ../cups/libcups.a
parallel: parallel.o ../cups/$(LIBCUPS)
echo Linking $@...
$(CC) $(LDFLAGS) -o parallel parallel.o $(LIBS)
parallel.o: ../cups/cups.h ../Makedefs
@@ -70,7 +85,8 @@ parallel.o: ../cups/cups.h ../Makedefs
# serial
#
serial: serial.o ../cups/libcups.a
serial: serial.o ../cups/$(LIBCUPS)
echo Linking $@...
$(CC) $(LDFLAGS) -o serial serial.o $(LIBS)
serial.o: ../cups/cups.h ../Makedefs
@@ -78,17 +94,22 @@ serial.o: ../cups/cups.h ../Makedefs
#
# smb
#
# Note: reading through these commands is a good way to get a headache... :)
#
smb: smb.o ../cups/libcups.a
$(CC) $(LDFLAGS) -o smb smb.o $(LIBS)
smb.o: ../cups/cups.h ../Makedefs
smb: smb.sh ../Makedefs
echo Generating $@...
$(RM) smb
sedcmd="1,\$$s/^SMBCLIENT=.\*/SMBCLIENT=`echo $(SMBCLIENT) | sed -e '1,$$s/\\//\\\\\\//g'`/" ;\
$(SED) -e "$$sedcmd" <smb.sh >smb
$(CHMOD) +x smb
#
# socket
#
socket: socket.o ../cups/libcups.a
socket: socket.o ../cups/$(LIBCUPS)
echo Linking $@...
$(CC) $(LDFLAGS) -o socket socket.o $(LIBS)
socket.o: ../cups/cups.h ../Makedefs
+398
Ver Arquivo
@@ -0,0 +1,398 @@
/*
* "$Id$"
*
* IPP backend for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* Contents:
*
*/
/*
* Include necessary headers.
*/
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <cups/cups.h>
#include <cups/language.h>
#include <cups/string.h>
/*
* 'main()' - Send a file to the printer or server.
*
* Usage:
*
* printer-uri job-id user title copies options [file]
*/
int /* O - Exit status */
main(int argc, /* I - Number of command-line arguments (6 or 7) */
char *argv[]) /* I - Command-line arguments */
{
int i; /* Looping var */
int n, n2; /* Attribute values */
char *option, /* Name of option */
*val, /* Pointer to option value */
*s; /* Pointer into option value */
int num_options; /* Number of printer options */
cups_option_t *options; /* Printer options */
char method[255], /* Method in URI */
hostname[1024], /* Hostname */
username[255], /* Username info */
resource[1024], /* Resource info (printer name) */
filename[1024]; /* File to print */
int port; /* Port number (not used) */
char password[255], /* Password info */
uri[HTTP_MAX_URI];/* Updated URI without user/pass */
http_status_t status; /* Status of HTTP job */
FILE *fp; /* File to print */
http_t *http; /* HTTP connection */
ipp_t *request, /* IPP request */
*response; /* IPP response */
ipp_attribute_t *job_id; /* job-id attribute */
cups_lang_t *language; /* Default language */
struct stat fileinfo; /* File statistics */
size_t nbytes, /* Number of bytes written */
tbytes; /* Total bytes written */
char buffer[8192]; /* Output buffer */
if (argc < 6 || argc > 7)
{
fprintf(stderr, "Usage: %s job-id user title copies options [file]\n",
argv[0]);
return (1);
}
/*
* If we have 7 arguments, print the file named on the command-line.
* Otherwise, print stdin...
*/
if (argc == 6)
fp = stdin;
else if ((fp = fopen(argv[6], "rb")) == NULL)
{
perror("ERROR: Unable to open print file");
return (1);
}
else
stat(argv[6], &fileinfo);
/*
* Extract the hostname and printer name from the URI...
*/
httpSeparate(argv[0], method, username, hostname, &port, resource);
/*
* Try connecting to the remote server...
*/
fprintf(stderr, "INFO: Connecting to %s...\n", hostname);
if ((http = httpConnect(hostname, port)) == NULL)
{
perror("ERROR: Unable to connect to IPP host");
if (fp != stdin)
fclose(fp);
return (1);
}
/*
* Build a URI for the printer and fill the standard IPP attributes for
* an IPP_PRINT_FILE request. We can't use the URI in argv[0] because it
* might contain username:password information...
*/
request = ippNew();
request->request.op.operation_id = IPP_PRINT_JOB;
request->request.op.request_id = 1;
sprintf(uri, "%s://%s:%d%s", method, hostname, port, resource);
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 != NULL ? language->language : "C");
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
NULL, uri);
ippAddString(request, IPP_TAG_JOB, IPP_TAG_NAME, "requesting-user-name",
NULL, argv[2]);
ippAddString(request, IPP_TAG_JOB, IPP_TAG_NAME, "job-name", NULL, argv[3]);
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "copies", atoi(argv[4]));
/*
* Handle options on the command-line...
*/
options = NULL;
num_options = cupsParseOptions(argv[5], 0, &options);
if (cupsGetOption("raw", num_options, options))
ippAddString(request, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format",
NULL, "application/vnd.cups-raw");
else
ippAddString(request, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format",
NULL, "application/octet-stream");
for (i = 0; i < num_options; i ++)
{
/*
* Skip the "raw" option - handled above...
*/
if (strcmp(options[i].name, "raw") == 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 (strncmp(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 (strcmp(s, "dpc") == 0)
ippAddResolution(request, IPP_TAG_JOB, option, IPP_RES_PER_CM, n, n2);
else if (strcmp(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...
*/
httpClearFields(http);
httpSetField(http, HTTP_FIELD_CONTENT_TYPE, "application/ipp");
httpEncode64(password, username);
httpSetField(http, HTTP_FIELD_AUTHORIZATION, password);
if (fp != stdin)
{
sprintf(buffer, "%u", ippLength(request) + (size_t)fileinfo.st_size);
httpSetField(http, HTTP_FIELD_CONTENT_LENGTH, buffer);
}
/*
* Do the request...
*/
for (;;)
{
/*
* POST the request, retrying as needed...
*/
if (httpPost(http, resource))
if (httpPost(http, resource))
{
fputs("INFO: Unable to POST print request; retrying...\n", stderr);
sleep(10);
continue;
}
fputs("INFO: POST successful, sending IPP request...\n", stderr);
/*
* Send the IPP request...
*/
request->state = IPP_IDLE;
if (ippWrite(http, request) == IPP_ERROR)
{
fputs("ERROR: Unable to send IPP request!\n", stderr);
status = HTTP_ERROR;
break;
}
fputs("INFO: IPP request sent, sending print file...\n", stderr);
/*
* Then send the file...
*/
tbytes = 0;
while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
{
tbytes += nbytes;
fprintf(stderr, "INFO: Sending print file, %uk...\n", tbytes / 1024);
if (httpWrite(http, buffer, nbytes) < nbytes)
{
perror("ERROR: Unable to send print file to printer");
status = HTTP_ERROR;
break;
}
}
httpWrite(http, buffer, 0);
fputs("INFO: Print file sent; checking status...\n", stderr);
/*
* Finally, check the status from the HTTP server...
*/
while ((status = httpUpdate(http)) == HTTP_CONTINUE);
if (status == HTTP_OK)
{
response = ippNew();
ippRead(http, response);
if (response->request.status.status_code > IPP_OK_CONFLICT)
fprintf(stderr, "ERROR: Print file was not accepted (%04x)!\n",
response->request.status.status_code);
else if ((job_id = ippFindAttribute(response, "job-id", IPP_TAG_INTEGER)) == NULL)
fputs("INFO: Print file accepted - job ID unknown.\n", stderr);
else
fprintf(stderr, "INFO: Print file accepted - job ID %d.\n",
job_id->values[0].integer);
}
else
{
response = NULL;
httpFlush(http);
fprintf(stderr, "ERROR: Print request was not accepted (%d)!\n", status);
}
break;
}
/*
* Free memory...
*/
httpClose(http);
if (request != NULL)
ippDelete(request);
if (response != NULL)
ippDelete(response);
/*
* Close the print file as needed...
*/
if (fp != stdin)
fclose(fp);
/*
* Return the queue status...
*/
return (status != HTTP_OK);
}
/*
* End of "$Id$".
*/
+14 -15
Ver Arquivo
@@ -14,7 +14,7 @@
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
@@ -109,14 +109,14 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
if ((fp = fopen(tmpnam(filename), "w")) == NULL)
{
perror("lpd: unable to create temporary file");
perror("ERROR: unable to create temporary file");
return (1);
}
while ((bytes = fread(buffer, 1, sizeof(buffer), stdin)) > 0)
if (fwrite(buffer, 1, bytes, fp) < bytes)
{
perror("lpd: unable to write to temporary file");
perror("ERROR: unable to write to temporary file");
fclose(fp);
unlink(filename);
return (1);
@@ -178,7 +178,7 @@ lpd_command(int fd, /* I - Socket connection to LPD host */
bytes = vsprintf(buf, format, ap);
va_end(ap);
fprintf(stderr, "lpd: lpd_command %02.2x %s", buf[0], buf + 1);
fprintf(stderr, "DEBUG: lpd_command %02.2x %s", buf[0], buf + 1);
/*
* Send the command...
@@ -194,7 +194,7 @@ lpd_command(int fd, /* I - Socket connection to LPD host */
if (recv(fd, &status, 1, 0) < 1)
return (-1);
fprintf(stderr, "lpd: lpd_command returning %d\n", status);
fprintf(stderr, "DEBUG: lpd_command returning %d\n", status);
return (status);
}
@@ -288,13 +288,13 @@ lpd_queue(char *hostname, /* I - Host to connect to */
if (stat(filename, &filestats))
{
perror("lpd: unable to stat print file");
perror("ERROR: unable to stat print file");
return (1);
}
if ((fp = fopen(filename, "rb")) == NULL)
{
perror("lpd: unable to open print file for reading");
perror("ERROR: unable to open print file for reading");
return (1);
}
@@ -306,8 +306,7 @@ lpd_queue(char *hostname, /* I - Host to connect to */
lpd_command(fd, "\002%s\n", printer); /* Receive print job(s) */
gethostname(localhost, sizeof(localhost));
if (strchr(localhost, '.') != NULL)
*strchr(localhost, '.') = '\0';
localhost[31] = '\0'; /* RFC 1179, Section 7.2 - host name < 32 chars */
sprintf(control, "H%s\nP%s\n", localhost, user);
cptr = control + strlen(control);
@@ -323,12 +322,12 @@ lpd_queue(char *hostname, /* I - Host to connect to */
getpid() % 1000, localhost,
getpid() % 1000, localhost);
fprintf(stderr, "lpd: Control file is:\n%s", control);
fprintf(stderr, "DEBUG: Control file is:\n%s", control);
lpd_command(fd, "\002%d cfA%03.3d%s\n", strlen(control), getpid() % 1000,
localhost);
fprintf(stderr, "lpd: Sending control file (%d bytes)\n", strlen(control));
fprintf(stderr, "INFO: Sending control file (%d bytes)\n", strlen(control));
if (send(fd, control, strlen(control) + 1, 0) < (strlen(control) + 1))
{
@@ -344,12 +343,12 @@ lpd_queue(char *hostname, /* I - Host to connect to */
* Send the print file...
*/
fputs("lpd: Control file sent successfully\n", stderr);
fputs("INFO: Control file sent successfully\n", stderr);
lpd_command(fd, "\003%d dfA%03.3d%s\n", filestats.st_size,
lpd_command(fd, "\003%u dfA%03.3d%s\n", (unsigned)filestats.st_size,
getpid() % 1000, localhost);
fprintf(stderr, "lpd: Sending data file (%u bytes)\n",
fprintf(stderr, "INFO: Sending data file (%u bytes)\n",
(unsigned)filestats.st_size);
tbytes = 0;
@@ -375,7 +374,7 @@ lpd_queue(char *hostname, /* I - Host to connect to */
fprintf(stderr, "ERROR: Remote host did not accept data file (%d)\n",
status);
else
fputs("lpd: Data file sent successfully\n", stderr);
fputs("INFO: Data file sent successfully\n", stderr);
}
/*
+1 -1
Ver Arquivo
@@ -14,7 +14,7 @@
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
+1 -1
Ver Arquivo
@@ -14,7 +14,7 @@
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
-66
Ver Arquivo
@@ -1,66 +0,0 @@
/*
* "$Id$"
*
* Server Message Block backend for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* Contents:
*
*/
/*
* Include necessary headers.
*/
#include <cups/cups.h>
#include <stdio.h>
#include <stdlib.h>
#include <cups/string.h>
/*
* 'main()' - Send a file to the printer or server.
*
* Usage:
*
* printer-uri job-id user title copies options [file]
*/
int /* O - Exit status */
main(int argc, /* I - Number of command-line arguments (6 or 7) */
char *argv[]) /* I - Command-line arguments */
{
if (argc < 6 || argc > 7)
{
fprintf(stderr, "Usage: %s job-id user title copies options [file]\n",
argv[0]);
return (1);
}
fputs("ERROR: Backend not implemented yet!\n", stderr);
return (1);
}
/*
* End of "$Id$".
*/
Arquivo executável
+88
Ver Arquivo
@@ -0,0 +1,88 @@
#!/bin/sh
#
# "$Id$"
#
# SMB printing script for the Common UNIX Printing System (CUPS).
#
# Copyright 1993-1999 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
# copyright law. Distribution and use rights are outlined in the file
# "LICENSE.txt" which should have been included with this file. If this
# file is missing or damaged please contact Easy Software Products
# at:
#
# Attn: CUPS Licensing Information
# Easy Software Products
# 44145 Airport View Drive, Suite 204
# Hollywood, Maryland 20636-3111 USA
#
# Voice: (301) 373-9603
# EMail: cups-info@cups.org
# WWW: http://www.cups.org
#
SMBCLIENT=/usr/local/samba/bin/smbclient
#
# Usage:
#
# printer job user title copies options [filename]
#
if [ $# -lt 5 -o $# -gt 6 ]; then
# Too few or too many arguments
echo 'Usage: smb job-id user title copies options [file]' >&2
exit 1
fi
#
# If "filename" is not on the command-line, then we read the print
# data from stdin and write it to a temporary file.
#
if [ $# = 5 ]; then
# Collect all print data and put it in a temporary file...
if [ "$TMPDIR" = "" ]; then
TMPDIR=/var/tmp
fi
filename="$TMPDIR/$$.smb"
cat >$filename
else
# Use the file on the command-line...
filename="$6"
fi
#
# Take apart the URI in $0...
#
uri="$0"
host=`echo $uri | awk -F/ '{print substr($3, index($3, "@") + 1)}'`
user=`echo $uri | awk -F/ '{print substr($3, 0, index($3, "@") - 1)}'`
if [ "$user" != "" ]; then
user="-U $user"
fi
printer=`echo $uri | awk -F/ '{print $4}'`
#
# Send the file to the remote system...
#
$SMBCLIENT //$host/$printer $user -P -N <<EOF
print $filename
EOF
#
# Lastly, remove the temporary file as needed...
#
if [ $# = 5 ]; then
rm -f $filename
fi
#
# End of "$Id$".
#
+20 -7
Ver Arquivo
@@ -14,7 +14,7 @@
#
# Attn: CUPS Licensing Information
# Easy Software Products
# 44145 Airport View Drive, Suite 204
# 44141 Airport View Drive, Suite 204
# Hollywood, Maryland 20636-3111 USA
#
# Voice: (301) 373-9603
@@ -24,8 +24,8 @@
include ../Makedefs
TARGETS = lpc lpr lprm
OBJS = lpc.o lpr.o lprm.o
TARGETS = lpc lpq lpr lprm
OBJS = lpc.o lpq.o lpr.o lprm.o
#
# Make all targets...
@@ -47,23 +47,35 @@ clean:
install:
-$(MKDIR) $(BINDIR)
-$(MKDIR) $(SBINDIR)
$(CP) lpr lprm $(BINDIR)
$(CP) lpq lpr lprm $(BINDIR)
$(CP) lpc $(SBINDIR)
#
# lpc
#
lpc: lpc.o ../cups/libcups.a
lpc: lpc.o ../cups/$(LIBCUPS)
echo Linking $@...
$(CC) $(LDFLAGS) -o lpc lpc.o $(LIBS)
lpc.o: ../cups/cups.h ../Makedefs
#
# lpq
#
lpq: lpq.o ../cups/$(LIBCUPS)
echo Linking $@...
$(CC) $(LDFLAGS) -o lpq lpq.o $(LIBS)
lpq.o: ../cups/cups.h ../Makedefs
#
# lpr
#
lpr: lpr.o ../cups/libcups.a
lpr: lpr.o ../cups/$(LIBCUPS)
echo Linking $@...
$(CC) $(LDFLAGS) -o lpr lpr.o $(LIBS)
lpr.o: ../cups/cups.h ../Makedefs
@@ -72,7 +84,8 @@ lpr.o: ../cups/cups.h ../Makedefs
# lprm
#
lprm: lprm.o ../cups/libcups.a
lprm: lprm.o ../cups/$(LIBCUPS)
echo Linking $@...
$(CC) $(LDFLAGS) -o lprm lprm.o $(LIBS)
lprm.o: ../cups/cups.h ../Makedefs
+17 -11
Ver Arquivo
@@ -70,7 +70,7 @@ main(int argc, /* I - Number of command-line arguments */
* Connect to the scheduler...
*/
http = httpConnect("localhost", ippPort());
http = httpConnect(cupsServer(), ippPort());
if (argc > 1)
{
@@ -87,8 +87,14 @@ main(int argc, /* I - Number of command-line arguments */
*/
printf("lpc> ");
while (gets(line) != NULL)
while (fgets(line, sizeof(line), stdin) != NULL)
{
/*
* Strip the trailing newline...
*/
line[strlen(line) - 1] = '\0';
/*
* Find any options in the string...
*/
@@ -225,7 +231,7 @@ show_status(http_t *http, /* I - HTTP connection to server */
/* Printer URI */
DEBUG_printf(("show_printers(%08x, %08x)\n", http, dests));
DEBUG_printf(("show_status(%08x, %08x)\n", http, dests));
if (http == NULL)
return;
@@ -257,7 +263,7 @@ show_status(http_t *http, /* I - HTTP connection to server */
if ((response = cupsDoRequest(http, request, "/printers/")) != NULL)
{
DEBUG_puts("show_printers: request succeeded...");
DEBUG_puts("show_status: request succeeded...");
/*
* Loop through the printers returned in the list and display
@@ -397,15 +403,15 @@ show_status(http_t *http, /* I - HTTP connection to server */
language = cupsLangDefault();
attr = ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL,
cupsLangEncoding(language));
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL,
cupsLangEncoding(language));
attr = ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL,
language->language);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL,
language->language);
sprintf(printer_uri, "http://localhost/printers/%s", printer);
sprintf(printer_uri, "ipp://localhost/printers/%s", printer);
attr = ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
"printer-uri", NULL, printer_uri);
+366
Ver Arquivo
@@ -0,0 +1,366 @@
/*
* "$Id$"
*
* "lpq" command for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* Contents:
*
*/
/*
* Include necessary headers...
*/
/*
* Include necessary headers...
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <cups/cups.h>
#include <cups/language.h>
#include <cups/debug.h>
/*
* Local functions...
*/
static int show_jobs(http_t *, char *, char *, int, int);
/*
* 'main()' - Parse options and commands.
*/
int
main(int argc, /* I - Number of command-line arguments */
char *argv[]) /* I - Command-line arguments */
{
int i; /* Looping var */
http_t *http; /* Connection to server */
char *dest, /* Desired printer */
*user; /* Desired user */
int id, /* Desired job ID */
interval, /* Reporting interval */
longstatus; /* Show file details */
/*
* Connect to the scheduler...
*/
http = httpConnect(cupsServer(), ippPort());
/*
* Check for command-line options...
*/
dest = NULL;
user = NULL;
id = 0;
interval = 0;
longstatus = 0;
for (i = 1; i < argc; i ++)
if (argv[i][0] == '+')
interval = atoi(argv[i] + 1);
else if (argv[i][0] == '-')
{
switch (argv[i][1])
{
case 'P' : /* Printer */
if (argv[i][2])
dest = argv[i] + 2;
else
{
i ++;
dest = argv[i];
}
break;
case 'l' : /* Long status */
longstatus = 1;
break;
default :
fputs("Usage: lpq [-P dest] [-l] [+interval]\n", stderr);
return (1);
}
}
else if (isdigit(argv[i][0]))
id = atoi(argv[i]);
else
user = argv[i];
/*
* Show the status in a loop...
*/
for (;;)
{
i = show_jobs(http, dest, user, id, longstatus);
if (i && interval)
sleep(interval);
else
break;
}
/*
* Close the connection to the server and return...
*/
httpClose(http);
return (0);
}
/*
* 'show_jobs()' - Show printers.
*/
static int /* O - Number of jobs in queue */
show_jobs(http_t *http, /* I - HTTP connection to server */
char *dest, /* I - Destination */
char *user, /* I - User */
int id, /* I - Job ID */
int longstatus) /* I - 1 if long report desired */
{
ipp_t *request, /* IPP Request */
*response; /* IPP Response */
ipp_attribute_t *attr; /* Current attribute */
cups_lang_t *language; /* Default language */
char *jobdest, /* Pointer into job-printer-uri */
*jobuser, /* Pointer to job-originating-user-name */
*jobname; /* Pointer to job-name */
ipp_jstate_t jobstate; /* job-state */
int jobid, /* job-id */
jobsize, /* job-k-octets */
jobpriority, /* job-priority */
jobcount, /* Number of jobs */
rank; /* Rank of job */
char resource[1024]; /* Resource string */
static char *ranks[10] = /* Ranking strings */
{
"th",
"st",
"nd",
"rd",
"th",
"th",
"th",
"th",
"th",
"th"
};
DEBUG_printf(("show_jobs(%08x, %08x, %08x, %d, %d)\n", http, dest, user, id,
longstatus));
if (http == NULL)
return (0);
/*
* Build an IPP_GET_JOBS or IPP_GET_JOB_ATTRIBUTES request, which requires
* the following attributes:
*
* attributes-charset
* attributes-natural-language
* job-uri or printer-uri
* [
*/
request = ippNew();
request->request.op.operation_id = id ? IPP_GET_JOB_ATTRIBUTES : IPP_GET_JOBS;
request->request.op.request_id = 1;
language = cupsLangDefault();
attr = ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, cupsLangEncoding(language));
attr = ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
if (dest == NULL)
{
if (id)
sprintf(resource, "ipp://localhost/jobs/%d", id);
else
strcpy(resource, "ipp://localhost/jobs");
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri",
NULL, resource);
}
else
{
sprintf(resource, "ipp://localhost/printers/%s", dest);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri",
NULL, resource);
}
if (user)
{
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
"requesting-user-name", NULL, user);
ippAddBoolean(request, IPP_TAG_OPERATION, "my-jobs", 1);
}
/*
* Do the request and get back a response...
*/
if (!longstatus)
puts("Rank\tPri Owner Job Files Total Size");
jobcount = 0;
if ((response = cupsDoRequest(http, request, "/jobs/")) != NULL)
{
rank = 1;
/*
* Loop through the job list and display them...
*/
for (attr = response->attrs; attr != NULL; attr = attr->next)
{
/*
* Skip leading attributes until we hit a job...
*/
while (attr != NULL && attr->group_tag != IPP_TAG_JOB)
attr = attr->next;
if (attr == NULL)
break;
/*
* Pull the needed attributes from this job...
*/
jobid = 0;
jobsize = 0;
jobpriority = 50;
jobstate = IPP_JOB_PENDING;
jobname = "untitled";
jobuser = NULL;
jobdest = NULL;
while (attr != NULL && attr->group_tag == IPP_TAG_JOB)
{
if (strcmp(attr->name, "job-id") == 0 &&
attr->value_tag == IPP_TAG_INTEGER)
jobid = attr->values[0].integer;
if (strcmp(attr->name, "job-k-octets") == 0 &&
attr->value_tag == IPP_TAG_INTEGER)
jobsize = attr->values[0].integer * 1024;
if (strcmp(attr->name, "job-priority") == 0 &&
attr->value_tag == IPP_TAG_INTEGER)
jobpriority = attr->values[0].integer;
if (strcmp(attr->name, "job-state") == 0 &&
attr->value_tag == IPP_TAG_ENUM)
jobstate = (ipp_jstate_t)attr->values[0].integer;
if (strcmp(attr->name, "job-printer-uri") == 0 &&
attr->value_tag == IPP_TAG_URI)
if ((jobdest = strrchr(attr->values[0].string.text, '/')) != NULL)
jobdest ++;
if (strcmp(attr->name, "job-originating-user-name") == 0 &&
attr->value_tag == IPP_TAG_NAME)
jobuser = attr->values[0].string.text;
if (strcmp(attr->name, "job-name") == 0 &&
attr->value_tag == IPP_TAG_NAME)
jobname = attr->values[0].string.text;
attr = attr->next;
}
/*
* See if we have everything needed...
*/
if (jobdest == NULL || jobid == 0)
{
if (attr == NULL)
break;
else
continue;
}
jobcount ++;
/*
* Display the job...
*/
if (longstatus)
{
puts("");
if (jobstate == IPP_JOB_PROCESSING)
printf("%s: active\t\t\t\t ", jobuser);
else
{
printf("%s: %d%s\t\t\t\t ", jobuser, rank, ranks[rank % 10]);
rank ++;
}
printf("[job %03dlocalhost]\n", jobid);
printf("\t%-33s%d bytes\n", jobname, jobsize);
}
else
{
if (jobstate == IPP_JOB_PROCESSING)
printf("active\t");
else
{
printf("%d%s\t", rank, ranks[rank % 10]);
rank ++;
}
printf(" %-5d%-7.7s%-7d%-19s%d bytes\n", jobpriority, jobuser, jobid,
jobname, jobsize);
}
if (attr == NULL)
break;
}
ippDelete(response);
}
return (jobcount);
}
/*
* End of "$Id$".
*/
+21 -3
Ver Arquivo
@@ -45,20 +45,22 @@ main(int argc, /* I - Number of command-line arguments */
{
int i; /* Looping var */
int job_id; /* Job ID */
char *dest; /* Destination printer */
const char *dest; /* Destination printer */
char *title; /* Job title */
int priority; /* Job priority (1-100) */
int num_copies; /* Number of copies per file */
int num_files; /* Number of files printed */
int num_options; /* Number of options */
cups_option_t *options; /* Options */
int silent; /* Silent or verbose output? */
int silent, /* Silent or verbose output? */
deletefile; /* Delete file after print? */
char tempfile[1024]; /* Temporary file for printing from stdin */
char buffer[8192]; /* Copy buffer */
FILE *temp; /* Temporary file pointer */
silent = 0;
deletefile = 0;
dest = cupsGetDefault();
num_options = 0;
options = NULL;
@@ -84,6 +86,16 @@ main(int argc, /* I - Number of command-line arguments */
argv[i][1]);
break;
case 'o' : /* Option */
if (argv[i][2] != '\0')
num_options = cupsParseOptions(argv[i] + 2, num_options, &options);
else
{
i ++;
num_options = cupsParseOptions(argv[i], num_options, &options);
}
break;
case 'l' : /* Literal/raw */
num_options = cupsParseOptions("raw", num_options, &options);
break;
@@ -96,10 +108,14 @@ main(int argc, /* I - Number of command-line arguments */
case 's' : /* Don't use symlinks */
break;
case 'm' : /* mail on completion */
case 'm' : /* Mail on completion */
fputs("Warning: email notification is not supported!\n", stderr);
break;
case 'r' : /* Remove file after printing */
deletefile = 1;
break;
case 'P' : /* Destination printer or class */
if (argv[i][2] != '\0')
dest = argv[i] + 2;
@@ -177,6 +193,8 @@ main(int argc, /* I - Number of command-line arguments */
fprintf(stderr, "lpr: unable to print file \'%s\'.\n", argv[i]);
return (1);
}
else if (deletefile)
unlink(argv[i]);
}
/*
+5 -5
Ver Arquivo
@@ -14,7 +14,7 @@
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
@@ -49,7 +49,7 @@ main(int argc, /* I - Number of command-line arguments */
http_t *http; /* HTTP connection to server */
int i; /* Looping var */
int job_id; /* Job ID */
char *dest; /* Destination printer */
const char *dest; /* Destination printer */
char uri[1024]; /* Printer or job URI */
ipp_t *request; /* IPP request */
ipp_t *response; /* IPP response */
@@ -70,7 +70,7 @@ main(int argc, /* I - Number of command-line arguments */
* Open a connection to the server...
*/
if ((http = httpConnect("localhost", ippPort())) == NULL)
if ((http = httpConnect(cupsServer(), ippPort())) == NULL)
{
fputs("lprm: Unable to contact server!\n", stderr);
return (1);
@@ -146,7 +146,7 @@ main(int argc, /* I - Number of command-line arguments */
if (dest)
{
sprintf(uri, "http://localhost/printers/%s", dest);
sprintf(uri, "ipp://localhost/printers/%s", dest);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
"printer-uri", NULL, uri);
ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "job-id",
@@ -154,7 +154,7 @@ main(int argc, /* I - Number of command-line arguments */
}
else
{
sprintf(uri, "http://localhost/jobs/%d", job_id);
sprintf(uri, "ipp://localhost/jobs/%d", job_id);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL,
uri);
}
+26 -4
Ver Arquivo
@@ -14,7 +14,7 @@
#
# Attn: CUPS Licensing Information
# Easy Software Products
# 44145 Airport View Drive, Suite 204
# 44141 Airport View Drive, Suite 204
# Hollywood, Maryland 20636-3111 USA
#
# Voice: (301) 373-9603
@@ -24,8 +24,7 @@
include ../Makedefs
#TARGETS = classes.cgi jobs.cgi printers.cgi
TARGETS = printers.cgi
TARGETS = classes.cgi jobs.cgi printers.cgi
OBJS = classes.o jobs.o printers.o
#
@@ -46,12 +45,35 @@ clean:
#
install:
-$(MKDIR) $(SERVERROOT)/cgi-bin
$(CP) $(TARGETS) $(SERVERROOT)/cgi-bin
#
# classes.cgi
#
classes.cgi: classes.o ../Makedefs ../cups/$(LIBCUPS)
echo Linking $@...
$(CC) $(LDFLAGS) -o $@ classes.o $(LIBS)
$(OBJS): ../Makedefs ../cups/cups.h ../cups/ipp.h ../cups/language.h
#
# jobs.cgi
#
jobs.cgi: jobs.o ../Makedefs ../cups/$(LIBCUPS)
echo Linking $@...
$(CC) $(LDFLAGS) -o $@ jobs.o $(LIBS)
$(OBJS): ../Makedefs ../cups/cups.h ../cups/ipp.h ../cups/language.h
#
# printers.cgi
#
printers.cgi: printers.o ../Makedefs ../cups/libcups.a
printers.cgi: printers.o ../Makedefs ../cups/$(LIBCUPS)
echo Linking $@...
$(CC) $(LDFLAGS) -o $@ printers.o $(LIBS)
$(OBJS): ../Makedefs ../cups/cups.h ../cups/ipp.h ../cups/language.h
+475
Ver Arquivo
@@ -0,0 +1,475 @@
/*
* "$Id$"
*
* Class status CGI for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* Contents:
*
* main() - Main entry for CGI.
* show_class_list() - Show a list of classes...
* show_class_info() - Show class information.
*/
/*
* Include necessary headers...
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <cups/cups.h>
#include <cups/language.h>
#include <cups/debug.h>
/*
* Local functions...
*/
static void show_class_list(http_t *http, cups_lang_t *language);
static void show_class_info(http_t *http, cups_lang_t *language,
char *name);
/*
* 'main()' - Main entry for CGI.
*/
int /* O - Exit status */
main(int argc, /* I - Number of command-line arguments */
char *argv[]) /* I - Command-line arguments */
{
cups_lang_t *language; /* Language information */
char *name; /* Class name */
http_t *http; /* Connection to the server */
/*
* Get the request language...
*/
language = cupsLangDefault();
/*
* Connect to the HTTP server...
*/
http = httpConnect("localhost", ippPort());
/*
* Tell the client to expect HTML...
*/
printf("Content-Type: text/html;charset=%s\n\n", cupsLangEncoding(language));
/*
* See if we need to show a list of classes or the status of a
* single class...
*/
name = argv[0];
if (strcmp(name, "/") == 0 || strcmp(name, "classes.cgi") == 0)
name = NULL;
/*
* Print the standard header...
*/
puts("<HTML>");
puts("<HEAD>");
if (name)
puts("<META HTTP-EQUIV=\"Refresh\" CONTENT=\"10\">");
else
puts("<META HTTP-EQUIV=\"Refresh\" CONTENT=\"30\">");
printf("<TITLE>%s on %s - Common UNIX Printing System</TITLE>\n",
name == NULL ? "Classes" : name, getenv("SERVER_NAME"));
puts("<LINK REL=STYLESHEET TYPE=\"text/css\" HREF=\"/cups.css\">");
puts("<MAP NAME=\"navbar\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"10,10,85,30\" HREF=\"/printers\" ALT=\"Current Printer Status\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"95,10,175,30\" HREF=\"/classes\" ALT=\"Current Printer Classes Status\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"185,10,235,30\" HREF=\"/jobs\" ALT=\"Current Jobs Status\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"245,10,395,30\" HREF=\"/documentation.html\" ALT=\"Read CUPS Documentation On-Line\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"405,10,490,30\" HREF=\"http://www.cups.org\" ALT=\"Download the Current CUPS Software\">");
puts("</MAP>");
puts("</HEAD>");
puts("<BODY>");
puts("<P ALIGN=CENTER>");
puts("<A HREF=\"http://www.easysw.com\" ALT=\"Easy Software Products Home Page\">");
puts("<IMG SRC=\"/images/logo.gif\" WIDTH=\"71\" HEIGHT=\"40\" BORDER=0 ALT=\"Easy Software Products Home Page\"></A>");
puts("<IMG SRC=\"/images/navbar.gif\" WIDTH=\"540\" HEIGHT=\"40\" USEMAP=\"#navbar\" BORDER=0>");
printf("<H1>%s on %s</H1>\n", name == NULL ? "Classes" : name,
getenv("SERVER_NAME"));
fflush(stdout);
puts("<CENTER>");
puts("<TABLE WIDTH=\"90%\" BORDER=\"1\">");
puts("<TR>");
puts("<TH>Name</TH>");
puts("<TH WIDTH=\"50%\">Status</TH>");
puts("<TH WIDTH=\"25%\">Jobs</TH>");
puts("</TR>");
/*
* Show the information...
*/
if (name == NULL)
show_class_list(http, language);
else
show_class_info(http, language, name);
/*
* Write a standard trailer...
*/
puts("</TABLE>");
puts("</CENTER>");
puts("<HR>");
puts("<P>The Common UNIX Printing System, CUPS, and the CUPS logo are the");
puts("trademark property of <A HREF=\"http://www.easysw.com\">Easy Software");
puts("Products</A>. CUPS is copyright 1997-1999 by Easy Software Products,");
puts("All Rights Reserved.");
puts("</BODY>");
puts("</HTML>");
/*
* Close the HTTP server connection...
*/
httpClose(http);
cupsLangFree(language);
/*
* Return with no errors...
*/
return (0);
}
/*
* 'show_class_list()' - Show a list of classes...
*/
static void
show_class_list(http_t *http, /* I - HTTP connection */
cups_lang_t *language)/* I - Client's language */
{
ipp_t *request, /* IPP request */
*response; /* IPP response */
ipp_attribute_t *attr; /* IPP attribute */
/*
* Build a CUPS_GET_CLASSES request, which requires the following
* attributes:
*
* attributes-charset
* attributes-natural-language
*/
request = ippNew();
request->request.op.operation_id = CUPS_GET_CLASSES;
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);
/*
* Do the request and get back a response...
*/
if ((response = cupsDoRequest(http, request, "/classes/")) != NULL)
{
/*
* Loop through the classes returned in the list and display
* their devices...
*/
for (attr = response->attrs; attr != NULL; attr = attr->next)
{
/*
* Skip leading attributes until we hit a job...
*/
while (attr != NULL && attr->group_tag != IPP_TAG_PRINTER)
attr = attr->next;
if (attr == NULL)
break;
/*
* Show the class status for each class...
*/
while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER)
{
if (strcmp(attr->name, "printer-name") == 0 &&
attr->value_tag == IPP_TAG_NAME)
show_class_info(http, language, attr->values[0].string.text);
attr = attr->next;
}
if (attr == NULL)
break;
}
ippDelete(response);
}
}
/*
* 'show_class_info()' - Show class information.
*/
static void
show_class_info(http_t *http,
cups_lang_t *language,
char *name)
{
ipp_t *request, /* IPP request */
*response, /* IPP response */
*jobs; /* IPP Get Jobs response */
int jobcount; /* Number of jobs */
ipp_attribute_t *attr; /* IPP attribute */
char *message; /* Printer state message */
int accepting; /* Accepting requests? */
ipp_pstate_t pstate; /* Printer state */
char uri[HTTP_MAX_URI];/* Printer URI */
/*
* Build a 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);
sprintf(uri, "ipp://localhost/classes/%s", 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, uri + 15)) == NULL)
{
puts("<P>Unable to communicate with CUPS server!");
return;
}
if (response->request.status.status_code == IPP_NOT_FOUND)
{
puts("<P>Class does not exist.");
ippDelete(response);
return;
}
/*
* Grab the needed class attributes...
*/
if ((attr = ippFindAttribute(response, "printer-state", IPP_TAG_ENUM)) != NULL)
pstate = (ipp_pstate_t)attr->values[0].integer;
else
pstate = IPP_PRINTER_IDLE;
if ((attr = ippFindAttribute(response, "printer-state-message", IPP_TAG_TEXT)) != NULL)
message = attr->values[0].string.text;
else
message = NULL;
if ((attr = ippFindAttribute(response, "printer-is-accepting-jobs",
IPP_TAG_BOOLEAN)) != NULL)
accepting = attr->values[0].boolean;
else
accepting = 1;
if ((attr = ippFindAttribute(response, "printer-uri-supported", IPP_TAG_URI)) != NULL)
{
strcpy(uri, "http:");
strcpy(uri + 5, strchr(attr->values[0].string.text, '/'));
}
/*
* Display the class entry...
*/
puts("<TR>");
printf("<TD VALIGN=TOP><A HREF=\"%s\">%s</A></TD>\n", uri, name);
puts("<TD VALIGN=TOP><IMG SRC=\"/images/classes.gif\" ALIGN=\"LEFT\">");
printf("%s: %s, %s<BR>\n",
cupsLangString(language, CUPS_MSG_PRINTER_STATE),
cupsLangString(language, pstate == IPP_PRINTER_IDLE ? CUPS_MSG_IDLE :
pstate == IPP_PRINTER_PROCESSING ?
CUPS_MSG_PROCESSING : CUPS_MSG_STOPPED),
cupsLangString(language, accepting ? CUPS_MSG_ACCEPTING_JOBS :
CUPS_MSG_NOT_ACCEPTING_JOBS));
if (message)
printf("<BR CLEAR=ALL><I>\"%s\"</I>\n", message);
else if (!accepting || pstate == IPP_PRINTER_STOPPED)
puts("<BR CLEAR=ALL><I>\"Reason Unknown\"</I>");
puts("</TD>");
/*
* Show a list of jobs as needed...
*/
if (pstate != IPP_PRINTER_IDLE)
{
/*
* Build an IPP_GET_JOBS request, which requires the following
* attributes:
*
* attributes-charset
* attributes-natural-language
* printer-uri
*/
request = ippNew();
request->request.op.operation_id = IPP_GET_JOBS;
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);
sprintf(uri, "ipp://localhost/printers/%s", name);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
"printer-uri", NULL, uri);
jobs = cupsDoRequest(http, request, uri + 15);
}
else
jobs = NULL;
puts("<TD VALIGN=\"TOP\">");
jobcount = 0;
if (jobs != NULL)
{
char *username; /* Pointer to job-originating-user-name */
int jobid, /* job-id */
size; /* job-k-octets */
for (attr = jobs->attrs; attr != NULL; attr = attr->next)
{
/*
* Skip leading attributes until we hit a job...
*/
while (attr != NULL && attr->group_tag != IPP_TAG_JOB)
attr = attr->next;
if (attr == NULL)
break;
/*
* Pull the needed attributes from this job...
*/
jobid = 0;
size = 0;
username = NULL;
while (attr != NULL && attr->group_tag == IPP_TAG_JOB)
{
if (strcmp(attr->name, "job-id") == 0 &&
attr->value_tag == IPP_TAG_INTEGER)
jobid = attr->values[0].integer;
if (strcmp(attr->name, "job-k-octets") == 0 &&
attr->value_tag == IPP_TAG_INTEGER)
size = attr->values[0].integer;
if (strcmp(attr->name, "job-originating-user-name") == 0 &&
attr->value_tag == IPP_TAG_NAME)
username = attr->values[0].string.text;
attr = attr->next;
}
/*
* Display the job if it matches the current class...
*/
if (username != NULL)
{
jobcount ++;
printf("<A HREF=\"/jobs/%d\">%s-%d %s %dk</A><BR>\n", jobid, name,
jobid, username, size);
}
if (attr == NULL)
break;
}
ippDelete(jobs);
}
if (jobcount == 0)
puts("None");
puts("</TD>");
puts("</TR>");
ippDelete(response);
}
/*
* End of "$Id$".
*/
+577
Ver Arquivo
@@ -0,0 +1,577 @@
/*
* "$Id$"
*
* Job status CGI for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* Contents:
*
* main() - Main entry for CGI.
* show_job_list() - Show a list of jobs...
* show_job_info() - Show job information.
*/
/*
* Include necessary headers...
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <cups/cups.h>
#include <cups/language.h>
#include <cups/debug.h>
/*
* Local functions...
*/
static void show_job_list(http_t *http, cups_lang_t *language);
static void show_job_info(http_t *http, cups_lang_t *language,
char *name);
/*
* 'main()' - Main entry for CGI.
*/
int /* O - Exit status */
main(int argc, /* I - Number of command-line arguments */
char *argv[]) /* I - Command-line arguments */
{
cups_lang_t *language; /* Language information */
char *job; /* Job name */
http_t *http; /* Connection to the server */
setbuf(stdout, NULL);
/*
* Get the request language...
*/
language = cupsLangDefault();
/*
* Connect to the HTTP server...
*/
http = httpConnect("localhost", ippPort());
/*
* Tell the client to expect HTML...
*/
printf("Content-Type: text/html;charset=%s\n\n", cupsLangEncoding(language));
/*
* See if we need to show a list of jobs or the status of a
* single job...
*/
job = argv[0];
if (strcmp(job, "/") == 0 || strcmp(job, "jobs.cgi") == 0)
job = NULL;
/*
* Print the standard header...
*/
puts("<HTML>");
puts("<HEAD>");
if (job)
puts("<META HTTP-EQUIV=\"Refresh\" CONTENT=\"10\">");
else
puts("<META HTTP-EQUIV=\"Refresh\" CONTENT=\"30\">");
printf("<TITLE>%s on %s - Common UNIX Printing System</TITLE>\n",
job == NULL ? "Jobs" : job, getenv("SERVER_NAME"));
puts("<LINK REL=STYLESHEET TYPE=\"text/css\" HREF=\"/cups.css\">");
puts("<MAP NAME=\"navbar\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"10,10,85,30\" HREF=\"/printers\" ALT=\"Current Printer Status\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"95,10,175,30\" HREF=\"/classes\" ALT=\"Current Printer Classes Status\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"185,10,235,30\" HREF=\"/jobs\" ALT=\"Current Jobs Status\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"245,10,395,30\" HREF=\"/documentation.html\" ALT=\"Read CUPS Documentation On-Line\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"405,10,490,30\" HREF=\"http://www.cups.org\" ALT=\"Download the Current CUPS Software\">");
puts("</MAP>");
puts("</HEAD>");
puts("<BODY>");
puts("<P ALIGN=CENTER>");
puts("<A HREF=\"http://www.easysw.com\" ALT=\"Easy Software Products Home Page\">");
puts("<IMG SRC=\"/images/logo.gif\" WIDTH=\"71\" HEIGHT=\"40\" BORDER=0 ALT=\"Easy Software Products Home Page\"></A>");
puts("<IMG SRC=\"/images/navbar.gif\" WIDTH=\"540\" HEIGHT=\"40\" USEMAP=\"#navbar\" BORDER=0>");
fflush(stdout);
/*
* Show the information...
*/
if (job == NULL)
show_job_list(http, language);
else
show_job_info(http, language, job);
/*
* Write a standard trailer...
*/
puts("<HR>");
puts("<P>The Common UNIX Printing System, CUPS, and the CUPS logo are the");
puts("trademark property of <A HREF=\"http://www.easysw.com\">Easy Software");
puts("Products</A>. CUPS is copyright 1997-1999 by Easy Software Products,");
puts("All Rights Reserved.");
puts("</BODY>");
puts("</HTML>");
/*
* Close the HTTP server connection...
*/
httpClose(http);
cupsLangFree(language);
/*
* Return with no errors...
*/
return (0);
}
/*
* 'show_job_list()' - Show a list of jobs...
*/
static void
show_job_list(http_t *http, /* I - HTTP connection */
cups_lang_t *language) /* I - Client's language */
{
ipp_t *request, /* IPP request */
*response; /* IPP response */
ipp_attribute_t *attr; /* IPP attribute */
char *job_uri, /* job-uri */
*printer_uri, /* job-printer-uri */
*job_name, /* job-name */
*job_user; /* job-originating-user-name */
int job_id, /* job-id */
job_priority, /* job-priority */
job_k_octets, /* job-k-octets */
copies; /* copies */
ipp_jstate_t job_state; /* job-state */
printf("<H1>Jobs on %s</H1>\n", getenv("SERVER_NAME"));
/*
* Build an IPP_GET_JOBS request, which requires the following
* attributes:
*
* attributes-charset
* attributes-natural-language
* job-uri
*/
request = ippNew();
request->request.op.operation_id = IPP_GET_JOBS;
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);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri",
NULL, "ipp://localhost/jobs/");
/*
* Do the request and get back a response...
*/
if ((response = cupsDoRequest(http, request, "/jobs/")) != NULL)
{
/*
* Do a table for the jobs...
*/
puts("<CENTER>");
puts("<TABLE WIDTH=\"90%\" BORDER=\"1\">");
puts("<TR>");
printf("<TH>%s</TH>\n", cupsLangString(language, CUPS_MSG_PRINT_JOBS));
printf("<TH>%s</TH>\n", cupsLangString(language, CUPS_MSG_JOB_STATE));
printf("<TH>%s</TH>\n", cupsLangString(language, CUPS_MSG_JOB_NAME));
printf("<TH>%s</TH>\n", cupsLangString(language, CUPS_MSG_USER_NAME));
printf("<TH>%s</TH>\n", cupsLangString(language, CUPS_MSG_PRIORITY));
printf("<TH>%s</TH>\n", cupsLangString(language, CUPS_MSG_COPIES));
printf("<TH>%s</TH>\n", cupsLangString(language, CUPS_MSG_FILE_SIZE));
puts("</TR>");
/*
* Loop through the jobs returned in the list and display
* their devices...
*/
for (attr = response->attrs; attr != NULL; attr = attr->next)
{
/*
* Skip leading attributes until we hit a job...
*/
while (attr != NULL && attr->group_tag != IPP_TAG_JOB)
attr = attr->next;
if (attr == NULL)
break;
/*
* Show the job status for each job...
*/
job_uri = NULL;
printer_uri = NULL;
job_name = "unknown";
job_user = "unknown";
job_id = 0;
job_priority = 50;
job_k_octets = 0;
copies = 1;
job_state = IPP_JOB_PENDING;
while (attr != NULL && attr->group_tag == IPP_TAG_JOB)
{
if (strcmp(attr->name, "job-uri") == 0 &&
attr->value_tag == IPP_TAG_URI)
job_uri = attr->values[0].string.text;
if (strcmp(attr->name, "job-printer-uri") == 0 &&
attr->value_tag == IPP_TAG_URI)
printer_uri = attr->values[0].string.text;
if (strcmp(attr->name, "job-name") == 0 &&
attr->value_tag == IPP_TAG_NAME)
job_name = attr->values[0].string.text;
if (strcmp(attr->name, "job-originating-user-name") == 0 &&
attr->value_tag == IPP_TAG_NAME)
job_user = attr->values[0].string.text;
if (strcmp(attr->name, "job-id") == 0 &&
attr->value_tag == IPP_TAG_INTEGER)
job_id = attr->values[0].integer;
if (strcmp(attr->name, "job-priority") == 0 &&
attr->value_tag == IPP_TAG_INTEGER)
job_priority = attr->values[0].integer;
if (strcmp(attr->name, "job-k-octets") == 0 &&
attr->value_tag == IPP_TAG_INTEGER)
job_k_octets = attr->values[0].integer;
if (strcmp(attr->name, "copies") == 0 &&
attr->value_tag == IPP_TAG_INTEGER)
copies = attr->values[0].integer;
if (strcmp(attr->name, "job-state") == 0 &&
attr->value_tag == IPP_TAG_ENUM)
job_state = (ipp_jstate_t)attr->values[0].integer;
attr = attr->next;
}
/*
* See if we have everything needed...
*/
if (job_id && job_uri != NULL && printer_uri != NULL)
{
puts("<TR>");
printf("<TD><A HREF=\"http://%s:%s/jobs/%d\">%s-%d</A></TD>\n",
getenv("SERVER_NAME"), getenv("SERVER_PORT"), job_id,
strrchr(printer_uri, '/') + 1, job_id);
printf("<TD>%s</TD>\n", job_state == IPP_JOB_PROCESSING ?
cupsLangString(language, CUPS_MSG_PROCESSING) :
cupsLangString(language, CUPS_MSG_PENDING));
printf("<TD>%s</TD>\n", job_name);
printf("<TD>%s</TD>\n", job_user);
printf("<TD>%d</TD>\n", job_priority);
printf("<TD>%d</TD>\n", copies);
printf("<TD>%dk</TD>\n", job_k_octets);
puts("</TR>");
}
if (attr == NULL)
break;
}
ippDelete(response);
puts("</TABLE>");
puts("</CENTER>");
}
else
puts("<P>No jobs found.");
}
/*
* 'show_job_info()' - Show job information.
*/
static void
show_job_info(http_t *http, /* I - Server connection */
cups_lang_t *language, /* I - Language */
char *name) /* I - Job "name" */
{
int i; /* Looping var */
ipp_t *request, /* IPP request */
*response; /* IPP response */
ipp_attribute_t *attr; /* IPP attribute */
char uri[HTTP_MAX_URI];/* Real URI */
char *job_uri, /* job-uri */
*printer_uri, /* job-printer-uri */
*job_name, /* job-name */
*job_user; /* job-originating-user-name */
int job_id, /* job-id */
job_priority, /* job-priority */
job_k_octets; /* job-k-octets */
ipp_jstate_t job_state; /* job-state */
/*
* Build an IPP_GET_JOB_ATTRIBUTES request, which requires the following
* attributes:
*
* attributes-charset
* attributes-natural-language
* job-uri
*/
request = ippNew();
request->request.op.operation_id = IPP_GET_JOB_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);
sprintf(uri, "ipp://localhost/jobs/%s", name);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL, uri);
/*
* Do the request and get back a response...
*/
if ((response = cupsDoRequest(http, request, uri + 15)) == NULL)
{
puts("<P>Unable to communicate with CUPS server!");
return;
}
if (response->request.status.status_code == IPP_NOT_FOUND)
{
puts("<P>Job does not exist or has completed.");
ippDelete(response);
return;
}
/*
* Get the job status for this job...
*/
if ((attr = ippFindAttribute(response, "job-uri", IPP_TAG_URI)) != NULL)
job_uri = attr->values[0].string.text;
else
{
puts("<P>Missing job-uri attribute!");
ippDelete(request);
return;
}
if ((attr = ippFindAttribute(response, "job-printer-uri", IPP_TAG_URI)) != NULL)
printer_uri = attr->values[0].string.text;
else
{
puts("<P>Missing job-printer-uri attribute!");
ippDelete(request);
return;
}
if ((attr = ippFindAttribute(response, "job-name", IPP_TAG_NAME)) != NULL)
job_name = attr->values[0].string.text;
else
job_name = "unknown";
if ((attr = ippFindAttribute(response, "job-originating-user-name",
IPP_TAG_NAME)) != NULL)
job_user = attr->values[0].string.text;
else
job_user = "unknown";
if ((attr = ippFindAttribute(response, "job-id", IPP_TAG_INTEGER)) != NULL)
job_id = attr->values[0].integer;
else
{
puts("<P>Missing job-id attribute!");
ippDelete(request);
return;
}
if ((attr = ippFindAttribute(response, "job-priority", IPP_TAG_INTEGER)) != NULL)
job_priority = attr->values[0].integer;
else
job_priority = 50;
if ((attr = ippFindAttribute(response, "job-k-octets", IPP_TAG_INTEGER)) != NULL)
job_k_octets = attr->values[0].integer;
else
job_k_octets = 0;
if ((attr = ippFindAttribute(response, "job-state", IPP_TAG_ENUM)) != NULL)
job_state = (ipp_jstate_t)attr->values[0].integer;
else
job_state = IPP_JOB_PENDING;
/*
* Do a table for the job...
*/
printf("<H1><A HREF=\"http://%s:%s/printers/%s\">%s-%d</A></H1>\n",
getenv("SERVER_NAME"), getenv("SERVER_PORT"),
strrchr(printer_uri, '/') + 1, strrchr(printer_uri, '/') + 1, job_id);
puts("<CENTER>");
puts("<TABLE WIDTH=\"90%\" BORDER=\"1\">");
puts("<TR>");
printf("<TH>%s</TH>\n", cupsLangString(language, CUPS_MSG_JOB_STATE));
printf("<TD>%s</TD>\n", job_state == IPP_JOB_PROCESSING ?
cupsLangString(language, CUPS_MSG_PROCESSING) :
cupsLangString(language, CUPS_MSG_PENDING));
puts("</TR>");
puts("<TR>");
printf("<TH>%s</TH>\n", cupsLangString(language, CUPS_MSG_JOB_NAME));
printf("<TD>%s</TD>\n", job_name);
puts("</TR>");
puts("<TR>");
printf("<TH>%s</TH>\n", cupsLangString(language, CUPS_MSG_USER_NAME));
printf("<TD>%s</TD>\n", job_user);
puts("</TR>");
puts("<TR>");
printf("<TH>%s</TH>\n", cupsLangString(language, CUPS_MSG_PRIORITY));
printf("<TD>%d</TD>\n", job_priority);
puts("</TR>");
puts("<TR>");
printf("<TH>%s</TH>\n", cupsLangString(language, CUPS_MSG_FILE_SIZE));
printf("<TD>%dk</TD>\n", job_k_octets);
puts("</TR>");
puts("<TR VALIGN=\"TOP\">");
printf("<TH>%s</TH>\n", cupsLangString(language, CUPS_MSG_OPTIONS));
puts("<TD>");
for (attr = response->attrs; attr != NULL; attr = attr->next)
{
if (attr->group_tag != IPP_TAG_JOB &&
attr->group_tag != IPP_TAG_EXTENSION)
continue;
if (strcmp(attr->name, "job-uri") == 0 ||
strcmp(attr->name, "job-printer-uri") == 0 ||
strcmp(attr->name, "job-name") == 0 ||
strcmp(attr->name, "job-originating-user-name") == 0 ||
strcmp(attr->name, "job-id") == 0 ||
strcmp(attr->name, "job-priority") == 0 ||
strcmp(attr->name, "job-k-octets") == 0 ||
strcmp(attr->name, "job-state") == 0)
continue;
if (attr->value_tag != IPP_TAG_BOOLEAN)
printf("%s=", attr->name);
for (i = 0; i < attr->num_values; i ++)
{
if (i)
putchar(',');
switch (attr->value_tag)
{
case IPP_TAG_INTEGER :
case IPP_TAG_ENUM :
printf("%d", attr->values[i].integer);
break;
case IPP_TAG_BOOLEAN :
if (!attr->values[i].boolean)
printf("no");
case IPP_TAG_NOVALUE :
fputs(attr->name, stdout);
break;
case IPP_TAG_RANGE :
printf("%d-%d", attr->values[i].range.lower,
attr->values[i].range.upper);
break;
case IPP_TAG_RESOLUTION :
printf("%dx%d%s", attr->values[i].resolution.xres,
attr->values[i].resolution.yres,
attr->values[i].resolution.units == IPP_RES_PER_INCH ?
"dpi" : "dpc");
break;
case IPP_TAG_STRING :
case IPP_TAG_TEXT :
case IPP_TAG_NAME :
case IPP_TAG_KEYWORD :
case IPP_TAG_CHARSET :
case IPP_TAG_LANGUAGE :
case IPP_TAG_MIMETYPE :
case IPP_TAG_URI :
printf("\"%s\"", attr->values[i].string.text);
break;
}
}
puts("<BR>");
}
puts("</TD>");
puts("</TR>");
puts("</TABLE></CENTER>");
ippDelete(response);
}
/*
* End of "$Id$".
*/
+162 -146
Ver Arquivo
@@ -62,7 +62,6 @@ main(int argc, /* I - Number of command-line arguments */
http_t *http; /* Connection to the server */
setbuf(stdout, NULL);
/*
* Get the request language...
*/
@@ -104,11 +103,11 @@ main(int argc, /* I - Number of command-line arguments */
printer == NULL ? "Printers" : printer, getenv("SERVER_NAME"));
puts("<LINK REL=STYLESHEET TYPE=\"text/css\" HREF=\"/cups.css\">");
puts("<MAP NAME=\"navbar\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"10,10,100,35\" HREF=\"/printers\" ALT=\"Current Printer Status\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"115,10,205,35\" HREF=\"/classes\" ALT=\"Current Printer Classes Status\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"220,10,280,35\" HREF=\"/jobs\" ALT=\"Current Jobs Status\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"295,10,470,35\" HREF=\"/documentation.html\" ALT=\"Read CUPS Documentation On-Line\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"485,10,590,35\" HREF=\"http://www.cups.org\" ALT=\"Download the Current CUPS Software\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"10,10,85,30\" HREF=\"/printers\" ALT=\"Current Printer Status\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"95,10,175,30\" HREF=\"/classes\" ALT=\"Current Printer Classes Status\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"185,10,235,30\" HREF=\"/jobs\" ALT=\"Current Jobs Status\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"245,10,395,30\" HREF=\"/documentation.html\" ALT=\"Read CUPS Documentation On-Line\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"405,10,490,30\" HREF=\"http://www.cups.org\" ALT=\"Download the Current CUPS Software\">");
puts("</MAP>");
puts("</HEAD>");
puts("<BODY>");
@@ -197,11 +196,11 @@ show_printer_list(http_t *http, /* I - HTTP connection */
request->request.op.request_id = 1;
attr = ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, cupsLangEncoding(language));
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, cupsLangEncoding(language));
attr = ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
/*
* Do the request and get back a response...
@@ -265,7 +264,7 @@ show_printer_info(http_t *http,
char *message; /* Printer state message */
int accepting; /* Accepting requests? */
ipp_pstate_t pstate; /* Printer state */
char uri[1024]; /* Printer URI */
char uri[HTTP_MAX_URI];/* Printer URI */
/*
@@ -296,163 +295,180 @@ show_printer_info(http_t *http,
* Do the request and get back a response...
*/
if ((response = cupsDoRequest(http, request, uri + 15)) != NULL)
if ((response = cupsDoRequest(http, request, uri + 15)) == NULL)
{
puts("<P>Unable to communicate with CUPS server!");
return;
}
if (response->request.status.status_code == IPP_NOT_FOUND)
{
puts("<P>Printer does not exist.");
ippDelete(response);
return;
}
/*
* Grab the needed printer attributes...
*/
if ((attr = ippFindAttribute(response, "printer-state", IPP_TAG_ENUM)) != NULL)
pstate = (ipp_pstate_t)attr->values[0].integer;
else
pstate = IPP_PRINTER_IDLE;
if ((attr = ippFindAttribute(response, "printer-state-message", IPP_TAG_TEXT)) != NULL)
message = attr->values[0].string.text;
else
message = NULL;
if ((attr = ippFindAttribute(response, "printer-is-accepting-jobs",
IPP_TAG_BOOLEAN)) != NULL)
accepting = attr->values[0].boolean;
else
accepting = 1;
if ((attr = ippFindAttribute(response, "printer-uri-supported", IPP_TAG_URI)) != NULL)
{
strcpy(uri, "http:");
strcpy(uri + 5, strchr(attr->values[0].string.text, '/'));
}
/*
* Display the printer entry...
*/
puts("<TR>");
printf("<TD VALIGN=TOP><A HREF=\"%s\">%s</A></TD>\n", uri, name);
printf("<TD VALIGN=TOP><IMG SRC=\"/images/printer-%s.gif\" ALIGN=\"LEFT\">\n",
pstate == IPP_PRINTER_IDLE ? "idle" :
pstate == IPP_PRINTER_PROCESSING ? "processing" : "stopped");
printf("%s: %s, %s<BR>\n",
cupsLangString(language, CUPS_MSG_PRINTER_STATE),
cupsLangString(language, pstate == IPP_PRINTER_IDLE ? CUPS_MSG_IDLE :
pstate == IPP_PRINTER_PROCESSING ?
CUPS_MSG_PROCESSING : CUPS_MSG_STOPPED),
cupsLangString(language, accepting ? CUPS_MSG_ACCEPTING_JOBS :
CUPS_MSG_NOT_ACCEPTING_JOBS));
if (message)
printf("<BR CLEAR=ALL><I>\"%s\"</I>\n", message);
else if (!accepting || pstate == IPP_PRINTER_STOPPED)
puts("<BR CLEAR=ALL><I>\"Reason Unknown\"</I>");
puts("</TD>");
/*
* Show a list of jobs as needed...
*/
if (pstate != IPP_PRINTER_IDLE)
{
/*
* Grab the needed printer attributes...
* Build an IPP_GET_JOBS request, which requires the following
* attributes:
*
* attributes-charset
* attributes-natural-language
* printer-uri
*/
if ((attr = ippFindAttribute(response, "printer-state", IPP_TAG_ENUM)) != NULL)
pstate = (ipp_pstate_t)attr->values[0].integer;
else
pstate = IPP_PRINTER_IDLE;
request = ippNew();
if ((attr = ippFindAttribute(response, "printer-state-message", IPP_TAG_TEXT)) != NULL)
message = attr->values[0].string.text;
else
message = NULL;
request->request.op.operation_id = IPP_GET_JOBS;
request->request.op.request_id = 1;
if ((attr = ippFindAttribute(response, "printer-is-accepting-jobs",
IPP_TAG_BOOLEAN)) != NULL)
accepting = attr->values[0].boolean;
else
accepting = 1;
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL,
cupsLangEncoding(language));
/*
* Display the printer entry...
*/
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL,
language->language);
puts("<TR>");
sprintf(uri, "ipp://localhost/printers/%s", name);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
"printer-uri", NULL, uri);
printf("<TD VALIGN=TOP><A HREF=\"/printers/%s\">%s</A></TD>\n", name, name);
jobs = cupsDoRequest(http, request, uri + 15);
}
else
jobs = NULL;
printf("<TD VALIGN=TOP><IMG SRC=\"/images/printer-%s.gif\" ALIGN=\"LEFT\">\n",
pstate == IPP_PRINTER_IDLE ? "idle" :
pstate == IPP_PRINTER_PROCESSING ? "processing" : "stopped");
puts("<TD VALIGN=\"TOP\">");
jobcount = 0;
printf("%s: %s, %s<BR>\n",
cupsLangString(language, CUPS_MSG_PRINTER_STATE),
cupsLangString(language, pstate == IPP_PRINTER_IDLE ? CUPS_MSG_IDLE :
pstate == IPP_PRINTER_PROCESSING ?
CUPS_MSG_PROCESSING : CUPS_MSG_STOPPED),
cupsLangString(language, accepting ? CUPS_MSG_ACCEPTING_JOBS :
CUPS_MSG_NOT_ACCEPTING_JOBS));
if (message)
printf("<BR CLEAR=ALL><I>\"%s\"</I>\n", message);
else if (!accepting || pstate == IPP_PRINTER_STOPPED)
puts("<BR CLEAR=ALL><I>\"Reason Unknown\"</I>");
puts("</TD>");
/*
* Show a list of jobs as needed...
*/
if (pstate != IPP_PRINTER_IDLE)
{
/*
* Build an IPP_GET_JOBS request, which requires the following
* attributes:
*
* attributes-charset
* attributes-natural-language
* printer-uri
*/
request = ippNew();
request->request.op.operation_id = IPP_GET_JOBS;
request->request.op.request_id = 1;
attr = ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL,
cupsLangEncoding(language));
attr = ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL,
language->language);
attr = ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
"printer-uri", NULL, uri);
jobs = cupsDoRequest(http, request, uri + 15);
}
else
jobs = NULL;
puts("<TD VALIGN=\"TOP\">");
jobcount = 0;
if (jobs != NULL)
{
char *username; /* Pointer to job-originating-user-name */
int jobid, /* job-id */
if (jobs != NULL)
{
char *username; /* Pointer to job-originating-user-name */
int jobid, /* job-id */
size; /* job-k-octets */
for (attr = jobs->attrs; attr != NULL; attr = attr->next)
for (attr = jobs->attrs; attr != NULL; attr = attr->next)
{
/*
* Skip leading attributes until we hit a job...
*/
while (attr != NULL && attr->group_tag != IPP_TAG_JOB)
attr = attr->next;
if (attr == NULL)
break;
/*
* Pull the needed attributes from this job...
*/
jobid = 0;
size = 0;
username = NULL;
while (attr != NULL && attr->group_tag == IPP_TAG_JOB)
{
/*
* Skip leading attributes until we hit a job...
*/
if (strcmp(attr->name, "job-id") == 0 &&
attr->value_tag == IPP_TAG_INTEGER)
jobid = attr->values[0].integer;
while (attr != NULL && attr->group_tag != IPP_TAG_JOB)
attr = attr->next;
if (strcmp(attr->name, "job-k-octets") == 0 &&
attr->value_tag == IPP_TAG_INTEGER)
size = attr->values[0].integer;
if (attr == NULL)
break;
if (strcmp(attr->name, "job-originating-user-name") == 0 &&
attr->value_tag == IPP_TAG_NAME)
username = attr->values[0].string.text;
/*
* Pull the needed attributes from this job...
*/
jobid = 0;
size = 0;
username = NULL;
while (attr != NULL && attr->group_tag == IPP_TAG_JOB)
{
if (strcmp(attr->name, "job-id") == 0 &&
attr->value_tag == IPP_TAG_INTEGER)
jobid = attr->values[0].integer;
if (strcmp(attr->name, "job-k-octets") == 0 &&
attr->value_tag == IPP_TAG_INTEGER)
size = attr->values[0].integer;
if (strcmp(attr->name, "job-originating-user-name") == 0 &&
attr->value_tag == IPP_TAG_NAME)
username = attr->values[0].string.text;
attr = attr->next;
}
/*
* Display the job if it matches the current printer...
*/
if (username != NULL)
{
jobcount ++;
printf("<A HREF=\"/jobs/%d\">%s-%d %s %dk</A><BR>\n", jobid, name,
jobid, username, size);
}
if (attr == NULL)
break;
attr = attr->next;
}
ippDelete(jobs);
}
if (jobcount == 0)
puts("None");
puts("</TD>");
puts("</TR>");
/*
* Display the job if it matches the current printer...
*/
ippDelete(response);
if (username != NULL)
{
jobcount ++;
printf("<A HREF=\"/jobs/%d\">%s-%d %s %dk</A><BR>\n", jobid, name,
jobid, username, size);
}
if (attr == NULL)
break;
}
ippDelete(jobs);
}
if (jobcount == 0)
puts("None");
puts("</TD>");
puts("</TR>");
ippDelete(response);
}
+1 -1
Ver Arquivo
@@ -54,7 +54,7 @@ install:
else \
$(CP) $$file $(SERVERROOT)/conf ; \
fi ; \
end
done
#
# End of "$Id$".
+9 -9
Ver Arquivo
@@ -1,5 +1,5 @@
#
# "$Id: classes.conf 320 1999-05-13 20:40:14Z mike $"
# "$Id: classes.conf 333 1999-05-17 18:03:40Z mike $"
#
# Sample class configuration file for the Common UNIX Printing System
# (CUPS) scheduler.
@@ -40,33 +40,33 @@
# the default.
#
<Class sample>
#<Class sample>
#
# Info: the description for the class.
#
Info Acme LaserPrint 1000 Printers
#Info Acme LaserPrint 1000 Printers
#
# MoreInfo: a URL for more information on the printer.
#
MoreInfo http://www.acme.com/lp1000.html
#MoreInfo http://www.acme.com/lp1000.html
#
# Location: the location of the printer.
#
Location Room 101 in the activities building
#Location Room 101 in the activities building
#
# Printer: adds a printer to the class.
#
Printer sample@host1
Printer sample@host2
</Class>
#Printer sample
#Printer sample@host2
#</Class>
#
# End of "$Id: classes.conf 320 1999-05-13 20:40:14Z mike $".
# End of "$Id: classes.conf 333 1999-05-17 18:03:40Z mike $".
#
+32 -9
Ver Arquivo
@@ -1,5 +1,5 @@
#
# "$Id: cupsd.conf 327 1999-05-14 17:03:06Z mike $"
# "$Id: cupsd.conf 510 1999-07-09 14:20:15Z mike $"
#
# Sample configuration file for the Common UNIX Printing System (CUPS)
# scheduler.
@@ -53,6 +53,13 @@
#Port 80
Port 631
#
# MaxClients: controls the maximum number of simultaneous clients that
# will be handled. Defaults to 100.
#
#MaxClients 100
#
# User/Group: the user and group the server runs under. Normally this
# must be lp and sys, however you can configure things for another user
@@ -92,7 +99,7 @@ SystemGroup sys
# By default the compiled-in value.
#
#ServerRoot /var/spool/cups
#ServerRoot /var/cups
#
# AccessLog: the access log file; if this does not start with a leading /
@@ -110,6 +117,14 @@ SystemGroup sys
#ErrorLog logs/error_log
#
# PageLog: the page log file; if this does not start with a leading /
# then it is assumed to be relative to ServerRoot. By default set to
# "logs/page_log"
#
#PageLog logs/page_log
#
# LogLevel: controls the number of messages logged to the ErrorLog
# file and can be one of the following:
@@ -121,21 +136,21 @@ SystemGroup sys
# none Log nothing.
#
LogLevel warn
LogLevel info
#
# MaxLogSize: controls the maximum size of each log file before they are
# rotated. Defaults to 1048576 (1MB). Set to 0 to disable log rotating.
#
#MaxLogSize: 0
#MaxLogSize 0
#
# MaxRequestSize: controls the maximum size of print files. Set to 0 to
# disable this feature (defaults to 0.)
#
#MaxRequestSize: 0
#MaxRequestSize 0
#
# HostNameLookups: whether or not to do lookups on IP addresses to get a
@@ -256,10 +271,18 @@ LogLevel warn
# RIPCache: the amount of memory that each RIP should use to cache
# bitmaps. The value can be any real number followed by "k" for
# kilobytes, "m" for megabytes, "g" for gigabytes, or "t" for tiles
# (1 tile = 256x256 pixels.) Defaults to "32m" (32 megabytes).
# (1 tile = 256x256 pixels.) Defaults to "8m" (8 megabytes).
#
#RIPCache: 32m
#RIPCache 8m
#
# TempDir: the directory to put temporary files in. This directory must be
# writable by the user defined above! Defaults to "/var/tmp" or the value
# of the TMPDIR environment variable.
#
#TempDir /var/tmp
#
# Access permissions for each directory served by the scheduler.
@@ -269,7 +292,7 @@ LogLevel warn
# supported.
#
# AuthClass: the authorization class; currently only "Anonymous", "User",
# "System" (valid user belonging to group SystemGroupName), and "Group"
# "System" (valid user belonging to group SystemGroup), and "Group"
# (valid user belonging to the specified group) are supported.
#
# AuthGroupName: the group name for "Group" authorization.
@@ -320,5 +343,5 @@ Allow From 127.0.0.1
</Location>
#
# End of "$Id: cupsd.conf 327 1999-05-14 17:03:06Z mike $".
# End of "$Id: cupsd.conf 510 1999-07-09 14:20:15Z mike $".
#
+250
Ver Arquivo
@@ -0,0 +1,250 @@
#
# "$Id: cupsd.conf-personal 407 1999-06-17 20:02:43Z mike $"
#
# Scheduler configuration file for ESP Print Personal.
#
########################################################################
# #
# This is the CUPS configuration file. If you are familiar with #
# Apache or any of the other popular web servers, we've followed the #
# same format. Any configuration variable used here has the same #
# semantics as the corresponding variable in Apache. If we need #
# different functionality then a different name is used to avoid #
# confusion... #
# #
########################################################################
#
# Ports/addresses that we listen to. The default port 631 is reserved
# for the Internet Printing Protocol (IPP) and is what we use here.
#
# You can have multiple Listen lines to listen to more than one
# port:
#
# Listen 127.0.0.1:80
# Listen 127.0.0.1:631
#
# For ESP Print Personal, we can only listen on the local host...
#
#Listen 127.0.0.1:80
Listen 127.0.0.1:631
#
# User/Group: the user and group the server runs under. Normally this
# must be lp and sys, however you can configure things for another user
# or group as needed.
#
# Note: the server must be run initially as root to support the
# default IPP port of 631. It changes users whenever an external
# program is run...
#
User lp
Group sys
#
# SystemGroup: the group name for "System" (printer administration)
# access.
#
SystemGroup sys
#
# ServerName: the hostname of your server, as advertised to the world.
# By default CUPS will use the hostname of the system.
#
#ServerName myhost.domain.com
#
# ServerAdmin: the email address to send all complaints/problems to.
# By default CUPS will use "root@hostname".
#
#ServerAdmin root@your.domain.com
#
# ServerRoot: the root directory for the scheduler.
# By default the compiled-in value.
#
#ServerRoot /var/cups
#
# AccessLog: the access log file; if this does not start with a leading /
# then it is assumed to be relative to ServerRoot. By default set to
# "logs/access_log"
#
#AccessLog logs/access_log
#
# ErrorLog: the error log file; if this does not start with a leading /
# then it is assumed to be relative to ServerRoot. By default set to
# "logs/error_log"
#
#ErrorLog logs/error_log
#
# PageLog: the page log file; if this does not start with a leading /
# then it is assumed to be relative to ServerRoot. By default set to
# "logs/page_log"
#
#PageLog logs/page_log
#
# LogLevel: controls the number of messages logged to the ErrorLog
# file and can be one of the following:
#
# debug Log everything.
# info Log all requests and state changes.
# warn Log errors and warnings.
# error Log only errors.
# none Log nothing.
#
LogLevel info
#
# MaxLogSize: controls the maximum size of each log file before they are
# rotated. Defaults to 1048576 (1MB). Set to 0 to disable log rotating.
#
#MaxLogSize 0
#
# MaxRequestSize: controls the maximum size of print files. Set to 0 to
# disable this feature (defaults to 0.)
#
#MaxRequestSize 0
#
# HostNameLookups: whether or not to do lookups on IP addresses to get a
# fully-qualified hostname. This defaults to Off for performance reasons...
#
#HostNameLookups On
#
# Timeout: the timeout before requests time out. Default is 300 seconds.
#
#Timeout 300
#
# KeepAlive: whether or not to support the Keep-Alive connection
# option. Default is on.
#
#KeepAlive On
#
# KeepAliveTimeout: the timeout before Keep-Alive connections are
# automatically closed. Default is 60 seconds.
#
#KeepAliveTimeout 60
#
# Browsing: not available in ESP Print Personal.
#
Browsing Off
#
# DocumentRoot: the root directory for HTTP documents that are served.
# By default the compiled in directory.
#
#DocumentRoot /usr/share/cups/doc
#
# DefaultLanguage: the default language if not specified by the browser.
# If not specified, the current locale is used.
#
#DefaultLanguage en
#
# DefaultCharset: the default character set to use. If not specified,
# defaults to iso-8859-1. Note that this can also be overridden in
# HTML documents...
#
#DefaultCharset iso-8859-1
#
# RIPCache: the amount of memory that each RIP should use to cache
# bitmaps. The value can be any real number followed by "k" for
# kilobytes, "m" for megabytes, "g" for gigabytes, or "t" for tiles
# (1 tile = 256x256 pixels.) Defaults to "32m" (32 megabytes).
#
#RIPCache: 32m
#
# Access permissions for each directory served by the scheduler.
# Locations are relative to DocumentRoot...
#
# AuthType: the authorization to use; currently only "Basic" authorization is
# supported.
#
# AuthClass: the authorization class; currently only "Anonymous", "User",
# "System" (valid user belonging to group SystemGroup), and "Group"
# (valid user belonging to the specified group) are supported.
#
# AuthGroupName: the group name for "Group" authorization.
#
# Order: the order of Allow/Deny processing.
#
# Allow: allows access from the specified hostname, domain, IP address, or
# network.
#
# Deny: denies access from the specified hostname, domain, IP address, or
# network.
#
<Location />
</Location>
<Location /printers>
#
# You may wish to limit access to printers and classes, either with Allow
# and Deny lines, or by requiring a username and password.
#
## Require a username and password
#AuthType Basic
#AuthClass User
## Restrict access to local domain
#Order Deny,Allow
#Deny From All
#Allow From .mydomain.com
</Location>
<Location /admin>
#
# You definitely will want to limit access to the administration tools.
# The default configuration requires a local connection from a user who
# is a member of group "sys" to do any admin tasks. You can change the
# group name using the SystemGroup directive.
#
AuthType Basic
AuthClass System
## Restrict access to local domain
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
</Location>
#
# End of "$Id: cupsd.conf-personal 407 1999-06-17 20:02:43Z mike $".
#
+313
Ver Arquivo
@@ -0,0 +1,313 @@
#
# "$Id: cupsd.conf-professional 407 1999-06-17 20:02:43Z mike $"
#
# Scheduler configuration file for ESP Print Professional.
#
########################################################################
# #
# This is the CUPS configuration file. If you are familiar with #
# Apache or any of the other popular web servers, we've followed the #
# same format. Any configuration variable used here has the same #
# semantics as the corresponding variable in Apache. If we need #
# different functionality then a different name is used to avoid #
# confusion... #
# #
########################################################################
#
# Ports/addresses that we listen to. The default port 631 is reserved
# for the Internet Printing Protocol (IPP) and is what we use here.
#
# You can have multiple Port/Listen lines to listen to more than one
# port or address, or to restrict access:
#
# Port 80
# Port 631
# Listen hostname
# Listen hostname:80
# Listen hostname:631
# Listen 1.2.3.4
# Listen 1.2.3.4:631
#
#Port 80
Port 631
#
# User/Group: the user and group the server runs under. Normally this
# must be lp and sys, however you can configure things for another user
# or group as needed.
#
# Note: the server must be run initially as root to support the
# default IPP port of 631. It changes users whenever an external
# program is run...
#
User lp
Group sys
#
# SystemGroup: the group name for "System" (printer administration)
# access.
#
SystemGroup sys
#
# ServerName: the hostname of your server, as advertised to the world.
# By default CUPS will use the hostname of the system.
#
#ServerName myhost.domain.com
#
# ServerAdmin: the email address to send all complaints/problems to.
# By default CUPS will use "root@hostname".
#
#ServerAdmin root@your.domain.com
#
# ServerRoot: the root directory for the scheduler.
# By default the compiled-in value.
#
#ServerRoot /var/cups
#
# AccessLog: the access log file; if this does not start with a leading /
# then it is assumed to be relative to ServerRoot. By default set to
# "logs/access_log"
#
#AccessLog logs/access_log
#
# ErrorLog: the error log file; if this does not start with a leading /
# then it is assumed to be relative to ServerRoot. By default set to
# "logs/error_log"
#
#ErrorLog logs/error_log
#
# PageLog: the page log file; if this does not start with a leading /
# then it is assumed to be relative to ServerRoot. By default set to
# "logs/page_log"
#
#PageLog logs/page_log
#
# LogLevel: controls the number of messages logged to the ErrorLog
# file and can be one of the following:
#
# debug Log everything.
# info Log all requests and state changes.
# warn Log errors and warnings.
# error Log only errors.
# none Log nothing.
#
LogLevel info
#
# MaxLogSize: controls the maximum size of each log file before they are
# rotated. Defaults to 1048576 (1MB). Set to 0 to disable log rotating.
#
#MaxLogSize 0
#
# MaxRequestSize: controls the maximum size of print files. Set to 0 to
# disable this feature (defaults to 0.)
#
#MaxRequestSize 0
#
# HostNameLookups: whether or not to do lookups on IP addresses to get a
# fully-qualified hostname. This defaults to Off for performance reasons...
#
#HostNameLookups On
#
# Timeout: the timeout before requests time out. Default is 300 seconds.
#
#Timeout 300
#
# KeepAlive: whether or not to support the Keep-Alive connection
# option. Default is on.
#
#KeepAlive On
#
# KeepAliveTimeout: the timeout before Keep-Alive connections are
# automatically closed. Default is 60 seconds.
#
#KeepAliveTimeout 60
#
# ImplicitClasses: whether or not to use implicit classes.
#
# Printer classes can be specified explicitly in the classes.conf
# file, implicitly based upon the printers available on the LAN, or
# both.
#
# When ImplicitClasses is On, printers on the LAN with the same name
# (e.g. Acme-LaserPrint-1000) will be put into a class with the same
# name. This allows you to setup multiple redundant queues on a LAN
# without a lot of administrative difficulties. If a user sends a
# job to Acme-LaserPrint-1000, the job will go to the first available
# queue.
#
# Enabled by default.
#
#ImplicitClasses On
#
# Browsing: whether or not to broadcast printer information to
# other CUPS servers. Enabled by default.
#
#Browsing On
#
# BrowseInterval: the time between browsing updates in seconds. Default
# is 30 seconds.
#
# Note that browsing information is sent whenever a printer's state changes
# as well, so this represents the maximum time between updates.
#
#BrowseInterval 30
#
# BrowseTimeout: the timeout for network printers - if we don't
# get an update within this time the printer will be removed
# from the printer list. This number definitely should not be
# less the BrowseInterval value for obvious reasons. Defaults
# to 300 seconds.
#
#BrowseTimeout 300
#
# BrowsePort: the port used for UDP broadcasts. By default this is
# the IPP port; if you change this you need to do it on all servers.
# Only one BrowsePort is recognized.
#
#BrowsePort 631
#
# 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
#
# DocumentRoot: the root directory for HTTP documents that are served.
# By default the compiled in directory.
#
#DocumentRoot /usr/share/cups/doc
#
# DefaultLanguage: the default language if not specified by the browser.
# If not specified, the current locale is used.
#
#DefaultLanguage en
#
# DefaultCharset: the default character set to use. If not specified,
# defaults to iso-8859-1. Note that this can also be overridden in
# HTML documents...
#
#DefaultCharset iso-8859-1
#
# RIPCache: the amount of memory that each RIP should use to cache
# bitmaps. The value can be any real number followed by "k" for
# kilobytes, "m" for megabytes, "g" for gigabytes, or "t" for tiles
# (1 tile = 256x256 pixels.) Defaults to "32m" (32 megabytes).
#
#RIPCache: 32m
#
# Access permissions for each directory served by the scheduler.
# Locations are relative to DocumentRoot...
#
# AuthType: the authorization to use; currently only "Basic" authorization is
# supported.
#
# AuthClass: the authorization class; currently only "Anonymous", "User",
# "System" (valid user belonging to group SystemGroup), and "Group"
# (valid user belonging to the specified group) are supported.
#
# AuthGroupName: the group name for "Group" authorization.
#
# Order: the order of Allow/Deny processing.
#
# Allow: allows access from the specified hostname, domain, IP address, or
# network.
#
# Deny: denies access from the specified hostname, domain, IP address, or
# network.
#
<Location />
</Location>
<Location /printers>
#
# You may wish to limit access to printers and classes, either with Allow
# and Deny lines, or by requiring a username and password.
#
## Require a username and password
#AuthType Basic
#AuthClass User
## Restrict access to local domain
#Order Deny,Allow
#Deny From All
#Allow From .mydomain.com
</Location>
<Location /admin>
#
# You definitely will want to limit access to the administration tools.
# The default configuration requires a local connection from a user who
# is a member of group "sys" to do any admin tasks. You can change the
# group name using the SystemGroup directive.
#
AuthType Basic
AuthClass System
## Restrict access to local domain
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
</Location>
#
# End of "$Id: cupsd.conf-professional 407 1999-06-17 20:02:43Z mike $".
#
+5 -5
Ver Arquivo
@@ -1,5 +1,5 @@
#
# "$Id: mime.convs 237 1999-04-21 19:29:35Z mike $"
# "$Id: mime.convs 530 1999-07-13 14:11:17Z mike $"
#
# MIME converts file for the Common UNIX Printing System (CUPS).
#
@@ -41,12 +41,12 @@
# PostScript filters
#
application/msword application/postscript 50 mswordtops
application/pdf application/postscript 50 pdftops
#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 htmltops
text/plain application/postscript 50 texttops
########################################################################
@@ -58,5 +58,5 @@ image/* application/vnd.cups-raster 50 imagetoraster
application/vnd.cups-postscript application/vnd.cups-raster 50 pstoraster
#
# End of "$Id: mime.convs 237 1999-04-21 19:29:35Z mike $".
# End of "$Id: mime.convs 530 1999-07-13 14:11:17Z mike $".
#
+3 -3
Ver Arquivo
@@ -1,5 +1,5 @@
#
# "$Id: mime.types 185 1999-03-24 18:38:50Z mike $"
# "$Id: mime.types 487 1999-06-30 21:07:52Z mike $"
#
# MIME types file for the Common UNIX Printing System (CUPS).
#
@@ -114,10 +114,10 @@ text/plain txt printable(0,1024)
# CUPS-specific types...
#
application/vnd.cups-postscript
application/vnd.cups-postscript string(0,<1B>%-12345X)
application/vnd.cups-raster string(0,"RaSt") string(0,"tSaR")
application/vnd.cups-raw
#
# End of "$Id: mime.types 185 1999-03-24 18:38:50Z mike $".
# End of "$Id: mime.types 487 1999-06-30 21:07:52Z mike $".
#
+8 -20
Ver Arquivo
@@ -1,5 +1,5 @@
#
# "$Id: printers.conf 320 1999-05-13 20:40:14Z mike $"
# "$Id: printers.conf 334 1999-05-17 18:11:26Z mike $"
#
# Sample printer configuration file for the Common UNIX Printing System
# (CUPS) scheduler.
@@ -40,24 +40,24 @@
# default.
#
<Printer sample>
#<Printer sample>
#
# Info: the description for the printer.
#
Info Acme LaserPrint 1000
#Info Acme LaserPrint 1000
#
# MoreInfo: a URL for more information on the printer.
#
MoreInfo http://www.acme.com/lp1000.html
#MoreInfo http://www.acme.com/lp1000.html
#
# Location: the location of the printer.
#
Location Room 101 in the activities building
#Location Room 101 in the activities building
#
# DeviceURI: the device URI for this printer.
@@ -73,18 +73,6 @@ Location Room 101 in the activities building
#DeviceURI ipp://hostname/path
#DeviceURI smb://hostname/printer
#
# AddFilter: adds a filter for this printer. Format is:
#
# AddFilter from-type cost program
#
# Filter programs must accept the standard filter options outlined in
# the CUPS documentation. A filter program of "-" means that the
# two types are equivalent.
#
AddFilter application/cups-postscript 0 -
#
# State: sets the initial state of the printer. Can be one of the
# following:
@@ -93,9 +81,9 @@ AddFilter application/cups-postscript 0 -
# Stopped - Printer is disabled but accepting new jobs.
#
State Idle
</Printer>
#State Idle
#</Printer>
#
# End of "$Id: printers.conf 320 1999-05-13 20:40:14Z mike $".
# End of "$Id: printers.conf 334 1999-05-17 18:11:26Z mike $".
#
+7 -1
Ver Arquivo
@@ -16,7 +16,7 @@
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
@@ -68,6 +68,12 @@
#undef HAVE_SHADOW_H
/*
* Do we have <crypt.h>?
*/
#undef HAVE_CRYPT_H
/*
* Do we have the strXXX() functions?
*/
+193 -36
Ver Arquivo
@@ -14,7 +14,7 @@ dnl at:
dnl
dnl Attn: CUPS Licensing Information
dnl Easy Software Products
dnl 44145 Airport View Drive, Suite 204
dnl 44141 Airport View Drive, Suite 204
dnl Hollywood, Maryland 20636-3111 USA
dnl
dnl Voice: (301) 373-9603
@@ -26,18 +26,62 @@ AC_INIT(cups/cups.h)
AC_CONFIG_HEADER(config.h)
AC_PREFIX_DEFAULT(/usr)
dnl Clear default debugging options and set normal optimization by
dnl default unless the user asks for debugging specifically.
dnl Get the operating system and version number...
CFLAGS="${CFLAGS:=}"
CXXFLAGS="${CXXFLAGS:=}"
OPTIM="-O"
uname=`uname`
uversion=`uname -r | sed -e '1,$s/\.//g'`
if test "$uname" = "IRIX64"; then
uname="IRIX"
fi
dnl Clear the debugging and non-shared library options unless the user asks
dnl for them...
OPTIM=""
AC_SUBST(OPTIM)
PICFLAG=1
CFLAGS="${CFLAGS:=}"
AC_ARG_ENABLE(debug, [ --enable-debug turn on debugging [default=no]],
if eval "test x$enable_debug = xyes"; then
OPTIM="-g"
fi)
AC_ARG_ENABLE(debug, [ --enable-debug turn on debugging [default=no]],[if eval "test x$enable_debug = xyes"; then
OPTIM="-g "
fi])
AC_ARG_ENABLE(shared, [ --disable-shared turn off shared libraries [default=no]])
if eval "test x$disable_shared = xyes"; then
PICFLAG=0
LIBCUPS="libcups.a"
LIBCUPSIMAGE="libcupsimage.a"
DSO=":"
else
case "$uname" in
SunOS* | UNIX_S*)
LIBCUPS="libcups.so.1"
LIBCUPSIMAGE="libcupsimage.so.1"
DSO="\$(CC) -Wl,-h,\$@ -G \$(OPTIM) -o"
;;
HP-UX*)
LIBCUPS="libcups.sl.1"
LIBCUPSIMAGE="libcupsimage.sl.1"
DSO="ld -b -z +h \$@ -o"
;;
OSF1* | Linux*)
LIBCUPS="libcups.so.1"
LIBCUPSIMAGE="libcupsimage.so.1"
DSO="\$(CC) -Wl,-soname,\$@ -shared \$(OPTIM) -o"
;;
IRIX*)
LIBCUPS="libcups.so.1"
LIBCUPSIMAGE="libcupsimage.so.1"
DSO="\$(CC) -soname \$@ -shared \$(OPTIM) -o"
;;
*)
echo "Warning: shared libraries may not be supported. Trying -shared"
echo " option with compiler."
LIBCUPS="libcups.so.1"
LIBCUPSIMAGE="libcupsimage.so.1"
DSO="\$(CC) -Wl,-soname,\$@ -shared \$(OPTIM) -o"
;;
esac
fi
dnl Checks for programs...
AC_PROG_AWK
@@ -45,21 +89,49 @@ AC_PROG_CC
AC_PROG_CPP
AC_PROG_RANLIB
AC_PATH_PROG(AR,ar)
AC_PATH_PROG(CHMOD,chmod)
AC_PATH_PROG(CP,cp)
AC_PATH_PROG(MKDIR,mkdir)
AC_PATH_PROG(RM,rm)
AC_PATH_PROG(GROFF,groff)
AC_PATH_PROG(NROFF,nroff)
if test "$NROFF" = ""; then
AC_PATH_PROG(NROFF,groff)
if test "$NROFF" = ""; then
NROFF="echo"
else
NROFF="$NROFF -T ascii"
fi
fi
AC_PATH_PROG(HTMLDOC,htmldoc)
AC_PATH_PROG(MKDIR,mkdir)
AC_PATH_PROG(PACK,pack)
if test "$PACK" = ""; then
AC_PATH_PROG(PACK,gzip)
if test "$PACK" = ""; then
PACK="echo"
CAT="dummy"
else
PACK="$PACK -fv9"
CAT="gz"
fi
else
PACK="$PACK -f"
CAT="z"
fi
AC_SUBST(CAT)
AC_PATH_PROG(RM,rm)
AC_PATH_PROG(SED,sed)
AC_PATH_PROG(SMBCLIENT,smbclient)
if test "$SMBCLIENT" = ""; then
echo "Looking for smbclient in standard locations..."
AC_PATH_PROG(SMBCLIENT,smbclient,samba_not_detected,
/usr/samba/bin:/usr/local/samba/bin:/usr/freeware/samba/bin:/opt/samba/bin)
fi
dnl Architecture checks...
AC_C_BIGENDIAN
uname=`uname`
if test "$uname" = "IRIX64"; then
uname=IRIX
fi
dnl Check for libraries...
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)
AC_CHECK_LIB(socket,socket,
if test "$uname" != "IRIX"; then
@@ -74,24 +146,28 @@ else
echo "Not using -lnsl since you are running IRIX."
fi)
IMGLIBS=""
AC_SUBST(IMGLIBS)
AC_CHECK_LIB(jpeg,jpeg_destroy_decompress,
AC_CHECK_HEADER(jpeglib.h,
AC_DEFINE(HAVE_LIBJPEG)
IMGLIBS="$IMGLIBS -ljpeg"))
AC_CHECK_LIB(png,png_read_info,
AC_CHECK_HEADER(png.h,
AC_DEFINE(HAVE_LIBPNG)
IMGLIBS="$IMGLIBS -lpng"))
AC_CHECK_LIB(tiff,TIFFGetField,
AC_CHECK_HEADER(tiff.h,
AC_DEFINE(HAVE_LIBTIFF)
IMGLIBS="$IMGLIBS -ltiff"))
AC_CHECK_LIB(z,deflate,
AC_CHECK_HEADER(zlib.h,
AC_DEFINE(HAVE_LIBZ)
IMGLIBS="$IMGLIBS -lz"))
LIBJPEG=""
LIBPNG=""
LIBTIFF=""
LIBZ=""
AC_SUBST(LIBJPEG)
AC_SUBST(LIBPNG)
AC_SUBST(LIBTIFF)
AC_SUBST(LIBZ)
AC_CHECK_HEADER(jpeglib.h,
AC_DEFINE(HAVE_LIBJPEG)
LIBJPEG="-ljpeg")
AC_CHECK_HEADER(png.h,
AC_DEFINE(HAVE_LIBPNG)
LIBPNG="-lpng")
AC_CHECK_HEADER(tiff.h,
AC_DEFINE(HAVE_LIBTIFF)
LIBTIFF="-ltiff")
AC_CHECK_HEADER(zlib.h,
AC_DEFINE(HAVE_LIBZ)
LIBZ="-lz")
dnl Checks for header files.
AC_HEADER_STDC
@@ -111,11 +187,78 @@ dnl Checks for wait functions.
AC_CHECK_FUNCS(waitpid)
AC_CHECK_FUNCS(wait3)
dnl Update compiler options...
if test -n "$GXX"; then
if test -z "$OPTIM"; then
OPTIM="-O2"
fi
if test $PICFLAG = 1; then
OPTIM="-fPIC $OPTIM"
fi
else
case $uname in
IRIX*)
if test -z "$OPTIM"; then
OPTIM="-O2"
fi
if test $uversion -ge 62; then
OPTIM="$OPTIM -n32 -mips3"
fi
;;
HP-UX*)
if test -z "$OPTIM"; then
OPTIM="+O2"
fi
;;
SunOS*)
# Solaris
if test -z "$OPTIM"; then
OPTIM="-O"
fi
if test $PICFLAG = 1; then
OPTIM="-KPIC $OPTIM"
fi
;;
*)
# Running some other operating system; inform the user they
# should contribute the necessary options to
# cups-support@cups.org...
echo "Building CUPS with default compiler optimizations; contact"
echo "cups-support@cups.org with uname and compiler options needed"
echo "for your platform, or set the CFLAGS environment variable"
echo "before running configure."
;;
esac
fi
if test "$DSO" != ":"; then
# When using DSOs the image libraries are linked to libcupsimage.so
# rather than to the executables. This makes things smaller if you
# are using any static libraries, and it also allows us to distribute
# a single DSO rather than a bunch...
DSOLIBS="\$(LIBJPEG) \$(LIBPNG) \$(LIBTIFF) \$(LIBZ)"
IMGLIBS=""
else
DSOLIBS=""
IMGLIBS="\$(LIBJPEG) \$(LIBPNG) \$(LIBTIFF) \$(LIBZ)"
fi
AC_SUBST(DSO)
AC_SUBST(DSOLIBS)
AC_SUBST(IMGLIBS)
AC_SUBST(LIBCUPS)
AC_SUBST(LIBCUPSIMAGE)
dnl Fix "prefix" variable if it hasn't been specified...
if test "$prefix" = "NONE"; then
prefix="/usr"
fi
dnl Fix "libdir" variable for IRIX 6.x...
if test "$uname" = "IRIX" -a $uversion -ge 62; then
libdir="/usr/lib32"
fi
dnl CUPS_SERVERROOT needs special attention for the default location...
if test "$prefix" = "/usr"; then
CUPS_SERVERROOT="/var/cups"
@@ -126,7 +269,21 @@ AC_DEFINE_UNQUOTED(CUPS_SERVERROOT, "$CUPS_SERVERROOT")
AC_SUBST(CUPS_SERVERROOT)
dnl Set the CUPS_LOCALE directory...
CUPS_LOCALEDIR="$prefix/lib/locale"
case "$uname" in
Linux)
CUPS_LOCALEDIR="$prefix/share/locale"
;;
OSF1)
CUPS_LOCALEDIR="$prefix/lib/nls/msg"
;;
*)
# This is the standard System V location...
CUPS_LOCALEDIR="$prefix/lib/locale"
;;
esac
AC_DEFINE_UNQUOTED(CUPS_LOCALEDIR, "$CUPS_LOCALEDIR")
AC_SUBST(CUPS_LOCALEDIR)
+345
Ver Arquivo
@@ -0,0 +1,345 @@
#
# "$Id: cups.list 529 1999-07-13 14:11:00Z mike $"
#
# ESP Package Manager (EPM) file list for the Common UNIX Printing
# System (CUPS).
#
# EPM can be found in the "epm" subdirectory of this distribution.
# Please report problems and fixes to Michael Sweet (mike@easysw.com).
#
# Copyright 1997-1999 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
# copyright law. Distribution and use rights are outlined in the file
# "LICENSE.txt" which should have been included with this file. If this
# file is missing or damaged please contact Easy Software Products
# at:
#
# Attn: CUPS Licensing Information
# Easy Software Products
# 44141 Airport View Drive, Suite 204
# Hollywood, Maryland 20636-3111 USA
#
# Voice: (301) 373-9603
# EMail: cups-info@cups.org
# WWW: http://www.cups.org
#
%product Common UNIX Printing System
%copyright 1993-1999 by Easy Software Products, All Rights Reserved.
%vendor Easy Software Products
%license LICENSE.cups
%readme README.cups
%version 1.0b5
%incompat printpro
%system all
# Server files
f 0555 root sys /var/cups/backend/ipp backend/ipp
f 4555 root sys /var/cups/backend/lpd backend/lpd
f 0555 root sys /var/cups/backend/parallel backend/parallel
f 0555 root sys /var/cups/backend/serial backend/serial
f 0555 root sys /var/cups/backend/smb backend/smb
f 0555 root sys /var/cups/backend/socket backend/socket
f 0500 root sys /usr/sbin/cupsd scheduler/cupsd
f 0555 root sys /var/cups/cgi-bin/classes.cgi cgi-bin/classes.cgi
f 0555 root sys /var/cups/cgi-bin/jobs.cgi cgi-bin/jobs.cgi
f 0555 root sys /var/cups/cgi-bin/printers.cgi cgi-bin/printers.cgi
f 0555 root sys /var/cups/filter/pstoraster pstoraster/pstoraster
f 0555 root sys /var/cups/filter/imagetops filter/imagetops
f 0555 root sys /var/cups/filter/pstops filter/pstops
f 0555 root sys /var/cups/filter/texttops filter/texttops
f 0555 root sys /var/cups/filter/rastertohp filter/rastertohp
f 0555 root sys /var/cups/filter/hpgltops filter/hpgltops
f 0555 root sys /var/cups/filter/imagetoraster filter/imagetoraster
# User commands
f 0555 root sys /usr/bin/lp systemv/lp
f 0555 root sys /usr/bin/lpstat systemv/lpstat
f 0555 root sys /usr/lib/lpadmin systemv/lpadmin
f 0555 root sys /usr/bin/cancel systemv/cancel
f 0555 root sys /usr/lib/accept systemv/accept
l 0555 root sys /usr/lib/reject accept
l 0555 root sys /usr/bin/disable /usr/lib/accept
l 0555 root sys /usr/bin/enable /usr/lib/accept
f 0555 root sys /usr/sbin/lpc berkeley/lpc
f 0555 root sys /usr/bin/lpq berkeley/lpq
f 0555 root sys /usr/bin/lpr berkeley/lpr
f 0555 root sys /usr/bin/lprm berkeley/lprm
# DSOs
%system hpux
f 0555 root sys /usr/lib/libcups.sl.1 cups/libcups.sl.1
l 0555 root sys /usr/lib/libcups.sl libcups.sl.1
f 0555 root sys /usr/lib/libcupsimage.sl.1 filter/libcupsimage.sl.1
l 0555 root sys /usr/lib/libcupsimage.sl libcupsimage.sl.1
%system irix irix64
f 0555 root sys /usr/lib32/libcups.so.1 cups/libcups.so.1
l 0555 root sys /usr/lib32/libcups.so libcups.so.1
f 0555 root sys /usr/lib32/libcupsimage.so.1 filter/libcupsimage.so.1
l 0555 root sys /usr/lib32/libcupsimage.so libcupsimage.so.1
%system dunix linux solaris sunos
f 0555 root sys /usr/lib/libcups.so.1 cups/libcups.so.1
l 0555 root sys /usr/lib/libcups.so libcups.so.1
f 0555 root sys /usr/lib/libcupsimage.so.1 filter/libcupsimage.so.1
l 0555 root sys /usr/lib/libcupsimage.so libcupsimage.so.1
%system all
# Directories
d 0755 root sys /var/cups/interfaces
d 0755 root sys /var/cups/logs
d 0755 root sys /var/cups/ppd
d 0755 root sys /var/cups/requests
# Data files
f 0444 root sys /usr/lib/locale/C/cups_C locale/C/cups_C
f 0444 root sys /usr/lib/locale/de/cups_de locale/de/cups_de
f 0444 root sys /usr/lib/locale/en/cups_en locale/en/cups_en
f 0444 root sys /usr/lib/locale/es/cups_es locale/es/cups_es
f 0444 root sys /usr/lib/locale/fr/cups_fr locale/fr/cups_fr
f 0444 root sys /usr/lib/locale/it/cups_it locale/it/cups_it
f 0444 root sys /usr/share/cups/data/8859-1 data/8859-1
f 0444 root sys /usr/share/cups/data/8859-14 data/8859-14
f 0444 root sys /usr/share/cups/data/8859-15 data/8859-15
f 0444 root sys /usr/share/cups/data/8859-2 data/8859-2
f 0444 root sys /usr/share/cups/data/8859-3 data/8859-3
f 0444 root sys /usr/share/cups/data/8859-4 data/8859-4
f 0444 root sys /usr/share/cups/data/8859-5 data/8859-5
f 0444 root sys /usr/share/cups/data/8859-6 data/8859-6
f 0444 root sys /usr/share/cups/data/8859-7 data/8859-7
f 0444 root sys /usr/share/cups/data/8859-8 data/8859-8
f 0444 root sys /usr/share/cups/data/8859-9 data/8859-9
f 0444 root sys /usr/share/cups/data/HPGLprolog data/HPGLprolog
f 0444 root sys /usr/share/cups/data/psglyphs data/psglyphs
f 0444 root sys /usr/share/cups/fonts/AvantGarde-Book fonts/AvantGarde-Book
f 0444 root sys /usr/share/cups/fonts/AvantGarde-BookOblique fonts/AvantGarde-BookOblique
f 0444 root sys /usr/share/cups/fonts/AvantGarde-Demi fonts/AvantGarde-Demi
f 0444 root sys /usr/share/cups/fonts/AvantGarde-DemiOblique fonts/AvantGarde-DemiOblique
f 0444 root sys /usr/share/cups/fonts/Bookman-Demi fonts/Bookman-Demi
f 0444 root sys /usr/share/cups/fonts/Bookman-DemiItalic fonts/Bookman-DemiItalic
f 0444 root sys /usr/share/cups/fonts/Bookman-Light fonts/Bookman-Light
f 0444 root sys /usr/share/cups/fonts/Bookman-LightItalic fonts/Bookman-LightItalic
f 0444 root sys /usr/share/cups/fonts/Courier fonts/Courier
f 0444 root sys /usr/share/cups/fonts/Courier-Bold fonts/Courier-Bold
f 0444 root sys /usr/share/cups/fonts/Courier-BoldOblique fonts/Courier-BoldOblique
f 0444 root sys /usr/share/cups/fonts/Courier-Oblique fonts/Courier-Oblique
f 0444 root sys /usr/share/cups/fonts/Helvetica fonts/Helvetica
f 0444 root sys /usr/share/cups/fonts/Helvetica-Bold fonts/Helvetica-Bold
f 0444 root sys /usr/share/cups/fonts/Helvetica-BoldOblique fonts/Helvetica-BoldOblique
f 0444 root sys /usr/share/cups/fonts/Helvetica-Narrow fonts/Helvetica-Narrow
f 0444 root sys /usr/share/cups/fonts/Helvetica-Narrow-Bold fonts/Helvetica-Narrow-Bold
f 0444 root sys /usr/share/cups/fonts/Helvetica-Narrow-BoldOblique fonts/Helvetica-Narrow-BoldOblique
f 0444 root sys /usr/share/cups/fonts/Helvetica-Narrow-Oblique fonts/Helvetica-Narrow-Oblique
f 0444 root sys /usr/share/cups/fonts/Helvetica-Oblique fonts/Helvetica-Oblique
f 0444 root sys /usr/share/cups/fonts/NewCenturySchlbk-Bold fonts/NewCenturySchlbk-Bold
f 0444 root sys /usr/share/cups/fonts/NewCenturySchlbk-BoldItalic fonts/NewCenturySchlbk-BoldItalic
f 0444 root sys /usr/share/cups/fonts/NewCenturySchlbk-Italic fonts/NewCenturySchlbk-Italic
f 0444 root sys /usr/share/cups/fonts/NewCenturySchlbk-Roman fonts/NewCenturySchlbk-Roman
f 0444 root sys /usr/share/cups/fonts/Palatino-Bold fonts/Palatino-Bold
f 0444 root sys /usr/share/cups/fonts/Palatino-BoldItalic fonts/Palatino-BoldItalic
f 0444 root sys /usr/share/cups/fonts/Palatino-Italic fonts/Palatino-Italic
f 0444 root sys /usr/share/cups/fonts/Palatino-Roman fonts/Palatino-Roman
f 0444 root sys /usr/share/cups/fonts/Symbol fonts/Symbol
f 0444 root sys /usr/share/cups/fonts/Times-Bold fonts/Times-Bold
f 0444 root sys /usr/share/cups/fonts/Times-BoldItalic fonts/Times-BoldItalic
f 0444 root sys /usr/share/cups/fonts/Times-Italic fonts/Times-Italic
f 0444 root sys /usr/share/cups/fonts/Times-Roman fonts/Times-Roman
f 0444 root sys /usr/share/cups/fonts/Utopia-Bold fonts/Utopia-Bold
f 0444 root sys /usr/share/cups/fonts/Utopia-BoldItalic fonts/Utopia-BoldItalic
f 0444 root sys /usr/share/cups/fonts/Utopia-Italic fonts/Utopia-Italic
f 0444 root sys /usr/share/cups/fonts/Utopia-Regular fonts/Utopia-Regular
f 0444 root sys /usr/share/cups/fonts/ZapfChancery-MediumItalic fonts/ZapfChancery-MediumItalic
f 0444 root sys /usr/share/cups/fonts/ZapfDingbats fonts/ZapfDingbats
f 0444 root sys /usr/share/cups/pstoraster/Fontmap pstoraster/Fontmap
f 0444 root sys /usr/share/cups/pstoraster/gs_l2img.ps pstoraster/gs_l2img.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_pfile.ps pstoraster/gs_pfile.ps
f 0444 root sys /usr/share/cups/pstoraster/pfbtogs.ps pstoraster/pfbtogs.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_wl1_e.ps pstoraster/gs_wl1_e.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_wl2_e.ps pstoraster/gs_wl2_e.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_wl5_e.ps pstoraster/gs_wl5_e.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_wan_e.ps pstoraster/gs_wan_e.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_pdf_e.ps pstoraster/gs_pdf_e.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_sym_e.ps pstoraster/gs_sym_e.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_std_e.ps pstoraster/gs_std_e.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_dbt_e.ps pstoraster/gs_dbt_e.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_mex_e.ps pstoraster/gs_mex_e.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_mro_e.ps pstoraster/gs_mro_e.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_iso_e.ps pstoraster/gs_iso_e.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_ksb_e.ps pstoraster/gs_ksb_e.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_ttf.ps pstoraster/gs_ttf.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_pdf.ps pstoraster/gs_pdf.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_ccfnt.ps pstoraster/gs_ccfnt.ps
f 0444 root sys /usr/share/cups/pstoraster/pdf_sec.ps pstoraster/pdf_sec.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_res.ps pstoraster/gs_res.ps
f 0444 root sys /usr/share/cups/pstoraster/pdf_base.ps pstoraster/pdf_base.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_btokn.ps pstoraster/gs_btokn.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_diskf.ps pstoraster/gs_diskf.ps
f 0444 root sys /usr/share/cups/pstoraster/pdf_2ps.ps pstoraster/pdf_2ps.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_init.ps pstoraster/gs_init.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_kanji.ps pstoraster/gs_kanji.ps
f 0444 root sys /usr/share/cups/pstoraster/pdf_draw.ps pstoraster/pdf_draw.ps
f 0444 root sys /usr/share/cups/pstoraster/pdf_font.ps pstoraster/pdf_font.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_type1.ps pstoraster/gs_type1.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_fonts.ps pstoraster/gs_fonts.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_statd.ps pstoraster/gs_statd.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_lev2.ps pstoraster/gs_lev2.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_typ42.ps pstoraster/gs_typ42.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_pdfwr.ps pstoraster/gs_pdfwr.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_cidfn.ps pstoraster/gs_cidfn.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_cmdl.ps pstoraster/gs_cmdl.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_dps1.ps pstoraster/gs_dps1.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_setpd.ps pstoraster/gs_setpd.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_cmap.ps pstoraster/gs_cmap.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_fform.ps pstoraster/gs_fform.ps
f 0444 root sys /usr/share/cups/pstoraster/pdf_main.ps pstoraster/pdf_main.ps
f 0444 root sys /usr/share/cups/model/deskjet.ppd ppd/deskjet.ppd
f 0444 root sys /usr/share/cups/model/laserjet.ppd ppd/laserjet.ppd
# Config files
c 0600 root sys /var/cups/conf/classes.conf conf/classes.conf
c 0600 root sys /var/cups/conf/cupsd.conf conf/cupsd.conf
c 0600 root sys /var/cups/conf/mime.convs conf/mime.convs
c 0600 root sys /var/cups/conf/mime.types conf/mime.types
c 0600 root sys /var/cups/conf/printers.conf conf/printers.conf
# Developer files
f 0444 root sys /usr/include/cups/cups.h cups/cups.h
f 0444 root sys /usr/include/cups/http.h cups/http.h
f 0444 root sys /usr/include/cups/ipp.h cups/ipp.h
f 0444 root sys /usr/include/cups/language.h cups/language.h
f 0444 root sys /usr/include/cups/mime.h cups/mime.h
f 0444 root sys /usr/include/cups/ppd.h cups/ppd.h
f 0444 root sys /usr/include/cups/raster.h cups/raster.h
# This should only be done for IRIX 6.x (-n32)
%system irix irix64
f 0444 root sys /usr/lib32/libcups.a cups/libcups.a
%system hpux solaris sunos dunix linux
f 0444 root sys /usr/lib/libcups.a cups/libcups.a
%system all
# Documentation files
f 0444 root sys /usr/share/cups/doc/cmp.html doc/cmp.html
f 0444 root sys /usr/share/cups/doc/cmp.pdf doc/cmp.pdf
f 0444 root sys /usr/share/cups/doc/cupsdoc.css doc/cupsdoc.css
f 0444 root sys /usr/share/cups/doc/cups.css doc/cups.css
f 0444 root sys /usr/share/cups/doc/documentation.html doc/documentation.html
f 0444 root sys /usr/share/cups/doc/idd.html doc/idd.html
f 0444 root sys /usr/share/cups/doc/idd.pdf doc/idd.pdf
f 0444 root sys /usr/share/cups/doc/images/classes.gif doc/images/classes.gif
f 0444 root sys /usr/share/cups/doc/images/cups-bar.gif doc/images/cups-bar.gif
f 0444 root sys /usr/share/cups/doc/images/cups-block-diagram.gif doc/images/cups-block-diagram.gif
f 0444 root sys /usr/share/cups/doc/images/cups-large.gif doc/images/cups-large.gif
f 0444 root sys /usr/share/cups/doc/images/cups-medium.gif doc/images/cups-medium.gif
f 0444 root sys /usr/share/cups/doc/images/cups-small.gif doc/images/cups-small.gif
f 0444 root sys /usr/share/cups/doc/images/logo.gif doc/images/logo.gif
f 0444 root sys /usr/share/cups/doc/images/navbar.gif doc/images/navbar.gif
f 0444 root sys /usr/share/cups/doc/images/printer-idle.gif doc/images/printer-idle.gif
f 0444 root sys /usr/share/cups/doc/images/printer-processing.gif doc/images/printer-processing.gif
f 0444 root sys /usr/share/cups/doc/images/printer-stopped.gif doc/images/printer-stopped.gif
f 0444 root sys /usr/share/cups/doc/index.html doc/index.html
f 0444 root sys /usr/share/cups/doc/overview.html doc/overview.html
f 0444 root sys /usr/share/cups/doc/overview.pdf doc/overview.pdf
f 0444 root sys /usr/share/cups/doc/sam.html doc/sam.html
f 0444 root sys /usr/share/cups/doc/sam.pdf doc/sam.pdf
f 0444 root sys /usr/share/cups/doc/sdd.html doc/sdd.html
f 0444 root sys /usr/share/cups/doc/sdd.pdf doc/sdd.pdf
f 0444 root sys /usr/share/cups/doc/ssr.html doc/ssr.html
f 0444 root sys /usr/share/cups/doc/ssr.pdf doc/ssr.pdf
f 0444 root sys /usr/share/cups/doc/stp.html doc/stp.html
f 0444 root sys /usr/share/cups/doc/stp.pdf doc/stp.pdf
f 0444 root sys /usr/share/cups/doc/sum.html doc/sum.html
f 0444 root sys /usr/share/cups/doc/sum.pdf doc/sum.pdf
f 0444 root sys /usr/share/cups/doc/svd.html doc/svd.html
f 0444 root sys /usr/share/cups/doc/svd.pdf doc/svd.pdf
# Man pages
%system irix irix64
f 0444 root sys /usr/share/catman/a_man/cat1/accept.z man/accept.z
l 0444 root sys /usr/share/catman/a_man/cat1/reject.z accept.z
f 0444 root sys /usr/share/catman/u_man/cat1/backend.z man/backend.z
f 0444 root sys /usr/share/catman/u_man/cat5/classes.conf.z man/classes.conf.z
f 0444 root sys /usr/share/catman/u_man/cat5/cupsd.conf.z man/cupsd.conf.z
f 0444 root sys /usr/share/catman/a_man/cat1/cupsd.z man/cupsd.z
f 0444 root sys /usr/share/catman/a_man/cat1/enable.z man/enable.z
l 0444 root sys /usr/share/catman/a_man/cat1/disable.z enable.z
f 0444 root sys /usr/share/catman/u_man/cat1/filter.z man/filter.z
f 0444 root sys /usr/share/catman/a_man/cat1/lpadmin.z man/lpadmin.z
f 0444 root sys /usr/share/catman/a_man/cat1/lpc.z man/lpc.z
f 0444 root sys /usr/share/catman/u_man/cat1/lprm.z man/lprm.z
f 0444 root sys /usr/share/catman/u_man/cat1/lpr.z man/lpr.z
f 0444 root sys /usr/share/catman/u_man/cat1/lpstat.z man/lpstat.z
f 0444 root sys /usr/share/catman/u_man/cat1/lp.z man/lp.z
l 0444 root sys /usr/share/catman/u_man/cat1/cancel.z lp.z
f 0444 root sys /usr/share/catman/u_man/cat5/mime.convs.z man/mime.convs.z
f 0444 root sys /usr/share/catman/u_man/cat5/mime.types.z man/mime.types.z
f 0444 root sys /usr/share/catman/u_man/cat5/printers.conf.z man/printers.conf.z
%system hpux linux dunix solaris sunos
f 0444 root sys /usr/man/man8/accept.8 man/accept.8
l 0444 root sys /usr/man/man8/reject.8 accept.8
f 0444 root sys /usr/man/man1/backend.1 man/backend.1
f 0444 root sys /usr/man/man1/classes.conf.5 man/classes.conf.5
f 0444 root sys /usr/man/man8/cupsd.8 man/cupsd.8
f 0444 root sys /usr/man/man5/cupsd.conf.5 man/cupsd.conf.5
f 0444 root sys /usr/man/man8/enable.8 man/enable.8
l 0444 root sys /usr/man/man8/disable.8 enable.8
f 0444 root sys /usr/man/man1/filter.1 man/filter.1
f 0444 root sys /usr/man/man8/lpadmin.8 man/lpadmin.8
f 0444 root sys /usr/man/man8/lpc.8 man/lpc.8
f 0444 root sys /usr/man/man1/lprm.1 man/lprm.1
f 0444 root sys /usr/man/man1/lpr.1 man/lpr.1
f 0444 root sys /usr/man/man1/lpstat.1 man/lpstat.1
f 0444 root sys /usr/man/man1/lp.1 man/lp.1
l 0444 root sys /usr/man/man1/cancel.1 lp.1
f 0444 root sys /usr/man/man5/mime.convs.5 man/mime.convs.5
f 0444 root sys /usr/man/man5/mime.types.5 man/mime.types.5
f 0444 root sys /usr/man/man5/printers.conf.5 man/printers.conf.5
# Startup scripts
%system hpux
%install /sbin/init.d/cups start
%remove /sbin/init.d/cups stop
%patch /sbin/init.d/cups stop
f 0555 root sys /sbin/init.d/cups cups.sh
l 0555 root sys /sbin/rc1.d/K280cups ../init.d/cups
l 0555 root sys /sbin/rc2.d/S720cups ../init.d/cups
%system irix irix64
%install /sbin/chkconfig -f cups on
%install /etc/init.d/cups start
%remove /etc/init.d/cups stop
%patch /etc/init.d/cups stop
f 0555 root sys /etc/init.d/cups cups.sh
l 0555 root sys /etc/rc0.d/K25cups ../init.d/cups
l 0555 root sys /etc/rc2.d/S60cups ../init.d/cups
%system linux
%install /etc/rc.d/init.d/cups start
%remove /etc/rc.d/init.d/cups stop
%patch /etc/rc.d/init.d/cups stop
f 0555 root sys /etc/rc.d/init.d/cups cups.sh
l 0555 root sys /etc/rc.d/rc2.d/S60cups ../init.d/cups
l 0555 root sys /etc/rc.d/rc3.d/S60cups ../init.d/cups
l 0555 root sys /etc/rc.d/rc4.d/S60cups ../init.d/cups
l 0555 root sys /etc/rc.d/rc5.d/S60cups ../init.d/cups
l 0555 root sys /etc/rc.d/rc0.d/K60cups ../init.d/cups
l 0555 root sys /etc/rc.d/rc1.d/K60cups ../init.d/cups
l 0555 root sys /etc/rc.d/rc6.d/K60cups ../init.d/cups
%system dunix
%install /sbin/init.d/cups start
%remove /sbin/init.d/cups stop
%patch /sbin/init.d/cups stop
f 0555 root sys /sbin/init.d/cups cups.sh
l 0555 root sys /sbin/rc0.d/K05cups ../init.d/cups
l 0555 root sys /sbin/rc2.d/K00cups ../init.d/cups
l 0555 root sys /sbin/rc3.d/S65cups ../init.d/cups
%system sunos solaris
%install /etc/init.d/cups start
%remove /etc/init.d/cups stop
%patch /etc/init.d/cups stop
f 0555 root sys /etc/init.d/cups cups.sh
l 0555 root sys /etc/rc0.d/K20cups ../init.d/cups
l 0555 root sys /etc/rc2.d/S80cups ../init.d/cups
#
# End of "$Id: cups.list 529 1999-07-13 14:11:00Z mike $".
#
Arquivo executável
+64
Ver Arquivo
@@ -0,0 +1,64 @@
#!/bin/sh
#
# "$Id$"
#
# Startup/shutdown script for the Common UNIX Printing System (CUPS).
#
# Copyright 1997-1999 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
# copyright law. Distribution and use rights are outlined in the file
# "LICENSE.txt" which should have been included with this file. If this
# file is missing or damaged please contact Easy Software Products
# at:
#
# Attn: CUPS Licensing Information
# Easy Software Products
# 44141 Airport View Drive, Suite 204
# Hollywood, Maryland 20636-3111 USA
#
# Voice: (301) 373-9603
# EMail: cups-info@cups.org
# WWW: http://www.cups.org
#
# See if the CUPS daemon is running, and if so stop it...
case "`uname`" in
IRIX* | HP-UX | SunOS)
pid=`ps -e | awk '{print $1,$4}' | grep cupsd | awk '{print $1}'`
;;
OSF1)
pid=`ps -e | awk '{print $1,$5}' | grep cupsd | awk '{print $1}'`
;;
Linux)
pid=`ps ax | awk '{print $1,$5}' | grep cupsd | awk '{print $1}'`
;;
*)
pid=""
;;
esac
case $1 in
start | restart)
if test "$pid" != ""; then
echo "Restarting CUPS scheduler..."
kill -HUP $pid
else
echo "Starting CUPS scheduler..."
/usr/sbin/cupsd 2>&1 >/dev/null &
fi
;;
stop)
if test "$pid" != ""; then
echo "Stopping CUPS scheduler..."
kill $pid
sleep 1
fi
;;
esac
#
# End of "$Id$".
#
+307
Ver Arquivo
@@ -0,0 +1,307 @@
#
# "$Id: cups.spec 505 1999-07-08 15:00:20Z mike $"
#
# RPM "spec" file for the Common UNIX Printing System (CUPS).
#
# Original version by Jason McMullan <jmcc@ontv.com>.
#
# Copyright 1999 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
# copyright law. Distribution and use rights are outlined in the file
# "LICENSE.txt" which should have been included with this file. If this
# file is missing or damaged please contact Easy Software Products
# at:
#
# Attn: CUPS Licensing Information
# Easy Software Products
# 44141 Airport View Drive, Suite 204
# Hollywood, Maryland 20636-3111 USA
#
# Voice: (301) 373-9603
# EMail: cups-info@cups.org
# WWW: http://www.cups.org
#
Summary: Common Unix Printing System
Name: cups
Version: 1.0b5
Release: 0
Copyright: GPL
Group: System Environment/Daemons
Source: ftp://ftp.easysw.com/pub/cups/beta/cups-1.0b5-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: /tmp/rpmbuild
Conflicts: lpr
%package devel
Summary: Common Unix Printing System - development environment
Group: Development/Libraries
%description
The Common UNIX Printing System provides a portable printing layer for
UNIX® 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.
%description devel
The Common UNIX Printing System provides a portable printing layer for
UNIX® operating systems. This is the development package for creating
additional printer drivers, and other CUPS services.
%prep
%setup
%build
./configure
# If we got this far, all prerequisite libraries must be here.
make
%install
# these lines just make sure the directory structure in the
# RPM_BUILD_ROOT exists
rm -rf $RPM_BUILD_ROOT
mkdir $RPM_BUILD_ROOT/etc
mkdir $RPM_BUILD_ROOT/etc/rc.d
mkdir $RPM_BUILD_ROOT/etc/rc.d/init.d
mkdir $RPM_BUILD_ROOT/usr
mkdir $RPM_BUILD_ROOT/usr/bin
mkdir $RPM_BUILD_ROOT/usr/lib
mkdir $RPM_BUILD_ROOT/usr/man
mkdir $RPM_BUILD_ROOT/usr/man/man1
mkdir $RPM_BUILD_ROOT/usr/man/man5
mkdir $RPM_BUILD_ROOT/usr/man/man8
mkdir $RPM_BUILD_ROOT/usr/share/locale
mkdir $RPM_BUILD_ROOT/var/cups
mkdir $RPM_BUILD_ROOT/var/cups/conf
mkdir $RPM_BUILD_ROOT/var/cups/logs
mkdir $RPM_BUILD_ROOT/var/logs
ln -sf /var/cups/logs $RPM_BUILD_ROOT/var/logs/cups
ln -sf /var/cups/conf $RPM_BUILD_ROOT/etc/cups
make prefix=$RPM_BUILD_ROOT/usr DATADIR=$RPM_BUILD_ROOT/usr/share/cups LOCALEDIR=$RPM_BUILD_ROOT/usr/share/locale SERVERROOT=$RPM_BUILD_ROOT/var/cups install
install -m 755 -o root -g root $RPM_SOURCE_DIR/cups.sh $RPM_BUILD_ROOT/etc/rc.d/init.d/cups
%post
/sbin/chkconfig --add cups
%preun
/sbin/chkconfig --del cups
%clean
rm -rf $RPM_BUILD_ROOT
%files
/etc/rc.d/init.d/cups
%config /var/cups/conf/classes.conf
%config /var/cups/conf/cupsd.conf
%config /var/cups/conf/mime.convs
%config /var/cups/conf/mime.types
%config /var/cups/conf/printers.conf
/usr/lib/accept
/usr/lib/lpadmin
/usr/lib/reject
/usr/bin/lpr
/usr/bin/lprm
/usr/bin/disable
/usr/bin/enable
/usr/bin/cancel
/usr/bin/lp
/usr/bin/lpstat
/usr/man/man1/backend.1
/usr/man/man1/filter.1
/usr/man/man1/lprm.1
/usr/man/man1/lpr.1
/usr/man/man1/lpstat.1
/usr/man/man1/lp.1
/usr/man/man1/cancel.1
/usr/man/man5/classes.conf.5
/usr/man/man5/cupsd.conf.5
/usr/man/man5/mime.convs.5
/usr/man/man5/mime.types.5
/usr/man/man5/printers.conf.5
/usr/man/man8/accept.8
/usr/man/man8/cupsd.8
/usr/man/man8/enable.8
/usr/man/man8/lpadmin.8
/usr/man/man8/lpc.8
/usr/man/man8/reject.8
/usr/man/man8/disable.8
/usr/sbin/lpc
/usr/sbin/cupsd
/usr/lib/libcups.so.1
/usr/lib/libcupsimage.so.1
%dir /usr/share/cups
/usr/share/cups/8859-1
/usr/share/cups/8859-14
/usr/share/cups/8859-15
/usr/share/cups/8859-2
/usr/share/cups/8859-3
/usr/share/cups/8859-4
/usr/share/cups/8859-5
/usr/share/cups/8859-6
/usr/share/cups/8859-7
/usr/share/cups/8859-8
/usr/share/cups/8859-9
/usr/share/cups/HPGLprolog
/usr/share/cups/doc/cmp.html
/usr/share/cups/doc/cmp.pdf
/usr/share/cups/doc/cups.css
/usr/share/cups/doc/cupsdoc.css
/usr/share/cups/doc/documentation.html
/usr/share/cups/doc/idd.html
/usr/share/cups/doc/idd.pdf
/usr/share/cups/doc/images/classes.gif
/usr/share/cups/doc/images/cups-block-diagram.gif
/usr/share/cups/doc/images/cups-large.gif
/usr/share/cups/doc/images/cups-medium.gif
/usr/share/cups/doc/images/cups-small.gif
/usr/share/cups/doc/images/logo.gif
/usr/share/cups/doc/images/navbar.gif
/usr/share/cups/doc/images/printer-idle.gif
/usr/share/cups/doc/images/printer-processing.gif
/usr/share/cups/doc/images/printer-stopped.gif
/usr/share/cups/doc/index.html
/usr/share/cups/doc/overview.html
/usr/share/cups/doc/overview.pdf
/usr/share/cups/doc/sam.html
/usr/share/cups/doc/sam.pdf
/usr/share/cups/doc/sdd.html
/usr/share/cups/doc/sdd.pdf
/usr/share/cups/doc/ssr.html
/usr/share/cups/doc/ssr.pdf
/usr/share/cups/doc/stp.html
/usr/share/cups/doc/stp.pdf
/usr/share/cups/doc/sum.html
/usr/share/cups/doc/sum.pdf
/usr/share/cups/doc/svd.html
/usr/share/cups/doc/svd.pdf
/usr/share/cups/fonts/AvantGarde-Book
/usr/share/cups/fonts/AvantGarde-BookOblique
/usr/share/cups/fonts/AvantGarde-Demi
/usr/share/cups/fonts/AvantGarde-DemiOblique
/usr/share/cups/fonts/Bookman-Demi
/usr/share/cups/fonts/Bookman-DemiItalic
/usr/share/cups/fonts/Bookman-Light
/usr/share/cups/fonts/Bookman-LightItalic
/usr/share/cups/fonts/Courier
/usr/share/cups/fonts/Courier-Bold
/usr/share/cups/fonts/Courier-BoldOblique
/usr/share/cups/fonts/Courier-Oblique
/usr/share/cups/fonts/Helvetica
/usr/share/cups/fonts/Helvetica-Bold
/usr/share/cups/fonts/Helvetica-BoldOblique
/usr/share/cups/fonts/Helvetica-Narrow
/usr/share/cups/fonts/Helvetica-Narrow-Bold
/usr/share/cups/fonts/Helvetica-Narrow-BoldOblique
/usr/share/cups/fonts/Helvetica-Narrow-Oblique
/usr/share/cups/fonts/Helvetica-Oblique
/usr/share/cups/fonts/NewCenturySchlbk-Bold
/usr/share/cups/fonts/NewCenturySchlbk-BoldItalic
/usr/share/cups/fonts/NewCenturySchlbk-Italic
/usr/share/cups/fonts/NewCenturySchlbk-Roman
/usr/share/cups/fonts/Palatino-Bold
/usr/share/cups/fonts/Palatino-BoldItalic
/usr/share/cups/fonts/Palatino-Italic
/usr/share/cups/fonts/Palatino-Roman
/usr/share/cups/fonts/Symbol
/usr/share/cups/fonts/Times-Bold
/usr/share/cups/fonts/Times-BoldItalic
/usr/share/cups/fonts/Times-Italic
/usr/share/cups/fonts/Times-Roman
/usr/share/cups/fonts/Utopia-Bold
/usr/share/cups/fonts/Utopia-BoldItalic
/usr/share/cups/fonts/Utopia-Italic
/usr/share/cups/fonts/Utopia-Regular
/usr/share/cups/fonts/ZapfChancery-MediumItalic
/usr/share/cups/fonts/ZapfDingbats
/usr/share/cups/model/deskjet.ppd
/usr/share/cups/model/laserjet.ppd
/usr/share/cups/pstoraster/Fontmap
/usr/share/cups/pstoraster/gs_btokn.ps
/usr/share/cups/pstoraster/gs_ccfnt.ps
/usr/share/cups/pstoraster/gs_cidfn.ps
/usr/share/cups/pstoraster/gs_cmap.ps
/usr/share/cups/pstoraster/gs_cmdl.ps
/usr/share/cups/pstoraster/gs_dbt_e.ps
/usr/share/cups/pstoraster/gs_diskf.ps
/usr/share/cups/pstoraster/gs_dps1.ps
/usr/share/cups/pstoraster/gs_fform.ps
/usr/share/cups/pstoraster/gs_fonts.ps
/usr/share/cups/pstoraster/gs_init.ps
/usr/share/cups/pstoraster/gs_iso_e.ps
/usr/share/cups/pstoraster/gs_kanji.ps
/usr/share/cups/pstoraster/gs_ksb_e.ps
/usr/share/cups/pstoraster/gs_l2img.ps
/usr/share/cups/pstoraster/gs_lev2.ps
/usr/share/cups/pstoraster/gs_mex_e.ps
/usr/share/cups/pstoraster/gs_mro_e.ps
/usr/share/cups/pstoraster/gs_pdf.ps
/usr/share/cups/pstoraster/gs_pdf_e.ps
/usr/share/cups/pstoraster/gs_pdfwr.ps
/usr/share/cups/pstoraster/gs_pfile.ps
/usr/share/cups/pstoraster/gs_res.ps
/usr/share/cups/pstoraster/gs_setpd.ps
/usr/share/cups/pstoraster/gs_statd.ps
/usr/share/cups/pstoraster/gs_std_e.ps
/usr/share/cups/pstoraster/gs_sym_e.ps
/usr/share/cups/pstoraster/gs_ttf.ps
/usr/share/cups/pstoraster/gs_typ42.ps
/usr/share/cups/pstoraster/gs_type1.ps
/usr/share/cups/pstoraster/gs_wan_e.ps
/usr/share/cups/pstoraster/gs_wl1_e.ps
/usr/share/cups/pstoraster/gs_wl2_e.ps
/usr/share/cups/pstoraster/gs_wl5_e.ps
/usr/share/cups/pstoraster/pdf_2ps.ps
/usr/share/cups/pstoraster/pdf_base.ps
/usr/share/cups/pstoraster/pdf_draw.ps
/usr/share/cups/pstoraster/pdf_font.ps
/usr/share/cups/pstoraster/pdf_main.ps
/usr/share/cups/pstoraster/pdf_sec.ps
/usr/share/cups/pstoraster/pfbtogs.ps
%dir /var/cups
/var/cups/backend/http
/var/cups/backend/ipp
/var/cups/backend/lpd
/var/cups/backend/parallel
/var/cups/backend/serial
/var/cups/backend/smb
/var/cups/backend/socket
/var/cups/cgi-bin/classes.cgi
/var/cups/cgi-bin/jobs.cgi
/var/cups/cgi-bin/printers.cgi
/var/cups/conf
/var/cups/filter/hpgltops
/var/cups/filter/imagetops
/var/cups/filter/imagetoraster
/var/cups/filter/pstops
/var/cups/filter/pstoraster
/var/cups/filter/rastertohp
/var/cups/filter/texttops
%dir /var/cups/interfaces
%dir /var/cups/logs
%dir /var/cups/ppd
%dir /var/cups/requests
%files devel
%dir /usr/include/cups
/usr/include/cups/cups.h
/usr/include/cups/http.h
/usr/include/cups/ipp.h
/usr/include/cups/language.h
/usr/include/cups/mime.h
/usr/include/cups/ppd.h
/usr/include/cups/raster.h
/usr/lib/libcups.so
/usr/lib/libcupsimage.so
#
# End of "$Id: cups.spec 505 1999-07-08 15:00:20Z mike $".
#
+31 -12
Ver Arquivo
@@ -14,7 +14,7 @@
#
# Attn: CUPS Licensing Information
# Easy Software Products
# 44145 Airport View Drive, Suite 204
# 44141 Airport View Drive, Suite 204
# Hollywood, Maryland 20636-3111 USA
#
# Voice: (301) 373-9603
@@ -29,7 +29,8 @@ include ../Makedefs
#
OBJS = emit.o filter.o http.o ipp.o language.o mark.o mime.o \
options.o page.o ppd.o raster.o string.o type.o util.o
options.o page.o ppd.o raster.o string.o type.o usersys.o \
util.o
#
# Header files to install...
@@ -41,7 +42,7 @@ HEADERS = cups.h http.h ipp.h language.h mime.h ppd.h raster.h
# Targets in this directory...
#
TARGETS = libcups.a testmime testppd testhttp
TARGETS = $(LIBCUPS) testmime testppd testhttp
#
# Make all targets...
@@ -61,16 +62,29 @@ clean:
#
install: all
-$(MKDIR) $(LIBDIR)
$(CP) libcups.a $(LIBDIR)
-$(MKDIR) $(INCLUDEDIR)/cups
$(CP) $(HEADERS) $(INCLUDEDIR)/cups
-$(MKDIR) $(LIBDIR)
$(CP) $(LIBCUPS) $(LIBDIR)
if test $(LIBCUPS) != "libcups.a"; then \
$(LN) $(LIBCUPS) `basename $(LIBCUPS) .1` \
fi
#
# libcups.so.1, libcups.sl.1
#
libcups.so.1 libcups.sl.1: $(OBJS) ../Makedefs
echo Linking $@...
$(DSO) $@ $(OBJS)
$(LN) $@ `basename $@ .1`
#
# libcups.a
#
libcups.a: $(OBJS)
echo Archiving $@...
$(RM) $@
$(AR) $(ARFLAGS) $@ $(OBJS)
$(RANLIB) $@
@@ -80,6 +94,7 @@ libcups.a: $(OBJS)
#
cups_C.h: ../locale/C/cups_C
echo Generating $@...
$(RM) cups_C.h
$(AWK) '{print "\"" $$0 "\","}' < ../locale/C/cups_C > cups_C.h
@@ -92,36 +107,40 @@ mark.o: ppd.h ../config.h ../Makedefs
mime.o: mime.h ../config.h ../Makedefs
options.o: cups.h ../config.h ../Makedefs
page.o: ppd.h ../config.h ../Makedefs
ppd.o: ppd.h ../config.h ../Makedefs
ppd.o: language.h ppd.h ../config.h ../Makedefs
raster.o: raster.h ../config.h ../Makedefs
string.o: string.h ../config.h ../Makedefs
type.o: mime.h ../config.h ../Makedefs
usersys.o: cups.h ../config.h ../Makedefs
util.o: cups.h http.h ipp.h ../config.h ../Makedefs
#
# testhttp
# testhttp (dependency on static CUPS library is intentional)
#
testhttp: testhttp.o libcups.a
$(CC) $(LDFLAGS) -o $@ testhttp.o $(LIBS)
echo Linking $@...
$(CC) $(LDFLAGS) -o $@ testhttp.o libcups.a $(LIBS)
testhttp.o: http.h ../Makedefs
#
# testmime
# testmime (dependency on static CUPS library is intentional)
#
testmime: testmime.o libcups.a
$(CC) $(LDFLAGS) -o $@ testmime.o $(LIBS)
echo Linking $@...
$(CC) $(LDFLAGS) -o $@ testmime.o libcups.a $(LIBS)
testmime.o: mime.h ../Makedefs
#
# testppd
# testppd (dependency on static CUPS library is intentional)
#
testppd: testppd.o libcups.a
$(CC) $(LDFLAGS) -o $@ testppd.o $(LIBS)
echo Linking $@...
$(CC) $(LDFLAGS) -o $@ testppd.o libcups.a $(LIBS)
testppd.o: ppd.h ../Makedefs
+20 -12
Ver Arquivo
@@ -74,7 +74,9 @@ enum /* Not a typedef'd enum so we can OR */
CUPS_PRINTER_SMALL = 0x1000, /* Can do Letter/Legal/A4 */
CUPS_PRINTER_MEDIUM = 0x2000, /* Can do Tabloid/B/C/A3/A2 */
CUPS_PRINTER_LARGE = 0x4000, /* Can do D/E/A1/A0 */
CUPS_PRINTER_VARIABLE = 0x8000 /* Can do variable sizes */
CUPS_PRINTER_VARIABLE = 0x8000, /* Can do variable sizes */
CUPS_PRINTER_IMPLICIT = 0x10000, /* Implicit class */
CUPS_PRINTER_OPTIONS = 0xfffc /* ~(CLASS | REMOTE | IMPLICIT) */
};
@@ -104,26 +106,32 @@ typedef struct /**** Printer Options ****/
* Functions...
*/
extern int cupsCancelJob(char *printer, int job);
extern ipp_t *cupsDoRequest(http_t *http, ipp_t *request,
char *resource);
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 int cupsGetClasses(char ***classes);
extern char *cupsGetPPD(char *printer);
extern char *cupsGetDefault(void);
extern const char *cupsGetDefault(void);
extern const char *cupsGetPPD(const char *printer);
extern int cupsGetPrinters(char ***printers);
extern int cupsPrintFile(char *printer, char *filename, char *title,
int num_options, cups_option_t *options);
extern int cupsPrintFile(const char *printer, const char *filename,
const char *title, int num_options,
cups_option_t *options);
extern int cupsAddOption(char *name, char *value, int num_options,
cups_option_t **options);
extern int cupsAddOption(const char *name, const char *value,
int num_options, cups_option_t **options);
extern void cupsFreeOptions(int num_options, cups_option_t *options);
extern char *cupsGetOption(char *name, int num_options,
extern const char *cupsGetOption(const char *name, int num_options,
cups_option_t *options);
extern int cupsParseOptions(char *arg, int num_options,
extern int cupsParseOptions(const char *arg, int num_options,
cups_option_t **options);
extern int cupsMarkOptions(ppd_file_t *ppd, int num_options,
cups_option_t *options);
extern const char *cupsGetPassword(const char *prompt);
extern const char *cupsServer(void);
extern const char *cupsUser(void);
# ifdef __cplusplus
}
# endif /* __cplusplus */
+1 -1
Ver Arquivo
@@ -14,7 +14,7 @@
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
+15 -47
Ver Arquivo
@@ -14,7 +14,7 @@
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
@@ -27,38 +27,6 @@
* mimeFilter() - Find the fastest way to convert from one type to another.
* compare() - Compare two filter types...
* lookup() - Lookup a filter...
*
* Revision History:
*
* $Log: filter.c,v $
* Revision 1.6 1999/04/21 14:49:49 mike
* cupsDoRequest() needed to retry requests when doing authorization.
*
* mimeFilter() didn't always return the least-cost filter.
*
* Revision 1.5 1999/03/01 20:51:51 mike
* Code cleanup - removed extraneous semi-colons...
*
* Revision 1.4 1999/02/05 17:40:51 mike
* Added IPP client read/write code.
*
* Added string functions missing from some UNIXs.
*
* Added option parsing functions.
*
* Added IPP convenience functions (not implemented yet).
*
* Updated source files to use local string.h as needed (for
* missing string functions)
*
* Revision 1.3 1999/01/24 14:18:43 mike
* Check-in prior to CVS use.
*
* Revision 1.2 1998/08/06 14:38:38 mike
* Finished coding and testing for CUPS 1.0.
*
* Revision 1.1 1998/06/11 20:50:53 mike
* Initial revision
*/
/*
@@ -90,7 +58,7 @@ mimeAddFilter(mime_t *mime, /* I - MIME database */
mime_type_t *src, /* I - Source type */
mime_type_t *dst, /* I - Destination type */
int cost, /* I - Relative time/resource cost */
char *filter) /* I - Filter program to run */
const char *filter) /* I - Filter program to run */
{
mime_filter_t *temp; /* New filter */
@@ -165,12 +133,6 @@ mimeAddFilter(mime_t *mime, /* I - MIME database */
/*
* 'mimeFilter()' - Find the fastest way to convert from one type to another.
*
* NOTE: Currently we do not use the "cost" field provided with each filter.
* This will be addressed in a future version of this function. For
* now all filters are assumed to be equally costly and we find the
* smallest number of filters to run that satisfies the filter
* requirements.
*/
mime_filter_t * /* O - Array of filters to run */
@@ -179,9 +141,11 @@ mimeFilter(mime_t *mime, /* I - MIME database */
mime_type_t *dst, /* I - Destination file type */
int *num_filters) /* O - Number of filters to run */
{
int i; /* Looping var */
int num_temp, /* Number of temporary filters */
num_mintemp; /* Current minimum */
int i, j, /* Looping vars */
num_temp, /* Number of temporary filters */
num_mintemp, /* Number of filters in the minimum */
cost, /* Current cost */
mincost; /* Current minimum */
mime_filter_t *temp, /* Temporary filter */
*mintemp, /* Current minimum */
*mincurrent, /* Current filter for minimum */
@@ -220,8 +184,8 @@ mimeFilter(mime_t *mime, /* I - MIME database */
* OK, now look for filters from the source type to any other type...
*/
num_mintemp = 100000;
mintemp = NULL;
mincost = 9999999;
mintemp = NULL;
for (i = mime->num_filters, current = mime->filters; i > 0; i --, current ++)
if (current->src == src)
@@ -239,13 +203,17 @@ mimeFilter(mime_t *mime, /* I - MIME database */
* any...)
*/
if (num_temp < num_mintemp)
for (j = 0, cost = 0; j < num_temp; j ++)
cost += temp->cost;
if (cost < mincost)
{
if (mintemp != NULL)
free(mintemp);
num_mintemp = num_temp;
mincost = cost;
mintemp = temp;
num_mintemp = num_temp;
mincurrent = current;
}
else
+55 -73
Ver Arquivo
@@ -14,7 +14,7 @@
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
@@ -89,28 +89,21 @@
* Local functions...
*/
static http_field_t http_field(char *name);
static int http_send(http_t *http, http_state_t request, char *uri);
static http_field_t http_field(const char *name);
static int http_send(http_t *http, http_state_t request,
const char *uri);
/*
* Local globals...
*/
static char *http_fields[] =
static const char *http_fields[] =
{
"Accept",
"Accept-Charset",
"Accept-Encoding",
"Accept-Language",
"Accept-Ranges",
"Age",
"Allow",
"Alternates",
"Authorization",
"Cache-Control",
"Connection",
"Content-Base",
"Content-Encoding",
"Content-Language",
"Content-Length",
@@ -120,41 +113,22 @@ static char *http_fields[] =
"Content-Type",
"Content-Version",
"Date",
"Derived-From",
"Etag",
"Expires",
"From",
"Host",
"If-Match",
"If-Modified-Since",
"If-None-Match",
"If-Range",
"If-Unmodified-since",
"Keep-Alive",
"Last-Modified",
"Link",
"Location",
"Max-Forwards",
"Message-Id",
"MIME-Version",
"Pragma",
"Proxy-Authenticate",
"Proxy-Authorization",
"Public",
"Range",
"Referer",
"Retry-After",
"Server",
"Transfer-Encoding",
"Upgrade",
"URI",
"User-Agent",
"Vary",
"Via",
"Warning",
"WWW-Authenticate"
};
static char *days[7] =
static const char *days[7] =
{
"Sun",
"Mon",
@@ -164,7 +138,7 @@ static char *days[7] =
"Fri",
"Sat"
};
static char *months[12] =
static const char *months[12] =
{
"Jan",
"Feb",
@@ -240,8 +214,8 @@ httpClose(http_t *http) /* I - Connection to close */
*/
http_t * /* O - New HTTP connection */
httpConnect(char *host, /* I - Host to connect to */
int port) /* I - Port number */
httpConnect(const char *host, /* I - Host to connect to */
int port) /* I - Port number */
{
http_t *http; /* New HTTP connection */
struct hostent *hostaddr; /* Host address data */
@@ -358,12 +332,12 @@ httpReconnect(http_t *http) /* I - HTTP data */
*/
void
httpSeparate(char *uri, /* I - Universal Resource Identifier */
char *method, /* O - Method (http, https, etc.) */
char *username, /* O - Username */
char *host, /* O - Hostname */
int *port, /* O - Port number to use */
char *resource) /* O - Resource/filename */
httpSeparate(const char *uri, /* I - Universal Resource Identifier */
char *method, /* O - Method (http, https, etc.) */
char *username, /* O - Username */
char *host, /* O - Hostname */
int *port, /* O - Port number to use */
char *resource) /* O - Resource/filename */
{
char *ptr; /* Pointer into string... */
@@ -405,7 +379,7 @@ httpSeparate(char *uri, /* I - Universal Resource Identifier */
* OK, we have "hostname:port[/resource]"...
*/
*port = strtol(uri, &uri, 10);
*port = strtol(uri, (char **)&uri, 10);
if (*uri == '/')
strcpy(resource, uri);
@@ -500,6 +474,8 @@ httpSeparate(char *uri, /* I - Universal Resource Identifier */
*port = 443;
else if (strcasecmp(method, "ipp") == 0) /* Not registered yet... */
*port = ippPort();
else if (strcasecmp(method, "socket") == 0) /* Not registered yet... */
*port = 9100;
else
*port = 0;
}
@@ -519,7 +495,7 @@ httpSeparate(char *uri, /* I - Universal Resource Identifier */
void
httpSetField(http_t *http, /* I - HTTP data */
http_field_t field, /* I - Field index */
char *value) /* I - Value */
const char *value) /* I - Value */
{
strncpy(http->fields[field], value, HTTP_MAX_VALUE - 1);
http->fields[field][HTTP_MAX_VALUE - 1] = '\0';
@@ -531,8 +507,8 @@ httpSetField(http_t *http, /* I - HTTP data */
*/
int /* O - Status of call (0 = success) */
httpDelete(http_t *http, /* I - HTTP data */
char *uri) /* I - URI to delete */
httpDelete(http_t *http, /* I - HTTP data */
const char *uri) /* I - URI to delete */
{
return (http_send(http, HTTP_DELETE, uri));
}
@@ -543,8 +519,8 @@ httpDelete(http_t *http, /* I - HTTP data */
*/
int /* O - Status of call (0 = success) */
httpGet(http_t *http, /* I - HTTP data */
char *uri) /* I - URI to get */
httpGet(http_t *http, /* I - HTTP data */
const char *uri) /* I - URI to get */
{
return (http_send(http, HTTP_GET, uri));
}
@@ -555,8 +531,8 @@ httpGet(http_t *http, /* I - HTTP data */
*/
int /* O - Status of call (0 = success) */
httpHead(http_t *http, /* I - HTTP data */
char *uri) /* I - URI for head */
httpHead(http_t *http, /* I - HTTP data */
const char *uri) /* I - URI for head */
{
return (http_send(http, HTTP_HEAD, uri));
}
@@ -567,8 +543,8 @@ httpHead(http_t *http, /* I - HTTP data */
*/
int /* O - Status of call (0 = success) */
httpOptions(http_t *http, /* I - HTTP data */
char *uri) /* I - URI for options */
httpOptions(http_t *http, /* I - HTTP data */
const char *uri) /* I - URI for options */
{
return (http_send(http, HTTP_OPTIONS, uri));
}
@@ -579,8 +555,8 @@ httpOptions(http_t *http, /* I - HTTP data */
*/
int /* O - Status of call (0 = success) */
httpPost(http_t *http, /* I - HTTP data */
char *uri) /* I - URI for post */
httpPost(http_t *http, /* I - HTTP data */
const char *uri) /* I - URI for post */
{
httpGetLength(http);
@@ -593,8 +569,8 @@ httpPost(http_t *http, /* I - HTTP data */
*/
int /* O - Status of call (0 = success) */
httpPut(http_t *http, /* I - HTTP data */
char *uri) /* I - URI to put */
httpPut(http_t *http, /* I - HTTP data */
const char *uri) /* I - URI to put */
{
httpGetLength(http);
@@ -607,8 +583,8 @@ httpPut(http_t *http, /* I - HTTP data */
*/
int /* O - Status of call (0 = success) */
httpTrace(http_t *http, /* I - HTTP data */
char *uri) /* I - URI for trace */
httpTrace(http_t *http, /* I - HTTP data */
const char *uri) /* I - URI for trace */
{
return (http_send(http, HTTP_TRACE, uri));
}
@@ -723,9 +699,9 @@ httpRead(http_t *http, /* I - HTTP data */
*/
int /* O - Number of bytes written */
httpWrite(http_t *http, /* I - HTTP data */
char *buffer, /* I - Buffer for data */
int length) /* I - Number of bytes to write */
httpWrite(http_t *http, /* I - HTTP data */
const char *buffer, /* I - Buffer for data */
int length) /* I - Number of bytes to write */
{
int tbytes, /* Total bytes sent */
bytes; /* Bytes sent */
@@ -768,7 +744,6 @@ httpWrite(http_t *http, /* I - HTTP data */
bytes = send(http->fd, buffer, length, 0);
if (bytes < 0)
{
perror("httpWrite");
DEBUG_puts("httpWrite: error writing data...\n");
return (-1);
}
@@ -923,7 +898,7 @@ httpPrintf(http_t *http, /* I - HTTP data */
* 'httpStatus()' - Return a short string describing a HTTP status code.
*/
char * /* O - String or NULL */
const char * /* O - String or NULL */
httpStatus(http_status_t status) /* I - HTTP status code */
{
switch (status)
@@ -964,7 +939,7 @@ httpStatus(http_status_t status) /* I - HTTP status code */
* 'httpGetDateString()' - Get a formatted date/time string from a time value.
*/
char * /* O - Date/time string */
const char * /* O - Date/time string */
httpGetDateString(time_t t) /* I - UNIX time */
{
struct tm *tdate;
@@ -985,7 +960,7 @@ httpGetDateString(time_t t) /* I - UNIX time */
*/
time_t /* O - UNIX time */
httpGetDateTime(char *s) /* I - Date/time string */
httpGetDateTime(const char *s) /* I - Date/time string */
{
int i; /* Looping var */
struct tm tdate; /* Time/date structure */
@@ -1052,8 +1027,15 @@ httpUpdate(http_t *http) /* I - HTTP data */
/*
* Blank line means the start of the data section (if any). Return
* the result code, too...
*
* If we get status 100 (HTTP_CONTINUE), then we *don't* change states.
* Instead, we just return HTTP_CONTINUE to the caller and keep on
* tryin'...
*/
if (http->status == HTTP_CONTINUE)
return (http->status);
httpGetLength(http);
switch (http->state)
@@ -1123,8 +1105,8 @@ httpUpdate(http_t *http) /* I - HTTP data */
*/
char * /* O - Decoded string */
httpDecode64(char *out, /* I - String to write to */
char *in) /* I - String to read from */
httpDecode64(char *out, /* I - String to write to */
const char *in) /* I - String to read from */
{
int pos, /* Bit position */
base64; /* Value of this character */
@@ -1194,8 +1176,8 @@ httpDecode64(char *out, /* I - String to write to */
*/
char * /* O - Encoded string */
httpEncode64(char *out, /* I - String to write to */
char *in) /* I - String to read from */
httpEncode64(char *out, /* I - String to write to */
const char *in) /* I - String to read from */
{
char *outptr; /* Output pointer */
static char base64[] = /* Base64 characters... */
@@ -1245,7 +1227,7 @@ httpEncode64(char *out, /* I - String to write to */
* content-length or transfer-encoding fields.
*/
int
int /* O - Content length */
httpGetLength(http_t *http) /* I - HTTP data */
{
if (strcasecmp(http->fields[HTTP_FIELD_TRANSFER_ENCODING], "chunked") == 0)
@@ -1280,7 +1262,7 @@ httpGetLength(http_t *http) /* I - HTTP data */
*/
static http_field_t /* O - Field index */
http_field(char *name) /* I - String name */
http_field(const char *name) /* I - String name */
{
int i; /* Looping var */
@@ -1300,12 +1282,12 @@ http_field(char *name) /* I - String name */
static int /* O - 0 on success, non-zero on error */
http_send(http_t *http, /* I - HTTP data */
http_state_t request, /* I - Request code */
char *uri) /* I - URI */
const char *uri) /* I - URI */
{
int i; /* Looping var */
char *ptr, /* Pointer in buffer */
buf[1024]; /* Encoded URI buffer */
static char *codes[] = /* Request code strings */
static const char *codes[] = /* Request code strings */
{
NULL,
"OPTIONS",
@@ -1321,7 +1303,7 @@ http_send(http_t *http, /* I - HTTP data */
"TRACE",
"CLOSE"
};
static char *hex = "0123456789ABCDEF";
static const char *hex = "0123456789ABCDEF";
/* Hex digits */
+20 -46
Ver Arquivo
@@ -15,7 +15,7 @@
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
@@ -63,7 +63,7 @@ extern "C" {
# define HTTP_MAX_URI 1024 /* Max length of URI string */
# define HTTP_MAX_HOST 256 /* Max length of hostname string */
# define HTTP_MAX_BUFFER 8192 /* Max length of data buffer */
# define HTTP_MAX_BUFFER 2048 /* Max length of data buffer */
# define HTTP_MAX_VALUE 256 /* Max header field value length */
@@ -131,7 +131,8 @@ typedef enum
typedef enum
{
HTTP_ERROR = -1, /* An error response from httpXxxx() */
HTTP_CONTINUE, /* Everything OK, keep going... */
HTTP_CONTINUE = 100, /* Everything OK, keep going... */
HTTP_OK = 200, /* OPTIONS/GET/HEAD/POST/TRACE command was successful */
HTTP_CREATED, /* PUT command was successful */
@@ -181,18 +182,10 @@ typedef enum
typedef enum
{
HTTP_FIELD_UNKNOWN = -1,
HTTP_FIELD_ACCEPT = 0,
HTTP_FIELD_ACCEPT_CHARSET,
HTTP_FIELD_ACCEPT_ENCODING,
HTTP_FIELD_ACCEPT_LANGUAGE,
HTTP_FIELD_ACCEPT_RANGES,
HTTP_FIELD_AGE,
HTTP_FIELD_ALLOW,
HTTP_FIELD_ALTERNATES,
HTTP_FIELD_AUTHORIZATION,
HTTP_FIELD_CACHE_CONTROL,
HTTP_FIELD_CONNECTION,
HTTP_FIELD_CONTENT_BASE,
HTTP_FIELD_CONTENT_ENCODING,
HTTP_FIELD_CONTENT_LANGUAGE,
HTTP_FIELD_CONTENT_LENGTH,
@@ -202,38 +195,19 @@ typedef enum
HTTP_FIELD_CONTENT_TYPE,
HTTP_FIELD_CONTENT_VERSION,
HTTP_FIELD_DATE,
HTTP_FIELD_DERIVED_FROM,
HTTP_FIELD_ETAG,
HTTP_FIELD_EXPIRES,
HTTP_FIELD_FROM,
HTTP_FIELD_HOST,
HTTP_FIELD_IF_MATCH,
HTTP_FIELD_IF_MODIFIED_SINCE,
HTTP_FIELD_IF_NONE_MATCH,
HTTP_FIELD_IF_RANGE,
HTTP_FIELD_IF_UNMODIFIED_SINCE,
HTTP_FIELD_KEEP_ALIVE,
HTTP_FIELD_LAST_MODIFIED,
HTTP_FIELD_LINK,
HTTP_FIELD_LOCATION,
HTTP_FIELD_MAX_FORWARDS,
HTTP_FIELD_MESSAGE_ID,
HTTP_FIELD_MIME_VERSION,
HTTP_FIELD_PRAGMA,
HTTP_FIELD_PROXY_AUTHENTICATE,
HTTP_FIELD_PROXY_AUTHORIZATION,
HTTP_FIELD_PUBLIC,
HTTP_FIELD_RANGE,
HTTP_FIELD_REFERER,
HTTP_FIELD_RETRY_AFTER,
HTTP_FIELD_SERVER,
HTTP_FIELD_TRANSFER_ENCODING,
HTTP_FIELD_UPGRADE,
HTTP_FIELD_URI,
HTTP_FIELD_USER_AGENT,
HTTP_FIELD_VARY,
HTTP_FIELD_VIA,
HTTP_FIELD_WARNING,
HTTP_FIELD_WWW_AUTHENTICATE,
HTTP_FIELD_MAX
} http_field_t;
@@ -274,31 +248,31 @@ typedef struct
# define httpClearFields(http) memset((http)->fields, 0, sizeof((http)->fields)),\
httpSetField((http), HTTP_FIELD_HOST, (http)->hostname)
extern void httpClose(http_t *http);
extern http_t *httpConnect(char *host, int port);
extern int httpDelete(http_t *http, char *uri);
extern http_t *httpConnect(const char *host, int port);
extern int httpDelete(http_t *http, const char *uri);
extern void httpFlush(http_t *http);
extern int httpGet(http_t *http, char *uri);
extern int httpGet(http_t *http, const char *uri);
extern char *httpGets(char *line, int length, http_t *http);
extern char *httpGetDateString(time_t t);
extern time_t httpGetDateTime(char *s);
extern const char *httpGetDateString(time_t t);
extern time_t httpGetDateTime(const char *s);
# define httpGetField(http,field) (http)->fields[field]
extern int httpHead(http_t *http, char *uri);
extern int httpHead(http_t *http, const char *uri);
extern void httpInitialize(void);
extern int httpOptions(http_t *http, char *uri);
extern int httpPost(http_t *http, char *uri);
extern int httpOptions(http_t *http, const char *uri);
extern int httpPost(http_t *http, const char *uri);
extern int httpPrintf(http_t *http, const char *format, ...);
extern int httpPut(http_t *http, char *uri);
extern int httpPut(http_t *http, const char *uri);
extern int httpRead(http_t *http, char *buffer, int length);
extern int httpReconnect(http_t *http);
extern void httpSeparate(char *uri, char *method, char *username,
extern void httpSeparate(const char *uri, char *method, char *username,
char *host, int *port, char *resource);
extern void httpSetField(http_t *http, http_field_t field, char *value);
extern char *httpStatus(http_status_t status);
extern int httpTrace(http_t *http, char *uri);
extern void httpSetField(http_t *http, http_field_t field, const char *value);
extern const char *httpStatus(http_status_t status);
extern int httpTrace(http_t *http, const char *uri);
extern http_status_t httpUpdate(http_t *http);
extern int httpWrite(http_t *http, char *buffer, int length);
extern char *httpEncode64(char *out, char *in);
extern char *httpDecode64(char *out, char *in);
extern int httpWrite(http_t *http, const char *buffer, int length);
extern char *httpEncode64(char *out, const char *in);
extern char *httpDecode64(char *out, const char *in);
extern int httpGetLength(http_t *http);
+71 -70
Ver Arquivo
@@ -73,10 +73,10 @@ static int ipp_read(http_t *http, char *buffer, int length);
*/
ipp_attribute_t * /* O - New attribute */
ippAddBoolean(ipp_t *ipp, /* I - IPP request */
ipp_tag_t group, /* I - IPP group */
char *name, /* I - Name of attribute */
char value) /* I - Value of attribute */
ippAddBoolean(ipp_t *ipp, /* I - IPP request */
ipp_tag_t group, /* I - IPP group */
const char *name, /* I - Name of attribute */
char value) /* I - Value of attribute */
{
ipp_attribute_t *attr; /* New attribute */
@@ -103,11 +103,11 @@ ippAddBoolean(ipp_t *ipp, /* I - IPP request */
*/
ipp_attribute_t * /* O - New attribute */
ippAddBooleans(ipp_t *ipp, /* I - IPP request */
ipp_tag_t group, /* I - IPP group */
char *name, /* I - Name of attribute */
int num_values, /* I - Number of values */
char *values) /* I - Values */
ippAddBooleans(ipp_t *ipp, /* I - IPP request */
ipp_tag_t group, /* I - IPP group */
const char *name, /* I - Name of attribute */
int num_values, /* I - Number of values */
const char *values) /* I - Values */
{
int i; /* Looping var */
ipp_attribute_t *attr; /* New attribute */
@@ -139,10 +139,10 @@ ippAddBooleans(ipp_t *ipp, /* I - IPP request */
*/
ipp_attribute_t * /* O - New attribute */
ippAddDate(ipp_t *ipp, /* I - IPP request */
ipp_tag_t group, /* I - IPP group */
char *name, /* I - Name of attribute */
ipp_uchar_t *value) /* I - Value */
ippAddDate(ipp_t *ipp, /* I - IPP request */
ipp_tag_t group, /* I - IPP group */
const char *name, /* I - Name of attribute */
const ipp_uchar_t *value) /* I - Value */
{
ipp_attribute_t *attr; /* New attribute */
@@ -170,11 +170,11 @@ ippAddDate(ipp_t *ipp, /* I - IPP request */
*/
ipp_attribute_t * /* O - New attribute */
ippAddInteger(ipp_t *ipp, /* I - IPP request */
ipp_tag_t group, /* I - IPP group */
ipp_tag_t type, /* I - Type of attribute */
char *name, /* I - Name of attribute */
int value) /* I - Value of attribute */
ippAddInteger(ipp_t *ipp, /* I - IPP request */
ipp_tag_t group, /* I - IPP group */
ipp_tag_t type, /* I - Type of attribute */
const char *name, /* I - Name of attribute */
int value) /* I - Value of attribute */
{
ipp_attribute_t *attr; /* New attribute */
@@ -202,12 +202,12 @@ ippAddInteger(ipp_t *ipp, /* I - IPP request */
*/
ipp_attribute_t * /* O - New attribute */
ippAddIntegers(ipp_t *ipp, /* I - IPP request */
ipp_tag_t group, /* I - IPP group */
ipp_tag_t type, /* I - Type of attribute */
char *name, /* I - Name of attribute */
int num_values, /* I - Number of values */
int *values) /* I - Values */
ippAddIntegers(ipp_t *ipp, /* I - IPP request */
ipp_tag_t group, /* I - IPP group */
ipp_tag_t type, /* I - Type of attribute */
const char *name, /* I - Name of attribute */
int num_values, /* I - Number of values */
const int *values) /* I - Values */
{
int i; /* Looping var */
ipp_attribute_t *attr; /* New attribute */
@@ -236,12 +236,12 @@ ippAddIntegers(ipp_t *ipp, /* I - IPP request */
*/
ipp_attribute_t * /* O - New attribute */
ippAddString(ipp_t *ipp, /* I - IPP request */
ipp_tag_t group, /* I - IPP group */
ipp_tag_t type, /* I - Type of attribute */
char *name, /* I - Name of attribute */
char *charset, /* I - Character set */
char *value) /* I - Value */
ippAddString(ipp_t *ipp, /* I - IPP request */
ipp_tag_t group, /* I - IPP group */
ipp_tag_t type, /* I - Type of attribute */
const char *name, /* I - Name of attribute */
const char *charset, /* I - Character set */
const char *value) /* I - Value */
{
ipp_attribute_t *attr; /* New attribute */
@@ -267,13 +267,13 @@ ippAddString(ipp_t *ipp, /* I - IPP request */
*/
ipp_attribute_t * /* O - New attribute */
ippAddStrings(ipp_t *ipp, /* I - IPP request */
ipp_tag_t group, /* I - IPP group */
ipp_tag_t type, /* I - Type of attribute */
char *name, /* I - Name of attribute */
int num_values, /* I - Number of values */
char *charset, /* I - Character set */
char **values) /* I - Values */
ippAddStrings(ipp_t *ipp, /* I - IPP request */
ipp_tag_t group, /* I - IPP group */
ipp_tag_t type, /* I - Type of attribute */
const char *name, /* I - Name of attribute */
int num_values, /* I - Number of values */
const char *charset, /* I - Character set */
const char **values) /* I - Values */
{
int i; /* Looping var */
ipp_attribute_t *attr; /* New attribute */
@@ -309,11 +309,11 @@ ippAddStrings(ipp_t *ipp, /* I - IPP request */
*/
ipp_attribute_t * /* O - New attribute */
ippAddRange(ipp_t *ipp, /* I - IPP request */
ipp_tag_t group, /* I - IPP group */
char *name, /* I - Name of attribute */
int lower, /* I - Lower value */
int upper) /* I - Upper value */
ippAddRange(ipp_t *ipp, /* I - IPP request */
ipp_tag_t group, /* I - IPP group */
const char *name, /* I - Name of attribute */
int lower, /* I - Lower value */
int upper) /* I - Upper value */
{
ipp_attribute_t *attr; /* New attribute */
@@ -339,12 +339,12 @@ ippAddRange(ipp_t *ipp, /* I - IPP request */
*/
ipp_attribute_t * /* O - New attribute */
ippAddRanges(ipp_t *ipp, /* I - IPP request */
ipp_tag_t group, /* I - IPP group */
char *name, /* I - Name of attribute */
int num_values, /* I - Number of values */
int *lower, /* I - Lower values */
int *upper) /* I - Upper values */
ippAddRanges(ipp_t *ipp, /* I - IPP request */
ipp_tag_t group, /* I - IPP group */
const char *name, /* I - Name of attribute */
int num_values, /* I - Number of values */
const int *lower, /* I - Lower values */
const int *upper) /* I - Upper values */
{
int i; /* Looping var */
ipp_attribute_t *attr; /* New attribute */
@@ -376,12 +376,12 @@ ippAddRanges(ipp_t *ipp, /* I - IPP request */
*/
ipp_attribute_t * /* O - New attribute */
ippAddResolution(ipp_t *ipp, /* I - IPP request */
ipp_tag_t group, /* I - IPP group */
char *name, /* I - Name of attribute */
ipp_res_t units, /* I - Units for resolution */
int xres, /* I - X resolution */
int yres) /* I - Y resolution */
ippAddResolution(ipp_t *ipp, /* I - IPP request */
ipp_tag_t group, /* I - IPP group */
const char *name, /* I - Name of attribute */
ipp_res_t units, /* I - Units for resolution */
int xres, /* I - X resolution */
int yres) /* I - Y resolution */
{
ipp_attribute_t *attr; /* New attribute */
@@ -408,13 +408,13 @@ ippAddResolution(ipp_t *ipp, /* I - IPP request */
*/
ipp_attribute_t * /* O - New attribute */
ippAddResolutions(ipp_t *ipp, /* I - IPP request */
ipp_tag_t group, /* I - IPP group */
char *name, /* I - Name of attribute */
int num_values, /* I - Number of values */
ipp_res_t units, /* I - Units for resolution */
int *xres, /* I - X resolutions */
int *yres) /* I - Y resolutions */
ippAddResolutions(ipp_t *ipp, /* I - IPP request */
ipp_tag_t group, /* I - IPP group */
const char *name, /* I - Name of attribute */
int num_values,/* I - Number of values */
ipp_res_t units, /* I - Units for resolution */
const int *xres, /* I - X resolutions */
const int *yres) /* I - Y resolutions */
{
int i; /* Looping var */
ipp_attribute_t *attr; /* New attribute */
@@ -472,8 +472,8 @@ ippAddSeparator(ipp_t *ipp) /* I - IPP request */
* in seconds.
*/
time_t /* O - UNIX time value */
ippDateToTime(ipp_uchar_t *date)/* I - RFC 1903 date info */
time_t /* O - UNIX time value */
ippDateToTime(const ipp_uchar_t *date) /* I - RFC 1903 date info */
{
struct tm unixdate; /* UNIX date/time info */
time_t t; /* Computed time */
@@ -512,6 +512,8 @@ ippDateToTime(ipp_uchar_t *date)/* I - RFC 1903 date info */
else
t -= date[9] * 3600 + date[10] * 60;
t -= timezone;
return (t);
}
@@ -576,9 +578,9 @@ ippDelete(ipp_t *ipp) /* I - IPP request */
*/
ipp_attribute_t * /* O - Matching attribute */
ippFindAttribute(ipp_t *ipp, /* I - IPP request */
char *name, /* I - Name of attribute */
ipp_tag_t type) /* I - Type of attribute */
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 */
@@ -989,7 +991,7 @@ ippRead(http_t *http, /* I - HTTP data */
* 'ippTimeToDate()' - Convert from UNIX time to RFC 1903 format.
*/
ipp_uchar_t * /* O - RFC-1903 date/time data */
const ipp_uchar_t * /* O - RFC-1903 date/time data */
ippTimeToDate(time_t t) /* I - UNIX time value */
{
struct tm *unixdate; /* UNIX unixdate/time info */
@@ -1375,11 +1377,11 @@ ippWrite(http_t *http, /* I - HTTP data */
int /* O - Port number */
ippPort(void)
{
char *server_port; /* SERVER_PORT environment variable */
const char *server_port; /* SERVER_PORT environment variable */
struct servent *port; /* Port number info */
if ((server_port = getenv("SERVER_PORT")) != NULL)
if ((server_port = getenv("IPP_PORT")) != NULL)
return (atoi(server_port));
else if ((port = getservbyname("ipp", NULL)) == NULL)
return (IPP_PORT);
@@ -1452,7 +1454,6 @@ ipp_read(http_t *http, /* I - Client connection */
}
/*
* End of "$Id$".
*/
+16 -15
Ver Arquivo
@@ -191,7 +191,8 @@ typedef enum /**** IPP operations... ****/
CUPS_ADD_CLASS,
CUPS_DELETE_CLASS,
CUPS_ACCEPT_JOBS,
CUPS_REJECT_JOBS
CUPS_REJECT_JOBS,
CUPS_SET_DEFAULT
} ipp_op_t;
typedef enum /**** IPP status codes... ****/
@@ -305,25 +306,25 @@ typedef struct /**** Request State ****/
* Prototypes...
*/
extern time_t ippDateToTime(ipp_uchar_t *date);
extern ipp_attribute_t *ippAddBoolean(ipp_t *ipp, ipp_tag_t group, char *name, char value);
extern ipp_attribute_t *ippAddBooleans(ipp_t *ipp, ipp_tag_t group, char *name, int num_values, char *values);
extern ipp_attribute_t *ippAddDate(ipp_t *ipp, ipp_tag_t group, char *name, ipp_uchar_t *value);
extern ipp_attribute_t *ippAddInteger(ipp_t *ipp, ipp_tag_t group, ipp_tag_t type, char *name, int value);
extern ipp_attribute_t *ippAddIntegers(ipp_t *ipp, ipp_tag_t group, ipp_tag_t type, char *name, int num_values, int *values);
extern ipp_attribute_t *ippAddRange(ipp_t *ipp, ipp_tag_t group, char *name, int lower, int upper);
extern ipp_attribute_t *ippAddRanges(ipp_t *ipp, ipp_tag_t group, char *name, int num_values, int *lower, int *upper);
extern ipp_attribute_t *ippAddResolution(ipp_t *ipp, ipp_tag_t group, char *name, ipp_res_t units, int xres, int yres);
extern ipp_attribute_t *ippAddResolutions(ipp_t *ipp, ipp_tag_t group, char *name, int num_values, ipp_res_t units, int *xres, int *yres);
extern time_t ippDateToTime(const ipp_uchar_t *date);
extern ipp_attribute_t *ippAddBoolean(ipp_t *ipp, ipp_tag_t group, const char *name, char value);
extern ipp_attribute_t *ippAddBooleans(ipp_t *ipp, ipp_tag_t group, const char *name, int num_values, const char *values);
extern ipp_attribute_t *ippAddDate(ipp_t *ipp, ipp_tag_t group, const char *name, const ipp_uchar_t *value);
extern ipp_attribute_t *ippAddInteger(ipp_t *ipp, ipp_tag_t group, ipp_tag_t type, const char *name, int value);
extern ipp_attribute_t *ippAddIntegers(ipp_t *ipp, ipp_tag_t group, ipp_tag_t type, const char *name, int num_values, const int *values);
extern ipp_attribute_t *ippAddRange(ipp_t *ipp, ipp_tag_t group, const char *name, int lower, int upper);
extern ipp_attribute_t *ippAddRanges(ipp_t *ipp, ipp_tag_t group, const char *name, int num_values, const int *lower, const int *upper);
extern ipp_attribute_t *ippAddResolution(ipp_t *ipp, ipp_tag_t group, const char *name, ipp_res_t units, int xres, int yres);
extern ipp_attribute_t *ippAddResolutions(ipp_t *ipp, ipp_tag_t group, const char *name, int num_values, ipp_res_t units, const int *xres, const int *yres);
extern ipp_attribute_t *ippAddSeparator(ipp_t *ipp);
extern ipp_attribute_t *ippAddString(ipp_t *ipp, ipp_tag_t group, ipp_tag_t type, char *name, char *charset, char *value);
extern ipp_attribute_t *ippAddStrings(ipp_t *ipp, ipp_tag_t group, ipp_tag_t type, char *name, int num_values, char *charset, char **values);
extern ipp_attribute_t *ippAddString(ipp_t *ipp, ipp_tag_t group, ipp_tag_t type, const char *name, const char *charset, const char *value);
extern ipp_attribute_t *ippAddStrings(ipp_t *ipp, ipp_tag_t group, ipp_tag_t type, const char *name, int num_values, const char *charset, const char **values);
extern void ippDelete(ipp_t *ipp);
extern ipp_attribute_t *ippFindAttribute(ipp_t *ipp, char *name, ipp_tag_t type);
extern ipp_attribute_t *ippFindAttribute(ipp_t *ipp, const char *name, ipp_tag_t type);
extern size_t ippLength(ipp_t *ipp);
extern ipp_t *ippNew(void);
extern ipp_state_t ippRead(http_t *http, ipp_t *ipp);
extern ipp_uchar_t *ippTimeToDate(time_t t);
extern const ipp_uchar_t *ippTimeToDate(time_t t);
extern ipp_state_t ippWrite(http_t *http, ipp_t *ipp);
extern int ippPort(void);
+17 -14
Ver Arquivo
@@ -14,7 +14,7 @@
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
@@ -127,10 +127,11 @@ cupsLangFree(cups_lang_t *lang) /* I - Language to free */
*/
cups_lang_t * /* O - Language data */
cupsLangGet(char *language) /* I - Language or locale */
cupsLangGet(const char *language) /* I - Language or locale */
{
int i, count; /* Looping vars */
char real[16], /* Real language name */
char langname[16], /* Requested language name */
real[16], /* Real language name */
filename[1024], /* Filename for language locale file */
*localedir; /* Directory for locale files */
FILE *fp; /* Language locale file pointer */
@@ -149,26 +150,28 @@ cupsLangGet(char *language) /* I - Language or locale */
*/
if (language == NULL || language[0] == '\0')
language = "C";
strcpy(langname, "C");
else
strcpy(langname, language);
if (strlen(language) < 2)
if (strlen(langname) < 2)
strcpy(real, "C");
else
{
real[0] = tolower(language[0]);
real[1] = tolower(language[1]);
real[0] = tolower(langname[0]);
real[1] = tolower(langname[1]);
if (language[2] == '_' || language[2] == '-')
if (langname[2] == '_' || langname[2] == '-')
{
real[2] = '_';
real[3] = toupper(language[3]);
real[4] = toupper(language[4]);
real[3] = toupper(langname[3]);
real[4] = toupper(langname[4]);
real[5] = '\0';
language[5] = '\0';
langname[5] = '\0';
}
else
{
language[2] = '\0';
langname[2] = '\0';
real[2] = '\0';
}
}
@@ -201,7 +204,7 @@ cupsLangGet(char *language) /* I - Language or locale */
*/
for (lang = lang_cache; lang != NULL; lang = lang->next)
if (strcmp(lang->language, language) == 0)
if (strcmp(lang->language, langname) == 0)
{
lang->used ++;
@@ -288,7 +291,7 @@ cupsLangGet(char *language) /* I - Language or locale */
*/
lang->used ++;
strcpy(lang->language, language);
strcpy(lang->language, langname);
for (i = 0; i < (sizeof(lang_encodings) / sizeof(lang_encodings[0])); i ++)
if (strcmp(lang_encodings[i], line) == 0)
+29 -22
Ver Arquivo
@@ -14,7 +14,7 @@
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
@@ -48,13 +48,11 @@ typedef enum /**** Message Indices ****/
CUPS_MSG_CLOSE,
CUPS_MSG_YES,
CUPS_MSG_NO,
CUPS_MSG_AUTO,
CUPS_MSG_ON,
CUPS_MSG_OFF,
CUPS_MSG_SAVE,
CUPS_MSG_DISCARD,
CUPS_MSG_DEFAULT,
CUPS_MSG_USER_DEFINED,
CUPS_MSG_OPTIONS,
CUPS_MSG_MORE_INFO,
CUPS_MSG_BLACK,
@@ -63,18 +61,14 @@ typedef enum /**** Message Indices ****/
CUPS_MSG_MAGENTA,
CUPS_MSG_YELLOW,
CUPS_MSG_COPYRIGHT,
CUPS_MSG_ALL_RIGHTS_RESERVED,
CUPS_MSG_GENERAL,
CUPS_MSG_PRINTER,
CUPS_MSG_POSTSCRIPT,
CUPS_MSG_IMAGE,
CUPS_MSG_TEXT,
CUPS_MSG_HPGL,
CUPS_MSG_ADVANCED,
CUPS_MSG_PRINT_BANNER_PAGE,
CUPS_MSG_VERBOSE_LOGGING,
CUPS_MSG_PRINT_PAGES,
CUPS_MSG_HPGL2,
CUPS_MSG_EXTRA,
CUPS_MSG_DOCUMENT,
CUPS_MSG_OTHER,
CUPS_MSG_PRINT_PAGES,
CUPS_MSG_ENTIRE_DOCUMENT,
CUPS_MSG_PAGE_RANGE,
CUPS_MSG_REVERSE_ORDER,
@@ -87,22 +81,16 @@ typedef enum /**** Message Indices ****/
CUPS_MSG_ZOOM_BY_PERCENT,
CUPS_MSG_ZOOM_BY_PPI,
CUPS_MSG_MIRROR_IMAGE,
CUPS_MSG_ROTATE_IMAGE,
CUPS_MSG_BEST_FIT,
CUPS_MSG_COLOR_SATURATION,
CUPS_MSG_COLOR_HUE,
CUPS_MSG_NUMBER_OF_COLUMNS,
CUPS_MSG_MARGINS,
CUPS_MSG_WRAP_TEXT,
CUPS_MSG_FIT_TO_PAGE,
CUPS_MSG_SHADING,
CUPS_MSG_DEFAULT_PEN_WIDTH,
CUPS_MSG_GAMMA_CORRECTION,
CUPS_MSG_BRIGHTNESS,
CUPS_MSG_COLOR_PROFILE,
CUPS_MSG_ADD_PRINTER,
CUPS_MSG_DELETE_PRINTER,
CUPS_MSG_MODIFY_PRINTER,
CUPS_MSG_ADD,
CUPS_MSG_DELETE,
CUPS_MSG_MODIFY,
CUPS_MSG_PRINTER_URI,
CUPS_MSG_PRINTER_NAME,
CUPS_MSG_PRINTER_LOCATION,
@@ -134,6 +122,25 @@ typedef enum /**** Message Indices ****/
CUPS_MSG_IDLE,
CUPS_MSG_PROCESSING,
CUPS_MSG_STOPPED,
CUPS_MSG_ALL,
CUPS_MSG_ODD,
CUPS_MSG_EVEN_PAGES,
CUPS_MSG_DARKER_LIGHTER,
CUPS_MSG_MEDIA_SIZE,
CUPS_MSG_MEDIA_TYPE,
CUPS_MSG_MEDIA_SOURCE,
CUPS_MSG_ORIENTATION,
CUPS_MSG_PORTRAIT,
CUPS_MSG_LANDSCAPE,
CUPS_MSG_JOB_STATE,
CUPS_MSG_JOB_NAME,
CUPS_MSG_USER_NAME,
CUPS_MSG_PRIORITY,
CUPS_MSG_COPIES,
CUPS_MSG_FILE_SIZE,
CUPS_MSG_PENDING,
CUPS_MSG_OUTPUT_MODE,
CUPS_MSG_RESOLUTION,
CUPS_MSG_HTTP_BASE = 200,
CUPS_MSG_HTTP_END = 505,
CUPS_MSG_MAX
@@ -170,11 +177,11 @@ typedef struct cups_lang_str /**** Language Cache Structure ****/
* Prototypes...
*/
# define cupsLangDefault() cupsLangGet(setlocale(LC_ALL, 0))
# define cupsLangDefault() cupsLangGet(setlocale(LC_ALL, ""))
extern char *cupsLangEncoding(cups_lang_t *lang);
extern void cupsLangFlush(void);
extern void cupsLangFree(cups_lang_t *lang);
extern cups_lang_t *cupsLangGet(char *language);
extern cups_lang_t *cupsLangGet(const char *language);
# define cupsLangString(lang,msg) (lang)->messages[(msg)]
# ifdef __cplusplus
+55 -33
Ver Arquivo
@@ -59,9 +59,10 @@ static void ppd_default(ppd_option_t *o);
int /* O - Number of conflicts found */
ppdConflicts(ppd_file_t *ppd) /* I - PPD to check */
{
int i, j, /* Looping variables */
int i, j, k, /* Looping variables */
conflicts; /* Number of conflicts */
ppd_const_t *c; /* Current constraint */
ppd_group_t *g, *sg; /* Groups */
ppd_option_t *o1, *o2; /* Options */
ppd_choice_t *c1, *c2; /* Choices */
@@ -69,8 +70,22 @@ ppdConflicts(ppd_file_t *ppd) /* I - PPD to check */
if (ppd == NULL)
return (0);
/*
* Clear all conflicts...
*/
conflicts = 0;
for (i = ppd->num_groups, g = ppd->groups; i > 0; i --, g ++)
{
for (j = g->num_options, o1 = g->options; j > 0; j --, o1 ++)
o1->conflicted = 0;
for (j = g->num_subgroups, sg = g->subgroups; j > 0; j --, sg ++)
for (k = sg->num_options, o1 = sg->options; k > 0; k --, o1 ++)
o1->conflicted = 0;
}
/*
* Loop through all of the UI constraints and flag any options
* that conflict...
@@ -149,11 +164,6 @@ ppdConflicts(ppd_file_t *ppd) /* I - PPD to check */
o1->conflicted = 1;
o2->conflicted = 1;
}
else
{
o1->conflicted = 0;
o2->conflicted = 0;
}
}
/*
@@ -170,7 +180,7 @@ ppdConflicts(ppd_file_t *ppd) /* I - PPD to check */
ppd_choice_t * /* O - Choice pointer or NULL */
ppdFindChoice(ppd_option_t *o, /* I - Pointer to option */
char *choice) /* I - Name of choice */
const char *choice) /* I - Name of choice */
{
int i; /* Looping var */
ppd_choice_t *c; /* Current choice */
@@ -193,7 +203,7 @@ ppdFindChoice(ppd_option_t *o, /* I - Pointer to option */
ppd_choice_t * /* O - Pointer to choice or NULL */
ppdFindMarkedChoice(ppd_file_t *ppd, /* I - PPD file */
char *option) /* I - Keyword/option name */
const char *option) /* I - Keyword/option name */
{
int i; /* Looping var */
ppd_option_t *o; /* Pointer to option */
@@ -217,7 +227,7 @@ ppdFindMarkedChoice(ppd_file_t *ppd, /* I - PPD file */
ppd_option_t * /* O - Pointer to option or NULL */
ppdFindOption(ppd_file_t *ppd, /* I - PPD file data */
char *option) /* I - Option/Keyword name */
const char *option) /* I - Option/Keyword name */
{
int i, j, k; /* Looping vars */
ppd_option_t *o; /* Pointer to option */
@@ -250,8 +260,8 @@ ppdFindOption(ppd_file_t *ppd, /* I - PPD file data */
int /* O - Non-zero if option is marked */
ppdIsMarked(ppd_file_t *ppd, /* I - PPD file data */
char *option, /* I - Option/Keyword name */
char *choice) /* I - Choice name */
const char *option, /* I - Option/Keyword name */
const char *choice) /* I - Choice name */
{
ppd_option_t *o; /* Option pointer */
ppd_choice_t *c; /* Choice pointer */
@@ -306,8 +316,8 @@ ppdMarkDefaults(ppd_file_t *ppd)/* I - PPD file record */
int /* O - Number of conflicts */
ppdMarkOption(ppd_file_t *ppd, /* I - PPD file record */
char *option, /* I - Keyword */
char *choice) /* I - Option name */
const char *option, /* I - Keyword */
const char *choice) /* I - Option name */
{
int i; /* Looping var */
ppd_option_t *o; /* Option pointer */
@@ -332,34 +342,46 @@ ppdMarkOption(ppd_file_t *ppd, /* I - PPD file record */
for (i = o->num_choices, c = o->choices; i > 0; i --, c ++)
if (strcmp(c->choice, choice) == 0)
c->marked = 1;
else if (o->ui != PPD_UI_PICKMANY)
c->marked = 0;
break;
if (strcmp(option, "PageSize") == 0 || strcmp(option, "PageRegion") == 0)
if (i)
{
/*
* Mark current page size...
* Option found; mark it and then handle unmarking any other options.
*/
for (i = 0; i < ppd->num_sizes; i ++)
ppd->sizes[i].marked = strcmp(ppd->sizes[i].name, choice) == 0;
c->marked = 1;
/*
* Unmark the current PageSize or PageRegion setting, as appropriate...
*/
if (o->ui != PPD_UI_PICKMANY)
for (i = o->num_choices, c = o->choices; i > 0; i --, c ++)
if (strcmp(c->choice, choice) != 0)
c->marked = 0;
if (strcmp(option, "PageSize") == 0)
if (strcmp(option, "PageSize") == 0 || strcmp(option, "PageRegion") == 0)
{
o = ppdFindOption(ppd, "PageRegion");
for (i = 0; i < o->num_choices; i ++)
o->choices[i].marked = 0;
}
else
{
o = ppdFindOption(ppd, "PageSize");
for (i = 0; i < o->num_choices; i ++)
o->choices[i].marked = 0;
/*
* Mark current page size...
*/
for (i = 0; i < ppd->num_sizes; i ++)
ppd->sizes[i].marked = strcmp(ppd->sizes[i].name, choice) == 0;
/*
* Unmark the current PageSize or PageRegion setting, as appropriate...
*/
if (strcmp(option, "PageSize") == 0)
{
o = ppdFindOption(ppd, "PageRegion");
for (i = 0; i < o->num_choices; i ++)
o->choices[i].marked = 0;
}
else
{
o = ppdFindOption(ppd, "PageSize");
for (i = 0; i < o->num_choices; i ++)
o->choices[i].marked = 0;
}
}
}
+9 -3
Ver Arquivo
@@ -14,7 +14,7 @@
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
@@ -33,6 +33,12 @@
* Revision History:
*
* $Log: mime.c,v $
* Revision 1.14 1999/07/12 16:09:38 mike
* Fixed all constant arrays to use "const" modifier.
*
* Revision 1.13 1999/06/18 18:36:10 mike
* Fixed address to 44141 Airport View Drive...
*
* Revision 1.12 1999/04/21 21:19:33 mike
* Changes for HP-UX.
*
@@ -174,8 +180,8 @@ mimeDelete(mime_t *mime) /* I - MIME database */
*/
mime_t * /* O - Updated MIME database */
mimeMerge(mime_t *mime, /* I - MIME database to add to */
char *pathname) /* I - Directory to load */
mimeMerge(mime_t *mime, /* I - MIME database to add to */
const char *pathname) /* I - Directory to load */
{
#if defined(WIN32) || defined(__EMX__)
HANDLE dir; /* Directory handle */
+7 -7
Ver Arquivo
@@ -14,7 +14,7 @@
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
@@ -114,16 +114,16 @@ typedef struct /**** MIME Database ****/
extern void mimeDelete(mime_t *mime);
#define mimeLoad(pathname) mimeMerge((mime_t *)0, (pathname));
extern mime_t *mimeMerge(mime_t *mime, char *pathname);
extern mime_t *mimeMerge(mime_t *mime, const char *pathname);
extern mime_t *mimeNew(void);
extern mime_type_t *mimeAddType(mime_t *mime, char *super, char *type);
extern int mimeAddTypeRule(mime_type_t *mt, char *rule);
extern mime_type_t *mimeFileType(mime_t *mime, char *pathname);
extern mime_type_t *mimeType(mime_t *mime, char *super, char *type);
extern mime_type_t *mimeAddType(mime_t *mime, const char *super, const char *type);
extern int mimeAddTypeRule(mime_type_t *mt, const char *rule);
extern mime_type_t *mimeFileType(mime_t *mime, const char *pathname);
extern mime_type_t *mimeType(mime_t *mime, const char *super, const char *type);
extern mime_filter_t *mimeAddFilter(mime_t *mime, mime_type_t *src, mime_type_t *dst,
int cost, char *filter);
int cost, const char *filter);
extern mime_filter_t *mimeFilter(mime_t *mime, mime_type_t *src, mime_type_t *dst,
int *num_filters);
+66 -21
Ver Arquivo
@@ -45,8 +45,8 @@
*/
int /* O - Number of options */
cupsAddOption(char *name, /* I - Name of option */
char *value, /* I - Value of option */
cupsAddOption(const char *name, /* I - Name of option */
const char *value, /* I - Value of option */
int num_options, /* I - Number of options */
cups_option_t **options) /* IO - Pointer to options */
{
@@ -128,8 +128,8 @@ cupsFreeOptions(int num_options, /* I - Number of options */
* 'cupsGetOption()' - Get an option value.
*/
char * /* O - Option value or NULL */
cupsGetOption(char *name, /* I - Name of option */
const char * /* O - Option value or NULL */
cupsGetOption(const char *name, /* I - Name of option */
int num_options,/* I - Number of options */
cups_option_t *options) /* I - Options */
{
@@ -152,7 +152,7 @@ cupsGetOption(char *name, /* I - Name of option */
*/
int /* O - Number of options found */
cupsParseOptions(char *arg, /* I - Argument to parse */
cupsParseOptions(const char *arg, /* I - Argument to parse */
int num_options, /* I - Number of options */
cups_option_t **options) /* O - Options found */
{
@@ -279,29 +279,50 @@ cupsMarkOptions(ppd_file_t *ppd, /* I - PPD file */
{
int i; /* Looping var */
int conflict; /* Option conflicts */
char media_size[64]; /* Updated media size */
char *val, /* Pointer into value */
*ptr, /* Pointer into string */
s[255]; /* Temporary string */
conflict = 0;
for (i = num_options; i > 0; i --, options ++)
if (strcmp(options->name, "media-size") == 0)
if (strcmp(options->name, "media") == 0)
{
strcpy(media_size, options->value);
/*
* Loop through the option string, separating it at commas and
* marking each individual option.
*/
if (strncmp(options->value, "us-", 3) == 0)
for (val = options->value; *val;)
{
strcpy(media_size, media_size + 3);
media_size[0] = toupper(media_size[0]);
}
else if (strncmp(options->value, "iso-", 4) == 0)
{
strcpy(media_size, media_size + 4);
media_size[0] = toupper(media_size[0]);
}
/*
* Extract the sub-option from the string...
*/
if (ppdMarkOption(ppd, "PageSize", media_size))
conflict = 1;
for (ptr = s; *val && *val != ',' && (ptr - s) < (sizeof(s) - 1);)
*ptr++ = *val++;
*ptr++ = '\0';
if (*val == ',')
val ++;
/*
* Mark it...
*/
if (ppdMarkOption(ppd, "PageSize", s))
conflict = 1;
if (ppdMarkOption(ppd, "InputSlot", s))
conflict = 1;
if (ppdMarkOption(ppd, "MediaType", s))
conflict = 1;
if (ppdMarkOption(ppd, "EFMediaQualityMode", s)) /* EFI */
conflict = 1;
if (strcasecmp(s, "manual") == 0)
if (ppdMarkOption(ppd, "ManualFeed", "True"))
conflict = 1;
}
}
else if (strcmp(options->name, "sides") == 0)
{
@@ -309,18 +330,42 @@ cupsMarkOptions(ppd_file_t *ppd, /* I - PPD file */
{
if (ppdMarkOption(ppd, "Duplex", "None"))
conflict = 1;
if (ppdMarkOption(ppd, "EFDuplex", "None")) /* EFI */
conflict = 1;
if (ppdMarkOption(ppd, "KD03Duplex", "None")) /* Kodak */
conflict = 1;
}
else if (strcmp(options->value, "two-sided-long-edge") == 0)
{
if (ppdMarkOption(ppd, "Duplex", "NoTumble"))
if (ppdMarkOption(ppd, "Duplex", "DuplexNoTumble"))
conflict = 1;
if (ppdMarkOption(ppd, "EFDuplex", "DuplexNoTumble")) /* EFI */
conflict = 1;
if (ppdMarkOption(ppd, "KD03Duplex", "DuplexNoTumble")) /* Kodak */
conflict = 1;
}
else if (strcmp(options->value, "two-sided-short-edge") == 0)
{
if (ppdMarkOption(ppd, "Duplex", "Tumble"))
if (ppdMarkOption(ppd, "Duplex", "DuplexTumble"))
conflict = 1;
if (ppdMarkOption(ppd, "EFDuplex", "DuplexTumble")) /* EFI */
conflict = 1;
if (ppdMarkOption(ppd, "KD03Duplex", "DuplexTumble")) /* Kodak */
conflict = 1;
}
}
else if (strcmp(options->name, "resolution") == 0)
{
if (ppdMarkOption(ppd, "Resolution", options->value))
conflict = 1;
if (ppdMarkOption(ppd, "SetResolution", options->value))
/* Calcomp, Linotype, QMS, Summagraphics, Tektronix, Varityper */
conflict = 1;
if (ppdMarkOption(ppd, "JCLResolution", options->value)) /* HP */
conflict = 1;
if (ppdMarkOption(ppd, "CNRes_PGP", options->value)) /* Canon */
conflict = 1;
}
else if (ppdMarkOption(ppd, options->name, options->value))
conflict = 1;
+40 -30
Ver Arquivo
@@ -45,7 +45,7 @@
ppd_size_t * /* O - Size record for page or NULL */
ppdPageSize(ppd_file_t *ppd, /* I - PPD file record */
char *name) /* I - Size name */
const char *name) /* I - Size name */
{
int i; /* Looping var */
float w, l; /* Width and length of page */
@@ -57,9 +57,19 @@ ppdPageSize(ppd_file_t *ppd, /* I - PPD file record */
if (name != NULL)
{
if (strncmp(name, "Custom.", 7) == 0 &&
strcmp(ppd->sizes[0].name, "Custom") == 0)
if (strncmp(name, "Custom.", 7) == 0 && ppd->variable_sizes)
{
/*
* Find the custom page size...
*/
for (i = 0; i < ppd->num_sizes; i ++)
if (strcmp("Custom", ppd->sizes[i].name) == 0)
break;
if (i == ppd->num_sizes)
return (NULL);
/*
* Variable size; size name can be one of the following:
*
@@ -75,42 +85,42 @@ ppdPageSize(ppd_file_t *ppd, /* I - PPD file record */
if (strcasecmp(units, "in") == 0)
{
ppd->sizes[0].width = w * 72.0;
ppd->sizes[0].length = l * 72.0;
ppd->sizes[0].left = ppd->custom_margins[0];
ppd->sizes[0].bottom = ppd->custom_margins[1];
ppd->sizes[0].right = w * 72.0 - ppd->custom_margins[2];
ppd->sizes[0].top = l * 72.0 - ppd->custom_margins[3];
ppd->sizes[i].width = w * 72.0;
ppd->sizes[i].length = l * 72.0;
ppd->sizes[i].left = ppd->custom_margins[0];
ppd->sizes[i].bottom = ppd->custom_margins[1];
ppd->sizes[i].right = w * 72.0 - ppd->custom_margins[2];
ppd->sizes[i].top = l * 72.0 - ppd->custom_margins[3];
}
else if (strcasecmp(units, "cm") == 0)
{
ppd->sizes[0].width = w * 2.54 * 72.0;
ppd->sizes[0].length = l * 2.54 * 72.0;
ppd->sizes[0].left = ppd->custom_margins[0];
ppd->sizes[0].bottom = ppd->custom_margins[1];
ppd->sizes[0].right = w * 2.54 * 72.0 - ppd->custom_margins[2];
ppd->sizes[0].top = l * 2.54 * 72.0 - ppd->custom_margins[3];
ppd->sizes[i].width = w * 2.54 * 72.0;
ppd->sizes[i].length = l * 2.54 * 72.0;
ppd->sizes[i].left = ppd->custom_margins[0];
ppd->sizes[i].bottom = ppd->custom_margins[1];
ppd->sizes[i].right = w * 2.54 * 72.0 - ppd->custom_margins[2];
ppd->sizes[i].top = l * 2.54 * 72.0 - ppd->custom_margins[3];
}
else if (strcasecmp(units, "mm") == 0)
{
ppd->sizes[0].width = w * 25.4 * 72.0;
ppd->sizes[0].length = l * 25.4 * 72.0;
ppd->sizes[0].left = ppd->custom_margins[0];
ppd->sizes[0].bottom = ppd->custom_margins[1];
ppd->sizes[0].right = w * 25.4 * 72.0 - ppd->custom_margins[2];
ppd->sizes[0].top = l * 25.4 * 72.0 - ppd->custom_margins[3];
ppd->sizes[i].width = w * 25.4 * 72.0;
ppd->sizes[i].length = l * 25.4 * 72.0;
ppd->sizes[i].left = ppd->custom_margins[0];
ppd->sizes[i].bottom = ppd->custom_margins[1];
ppd->sizes[i].right = w * 25.4 * 72.0 - ppd->custom_margins[2];
ppd->sizes[i].top = l * 25.4 * 72.0 - ppd->custom_margins[3];
}
else
{
ppd->sizes[0].width = w;
ppd->sizes[0].length = l;
ppd->sizes[0].left = ppd->custom_margins[0];
ppd->sizes[0].bottom = ppd->custom_margins[1];
ppd->sizes[0].right = w - ppd->custom_margins[2];
ppd->sizes[0].top = l - ppd->custom_margins[3];
ppd->sizes[i].width = w;
ppd->sizes[i].length = l;
ppd->sizes[i].left = ppd->custom_margins[0];
ppd->sizes[i].bottom = ppd->custom_margins[1];
ppd->sizes[i].right = w - ppd->custom_margins[2];
ppd->sizes[i].top = l - ppd->custom_margins[3];
}
return (ppd->sizes);
return (ppd->sizes + i);
}
else
{
@@ -144,7 +154,7 @@ ppdPageSize(ppd_file_t *ppd, /* I - PPD file record */
float /* O - Width of page in points or 0.0 */
ppdPageWidth(ppd_file_t *ppd, /* I - PPD file record */
char *name) /* I - Size name */
const char *name) /* I - Size name */
{
ppd_size_t *size; /* Page size */
@@ -162,7 +172,7 @@ ppdPageWidth(ppd_file_t *ppd, /* I - PPD file record */
float /* O - Length of page in points or 0.0 */
ppdPageLength(ppd_file_t *ppd, /* I - PPD file */
char *name) /* I - Size name */
const char *name) /* I - Size name */
{
ppd_size_t *size; /* Page size */
+319 -44
Ver Arquivo
@@ -40,17 +40,22 @@
* ppdOpenFile() - Read a PPD file into memory.
* ppd_read() - Read a line from a PPD file, skipping comment lines
* as necessary.
* compare_strings() - Compare two strings.
* compare_groups() - Compare two groups.
* compare_options() - Compare two options.
* compare_choices() - Compare two choices.
*/
/*
* Include necessary headers.
*/
/*#define DEBUG*/
#include "ppd.h"
#include <stdlib.h>
#include <ctype.h>
#include "string.h"
#include "language.h"
#include "debug.h"
/*
@@ -75,9 +80,14 @@
* Local functions...
*/
static int compare_strings(char *s, char *t);
static int compare_groups(ppd_group_t *g0, ppd_group_t *g1);
static int compare_options(ppd_option_t *o0, ppd_option_t *o1);
static int compare_choices(ppd_choice_t *c0, ppd_choice_t *c1);
static int ppd_read(FILE *fp, char *keyword, char *option,
char *text, char **string);
static void ppd_decode(char *string);
static void ppd_fix(char *string);
static void ppd_free_group(ppd_group_t *group);
static void ppd_free_option(ppd_option_t *option);
static ppd_group_t *ppd_get_group(ppd_file_t *ppd, char *name);
@@ -408,8 +418,16 @@ ppdOpen(FILE *fp) /* I - File to read from */
float order; /* Order dependency number */
ppd_section_t section; /* Order dependency section */
ppd_profile_t *profile; /* Pointer to color profile */
char **filter; /* Pointer to filter */
cups_lang_t *language; /* Default language */
/*
* Get the default language for the user...
*/
language = cupsLangDefault();
/*
* Range check input...
*/
@@ -590,6 +608,24 @@ ppdOpen(FILE *fp) /* I - File to read from */
profile->matrix[2] + 0, profile->matrix[2] + 1,
profile->matrix[2] + 2);
}
else if (strcmp(keyword, "cupsFilter") == 0)
{
if (ppd->num_filters == 0)
filter = malloc(sizeof(char *));
else
filter = realloc(ppd->filters, sizeof(char *) * (ppd->num_filters + 1));
ppd->filters = filter;
filter += ppd->num_filters;
ppd->num_filters ++;
/*
* Copy filter string and prevent it from being freed below...
*/
*filter = string;
string = NULL;
}
else if (strcmp(keyword, "VariablePaperSize") == 0 &&
strcmp(string, "True") == 0)
{
@@ -605,7 +641,9 @@ ppdOpen(FILE *fp) /* I - File to read from */
* Add a "Custom" page size option...
*/
if ((group = ppd_get_group(ppd, "General")) == NULL)
if ((group = ppd_get_group(ppd,
cupsLangString(language,
CUPS_MSG_GENERAL))) == NULL)
{
ppdClose(ppd);
free(string);
@@ -626,7 +664,7 @@ ppdOpen(FILE *fp) /* I - File to read from */
return (NULL);
}
strcpy(choice->text, "Custom Size");
strcpy(choice->text, cupsLangString(language, CUPS_MSG_VARIABLE));
group = NULL;
option = NULL;
}
@@ -653,7 +691,7 @@ ppdOpen(FILE *fp) /* I - File to read from */
{
if ((option = ppdFindOption(ppd, "PageSize")) == NULL)
{
ppdClose(ppd);
ppdClose(ppd);
free(string);
return (NULL);
}
@@ -754,40 +792,36 @@ ppdOpen(FILE *fp) /* I - File to read from */
if (subgroup != NULL)
option = ppd_get_option(subgroup, name);
else
else if (group == NULL)
{
if (strcmp(name, "Collate") != 0 &&
strcmp(name, "Duplex") != 0 &&
strcmp(name, "InputSlot") != 0 &&
strcmp(name, "ManualFeed") != 0 &&
strcmp(name, "MediaType") != 0 &&
strcmp(name, "MediaColor") != 0 &&
strcmp(name, "MediaWeight") != 0 &&
strcmp(name, "OutputBin") != 0 &&
strcmp(name, "OutputMode") != 0 &&
strcmp(name, "OutputOrder") != 0 &&
strcmp(name, "PageSize") != 0 &&
strcmp(name, "PageRegion") != 0)
group = ppd_get_group(ppd, cupsLangString(language, CUPS_MSG_EXTRA));
else
group = ppd_get_group(ppd, cupsLangString(language, CUPS_MSG_GENERAL));
if (group == NULL)
{
if (strcmp(name, "Collate") != 0 &&
strcmp(name, "Duplex") != 0 &&
strcmp(name, "InputSlot") != 0 &&
strcmp(name, "ManualFeed") != 0 &&
strcmp(name, "MediaType") != 0 &&
strcmp(name, "MediaColor") != 0 &&
strcmp(name, "MediaWeight") != 0 &&
strcmp(name, "OutputBin") != 0 &&
strcmp(name, "OutputMode") != 0 &&
strcmp(name, "OutputOrder") != 0 &&
strcmp(name, "PageSize") != 0 &&
strcmp(name, "PageRegion") != 0)
group = ppd_get_group(ppd, "Printer");
else
group = ppd_get_group(ppd, "General");
if (group == NULL)
{
ppdClose(ppd);
free(string);
return (NULL);
}
option = ppd_get_option(group, name);
group = NULL;
ppdClose(ppd);
free(string);
return (NULL);
}
else
option = ppd_get_option(group, name);
option = ppd_get_option(group, name);
group = NULL;
}
else
option = ppd_get_option(group, name);
if (option == NULL)
{
@@ -807,7 +841,26 @@ ppdOpen(FILE *fp) /* I - File to read from */
else
option->ui = PPD_UI_PICKONE;
strcpy(option->text, text);
if (text[0])
{
strcpy(option->text, text);
ppd_fix(option->text);
}
else
{
if (strcmp(name, "PageSize") == 0)
strcpy(option->text, cupsLangString(language, CUPS_MSG_MEDIA_SIZE));
else if (strcmp(name, "MediaType") == 0)
strcpy(option->text, cupsLangString(language, CUPS_MSG_MEDIA_TYPE));
else if (strcmp(name, "InputSlot") == 0)
strcpy(option->text, cupsLangString(language, CUPS_MSG_MEDIA_SOURCE));
else if (strcmp(name, "ColorModel") == 0)
strcpy(option->text, cupsLangString(language, CUPS_MSG_OUTPUT_MODE));
else if (strcmp(name, "Resolution") == 0)
strcpy(option->text, cupsLangString(language, CUPS_MSG_RESOLUTION));
else
strcpy(option->text, name);
}
option->section = PPD_ORDER_ANY;
}
@@ -817,13 +870,6 @@ ppdOpen(FILE *fp) /* I - File to read from */
* Find the JCL group, and add if needed...
*/
if (group != NULL)
{
ppdClose(ppd);
free(string);
return (NULL);
}
group = ppd_get_group(ppd, "JCL");
if (group == NULL)
@@ -884,6 +930,8 @@ ppdOpen(FILE *fp) /* I - File to read from */
if (strchr(string, '/') != NULL) /* Just show human readable text */
strcpy(string, strchr(string, '/') + 1);
ppd_decode(string);
ppd_fix(string);
group = ppd_get_group(ppd, string);
}
else if (strcmp(keyword, "CloseGroup") == 0)
@@ -919,6 +967,8 @@ ppdOpen(FILE *fp) /* I - File to read from */
group->num_subgroups ++;
memset(subgroup, 0, sizeof(ppd_group_t));
ppd_decode(string);
ppd_fix(string);
strcpy(subgroup->text, string);
}
else if (strcmp(keyword, "CloseSubGroup") == 0)
@@ -978,6 +1028,9 @@ ppdOpen(FILE *fp) /* I - File to read from */
}
else if (strncmp(keyword, "Default", 7) == 0)
{
if (string == NULL)
continue;
if (strchr(string, '/') != NULL)
*strchr(string, '/') = '\0';
@@ -1053,13 +1106,17 @@ ppdOpen(FILE *fp) /* I - File to read from */
if (constraint->choice1[0] == '*')
{
strcpy(constraint->choice2, constraint->option2);
strcpy(constraint->option2, constraint->choice1 + 1);
constraint->choice1[0] = '\0';
}
else if (constraint->option2[0] == '*')
strcpy(constraint->option2, constraint->option2 + 1);
else
{
if (constraint->option2[0] == '*')
strcpy(constraint->option2, constraint->option2 + 1);
constraint->choice2[0] = '\0';
constraint->choice2[0] = '\0';
}
break;
case 4 : /* Two options, two choices... */
@@ -1102,7 +1159,10 @@ ppdOpen(FILE *fp) /* I - File to read from */
choice = ppd_add_choice(option, name);
if (mask & PPD_TEXT)
{
strcpy(choice->text, text);
ppd_fix(choice->text);
}
else if (strcmp(name, "True") == 0)
strcpy(choice->text, "Yes");
else if (strcmp(name, "False") == 0)
@@ -1130,24 +1190,48 @@ ppdOpen(FILE *fp) /* I - File to read from */
* Set the option back-pointer for each choice...
*/
qsort(ppd->groups, ppd->num_groups, sizeof(ppd_group_t),
(int (*)(const void *, const void *))compare_groups);
for (i = ppd->num_groups, group = ppd->groups;
i > 0;
i --, group ++)
{
qsort(group->options, group->num_options, sizeof(ppd_option_t),
(int (*)(const void *, const void *))compare_options);
for (j = group->num_options, option = group->options;
j > 0;
j --, option ++)
{
qsort(option->choices, option->num_choices, sizeof(ppd_choice_t),
(int (*)(const void *, const void *))compare_choices);
for (k = 0; k < option->num_choices; k ++)
option->choices[k].option = (void *)option;
}
qsort(group->subgroups, group->num_subgroups, sizeof(ppd_group_t),
(int (*)(const void *, const void *))compare_groups);
for (j = group->num_subgroups, subgroup = group->subgroups;
j > 0;
j --, subgroup ++)
{
qsort(subgroup->options, subgroup->num_options, sizeof(ppd_option_t),
(int (*)(const void *, const void *))compare_options);
for (k = group->num_options, option = group->options;
k > 0;
k --, option ++)
{
qsort(option->choices, option->num_choices, sizeof(ppd_choice_t),
(int (*)(const void *, const void *))compare_choices);
for (m = 0; m < option->num_choices; m ++)
option->choices[m].option = (void *)option;
}
}
}
return (ppd);
@@ -1196,7 +1280,7 @@ ppdOpenFd(int fd) /* I - File to read from */
*/
ppd_file_t * /* O - PPD file record */
ppdOpenFile(char *filename) /* I - File to read from */
ppdOpenFile(const char *filename) /* I - File to read from */
{
FILE *fp; /* File pointer */
ppd_file_t *ppd; /* PPD file record */
@@ -1226,6 +1310,147 @@ ppdOpenFile(char *filename) /* I - File to read from */
}
/*
* 'compare_strings()' - Compare two strings.
*/
int /* O - Result of comparison */
compare_strings(char *s, /* I - First string */
char *t) /* I - Second string */
{
int diff, /* Difference between digits */
digits; /* Number of digits */
/*
* Loop through both strings, returning only when a difference is
* seen. Also, compare whole numbers rather than just characters, too!
*/
while (*s && *t)
{
if (isdigit(*s) && isdigit(*t))
{
/*
* Got a number; start by skipping leading 0's...
*/
while (*s == '0')
s ++;
while (*t == '0')
t ++;
/*
* Skip equal digits...
*/
while (isdigit(*s) && *s == *t)
{
s ++;
t ++;
}
/*
* Bounce out if *s and *t aren't both digits...
*/
if (!isdigit(*s) || !isdigit(*t))
continue;
if (*s < *t)
diff = -1;
else
diff = 1;
/*
* Figure out how many more digits there are...
*/
digits = 0;
while (isdigit(*s))
{
digits ++;
s ++;
}
while (isdigit(*t))
{
digits --;
t ++;
}
/*
* Return if the number or value of the digits is different...
*/
if (digits < 0)
return (-1);
else if (digits > 0)
return (1);
else
return (diff);
}
else if (tolower(*s) < tolower(*t))
return (-1);
else if (tolower(*s) > tolower(*t))
return (1);
else
{
s ++;
t ++;
}
}
/*
* Return the results of the final comparison...
*/
if (*s)
return (1);
else if (*t)
return (-1);
else
return (0);
}
/*
* 'compare_groups()' - Compare two groups.
*/
static int /* O - Result of comparison */
compare_groups(ppd_group_t *g0, /* I - First group */
ppd_group_t *g1) /* I - Second group */
{
return (compare_strings(g0->text, g1->text));
}
/*
* 'compare_options()' - Compare two options.
*/
static int /* O - Result of comparison */
compare_options(ppd_option_t *o0,/* I - First option */
ppd_option_t *o1)/* I - Second option */
{
return (compare_strings(o0->text, o1->text));
}
/*
* 'compare_choices()' - Compare two choices.
*/
static int /* O - Result of comparison */
compare_choices(ppd_choice_t *c0,/* I - First choice */
ppd_choice_t *c1)/* I - Second choice */
{
return (compare_strings(c0->text, c1->text));
}
/*
* 'ppd_read()' - Read a line from a PPD file, skipping comment lines as
* necessary.
@@ -1476,6 +1701,56 @@ ppd_decode(char *string) /* I - String to decode */
}
/*
* 'ppd_fix()' - Fix WinANSI characters in the range 0x80 to 0x9f to be
* valid ISO-8859-1 characters...
*/
static void
ppd_fix(char *string) /* IO - String to fix */
{
unsigned char *p; /* Pointer into string */
static unsigned char lut[32] =/* Lookup table for characters */
{
0x20,
0x20,
0x20,
0x20,
0x20,
0x20,
0x20,
0x20,
0x20,
0x20,
0x20,
0x20,
0x20,
0x20,
0x20,
0x20,
'l',
'`',
'\'',
'^',
'~',
0x20, /* bar */
0x20, /* circumflex */
0x20, /* dot */
0x20, /* double dot */
0x20,
0x20, /* circle */
0x20, /* ??? */
0x20,
'\"', /* should be right quotes */
0x20, /* ??? */
0x20 /* accent */
};
for (p = (unsigned char *)string; *p; p ++)
if (*p >= 0x80 && *p < 0xa0)
*p = lut[*p - 0x80];
}
/*
+13 -11
Ver Arquivo
@@ -194,6 +194,8 @@ typedef struct /**** Files ****/
char **fonts; /* Pre-loaded fonts */
int num_profiles; /* Number of sRGB color profiles */
ppd_profile_t *profiles; /* sRGB color profiles */
int num_filters; /* Number of filters */
char **filters; /* Filter strings... */
} ppd_file_t;
@@ -207,20 +209,20 @@ extern int ppdEmit(ppd_file_t *ppd, FILE *fp,
ppd_section_t section);
extern int ppdEmitFd(ppd_file_t *ppd, int fd,
ppd_section_t section);
extern int ppdIsMarked(ppd_file_t *ppd, char *keyword,
char *option);
extern int ppdIsMarked(ppd_file_t *ppd, const char *keyword,
const char *option);
extern void ppdMarkDefaults(ppd_file_t *ppd);
extern int ppdMarkOption(ppd_file_t *ppd, char *keyword,
char *option);
extern ppd_choice_t *ppdFindChoice(ppd_option_t *o, char *option);
extern ppd_choice_t *ppdFindMarkedChoice(ppd_file_t *ppd, char *keyword);
extern ppd_option_t *ppdFindOption(ppd_file_t *ppd, char *keyword);
extern int ppdMarkOption(ppd_file_t *ppd, const char *keyword,
const char *option);
extern ppd_choice_t *ppdFindChoice(ppd_option_t *o, const char *option);
extern ppd_choice_t *ppdFindMarkedChoice(ppd_file_t *ppd, const char *keyword);
extern ppd_option_t *ppdFindOption(ppd_file_t *ppd, const char *keyword);
extern ppd_file_t *ppdOpen(FILE *fp);
extern ppd_file_t *ppdOpenFd(int fd);
extern ppd_file_t *ppdOpenFile(char *filename);
extern float ppdPageLength(ppd_file_t *ppd, char *name);
extern ppd_size_t *ppdPageSize(ppd_file_t *ppd, char *name);
extern float ppdPageWidth(ppd_file_t *ppd, char *name);
extern ppd_file_t *ppdOpenFile(const char *filename);
extern float ppdPageLength(ppd_file_t *ppd, const char *name);
extern ppd_size_t *ppdPageSize(ppd_file_t *ppd, const char *name);
extern float ppdPageWidth(ppd_file_t *ppd, const char *name);
/*
* C++ magic...
+6 -1
Ver Arquivo
@@ -129,8 +129,13 @@ typedef enum
CUPS_CSPACE_CMYK, /* Cyan, magenta, yellow, black */
CUPS_CSPACE_YMCK, /* Yellow, magenta, cyan, black */
CUPS_CSPACE_KCMY, /* Black, cyan, magenta, yellow */
CUPS_CSPACE_KCMYcm /* Black, cyan, magenta, yellow, *
CUPS_CSPACE_KCMYcm, /* Black, cyan, magenta, yellow, *
* light-cyan, light-magenta */
CUPS_CSPACE_GMCK, /* Gold, magenta, yellow, black */
CUPS_CSPACE_GMCS, /* Gold, magenta, yellow, silver */
CUPS_CSPACE_WHITE, /* White ink (as black) */
CUPS_CSPACE_GOLD, /* Gold foil */
CUPS_CSPACE_SILVER /* Silver foil */
} cups_cspace_t;
+1 -1
Ver Arquivo
@@ -14,7 +14,7 @@
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
+1 -1
Ver Arquivo
@@ -14,7 +14,7 @@
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
+1 -1
Ver Arquivo
@@ -14,7 +14,7 @@
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
+1 -1
Ver Arquivo
@@ -14,7 +14,7 @@
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
+2 -2
Ver Arquivo
@@ -14,7 +14,7 @@
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
@@ -45,7 +45,7 @@ main(int argc, /* I - Number of command-line arguments */
char *argv[]) /* I - Command-line arguments */
{
int i, j, k, m, n; /* Looping vars */
char *filename; /* File to load */
const char *filename; /* File to load */
ppd_file_t *ppd; /* PPD file record */
ppd_size_t *size; /* Size record */
ppd_group_t *group; /* UI group */
+18 -18
Ver Arquivo
@@ -14,7 +14,7 @@
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
@@ -50,8 +50,8 @@
*/
static int compare(mime_type_t **, mime_type_t **);
static int checkrules(char *, FILE *, mime_magic_t *);
static int patmatch(char *, char *);
static int checkrules(const char *, FILE *, mime_magic_t *);
static int patmatch(const char *, const char *);
/*
@@ -59,9 +59,9 @@ static int patmatch(char *, char *);
*/
mime_type_t * /* O - New (or existing) MIME type */
mimeAddType(mime_t *mime, /* I - MIME database */
char *super, /* I - Super-type name */
char *type) /* I - Type name */
mimeAddType(mime_t *mime, /* I - MIME database */
const char *super, /* I - Super-type name */
const char *type) /* I - Type name */
{
mime_type_t *temp, /* New MIME type */
**types; /* New MIME types array */
@@ -125,7 +125,7 @@ mimeAddType(mime_t *mime, /* I - MIME database */
int /* O - 0 on success, -1 on failure */
mimeAddTypeRule(mime_type_t *mt, /* I - Type to add to */
char *rule) /* I - Rule to add */
const char *rule) /* I - Rule to add */
{
int num_values, /* Number of values seen */
op, /* Operation code */
@@ -497,14 +497,14 @@ mimeAddTypeRule(mime_type_t *mt, /* I - Type to add to */
* 'mimeFileType()' - Determine the type of a file.
*/
mime_type_t * /* O - Type of file */
mimeFileType(mime_t *mime, /* I - MIME database */
char *pathname) /* I - Name of file to check */
mime_type_t * /* O - Type of file */
mimeFileType(mime_t *mime, /* I - MIME database */
const char *pathname) /* I - Name of file to check */
{
int i; /* Looping var */
FILE *fp; /* File pointer */
mime_type_t **types; /* File types */
char *filename; /* Base filename of file */
const char *filename; /* Base filename of file */
/*
@@ -556,9 +556,9 @@ mimeFileType(mime_t *mime, /* I - MIME database */
*/
mime_type_t * /* O - Matching file type definition */
mimeType(mime_t *mime, /* I - MIME database */
char *super, /* I - Super-type name */
char *type) /* I - Type name */
mimeType(mime_t *mime, /* I - MIME database */
const char *super, /* I - Super-type name */
const char *type) /* I - Type name */
{
mime_type_t key, /* MIME type search key*/
*keyptr, /* Key pointer... */
@@ -620,7 +620,7 @@ compare(mime_type_t **t0, /* I - First type */
*/
static int /* O - 1 if match, 0 if no match */
checkrules(char *filename, /* I - Filename */
checkrules(const char *filename, /* I - Filename */
FILE *fp, /* I - File to check */
mime_magic_t *rules) /* I - Rules to check */
{
@@ -906,9 +906,9 @@ checkrules(char *filename, /* I - Filename */
* 'patmatch()' - Pattern matching...
*/
static int /* O - 1 if match, 0 if no match */
patmatch(char *s, /* I - String to match against */
char *pat) /* I - Pattern to match against */
static int /* O - 1 if match, 0 if no match */
patmatch(const char *s, /* I - String to match against */
const char *pat) /* I - Pattern to match against */
{
/*
* Range check the input...
+175
Ver Arquivo
@@ -0,0 +1,175 @@
/*
* "$Id$"
*
* User, system, and password routines for the Common UNIX Printing
* System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* Contents:
*
*/
/*
* Include necessary headers...
*/
#include "cups.h"
#include <config.h>
#include <stdlib.h>
#include <ctype.h>
#if defined(WIN32) || defined(__EMX__)
/*
* WIN32 and OS/2 username and password stuff...
*/
/*
* 'cupsUser()' - Return the current user's name.
*/
const char * /* O - User name */
cupsUser(void)
{
return ("WindowsUser");
}
/*
* 'cupsGetPassword()' - Get a password from the user...
*/
const char * /* O - Password */
cupsGetPassword(const char *prompt) /* I - Prompt string */
{
return (NULL);
}
#else
/*
* UNIX username and password stuff...
*/
# include <pwd.h>
/*
* 'cupsUser()' - Return the current user's name.
*/
const char * /* O - User name */
cupsUser(void)
{
struct passwd *pwd; /* User/password entry */
/*
* Rewind the password file...
*/
setpwent();
/*
* Lookup the password entry for the current user.
*/
if ((pwd = getpwuid(getuid())) == NULL)
return ("unknown"); /* Unknown user! */
/*
* Rewind the password file again and return the username...
*/
setpwent();
return (pwd->pw_name);
}
/*
* 'cupsGetPassword()' - Get a password from the user...
*/
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; /* cupsd.conf file */
char *server; /* Pointer to server name */
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 cupsd.conf file...
*/
if ((fp = fopen(CUPS_SERVERROOT "/conf/cupsd.conf", "r")) == NULL)
return ("localhost");
/*
* Read the cupsd.conf 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)
return (server);
}
/*
* Didn't see a ServerName line, so return "localhost"...
*/
fclose(fp);
return ("localhost");
}
/*
* End of "$Id$".
*/
+188 -180
Ver Arquivo
@@ -14,7 +14,7 @@
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
@@ -23,14 +23,14 @@
*
* Contents:
*
* cupsCancelJob() - Cancel a print job.
* cupsDoRequest() - Do an IPP request...
* cupsGetClasses() - Get a list of printer classes.
* cupsGetDefault() - Get the default printer or class.
* cupsGetPPD() - Get the PPD file for a printer.
* cupsGetPrinters() - Get a list of printers.
* cupsPrintFile() - Print a file to a printer or class.
* cups_connect() - Connect to the specified host...
* cupsCancelJob() - Cancel a print job.
* cupsDoFileRequest() - Do an IPP request...
* cupsGetClasses() - Get a list of printer classes.
* cupsGetDefault() - Get the default printer or class.
* cupsGetPPD() - Get the PPD file for a printer.
* cupsGetPrinters() - Get a list of printers.
* cupsPrintFile() - Print a file to a printer or class.
* cups_connect() - Connect to the specified host...
*/
/*
@@ -64,7 +64,7 @@ static http_t *cups_server = NULL;
* Local functions...
*/
static char *cups_connect(char *name, char *printer, char *hostname);
static char *cups_connect(const char *name, char *printer, char *hostname);
/*
@@ -72,8 +72,8 @@ static char *cups_connect(char *name, char *printer, char *hostname);
*/
int /* O - 1 on success, 0 on failure */
cupsCancelJob(char *name, /* I - Name of printer or class */
int job) /* I - Job ID */
cupsCancelJob(const char *name, /* I - Name of printer or class */
int job) /* I - Job ID */
{
char printer[HTTP_MAX_URI], /* Printer name */
hostname[HTTP_MAX_URI], /* Hostname */
@@ -133,120 +133,200 @@ cupsCancelJob(char *name, /* I - Name of printer or class */
/*
* 'cupsDoRequest()' - Do an IPP request...
* 'cupsDoFileRequest()' - Do an IPP request...
*/
ipp_t * /* O - Response data */
cupsDoRequest(http_t *http, /* I - HTTP connection to server */
ipp_t *request, /* I - IPP request */
char *resource) /* I - HTTP resource for POST */
ipp_t * /* O - Response data */
cupsDoFileRequest(http_t *http, /* I - HTTP connection to server */
ipp_t *request, /* I - IPP request */
const char *resource, /* I - HTTP resource for POST */
const char *filename) /* I - File to send or NULL */
{
ipp_t *response; /* IPP response data */
char length[255]; /* Content-Length field */
http_status_t status; /* Status of HTTP request */
#if !defined(WIN32) && !defined(__EMX__)
char *password, /* Password string */
plain[255], /* Plaintext username:password */
FILE *file; /* File to send */
struct stat fileinfo; /* File information */
int bytes; /* Number of bytes read/written */
char buffer[8192]; /* Output buffer */
const char *password; /* Password string */
char plain[255], /* Plaintext username:password */
encode[255]; /* Encoded username:password */
char junk[8192]; /* Junk buffer for error data */
#endif /* !WIN32 && !__EMX__ */
static char authstring[255] = "";
/* Authorization string */
DEBUG_printf(("cupsDoRequest(%08x, %08s, \'%s\')\n", http, request, resource));
DEBUG_printf(("cupsDoFileRequest(%08x, %08s, \'%s\', \'%s\')\n",
http, request, resource, filename ? filename : "(null)"));
/*
* Setup the HTTP variables needed...
* See if we have a file to send...
*/
sprintf(length, "%d", ippLength(request));
httpClearFields(http);
httpSetField(http, HTTP_FIELD_CONTENT_LENGTH, length);
httpSetField(http, HTTP_FIELD_CONTENT_TYPE, "application/ipp");
httpSetField(http, HTTP_FIELD_AUTHORIZATION, authstring);
/*
* Try the request...
*/
if (httpPost(http, resource))
if (httpPost(http, resource))
if (filename != NULL)
{
if (stat(filename, &fileinfo))
{
/*
* Can't get file information!
*/
ippDelete(request);
return (NULL);
}
/*
* Send the IPP data and wait for the response...
*/
ippWrite(http, request);
if ((status = httpUpdate(http)) == HTTP_UNAUTHORIZED)
{
/*
* Flush any error message...
*/
httpFlush(http);
#if !defined(WIN32) && !defined(__EMX__)
if ((password = getpass("Password:")) != NULL)
if ((file = fopen(filename, "rb")) == NULL)
{
/*
* Got a password; now send it to the server...
* Can't open file!
*/
sprintf(plain, "%s:%s", cuserid(NULL), password);
httpEncode64(encode, plain);
sprintf(authstring, "Basic %s", encode);
httpClearFields(http);
httpSetField(http, HTTP_FIELD_CONTENT_LENGTH, length);
httpSetField(http, HTTP_FIELD_CONTENT_TYPE, "application/ipp");
httpSetField(http, HTTP_FIELD_AUTHORIZATION, authstring);
if (httpPost(http, resource))
httpPost(http, resource);
request->state = IPP_IDLE;
ippWrite(http, request);
status = httpUpdate(http);
ippDelete(request);
return (NULL);
}
#endif /* !WIN32 && !__EMX__ */
}
if (status != HTTP_OK)
/*
* Loop until we can send the request without authorization problems.
*/
response = NULL;
while (response == NULL)
{
DEBUG_puts("cupsDoFileRequest: setup...");
/*
* Flush any error message...
* Setup the HTTP variables needed...
*/
httpFlush(http);
if (filename != NULL)
sprintf(length, "%u", ippLength(request) + (size_t)fileinfo.st_size);
else
sprintf(length, "%u", ippLength(request));
httpClearFields(http);
httpSetField(http, HTTP_FIELD_CONTENT_LENGTH, length);
httpSetField(http, HTTP_FIELD_CONTENT_TYPE, "application/ipp");
httpSetField(http, HTTP_FIELD_AUTHORIZATION, authstring);
response = NULL;
}
else
{
/*
* Read the response...
* Try the request...
*/
response = ippNew();
DEBUG_puts("cupsDoFileRequest: post...");
if (ippRead(http, response) == IPP_ERROR)
if (httpPost(http, resource))
if (httpPost(http, resource))
break;
/*
* Send the IPP data and wait for the response...
*/
DEBUG_puts("cupsDoFileRequest: ipp write...");
request->state = IPP_IDLE;
if (ippWrite(http, request) != IPP_ERROR)
if (filename != NULL)
{
DEBUG_puts("cupsDoFileRequest: file write...");
/*
* Send the file...
*/
rewind(file);
while ((bytes = fread(buffer, 1, sizeof(buffer), file)) > 0)
if (httpWrite(http, buffer, bytes) < bytes)
break;
}
/*
* Get the server's return status...
*/
DEBUG_puts("cupsDoFileRequest: update...");
while ((status = httpUpdate(http)) == HTTP_CONTINUE);
if (status == HTTP_UNAUTHORIZED)
{
ippDelete(response);
response = NULL;
DEBUG_puts("cupsDoFileRequest: unauthorized...");
/*
* Flush any remaining data...
* Flush any error message...
*/
httpFlush(http);
if ((password = cupsGetPassword("Password:")) != NULL)
{
/*
* Got a password; send it to the server...
*/
if (!password[0])
break;
sprintf(plain, "%s:%s", cupsUser(), password);
httpEncode64(encode, plain);
sprintf(authstring, "Basic %s", encode);
continue;
}
else
break;
}
if (status != HTTP_OK)
{
DEBUG_printf(("cupsDoFileRequest: error %d...\n", status));
/*
* Flush any error message...
*/
httpFlush(http);
break;
}
else
{
/*
* Read the response...
*/
DEBUG_puts("cupsDoFileRequest: response...");
response = ippNew();
if (ippRead(http, response) == IPP_ERROR)
{
/*
* Delete the response...
*/
ippDelete(response);
response = NULL;
/*
* Flush any remaining data...
*/
httpFlush(http);
break;
}
}
}
/*
* Close the file if needed...
*/
if (filename != NULL)
fclose(file);
/*
* Delete the original request and return the response...
*/
@@ -338,7 +418,7 @@ cupsGetClasses(char ***classes) /* O - Classes */
* 'cupsGetDefault()' - Get the default printer or class.
*/
char * /* O - Default printer or NULL */
const char * /* O - Default printer or NULL */
cupsGetDefault(void)
{
ipp_t *request, /* IPP Request */
@@ -410,8 +490,8 @@ cupsGetDefault(void)
* 'cupsGetPPD()' - Get the PPD file for a printer.
*/
char * /* O - Filename for PPD file */
cupsGetPPD(char *name) /* I - Printer name */
const char * /* O - Filename for PPD file */
cupsGetPPD(const char *name) /* I - Printer name */
{
FILE *fp; /* PPD file */
int bytes; /* Number of bytes read */
@@ -575,9 +655,9 @@ cupsGetPrinters(char ***printers) /* O - Printers */
*/
int /* O - Job ID */
cupsPrintFile(char *name, /* I - Printer or class name */
char *filename, /* I - File to print */
char *title, /* I - Title of job */
cupsPrintFile(const char *name, /* I - Printer or class name */
const char *filename, /* I - File to print */
const char *title, /* I - Title of job */
int num_options,/* I - Number of options */
cups_option_t *options) /* I - Options */
{
@@ -593,9 +673,6 @@ cupsPrintFile(char *name, /* I - Printer or class name */
printer[HTTP_MAX_URI], /* Printer or class name */
uri[HTTP_MAX_URI]; /* Printer URI */
cups_lang_t *language; /* Language to use */
struct stat filestats; /* File information */
FILE *fp; /* File pointer */
char buffer[8192]; /* Copy buffer */
int jobid; /* New job ID */
@@ -605,34 +682,17 @@ cupsPrintFile(char *name, /* I - Printer or class name */
if (name == NULL || filename == NULL)
return (0);
/*
* See if the file exists and is readable...
*/
if (stat(filename, &filestats))
return (0);
if ((fp = fopen(filename, "rb")) == NULL)
{
DEBUG_puts("cupsPrintFile: Unable to open file!");
return (0);
}
/*
* Setup a connection and request data...
*/
if ((request = ippNew()) == NULL)
{
fclose(fp);
return (0);
}
if (!cups_connect(name, printer, hostname))
{
DEBUG_printf(("cupsPrintFile: Unable to open connection - %s.\n",
strerror(errno)));
fclose(fp);
ippDelete(request);
return (0);
}
@@ -670,13 +730,8 @@ cupsPrintFile(char *name, /* I - Printer or class name */
ippAddString(request, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format",
NULL, "application/octet-stream");
#if defined(WIN32) || defined(__EMX__)
ippAddString(request, IPP_TAG_JOB, IPP_TAG_NAME, "requesting-user-name",
NULL, "WindowsUser");
#else
ippAddString(request, IPP_TAG_JOB, IPP_TAG_NAME, "requesting-user-name",
NULL, cuserid(NULL));
#endif /* WIN32 || __EMX__ */
NULL, cupsUser());
if (title)
ippAddString(request, IPP_TAG_JOB, IPP_TAG_NAME, "job-name", NULL, title);
@@ -752,7 +807,7 @@ cupsPrintFile(char *name, /* I - Printer or class name */
* String value(s)...
*/
DEBUG_printf(("cupsPrintJob: Adding string option \'%s\' with value \'%s\'...\n",
DEBUG_printf(("cupsPrintFile: Adding string option \'%s\' with value \'%s\'...\n",
option, val));
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, option, NULL, val);
@@ -768,7 +823,7 @@ cupsPrintFile(char *name, /* I - Printer or class name */
n2 = strtol(s + 1, NULL, 0);
ippAddRange(request, IPP_TAG_JOB, option, n, n2);
DEBUG_printf(("cupsPrintJob: Adding range option \'%s\' with value %d-%d...\n",
DEBUG_printf(("cupsPrintFile: Adding range option \'%s\' with value %d-%d...\n",
option, n, n2));
}
else if (*s == 'x')
@@ -782,14 +837,14 @@ cupsPrintFile(char *name, /* I - Printer or class name */
else
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, option, NULL, val);
DEBUG_printf(("cupsPrintJob: Adding resolution option \'%s\' with value %s...\n",
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(("cupsPrintJob: Adding integer option \'%s\' with value %d...\n",
DEBUG_printf(("cupsPrintFile: Adding integer option \'%s\' with value %d...\n",
option, n));
}
}
@@ -799,83 +854,36 @@ cupsPrintFile(char *name, /* I - Printer or class name */
* Boolean value...
*/
DEBUG_printf(("cupsPrintJob: Adding boolean option \'%s\' with value %d...\n",
DEBUG_printf(("cupsPrintFile: Adding boolean option \'%s\' with value %d...\n",
option, n));
ippAddBoolean(request, IPP_TAG_JOB, option, (char)n);
}
}
/*
* Setup the necessary HTTP fields...
*/
httpClearFields(cups_server);
httpSetField(cups_server, HTTP_FIELD_CONTENT_TYPE, "application/ipp");
sprintf(buffer, "%u", (unsigned)(ippLength(request) + filestats.st_size));
httpSetField(cups_server, HTTP_FIELD_CONTENT_LENGTH, buffer);
/*
* Finally, issue a POST request for the printer and send the IPP data and
* file.
* Try printing the file...
*/
sprintf(uri, "/printers/%s", printer);
response = ippNew();
if (httpPost(cups_server, uri))
if ((response = cupsDoFileRequest(cups_server, request, uri, filename)) == NULL)
jobid = 0;
else if (response->request.status.status_code > IPP_OK_CONFLICT)
{
DEBUG_puts("httpPost() failed.");
DEBUG_printf(("IPP response code was 0x%x!\n",
response->request.status.status_code));
jobid = 0;
}
else if (ippWrite(cups_server, request) == IPP_ERROR)
else if ((attr = ippFindAttribute(response, "job-id", IPP_TAG_INTEGER)) == NULL)
{
DEBUG_puts("ippWrite() failed.");
DEBUG_puts("No job ID!");
jobid = 0;
}
else
{
while ((i = fread(buffer, 1, sizeof(buffer), fp)) > 0)
if (httpWrite(cups_server, buffer, i) < i)
{
DEBUG_puts("httpWrite() failed.");
jobid = attr->values[0].integer;
fclose(fp);
ippDelete(request);
ippDelete(response);
httpClose(cups_server);
return (0);
}
if (httpUpdate(cups_server) == HTTP_ERROR)
{
DEBUG_puts("httpUpdate() failed.");
jobid = 0;
}
else if ((ippRead(cups_server, response)) == IPP_ERROR)
{
DEBUG_puts("ippRead() failed.");
jobid = 0;
}
else if (response->request.status.status_code > IPP_OK_CONFLICT)
{
DEBUG_printf(("IPP response code was 0x%x!\n",
response->request.status.status_code));
jobid = 0;
}
else if ((attr = ippFindAttribute(response, "job-id", IPP_TAG_INTEGER)) == NULL)
{
DEBUG_puts("No job ID!");
jobid = 0;
}
else
jobid = attr->values[0].integer;
}
fclose(fp);
ippDelete(request);
ippDelete(response);
if (response != NULL)
ippDelete(response);
return (jobid);
}
@@ -885,10 +893,10 @@ cupsPrintFile(char *name, /* I - Printer or class name */
* 'cups_connect()' - Connect to the specified host...
*/
static char * /* I - Printer name if success, NULL if fail */
cups_connect(char *name, /* I - Destination (printer[@host]) */
char *printer, /* O - Printer name */
char *hostname) /* O - Hostname */
static char * /* I - Printer name or NULL */
cups_connect(const char *name, /* I - Destination (printer[@host]) */
char *printer, /* O - Printer name */
char *hostname) /* O - Hostname */
{
char hostbuf[HTTP_MAX_URI];
/* Name of host */
@@ -900,7 +908,7 @@ cups_connect(char *name, /* I - Destination (printer[@host]) */
return (NULL);
if (sscanf(name, "%[^@]@%s", printerbuf, hostbuf) == 1)
strcpy(hostbuf, "localhost");
strcpy(hostbuf, cupsServer());
if (hostname != NULL)
strcpy(hostname, hostbuf);
+32 -12
Ver Arquivo
@@ -30,8 +30,10 @@ include ../Makedefs
.SUFFIXES: .html .pdf .shtml
.shtml.html:
echo Formatting $@...
htmldoc --title images/cups-large.gif --numbered -f $@ $<
.shtml.pdf:
echo Formatting $@...
htmldoc --title images/cups-large.gif --duplex --compression=9 \
--numbered --jpeg -f $@ $<
@@ -41,10 +43,11 @@ include ../Makedefs
DOCUMENTS = cmp.shtml idd.shtml sam.shtml sdd.shtml ssr.shtml \
stp.shtml sum.shtml svd.shtml
DOCIMAGES = images/navbar.gif
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
WEBIMAGES = images/navbar.gif images/printer-idle.gif \
images/printer-processing.gif \
WEBIMAGES = images/classes.gif images/logo.gif images/navbar.gif \
images/printer-idle.gif images/printer-processing.gif \
images/printer-stopped.gif
#
@@ -68,22 +71,39 @@ clean:
#
install:
-$(MKDIR) $(SERVERROOT)/doc
$(CP) $(WEBPAGES) $(SERVERROOT)/doc
$(CP) overview.html overview.pdf $(SERVERROOT)/doc
$(CP) $(DOCUMENTS:.shtml=.html) $(SERVERROOT)/doc
$(CP) $(DOCUMENTS:.shtml=.pdf) $(SERVERROOT)/doc
-$(MKDIR) $(SERVERROOT)/doc/images
$(CP) $(WEBIMAGES) $(SERVERROOT)/doc/images
$(CP) $(DOCIMAGES) $(SERVERROOT)/doc/images
-$(MKDIR) $(DATADIR)/doc
$(CP) $(WEBPAGES) $(DATADIR)/doc
$(CP) overview.html overview.pdf $(DATADIR)/doc
$(CP) $(DOCUMENTS:.shtml=.html) $(DATADIR)/doc
$(CP) $(DOCUMENTS:.shtml=.pdf) $(DATADIR)/doc
-$(MKDIR) $(DATADIR)/doc/images
$(CP) $(WEBIMAGES) $(DATADIR)/doc/images
$(CP) $(DOCIMAGES) $(DATADIR)/doc/images
#
# The overview PDF file gets special attention...
# The overview, admin guide, and user's guide get special attention...
#
overview.pdf: overview.html
echo Formatting $@...
htmldoc --duplex --compression=9 --jpeg --webpage -f $@ $<
sam.html: sam.shtml
echo Formatting $@...
htmldoc --title images/cups-large.gif -f $@ $<
sam.pdf: sam.shtml
echo Formatting $@...
htmldoc --title images/cups-large.gif --duplex --compression=9 \
--jpeg -f $@ $<
sum.html: sum.shtml
echo Formatting $@...
htmldoc --title images/cups-large.gif -f $@ $<
sum.pdf: sum.shtml
echo Formatting $@...
htmldoc --title images/cups-large.gif --duplex --compression=9 \
--jpeg -f $@ $<
#
# End of Makefile.
#
+5 -2
Ver Arquivo
@@ -118,6 +118,9 @@ with reduced functionality. </P>
<P>CUPS adds network printer browsing and PostScript Printer
Description (&quot;PPD&quot;)-based printing options to support real world
applications under UNIX. </P>
<P>CUPS also includes a customized version of GNU GhostScript
(currently based off GNU GhostScript 4.03) and an image file RIP that
can be used to support non-PostScript printers. </P>
<H2><A NAME=1_3>1.3 Document Overview</A></H2>
This configuration management document is organized into the following
sections:
@@ -337,7 +340,7 @@ extension of &quot;.h&quot;.
the file, the purpose or nature of the source file, the copyright and
licensing notice, and the functions contained in the file. The file
name and revision information is provided by the CVS &quot;$Id: cmp.shtml,v
1.2 1999/05/13 20:40:40 mike Exp $&quot; tag:
1.3 1999/05/21 20:54:04 mike Exp $&quot; tag:
<UL>
<PRE>
/*
@@ -373,7 +376,7 @@ name and revision information is provided by the CVS &quot;$Id: cmp.shtml,v
</PRE>
</UL>
The bottom of each source file shall contain a trailer giving the name
of the file using the CVS &quot;$Id: cmp.shtml,v 1.2 1999/05/13 20:40:40
of the file using the CVS &quot;$Id: cmp.shtml,v 1.3 1999/05/21 20:54:04
mike Exp $&quot; tag. The primary purpose of this is to mark the end of a
source file; if the trailer is missing it is possible that code has
been lost near the end of the file:
+139 -142
Ver Arquivo
@@ -1,6 +1,6 @@
%PDF-1.2
%âãÏÓ
1 0 obj<</Producer(htmldoc 2.0b1 Copyright 1997-1999 Michael Sweet, All Rights Reserved.)/CreationDate(D:19990514170117Z)/Title(CUPS Configuration Management Plan)/Author(Easy Software Products)>>endobj
1 0 obj<</Producer(htmldoc 2.0b1 Copyright 1997-1999 Michael Sweet, All Rights Reserved.)/CreationDate(D:19990521210307Z)/Title(CUPS Configuration Management Plan)/Author(Easy Software Products)>>endobj
2 0 obj<</Type/Encoding/BaseEncoding/WinAnsiEncoding>>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
@@ -16,9 +16,9 @@
14 0 obj<</Subtype/Link/Rect[108.0 646.8 124.5 659.8]/Border[0 0 0]/Dest[198 0 R/XYZ null 658 0]>>endobj
15 0 obj<</Subtype/Link/Rect[124.5 646.8 159.6 659.8]/Border[0 0 0]/Dest[198 0 R/XYZ null 658 0]>>endobj
16 0 obj<</Subtype/Link/Rect[159.6 646.8 203.0 659.8]/Border[0 0 0]/Dest[198 0 R/XYZ null 658 0]>>endobj
17 0 obj<</Subtype/Link/Rect[108.0 633.6 124.5 646.6]/Border[0 0 0]/Dest[198 0 R/XYZ null 474 0]>>endobj
18 0 obj<</Subtype/Link/Rect[124.5 633.6 173.1 646.6]/Border[0 0 0]/Dest[198 0 R/XYZ null 474 0]>>endobj
19 0 obj<</Subtype/Link/Rect[173.1 633.6 216.4 646.6]/Border[0 0 0]/Dest[198 0 R/XYZ null 474 0]>>endobj
17 0 obj<</Subtype/Link/Rect[108.0 633.6 124.5 646.6]/Border[0 0 0]/Dest[198 0 R/XYZ null 434 0]>>endobj
18 0 obj<</Subtype/Link/Rect[124.5 633.6 173.1 646.6]/Border[0 0 0]/Dest[198 0 R/XYZ null 434 0]>>endobj
19 0 obj<</Subtype/Link/Rect[173.1 633.6 216.4 646.6]/Border[0 0 0]/Dest[198 0 R/XYZ null 434 0]>>endobj
20 0 obj<</Subtype/Link/Rect[72.0 607.2 80.2 620.2]/Border[0 0 0]/Dest[204 0 R/XYZ null 818 0]>>endobj
21 0 obj<</Subtype/Link/Rect[80.2 607.2 131.6 620.2]/Border[0 0 0]/Dest[204 0 R/XYZ null 818 0]>>endobj
22 0 obj<</Subtype/Link/Rect[108.0 594.0 124.5 607.0]/Border[0 0 0]/Dest[204 0 R/XYZ null 737 0]>>endobj
@@ -263,7 +263,7 @@
138 0 obj<</D[198 0 R/XYZ null 818 null]>>endobj
139 0 obj<</D[198 0 R/XYZ null 737 null]>>endobj
140 0 obj<</D[198 0 R/XYZ null 658 null]>>endobj
141 0 obj<</D[198 0 R/XYZ null 474 null]>>endobj
141 0 obj<</D[198 0 R/XYZ null 434 null]>>endobj
142 0 obj<</D[204 0 R/XYZ null 818 null]>>endobj
143 0 obj<</D[204 0 R/XYZ null 737 null]>>endobj
144 0 obj<</D[204 0 R/XYZ null 540 null]>>endobj
@@ -380,12 +380,14 @@ endobj
Õ;c`<k»ñΙ¡µ€±¯ïdŠÉÐP¶ÀƳ¿bY™>R°0qí{±;ÂçT®„4`6µƒ¢Y™KzÉÐ|#· &……Kæ`1 "Íë9ƒ‹ö ›òMÏRØꀅ݅‚U˜«âµëU‹`4,}<
îdÝ'–^ªÀV”v{Õ“6ƒEm2U2VÃm4°çùOÖÁ³Å,¤~PÀæÊCXõ›ÎQå†þ1k>WÂâòü[ê`1,¾)hãb˜çÇVóÚ¨•+ò¸ÿ¥ó÷‚5s.éñË9ʳ Þo_q Øvž]¶™ã=“ªeùÐÎe2`{´ýï¾ Ù¿wnÈE]†)
òò¡6nò~š<®Ü”+ó씳óÅbñêaSî‹‹Ðð·Í¹l ˜õÒ–ÿˆá’rÍ-p™Iâ Ã…ãroÀ–V¸œ°ö­/Ûp!¹§6}Ć+]âZÛãJÇ5\h.ÖNGGÛäÊœášç6¹œÑzÜñžK†cÑxw gÑ q9!Øó^
Ò¸°DôÑ!‰kpKÄgи²‘X!•kàø—p€MäÔ)¹/T®!½3åø‰Ê5``OJš#s
6Åhi/t®¦1±ŒÁ5Ì#ží2¸™bÔ,%=pÍ`sõ®ôT9WÏÚÁÈdrIᮚpõ)ЬÔa.W`¼L26#í§ÇeÌÕÓbŒyãÀ€«ÿìs/R˜puoŠü,M#®®Á O͸ºUE“daC®.´Q´)Ww`fÉøÆ\äêŽ&ö¹ºX¶¦«Ûá²/‹æ÷&¬påÒ®-^š÷Èׯí
Ùd»Ã•Ë wË&—¥!;_ç®qåòÆX_Ùê‹M.~jõêÒ^Oìr¤W#R·‡äâ’٥ꂋCvþÊvºà"æÅû‹ÞsÑ
Ò¸°DôÑ!‰kpKÄgи²‘X!•kàø—p€MäÔ)¹/T®!½3åø‰Ê5``OJš#s
6Åhi/t®¦1±ŒÁ5Ì#ží2¸™bÔ,%=pÍ`sõ®ôT9WÏÚÁÈdrIᮚpõ)ЬÔa.W`¼L26#í§ÇeÌÕÓbŒyãÀ€«ÿìs/R˜puoŠü,M#®®Á O͸ºUE“daC®.´Q´)Ww`fÉøÆ\äêŽ&ö¹ºX¶¦«Ûá²/‹æ÷&¬påÒ®-^š÷Èׯí
Ùd»Ã•Ë wË&—¥!;_ç®qåòÆX_Ùê‹M.~jõêÒ^Oìr¤W#R·‡äâ’٥ꂋCvþÊvºà"æÅû‹ÞsÑ
צ<à²ãýóÛN>¾3®Ý¨µäÙâ¡«Ïî’k7l7‹3õ8]>tù¹]sín{Ãaqq¶-ç‹ÅåÃCçÙ ×â/’wòÅ›?¾×ï…üA¼ûîê[q»ººòûºÏ!÷¿þòÃO?þþåÓן~ýEüéÓ/Ÿ~üü—Ï¿|ðó§_þYþϦñ­¸¾Þ6¾~ûîê­x}ýöêæ±ùëû?Áëë«Õ¶âëëÛ«kñúæÝþ·ÇŸ~û»È~ýáëÿ}úòYÀ—_¿ÿýÏ_ÛU¼}{õ®ð{~ýß¿ùéÇÿþºéãûo_oþ÷þ_ćŸéö‡¿‰ôóoŸ¿üíó÷Û¦±Üý?ÚiñÜendstream
endobj
194 0 obj
6320
194 0 obj
endobj
195 0 obj<</Type/Page/Parent 191 0 R/Contents 196 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 7 0 R>>>>>>endobj
196 0 obj<</Length 197 0 R/Filter/FlateDecode>>stream
xÚ+ä2T0BCc3JÎår
@@ -486,24 +488,19 @@ endobj
221 0 obj
216
endobj
222 0 obj<</Type/Page/Parent 191 0 R/Contents 223 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
223 0 obj<</Length 224 0 R/Filter/FlateDecode>>stream
VMSÛ0½çWìpjgˆ'’Þ€N/”¤\Y^'flÉ•d(ÿ¾»’çchÃ!±õôöí7¿1Œè/†«1L¦ ËÁÍjðå~ñVL¯.`•~º„¥ÎÜ«0X °h?¯žò2šìðrtÃ#k?ê2A“«uÀ_@7èñ4 o-–P#pƒ8¬„qðÒ(Oé­p˜Bò1êÔ‚Ó`°2hQ9º‹PŠgmΡÌ •B%œÜÊ‹f
d9žDc¶¨í× ms~q ¶öFÌž=òä‘çÝ9£Q4ÚõrÈT­Ÿ7èÄСu­r˜â™«”ÔçY\U…*¥xy
tŽœ¿L…~
>Hê¼H›Øü¿þÄÓì{‘Ä'ü¸†ÛÇ%X%*»Ñr kTr“iH™{ƒ„¼õ Èr%ŠÖeÿÆçšè¥˜)1ÝúØKVг—3Oòš»'IQæ%Y¨t®œåz(„ $5…ÖX©©@>£—øiôÔ ÷òDLî™ÜµF%QòÆqMg¢.(LŠ~Ú¶‰l í›uXÒ4X"kgwv굉Lß3ºø{aYæíðÝ-}Š6_+Ðøæ¢3ÚƒSß#§H¥«BÁãï©9Ø=ÀÝç¸G^¦7H5!uYQʰx#DЃi×£ÿ ¢g6ø°×Ú
‘}§çÃ9ojèsŸjP_¼=¯ß!ÇŒ\¢Ô$â4 #­ŒNké¸àáã=”B°
222 0 obj<</Type/Page/Parent 191 0 R/Contents 223 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
223 0 obj<</Length 224 0 R/Filter/FlateDecode>>stream
VMSÛ0½çWìpjgˆ'’Þ€N/”¤\Y^'flÉ•d(ÿ¾»’çchÃ!±õôöí7¿1Œè/†«1L¦ ËÁÍjðå~ñVL¯.`•~º„¥ÎÜ«0X °h?¯žò2šìðrtÃ#k?ê2A“«uÀ_@7èñ4 o-–P#pƒ8¬„qðÒ(Oé­p˜Bò1êÔ‚Ó`°2hQ9º‹PŠgmΡÌ •B%œÜÊ‹f
d9žDc¶¨í× ms~q ¶öFÌž=òä‘çÝ9£Q4ÚõrÈT­Ÿ7èÄСu­r˜â™«”ÔçY\U…*¥xy
224 0 obj
tŽœ¿L…~
>Hê¼H›Øü¿þÄÓì{‘Ä'ü¸†ÛÇ%X%*»Ñr kTr“iH™{ƒ„¼õ Èr%ŠÖeÿÆçšè¥˜)1ÝúØKVг—3Oòš»'IQæ%Y¨t®œåz(„ $5…ÖX©©@>£—øiôÔ ÷òDLî™ÜµF%QòÆqMg¢.(LŠ~Ú¶‰l í›uXÒ4X"kgwv굉Lß3ºø{aYæíðÝ-}Š6_+Ðøæ¢3ÚƒSß#§H¥«BÁãï©9Ø=ÀÝç¸G^¦7H5!uYQʰx#DЃi×£ÿ ¢g6ø°×Ú
‘}§çÃ9ojèsŸjP_¼=¯ß!ÇŒ\¢Ô$â4 #­ŒNké¸àáã=”B°
Ô‹=ÒcWâ.zh¦Ö.ô4{ÿÊø` :ngâ.ôû¸£ÝrñÍ6™·ëe ßÂÈ¡»G÷Êvcmǭ݈Pe½ÅÍkk)ÑÚ¬.¨bÛâM»–rF×IÁd•6.‚kbÒÉ3õ×b¯FñÊÚ ÆgyñÞrŠ·¢f¸Ji•‘†’>ŠšQ~´Ó*[›fžX]Ù²§X$=¦ÑMÜ…j+Z9§öï6N.;±\à” nEI-l%í›Ø·ùö&›€E!Ô¹?.W‹!× Ü Vè™m/FRЀåêÁ¯ñ¤Ðs3?Ã2š"YZJMôÆÝYçÈtü“r1EsÂbÎÏw«ÁÏÁ_øe¼?endstream
226 0 obj<</Length 227 0 R/Filter/FlateDecode>>stream
xÚmP½R„0îyŠ+- ǶÞh§sz¨õ^XŽ8`6Ì,,œ¤Úý~÷+QÉS°-ã×crß$·w vi
endobj
224 0 obj
845
endobj
endobj
225 0 obj<</Type/Page/Parent 191 0 R/Contents 226 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
226 0 obj<</Length 227 0 R/Filter/FlateDecode>>stream
xÚmP½R„0îyŠ+- ǶÞh§sz¨õ^XŽ8`6Ì,,œ¤Úý~÷+QÉS°-ã×crß$·w vi
M'»²ªÒšöz—ðJ!ÓMó)¨”Z1›¼”¥`>z²ˆƒ±gè‘áD2Ðnœ
@@ -586,7 +583,7 @@ endobj
248 0 obj
749
endobj
*<Ó;ñNV*•~hª½qÑû™5¦Uòq¯Æd†§Ii<¡D&=3%K-3Í#þ ÍøL"•¯!mc%^±4z•'9m‡´HW[ã¢Y:ÓVÄÆEË­e0—"KA@óј—xòÚÍM‘›0~ÊÓ“F\©>™ 'Y–µõnSüƒÙçYÃ)tN€Ã+:(RE³zžœL݆*²qóµs;kÌæÕááÊcÕ>~K‰É‹ÎÅÝåùÛ‹“ÇyüÛëgÆun·¢U/dÉÕ³šóÅÞÿ_½ð*$Iðb]ƒhW"»ß£N™‘¨žî%¹NnG!!¦³ºMÌ7íH_<úv=¿BiãQé9Û¶É̓ãQþ3_|úCø<+ ïXÂæ¹ à:b¹a[vHoZÃngçaاP~gMà©}¨ýû‡Žendstream
249 0 obj<</Type/Page/Parent 191 0 R/Contents 250 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
250 0 obj<</Length 251 0 R/Filter/FlateDecode>>stream
xÚ•V]OÛ0}ﯸÊ0š6´
Û$`LBb[»í&ä&7­‡kw¶Ó&þû®í”,ác¬­’ؾ¾_çø¤¿: ôé›À`×ýÒEçxÒé}A2ˆw`’ÓÚî~â³ãxDc{+psò3X%Á¦;Å»61ƒ3™¡´Ìr%ƒí°¶ÝÙ‡ÎöHHU†0*½1€2Ê`Ó[˜j–Þ 5`æŒÌ¦8ãJnç`çj‰’Ë™·¢‘K\b 2ðnÉRB®„P¥qIPèPU¶a,ÓÖyhì–[Ô>BðÌdÜ÷ÅPb;`–4oª ”mÙù€KA£¬é¸=ää¶Úu®Ì†Â4§B™¨Búþöa!˜<­'nð»1òaBo ΕZºp+¦a«×0kîémµ|lÁ…VT±¡Fª)m_1Q ´Z–VÁh4Šã¸½í¥ äJÃÕ‡wÐ?o!é÷ýÓ›7W›-ÛvQ™º¶snÈÁÕæáÓ«Ì>¹zßß7‰Ùu}]SsLÝØõ¤ ®X\jà¢LEÛ¡0èîT‘»ñœ®Ž4Q9ç£ö>¦0%
@@ -839,128 +836,128 @@ xref
0000013664 00000 n
0000013770 00000 n
0000013876 00000 n
0000013452 00000 n
0000013558 00000 n
0000013664 00000 n
0000013770 00000 n
0000013876 00000 n
0000013980 00000 n
0000014084 00000 n
0000014189 00000 n
0000014295 00000 n
0000014401 00000 n
0000014635 00000 n
0000014669 00000 n
0000014703 00000 n
0000015402 00000 n
0000015451 00000 n
0000015500 00000 n
0000015549 00000 n
0000015598 00000 n
0000015647 00000 n
0000015696 00000 n
0000015745 00000 n
0000015794 00000 n
0000015843 00000 n
0000015892 00000 n
0000015941 00000 n
0000015990 00000 n
0000016039 00000 n
0000016088 00000 n
0000016137 00000 n
0000016186 00000 n
0000016235 00000 n
0000016284 00000 n
0000016333 00000 n
0000016382 00000 n
0000016431 00000 n
0000016480 00000 n
0000016529 00000 n
0000016578 00000 n
0000016627 00000 n
0000016676 00000 n
0000016725 00000 n
0000016774 00000 n
0000016823 00000 n
0000016872 00000 n
0000016921 00000 n
0000016970 00000 n
0000017019 00000 n
0000017068 00000 n
0000017117 00000 n
0000017166 00000 n
0000017215 00000 n
0000017264 00000 n
0000017313 00000 n
0000017362 00000 n
0000017411 00000 n
0000017460 00000 n
0000017509 00000 n
0000017558 00000 n
0000017607 00000 n
0000017656 00000 n
0000017705 00000 n
0000017754 00000 n
0000017803 00000 n
0000017852 00000 n
0000017901 00000 n
0000017950 00000 n
0000017999 00000 n
0000018260 00000 n
0000018412 00000 n
0000024803 00000 n
0000024825 00000 n
0000024938 00000 n
0000025040 00000 n
0000025060 00000 n
0000025200 00000 n
0000026050 00000 n
0000026071 00000 n
0000026184 00000 n
0000026372 00000 n
0000026393 00000 n
0000026533 00000 n
0000027126 00000 n
0000027147 00000 n
0000027260 00000 n
0000027453 00000 n
0000027474 00000 n
0000027605 00000 n
0000028218 00000 n
0000028239 00000 n
0000028352 00000 n
0000028541 00000 n
0000028562 00000 n
0000028693 00000 n
0000029637 00000 n
0000029658 00000 n
0000029789 00000 n
0000030076 00000 n
0000030097 00000 n
0000030237 00000 n
0000031153 00000 n
0000031174 00000 n
0000031305 00000 n
0000031663 00000 n
0000031684 00000 n
0000031824 00000 n
0000032320 00000 n
0000032341 00000 n
0000032472 00000 n
0000032924 00000 n
0000032945 00000 n
0000033085 00000 n
0000034223 00000 n
0000034245 00000 n
0000034385 00000 n
0000035289 00000 n
0000035310 00000 n
0000035450 00000 n
0000036376 00000 n
0000036397 00000 n
0000036537 00000 n
0000013980 00000 n
0000014084 00000 n
0000014189 00000 n
0000014295 00000 n
0000014401 00000 n
0000014635 00000 n
0000014669 00000 n
0000014703 00000 n
0000015402 00000 n
0000015451 00000 n
0000015500 00000 n
0000015549 00000 n
0000015598 00000 n
0000015647 00000 n
0000015696 00000 n
0000015745 00000 n
0000015794 00000 n
0000015843 00000 n
0000015892 00000 n
0000015941 00000 n
0000015990 00000 n
0000016039 00000 n
0000016088 00000 n
0000016137 00000 n
0000016186 00000 n
0000016235 00000 n
0000016284 00000 n
0000016333 00000 n
0000016382 00000 n
0000016431 00000 n
0000016480 00000 n
0000016529 00000 n
0000016578 00000 n
0000016627 00000 n
0000016676 00000 n
0000016725 00000 n
0000016774 00000 n
0000016823 00000 n
0000016872 00000 n
0000016921 00000 n
0000016970 00000 n
0000017019 00000 n
0000017068 00000 n
0000017117 00000 n
0000017166 00000 n
0000017215 00000 n
0000017264 00000 n
0000017313 00000 n
0000017362 00000 n
0000017411 00000 n
0000017460 00000 n
0000017509 00000 n
0000017558 00000 n
0000017607 00000 n
0000017656 00000 n
0000017705 00000 n
0000017754 00000 n
0000017803 00000 n
0000017852 00000 n
0000017901 00000 n
0000017950 00000 n
0000017999 00000 n
0000018260 00000 n
0000018412 00000 n
0000024803 00000 n
0000024825 00000 n
0000024938 00000 n
0000025040 00000 n
0000025060 00000 n
0000025200 00000 n
0000026140 00000 n
0000026161 00000 n
0000026274 00000 n
0000026462 00000 n
0000026483 00000 n
0000026623 00000 n
0000027216 00000 n
0000027237 00000 n
0000027350 00000 n
0000027543 00000 n
0000027564 00000 n
0000027695 00000 n
0000028308 00000 n
0000028329 00000 n
0000028442 00000 n
0000028631 00000 n
0000028652 00000 n
0000028783 00000 n
0000029727 00000 n
0000029748 00000 n
0000029879 00000 n
0000030166 00000 n
0000030187 00000 n
0000030327 00000 n
0000031243 00000 n
0000031264 00000 n
0000031395 00000 n
0000031753 00000 n
0000031774 00000 n
0000031914 00000 n
0000032410 00000 n
0000032431 00000 n
0000032562 00000 n
0000033014 00000 n
0000033035 00000 n
0000033175 00000 n
0000034315 00000 n
0000034337 00000 n
0000034477 00000 n
0000035383 00000 n
0000035404 00000 n
0000035544 00000 n
0000036470 00000 n
0000036491 00000 n
0000036631 00000 n
0000037277 00000 n
0000037298 00000 n
0000037438 00000 n
0000038258 00000 n
0000038279 00000 n
0000038419 00000 n
0000039346 00000 n
0000039367 00000 n
0000038164 00000 n
0000039507 00000 n
0000039911 00000 n
+8 -4
Ver Arquivo
@@ -31,6 +31,10 @@ supported with reduced functionality.
Description (&quot;PPD&quot;)-based printing options to support real
world applications under UNIX.
<P>CUPS also includes a customized version of GNU GhostScript
(currently based off GNU GhostScript 4.03) and an image file RIP that
can be used to support non-PostScript printers.
<H2>Document Overview</H2>
This configuration management document is organized into the following
@@ -330,12 +334,12 @@ extension of ".h".
The top of each source file shall contain a header giving the name of the
file, the purpose or nature of the source file, the copyright and licensing
notice, and the functions contained in the file. The file name and revision
information is provided by the CVS "$Id: cmp.shtml 322 1999-05-13 20:40:46Z mike $" tag:
information is provided by the CVS "$Id: cmp.shtml 351 1999-05-21 20:54:09Z mike $" tag:
<UL>
<PRE>
/*
* "$Id: cmp.shtml 322 1999-05-13 20:40:46Z mike $"
* "$Id: cmp.shtml 351 1999-05-21 20:54:09Z mike $"
*
* Description of file contents.
*
@@ -368,14 +372,14 @@ information is provided by the CVS "$Id: cmp.shtml 322 1999-05-13 20:40:46Z mike
</UL>
The bottom of each source file shall contain a trailer giving the name
of the file using the CVS "$Id: cmp.shtml 322 1999-05-13 20:40:46Z mike $" tag. The primary purpose of this is to
of the file using the CVS "$Id: cmp.shtml 351 1999-05-21 20:54:09Z mike $" tag. The primary purpose of this is to
mark the end of a source file; if the trailer is missing it is possible
that code has been lost near the end of the file:
<UL>
<PRE>
/*
* End of "$Id: cmp.shtml 322 1999-05-13 20:40:46Z mike $".
* End of "$Id: cmp.shtml 351 1999-05-21 20:54:09Z mike $".
*/
</PRE>
</UL>
+2 -1
Ver Arquivo
@@ -1,3 +1,4 @@
BODY { background-color: #cccc99 }
H1 { font-family: sans-serif; margin-left: 5% }
H1 { font-family: sans-serif; }
H2 { font-family: sans-serif; }
TH { background-color: #999966 }
+9
Ver Arquivo
@@ -0,0 +1,9 @@
H1 { font-family: sans-serif }
H2 { font-family: sans-serif }
H3 { font-family: sans-serif }
H4 { font-family: sans-serif }
H5 { font-family: sans-serif }
H6 { font-family: sans-serif }
SUP { font-family: sans-serif; font-size: 6pt }
PRE { margin-left: 2em }
CODE { font-weight: bold }
+12 -51
Ver Arquivo
@@ -3,11 +3,11 @@
<TITLE>Documentation - Common UNIX Printing System</TITLE>
<LINK REL=STYLESHEET TYPE="text/css" HREF="cups.css">
<MAP NAME="navbar">
<AREA SHAPE="RECT" COORDS="10,10,100,35" HREF="printers" ALT="Current Printer Status">
<AREA SHAPE="RECT" COORDS="115,10,205,35" HREF="classes" ALT="Current Printer Classes Status">
<AREA SHAPE="RECT" COORDS="220,10,280,35" HREF="jobs" ALT="Current Jobs Status">
<AREA SHAPE="RECT" COORDS="295,10,470,35" HREF="documentation.html" ALT="Read CUPS Documentation On-Line">
<AREA SHAPE="RECT" COORDS="485,10,590,35" HREF="http://www.cups.org" ALT="Download the Current CUPS Software">
<AREA SHAPE="RECT" COORDS="10,10,85,30" HREF="printers" ALT="Current Printer Status">
<AREA SHAPE="RECT" COORDS="95,10,175,30" HREF="classes" ALT="Current Printer Classes Status">
<AREA SHAPE="RECT" COORDS="185,10,235,30" HREF="jobs" ALT="Current Jobs Status">
<AREA SHAPE="RECT" COORDS="245,10,395,30" HREF="documentation.html" ALT="Read CUPS Documentation On-Line">
<AREA SHAPE="RECT" COORDS="405,10,490,30" HREF="http://www.cups.org" ALT="Download the Current CUPS Software">
</MAP>
</HEAD>
@@ -19,19 +19,21 @@
<H1>Documentation</H1>
The following documentation is available (or will be shortly) for CUPS:
The following documentation for CUPS is available on this server:
<UL>
<LI>Online man pages (for users and administrators)
<LI>Whitepaper - An Overview of the Common UNIX Printing System (
<A HREF="overview.html">HTML</A> |
<A HREF="overview.pdf">PDF</A> )
<LI>Software Users Manual (Not Yet Available)
<LI>Software Users Manual (
<A HREF="sum.html">HTML</A> |
<A HREF="sum.pdf">PDF</A> )
<LI>Software Administrators Manual (Not Yet Available)
<LI>Software Administrators Manual (
<A HREF="sam.html">HTML</A> |
<A HREF="sam.pdf">PDF</A> )
<LI>Configuration Management Plan (
<A HREF="cmp.html">HTML</A> |
@@ -57,47 +59,6 @@ The following documentation is available (or will be shortly) for CUPS:
</UL>
The source code is documented and formatted according to the Configuration
Management Plan, CUPS-CMP-1.0. The design documents should provide the
programmer more than enough information to understand (and maintain, if
necessary) the code.
<H1>RFCs</H1>
The following RFCs are applicable to CUPS:
<UL>
<LI><A HREF="http://www.ietf.org/rfc/files/rfc1179.txt">
RFC 1179: Line Printer Daemon Protocol</A>
<LI><A HREF="http://www.ietf.org/rfc/files/rfc2046.txt">
RFC 2046: Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types</A>
<LI><A HREF="http://www.ietf.org/rfc/files/rfc2068.txt">
RFC 2068: Hypertext Transfer Protocol -- HTTP/1.1</A>
<LI><A HREF="http://www.ietf.org/rfc/files/rfc2069.txt">
RFC 2069: An Extension to HTTP: Digest Access Authentication</A>
<LI><A HREF="http://www.ietf.org/rfc/files/rfc2565.txt">
RFC 2565: Internet Printing Protocol/1.0: Encoding and Transport</A>
<LI><A HREF="http://www.ietf.org/rfc/files/rfc2566.txt">
RFC 2566: Internet Printing Protocol/1.0: Model and Semantics</A>
<LI><A HREF="http://www.ietf.org/rfc/files/rfc2567.txt">
RFC 2567: Design Goals for an Internet Printing Protocol</A>
<LI><A HREF="http://www.ietf.org/rfc/files/rfc2568.txt">
RFC 2568: Rationale for the Structure of the Model and Protocol
for the Internet Printing Protocol</A>
<LI><A HREF="http://www.ietf.org/rfc/files/rfc2569.txt">
RFC 2569: Mapping between LPD and IPP Protocols</A>
</UL>
<HR>
<P>The Common UNIX Printing System, CUPS, and the CUPS logo are the
+521 -55
Ver Arquivo
@@ -35,33 +35,48 @@ Copyright 1997-1999, All Rights Reserved<BR>
<LI><A HREF=#3_3_1>3.3.1 mime.types</A></LI>
<LI><A HREF=#3_3_2>3.3.2 mime.convs</A></LI>
</UL>
<LI><A HREF=#3_4>3.4 PPD Files</A></LI>
<LI><A HREF=#3_4>3.4 PostScript Printer Description Files</A></LI>
<UL>
<LI><A HREF=#3_4_1>3.4.1 CUPS Extensions to PPD Files</A></LI>
</UL>
<LI><A HREF=#3_5>3.5 Scheduler Configuration Files</A></LI>
<UL>
<LI><A HREF=#3_5_1>3.5.1 cupsd.conf</A></LI>
<LI><A HREF=#3_5_2>3.5.2 printers.conf</A></LI>
<LI><A HREF=#3_5_3>3.5.3 classes.conf</A></LI>
<LI><A HREF=#3_5_1>3.5.1 classes.conf</A></LI>
<LI><A HREF=#3_5_2>3.5.2 cupsd.conf</A></LI>
<LI><A HREF=#3_5_3>3.5.3 printers.conf</A></LI>
</UL>
</UL>
<B><A HREF=#4>4 External Interfaces</A></B>
<UL>
<LI><A HREF=#4_1>4.1 Application Socket Protocol</A></LI>
<LI><A HREF=#4_1>4.1 AppSocket Protocol</A></LI>
<LI><A HREF=#4_2>4.2 CUPS Browsing Protocol</A></LI>
<LI><A HREF=#4_3>4.3 CUPS PostScript File</A></LI>
<LI><A HREF=#4_4>4.4 CUPS Raster File</A></LI>
<LI><A HREF=#4_5>4.5 Internet Printing Protocol</A></LI>
<LI><A HREF=#4_6>4.6 Line Printer Daemon Protocol</A></LI>
<LI><A HREF=#4_7>4.7 Parallel Device</A></LI>
<LI><A HREF=#4_8>4.8 Serial Device</A></LI>
<LI><A HREF=#4_5>4.5 CUPS Raw Files</A></LI>
<LI><A HREF=#4_6>4.6 File Transfer Protocol</A></LI>
<LI><A HREF=#4_7>4.7 Internet Printing Protocol</A></LI>
<UL>
<LI><A HREF=#4_7_1>4.7.1 Get Default Destination (CUPS_GET_DEFAULT =
0x4001)</A></LI>
<LI><A HREF=#4_7_2>4.7.2 Get Printers (CUPS_GET_PRINTERS = 0x4002)</A></LI>
<LI><A HREF=#4_7_3>4.7.3 Add Printer (CUPS_ADD_PRINTER = 0x4003)</A></LI>
<LI><A HREF=#4_7_4>4.7.4 Delete Printer (CUPS_DELETE_PRINTER = 0x4004)</A>
</LI>
<LI><A HREF=#4_7_5>4.7.5 Get Classes (CUPS_GET_CLASSES = 0x4005)</A></LI>
<LI><A HREF=#4_7_6>4.7.6 Add Class (CUPS_ADD_CLASS = 0x4006)</A></LI>
<LI><A HREF=#4_7_7>4.7.7 Delete Class (CUPS_DELETE_CLASS = 0x4007)</A></LI>
<LI><A HREF=#4_7_8>4.7.8 Accept Jobs (CUPS_ACCEPT_JOBS = 0x4008)</A></LI>
<LI><A HREF=#4_7_9>4.7.9 Reject Jobs (CUPS_REJECT_JOBS = 0x4009)</A></LI>
<LI><A HREF=#4_7_10>4.7.10 Set Default Destination (CUPS_SET_DEFAULT =
0x400A)</A></LI>
</UL>
<LI><A HREF=#4_8>4.8 Line Printer Daemon Protocol</A></LI>
<LI><A HREF=#4_9>4.9 Server Message Block Protocol</A></LI>
<LI><A HREF=#4_10>4.10 Trivial File Transfer Protocol</A></LI>
</UL>
<B><A HREF=#5>5 Command-Line Interfaces</A></B>
<UL>
<LI><A HREF=#5_1>5.1 Backend Interfaces</A></LI>
<LI><A HREF=#5_2>5.2 Filter Interfaces</A></LI>
</UL>
<B><A HREF=#6>A Glossary</A></B>
<B><A HREF=#5>5 5 - Directories</A></B>
<BR>
<BR><B><A HREF=#6>A Glossary</A></B>
<UL>
<LI><A HREF=#6_1>A.1 Terms</A></LI>
<LI><A HREF=#6_2>A.2 Acronyms</A></LI>
@@ -69,15 +84,15 @@ Copyright 1997-1999, All Rights Reserved<BR>
<HR>
<H1><A NAME=1>1 Scope</A></H1>
<H2><A NAME=1_1>1.1 Identification</A></H2>
This interface design description document provides detailed file
<P>This interface design description document provides detailed file
formats, message formats, and program conventions for the Common UNIX
Printing System (&quot;CUPS&quot;) Version 1.0.
Printing System (&quot;CUPS&quot;) Version 1.0. </P>
<H2><A NAME=1_2>1.2 System Overview</A></H2>
The Common UNIX Printing System provides a portable printing layer for
UNIX&reg; operating systems. It has been developed by Easy Software
<P>The Common UNIX Printing System provides a portable printing layer
for UNIX&reg; 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.
interfaces. </P>
<P>CUPS uses the Internet Printing Protocol (IETF-IPP) as the basis for
managing print jobs and queues. The Line Printer Daemon (LPD, RFC1179),
Server Message Block (SMB), and AppSocket protocols are also supported
@@ -85,20 +100,23 @@ with reduced functionality. </P>
<P>CUPS adds network printer browsing and PostScript Printer
Description (&quot;PPD&quot;)-based printing options to support real world
applications under UNIX. </P>
<P>CUPS also includes a customized version of GNU GhostScript
(currently based off GNU GhostScript 4.03) and an image file RIP that
can be used to support non-PostScript printers. </P>
<H2><A NAME=1_3>1.3 Document Overview</A></H2>
This interface design description document is organized into the
following sections:
<P>This interface design description document is organized into the
following sections: </P>
<UL>
<LI>1 - Scope </LI>
<LI>2 - References </LI>
<LI>3 - Internal Interfaces </LI>
<LI>4 - External Interfaces </LI>
<LI>5 - Command-Line Interfaces </LI>
<LI>5 - Directories </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>
The following CUPS documentation is referenced by this document:
<P>The following CUPS documentation is referenced by this document: </P>
<UL>
<LI>CUPS-CMP-1.0: CUPS Configuration Management Plan </LI>
<LI>CUPS-IDD-1.0: CUPS System Interface Design Description </LI>
@@ -111,7 +129,7 @@ following sections:
<LI>CUPS-SVD-1.0.x: CUPS Software Version Description </LI>
</UL>
<H2><A NAME=2_2>2.2 Other Documents</A></H2>
The following non-CUPS documents are referenced by this document:
<P>The following non-CUPS documents are referenced by this document: </P>
<UL>
<LI>IEEE 1387.4, System Administration: Printing (draft) </LI>
<LI>IPP/1.0: Additional Optional Operations - Set 1 </LI>
@@ -122,28 +140,288 @@ following sections:
</UL>
<H1><A NAME=3>3 Internal Interfaces</A></H1>
<H2><A NAME=3_1>3.1 Character Set Files</A></H2>
<P>The character set files define a mapping between 8-bit characters
and the Unicode character set. They are named using the ISO standard
number defined for the character set. Each file consists of up to 256
lines of ASCII text. Each line consists of two hexadecimal numbers; the
first number is the character number in the character set (0x00 to
0xff), and the second number is the Unicode character number (0x0000 to
0xffff). </P>
<H2><A NAME=3_2>3.2 Language Files</A></H2>
<P>The language files define the default character set and a collection
of text messages in that language. They are named by prefixing the
string &quot;cups_&quot; to the front of the language specifier (e.g. &quot;cups_en&quot;,
&quot;cups_fr&quot;, etc.) Each file consists of two or more lines of ASCII text. </P>
<P>The first line identifies the character set to be used for the
messages. The currently recognized values are: </P>
<UL>
<LI>us-ascii </LI>
<LI>utf-8 </LI>
<LI>iso-8859-1 </LI>
<LI>iso-8859-2 </LI>
<LI>iso-8859-3 </LI>
<LI>iso-8859-4 </LI>
<LI>iso-8859-5 </LI>
<LI>iso-8859-6 </LI>
<LI>iso-8859-7 </LI>
<LI>iso-8859-8 </LI>
<LI>iso-8859-9 </LI>
<LI>iso-8859-14 </LI>
<LI>iso-8859-15 </LI>
</UL>
<P>The second and succeeding lines define text messages. If the message
text is preceded by a number, then the current message number is
updated and the text after the number is used. </P>
<H2><A NAME=3_3>3.3 MIME Files</A></H2>
<P>CUPS uses two MIME files in its standard configuration. </P>
<H3><A NAME=3_3_1>3.3.1 mime.types</A></H3>
<P>The mime.types file defines the recognized file types and consists
of 1 or more lines of ASCII text. Comment lines start with the pound
(&quot;#&quot;) character. The backslash (&quot;\&quot;) character can be used at the end
of a line to continue that line to the next. </P>
<P>Each non-blank line starts with a MIME type identifier
(&quot;super/type&quot;) as registered with the IANA. All text following the MIME
type is treated as a series of type recognition rules: </P>
<UL>
<PRE>
mime-type := super &quot;/&quot; type { SP rule }*
super := { &quot;a-z&quot; | &quot;A-Z&quot; }*
type := { &quot;a-z&quot; | &quot;A-Z&quot; | &quot;-&quot; | &quot;.&quot; | &quot;0-9&quot; }*
rule := { extension | match | operator | &quot;(&quot; rule &quot;)&quot; }*
extension := { &quot;a-z&quot; | &quot;A-Z&quot; | &quot;0-9&quot; }*
match := &quot;match(&quot; regexp &quot;)&quot; |
&quot;ascii(&quot; offset &quot;,&quot; length &quot;)&quot; |
&quot;printable(&quot; offset &quot;,&quot; length &quot;)&quot; |
&quot;string(&quot; offset &quot;,&quot; string &quot;)&quot; |
&quot;char(&quot; offset &quot;,&quot; value &quot;)&quot; |
&quot;short(&quot; offset &quot;,&quot; value &quot;)&quot; |
&quot;int(&quot; offset &quot;,&quot; value &quot;)&quot; |
&quot;locale(&quot; string &quot;)&quot;
operator := &quot;+&quot; | [ logical AND ]
&quot;,&quot; | SP [ logical OR ]
&quot;!&quot; [ unary NOT ]
</PRE>
</UL>
<P>The <CODE>int</CODE> and <CODE>short</CODE> rules match look for
integers in network byte order (a.k.a. big-endian) with the
most-significant byte first. </P>
<H3><A NAME=3_3_2>3.3.2 mime.convs</A></H3>
<H2><A NAME=3_4>3.4 PPD Files</A></H2>
<P>The mime.types file defines the recognized file filters and consists
of 1 or more lines of ASCII text. Comment lines start with the pound
(&quot;#&quot;) character. </P>
<P>Each non-blank line starts with two MIME type identifiers
(&quot;super/type&quot;) representing the source and destination types. Following
the MIME types are a cost value (0 to 100) and the filter program to
use. If the filter program is not specified using the full path then it
must reside in the CUPS filter directory. </P>
<H2><A NAME=3_4>3.4 PostScript Printer Description Files</A></H2>
<P>The PostScript Printer Description (PPD) file format is described in <A
HREF=http://partners.adobe.com/supportservice/devrelations/PDFS/TN/5003.PPD_Spec_v4.3.pdf>
Adobe TechNote #5003: PostScript Printer Description File Format
Specification Version 4.3</A>. </P>
<H3><A NAME=3_4_1>3.4.1 CUPS Extensions to PPD Files</A></H3>
<P>CUPS adds several new attributes that are described below. </P>
<H4>3.4.1.1 cupsFilter</H4>
<P>This string attribute provides a conversion rule of the form: </P>
<UL>
<PRE>
source/type cost program
</PRE>
</UL>
<P>The destination type is assumed to the printer's type. If a printer
supports the source type directly the special filter program &quot;-&quot; may be
specified. </P>
<H4>3.4.1.2 cupsManualCopies</H4>
<P>This boolean attribute notifies the RIP filters that the destination
printer does not support copy generation in hardware. The default value
is false. </P>
<H4>3.4.1.3 cupsModelNumber</H4>
<P>This integer attribute specifies a printer-specific model number.
This number can be used by a filter program to adjust the output for a
specific model of printer. </P>
<H4>3.4.1.4 cupsProfile</H4>
<P>This string attribute specifies a color profile of the form: </P>
<UL>
<PRE>
resolution/type density m00 m01 m02 m10 m11 m12 m20 m21 m22
</PRE>
</UL>
<P>The <I>resolution</I> and <I>type</I> values may be &quot;-&quot; to act as a
wildcard. Otherwise they must match one of the <CODE>Resolution</CODE>
or <CODE>MediaType</CODE> attributes defined in the PPD file. </P>
<P>The <I>density</I> value defines a gamma and density adjustment
function such that: </P>
<UL>
<PRE>
f(x) = d * x<SUP>1/d</SUP>
</PRE>
</UL>
<P>The <I>m00</I> through <I>m22</I> values define a 3x3 transformation
matrix for the CMY color values. The density function is applied <I>
after</I> the CMY transformation. </P>
<H4>3.4.1.5 cupsVersion</H4>
<P>This required attribute describes which version of the CUPS IDD was
used for the PPD file extensions. Currently it must be the string
&quot;1.0&quot;. </P>
<H2><A NAME=3_5>3.5 Scheduler Configuration Files</A></H2>
<H3><A NAME=3_5_1>3.5.1 cupsd.conf</A></H3>
<H3><A NAME=3_5_2>3.5.2 printers.conf</A></H3>
<H3><A NAME=3_5_3>3.5.3 classes.conf</A></H3>
<P>The scheduler reads three configuration files that define the
available printers, classes, and services: </P>
<DL>
<DT>classes.conf </DT>
<DD>This file defines all of the printer classes known to the system. </DD>
<DT>cupsd.conf </DT>
<DD>This file defines the files, directories, passwords, etc. used by
the scheduler. </DD>
<DT>printers.conf </DT>
<DD>This file defines all of the printers known to the system. </DD>
</DL>
<H3><A NAME=3_5_1>3.5.1 classes.conf</A></H3>
<P>The classes.conf file consists of 1 or more lines of ASCII text.
Comment lines start with the pound (&quot;#&quot;) character. </P>
<P>Each non-blank line starts with the name of a configuration
directive followed by its value. The following directives are
understood:
<CENTER>
<TABLE BORDER=1 WIDTH=90%>
<TR><TH WIDTH=25%>Directive</TH><TH>Description</TH></TR>
<TR><TD>&lt;Class name&gt;
<BR> &lt;/Class&gt;</TD><TD></TR>
<TR><TD>&lt;DefaultClass name&gt;
<BR> &lt;/Class&gt;</TD><TD></TR>
<TR><TD>Info</TD><TD></TR>
<TR><TD>Location</TD><TD></TR>
<TR><TD>MoreInfo</TD><TD></TR>
<TR><TD>Printer</TD><TD></TR>
</TABLE>
</CENTER>
</P>
<H3><A NAME=3_5_2>3.5.2 cupsd.conf</A></H3>
<P>The cupsd.conf file consists of 1 or more lines of ASCII text.
Comment lines start with the pound (&quot;#&quot;) character. </P>
<P>Each non-blank line starts with the name of a configuration
directive followed by its value. The following directives are
understood:
<CENTER>
<TABLE BORDER=1 WIDTH=90%>
<TR><TH WIDTH=25%>Directive</TH><TH>Default</TH><TH>Description</TH></TR>
<TR><TD>AccessLog</TD><TD><TD>Specifies the location of the access log
file (default &quot;logs/access_log&quot;).</TD></TR>
<TR><TD>Allow</TD><TD><TD></TR>
<TR><TD>AuthClass</TD><TD><TD></TR>
<TR><TD>AuthType</TD><TD><TD></TR>
<TR><TD>BrowseAddress</TD><TD><TD></TR>
<TR><TD>BrowseInterval</TD><TD><TD></TR>
<TR><TD>BrowsePort</TD><TD><TD></TR>
<TR><TD>BrowseTimeout</TD><TD><TD></TR>
<TR><TD>Browsing</TD><TD><TD></TR>
<TR><TD>DefaultCharset</TD><TD><TD></TR>
<TR><TD>DefaultLanguage</TD><TD><TD></TR>
<TR><TD>Deny</TD><TD><TD></TR>
<TR><TD>DocumentRoot</TD><TD><TD></TR>
<TR><TD>ErrorLog</TD><TD><TD></TR>
<TR><TD>Group</TD><TD><TD></TR>
<TR><TD>HostNameLookups</TD><TD><TD></TR>
<TR><TD>ImplicitClasses</TD><TD><TD></TR>
<TR><TD>KeepAlive</TD><TD><TD></TR>
<TR><TD>KeepAliveTimeout</TD><TD><TD></TR>
<TR><TD>&lt;Location path&gt;
<BR> &lt;/Location&gt;</TD><TD><TD></TR>
<TR><TD>LogLevel</TD><TD><TD></TR>
<TR><TD>MaxClients</TD><TD><TD></TR>
<TR><TD>MaxLogSize</TD><TD><TD></TR>
<TR><TD>MaxRequestSize</TD><TD><TD></TR>
<TR><TD>Order</TD><TD><TD></TR>
<TR><TD>PageLog</TD><TD><TD></TR>
<TR><TD>Port</TD><TD><TD></TR>
<TR><TD>RIPCache</TD><TD><TD></TR>
<TR><TD>ServerAdmin</TD><TD><TD></TR>
<TR><TD>ServerName</TD><TD><TD></TR>
<TR><TD>ServerRoot</TD><TD><TD></TR>
<TR><TD>SystemGroup</TD><TD><TD></TR>
<TR><TD>TempDir</TD><TD><TD></TR>
<TR><TD>Timeout</TD><TD><TD></TR>
<TR><TD>User</TD><TD><TD></TR>
</TABLE>
</CENTER>
</P>
<H3><A NAME=3_5_3>3.5.3 printers.conf</A></H3>
<P>The printers.conf file consists of 1 or more lines of ASCII text.
Comment lines start with the pound (&quot;#&quot;) character. </P>
<P>Each non-blank line starts with the name of a configuration
directive followed by its value. The following directives are
understood:
<CENTER>
<TABLE BORDER=1 WIDTH=90%>
<TR><TH WIDTH=25%>Directive</TH><TH>Description</TH></TR>
<TR><TD>&lt;DefaultPrinter name&gt;
<BR> &lt;/Printer&gt;</TD><TD></TR>
<TR><TD>DeviceURI</TD><TD></TR>
<TR><TD>Info</TD><TD></TR>
<TR><TD>Location</TD><TD></TR>
<TR><TD>MoreInfo</TD><TD></TR>
<TR><TD>&lt;Printer name&gt;
<BR> &lt;/Printer&gt;</TD><TD></TR>
<TR><TD>State</TD><TD></TR>
</TABLE>
</CENTER>
</P>
<H1><A NAME=4>4 External Interfaces</A></H1>
<H2><A NAME=4_1>4.1 Application Socket Protocol</A></H2>
<H2><A NAME=4_1>4.1 AppSocket Protocol</A></H2>
<P>The AppSocket protocol is an 8-bit clean TCP/IP socket connection.
The default IP service port is 9100. </P>
<H2><A NAME=4_2>4.2 CUPS Browsing Protocol</A></H2>
<P>The CUPS Browsing Protocol is a UDP/IP-based broadcast service. By
default this service operates on IP service port 631. </P>
<P>Each broadcast packet describes the state of a single printer or
class and is an ASCII text string of up to 1450 bytes ending with a
newline (0x0a). The string is formatted as follows: </P>
<UL>
<PRE>
type SP state SP uri NL
</PRE>
</UL>
<P>The <I>state</I> and <I>uri</I> values correspond to the IPP <CODE>
printer-state</CODE> and <CODE>printer-uri-supported</CODE> attributes. </P>
<P>The <I>type</I> value is a hexadecimal number string representing
capability/type bits:
<CENTER>
<TABLE BORDER=1 WIDTH=40%>
<TR><TH WIDTH=8%>Bit</TH><TH>Description</TH></TR>
<TR><TD>0</TD><TD>0 = printer
<BR> 1 = class</TD></TR>
<TR><TD>1</TD><TD>0 = local
<BR> 1 = remote
<BR> (always 1)</TD></TR>
<TR><TD>2</TD><TD>1 = can print B</TD></TR>
<TR><TD>3</TD><TD>1 = can print color</TD></TR>
<TR><TD>4</TD><TD>1 = can duplex</TD></TR>
<TR><TD>5</TD><TD>1 = can staple</TD></TR>
<TR><TD>6</TD><TD>1 = can do fast copies</TD></TR>
<TR><TD>7</TD><TD>1 = can do fast collating</TD></TR>
<TR><TD>8</TD><TD>1 = can punch holes</TD></TR>
<TR><TD>9</TD><TD>1 = can cover</TD></TR>
<TR><TD>10</TD><TD>1 = can bind</TD></TR>
<TR><TD>11</TD><TD>1 = can sort</TD></TR>
<TR><TD>12</TD><TD>1 = can print up to 9x14 inches</TD></TR>
<TR><TD>13</TD><TD>1 = can print up to 18x24 inches</TD></TR>
<TR><TD>14</TD><TD>1 = can print up to 36x48 inches</TD></TR>
<TR><TD>15</TD><TD>1 = can print variable sizes</TD></TR>
</TABLE>
</CENTER>
</P>
<H2><A NAME=4_3>4.3 CUPS PostScript File</A></H2>
CUPS PostScript files are device-dependent Adobe PostScript program
files. The PostScript language is described in the PostScript Language
Reference Manual, Third Edition.
<P>CUPS PostScript files are device-dependent Adobe PostScript program
files. The PostScript language is described in the <A HREF=http://partners.adobe.com/supportservice/devrelations/PDFS/TN/PLRM.pdf>
Adobe PostScript Language Reference Manual, Third Edition</A>. </P>
<P>The MIME type for CUPS PostScript files is <CODE>
application/vnd.cups-postscript</CODE>. </P>
<H2><A NAME=4_4>4.4 CUPS Raster File</A></H2>
CUPS raster files are device-dependent raster image files that contain
a PostScript page device dictionary and device-dependent raster imagery
for each page in the document. These files are used to transfer raster
data from the PostScript and image file RIPs to device-dependent
filters that convert the raster data to a printable format.
<P>CUPS raster files are device-dependent raster image files that
contain a PostScript page device dictionary and device-dependent raster
imagery for each page in the document. These files are used to
transfer raster data from the PostScript and image file RIPs to
device-dependent filters that convert the raster data to a printable
format. </P>
<P>A raster file begins with a four byte synchronization word:
0x52615374 (&quot;RaSt&quot;) for big-endian architectures and 0x74536152
(&quot;tSaR&quot;) for little-endian architectures. The writer of the raster
@@ -156,7 +434,8 @@ automatically. </P>
immediately by the raster data for that page.
<CENTER>
<TABLE BORDER=1 WIDTH=80%>
<TR><TH>Bytes</TH><TH>Description</TH><TH>Values</TH></TR>
<TR><TH WIDTH=10%>Bytes</TH><TH WIDTH=20%>Description</TH><TH>Values</TH>
</TR>
<TR><TD>0-63</TD><TD>MediaClass</TD><TD>Nul-terminated ASCII string</TD></TR>
<TR><TD>64-127</TD><TD>MediaColor</TD><TD>Nul-terminated ASCII string</TD>
</TR>
@@ -165,7 +444,7 @@ immediately by the raster data for that page.
<TR><TD>192-255</TD><TD>OutputType</TD><TD>Nul-terminated ASCII string</TD>
</TR>
<TR><TD>256-259</TD><TD>AdvanceDistance</TD><TD>0 to 2<SUP>32</SUP> - 1
pixels</TD></TR>
points</TD></TR>
<TR><TD>260-263</TD><TD>AdvanceMedia</TD><TD>0 = Never advance roll
<BR> 1 = Advance roll after file
<BR> 2 = Advance roll after job
@@ -184,7 +463,7 @@ pixels</TD></TR>
resolution in dots-per-inch.</TD></TR>
<TR><TD>284-299</TD><TD>ImagingBoundingBox</TD><TD>Four integers giving
the left, bottom, right, and top positions of the page bounding box in
pixels</TD></TR>
points</TD></TR>
<TR><TD>300-303</TD><TD>InsertSheet</TD><TD>0 = Do not insert separator
sheets
<BR> 1 = Insert separator sheets</TD></TR>
@@ -197,7 +476,7 @@ sheets
<BR> 2 = Bottom edge is first
<BR> 3 = Left edge is first</TD></TR>
<TR><TD>312-319</TD><TD>Margins</TD><TD>Left and bottom origin of image
in pixels</TD></TR>
in points</TD></TR>
<TR><TD>320-323</TD><TD>ManualFeed</TD><TD>0 = Do not manually feed
media
<BR> 1 = Manually feed media</TD></TR>
@@ -207,24 +486,211 @@ media
meter squared</TD></TR>
<TR><TD>332-335</TD><TD>MirrorPrint</TD><TD>0 = Do not mirror prints
<BR> 1 = Mirror prints</TD></TR>
<TR><TD>336-339</TD><TD>NegativePrint</TD><TD></TR>
<TR><TD><TD><TD></TR>
<TR><TD><TD><TD></TR>
<TR><TD><TD><TD></TR>
<TR><TD><TD><TD></TR>
<TR><TD><TD><TD></TR>
<TR><TD>336-339</TD><TD>NegativePrint</TD><TD>0 = Do not invert prints
<BR> 1 = Invert prints</TD></TR>
<TR><TD>340-343</TD><TD>NumCopies</TD><TD>1 to 2<SUP>32</SUP> - 1</TD></TR>
<TR><TD>344-347</TD><TD>Orientation</TD><TD>0 = Do not rotate page
<BR> 1 = Rotate page counter-clockwise
<BR> 2 = Turn page upside down
<BR> 3 = Rotate page clockwise</TD></TR>
<TR><TD>348-351</TD><TD>OutputFaceUp</TD><TD>0 = Output face down
<BR> 1 = Output face up</TD></TR>
<TR><TD>352-359</TD><TD>PageSize</TD><TD>Width and length in points</TD></TR>
<TR><TD>360-363</TD><TD>Separations</TD><TD>0 = Print composite image
<BR> 1 = Print color separations</TD></TR>
<TR><TD>364-367</TD><TD>TraySwitch</TD><TD>0 = Do not change trays if
selected tray is empty
<BR> 1 = Change trays if selected tray is empty</TD></TR>
<TR><TD>368-371</TD><TD>Tumble</TD><TD>0 = Do not rotate even pages
when duplexing
<BR> 1 = Rotate even pages when duplexing</TD></TR>
<TR><TD>372-375</TD><TD>cupsWidth</TD><TD>Width of page image in pixels</TD>
</TR>
<TR><TD>376-379</TD><TD>cupsHeight</TD><TD>Height of page image in
pixels</TD></TR>
<TR><TD>380-383</TD><TD>cupsMediaType</TD><TD>Driver-specific 0 to 2<SUP>
32</SUP> - 1</TD></TR>
<TR><TD>384-387</TD><TD>cupsBitsPerColor</TD><TD>1, 2, 4, 8 bits</TD></TR>
<TR><TD>388-391</TD><TD>cupsBitsPerPixel</TD><TD>1 to 32 bits</TD></TR>
<TR><TD>392-395</TD><TD>cupsBytesPerLine</TD><TD>1 to 2<SUP>32</SUP> -
1 bytes</TD></TR>
<TR><TD>396-399</TD><TD>cupsColorOrder</TD><TD>0 = chunky pixels (CMYK
CMYK CMYK)
<BR> 1 = banded pixels (CCC MMM YYY KKK)
<BR> 2 = planar pixels (CCC... MMM... YYY... KKK...)</TD></TR>
<TR><TD>400-403</TD><TD>cupsColorSpace</TD><TD>0 = white
<BR> 1 = RGB
<BR> 2 = RGBA
<BR> 3 = black
<BR> 4 = CMY
<BR> 5 = YMC
<BR> 6 = CMYK
<BR> 7 = YMCK
<BR> 8 = KCMY
<BR> 9 = KCMYcm</TD></TR>
<TR><TD>404-407</TD><TD>cupsCompression</TD><TD>Driver-specific 0 to 2<SUP>
32</SUP> - 1</TD></TR>
<TR><TD>408-411</TD><TD>cupsRowCount</TD><TD>Driver-specific 0 to 2<SUP>
32</SUP> - 1</TD></TR>
<TR><TD>412-415</TD><TD>cupsRowFeed</TD><TD>Driver-specific 0 to 2<SUP>
32</SUP> - 1</TD></TR>
<TR><TD>416-419</TD><TD>cupsRowStep</TD><TD>Driver-specific 0 to 2<SUP>
32</SUP> - 1</TD></TR>
</TABLE>
</CENTER>
</P>
<H2><A NAME=4_5>4.5 Internet Printing Protocol</A></H2>
<H2><A NAME=4_6>4.6 Line Printer Daemon Protocol</A></H2>
<H2><A NAME=4_7>4.7 Parallel Device</A></H2>
<H2><A NAME=4_8>4.8 Serial Device</A></H2>
<P>The MIME type for CUPS Raster files is <CODE>
application/vnd.cups-raster</CODE>. </P>
<H2><A NAME=4_5>4.5 CUPS Raw Files</A></H2>
<P>Raw files are printer-dependent print files that are in a format
suitable to the destination printer (e.g. HP-PCL, HP-RTL, etc.) The
MIME type for CUPS Raw files is <CODE>application/vnd.cups-raw</CODE>. </P>
<H2><A NAME=4_6>4.6 File Transfer Protocol</A></H2>
<P>The File Transfer Protocol (FTP) is described by <A HREF=http://www.ietf.org/rfc/rfc959.txt>
RFC 959: File Transfer Protocol</A>. </P>
<H2><A NAME=4_7>4.7 Internet Printing Protocol</A></H2>
<P>The Internet Printing Protocol is described by the following RFCs: </P>
<UL>
<LI><A HREF=http://www.ietf.org/rfc/rfc2565.txt>RFC 2565: Internet
Printing Protocol/1.0: Encoding and Transport</A></LI>
<LI><A HREF=http://www.ietf.org/rfc/rfc2566.txt>RFC 2566: Internet
Printing Protocol/1.0: Model and Semantics</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 for the Internet Printing
Protocol</A></LI>
<LI><A HREF=http://www.ietf.org/rfc/rfc2569.txt>RFC 2569: Mapping
between LPD and IPP Protocols</A></LI>
</UL>
<P>CUPS defines the following extension operations to IPP. </P>
<H3><A NAME=4_7_1>4.7.1 Get Default Destination (CUPS_GET_DEFAULT =
0x4001)</A></H3>
<P>The get default destination operation returns the printer attributes
for the system default printer or class. The only required attributes
are <CODE>attributes-charset</CODE> and <CODE>
attributes-natural-language</CODE>. </P>
<P>Get default destination will only return <CODE>ipp-ok</CODE>. </P>
<H3><A NAME=4_7_2>4.7.2 Get Printers (CUPS_GET_PRINTERS = 0x4002)</A></H3>
<P>The get printers operation returns the printer attributes for all
printers known to the system. The only required attributes are <CODE>
attributes-charset</CODE> and <CODE>attributes-natural-language</CODE>. </P>
<P>Get printers will only return <CODE>ipp-ok</CODE>. </P>
<H3><A NAME=4_7_3>4.7.3 Add Printer (CUPS_ADD_PRINTER = 0x4003)</A></H3>
<P>The add printer operation adds or replaces the specified printer.
The <CODE>attributes-charset</CODE>, <CODE>attributes-natural-language</CODE>
and <CODE>printer-uri</CODE> attributes are required. </P>
<P>The <CODE>printer-location</CODE>, <CODE>printer-info</CODE>, <CODE>
printer-more-info</CODE>, and <CODE>device-uri</CODE> attributes are
required when initially adding a printer and optional when modifying a
printer. </P>
<P>A PPD file or System V interface script may follow the IPP request
body. If a valid interface script or PPD file is not provided then the
printer is treated as a generic PostScript device. </P>
<P>Add printer will return <CODE>ipp-ok</CODE>, <CODE>ipp-not-authorized</CODE>
, <CODE>ipp-bad-request</CODE>, or <CODE>ipp-attributes</CODE>. </P>
<H3><A NAME=4_7_4>4.7.4 Delete Printer (CUPS_DELETE_PRINTER = 0x4004)</A>
</H3>
<P>The delete printer operation removes the specified printer. The only
required attributes are <CODE>attributes-charset</CODE>, <CODE>
attributes-natural-language</CODE>, and <CODE>printer-uri</CODE>. </P>
<P>Delete printer will return <CODE>ipp-ok</CODE>, <CODE>ipp-not-found</CODE>
, or <CODE>ipp-not-authorized</CODE>. </P>
<H3><A NAME=4_7_5>4.7.5 Get Classes (CUPS_GET_CLASSES = 0x4005)</A></H3>
<P>The get classes operation returns the printer attributes for all
classes known to the system. The only required attributes are <CODE>
attributes-charset</CODE> and <CODE>attributes-natural-language</CODE>. </P>
<P>Get classes will only return <CODE>ipp-ok</CODE>. </P>
<H3><A NAME=4_7_6>4.7.6 Add Class (CUPS_ADD_CLASS = 0x4006)</A></H3>
<P>The add class operation adds or replaces the specified class. The <CODE>
attributes-charset</CODE>, <CODE>attributes-natural-language</CODE>,
and <CODE>printer-uri</CODE> attributes are required. </P>
<P>The <CODE>printer-location</CODE>, <CODE>printer-info</CODE>, <CODE>
printer-more-info</CODE>, and <CODE>member-uris</CODE> attributes are
required when initially adding a printer and optional when modifying a
printer. </P>
<P>Add class will return <CODE>ipp-ok</CODE>, <CODE>ipp-not-authorized</CODE>
, <CODE>ipp-bad-request</CODE>, or <CODE>ipp-attributes</CODE>. </P>
<H3><A NAME=4_7_7>4.7.7 Delete Class (CUPS_DELETE_CLASS = 0x4007)</A></H3>
<P>The delete class operation removes the specified class. The only
required attributes are <CODE>attributes-charset</CODE>, <CODE>
attributes-natural-language</CODE>, and <CODE>printer-uri</CODE>. </P>
<P>Delete class will return <CODE>ipp-ok</CODE>, <CODE>ipp-not-found</CODE>
, or <CODE>ipp-not-authorized</CODE>. </P>
<H3><A NAME=4_7_8>4.7.8 Accept Jobs (CUPS_ACCEPT_JOBS = 0x4008)</A></H3>
<P>The accept jobs operation allows jobs to be accepted by the
specified destination. The only required attributes are <CODE>
attributes-charset</CODE>, <CODE>attributes-natural-language</CODE>,
and <CODE>printer-uri</CODE>. </P>
<P>Accept jobs will return <CODE>ipp-ok</CODE>, <CODE>ipp-not-found</CODE>
, or <CODE>ipp-not-authorized</CODE>. </P>
<H3><A NAME=4_7_9>4.7.9 Reject Jobs (CUPS_REJECT_JOBS = 0x4009)</A></H3>
<P>The reject jobs operation prevents jobs from being accepted by the
specified destination. The only required attributes are <CODE>
attributes-charset</CODE>, <CODE>attributes-natural-language</CODE>,
and <CODE>printer-uri</CODE>. </P>
<P>Reject jobs will return <CODE>ipp-ok</CODE>, <CODE>ipp-not-found</CODE>
, or <CODE>ipp-not-authorized</CODE>. </P>
<H3><A NAME=4_7_10>4.7.10 Set Default Destination (CUPS_SET_DEFAULT =
0x400A)</A></H3>
<P>The set default destination operation returns the printer attributes
for the system default printer or class. The only required attributes
are <CODE>attributes-charset</CODE>, <CODE>attributes-natural-language</CODE>
, and <CODE>printer-uri</CODE>. </P>
<P>Set default destination will return <CODE>ipp-ok</CODE>, <CODE>
ipp-not-authorized</CODE>, <CODE>ipp-bad-request</CODE>, or <CODE>
ipp-not-found</CODE>. </P>
<H2><A NAME=4_8>4.8 Line Printer Daemon Protocol</A></H2>
<P>The Line Printer Daemon (LPD) protocol is described by <A HREF=http://www.ietf.org/rfc/rfc1179.txt>
RFC 1179: Line Printer Daemon Protocol</A>. </P>
<H2><A NAME=4_9>4.9 Server Message Block Protocol</A></H2>
<P>The Server Message Block (SMB) and related Common Internet File
System (CIFS) protocols are described at <A HREF=http://anu.samba.org/cifs>
http://anu.samba.org/cifs</A>. </P>
<H2><A NAME=4_10>4.10 Trivial File Transfer Protocol</A></H2>
<H1><A NAME=5>5 Command-Line Interfaces</A></H1>
<H2><A NAME=5_1>5.1 Backend Interfaces</A></H2>
<H2><A NAME=5_2>5.2 Filter Interfaces</A></H2>
<P>The Trivial File Transfer Protocol (TFTP) is described by <A HREF=http://www.ietf.org/rfc/rfc1350.txt>
RFC 1350: The TFTP Protocol (Revision 2)</A>. </P>
<H1><A NAME=5>5 5 - Directories</A></H1>
<DL>
<DT>/usr/bin </DT>
<DD>The <CODE>cancel</CODE>, <CODE>lp</CODE>, <CODE>lpq</CODE>, <CODE>
lpr</CODE>, <CODE>lprm</CODE>, and <CODE>lpstat</CODE> commands reside
here. </DD>
<DT>/usr/lib </DT>
<DD>The <CODE>accept</CODE>, <CODE>disable</CODE>, <CODE>enable</CODE>, <CODE>
lpadmin</CODE>, and <CODE>reject</CODE> commands reside here. </DD>
<DT>/usr/sbin </DT>
<DD>The <CODE>lpc</CODE> and <CODE>cupsd</CODE> commands resize here. </DD>
<DT>/usr/share/cups </DT>
<DD>The character set and filter data files reside here. </DD>
<DT>/usr/share/cups/fonts </DT>
<DD>The <CODE>pstoraster</CODE> font files reside here. </DD>
<DT>/usr/share/cups/model </DT>
<DD>The sample PPD files reside here. </DD>
<DT>/usr/share/cups/pstoraster </DT>
<DD>The <CODE>pstoraster</CODE> data files reside here. </DD>
<DT>/var/cups </DT>
<DD>This is the root directory of the CUPS scheduler. </DD>
<DT>/var/cups/backend </DT>
<DD>The backend filters reside here. </DD>
<DT>/var/cups/cgi-bin </DT>
<DD>The CGI programs reside here. </DD>
<DT>/var/cups/conf </DT>
<DD>The scheduler configuration and MIME files reside here. </DD>
<DT>/var/cups/doc </DT>
<DD>The scheduler documentation files reside here. </DD>
<DT>/var/cups/filter </DT>
<DD>The file filters reside here. </DD>
<DT>/var/cups/interfaces </DT>
<DD>System V interface scripts reside here. </DD>
<DT>/var/cups/logs </DT>
<DD>The <CODE>access_log</CODE>, <CODE>error_log</CODE>, and <CODE>
page_log</CODE> files reside here. </DD>
<DT>/var/cups/ppd </DT>
<DD>This directory contains PPD files for each printer. </DD>
<DT>/var/cups/requests </DT>
<DD>This directory contains pending print job files. </DD>
</DL>
<H1 TYPE=A VALUE=1><A NAME=6>A Glossary</A></H1>
<H2><A NAME=6_1>A.1 Terms</A></H2>
<DL>
+1469 -650
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+876 -41
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
Arquivo binário não exibido.

Depois

Largura:  |  Altura:  |  Tamanho: 591 B

+5 -5
Ver Arquivo
@@ -3,11 +3,11 @@
<TITLE>Common UNIX Printing System</TITLE>
<LINK REL=STYLESHEET TYPE="text/css" HREF="cups.css">
<MAP NAME="navbar">
<AREA SHAPE="RECT" COORDS="10,10,100,35" HREF="printers" ALT="Current Printer Status">
<AREA SHAPE="RECT" COORDS="115,10,205,35" HREF="classes" ALT="Current Printer Classes Status">
<AREA SHAPE="RECT" COORDS="220,10,280,35" HREF="jobs" ALT="Current Jobs Status">
<AREA SHAPE="RECT" COORDS="295,10,470,35" HREF="documentation.html" ALT="Read CUPS Documentation On-Line">
<AREA SHAPE="RECT" COORDS="485,10,590,35" HREF="http://www.cups.org" ALT="Download the Current CUPS Software">
<AREA SHAPE="RECT" COORDS="10,10,85,30" HREF="printers" ALT="Current Printer Status">
<AREA SHAPE="RECT" COORDS="95,10,175,30" HREF="classes" ALT="Current Printer Classes Status">
<AREA SHAPE="RECT" COORDS="185,10,235,30" HREF="jobs" ALT="Current Jobs Status">
<AREA SHAPE="RECT" COORDS="245,10,395,30" HREF="documentation.html" ALT="Read CUPS Documentation On-Line">
<AREA SHAPE="RECT" COORDS="405,10,490,30" HREF="http://www.cups.org" ALT="Download the Current CUPS Software">
</MAP>
</HEAD>
Arquivo binário não exibido.
+810 -38
Ver Arquivo
@@ -15,55 +15,827 @@ Copyright 1997-1999, All Rights Reserved<BR>
<HR>
<H1 ALIGN=CENTER><A NAME=CONTENTS>Table of Contents</A></H1>
<BR>
<BR><B><A HREF=#1>1 Scope</A></B>
<BR><B><A HREF=#1>Preface</A></B>
<UL>
<LI><A HREF=#1_1>1.1 Identification</A></LI>
<LI><A HREF=#1_2>1.2 Document Overview</A></LI>
<LI><A HREF=#1_1>System Overview</A></LI>
<LI><A HREF=#1_2>Document Overview</A></LI>
</UL>
<B><A HREF=#2>2 Printing System Overview</A></B>
<BR>
<BR><B><A HREF=#3>3 Printer Queue Management</A></B>
<B><A HREF=#2>1 - Printing System Overview</A></B>
<UL>
<LI><A HREF=#3_1>3.1 Adding Printers</A></LI>
<LI><A HREF=#3_2>3.2 Removing Printers</A></LI>
<LI><A HREF=#3_3>3.3 Reconfiguring Printers</A></LI>
<LI><A HREF=#3_4>3.4 Printer Options</A></LI>
<LI><A HREF=#3_5>3.5 Printer Security</A></LI>
<LI><A HREF=#3_6>3.6 Printer Accounting</A></LI>
<LI><A HREF=#2_1>The Printing Problem</A></LI>
<LI><A HREF=#2_2>The Technology</A></LI>
<LI><A HREF=#2_3>Jobs</A></LI>
<LI><A HREF=#2_4>Classes</A></LI>
<LI><A HREF=#2_5>Filters</A></LI>
<LI><A HREF=#2_6>Printer Drivers</A></LI>
<LI><A HREF=#2_7>Networking</A></LI>
</UL>
<B><A HREF=#4>4 Printing System Management</A></B>
<B><A HREF=#3>2 - Building and Installing CUPS</A></B>
<UL>
<LI><A HREF=#4_1>4.1 Log Files</A></LI>
<LI><A HREF=#4_2>4.2 Network Configuration</A></LI>
<LI><A HREF=#4_3>4.3 Adding File Types</A></LI>
<LI><A HREF=#3_1>Installing a Source Distribution</A></LI>
<UL>
<LI><A HREF=#3_1_1>Requirements</A></LI>
<LI><A HREF=#3_1_2>Compiling CUPS</A></LI>
<LI><A HREF=#3_1_3>Installing the Software</A></LI>
<LI><A HREF=#3_1_4>Running the Software</A></LI>
</UL>
<LI><A HREF=#binary>Installing a Binary Distribution</A></LI>
</UL>
<B><A HREF=#4>3 - Printer Queue Management</A></B>
<UL>
<LI><A HREF=#4_1>The lpadmin Command</A></LI>
<LI><A HREF=#4_2>Adding and Modifying Printers</A></LI>
<UL>
<LI><A HREF=#4_2_1>Using Standard Printer Drivers</A></LI>
</UL>
<LI><A HREF=#4_3>Removing Printers</A></LI>
<LI><A HREF=#4_4>Printer Classes</A></LI>
<LI><A HREF=#4_5>Setting the Default Printer</A></LI>
<LI><A HREF=#4_6>Starting and Stopping Printers</A></LI>
<LI><A HREF=#4_7>Accepting and Rejecting Print Jobs</A></LI>
</UL>
<B><A HREF=#5>4 - Printing System Management</A></B>
<UL>
<LI><A HREF=#5_1>Changing the Configuration Files</A></LI>
<LI><A HREF=#5_2>Temporary Files</A></LI>
<LI><A HREF=#5_3>Network Configuration</A></LI>
<UL>
<LI><A HREF=#5_3_1>Port</A></LI>
<LI><A HREF=#5_3_2>Listen</A></LI>
<LI><A HREF=#5_3_3>BrowsePort</A></LI>
<LI><A HREF=#5_3_4>BrowseAddress</A></LI>
</UL>
<LI><A HREF=#5_4>Printer Security</A></LI>
<UL>
<LI><A HREF=#5_4_1>Location</A></LI>
<LI><A HREF=#5_4_2>Order</A></LI>
<LI><A HREF=#5_4_3>Allow</A></LI>
<LI><A HREF=#5_4_4>Deny</A></LI>
<LI><A HREF=#5_4_5>AuthType</A></LI>
<LI><A HREF=#5_4_6>AuthClass</A></LI>
<LI><A HREF=#5_4_7>AuthGroupName</A></LI>
<LI><A HREF=#5_4_8>SystemGroup</A></LI>
</UL>
<LI><A HREF=#5_5>File Formats</A></LI>
<UL>
<LI><A HREF=#5_5_1>mime.types</A></LI>
<LI><A HREF=#5_5_2>mime.convs</A></LI>
</UL>
</UL>
<B><A HREF=#6>5 - Printer Accounting</A></B>
<UL>
<LI><A HREF=#6_1>Where to Find the Log Files</A></LI>
<LI><A HREF=#6_2>The access_log File</A></LI>
<LI><A HREF=#6_3>The error_log File</A></LI>
<LI><A HREF=#6_4>The page_log File</A></LI>
</UL>
<HR>
<H1><A NAME=1>1 Scope</A></H1>
<H2><A NAME=1_1>1.1 Identification</A></H2>
This softwae administrators manual provides printer administration
<H1 ALIGN=RIGHT><A NAME=1>Preface</A></H1>
This software administrators manual provides printer administration
information for the Common UNIX Printing System (&quot;CUPS&quot;) Version 1.0.0.
<H2><A NAME=1_2>1.2 Document Overview</A></H2>
<H2><A NAME=1_1>System Overview</A></H2>
The Common UNIX Printing System provides a portable printing layer for
UNIX&reg; 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.
<P>CUPS uses the Internet Printing Protocol (IETF-IPP) as the basis for
managing print jobs and queues. The Line Printer Daemon (LPD, RFC1179),
Server Message Block (SMB), and AppSocket protocols are also supported
with reduced functionality. </P>
<P>CUPS adds network printer browsing and PostScript Printer
Description (&quot;PPD&quot;)-based printing options to support real world
applications under UNIX. </P>
<P>CUPS also includes a customized version of GNU GhostScript
(currently based off GNU GhostScript 4.03) and an image file RIP that
can be used to support non-PostScript printers. </P>
<H2><A NAME=1_2>Document Overview</A></H2>
<P>This software administrators manual is organized into the following
sections:</P>
<UL>
<LI>1 - Scope</LI>
<LI>2 - References</LI>
<LI>3 - Printing System Overview</LI>
<LI>4 - Printer Queue Management</LI>
<LI>5 - Printing System Management</LI>
<LI>A - Glossary</LI>
<LI>1 - Printing System Overview</LI>
<LI>2 - Building and Installing CUPS</LI>
<LI>3 - Printer Queue Management</LI>
<LI>4 - Printing System Management</LI>
<LI>5 - Printer Accounting</LI>
</UL>
<H1><A NAME=2>2 Printing System Overview</A></H1>
<H1><A NAME=3>3 Printer Queue Management</A></H1>
<H2><A NAME=3_1>3.1 Adding Printers</A></H2>
<H2><A NAME=3_2>3.2 Removing Printers</A></H2>
<H2><A NAME=3_3>3.3 Reconfiguring Printers</A></H2>
<H2><A NAME=3_4>3.4 Printer Options</A></H2>
<H2><A NAME=3_5>3.5 Printer Security</A></H2>
<H2><A NAME=3_6>3.6 Printer Accounting</A></H2>
<H1><A NAME=4>4 Printing System Management</A></H1>
<H2><A NAME=4_1>4.1 Log Files</A></H2>
<H2><A NAME=4_2>4.2 Network Configuration</A></H2>
<H2><A NAME=4_3>4.3 Adding File Types</A></H2>
<H1 ALIGN=RIGHT><A NAME=2>1 - Printing System Overview</A></H1>
<P>This chapter provides an overview of how the Common UNIX Printing
System works. </P>
<H2><A NAME=2_1>The Printing Problem</A></H2>
<P>For years <I>the printing problem</I> has plagued UNIX&reg;. Unlike
Microsoft&reg; Windows&reg; or MacOS, UNIX has no standard interface or system
in place for supporting printers. Among the solutions previously
available, the Berkeley and System V printing systems are the most
prevalent. </P>
<P>These printing systems support line printers (text only) or
PostScript printers (text and graphics), and with some coaxing they can
be made to support a full range of printers and file formats. However,
because each varient of the UNIX operating system uses a different
printing system than the next, developing printer drivers for a wide
range of printers is extremely difficult. That combined with the
limited volume of customers for each UNIX varient has forced most
printer vendors to give up supporting UNIX entirely. </P>
<P>The Common UNIX Printing System, or CUPS, is designed to eliminate <I>
the printing problem</I>. One common printing system can be used by all
UNIX varients to support the printing needs of users. Printer vendors
can use its modular filter interface to develop a single driver program
that supports a wide range of file formats with little or no effort.
Since CUPS provides both the System V and Berkeley printing commands,
users (and applications) can reap the benefits of this new technology
with no changes. </P>
<H2><A NAME=2_2>The Technology</A></H2>
<P>CUPS is based upon an emerging Internet standard called the Internet
Printing Protocol, or IPP. IPP has been embraced by dozens of printer
and printer server manufacturers, and will be supported by the next
Microsoft Windows operating system. </P>
<P>IPP defines a standard protocol for printing as well as managing
print jobs and printer options like media size, resolution, and so
forth. Like all IP-based protocols, IPP can be used locally or over the
Internet to printers hundreds or thousands of miles away. Unlike other
protocols, however, IPP also supports access control, authentication,
and encryption, making it a much more secure printing solution than
older ones. </P>
<P>IPP is layered on top of the Hyper-Text Transport Protocol, or HTTP,
which is the basis of web servers on the Internet. This allows the user
to view documentation and status information on a printer or server
using their web browser. </P>
<P>CUPS provides a complete IPP/1.0-based printing system that provides
Basic authentication and domain or IP-based access control. Digest
authentication and TLS encryption will be available in future versions
of CUPS. </P>
<H2><A NAME=2_3>Jobs</A></H2>
<P>Each file that is submitted for printing is called a <I>job</I>.
Jobs are identified by a unique number starting at 1 and are assigned
to a particular destination (usually a printer). Jobs can also have
options associated with them such as media size, number of copies, and
priority. </P>
<H2><A NAME=2_4>Classes</A></H2>
<P>CUPS supports collections of printers known as <I>classes</I>. Jobs
sent to a class are forwarded to the first available printer in the
class. </P>
<H2><A NAME=2_5>Filters</A></H2>
<P>Filters allow a user or application to print many types of files
without extra effort. Print jobs sent to a CUPS server are filtered
before sending them to a printer. Some filters convert job files to
different formats that the printer can understand. Others perform page
selection and ordering tasks. <I>Backend</I> filters perform the most
important task of all - they send the filtered print data to the
printer. </P>
<P>CUPS provides filters for printing many types of image files,
HP-GL/2 files, PDF files, and text files. CUPS also supplies PostScript
and image file Raster Image Processors, or RIPs, that convert
PostScript or image files into bitmaps that can be sent to a raster
printer. </P>
<P>CUPS provides backends for printing over parallel and serial ports,
and over the network via the JetDirect (AppSocket), Server Message
Block, and Line Printer Daemon protocols. </P>
<H2><A NAME=2_6>Printer Drivers</A></H2>
<P>Printer drivers in CUPS consist of one of more filters specific to a
printer. CUPS includes a sample printer driver for Hewlett-Packard
LaserJet and DeskJet printers. While this driver does not generate
optimal output for different printer models, it does demonstrate how
you can write your own printer drivers and incorporate them into CUPS. </P>
<H2><A NAME=2_7>Networking</A></H2>
<P>Printers and classes on the local system are automatically shared
with other systems on the network. This allows you to setup one system
to print to a printer and use this system as a printer server or spool
host for all of the others. If there is only one occurrence of a
printer on a network, then that printer can be accessed using its name
alone. If more than one printer exists with the same name, users must
select the printer by specifying which server to use (e.g.
&quot;printer@host1&quot; or &quot;printer@host2&quot;.) </P>
<P>CUPS also provides <I>implicit classes</I>, which are collections of
printers and/or classes with the same name. This allows you to setup
multiple servers pointing to the same physical network printer, for
example, so that you aren't relying on a single system for printing.
Because this also works with printer classes, you can setup multiple
servers and printers and never worry about a &quot;single point of failure&quot;
unless all of the printers and servers goes down! </P>
<H1 ALIGN=RIGHT><A NAME=3>2 - Building and Installing CUPS</A></H1>
<P>This chapter shows how to build and install the Common UNIX Printing
System. If you are installing a binary distribution from the CUPS web
site, proceed to the section titled, <A HREF=#binary>Installing a
Binary Distribution</A>. </P>
<H2><A NAME=3_1>Installing a Source Distribution</A></H2>
<H3><A NAME=3_1_1>Requirements</A></H3>
<P>You'll need an ANSI C compiler to build CUPS on your system. As its
name implies, CUPS is designed to run on the UNIX operating system,
however the CUPS interface library and most of the filters and backends
supplied with CUPS should also run under Microsoft&reg; Windows&reg;. </P>
<P>For the image file filters and PostScript RIP, you'll need the JPEG,
PNG, TIFF, and ZLIB libraries. CUPS will build without these, but with
reduced functionality. Easy Software Products maintains a mirror of the
current versions of these libraries at: </P>
<UL>
<PRE>
<A HREF=ftp://ftp.easysw.com/pub/libraries>ftp://ftp.easysw.com/pub/libraries</A>
</PRE>
</UL>
<P>If you make changes to the man pages you'll need GNU groff or
another nroff-like package. GNU groff is available from: </P>
<UL>
<PRE>
<A HREF=ftp://ftp.gnu.org/pub/groff>ftp://ftp.gnu.org/pub/groff</A>
</PRE>
</UL>
<P>The documentation is formatted using the HTMLDOC software. If you
need to make changes you can get the HTMLDOC software from: </P>
<UL>
<PRE>
<A HREF=http://www.easysw.com/htmldoc>http://www.easysw.com/htmldoc</A>
</PRE>
</UL>
<H3><A NAME=3_1_2>Compiling CUPS</A></H3>
<P>CUPS uses GNU autoconf to configure the makefiles and source code
for your system. To configure CUPS for your system type: </P>
<UL>
<PRE>
% ./configure ENTER
</PRE>
</UL>
<P>The default installation will put the CUPS software in the <CODE>/usr</CODE>
and <CODE>/var</CODE> directories on your system, which will overwrite
any existing printing commands on your system. To install the CUPS
software in another location use the <CODE>--prefix</CODE> option: </P>
<UL>
<PRE>
% ./configure --prefix=/usr/local ENTER
</PRE>
</UL>
<P>If the PNG, JPEG, TIFF, and ZLIB libraries are not installed in a
system default location (typically <CODE>/usr/include</CODE> and <CODE>
/usr/lib</CODE>) you'll need to set the <CODE>CFLAGS</CODE> and <CODE>
LDFLAGS</CODE> environment variables prior to running configure: </P>
<UL>
<PRE>
% setenv CFLAGS &quot;-I/some/directory&quot;
% setenv LDFLAGS &quot;-L/some/directory&quot;
% ./configure ... ENTER
</PRE>
</UL>
<P>Once you have configured things, just type: </P>
<UL>
<PRE>
% make ENTER
</PRE>
</UL>
<P>to build the software. </P>
<H3><A NAME=3_1_3>Installing the Software</A></H3>
<P>To install the software type: </P>
<UL>
<PRE>
% make install ENTER
</PRE>
</UL>
<H3><A NAME=3_1_4>Running the Software</A></H3>
Once you have installed the software you can start the CUPS daemon by
typing:
<UL>
<PRE>
% /usr/sbin/cupsd &amp; ENTER
</PRE>
</UL>
<H2><A NAME=binary>Installing a Binary Distribution</A></H2>
<P>We are currently distributing CUPS binary distributions in TAR
format with installation and removal scripts. </P>
<UL><B>WARNING:</B>
<P>Installing CUPS will overwrite your existing printing system. If
you experience difficulties with the CUPS software and need to go back
to your old printing system, you will need to remove the CUPS software
with the provided script and reinstall the printing system from your
operating system CDs. </P>
</UL>
<P>To install the CUPS software you will need to be logged in as root
(doing an &quot;su&quot; is good enough). Once you are the root user, run the
installation script with: </P>
<UL>
<PRE>
./cups.install ENTER
</PRE>
</UL>
<P>After asking you a few yes/no questions the CUPS software will be
installed and the scheduler will be started automatically. </P>
<H1 ALIGN=RIGHT><A NAME=4>3 - Printer Queue Management</A></H1>
<P>This chapter discusses how to add, modify, and delete print queues
on your system. </P>
<H2><A NAME=4_1>The lpadmin Command</A></H2>
<P>The <CODE>lpadmin</CODE> command allows you to perform most printer
administration tasks from the command-line. Since <CODE>lpadmin</CODE>
is also a System V printing system command, it is located in the <CODE>
/usr/lib</CODE> directory instead of a more common one like <CODE>
/usr/bin</CODE> or <CODE>/usr/sbin</CODE>. </P>
<H2><A NAME=4_2>Adding and Modifying Printers</A></H2>
<P>To add a printer to CUPS you simply run the <CODE>lpadmin</CODE>
command with the &quot;-p&quot; option: </P>
<UL>
<PRE>
% /usr/lib/lpadmin -p<I>printer</I> -E -v<I>device</I> -P<I>ppd</I> ENTER
</PRE>
</UL>
<P>Spaces between the option letter and value are optional. </P>
<P>The <I>printer</I> name can be up to 127 letters, digits, hyphens,
and underscores. Unlike other printing systems, the printer name in
CUPS is <I>not</I> case-sensitive, so you can't add two printers named <CODE>
LaserJet</CODE> and <CODE>laserjet</CODE>. </P>
<P>The <I>device</I> argument specifies the device URI or filename for
the printer. The following devices are supported in a basic
installation of CUPS: </P>
<DL>
<DT>file:/dev/filename </DT>
<DT>/dev/filename </DT>
<DD>Sends all output to the specified file. </DD>
<DT>http://hostname[:port]/resource </DT>
<DT>ipp://hostname[:port]/resource </DT>
<DD>Sends all output to the specified IPP printer or server. The <I>
port</I> parameters defaults to 631. </DD>
<DT>lpd://hostname/queue </DT>
<DD>Sends all output to the specified LPD printer queue. </DD>
<DT>parallel:/dev/filename </DT>
<DD>Sends all output to the specified parallel port device. </DD>
<DT>serial:/dev/filename[?options] </DT>
<DD>Sends all output to the specified serial port device. The <I>
options</I> can be any of the following separated by the plus (+)
character:
<UL>
<LI><CODE>baud=<I>rate</I></CODE> - Sets the baud rate for the device. </LI>
<LI><CODE>bits=<I>7 or 8</I></CODE> - Sets the number of data bits. </LI>
<LI><CODE>parity=<I>even</I></CODE> - Sets even parity checking. </LI>
<LI><CODE>parity=<I>odd</I></CODE> - Sets odd parity checking. </LI>
<LI><CODE>parity=<I>none</I></CODE> - Turns parity checking off. </LI>
</UL>
</DD>
<DT>socket://hostname[:port] </DT>
<DD>Sends all output to the specified printer using the AppSocket
protocol. The <I>port</I> parameter defaults to 9100. </DD>
</DL>
<P>The <I>ppd</I> argument specifies the PostScript Printer Description
file to use for this printer. Many options (such as media size, etc.)
will not be available if you omit this part of the <CODE>lpadmin</CODE>
command. </P>
<H3><A NAME=4_2_1>Using Standard Printer Drivers</A></H3>
<P>The <CODE>lpadmin</CODE> command allows you to use &quot;standard&quot; PPD
files and interface scripts located in the <CODE>/usr/share/cups/model</CODE>
directory with the &quot;-m&quot; option: </P>
<UL>
<PRE>
% /usr/lib/lpadmin -p<I>printer</I> -E -v<I>device</I> -m<I>model</I> ENTER
</PRE>
</UL>
<P>The <I>model</I> argument specifies the name of the PPD file or
interface script. For example, to add a printer using the sample HP
DeskJet series driver connected to parallel port 1 under Linux you
would use: </P>
<UL>
<PRE>
% /usr/lib/lpadmin -pDeskJet -E -vparallel:/dev/par1 -mdeskjet.ppd ENTER
</PRE>
</UL>
<H2><A NAME=4_3>Removing Printers</A></H2>
<P>To remove a printer to CUPS you simply run the <CODE>lpadmin</CODE>
command with the &quot;-x&quot; option: </P>
<UL>
<PRE>
% /usr/lib/lpadmin -x<I>printer</I> ENTER
</PRE>
</UL>
<H2><A NAME=4_4>Printer Classes</A></H2>
<P>CUPS allows you to group similar printers in a <I>printer class</I>.
When a user sends a print job to a class, the job will be processed by
the first available printer in that class. </P>
<P>To add a printer to a class you simply run the <CODE>lpadmin</CODE>
command with the &quot;-p&quot; and &quot;-c&quot; options: </P>
<UL>
<PRE>
% /usr/lib/lpadmin -p<I>printer</I> -c<I>class</I> ENTER
</PRE>
</UL>
<P>The <I>class</I> is created automatically if it doesn't exist. To
remove a class just use the &quot;-x&quot; option: </P>
<UL>
<PRE>
% /usr/lib/lpadmin -x<I>class</I> ENTER
</PRE>
</UL>
<H2><A NAME=4_5>Setting the Default Printer</A></H2>
<P>To set the default printer or class simply run the <CODE>lpadmin</CODE>
command with the &quot;-d&quot; option: </P>
<UL>
<PRE>
% /usr/lib/lpadmin -d<I>destination</I> ENTER
</PRE>
</UL>
<P>The <I>destination</I> argument is the name of the printer or class. </P>
<H2><A NAME=4_6>Starting and Stopping Printers</A></H2>
<P>The <CODE>enable</CODE> and <CODE>disable</CODE> commands start and
stop printer queues, respectively: </P>
<UL>
<PRE>
% /usr/bin/enable <I>printer</I> ENTER
% /usr/bin/disable <I>printer</I> ENTER
</PRE>
</UL>
<P>Printers that are disabled may still accept jobs for printing, but
won't actually print any files until they are restarted. This is useful
if the printer malfunctions and you need time to correct the problem.
Any queues jobs are printed after the printer is enabled (started). </P>
<H2><A NAME=4_7>Accepting and Rejecting Print Jobs</A></H2>
<P>The <CODE>accept</CODE> and <CODE>reject</CODE> commands accept and
reject print jobs for the named printer, respectively: </P>
<UL>
<PRE>
% /usr/lib/accept <I>printer</I> ENTER
% /usr/lib/reject <I>printer</I> ENTER
</PRE>
</UL>
<P>As noted above, a printer can be stopped but accepting new print
jobs. A printer can also be rejecting new print jobs while it finishes
those that have been queued. This is useful for when you must perform
maintenance on the printer and will not have it available to users for
a long period of time. </P>
<H1 ALIGN=RIGHT><A NAME=5>4 - Printing System Management</A></H1>
<P>This chapter shows how you can configure the CUPS server. </P>
<H2><A NAME=5_1>Changing the Configuration Files</A></H2>
<P>All of the server configuration files are located in the <CODE>
/var/cups/conf</CODE> directory. Once you have made a change to a file
you need to restart the CUPS server by sending it a HUP signal or using
the supplied script &quot;<CODE>cups.sh</CODE>&quot;: </P>
<UL>
<PRE>
% ./cups.sh restart ENTER
</PRE>
</UL>
<P>The binary distribution installs the script in the <CODE>init.d</CODE>
directory with the name <CODE>lp</CODE> or <CODE>lpd</CODE> depending
on the vendor-supplied printing system. </P>
<H2><A NAME=5_2>Temporary Files</A></H2>
<P>Normally CUPS puts all of its temporary files in <CODE>/var/tmp</CODE>
. If you'd like to change this directory you'll need to edit the <CODE>
/var/cups/conf/cupsd.conf</CODE> file. </P>
<P>Start by creating the new temporary directory and setting the
appropriate permissions: </P>
<UL>
<PRE>
% mkdir <I>/foo/bar/tmp</I> ENTER
% chmod a+rwxt <I>/foo/bar/tmp</I> ENTER
</PRE>
</UL>
<P>Then change the line containing the <CODE>TempDir</CODE> directive
in the <CODE>cupsd.conf</CODE> to the directory that you've created: </P>
<UL>
<PRE>
TempDir <I>/foo/bar/tmp</I>
</PRE>
</UL>
<P>Finally, restart the server as outlined in the first section of this
chapter. </P>
<H2><A NAME=5_3>Network Configuration</A></H2>
<P>The default configuration of the CUPS server listens for connections
from all network interfaces on port 631 (the standard IPP port).
Administration functions are limited to local connections with the
appropriate username and password. </P>
<P>If you'd like to limit access to your system you'll need to edit the <CODE>
/var/cups/conf/cupsd.conf</CODE> file. </P>
<H3><A NAME=5_3_1>Port</A></H3>
<P>The <CODE>Port</CODE> directive specifies a port to listen on for
all interfaces. Besides the standard IPP port (631) you can also setup
your server to listen on the HTTP port (80) to use your CUPS server as
a standard web server as well. </P>
<H3><A NAME=5_3_2>Listen</A></H3>
<P>The <CODE>Listen</CODE> directive specifies a listening address and
port, extending the functionality of the <CODE>Port</CODE> directive.
If you want to allow connections only from the local machine you can
use: </P>
<UL>
<PRE>
Listen 127.0.0.1:631
</PRE>
</UL>
<P>instead of the <CODE>Port</CODE> directive. </P>
<P>If you want to limit access to a specific network/subnet, make sure
you specify only the network address and not your system's network
address! </P>
<H3><A NAME=5_3_3>BrowsePort</A></H3>
<P>The <CODE>BrowsePort</CODE> directive controls which port is
monitored for remote printers. By default it is set to the IPP port
(631), however you can change it as needed. </P>
<UL><B>NOTE:</B>
<P>You must set the <CODE>BrowsePort</CODE> to the same value on all
of the systems that you want to see. </P>
</UL>
<H3><A NAME=5_3_4>BrowseAddress</A></H3>
<P>The <CODE>BrowseAddress</CODE> directive specifies a broadcast
address to use when sending printer status updates over the network.
The default browse address is <CODE>255.255.255.255</CODE> which will
send printer information to all subnets. </P>
<UL><B>NOTE:</B>
<P>If you are using HP-UX 10.20 and a subnet that is not 24, 16, or 8
bits, printer browsing (and in fact all broadcast reception) will not
work. This problem appears to be fixed in HP-UX 11.0. </P>
</UL>
<H2><A NAME=5_4>Printer Security</A></H2>
<P>CUPS provides IP and domain-name based access control and Basic
authentication for authentication. </P>
<H3><A NAME=5_4_1>Location</A></H3>
<P>The <CODE>Location</CODE> directive defines access control for a
specific HTTP directory. The following pseudo directories are provided
by the CUPS server: </P>
<UL>
<LI><CODE>/admin</CODE> - This is the URI that must be referenced to
do printer administation commands. </LI>
<LI><CODE>/classes</CODE> - This is the URI that must be referenced to
access printer classes. </LI>
<LI><CODE>/jobs</CODE> - This is the URI that must be referenced to
access jobs. </LI>
<LI><CODE>/printers</CODE> - This is the URI that must be referenced to
access printers. </LI>
</UL>
<P>All other directories are taken from the <CODE>/usr/share/cups/doc</CODE>
directory. </P>
<P>The <CODE>Location</CODE> directive surrounds the other access
control directives described below. The default server configuration
uses: </P>
<UL>
<PRE>
&lt;Location /admin&gt;
AuthType Basic
AuthClass System
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
&lt;/Location&gt;
</PRE>
</UL>
<H3><A NAME=5_4_2>Order</A></H3>
<P>The <CODE>Order</CODE> directive defines the default access control.
The following values are supported: </P>
<UL>
<LI><CODE>Order Allow,Deny</CODE> - Allow requests from all systems <I>
except</I> for those listed in a <CODE>Deny</CODE> directive. </LI>
<LI><CODE>Order Deny,Allow</CODE> - Allow requests only from those
listed in an <CODE>Allow</CODE> directive. </LI>
</UL>
<P>The <CODE>Order</CODE> directive must appear inside a <CODE>Location</CODE>
directive. </P>
<H3><A NAME=5_4_3>Allow</A></H3>
<P>The <CODE>Allow</CODE> directive specifies a hostname, IP address,
or network that is allowed access to the server: </P>
<UL>
<PRE>
Allow from All
Allow from None
Allow from *.domain.com
Allow from .domain.com
Allow from host.domain.com
Allow from nnn.*
Allow from nnn.nnn.*
Allow from nnn.nnn.nnn.*
Allow from nnn.nnn.nnn.nnn
Allow from nnn.nnn.nnn.nnn/mm
Allow from nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
</PRE>
</UL>
<P><CODE>Allow</CODE> directives are cummulative, so multiple <CODE>
Allow</CODE> directives can be used to allow access for multiple hosts
or networks. </P>
<P>The <CODE>Allow</CODE> directive must appear inside a <CODE>Location</CODE>
directive. </P>
<H3><A NAME=5_4_4>Deny</A></H3>
<P>The <CODE>Deny</CODE> directive specifies a hostname, IP address, or
network that is allowed access to the server: </P>
<UL>
<PRE>
Deny from All
Deny from None
Deny from *.domain.com
Deny from .domain.com
Deny from host.domain.com
Deny from nnn.*
Deny from nnn.nnn.*
Deny from nnn.nnn.nnn.*
Deny from nnn.nnn.nnn.nnn
Deny from nnn.nnn.nnn.nnn/mm
Deny from nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
</PRE>
</UL>
<P><CODE>Deny</CODE> directives are cummulative, so multiple <CODE>Deny</CODE>
directives can be used to allow access for multiple hosts or networks. </P>
<P>The <CODE>Deny</CODE> directive must appear inside a <CODE>Location</CODE>
directive. </P>
<H3><A NAME=5_4_5>AuthType</A></H3>
<P>The <CODE>AuthType</CODE> directive defines the type of
authentication to perform: </P>
<UL>
<LI><CODE>None</CODE> - No authentication should be performed
(default.) </LI>
<LI><CODE>Basic</CODE> - Basic authentication should be performed
using the UNIX password and group files. </LI>
</UL>
<P>The <CODE>AuthType</CODE> directive must appear inside a <CODE>
Location</CODE> directive. </P>
<H3><A NAME=5_4_6>AuthClass</A></H3>
<P>The <CODE>AuthClass</CODE> directive defines what level of <CODE>
Basic</CODE> access is required: </P>
<UL>
<LI><CODE>Anonymous</CODE> - No authentication should be performed
(default.) </LI>
<LI><CODE>User</CODE> - A valid username and password is required. </LI>
<LI><CODE>System</CODE> - A valid username and password is required,
and the username must belong to the &quot;sys&quot; group (this can be changed
using the <CODE>SystemGroup</CODE> directive, below. </LI>
<LI><CODE>Group</CODE> - A valid username and password is required,
and the username must belong to the group named by the <CODE>
AuthGroupName</CODE> directive. </LI>
</UL>
<P>The <CODE>AuthClass</CODE> directive must appear inside a <CODE>
Location</CODE> directive. </P>
<H3><A NAME=5_4_7>AuthGroupName</A></H3>
<P>The <CODE>AuthGroupName</CODE> directive sets the group to use for <CODE>
Group</CODE> authentication. </P>
<P>The <CODE>AuthGroupName</CODE> directive must appear inside a <CODE>
Location</CODE> directive. </P>
<H3><A NAME=5_4_8>SystemGroup</A></H3>
<P>The <CODE>SystemGroup</CODE> directive sets the administration group
used when authenticating the <CODE>System</CODE> type. It defaults to
the &quot;sys&quot; group. </P>
<H2><A NAME=5_5>File Formats</A></H2>
<P>CUPS provides a MIME-based file typing and filtering mechanism to
convert files to a printable format for each printer. The <CODE>
mime.types</CODE> and <CODE>mime.convs</CODE> files define the file
type and filters that are available on the system. </P>
<H3><A NAME=5_5_1>mime.types</A></H3>
<P>The <CODE>mime.types</CODE> defines the known file types. Each line
of the file starts with the MIME type and may be followed by one or
more file type recognition rules. For example, the <CODE>text/html</CODE>
file type is defined as: </P>
<UL>
<PRE>
text/html html htm \
printable(0,1024) + (string(0,&quot;&lt;HTML&gt;&quot;) string(0,&quot;&lt;!DOCTYPE&quot;))
</PRE>
</UL>
<P>The first two rules say that any file with an extension of &quot;.html&quot;
or &quot;.htm&quot; is a HTML file. The third rules says that any file whose
first 1024 characters are printable text and starts with the strings
&quot;&lt;HTML&gt;&quot; or &quot;&lt;!DOCTYPE&quot; is a HTML file as well. </P>
<P>The first two rules deal solely with the name of the file being
typed. This is useful when the original filename is known, however for
print files the server doesn't always have a filename to work with. The
third rule takes care of this possibility and automatically figures out
the file type based upon the contents of the file instead. </P>
<P>The available tests are: </P>
<UL>
<LI><CODE>( expr )</CODE> - Parenthesis for expression grouping </LI>
<LI><CODE>+</CODE> - Logical AND </LI>
<LI><CODE>,</CODE> or whitespace - Logical OR </LI>
<LI><CODE>!</CODE> - Logical NOT </LI>
<LI><CODE>match(&quot;pattern&quot;)</CODE> - Pattern match on filename </LI>
<LI><CODE>extension</CODE> - Pattern match on &quot;*.extension&quot; </LI>
<LI><CODE>ascii(offset,length)</CODE> - True if bytes are valid
printable ASCII (CR, NL, TAB, BS, 32-126) </LI>
<LI><CODE>printable(offset,length)</CODE> - True if bytes are
printable 8-bit chars (CR, NL, TAB, BS, 32-126, 160-254) </LI>
<LI><CODE>string(offset,&quot;string&quot;)</CODE> - True if bytes are identical
to string </LI>
<LI><CODE>char(offset,value)</CODE> - True if byte is identical </LI>
<LI><CODE>short(offset,value)</CODE> - True if 16-bit integer is
identical (network or &quot;big-endian&quot; byte order) </LI>
<LI><CODE>int(offset,value)</CODE> - True if 32-bit integer is
identical (network or &quot;big-endian&quot; byte order) </LI>
<LI><CODE>locale(&quot;string&quot;)</CODE> - True if current locale matches
string </LI>
</UL>
<H3><A NAME=5_5_2>mime.convs</A></H3>
<P>The <CODE>mime.convs</CODE> file defines all of the filter programs
that are known to the system. Each line consists of: </P>
<UL>
<PRE>
source destination cost program
text/plain application/postscript 50 texttops
application/vnd.cups-postscript application/vnd.cups-raster 50 pstoraster
image/* application/vnd.cups-postscript 50 imagetops
image/* application/vnd.cups-raster 50 imagetoraster
</PRE>
</UL>
<P>The <I>source</I> field is a MIME type, optionally using a wildcard
for the super-type or sub-type (e.g. &quot;text/plain&quot;, &quot;image/*&quot;,
&quot;*/postscript&quot;). </P>
<P>The <I>destination</I> field is a MIME type defined in the <CODE>
mime.types</CODE> file. </P>
<P>The <I>cost</I> field defines a relative cost for the filtering
operation from 1 to 100. The cost is used to choose between two
different sets of filters when converting a file. For example, to
convert from <CODE>image/jpeg</CODE> to <CODE>
application/vnd.cups-raster</CODE>, you could use the <CODE>imagetops</CODE>
and <CODE>pstoraster</CODE> filters for a total cost of 100, or the <CODE>
imagetoraster</CODE> filter for a total cost of 50. </P>
<P>The <I>program</I> field defines the filter program to run; the
special program &quot;-&quot; can be used to make two file types equivalent. The
program must accept the standard filter arguments and environment
variables described in the CUPS Interface Design Document: </P>
<UL>
<PRE>
program job user title options [filename]
</PRE>
</UL>
<P>If specified, the <I>filename</I> argument defines a file to read
when filtering, otherwise the filter must read from the standard input.
All filtered output must go to the standard output. </P>
<H1 ALIGN=RIGHT><A NAME=6>5 - Printer Accounting</A></H1>
This chapter describes the CUPS log files.
<H2><A NAME=6_1>Where to Find the Log Files</A></H2>
<P>The log files are normally stored in the <CODE>/var/cups/logs</CODE>
directory. You can change this by editing the <CODE>
/var/cups/conf/cupsd.conf</CODE> configuration file. </P>
<H2><A NAME=6_2>The access_log File</A></H2>
<P>The <CODE>access_log</CODE> file lists each HTTP resource that is
accessed by a web browser or CUPS/IPP client. Each line is in the
so-called &quot;Common Log Format&quot; used by many web servers and web
reporting tools: </P>
<UL>
<PRE>
host group user date-time \&quot;method resource version\&quot; status bytes
127.0.0.1 - - [20/May/1999:19:20:29 +0000] &quot;POST /admin/ HTTP/1.1&quot; 401 0
127.0.0.1 - mike [20/May/1999:19:20:31 +0000] &quot;POST /admin/ HTTP/1.1&quot; 200 0
</PRE>
</UL>
<P>The <I>host</I> field will normally only be an IP address unless you
have changed the <CODE>HostnameLookups</CODE> directive on in the <CODE>
cupsd.conf</CODE> file. </P>
<P>The <I>group</I> field always contains &quot;-&quot;. </P>
<P>The <I>user</I> field is the authenticated username of the
requesting user. If no username and password is supplied for the
request then this field contains &quot;-&quot;. </P>
<P>The <I>date-time</I> field is the date and time of the request in
Greenwich Mean Time (a.k.a. ZULU) and is in the format: </P>
<UL>
<PRE>
[DD/MON/YYYY:HH:MM:SS +0000]
</PRE>
</UL>
<P>The <I>method</I> field is the HTTP method used (&quot;GET&quot;, &quot;PUT&quot;,
&quot;POST&quot;, etc.) </P>
<P>The <I>resource</I> field is the filename of the requested resource. </P>
<P>The <I>version</I> field is the HTTP specification version used by
the client. For CUPS clients this will always be &quot;HTTP/1.1&quot;. </P>
<P>The <I>status</I> field contains the HTTP result status of the
request. Usually it is &quot;200&quot;, but other HTTP status codes are possible.
For example, 401 is the &quot;unauthorized access&quot; status in the example
above. </P>
<P>The <I>bytes</I> field contains the number of bytes in the request.
For POST requests the <I>bytes</I> field contains the number of bytes
of non-IPP data that is received from the client. </P>
<H2><A NAME=6_3>The error_log File</A></H2>
<P>The <CODE>error_log</CODE> file lists messages from the scheduler
(errors, warnings, etc.): </P>
<UL>
<PRE>
level date-time message
I [20/May/1999:19:18:28 +0000] Job 1 queued on 'DeskJet' by 'mike'.
I [20/May/1999:19:21:02 +0000] Job 2 queued on 'DeskJet' by 'mike'.
I [20/May/1999:19:22:24 +0000] Job 2 was cancelled by 'mike'.
</PRE>
</UL>
<P>The <I>level</I> field contains the type of message: </P>
<UL>
<LI><CODE>E</CODE> - An error occurred. </LI>
<LI><CODE>W</CODE> - The server was unable to perform some action. </LI>
<LI><CODE>I</CODE> - Informational message. </LI>
<LI><CODE>D</CODE> - Debugging message. </LI>
</UL>
<P>The <I>date-time</I> field contains the date and time of when the
page started printing. The format of this field is identical to the <I>
data-time</I> field in the <CODE>access_log</CODE> file. </P>
<P>The <I>message</I> fields contains a free-form textual message. </P>
<H2><A NAME=6_4>The page_log File</A></H2>
<P>The <CODE>page_log</CODE> file lists each page that is sent to a
printer. Each line contains the following information: </P>
<UL>
<PRE>
printer user job-id date-time page-number num-copies
DeskJet root 2 [20/May/1999:19:21:05 +0000] 1 0
</PRE>
</UL>
<P>The <I>printer</I> field contains the name of the printer that
printed the page. If you send a job to a printer class, this field will
contain the name of the printer that was assigned the job. </P>
<P>The <I>user</I> field contains the name of the user (the IPP <CODE>
requesting-user-name</CODE> attribute) that submitted this file for
printing. </P>
<P>The <I>job-id</I> field contains the job number of the page being
printed. Job numbers are reset to 1 whenever the CUPS server is
started, so don't depend on this number being unique! </P>
<P>The <I>date-time</I> field contains the date and time of when the
page started printing. The format of this field is identical to the <I>
data-time</I> field in the <CODE>access_log</CODE> file. </P>
<P>The <I>page-number</I> and <I>num-pages</I> fields contain the page
number and number of copies being printed of that page. For printer
that can not produce copies on their own, the <I>num-pages</I> field
will always be 1. </P>
</BODY>
</HTML>
BIN
Ver Arquivo
Arquivo binário não exibido.
+919 -20
Ver Arquivo
@@ -7,49 +7,948 @@
</HEAD>
<BODY>
<H1>Scope</H1>
<H1 ALIGN=RIGHT>Preface</H1>
<H2>Identification</H2>
This softwae administrators manual provides printer administration
This software administrators manual provides printer administration
information for the Common UNIX Printing System ("CUPS") Version 1.0.0.
<H2>System Overview</H2>
The Common UNIX Printing System provides a portable printing layer for
UNIX&reg; 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.
<P>CUPS uses the Internet Printing Protocol (IETF-IPP) as the basis
for managing print jobs and queues. The Line Printer Daemon (LPD,
RFC1179), Server Message Block (SMB), and AppSocket protocols are also
supported with reduced functionality.
<P>CUPS adds network printer browsing and PostScript Printer
Description (&quot;PPD&quot;)-based printing options to support real
world applications under UNIX.
<P>CUPS also includes a customized version of GNU GhostScript
(currently based off GNU GhostScript 4.03) and an image file RIP that
can be used to support non-PostScript printers.
<H2>Document Overview</H2>
<P>This software administrators manual is organized into the following sections:</P>
<UL>
<LI>1 - Scope</LI>
<LI>2 - References</LI>
<LI>3 - Printing System Overview</LI>
<LI>4 - Printer Queue Management</LI>
<LI>5 - Printing System Management</LI>
<LI>A - Glossary</LI>
<LI>1 - Printing System Overview</LI>
<LI>2 - Building and Installing CUPS</LI>
<LI>3 - Printer Queue Management</LI>
<LI>4 - Printing System Management</LI>
<LI>5 - Printer Accounting</LI>
</UL>
<H1>Printing System Overview</H1>
<H1 ALIGN=RIGHT>1 - Printing System Overview</H1>
<H1>Printer Queue Management</H1>
<P>This chapter provides an overview of how the Common UNIX Printing System
works.
<H2>Adding Printers</H2>
<H2>The Printing Problem</H2>
<P>For years <I>the printing problem</I> has plagued UNIX&reg;. Unlike
Microsoft&reg; Windows&reg; or MacOS, UNIX has no standard interface or
system in place for supporting printers. Among the solutions previously
available, the Berkeley and System V printing systems are the most
prevalent.
<P>These printing systems support line printers (text only) or
PostScript printers (text and graphics), and with some coaxing they can
be made to support a full range of printers and file formats. However,
because each varient of the UNIX operating system uses a different
printing system than the next, developing printer drivers for a wide
range of printers is extremely difficult. That combined with the
limited volume of customers for each UNIX varient has forced most
printer vendors to give up supporting UNIX entirely.
<P>The Common UNIX Printing System, or CUPS, is designed to eliminate
<I>the printing problem</I>. One common printing system can be used by
all UNIX varients to support the printing needs of users. Printer
vendors can use its modular filter interface to develop a single driver
program that supports a wide range of file formats with little or no
effort. Since CUPS provides both the System V and Berkeley printing
commands, users (and applications) can reap the benefits of this new
technology with no changes.
<H2>The Technology</H2>
<P>CUPS is based upon an emerging Internet standard called the Internet
Printing Protocol, or IPP. IPP has been embraced by dozens of printer
and printer server manufacturers, and will be supported by the next
Microsoft Windows operating system.
<P>IPP defines a standard protocol for printing as well as managing print
jobs and printer options like media size, resolution, and so forth. Like all
IP-based protocols, IPP can be used locally or over the Internet to printers
hundreds or thousands of miles away. Unlike other protocols, however, IPP
also supports access control, authentication, and encryption, making it a
much more secure printing solution than older ones.
<P>IPP is layered on top of the Hyper-Text Transport Protocol, or HTTP,
which is the basis of web servers on the Internet. This allows the user to
view documentation and status information on a printer or server using their
web browser.
<P>CUPS provides a complete IPP/1.0-based printing system that provides Basic
authentication and domain or IP-based access control. Digest authentication
and TLS encryption will be available in future versions of CUPS.
<H2>Jobs</H2>
<P>Each file that is submitted for printing is called a <I>job</I>.
Jobs are identified by a unique number starting at 1 and are assigned
to a particular destination (usually a printer). Jobs can also have
options associated with them such as media size, number of copies, and
priority.
<H2>Classes</H2>
<P>CUPS supports collections of printers known as <I>classes</I>. Jobs sent
to a class are forwarded to the first available printer in the class.
<H2>Filters</H2>
<P>Filters allow a user or application to print many types of files
without extra effort. Print jobs sent to a CUPS server are filtered
before sending them to a printer. Some filters convert job files to
different formats that the printer can understand. Others perform page
selection and ordering tasks. <I>Backend</I> filters perform the most
important task of all - they send the filtered print data to the
printer.
<P>CUPS provides filters for printing many types of image files,
HP-GL/2 files, PDF files, and text files. CUPS also supplies
PostScript and image file Raster Image Processors, or RIPs, that
convert PostScript or image files into bitmaps that can be sent to a
raster printer.
<P>CUPS provides backends for printing over parallel and serial ports,
and over the network via the JetDirect (AppSocket), Server Message
Block, and Line Printer Daemon protocols.
<H2>Printer Drivers</H2>
<P>Printer drivers in CUPS consist of one of more filters specific to a
printer. CUPS includes a sample printer driver for Hewlett-Packard
LaserJet and DeskJet printers. While this driver does not generate
optimal output for different printer models, it does demonstrate how
you can write your own printer drivers and incorporate them into CUPS.
<H2>Networking</H2>
<P>Printers and classes on the local system are automatically shared with
other systems on the network. This allows you to setup one system to print
to a printer and use this system as a printer server or spool host for all
of the others. If there is only one occurrence of a printer on a network,
then that printer can be accessed using its name alone. If more than one
printer exists with the same name, users must select the printer by specifying
which server to use (e.g. "printer@host1" or "printer@host2".)
<P>CUPS also provides <I>implicit classes</I>, which are collections of
printers and/or classes with the same name. This allows you to setup multiple
servers pointing to the same physical network printer, for example, so that
you aren't relying on a single system for printing. Because this also works
with printer classes, you can setup multiple servers and printers and never
worry about a "single point of failure" unless all of the printers and servers
goes down!
<H1 ALIGN=RIGHT>2 - Building and Installing CUPS</H1>
<P>This chapter shows how to build and install the Common UNIX Printing System.
If you are installing a binary distribution from the CUPS web site, proceed to
the section titled, <A HREF="#binary">Installing a Binary Distribution</A>.
<H2>Installing a Source Distribution</H2>
<H3>Requirements</H3>
<P>You'll need an ANSI C compiler to build CUPS on your system. As its name
implies, CUPS is designed to run on the UNIX operating system, however
the CUPS interface library and most of the filters and backends supplied
with CUPS should also run under Microsoft&reg; Windows&reg;.
<P>For the image file filters and PostScript RIP, you'll need the JPEG,
PNG, TIFF, and ZLIB libraries. CUPS will build without these, but with
reduced functionality. Easy Software Products maintains a mirror of the
current versions of these libraries at:
<UL><PRE>
<A HREF="ftp://ftp.easysw.com/pub/libraries">ftp://ftp.easysw.com/pub/libraries</A>
</PRE></UL>
<P>If you make changes to the man pages you'll need GNU groff or another
nroff-like package. GNU groff is available from:
<UL><PRE>
<A HREF="ftp://ftp.gnu.org/pub/groff">ftp://ftp.gnu.org/pub/groff</A>
</PRE></UL>
<P>The documentation is formatted using the HTMLDOC software. If you need to
make changes you can get the HTMLDOC software from:
<UL><PRE>
<A HREF="http://www.easysw.com/htmldoc">http://www.easysw.com/htmldoc</A>
</PRE></UL>
<H3>Compiling CUPS</H3>
<P>CUPS uses GNU autoconf to configure the makefiles and source code
for your system. To configure CUPS for your system type:
<UL><PRE>
% ./configure ENTER
</PRE></UL>
<P>The default installation will put the CUPS software in the
<CODE>/usr</CODE> and <CODE>/var</CODE> directories on your system,
which will overwrite any existing printing commands on your system. To
install the CUPS software in another location use the
<CODE>--prefix</CODE> option:
<UL><PRE>
% ./configure --prefix=/usr/local ENTER
</PRE></UL>
<P>If the PNG, JPEG, TIFF, and ZLIB libraries are not installed in a
system default location (typically <CODE>/usr/include</CODE> and
<CODE>/usr/lib</CODE>) you'll need to set the <CODE>CFLAGS</CODE> and
<CODE>LDFLAGS</CODE> environment variables prior to running configure:
<UL><PRE>
% setenv CFLAGS "-I/some/directory"
% setenv LDFLAGS "-L/some/directory"
% ./configure ... ENTER
</PRE></UL>
<P>Once you have configured things, just type:
<UL><PRE>
% make ENTER
</PRE></UL>
<P>to build the software.
<H3>Installing the Software</H3>
<P>To install the software type:
<UL><PRE>
% make install ENTER
</PRE></UL>
<H3>Running the Software</A></H3>
Once you have installed the software you can start the CUPS daemon by
typing:
<UL><PRE>
% /usr/sbin/cupsd &amp; ENTER
</PRE></UL>
<H2><A NAME="binary">Installing a Binary Distribution</A></H2>
<P>We are currently distributing CUPS binary distributions in TAR format
with installation and removal scripts.
<UL>
<B>WARNING:</B>
<P>Installing CUPS will overwrite your existing printing
system. If you experience difficulties with the CUPS software
and need to go back to your old printing system, you will need
to remove the CUPS software with the provided script and
reinstall the printing system from your operating system CDs.
</UL>
<P>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:
<UL><PRE>
./cups.install ENTER
</PRE></UL>
<P>After asking you a few yes/no questions the CUPS software will be
installed and the scheduler will be started automatically.
<H1 ALIGN=RIGHT>3 - Printer Queue Management</H1>
<P>This chapter discusses how to add, modify, and delete print queues
on your system.
<H2>The lpadmin Command</H2>
<P>The <CODE>lpadmin</CODE> command allows you to perform most printer
administration tasks from the command-line. Since <CODE>lpadmin</CODE>
is also a System V printing system command, it is located in the
<CODE>/usr/lib</CODE> directory instead of a more common one like
<CODE>/usr/bin</CODE> or <CODE>/usr/sbin</CODE>.
<H2>Adding and Modifying Printers</H2>
<P>To add a printer to CUPS you simply run the <CODE>lpadmin</CODE> command
with the "-p" option:
<UL><PRE>
% /usr/lib/lpadmin -p<I>printer</I> -E -v<I>device</I> -P<I>ppd</I> ENTER
</PRE></UL>
<P>Spaces between the option letter and value are optional.
<P>The <I>printer</I> name can be up to 127 letters, digits, hyphens,
and underscores. Unlike other printing systems, the printer name in
CUPS is <I>not</I> case-sensitive, so you can't add two printers named
<CODE>LaserJet</CODE> and <CODE>laserjet</CODE>.
<P>The <I>device</I> argument specifies the device URI or filename for the
printer. The following devices are supported in a basic installation of
CUPS:
<DL>
<DT>file:/dev/filename
<DT>/dev/filename
<DD>Sends all output to the specified file.
<DT>http://hostname[:port]/resource
<DT>ipp://hostname[:port]/resource
<DD>Sends all output to the specified IPP printer or server.
The <I>port</I> parameters defaults to 631.
<DT>lpd://hostname/queue
<DD>Sends all output to the specified LPD printer queue.
<DT>parallel:/dev/filename
<DD>Sends all output to the specified parallel port device.
<DT>serial:/dev/filename[?options]
<DD>Sends all output to the specified serial port device. The
<I>options</I> can be any of the following separated by the
plus (+) character:
<UL>
<LI><CODE>baud=<I>rate</I></CODE> - Sets the baud rate
for the device.
<LI><CODE>bits=<I>7 or 8</I></CODE> - Sets the number
of data bits.
<LI><CODE>parity=<I>even</I></CODE> - Sets even parity
checking.
<LI><CODE>parity=<I>odd</I></CODE> - Sets odd parity
checking.
<LI><CODE>parity=<I>none</I></CODE> - Turns parity
checking off.
</UL>
<DT>socket://hostname[:port]
<DD>Sends all output to the specified printer using the
AppSocket protocol. The <I>port</I> parameter defaults to 9100.
</DL>
<P>The <I>ppd</I> argument specifies the PostScript Printer Description file
to use for this printer. Many options (such as media size, etc.) will not
be available if you omit this part of the <CODE>lpadmin</CODE> command.
<H3>Using Standard Printer Drivers</H2>
<P>The <CODE>lpadmin</CODE> command allows you to use "standard" PPD files
and interface scripts located in the <CODE>/usr/share/cups/model</CODE>
directory with the "-m" option:
<UL><PRE>
% /usr/lib/lpadmin -p<I>printer</I> -E -v<I>device</I> -m<I>model</I> ENTER
</PRE></UL>
<P>The <I>model</I> argument specifies the name of the PPD file or interface
script. For example, to add a printer using the sample HP DeskJet series
driver connected to parallel port 1 under Linux you would use:
<UL><PRE>
% /usr/lib/lpadmin -pDeskJet -E -vparallel:/dev/par1 -mdeskjet.ppd ENTER
</PRE></UL>
<H2>Removing Printers</H2>
<H2>Reconfiguring Printers</H2>
<P>To remove a printer to CUPS you simply run the <CODE>lpadmin</CODE> command
with the "-x" option:
<H2>Printer Options</H2>
<UL><PRE>
% /usr/lib/lpadmin -x<I>printer</I> ENTER
</PRE></UL>
<H2>Printer Security</H2>
<H2>Printer Classes</H2>
<H2>Printer Accounting</H2>
<P>CUPS allows you to group similar printers in a <I>printer class</I>. When
a user sends a print job to a class, the job will be processed by the first
available printer in that class.
<H1>Printing System Management</H1>
<P>To add a printer to a class you simply run the <CODE>lpadmin</CODE> command
with the "-p" and "-c" options:
<H2>Log Files</H2>
<UL><PRE>
% /usr/lib/lpadmin -p<I>printer</I> -c<I>class</I> ENTER
</PRE></UL>
<P>The <I>class</I> is created automatically if it doesn't exist. To remove a
class just use the "-x" option:
<UL><PRE>
% /usr/lib/lpadmin -x<I>class</I> ENTER
</PRE></UL>
<H2>Setting the Default Printer</H2>
<P>To set the default printer or class simply run the <CODE>lpadmin</CODE>
command with the "-d" option:
<UL><PRE>
% /usr/lib/lpadmin -d<I>destination</I> ENTER
</PRE></UL>
<P>The <I>destination</I> argument is the name of the printer or class.
<H2>Starting and Stopping Printers</H2>
<P>The <CODE>enable</CODE> and <CODE>disable</CODE> commands start and stop
printer queues, respectively:
<UL><PRE>
% /usr/bin/enable <I>printer</I> ENTER
% /usr/bin/disable <I>printer</I> ENTER
</PRE></UL>
<P>Printers that are disabled may still accept jobs for printing, but won't
actually print any files until they are restarted. This is useful if the
printer malfunctions and you need time to correct the problem. Any queues
jobs are printed after the printer is enabled (started).
<H2>Accepting and Rejecting Print Jobs</H2>
<P>The <CODE>accept</CODE> and <CODE>reject</CODE> commands accept and reject
print jobs for the named printer, respectively:
<UL><PRE>
% /usr/lib/accept <I>printer</I> ENTER
% /usr/lib/reject <I>printer</I> ENTER
</PRE></UL>
<P>As noted above, a printer can be stopped but accepting new print
jobs. A printer can also be rejecting new print jobs while it finishes
those that have been queued. This is useful for when you must perform
maintenance on the printer and will not have it available to users for
a long period of time.
<H1 ALIGN=RIGHT>4 - Printing System Management</H1>
<P>This chapter shows how you can configure the CUPS server.
<H2>Changing the Configuration Files</H2>
<P>All of the server configuration files are located in the
<CODE>/var/cups/conf</CODE> directory. Once you have made a change to a
file you need to restart the CUPS server by sending it a HUP signal or
using the supplied script "<CODE>cups.sh</CODE>":
<UL><PRE>
% ./cups.sh restart ENTER
</PRE></UL>
<P>The binary distribution installs the script in the
<CODE>init.d</CODE> directory with the name <CODE>lp</CODE> or
<CODE>lpd</CODE> depending on the vendor-supplied printing system.
<H2>Temporary Files</H2>
<P>Normally CUPS puts all of its temporary files in <CODE>/var/tmp</CODE>.
If you'd like to change this directory you'll need to edit the
<CODE>/var/cups/conf/cupsd.conf</CODE> file.
<P>Start by creating the new temporary directory and setting the appropriate
permissions:
<UL><PRE>
% mkdir <I>/foo/bar/tmp</I> ENTER
% chmod a+rwxt <I>/foo/bar/tmp</I> ENTER
</PRE></UL>
<P>Then change the line containing the <CODE>TempDir</CODE> directive in
the <CODE>cupsd.conf</CODE> to the directory that you've created:
<UL><PRE>
TempDir <I>/foo/bar/tmp</I>
</PRE></UL>
<P>Finally, restart the server as outlined in the first section of this
chapter.
<H2>Network Configuration</H2>
<H2>Adding File Types</H2>
<P>The default configuration of the CUPS server listens for connections from
all network interfaces on port 631 (the standard IPP port). Administration
functions are limited to local connections with the appropriate username and
password.
<P>If you'd like to limit access to your system you'll need to edit the
<CODE>/var/cups/conf/cupsd.conf</CODE> file.
<H3>Port</H3>
<P>The <CODE>Port</CODE> directive specifies a port to listen on for
all interfaces. Besides the standard IPP port (631) you can also setup
your server to listen on the HTTP port (80) to use your CUPS server as
a standard web server as well.
<H3>Listen</H3>
<P>The <CODE>Listen</CODE> directive specifies a listening address and port,
extending the functionality of the <CODE>Port</CODE> directive. If you want
to allow connections only from the local machine you can use:
<UL><PRE>
Listen 127.0.0.1:631
</PRE></UL>
<P>instead of the <CODE>Port</CODE> directive.
<P>If you want to limit access to a specific network/subnet, make sure you
specify only the network address and not your system's network address!
<H3>BrowsePort</H3>
<P>The <CODE>BrowsePort</CODE> directive controls which port is monitored for
remote printers. By default it is set to the IPP port (631), however you can
change it as needed.
<UL>
<B>NOTE:</B>
<P>You must set the <CODE>BrowsePort</CODE> to the same value
on all of the systems that you want to see.
</UL>
<H3>BrowseAddress</H3>
<P>The <CODE>BrowseAddress</CODE> directive specifies a broadcast address to
use when sending printer status updates over the network. The default
browse address is <CODE>255.255.255.255</CODE> which will send printer
information to all subnets.
<UL>
<B>NOTE:</B>
<P>If you are using HP-UX 10.20 and a subnet that is not 24,
16, or 8 bits, printer browsing (and in fact all broadcast
reception) will not work. This problem appears to be fixed in
HP-UX 11.0.
</UL>
<H2>Printer Security</H2>
<P>CUPS provides IP and domain-name based access control and Basic
authentication for authentication.
<H3>Location</H3>
<P>The <CODE>Location</CODE> directive defines access control for a
specific HTTP directory. The following pseudo directories are provided
by the CUPS server:
<UL>
<LI><CODE>/admin</CODE> - This is the URI that must be referenced to
do printer administation commands.
<LI><CODE>/classes</CODE> - This is the URI that must be referenced to
access printer classes.
<LI><CODE>/jobs</CODE> - This is the URI that must be referenced to
access jobs.
<LI><CODE>/printers</CODE> - This is the URI that must be referenced to
access printers.
</UL>
<P>All other directories are taken from the
<CODE>/usr/share/cups/doc</CODE> directory.
<P>The <CODE>Location</CODE> directive surrounds the other access control
directives described below. The default server configuration uses:
<UL><PRE>
&lt;Location /admin&gt;
AuthType Basic
AuthClass System
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
&lt;/Location&gt;
</PRE></UL>
<H3>Order</H3>
<P>The <CODE>Order</CODE> directive defines the default access control.
The following values are supported:
<UL>
<LI><CODE>Order Allow,Deny</CODE> - Allow requests from all
systems <I>except</I> for those listed in a <CODE>Deny</CODE>
directive.
<LI><CODE>Order Deny,Allow</CODE> - Allow requests only from
those listed in an <CODE>Allow</CODE> directive.
</UL>
<P>The <CODE>Order</CODE> directive must appear inside a
<CODE>Location</CODE> directive.
<H3>Allow</H3>
<P>The <CODE>Allow</CODE> directive specifies a hostname, IP address, or
network that is allowed access to the server:
<UL><PRE>
Allow from All
Allow from None
Allow from *.domain.com
Allow from .domain.com
Allow from host.domain.com
Allow from nnn.*
Allow from nnn.nnn.*
Allow from nnn.nnn.nnn.*
Allow from nnn.nnn.nnn.nnn
Allow from nnn.nnn.nnn.nnn/mm
Allow from nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
</PRE></UL>
<P><CODE>Allow</CODE> directives are cummulative, so multiple <CODE>Allow</CODE>
directives can be used to allow access for multiple hosts or networks.
<P>The <CODE>Allow</CODE> directive must appear inside a
<CODE>Location</CODE> directive.
<H3>Deny</H3>
<P>The <CODE>Deny</CODE> directive specifies a hostname, IP address, or
network that is allowed access to the server:
<UL><PRE>
Deny from All
Deny from None
Deny from *.domain.com
Deny from .domain.com
Deny from host.domain.com
Deny from nnn.*
Deny from nnn.nnn.*
Deny from nnn.nnn.nnn.*
Deny from nnn.nnn.nnn.nnn
Deny from nnn.nnn.nnn.nnn/mm
Deny from nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
</PRE></UL>
<P><CODE>Deny</CODE> directives are cummulative, so multiple <CODE>Deny</CODE>
directives can be used to allow access for multiple hosts or networks.
<P>The <CODE>Deny</CODE> directive must appear inside a
<CODE>Location</CODE> directive.
<H3>AuthType</H3>
<P>The <CODE>AuthType</CODE> directive defines the type of authentication to
perform:
<UL>
<LI><CODE>None</CODE> - No authentication should be performed
(default.)
<LI><CODE>Basic</CODE> - Basic authentication should be
performed using the UNIX password and group files.
</UL>
<P>The <CODE>AuthType</CODE> directive must appear inside a
<CODE>Location</CODE> directive.
<H3>AuthClass</H3>
<P>The <CODE>AuthClass</CODE> directive defines what level of <CODE>Basic</CODE>
access is required:
<UL>
<LI><CODE>Anonymous</CODE> - No authentication should be performed
(default.)
<LI><CODE>User</CODE> - A valid username and password is required.
<LI><CODE>System</CODE> - A valid username and password is
required, and the username must belong to the "sys" group (this
can be changed using the <CODE>SystemGroup</CODE> directive,
below.
<LI><CODE>Group</CODE> - A valid username and password is
required, and the username must belong to the group named by
the <CODE>AuthGroupName</CODE> directive.
</UL>
<P>The <CODE>AuthClass</CODE> directive must appear inside a
<CODE>Location</CODE> directive.
<H3>AuthGroupName</H3>
<P>The <CODE>AuthGroupName</CODE> directive sets the group to use for
<CODE>Group</CODE> authentication.
<P>The <CODE>AuthGroupName</CODE> directive must appear inside a
<CODE>Location</CODE> directive.
<H3>SystemGroup</H3>
<P>The <CODE>SystemGroup</CODE> directive sets the administration group used
when authenticating the <CODE>System</CODE> type. It defaults to the "sys"
group.
<H2>File Formats</H2>
<P>CUPS provides a MIME-based file typing and filtering mechanism to
convert files to a printable format for each printer. The
<CODE>mime.types</CODE> and <CODE>mime.convs</CODE> files define the
file type and filters that are available on the system.
<H3>mime.types</H3>
<P>The <CODE>mime.types</CODE> defines the known file types. Each line
of the file starts with the MIME type and may be followed by one or
more file type recognition rules. For example, the
<CODE>text/html</CODE> file type is defined as:
<UL><PRE>
text/html html htm \
printable(0,1024) + (string(0,"&lt;HTML&gt;") string(0,"&lt;!DOCTYPE"))
</PRE></UL>
<P>The first two rules say that any file with an extension of ".html" or
".htm" is a HTML file. The third rules says that any file whose first
1024 characters are printable text and starts with the strings "&lt;HTML&gt;"
or "&lt;!DOCTYPE" is a HTML file as well.
<P>The first two rules deal solely with the name of the file being
typed. This is useful when the original filename is known, however for
print files the server doesn't always have a filename to work with. The
third rule takes care of this possibility and automatically figures out
the file type based upon the contents of the file instead.
<P>The available tests are:
<UL>
<LI><CODE>( expr )</CODE> - Parenthesis for expression grouping
<LI><CODE>+</CODE> - Logical AND
<LI><CODE>,</CODE> or whitespace - Logical OR
<LI><CODE>!</CODE> - Logical NOT
<LI><CODE>match("pattern")</CODE> - Pattern match on filename
<LI><CODE>extension</CODE> - Pattern match on "*.extension"
<LI><CODE>ascii(offset,length)</CODE> - True if bytes are valid
printable ASCII (CR, NL, TAB, BS, 32-126)
<LI><CODE>printable(offset,length)</CODE> - True if bytes are
printable 8-bit chars (CR, NL, TAB, BS, 32-126, 160-254)
<LI><CODE>string(offset,"string")</CODE> - True if bytes are
identical to string
<LI><CODE>char(offset,value)</CODE> - True if byte is identical
<LI><CODE>short(offset,value)</CODE> - True if 16-bit integer
is identical (network or "big-endian" byte order)
<LI><CODE>int(offset,value)</CODE> - True if 32-bit integer is
identical (network or "big-endian" byte order)
<LI><CODE>locale("string")</CODE> - True if current locale
matches string
</UL>
<H3>mime.convs</H3>
<P>The <CODE>mime.convs</CODE> file defines all of the filter programs that
are known to the system. Each line consists of:
<UL><PRE>
source destination cost program
text/plain application/postscript 50 texttops
application/vnd.cups-postscript application/vnd.cups-raster 50 pstoraster
image/* application/vnd.cups-postscript 50 imagetops
image/* application/vnd.cups-raster 50 imagetoraster
</PRE></UL>
<P>The <I>source</I> field is a MIME type, optionally using a wildcard for
the super-type or sub-type (e.g. "text/plain", "image/*", "*/postscript").
<P>The <I>destination</I> field is a MIME type defined in the
<CODE>mime.types</CODE> file.
<P>The <I>cost</I> field defines a relative cost for the filtering
operation from 1 to 100. The cost is used to choose between two
different sets of filters when converting a file. For example, to convert
from <CODE>image/jpeg</CODE> to <CODE>application/vnd.cups-raster</CODE>,
you could use the <CODE>imagetops</CODE> and <CODE>pstoraster</CODE>
filters for a total cost of 100, or the <CODE>imagetoraster</CODE> filter
for a total cost of 50.
<P>The <I>program</I> field defines the filter program to run; the
special program "-" can be used to make two file types equivalent. The
program must accept the standard filter arguments and environment
variables described in the CUPS Interface Design Document:
<UL><PRE>
program job user title options [filename]
</PRE></UL>
<P>If specified, the <I>filename</I> argument defines a file to read
when filtering, otherwise the filter must read from the standard input.
All filtered output must go to the standard output.
<H1 ALIGN=RIGHT>5 - Printer Accounting</H1>
This chapter describes the CUPS log files.
<H2>Where to Find the Log Files</H2>
<P>The log files are normally stored in the <CODE>/var/cups/logs</CODE>
directory. You can change this by editing the
<CODE>/var/cups/conf/cupsd.conf</CODE> configuration file.
<H2>The access_log File</H2>
<P>The <CODE>access_log</CODE> file lists each HTTP resource that is accessed
by a web browser or CUPS/IPP client. Each line is in the so-called "Common
Log Format" used by many web servers and web reporting tools:
<UL><PRE>
host group user date-time \"method resource version\" status bytes
127.0.0.1 - - [20/May/1999:19:20:29 +0000] "POST /admin/ HTTP/1.1" 401 0
127.0.0.1 - mike [20/May/1999:19:20:31 +0000] "POST /admin/ HTTP/1.1" 200 0
</PRE></UL>
<P>The <I>host</I> field will normally only be an IP address unless you
have changed the <CODE>HostnameLookups</CODE> directive on in the
<CODE>cupsd.conf</CODE> file.
<P>The <I>group</I> field always contains "-".
<P>The <I>user</I> field is the authenticated username of the requesting user.
If no username and password is supplied for the request then this field
contains "-".
<P>The <I>date-time</I> field is the date and time of the request in Greenwich
Mean Time (a.k.a. ZULU) and is in the format:
<UL><PRE>
[DD/MON/YYYY:HH:MM:SS +0000]
</PRE></UL>
<P>The <I>method</I> field is the HTTP method used ("GET", "PUT", "POST", etc.)
<P>The <I>resource</I> field is the filename of the requested resource.
<P>The <I>version</I> field is the HTTP specification version used by the
client. For CUPS clients this will always be "HTTP/1.1".
<P>The <I>status</I> field contains the HTTP result status of the
request. Usually it is "200", but other HTTP status codes are possible.
For example, 401 is the "unauthorized access" status in the example
above.
<P>The <I>bytes</I> field contains the number of bytes in the request.
For POST requests the <I>bytes</I> field contains the number of bytes
of non-IPP data that is received from the client.
<H2>The error_log File</H2>
<P>The <CODE>error_log</CODE> file lists messages from the scheduler (errors,
warnings, etc.):
<UL><PRE>
level date-time message
I [20/May/1999:19:18:28 +0000] Job 1 queued on 'DeskJet' by 'mike'.
I [20/May/1999:19:21:02 +0000] Job 2 queued on 'DeskJet' by 'mike'.
I [20/May/1999:19:22:24 +0000] Job 2 was cancelled by 'mike'.
</PRE></UL>
<P>The <I>level</I> field contains the type of message:
<UL>
<LI><CODE>E</CODE> - An error occurred.
<LI><CODE>W</CODE> - The server was unable to perform some action.
<LI><CODE>I</CODE> - Informational message.
<LI><CODE>D</CODE> - Debugging message.
</UL>
<P>The <I>date-time</I> field contains the date and time of when the page
started printing. The format of this field is identical to the <I>data-time</I>
field in the <CODE>access_log</CODE> file.
<P>The <I>message</I> fields contains a free-form textual message.
<H2>The page_log File</H2>
<P>The <CODE>page_log</CODE> file lists each page that is sent to a printer.
Each line contains the following information:
<UL><PRE>
printer user job-id date-time page-number num-copies
DeskJet root 2 [20/May/1999:19:21:05 +0000] 1 0
</PRE></UL>
<P>The <I>printer</I> field contains the name of the printer that
printed the page. If you send a job to a printer class, this field will
contain the name of the printer that was assigned the job.
<P>The <I>user</I> field contains the name of the user (the IPP
<CODE>requesting-user-name</CODE> attribute) that submitted this file for
printing.
<P>The <I>job-id</I> field contains the job number of the page being printed.
Job numbers are reset to 1 whenever the CUPS server is started, so don't depend
on this number being unique!
<P>The <I>date-time</I> field contains the date and time of when the page
started printing. The format of this field is identical to the <I>data-time</I>
field in the <CODE>access_log</CODE> file.
<P>The <I>page-number</I> and <I>num-pages</I> fields contain the page number
and number of copies being printed of that page. For printer that can not
produce copies on their own, the <I>num-pages</I> field will always be 1.
</BODY>
</HTML>
+3
Ver Arquivo
@@ -116,6 +116,9 @@ with reduced functionality. </P>
<P>CUPS adds network printer browsing and PostScript Printer
Description (&quot;PPD&quot;)-based printing options to support real world
applications under UNIX. </P>
<P>CUPS also includes a customized version of GNU GhostScript
(currently based off GNU GhostScript 4.03) and an image file RIP that
can be used to support non-PostScript printers. </P>
<H2><A NAME=1_3>1.3 Document Overview</A></H2>
This software design description document is organized into the
following sections:
+126 -130
Ver Arquivo
@@ -1,6 +1,6 @@
%PDF-1.2
%âãÏÓ
1 0 obj<</Producer(htmldoc 2.0b1 Copyright 1997-1999 Michael Sweet, All Rights Reserved.)/CreationDate(D:19990513142506Z)/Title(DRAFT - CUPS Software Design Description)/Author(Easy Software Products)>>endobj
1 0 obj<</Producer(htmldoc 2.0b1 Copyright 1997-1999 Michael Sweet, All Rights Reserved.)/CreationDate(D:19990621185446Z)/Title(DRAFT - CUPS Software Design Description)/Author(Easy Software Products)>>endobj
2 0 obj<</Type/Encoding/BaseEncoding/WinAnsiEncoding>>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
@@ -17,9 +17,9 @@
15 0 obj<</Subtype/Link/Rect[108.0 646.8 124.5 659.8]/Border[0 0 0]/Dest[219 0 R/XYZ null 658 0]>>endobj
16 0 obj<</Subtype/Link/Rect[124.5 646.8 159.6 659.8]/Border[0 0 0]/Dest[219 0 R/XYZ null 658 0]>>endobj
17 0 obj<</Subtype/Link/Rect[159.6 646.8 203.0 659.8]/Border[0 0 0]/Dest[219 0 R/XYZ null 658 0]>>endobj
18 0 obj<</Subtype/Link/Rect[108.0 633.6 124.5 646.6]/Border[0 0 0]/Dest[219 0 R/XYZ null 474 0]>>endobj
19 0 obj<</Subtype/Link/Rect[124.5 633.6 173.1 646.6]/Border[0 0 0]/Dest[219 0 R/XYZ null 474 0]>>endobj
20 0 obj<</Subtype/Link/Rect[173.1 633.6 216.4 646.6]/Border[0 0 0]/Dest[219 0 R/XYZ null 474 0]>>endobj
18 0 obj<</Subtype/Link/Rect[108.0 633.6 124.5 646.6]/Border[0 0 0]/Dest[219 0 R/XYZ null 434 0]>>endobj
19 0 obj<</Subtype/Link/Rect[124.5 633.6 173.1 646.6]/Border[0 0 0]/Dest[219 0 R/XYZ null 434 0]>>endobj
20 0 obj<</Subtype/Link/Rect[173.1 633.6 216.4 646.6]/Border[0 0 0]/Dest[219 0 R/XYZ null 434 0]>>endobj
21 0 obj<</Subtype/Link/Rect[72.0 607.2 80.2 620.2]/Border[0 0 0]/Dest[225 0 R/XYZ null 818 0]>>endobj
22 0 obj<</Subtype/Link/Rect[80.2 607.2 131.6 620.2]/Border[0 0 0]/Dest[225 0 R/XYZ null 818 0]>>endobj
23 0 obj<</Subtype/Link/Rect[108.0 594.0 124.5 607.0]/Border[0 0 0]/Dest[225 0 R/XYZ null 737 0]>>endobj
@@ -292,7 +292,7 @@
153 0 obj<</D[219 0 R/XYZ null 818 null]>>endobj
154 0 obj<</D[219 0 R/XYZ null 737 null]>>endobj
155 0 obj<</D[219 0 R/XYZ null 658 null]>>endobj
156 0 obj<</D[219 0 R/XYZ null 474 null]>>endobj
156 0 obj<</D[219 0 R/XYZ null 434 null]>>endobj
157 0 obj<</D[225 0 R/XYZ null 818 null]>>endobj
158 0 obj<</D[225 0 R/XYZ null 737 null]>>endobj
159 0 obj<</D[225 0 R/XYZ null 540 null]>>endobj
@@ -408,17 +408,13 @@ endobj
œéöÐ1‡  à, sd Þ Tê׌ÌÇ3 ÔKÎcîç ÇÜa:\‡±†;peu°õfŽàB*ý@±ž1ð?j˜c† À©ÃtXÄ ë€í‡é°”éL/AƒÈ!Qà¸ÖX°•Ý5CreŽt˜Œ¸A8F†Xûª¥qB
Õ,
3Cìuâ,ùV…™!öªõا»@sá
±GéÈ l
SCô“‘5^)^`&°}Zâ­Ç7C-—ôƶÄÜHº 06Äž4QùP0´=yg´ªWÆÀxÔöãsCkc_ßË“‘¡l'fƲ6}¤`aàÚ÷bw„T®”Ôa6µƒ¢Y!™Kz#ÉÈ|#· &……›‚%s°P‘Æõ‚ÁE»Ãcùn`)l uÀÂêBÉ*ÌUñÊŽ‰€ùªE0–> %w²K/U`+J;‚½H Û7ƒÁ¢6™ª«å4Øóü'ëàÙbQo²¹ŠˆVÿ¦sT¹¦ßfÃçJY\žCí,†Å·Å]\Ìó¼ó¤çÎjŸurÅ·à¿tþ^°†qaÂ%=~9GYc~Áûô•—A‡mÇÙe—9Þ3©:¦Ý\&¶G{ÐöuÄþÜ…!u¦4ÈˇF¿Éûedò¸
S®Ü³SÎΗËåë‡Çr¿\^D†Ÿ¶0æ²ÑaÖKWþ#†K:ȵ°Àe&‰£tŽË½[Yár®Ãº—¾p\rjÝ…ä"ìÚ Q zH®"r‰kc+Vw¡¹X+=i|b“+w†kQØärFëqÛx.MEãi\Ü%œDƒÆå„t`÷{)\r2VHãrÀÑ[‡$®Ñ-Ÿu@ãÊ'b…T®‘ã_Â6kTK¤ä¾P¹ÆôΔí'*׈=)iŽÌ5Ú£¥½Ð¹FbÄÄ2×8CŒ¸·ËàeˆQ³ 8\”ôÀ14ƒÍ5¸vÐSåx\k#É%…»RhÂ5¤(²R‡¹\Ãñ2ÉØ\Œ´ŸA—1×@“1扮!ü³Ï=HaÂÕ¿)ò³4¸ú3H>5ãêWM’…
¹útÐF9Ц\ý™%ãs‘s¨{š˜ØçêcÚb˜®n‡Ë¾,šŸ›°ÂUH»¶xiÞ";\¶h¯Ë‚MáW!/Üé,\–ºì|S¸ÆUÈkc|m«-6¹ø©ÕªK{-±Ëe^“‹Kf—ª.ÙùkÛm胋˜ï/{xÏE?\åïŸßôrûÞ¸v½Öagˇ¾îÝ'×®Û®—gê~º|èó¾}sí;n{Âayq¶-çËååÃCï·„k„ɧWé«;ùêÝÅÕG!'n®ÅÍúí?ÿÓCvû£oÄ}¹ÈýÝ·¿ýöËgñðùë/¿ÿãö??}ùåOß~ùõÿ,ÿ÷ñnÄÕÕö®>¼ûA¼¹zÿözû!Û‹ßäo®Þ®·ß\ݼýA¼¹þ°¿GòÛ¯?}6|ùõç¿üôíë®âMõs~ýÓß¿üòûÿùöØÎ?¼yü×Ç·øƒÈ¶¿ü*²Ï_?ùë矷—&ò‘êÿTMòšendstream
endobj
215 0 obj
6311
endobj
±GéÈ l
SCô“‘5^)^`&°}Zâ­Ç7C-—ôƶÄÜHº 06Äž4QùP0´=yg´ªWÆÀxÔöãsCkc_ßË“‘¡l'fƲ6}¤`aàÚ÷bw„T®”Ôa6µƒ¢Y!™Kz#ÉÈ|#· &……›‚%s°P‘Æõ‚ÁE»Ãcùn`)l uÀÂêBÉ*ÌUñÊŽ‰€ùªE0–> %w²K/U`+J;‚½H Û7ƒÁ¢6™ª«å4Øóü'ëàÙbQo²¹ŠˆVÿ¦sT¹¦ßfÃçJY\žCí,†Å·Å]\Ìó¼ó¤çÎjŸurÅ·à¿tþ^°†qaÂ%=~9GYc~Áûô•—A‡mÇÙe—9Þ3©:¦Ý\&¶G{ÐöuÄþÜ…!u¦4ÈˇF¿Éûedò¸
S®Ü³SÎΗËåë‡Çr¿\^D†Ÿ¶0æ²ÑaÖKWþ#†K:ȵ°Àe&‰£tŽË½[Yár®Ãº—¾p\rjÝ…ä"ìÚ Q zH®"r‰kc+Vw¡¹X+=i|b“+w†kQØärFëqÛx.MEãi\Ü%œDƒÆå„t`÷{)\r2VHãrÀÑ[‡$®Ñ-Ÿu@ãÊ'b…T®‘ã_Â6kTK¤ä¾P¹ÆôΔí'*׈=)iŽÌ5Ú£¥½Ð¹FbÄÄ2×8CŒ¸·ËàeˆQ³ 8\”ôÀ14ƒÍ5¸vÐSåx\k#É%…»RhÂ5¤(²R‡¹\Ãñ2ÉØ\Œ´ŸA—1×@“1扮!ü³Ï=HaÂÕ¿)ò³4¸ú3H>5ãêWM’…
¹útÐF9Ц\ý™%ãs‘s¨{š˜ØçêcÚb˜®n‡Ë¾,šŸ›°ÂUH»¶xiÞ";\¶h¯Ë‚MáW!/Üé,\–ºì|S¸ÆUÈkc|m«-6¹ø©ÕªK{-±Ëe^“‹Kf—ª.ÙùkÛm胋˜ï/{xÏE?\åïŸßôrûÞ¸v½Öagˇ¾îÝ'×®Û®—gê~º|èó¾}sí;n{Âayq¶-çËååÃCï·„k„ɧWé«;ùêÝÅÕG!'n®ÅÍúí?ÿÓCvû£oÄ}¹ÈýÝ·¿ýöËgñðùë/¿ÿãö??}ùåOß~ùõÿ,ÿ÷ñnÄÕÕö®>¼ûA¼¹zÿözû!Û‹ßäo®Þ®·ß\ݼýA¼¹þ°¿GòÛ¯?}6|ùõç¿üôíë®âMõs~ýÓß¿üòûÿùöØÎ?¼yü×Ç·øƒÈ¶¿ü*²Ï_?ùë矷—&ò‘êÿTMòšendstream
endobj
215 0 obj
xÚ+ä2T0BCc3JÎår
6311
endobj
216 0 obj<</Type/Page/Parent 212 0 R/Contents 217 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 8 0 R>>>>>>endobj
217 0 obj<</Length 218 0 R/Filter/FlateDecode>>stream
@@ -592,7 +588,7 @@ endobj
xÚ+ä2T0BCc3JÎår
áÒw³P04TIS046Ò3W072PIÑp rt QÐUp
VÎO+)O,JUpI-ÎLÏQÉE™%™ùyš!Y\ººP­†& A=#°€ PCIbfNj
260 0 obj
Ô¼kW ~ö&;endstream
endobj
260 0 obj
126
@@ -872,122 +868,122 @@ xref
0000017515 00000 n
0000017564 00000 n
0000017613 00000 n
0000017760 00000 n
0000017809 00000 n
0000017858 00000 n
0000017907 00000 n
0000017956 00000 n
0000018005 00000 n
0000018054 00000 n
0000018103 00000 n
0000018152 00000 n
0000018201 00000 n
0000018250 00000 n
0000018299 00000 n
0000018348 00000 n
0000018397 00000 n
0000018446 00000 n
0000018495 00000 n
0000018544 00000 n
0000018593 00000 n
0000018642 00000 n
0000018691 00000 n
0000018740 00000 n
0000018789 00000 n
0000018838 00000 n
0000018887 00000 n
0000018936 00000 n
0000018985 00000 n
0000019034 00000 n
0000019083 00000 n
0000019132 00000 n
0000019181 00000 n
0000019230 00000 n
0000019279 00000 n
0000019328 00000 n
0000019377 00000 n
0000019426 00000 n
0000019475 00000 n
0000019524 00000 n
0000019573 00000 n
0000019622 00000 n
0000019671 00000 n
0000019720 00000 n
0000019769 00000 n
0000019818 00000 n
0000019867 00000 n
0000019916 00000 n
0000019965 00000 n
0000020014 00000 n
0000020063 00000 n
0000020112 00000 n
0000020341 00000 n
0000020493 00000 n
0000026875 00000 n
0000026897 00000 n
0000027010 00000 n
0000027112 00000 n
0000027132 00000 n
0000027273 00000 n
0000028082 00000 n
0000028103 00000 n
0000028216 00000 n
0000028408 00000 n
0000028429 00000 n
0000028570 00000 n
0000029163 00000 n
0000029184 00000 n
0000029297 00000 n
0000029493 00000 n
0000029514 00000 n
0000029664 00000 n
0000030677 00000 n
0000030698 00000 n
0000030857 00000 n
0000032012 00000 n
0000032034 00000 n
0000032165 00000 n
0000033044 00000 n
0000033065 00000 n
0000033206 00000 n
0000034316 00000 n
0000034338 00000 n
0000034469 00000 n
0000035451 00000 n
0000035472 00000 n
0000035612 00000 n
0000036603 00000 n
0000036624 00000 n
0000036755 00000 n
0000037427 00000 n
0000037448 00000 n
0000037561 00000 n
0000037758 00000 n
0000037779 00000 n
0000037901 00000 n
0000038066 00000 n
0000038086 00000 n
0000038199 00000 n
0000038396 00000 n
0000038417 00000 n
0000038557 00000 n
0000039053 00000 n
0000039074 00000 n
0000039205 00000 n
0000039656 00000 n
0000039677 00000 n
0000039832 00000 n
0000042073 00000 n
0000042095 00000 n
0000042250 00000 n
0000043158 00000 n
0000043179 00000 n
0000043234 00000 n
0000043339 00000 n
0000043483 00000 n
0000043589 00000 n
0000017662 00000 n
0000017711 00000 n
0000017760 00000 n
0000017809 00000 n
0000017858 00000 n
0000017907 00000 n
0000017956 00000 n
0000018005 00000 n
0000018054 00000 n
0000018103 00000 n
0000018152 00000 n
0000018201 00000 n
0000018250 00000 n
0000018299 00000 n
0000018348 00000 n
0000018397 00000 n
0000018446 00000 n
0000018495 00000 n
0000018544 00000 n
0000018593 00000 n
0000018642 00000 n
0000018691 00000 n
0000018740 00000 n
0000018789 00000 n
0000018838 00000 n
0000018887 00000 n
0000018936 00000 n
0000018985 00000 n
0000019034 00000 n
0000019083 00000 n
0000019132 00000 n
0000019181 00000 n
0000019230 00000 n
0000019279 00000 n
0000019328 00000 n
0000019377 00000 n
0000019426 00000 n
0000019475 00000 n
0000019524 00000 n
0000019573 00000 n
0000019622 00000 n
0000019671 00000 n
0000019720 00000 n
0000019769 00000 n
0000019818 00000 n
0000019867 00000 n
0000019916 00000 n
0000019965 00000 n
0000020014 00000 n
0000020063 00000 n
0000020112 00000 n
0000020341 00000 n
0000020493 00000 n
0000026875 00000 n
0000026897 00000 n
0000027010 00000 n
0000027112 00000 n
0000027132 00000 n
0000027273 00000 n
0000028169 00000 n
0000028190 00000 n
0000028303 00000 n
0000028495 00000 n
0000028516 00000 n
0000028657 00000 n
0000029250 00000 n
0000029271 00000 n
0000029384 00000 n
0000029580 00000 n
0000029601 00000 n
0000029751 00000 n
0000030764 00000 n
0000030785 00000 n
0000030944 00000 n
0000032099 00000 n
0000032121 00000 n
0000032252 00000 n
0000033131 00000 n
0000033152 00000 n
0000033293 00000 n
0000034403 00000 n
0000034425 00000 n
0000034556 00000 n
0000035538 00000 n
0000035559 00000 n
0000035699 00000 n
0000036690 00000 n
0000036711 00000 n
0000036842 00000 n
0000037514 00000 n
0000037535 00000 n
0000037648 00000 n
0000037845 00000 n
0000037866 00000 n
0000037988 00000 n
0000038153 00000 n
0000038173 00000 n
0000038286 00000 n
0000038483 00000 n
0000038504 00000 n
0000038644 00000 n
0000039140 00000 n
0000039161 00000 n
0000039292 00000 n
0000039743 00000 n
0000039764 00000 n
0000039919 00000 n
0000042160 00000 n
0000042182 00000 n
0000042337 00000 n
0000043245 00000 n
0000043266 00000 n
0000043321 00000 n
0000043426 00000 n
0000043570 00000 n
0000043676 00000 n
0000043796 00000 n
0000044077 00000 n
0000043905 00000 n
0000044054 00000 n
+4
Ver Arquivo
@@ -31,6 +31,10 @@ supported with reduced functionality.
Description (&quot;PPD&quot;)-based printing options to support real
world applications under UNIX.
<P>CUPS also includes a customized version of GNU GhostScript
(currently based off GNU GhostScript 4.03) and an image file RIP that
can be used to support non-PostScript printers.
<H2>Document Overview</H2>
This software design description document is organized into the
+82 -14
Ver Arquivo
@@ -26,15 +26,14 @@ Copyright 1997-1999, All Rights Reserved<BR>
<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 Risk Identification</A></B>
<B><A HREF=#3>3 Local Access Risks</A></B>
<UL>
<LI><A HREF=#3_1>3.1 Local Access Risks</A></LI>
<LI><A HREF=#3_2>3.2 Remote Access Risks</A></LI>
<LI><A HREF=#3_1>3.1 Security Breaches</A></LI>
</UL>
<B><A HREF=#4>4 Risk Assessment</A></B>
<B><A HREF=#4>4 Remote Access Risks</A></B>
<UL>
<LI><A HREF=#4_1>4.1 Local Access Risks</A></LI>
<LI><A HREF=#4_2>4.2 Remote Access Risks</A></LI>
<LI><A HREF=#4_1>4.1 Denial of Service Attacks</A></LI>
<LI><A HREF=#4_2>4.2 Security Breaches</A></LI>
</UL>
<B><A HREF=#5>A Glossary</A></B>
<UL>
@@ -60,14 +59,17 @@ with reduced functionality. </P>
<P>CUPS adds network printer browsing and PostScript Printer
Description (&quot;PPD&quot;)-based printing options to support real world
applications under UNIX. </P>
<P>CUPS also includes a customized version of GNU GhostScript
(currently based off GNU GhostScript 4.03) and an image file RIP that
can be used to support non-PostScript printers. </P>
<H2><A NAME=1_3>1.3 Document Overview</A></H2>
<P>This software security report is organized into the following
sections:</P>
<UL>
<LI>1 - Scope</LI>
<LI>2 - References</LI>
<LI>3 - Risk Identification</LI>
<LI>4 - Risk Assessment</LI>
<LI>3 - Local Access Risks</LI>
<LI>4 - Remote Access Risks</LI>
<LI>A - Glossary</LI>
</UL>
<H1><A NAME=2>2 References</A></H1>
@@ -94,12 +96,78 @@ sections:</P>
<LI>IPP/1.0: Model and Semantics </LI>
<LI>RFC 1179, Line Printer Daemon Protocol </LI>
</UL>
<H1><A NAME=3>3 Risk Identification</A></H1>
<H2><A NAME=3_1>3.1 Local Access Risks</A></H2>
<H2><A NAME=3_2>3.2 Remote Access Risks</A></H2>
<H1><A NAME=4>4 Risk Assessment</A></H1>
<H2><A NAME=4_1>4.1 Local Access Risks</A></H2>
<H2><A NAME=4_2>4.2 Remote Access Risks</A></H2>
<H1><A NAME=3>3 Local Access Risks</A></H1>
<P>Local access risks are those that can be exploited only with a local
user account. This section does not address issues related to
dissemination of the root password or other security issues associated
with the UNIX operating system. </P>
<H2><A NAME=3_1>3.1 Security Breaches</A></H2>
<P>Since the default installation creates a world-readable request
directory, it is possible for local users to read the contents of print
files before they are printed. </P>
<P>This problem can be alleviated by making the request directory
readable only by the user specified in the CUPS configuration file. </P>
<H1><A NAME=4>4 Remote Access Risks</A></H1>
<P>Remote access risks are those that can be exploited without a local
user account and/or from a remote system. This section does not address
issues related to network or firewall security. </P>
<H2><A NAME=4_1>4.1 Denial of Service Attacks</A></H2>
<P>Like all internet services, the CUPS server is vulnerable to denial
of service attacks, including: </P>
<OL>
<LI>Establishing multiple connections to the server until the server
will accept no more.
<P>This cannot be protected against by the current software. It is
possible that future versions of the CUPS software could be configured
to limit the number of connections allowed from a single host, however
that still would not prevent a determined attack. </P>
</LI>
<LI>Repeatedly opening and closing connections to the server as fast
as possible.
<P>There is no easy way of protecting against this in the CUPS
software. If the attack is coming from outside the local network it
might be possible to filter such an attack, however once the
connection request has been received by the server it must at least
accept the connection to find out who is connecting. </P>
</LI>
<LI>Flooding the network with broadcast packets on port 631.
<P>It might be possible to disable browsing if this condition is
detected by the CUPS software, however if there are large numbers of
printers available on the network such an algorithm might think that
an attack was occurring when instead a valid update was being
received. </P>
</LI>
<LI>Sending partial IPP requests; specifically, sending part of an
attribute value and then stopping transmission.
<P>The current code is structured to read and write the IPP request
data on-the-fly, so there is no easy way to protect against this for
large attribute values. </P>
</LI>
<LI>Sending large/long print jobs to printers, preventing other users
from printing.
<P>There are limited facilities for protecting against large print
jobs (the <CODE>MaxRequestSize</CODE> attribute), however this will
not protect printers from malicious users and print files that
generate hundreds or thousands of pages. In general, we recommend
restricting printer access to known hosts or networks, and adding
user-level access control as needed for expensive printers. </P>
</LI>
</OL>
<H2><A NAME=4_2>4.2 Security Breaches</A></H2>
<P>The current CUPS server only supports Basic authentication with
usernames and passwords. This essentially places the clear text of the
username and password on the network. Since CUPS uses the UNIX username
and password account information, the authentication information could
be used to gain access to accounts (possibly priviledged accounts) on
the server. </P>
<P>The default CUPS configuration disables remote administration. We do
not recommend that remote administration be enabled for all hosts,
however if you have a trusted network or subnet access can be
restricted accordingly. </P>
<P>The next minor release of CUPS will support Digest authentication of
the entire message body using separate MD5-based username and password
files. This will protect password information and prevent unauthorized
access due to compromised account passwords. </P>
<H1 TYPE=A VALUE=1><A NAME=5>A Glossary</A></H1>
<H2><A NAME=5_1>A.1 Terms</A></H2>
<DL>
+292 -298
Ver Arquivo
@@ -1,61 +1,58 @@
%PDF-1.2
%âãÏÓ
1 0 obj<</Producer(htmldoc 2.0b1 Copyright 1997-1999 Michael Sweet, All Rights Reserved.)/CreationDate(D:19990513142508Z)/Title(DRAFT - CUPS Software Security Report)/Author(Easy Software Products)>>endobj
1 0 obj<</Producer(htmldoc 2.0b1 Copyright 1997-1999 Michael Sweet, All Rights Reserved.)/CreationDate(D:19990709142834Z)/Title(DRAFT - CUPS Software Security Report)/Author(Easy Software Products)>>endobj
2 0 obj<</Type/Encoding/BaseEncoding/WinAnsiEncoding>>endobj
3 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Roman/Encoding 2 0 R>>endobj
4 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Bold/Encoding 2 0 R>>endobj
5 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Italic/Encoding 2 0 R>>endobj
6 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica/Encoding 2 0 R>>endobj
7 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica-Bold/Encoding 2 0 R>>endobj
8 0 obj<</Type/Font/Subtype/Type1/BaseFont/Symbol>>endobj
9 0 obj<</Subtype/Link/Rect[72.0 673.2 80.2 686.2]/Border[0 0 0]/Dest[82 0 R/XYZ null 818 0]>>endobj
10 0 obj<</Subtype/Link/Rect[80.2 673.2 107.8 686.2]/Border[0 0 0]/Dest[82 0 R/XYZ null 818 0]>>endobj
11 0 obj<</Subtype/Link/Rect[108.0 660.0 124.5 673.0]/Border[0 0 0]/Dest[82 0 R/XYZ null 737 0]>>endobj
12 0 obj<</Subtype/Link/Rect[124.5 660.0 183.8 673.0]/Border[0 0 0]/Dest[82 0 R/XYZ null 737 0]>>endobj
13 0 obj<</Subtype/Link/Rect[108.0 646.8 124.5 659.8]/Border[0 0 0]/Dest[82 0 R/XYZ null 658 0]>>endobj
14 0 obj<</Subtype/Link/Rect[124.5 646.8 159.6 659.8]/Border[0 0 0]/Dest[82 0 R/XYZ null 658 0]>>endobj
15 0 obj<</Subtype/Link/Rect[159.6 646.8 203.0 659.8]/Border[0 0 0]/Dest[82 0 R/XYZ null 658 0]>>endobj
16 0 obj<</Subtype/Link/Rect[108.0 633.6 124.5 646.6]/Border[0 0 0]/Dest[82 0 R/XYZ null 474 0]>>endobj
17 0 obj<</Subtype/Link/Rect[124.5 633.6 173.1 646.6]/Border[0 0 0]/Dest[82 0 R/XYZ null 474 0]>>endobj
18 0 obj<</Subtype/Link/Rect[173.1 633.6 216.4 646.6]/Border[0 0 0]/Dest[82 0 R/XYZ null 474 0]>>endobj
19 0 obj<</Subtype/Link/Rect[72.0 607.2 80.2 620.2]/Border[0 0 0]/Dest[88 0 R/XYZ null 818 0]>>endobj
20 0 obj<</Subtype/Link/Rect[80.2 607.2 131.6 620.2]/Border[0 0 0]/Dest[88 0 R/XYZ null 818 0]>>endobj
21 0 obj<</Subtype/Link/Rect[108.0 594.0 124.5 607.0]/Border[0 0 0]/Dest[88 0 R/XYZ null 737 0]>>endobj
22 0 obj<</Subtype/Link/Rect[124.5 594.0 154.8 607.0]/Border[0 0 0]/Dest[88 0 R/XYZ null 737 0]>>endobj
23 0 obj<</Subtype/Link/Rect[154.8 594.0 222.6 607.0]/Border[0 0 0]/Dest[88 0 R/XYZ null 737 0]>>endobj
24 0 obj<</Subtype/Link/Rect[108.0 580.8 124.5 593.8]/Border[0 0 0]/Dest[88 0 R/XYZ null 540 0]>>endobj
25 0 obj<</Subtype/Link/Rect[124.5 580.8 152.3 593.8]/Border[0 0 0]/Dest[88 0 R/XYZ null 540 0]>>endobj
26 0 obj<</Subtype/Link/Rect[152.3 580.8 202.4 593.8]/Border[0 0 0]/Dest[88 0 R/XYZ null 540 0]>>endobj
27 0 obj<</Subtype/Link/Rect[72.0 554.4 80.2 567.4]/Border[0 0 0]/Dest[94 0 R/XYZ null 818 0]>>endobj
28 0 obj<</Subtype/Link/Rect[80.2 554.4 104.4 567.4]/Border[0 0 0]/Dest[94 0 R/XYZ null 818 0]>>endobj
29 0 obj<</Subtype/Link/Rect[104.4 554.4 168.0 567.4]/Border[0 0 0]/Dest[94 0 R/XYZ null 818 0]>>endobj
30 0 obj<</Subtype/Link/Rect[108.0 541.2 124.5 554.2]/Border[0 0 0]/Dest[94 0 R/XYZ null 737 0]>>endobj
31 0 obj<</Subtype/Link/Rect[124.5 541.2 152.3 554.2]/Border[0 0 0]/Dest[94 0 R/XYZ null 737 0]>>endobj
32 0 obj<</Subtype/Link/Rect[152.3 541.2 186.2 554.2]/Border[0 0 0]/Dest[94 0 R/XYZ null 737 0]>>endobj
33 0 obj<</Subtype/Link/Rect[186.2 541.2 210.7 554.2]/Border[0 0 0]/Dest[94 0 R/XYZ null 737 0]>>endobj
34 0 obj<</Subtype/Link/Rect[108.0 528.0 124.5 541.0]/Border[0 0 0]/Dest[94 0 R/XYZ null 679 0]>>endobj
35 0 obj<</Subtype/Link/Rect[124.5 528.0 161.5 541.0]/Border[0 0 0]/Dest[94 0 R/XYZ null 679 0]>>endobj
36 0 obj<</Subtype/Link/Rect[161.5 528.0 195.4 541.0]/Border[0 0 0]/Dest[94 0 R/XYZ null 679 0]>>endobj
37 0 obj<</Subtype/Link/Rect[195.4 528.0 219.8 541.0]/Border[0 0 0]/Dest[94 0 R/XYZ null 679 0]>>endobj
38 0 obj<</Subtype/Link/Rect[72.0 501.6 80.2 514.6]/Border[0 0 0]/Dest[100 0 R/XYZ null 818 0]>>endobj
39 0 obj<</Subtype/Link/Rect[80.2 501.6 104.4 514.6]/Border[0 0 0]/Dest[100 0 R/XYZ null 818 0]>>endobj
40 0 obj<</Subtype/Link/Rect[104.4 501.6 158.2 514.6]/Border[0 0 0]/Dest[100 0 R/XYZ null 818 0]>>endobj
41 0 obj<</Subtype/Link/Rect[108.0 488.4 124.5 501.4]/Border[0 0 0]/Dest[100 0 R/XYZ null 737 0]>>endobj
42 0 obj<</Subtype/Link/Rect[124.5 488.4 152.3 501.4]/Border[0 0 0]/Dest[100 0 R/XYZ null 737 0]>>endobj
43 0 obj<</Subtype/Link/Rect[152.3 488.4 186.2 501.4]/Border[0 0 0]/Dest[100 0 R/XYZ null 737 0]>>endobj
44 0 obj<</Subtype/Link/Rect[186.2 488.4 210.7 501.4]/Border[0 0 0]/Dest[100 0 R/XYZ null 737 0]>>endobj
45 0 obj<</Subtype/Link/Rect[108.0 475.2 124.5 488.2]/Border[0 0 0]/Dest[100 0 R/XYZ null 679 0]>>endobj
46 0 obj<</Subtype/Link/Rect[124.5 475.2 161.5 488.2]/Border[0 0 0]/Dest[100 0 R/XYZ null 679 0]>>endobj
47 0 obj<</Subtype/Link/Rect[161.5 475.2 195.4 488.2]/Border[0 0 0]/Dest[100 0 R/XYZ null 679 0]>>endobj
48 0 obj<</Subtype/Link/Rect[195.4 475.2 219.8 488.2]/Border[0 0 0]/Dest[100 0 R/XYZ null 679 0]>>endobj
49 0 obj<</Subtype/Link/Rect[72.0 448.8 82.7 461.8]/Border[0 0 0]/Dest[106 0 R/XYZ null 818 0]>>endobj
50 0 obj<</Subtype/Link/Rect[82.7 448.8 124.2 461.8]/Border[0 0 0]/Dest[106 0 R/XYZ null 818 0]>>endobj
51 0 obj<</Subtype/Link/Rect[108.0 435.6 126.9 448.6]/Border[0 0 0]/Dest[106 0 R/XYZ null 737 0]>>endobj
52 0 obj<</Subtype/Link/Rect[126.9 435.6 155.0 448.6]/Border[0 0 0]/Dest[106 0 R/XYZ null 737 0]>>endobj
53 0 obj<</Subtype/Link/Rect[108.0 422.4 126.9 435.4]/Border[0 0 0]/Dest[106 0 R/XYZ null 434 0]>>endobj
54 0 obj<</Subtype/Link/Rect[126.9 422.4 172.8 435.4]/Border[0 0 0]/Dest[106 0 R/XYZ null 434 0]>>endobj
55 0 obj[9 0 R
10 0 R
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
5 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Bold/Encoding 2 0 R>>endobj
6 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Italic/Encoding 2 0 R>>endobj
7 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica/Encoding 2 0 R>>endobj
8 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica-Bold/Encoding 2 0 R>>endobj
9 0 obj<</Type/Font/Subtype/Type1/BaseFont/Symbol>>endobj
10 0 obj<</Subtype/Link/Rect[72.0 673.2 80.2 686.2]/Border[0 0 0]/Dest[79 0 R/XYZ null 818 0]>>endobj
11 0 obj<</Subtype/Link/Rect[80.2 673.2 107.8 686.2]/Border[0 0 0]/Dest[79 0 R/XYZ null 818 0]>>endobj
12 0 obj<</Subtype/Link/Rect[108.0 660.0 124.5 673.0]/Border[0 0 0]/Dest[79 0 R/XYZ null 737 0]>>endobj
13 0 obj<</Subtype/Link/Rect[124.5 660.0 183.8 673.0]/Border[0 0 0]/Dest[79 0 R/XYZ null 737 0]>>endobj
14 0 obj<</Subtype/Link/Rect[108.0 646.8 124.5 659.8]/Border[0 0 0]/Dest[79 0 R/XYZ null 658 0]>>endobj
15 0 obj<</Subtype/Link/Rect[124.5 646.8 159.6 659.8]/Border[0 0 0]/Dest[79 0 R/XYZ null 658 0]>>endobj
16 0 obj<</Subtype/Link/Rect[159.6 646.8 203.0 659.8]/Border[0 0 0]/Dest[79 0 R/XYZ null 658 0]>>endobj
17 0 obj<</Subtype/Link/Rect[108.0 633.6 124.5 646.6]/Border[0 0 0]/Dest[79 0 R/XYZ null 434 0]>>endobj
18 0 obj<</Subtype/Link/Rect[124.5 633.6 173.1 646.6]/Border[0 0 0]/Dest[79 0 R/XYZ null 434 0]>>endobj
19 0 obj<</Subtype/Link/Rect[173.1 633.6 216.4 646.6]/Border[0 0 0]/Dest[79 0 R/XYZ null 434 0]>>endobj
20 0 obj<</Subtype/Link/Rect[72.0 607.2 80.2 620.2]/Border[0 0 0]/Dest[85 0 R/XYZ null 818 0]>>endobj
21 0 obj<</Subtype/Link/Rect[80.2 607.2 131.6 620.2]/Border[0 0 0]/Dest[85 0 R/XYZ null 818 0]>>endobj
22 0 obj<</Subtype/Link/Rect[108.0 594.0 124.5 607.0]/Border[0 0 0]/Dest[85 0 R/XYZ null 737 0]>>endobj
23 0 obj<</Subtype/Link/Rect[124.5 594.0 154.8 607.0]/Border[0 0 0]/Dest[85 0 R/XYZ null 737 0]>>endobj
24 0 obj<</Subtype/Link/Rect[154.8 594.0 222.6 607.0]/Border[0 0 0]/Dest[85 0 R/XYZ null 737 0]>>endobj
25 0 obj<</Subtype/Link/Rect[108.0 580.8 124.5 593.8]/Border[0 0 0]/Dest[85 0 R/XYZ null 540 0]>>endobj
26 0 obj<</Subtype/Link/Rect[124.5 580.8 152.3 593.8]/Border[0 0 0]/Dest[85 0 R/XYZ null 540 0]>>endobj
27 0 obj<</Subtype/Link/Rect[152.3 580.8 202.4 593.8]/Border[0 0 0]/Dest[85 0 R/XYZ null 540 0]>>endobj
28 0 obj<</Subtype/Link/Rect[72.0 554.4 80.2 567.4]/Border[0 0 0]/Dest[91 0 R/XYZ null 818 0]>>endobj
29 0 obj<</Subtype/Link/Rect[80.2 554.4 109.3 567.4]/Border[0 0 0]/Dest[91 0 R/XYZ null 818 0]>>endobj
30 0 obj<</Subtype/Link/Rect[109.3 554.4 143.2 567.4]/Border[0 0 0]/Dest[91 0 R/XYZ null 818 0]>>endobj
31 0 obj<</Subtype/Link/Rect[143.2 554.4 168.9 567.4]/Border[0 0 0]/Dest[91 0 R/XYZ null 818 0]>>endobj
32 0 obj<</Subtype/Link/Rect[108.0 541.2 124.5 554.2]/Border[0 0 0]/Dest[91 0 R/XYZ null 690 0]>>endobj
33 0 obj<</Subtype/Link/Rect[124.5 541.2 163.9 554.2]/Border[0 0 0]/Dest[91 0 R/XYZ null 690 0]>>endobj
34 0 obj<</Subtype/Link/Rect[163.9 541.2 204.2 554.2]/Border[0 0 0]/Dest[91 0 R/XYZ null 690 0]>>endobj
35 0 obj<</Subtype/Link/Rect[72.0 514.8 80.2 527.8]/Border[0 0 0]/Dest[97 0 R/XYZ null 818 0]>>endobj
36 0 obj<</Subtype/Link/Rect[80.2 514.8 119.0 527.8]/Border[0 0 0]/Dest[97 0 R/XYZ null 818 0]>>endobj
37 0 obj<</Subtype/Link/Rect[119.0 514.8 152.9 527.8]/Border[0 0 0]/Dest[97 0 R/XYZ null 818 0]>>endobj
38 0 obj<</Subtype/Link/Rect[152.9 514.8 178.6 527.8]/Border[0 0 0]/Dest[97 0 R/XYZ null 818 0]>>endobj
39 0 obj<</Subtype/Link/Rect[108.0 501.6 124.5 514.6]/Border[0 0 0]/Dest[97 0 R/XYZ null 704 0]>>endobj
40 0 obj<</Subtype/Link/Rect[124.5 501.6 156.6 514.6]/Border[0 0 0]/Dest[97 0 R/XYZ null 704 0]>>endobj
41 0 obj<</Subtype/Link/Rect[156.6 501.6 168.5 514.6]/Border[0 0 0]/Dest[97 0 R/XYZ null 704 0]>>endobj
42 0 obj<</Subtype/Link/Rect[168.5 501.6 204.2 514.6]/Border[0 0 0]/Dest[97 0 R/XYZ null 704 0]>>endobj
43 0 obj<</Subtype/Link/Rect[204.2 501.6 237.8 514.6]/Border[0 0 0]/Dest[97 0 R/XYZ null 704 0]>>endobj
44 0 obj<</Subtype/Link/Rect[108.0 488.4 124.5 501.4]/Border[0 0 0]/Dest[97 0 R/XYZ null 255 0]>>endobj
45 0 obj<</Subtype/Link/Rect[124.5 488.4 163.9 501.4]/Border[0 0 0]/Dest[97 0 R/XYZ null 255 0]>>endobj
46 0 obj<</Subtype/Link/Rect[163.9 488.4 204.2 501.4]/Border[0 0 0]/Dest[97 0 R/XYZ null 255 0]>>endobj
47 0 obj<</Subtype/Link/Rect[72.0 462.0 82.7 475.0]/Border[0 0 0]/Dest[103 0 R/XYZ null 818 0]>>endobj
48 0 obj<</Subtype/Link/Rect[82.7 462.0 124.2 475.0]/Border[0 0 0]/Dest[103 0 R/XYZ null 818 0]>>endobj
49 0 obj<</Subtype/Link/Rect[108.0 448.8 126.9 461.8]/Border[0 0 0]/Dest[103 0 R/XYZ null 737 0]>>endobj
50 0 obj<</Subtype/Link/Rect[126.9 448.8 155.0 461.8]/Border[0 0 0]/Dest[103 0 R/XYZ null 737 0]>>endobj
51 0 obj<</Subtype/Link/Rect[108.0 435.6 126.9 448.6]/Border[0 0 0]/Dest[103 0 R/XYZ null 434 0]>>endobj
52 0 obj<</Subtype/Link/Rect[126.9 435.6 172.8 448.6]/Border[0 0 0]/Dest[103 0 R/XYZ null 434 0]>>endobj
53 0 obj[10 0 R
11 0 R
12 0 R
13 0 R
@@ -98,32 +95,30 @@
50 0 R
51 0 R
52 0 R
53 0 R
54 0 R
]endobj
56 0 obj<</Dests 57 0 R>>endobj
57 0 obj<</Kids[58 0 R]>>endobj
58 0 obj<</Limits[(1)(5_2)]/Names[(1)59 0 R(1_1)60 0 R(1_2)61 0 R(1_3)62 0 R(2)63 0 R(2_1)64 0 R(2_2)65 0 R(3)66 0 R(3_1)67 0 R(3_2)68 0 R(4)69 0 R(4_1)70 0 R(4_2)71 0 R(5)72 0 R(5_1)73 0 R(5_2)74 0 R]>>endobj
59 0 obj<</D[82 0 R/XYZ null 818 null]>>endobj
60 0 obj<</D[82 0 R/XYZ null 737 null]>>endobj
61 0 obj<</D[82 0 R/XYZ null 658 null]>>endobj
62 0 obj<</D[82 0 R/XYZ null 474 null]>>endobj
63 0 obj<</D[88 0 R/XYZ null 818 null]>>endobj
64 0 obj<</D[88 0 R/XYZ null 737 null]>>endobj
65 0 obj<</D[88 0 R/XYZ null 540 null]>>endobj
66 0 obj<</D[94 0 R/XYZ null 818 null]>>endobj
67 0 obj<</D[94 0 R/XYZ null 737 null]>>endobj
68 0 obj<</D[94 0 R/XYZ null 679 null]>>endobj
69 0 obj<</D[100 0 R/XYZ null 818 null]>>endobj
70 0 obj<</D[100 0 R/XYZ null 737 null]>>endobj
71 0 obj<</D[100 0 R/XYZ null 679 null]>>endobj
72 0 obj<</D[106 0 R/XYZ null 818 null]>>endobj
73 0 obj<</D[106 0 R/XYZ null 737 null]>>endobj
74 0 obj<</D[106 0 R/XYZ null 434 null]>>endobj
75 0 obj<</Type/Pages/MediaBox[0 0 595 792]/Count 14/Kids[76 0 R
79 0 R
54 0 obj<</Dests 55 0 R>>endobj
55 0 obj<</Kids[56 0 R]>>endobj
56 0 obj<</Limits[(1)(5_2)]/Names[(1)57 0 R(1_1)58 0 R(1_2)59 0 R(1_3)60 0 R(2)61 0 R(2_1)62 0 R(2_2)63 0 R(3)64 0 R(3_1)65 0 R(4)66 0 R(4_1)67 0 R(4_2)68 0 R(5)69 0 R(5_1)70 0 R(5_2)71 0 R]>>endobj
57 0 obj<</D[79 0 R/XYZ null 818 null]>>endobj
58 0 obj<</D[79 0 R/XYZ null 737 null]>>endobj
59 0 obj<</D[79 0 R/XYZ null 658 null]>>endobj
60 0 obj<</D[79 0 R/XYZ null 434 null]>>endobj
61 0 obj<</D[85 0 R/XYZ null 818 null]>>endobj
62 0 obj<</D[85 0 R/XYZ null 737 null]>>endobj
63 0 obj<</D[85 0 R/XYZ null 540 null]>>endobj
64 0 obj<</D[91 0 R/XYZ null 818 null]>>endobj
65 0 obj<</D[91 0 R/XYZ null 690 null]>>endobj
66 0 obj<</D[97 0 R/XYZ null 818 null]>>endobj
67 0 obj<</D[97 0 R/XYZ null 704 null]>>endobj
68 0 obj<</D[97 0 R/XYZ null 255 null]>>endobj
69 0 obj<</D[103 0 R/XYZ null 818 null]>>endobj
70 0 obj<</D[103 0 R/XYZ null 737 null]>>endobj
71 0 obj<</D[103 0 R/XYZ null 434 null]>>endobj
72 0 obj<</Type/Pages/MediaBox[0 0 595 792]/Count 14/Kids[73 0 R
76 0 R
109 0 R
112 0 R
115 0 R
79 0 R
82 0 R
85 0 R
88 0 R
@@ -133,10 +128,9 @@
100 0 R
103 0 R
106 0 R
109 0 R
]>>endobj
76 0 obj<</Type/Page/Parent 75 0 R/Contents 77 0 R/Resources<</ProcSet[/PDF/Text/ImageB/ImageC/ImageI]/Font<</F4 3 0 R/F8 6 0 R/F9 7 0 R>>>>>>endobj
77 0 obj<</Length 78 0 R/Filter/FlateDecode>>stream
73 0 obj<</Type/Page/Parent 72 0 R/Contents 74 0 R/Resources<</ProcSet[/PDF/Text/ImageB/ImageC/ImageI]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
74 0 obj<</Length 75 0 R/Filter/FlateDecode>>stream
xÚíßÜ8rÇ%µúÅOšÙíwNH€ØîO{Ï@pgF›ì[I¢‡]_r‡ öÎë½`ÿûô¯éÖRª*R57<à°¶Én~Äâ·ŠdQý·W7b½ýßøîV¼ÿ ~üßW÷òU"_ýM¼_ÿîíwû|ÿáÃÛµøÝÇ··âööæíݾÖïòÿ|÷ûìßîÅæ_×ûò~_>ìËÇ}yØ—ï÷å÷ÿõîñõ˯Ÿßý‡¸{óîßÅæææÝ=<ˆ;ñÃã«âyxá2+òñv¹\^]ìÊö?–wSç’Ë‹ÈS•‹ËëÇirÉÛ+5R ny71.yÛÅôT.¯“©pᡎhwSàz¸òÈÅ_&ŽsÝG¯\næºåRÙ4Gpf¬ìŽ™e®á™—oǸò+ÏJñ¯âºõ¬•`ã žÍrí—±^Ø2K\òʳ^ü×£så‘×Gùfd®{¯§$crÝx½3—e´ncmËëQ¸däy.“BX-ßÎ5 &€Åƒ)`1ÀÀiÉà‹LËóVqõî·Ì4›k`¬-X2×Ú¼p}òF(³Þ¹2o”òmÏ\y4AÁ}…giLA
ÚÑ ê£såÞ¨eÓW4.rŠÁ2Ç‹Á4<Yì‰\r|,ÏïK8Àå…Ö¹2ω²±Ì%#7¸Ë\kÏ‘²°Ê•yΔÄ"—+Vˆrb®Øs¨l¬qå.auJLO4PQLP40QL*ÒÀk=–+u
«cÀ`z0˜ Æcœ3ŽKºˆÕ×Ã51Ã`z.5Ã`¸áº¸\._?îÊýîâC¿ƒ ùº9Éw÷ z¸ü–¤ùpÕÏ€AßÃuÙ¹Tº7@[p­ûªò¨-­‡õÐãpÒ%77xÃæb‡´tq&ÙŒËÅ
@@ -169,284 +163,284 @@ w
N#îâ2‰ç+ÿ gµ8M°¬š¤­ªKâšÇöÉ„Ãp¥ç?R` š¤­ªKâ
ËnnÆÕ‘~xúçüb[%±JJw¤ôuI\»û_§Ç´è•+ÐýÃŽ§”TܶÕçÇIº›Â«Þ¸"]:ÎñL9/ÁD-©;x®õñóvŸ¼éë n4qcP™FÚº$®ø(C;KOzã:žu^nÔÖ>“âIεuI\pÎ~õ‹Þ¸N!z£·‡~ˆJ¾X_WÉÕLìÜS¤Çùºs_ýq•òAj½Ÿ¼ÍÉëëR¸²£¬wlÆÕv®W®Wy/qÚÌ¢ÕÖ¥påÇ?îܲ!WÛ9l¬¼ÇQY'u)\Ò;½}ÞÎet¾,µ™¥¢‘Õ¢¯Kà*ŽŽyÿ·ýqÕ²hý¤1’!¢.…ëà˜÷n¹O®Ò‹¶ªª™ÓÕ¥ps¶÷ñ}r=]„mäR©’M[ë⸎9Û×7ãêÌûºT³F(Šº.Þ/ïÝ`²û¿ƒËF>ÛÃUsQ“j9ªº®to{·Ü?×¹·³Z(µAÕ%póÞ-Áõ$
vÒ´Õ%póÞ-raß-šµ‹A[]—|òbó¡¸Î‰×Ý\µº®ƒc>ˆd+—I>öîU2«ª+ÖrµÕ¥pmM0ÈÏû§½pUÝ+tnvêêR¸¶’ágÇhÈ•àö;¸ÚêR¸v#ÕõÆTlËoåÒÕ¥pÁá2¬ßÅerïFTþY´ê|[]
Wz¸Y˜s­Ú—_‹ò:d¦åj«KáÊÎN½7®´<žëÚ×Ô:ÛV—•ŸW­\&÷mý»ó¡ÖJËÕV·#ž¯¼mKVO
Wz¸Y˜s­Ú—_‹ò:d¦åj«KáÊÎN½7®´<žëÚ×Ô:ÛV—•ŸW­\&÷mý»ó¡ÖJËÕV·#ž¯¼mKVO
¸ç°çCHýb±­.…«ô^Øþ¸â–µZ«¥.‰Kฌîeç-Uë\-u\‰9×—nSý±Š¾.‰+nüM\¹^a\9w?ªJ§§ÒÊeôþê^Ì·E+—¾.‰K÷~V»\¥Î^\Úº$®ìäÓÛ¹Œ6²wÞè*Ò”˜Ô5*†ïí9ÊÏë
óS|†ïYr¶¾ë…kx®î×-O“+þ‡åJ&ÉÕ½Á±™$—É‚ù…kx.£…夹æ“ä’ÿ°\á$¹º`³gÊL“+z†¯áïq¼pÀµ~†/îw|V“ä‚gÊ•>ÃÑðwÍÆ*]/{]þÝX¥«Ë+Üï:H¥v¸œ ¤º¤.1ü]αJŒâŠ&pt…Øß½u-à]ö…üb×vÚ¢.=@þ®´k‡‡â‚©²Óß"ßܱ€#ÃqMî÷èÓÎaL´åœc†ÎisuÎ1¯;e0òâœn 0îÀ9 ø]s`Ýa ìÕ1–w« ôű•eÖ­Þ€òŽ9°´»³€zŽ9°¸Û¸e°Ž­ÀÖÝQ âHǘè9À §[Bè+àSBŸ#l p#ë”Ðg-œÂ8%ô€ÒWÕ)¡]äк$ôaZ€œŠ.EôQ·ûzâ’z‰‘n(°B?ŸŒ®J\b:‚˜bf C.‡1Æ(X¡÷¦"‡~™+›Ž ¢
´Ð;!樈
´Ð‡‘Ãy™ !ôŽ ì
´Ð;!樈
´Ð‡‘Ãy™ !ôŽ ì
´Ð;"k”Z=]ޱú*q¥‰¤:…àp”^èÃIÈFPåB}0 Ù«\ˆ­²1¯q‰iG„SÀ?'"‰|ø€7\'„#CzY ´pA8bd¡ ¢›Ù*0«s!Ñόݮ€‚"ˆs÷§×ªÁO`‚¡ï‚a?Ä
pŒ=ÁÐïh€‚$#O°îG?Sp ç'HÆ;ö[£'
w‚á# 9‡‘'X†_J)VyN¤¢#‡ˆ„Sp(ˆÂ1â£ÒmœG]ƒQ΀ØpÌMŽ˜Ð9 ê蘛”­v NÌ•>§L ŽôˆJOÚ‘jÓñ”^PºT%m·M4
¨Ss4CDØÒL˵v×iÛ/PÐ'ØÂQ3,ÇB@vé#bJ3$ ¯pF2Ä5íyÝŠG1DI ]¼ÄÇSâㆂ1ÁFˆqz@Á™`¡‹fXYiçÁ ¿XI©
¨Ss4CDØÒL˵v×iÛ/PÐ'ØÂQ3,ÇB@vé#bJ3$ ¯pF2Ä5íyÝŠG1DI ]¼ÄÇSâㆂ1ÁFˆqz@Á™`¡‹fXYiçÁ ¿XI©
Î|Õ,¨jk
œd™‘½¬ 6° ‹ÉsXC>°rHz€5EV
œåöÐ1‡ Ï àl sd Þ$Tê׌ ÌÇ3 ÔKÎcîç ÇÜi:Ü€±¦;peu°ÃõfŽàB*ý@±ž1ð?j˜c† ÀŸ©Ã ë€í°”éL/AƒÈ)Qà¸ÖX°•Ã5CreŽ ˜Œ¸A8F†Xû©¥qB
œåöÐ1‡ Ï àl sd Þ$Tê׌ ÌÇ3 ÔKÎcîç ÇÜi:Ü€±¦;peu°ÃõfŽàB*ý@±ž1ð?j˜c† ÀŸ©Ã ë€í°”éL/AƒÈ)Qà¸ÖX°•Ã5CreŽ ˜Œ¸A8F†Xû©¥qB
Õ*
3Cìuá,ùV…™!öªõا»@sá
±GéÈ l
SCô“‘5^)^`&°}Zâ'o†Z.ém‰¹‘tAalˆ=i¢0ò¡`<i{òÎh+TïŒñ¬íÇ;ç†Öƾ¾—)&#CÙOÌþŠemúHÁÂĵïÅî _\P¹RÒ€ÙÔŠf…d.é&#ó vŒÜ&˜¾,™ƒÅ€Š4¯ .Ú7lË7KaK¨vJVa®Š7vLl¬W-‚ѰôñXÙ_(¹“ÍXz©[QÚ ìõ@JØ~ µÉT=ÈX-·ÑÀžç?[ÏóˆúE!›«ˆ8`õ_:G•[ú×lø\)‹Ëó糖Űø¶8 ‹‹9`žw™ô<Xík£N®ØãüÎ?Ö4.L¸¤Ç/—(k̯xŸ¾2â2°Ý<»î2Ç&UÇò¡›ËdÀhúϾ؟»0ä¢.ÔyýØ7ù°ŒLWaÊ•{vÊÅår¹|ý¸-ËåUdøi c.f½tå?b¸¤ƒ\ \f’8Êpá¸Ü°•¬{ë Ç%§6\H.©Í±¡‡ä*"—¸6ö¸²i
š‹µÓÑ“Æ'6¹rg¸…M.g´ç’ÑT4žÆÅÝÂA4h\NHö¼—Â%'c…4.,}tHâÝñY4®|"VHå9þ%`¹FµDJî •kLïL9~¢rØ“’æÈ\£M1ZÚ k¤)FL,cp3ňg» ®Q¦5Ë€ÃEIC3Ø\ƒk=UŽÇ5°v02™\R¸+…&\CŠ"+u˜Ë5/“ŒÍÅHûÄqs
´cÞ80àÂ?ûÜ‹&\ý›"?KÓˆ«o0ƒäS3®~UÑ$YØ«Om”mÊÕ˜Y2¾19‡º§…‰}®>–-†éêv¸ìË¢ù½ +\…´k‹×æ=²ÃµµE{Cl
w¸
yåÎ`Ùä²4d—›Â5®BÞËàk[}±ÉÅO­>R]Ûë‰].ƒôjDêö˜\\2»T}pqÈ._ÛîC\ļxÙÃ{.úáÚ–G\v¼y×Ë×÷Ƶµƒ¼X>öõÝ}rí‡ívy¡§ëÇ>¿·o®ÃÀín8,¯.vår¹¼~|ìý+á¡@òëôÕ½|õîûâæ£›ïÞ~wë·wBþôOÙ§ï¥x#
ÈEþó¿þß¾|ùçýò§¯¿‰ìó_þòõŸåŸ·íïÄÍÍ®ýÍÝGñææýÛÛ]û]»7yž½¹y»ÞU{s³Ù~ú›ÛOþðËoç…/?ÿôë_ÙW¼{ÿöCés~þëo_þôßÿóuÛÉß½ÙþßÇŸþò‘íþò—mG~ùüåïŸÚ5MäéÿiÁñ½endstream
3Cìuá,ùV…™!öªõا»@sá
±GéÈ l
SCô“‘5^)^`&°}Zâ'o†Z.ém‰¹‘tAalˆ=i¢0ò¡`<i{òÎh+TïŒñ¬íÇ;ç†Öƾ¾—)&#CÙOÌþŠemúHÁÂĵïÅî _\P¹RÒ€ÙÔŠf…d.é&#ó vŒÜ&˜¾,™ƒÅ€Š4¯ .Ú7lË7KaK¨vJVa®Š7vLl¬W-‚ѰôñXÙ_(¹“ÍXz©[QÚ ìõ@JØ~ µÉT=ÈX-·ÑÀžç?[ÏóˆúE!›«ˆ8`õ_:G•[ú×lø\)‹Ëó糖Űø¶8 ‹‹9`žw™ô<Xík£N®ØãüÎ?Ö4.L¸¤Ç/—(k̯xŸ¾2â2°Ý<»î2Ç&UÇò¡›ËdÀhúϾ؟»0ä¢.ÔyýØ7ù°ŒLWaÊ•{vÊÅår¹|ý¸-ËåUdøi c.f½tå?b¸¤ƒ\ \f’8Êpá¸Ü°•¬{ë Ç%§6\H.©Í±¡‡ä*"—¸6ö¸²i
š‹µÓÑ“Æ'6¹rg¸…M.g´ç’ÑT4žÆÅÝÂA4h\NHö¼—Â%'c…4.,}tHâÝñY4®|"VHå9þ%`¹FµDJî •kLïL9~¢rØ“’æÈ\£M1ZÚ k¤)FL,cp3ňg» ®Q¦5Ë€ÃEIC3Ø\ƒk=UŽÇ5°v02™\R¸+…&\CŠ"+u˜Ë5/“ŒÍÅHûÄqs
´cÞ80àÂ?ûÜ‹&\ý›"?KÓˆ«o0ƒäS3®~UÑ$YØ«Om”mÊÕ˜Y2¾19‡º§…‰}®>–-†éêv¸ìË¢ù½ +\…´k‹×æ=²ÃµµE{Cl
w¸
yåÎ`Ùä²4d—›Â5®BÞËàk[}±ÉÅO­>R]Ûë‰].ƒôjDêö˜\\2»T}pqÈ._ÛîC\ļxÙÃ{.úáÚ–G\v¼y×Ë×÷Ƶµƒ¼X>öõÝ}rí‡ívy¡§ëÇ>¿·o®ÃÀín8,¯.vår¹¼~|ìý+á¡@òëôÕ½|õîûâæ£›ïÞ~wë·wBþôOÙ§ï¥x#
ÈEþó¿þß¾|ùçýò§¯¿‰ìó_þòõŸåŸ·íïÄÍÍ®ýÍÝGñææýÛÛ]û]»7yž½¹y»ÞU{s³Ù~ú›ÛOþðËoç…/?ÿôë_ÙW¼{ÿöCés~þëo_þôßÿóuÛÉß½ÙþßÇŸþò‘íþò—mG~ùüåïŸÚ5MäéÿiÁñ½endstream
endobj
78 0 obj
endobj
75 0 obj
6308
endobj
xÚ+ä2T0BCc3JÎår
76 0 obj<</Type/Page/Parent 72 0 R/Contents 77 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 7 0 R>>>>>>endobj
77 0 obj<</Length 78 0 R/Filter/FlateDecode>>stream
xÚ+ä2T0BCc3JÎår
äHendstream
endobj
ár
á
äHendstream
endobj
78 0 obj
31
endobj
xÚ•UKoÚ@¾ó+F9%Rpc <z ÒÖ¨.‹=‡µ×ÙYƒè¯ïìÚ‚hÚ.켾-®øãàÝ>Äykµ>ÝÀA”²¥?èA”œûƪċ襶^{ÃÚÞ¾zµ‡çÃ4ÁÂdi “©¢vîï7®-3R©Ù@W:3[ÐX*m Ôj%H
79 0 obj<</Type/Page/Parent 72 0 R/Contents 80 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R/Fc 9 0 R>>>>>>endobj
80 0 obj<</Length 81 0 R/Filter/FlateDecode>>stream
UKo1¾ó+F9%RÙfè-o!¥í6ª.Æ;œx=[Û ¢¿¾c/Bi«TpÁóú¾o|o¥pÊŸÎ;Ðíƒ,[—“ÖûÛ!¤C˜léŸ÷`’§0–TáÉä¹±ž%ƒÆÞ>$G’Â(GãU¡¤ðŠLã܃4]»vúëd®8*üRX‡²¶Ê¯ÀbEÖCei¡rt …^9ö¦*rNÍôN€$#ÑYðs„+*K2ðøiô-ç’i7é„’™UŒÌ<Áxå<–0=>ºzÌÆGÓøŠÖ1ZH“Óä¿îpï³ þ¼@»P¸ü ÁWX`¿ú–"Ê"°ª6>Z¬ÐFJ!vÚ9ë+oE4º˜À%0ò0nå Ñ@Ž Ô‘Ãl7­`¼‘:³”×Ò;ð0”ä‘!8/L.l¾…àHסƒ…кa±@““
³Ù<£&F ¾wåà×íøuvÁßר×nÞ!ø WßSKYXVåÎGŠ-jGÉÆÎ:×}`åµpFr ȃ©¥ #–sÄ\£äˆæ[¸´…p'u URņÀ(!WQ$B'{¤de;èP)kk,¥m_’£º±†XE÷ÜlC¾Ï6ƨW(Ñö-Ïù¡-³K¢NEŒä5Yw*ºtœºN5µ~š½˜ÌƨXInæô.ºoOƒ€Û)j÷¹°ccñs)±°þ޼¨¹£¯V\¸YGt,.W†1hû8;&—ðxëûƒÑìâBE"±@K¯Ø-ü:¶V[á¦,C~D7Ó*Wæ6Iê¨$U¥nÚ&3K^îÿH«"¶’çý¤>"IX–Ò«š!cškµ!KÙ¢™0ÖYiöœÜCæˆÁ„¡Í’áÁ(g·³r¸®L@”¥l¶ž *¬‡÷ý}êÂDÅUÎ'ãïÅÞýŸ { ôBÙ/&Àð•TI©6nžÑ©HŸëüq“¿3dBäœuúx €Ï^ûððÅ{`;1NEqRxÄ5ò}¢…vmhF«“§ô?sôv9nˆ—‡¬ÀŠ¿áø/’¯­ÐÛÚ4lLíF±n}ð¯Ð^y#Îl_íﻨõ£õÑòæendstream
endobj
}É÷êÖŽ5L (ºå²æû5ÄÀ%ÚÔúV–üÐÖÊ pI´…è’uÖŠ1§nR‚ŸA¿“Ùx’¤¹™£›Ém{”eÜNѸÏD›€ŸK‰§àéÁ3Í"ø^cÍE›µGç>àŠe¸×C§Ç÷Ùõ;x¸½JÓóáôäŒyØþO—šä »?^k¨pQUc~Ä8Ó*Wæ6íh¯¤««0 Ü´¥òs^îÿ(j#C#„æy?¨Ès,Ë’ìKÃ1Í,-] PdäüXZUù-'tñAEbGYvÍ‹ÐfÉpg(ÚìÆÊ …®«sU¥×[ï 696Ã{1³ç®K]7 kç©T?¸öb½Š¼íwŸán¾…>=楷|^ô
 TüîÕKN»Ó“=¼A¾%ª m*ïÚÃ(ã!$¿Ï0 YvbÃÌiïȶ–Õýý<tášd]2Ä?öîÿû†{gŸ„‰špiŠ]Ö´Œë‰q(܇&¿\çï ˜ï/­§þ9¼ÀW¼½{ÇåØF«CQœ°@VŸ·ôM¡]½'Ésr!9ÖÁƒr/oKÑ‹Õã©úïœãNóÿ‡°«Æ4X›Úhé°Û4fç®78M†œ9¼†ß7“Ö—ÖOªÏ8˜endstream
endobj
81 0 obj
824
endobj
86 0 obj<</Length 87 0 R/Filter/FlateDecode>>stream
82 0 obj<</Type/Page/Parent 72 0 R/Contents 83 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 7 0 R>>>>>>endobj
83 0 obj<</Length 84 0 R/Filter/FlateDecode>>stream
xÚ+ä2T0BCc3JÎår
VÎO+)O,JUNM.-Ê,©TJ-È/*Ñ ÉâÒiÒ…ê2‰˜˜˜é™)€ù†
áÒw³P04TIS041T072PIÑp rt QÐUp
VÎO+)O,JUNM.-Ê,©TJ-È/*Ñ ÉâÒiÒ…ê2‰˜˜˜é™)€ù†
ÁÉù© Q×®@.ü7 £endstream
endobj
84 0 obj
118
endobj
85 0 obj<</Type/Page/Parent 72 0 R/Contents 86 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R/Fc 9 0 R>>>>>>endobj
86 0 obj<</Length 87 0 R/Filter/FlateDecode>>stream
xÚ­•OÚ0Åï|Š9²Ò&K 7
l…T´) {ââÆp•ØÔ6Úòíkc•V%]å@Æ¿7ö¼?ZÀ „nòªõ)k=½ÄÄæMЃŒ¶CX`yŽê!ûîJžýÈyÏ‘ïÊüÆË$…‰ÈwrM4Ü-èAËþ+Ï6…(KñÎøÚ-¤— )µ.…o{ÐóU]3tàü#?<³Wa×Êm«àç‰ø¡Ó ^°õN:½9ád
IIø5ß4tÄßà³Éäžî•Æ
endobj
87 0 obj
118
endobj
88 0 obj<</Type/Page/Parent 75 0 R/Contents 89 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 3 0 R/F8 6 0 R/F9 7 0 R/Fc 8 0 R>>>>>>endobj
f\£,HŽ0AÅÖÜÞrɶ糹G"Í­„ÿ³…~'aD+Æ™Òf/B*»—)ð¯·PÓ?¤õd~ H±–¤ª¬ w.n¡SÌw’é½±ïVHÝ€›%·¸ª¦I—˜ßRáÿŒímrûf¨ÖÛ¿Mîœ`ÏE§×)áUoPžb¬þ1Â\pï*Æ
l ™áÙt:… 
üÞc° ç›Ý
¡×¶ŸU›JRèÕÃ]ç9K’§ÃÌG”2K$%¼nOèdxÆ^fì)ϵ=N!“„«»
l…T´) {ââÆp•ØÔ6Úòíkc•V%]å@Æ¿7ö¼?ZÀ „nòªõ)k=½ÄÄæMЃŒ¶CX`yŽê!ûîJžýÈyÏ‘ïÊüÆË$…‰ÈwrM4Ü-èAËþ+Ï6…(KñÎøÚ-¤— )µ.…o{ÐóU]3tàü#?<³Wa×Êm«àç‰ø¡Ó ^°õN:½9ád
zbͪmyøÕ²ú¼c›qæ‚byh(ÅŠ˜#ÌÕ] ÅËØ<âGøÂ8º1X¬ŒM̵ÈÅÑÛÑqÑÑ{aßúŸéE?6²æU×~žf­¯­_Ð&Ùûendstream
endobj
f\£,HŽ0AÅÖÜÞrɶ糹G"Í­„ÿ³…~'aD+Æ™Òf/B*»—)ð¯·PÓ?¤õd~ H±–¤ª¬ w.n¡SÌw’é½±ïVHÝ€›%·¸ª¦I—˜ßRáÿŒímrûf¨ÖÛ¿Mîœ`ÏE§×)áUoPžb¬þ1Â\pï*Æ
87 0 obj
522
üÞc° ç›Ý
endobj
88 0 obj<</Type/Page/Parent 72 0 R/Contents 89 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 7 0 R>>>>>>endobj
89 0 obj<</Length 90 0 R/Filter/FlateDecode>>stream
xÚ-‹Í1…÷÷)Î’E™[Ͱ5˜5Óë¤n3TE¼½©È9›óó=ˆQb,êâp£FhÞ®À ‰`ÇXÚ
ržl»u+0Ø÷~ˆù}J
¯á•.ùƒNïCÊS¹’)ùS®4Îò¬Æ/Ûñ5iôY¦Ð¾­u"§endstream
endobj
90 0 obj
121
endobj
91 0 obj<</Type/Page/Parent 72 0 R/Contents 92 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
endobj
92 0 obj<</Length 93 0 R/Filter/FlateDecode>>stream
xÚuRÛjÜ0}÷WÌcïnöòØ”
522
¥´]úª•ÆY%²ÆÑÈMý÷‘³]Xƒå3ç6z®¸‘§Í–k°}u×V¾ì ÙAÛÉŸõf­{·„odM€Ö"3üòüÄWí£@WÐ43ôz¹«×
ž¡f†&…‚IùH¬o“Ášü;òP ¼ø|¡ŒŒI9hŒ¹†öèÁ2DÊj@de½PYã\REÏ<
91 0 obj<</Type/Page/Parent 75 0 R/Contents 92 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 6 0 R>>>>>>endobj
92 0 obj<</Length 93 0 R/Filter/FlateDecode>>stream
a0J œaï£)ãÔ‰ „D”a0Ì/”Ä@’Ó¤"còy:Ñ€¬/LÅŸŽÞÿúûBœLB€'ÎØ×s;Räm½=÷3—Y7°?ÉÜ%4öˆo·¹÷ÑbuØ™1d𑳠aNce>«OÁ]˧3‡ ùðYüg Ÿ¤7JÓ{ð2Ë0³WD'¡Ïe³6¥ÓÉTÙRÌ3kwCò1C烈P8马¸üCW¿R,Ösಽ!‘ˆö§ÝKü3÷z˜ 7OÚ]ÙË¥oø©ÜA+¬ÜÐúÎ zzaýÓý½zïüØæºÔ÷ën¶ç®W›õ<ñÖ=_moê r«ßŸÛêgõ #endstream
endobj
93 0 obj
447
¯á•.ùƒNïCÊS¹’)ùS®4Îò¬Æ/Ûñ5iôY¦Ð¾­u"§endstream
endobj
94 0 obj<</Type/Page/Parent 72 0 R/Contents 95 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 7 0 R>>>>>>endobj
93 0 obj
95 0 obj<</Length 96 0 R/Filter/FlateDecode>>stream
xÚ+ä2T0BCc3JÎår
endobj
94 0 obj<</Type/Page/Parent 75 0 R/Contents 95 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 6 0 R/F9 7 0 R>>>>>>endobj
95 0 obj<</Length 96 0 R/Filter/FlateDecode>>stream
xÚ}ÎA
Â0Ð}Nñ—º0mÚ¦I–
7–\ ¤)¤Ú©Á…2«Ï¼?Ì“0”iD…º…YÈI“¢S`
zJ›V4Ðã®Fï—ѮÑMÎ Ñùu¯çl9•Y¸¤ÙS†«7ÃGclïzØ
_¨Boí*: Æ>G¹Hòß,©J4¾å³&7ò×Ò:ßendstream
endobj
96 0 obj
áÒw³P04TIS041T072PIÑp rt QÐUp
VÎO+)O,JUNM.-Ê,©TJ-È/*Ñ ÉâÒiÒ…ê2[ëìò|ò“s““S‹‹‚2‹³‹AJ\C¸¹Ñ€%3endstream
endobj
98 0 obj<</Length 99 0 R/Filter/FlateDecode>>stream
96 0 obj
131
endobj
99 0 obj
130
97 0 obj<</Type/Page/Parent 72 0 R/Contents 98 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
98 0 obj<</Length 99 0 R/Filter/FlateDecode>>stream
xÚ}WKo7¾ûWÌÑ$Ù’ßí©nÀ@[¤¶‚öà Å¥$Æ\rCr½V~}¿!¹z¬í @‘¬È™ù3œ~?šÒþLézFçW$룻ùÑéç[šÞÒ|‰_®®/h^_Ѓª]Tô›”*zÐá9œÌ¿áìM§ùìøüvrŧËY‘Ïz>KÂ+Škø¿"’ŠÔkcœŽª¢Nã×6’ ã¤0Ôå9‚k->ÚêÔyZzWã€ÏáÃ&DUO¸
äžžOfœ{¾Ö‚’Q;K•S¬C€ªò\‹¡Å'¯Œà¤Ñ‘U±sþ™8¼öªÆðõÖ븙d„`ãrr³Ã˜™Lée5JuKzTþEKУ?aæOý ^BÛ¨<r#WºFàEÑï_¿<¦O/­±Ê‹…Q\jµMW.‘ÈéF'M[i»ú…SÏ.i<»ÊuN'ÄŸŽ?…ˆ8:¬qˆêÖDÝ ªtÖf®JvЮÍþ‡N£l–´‰ ”jçUâ·Éù–)‡º‡N’‰+¡mÀÇM
z½‚®Á-cgLè>2ÞÆ… ZöȲ-\ƒä!à¸<Ð;3VâOk*N
xÚuα
`K½Âõ$²ÑµŽ)³mëÀ Ô>t(â:- àEÀ­q4H·Æ9f#"sÒ¥œ ¹ñøí
© o­-CO%ªÆÌUiV„yPb3š
¹
102 0 obj
Cؤq\ÆOœŠ¢ÀŠæ& %†:±aðE™”¬HY;m÷l¸'_p4éj¾Êt
øA ]©t>7rß` Ö«u6ÆVg‡®3àŠB+×^’Œ¨'ÚY™£íˆ¤ôê;z:ÒD,”²èn©ô ¨/nëû ´ÌW$£qÙ̇ÁsI€‡Q·v€;Èןµ«·¢žQ?縳ç
<âhá¨$§o€SEØÚ‚éê|úF¿ûH«tHSѺd½Ì¢¸J'ø»0µ_!â@Ö-Åx)»†ûÉ¿ê›&dã¤É…–yÚ¤œ=@¹Ò¬†èº.Pž}Î}#†guPÐI ©[CK¶¦è"zFWÔ6š%\(>Õ‹ýV‹‹¢Å£²IŠFøÈóóþË*ž ¿Rh”ÔK
§šÍe¸Ù^/Z$E­¹´]Óàp¯YŸ7zaC*ô¯Ó^?n‡ŸtUjÍ}+c?ª|B‹ÈËÎß+˜€^€ñ1¾—©bWäÚ5ù€\ny.-ØïK<{YãÌð–ÏËŸéÞ©qL»‚¾¹EÈ™²GFý@äÓŽ«L¯zÈc6ê›èíÌJîã±ÍcYHmàj• ~gxe {e<3sù>+ïðñ_âõ!󸍍ÃGúxÇÀÓÉÇSœ¥‡0ûÌè¶'®>•Úµ¡€e-sa˜t@:`¥ø]ÙëÖb3©àûaò:p9·XAº·å¦Q§Øû®®!þéÌI)§_¿ ȳuçé;5 Qr¥X”8—>6Àlú0,Ñ;ïUªbU
û›²ý·%áÍÎ4Æ^¹·5Ͱ+åíŠîàu¹VoKûݲ¿9‹Ç2´
Í@w"hI¢å¦Œhä4ýÒ¬eVÔªˆ Bî
<¦=¨ø7þ€ˆÆ™”Bz<Ð]½Æ²~lƒÄ Á =j~·RѸc}ýûþ¿ƒëô}°~íÕ× P^ ÷~ßm>H wÆžJÌácöt\ž•
‡V+µ­ <ôÈ2õïͳJ-öÉ ¶ß»rQå™
ýÊ.*ì
VM?Oè_Üv©—vVNý‘ÏgcÜìŒ1»ÎÆøðG.nÎ&·8‰3×üïOó£ŽþúYU»endstream
endobj
99 0 obj
endobj
103 0 obj<</Type/Page/Parent 75 0 R/Contents 104 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 6 0 R>>>>>>endobj
104 0 obj<</Length 105 0 R/Filter/FlateDecode>>stream
xÚ+ä2T0BCc3JÎår
áÒw³P04TIS041T072PIÑp rt QÐUp
VÎO+)O,JUNM.-Ê,©TJ-È/*Ñ ÉâÒiÒ…ê²[ë™*€ù&
A™ÅÙ
ŽÅÅ©ÅŹ©y`®!\\g$endstream
1404
endobj
100 0 obj<</Type/Page/Parent 72 0 R/Contents 101 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R>>>>>>endobj
endobj
101 0 obj<</Length 102 0 R/Filter/FlateDecode>>stream
xÚ]Q]o0}çWœÇU4NXš=®Ëò6ikØÜÍ|ífÙ¯ßuˆZ©Âºæ|ÝßBa%Âf›™ŠÇ¦¸?ÔP
M/_¶»ºÚ¡é>èn²Îr :ZïÐÈév¤½ÐãˆÁsäò:Ó ØŸ0è‚F ‰£€ų¿!N­LÐÆ3ŒÎ¢wÍs±B©6Õ:Ck2Q`>tÖÆKuC­·UQÍ@¢û7BŠn 4|¯¿~ŽÓ<û±·'Ñ„Nq ­¨ÌÈ70I}"´¾» ±x‚iÖ²ùû|ß÷ŸÊV¼:Qpz’U]‡Y3Ë–R‰+4ƒå%Æ|$ßÖI}Ó’âJ
T]o›0}çWÜÇíZÒ4…Ç %i¤ªcJ}uÍ
õâf;‹òïwZ©ÝŠ¥N „uçžã{ð¯$‡Kºr¸™ÁÕ¸J¾µÉꄼ„vG•ÅÍÚîË6Ò8Çìékûs\gÅI¯‹le9´h•1 Èó€ Þt¶!ÕXšPZ7j8x´ ™î¬Çì=Qú>0ˤD9MØ î„îÁX°ÈQü‹ŽyÊXÿÌ4Ýà…Š7ÆÔé‘ uЂ3/ŒvÀ©F OèˆüÑÀ`Mo™r±v­`ÿåîžœá{ô1W$÷ìJ“|c÷S‘RžÒ«ò53Xrkô)eSm·)Š6„ÓÈÏtÇl•é«é©ÎŠèñ]=ÔÍt«Š<ÕÃýöj+´[ÛœœGá\5ÕE=Mºª›ï÷ˆ?7@ë"Ìë6»¡µL»
72Âv[§›»i¾[<Jô>­ß¡ˆgÁܽü”ã§Å+uô¼  ÿsJ̋ˬ¤ó
eX¯ÚäGòE8%endstream
endobj
108 0 obj
426
endobj
109 0 obj<</Type/Page/Parent 75 0 R/Contents 110 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 3 0 R/F6 5 0 R/F8 6 0 R>>>>>>endobj
110 0 obj<</Length 111 0 R/Filter/FlateDecode>>stream
’MSÂ0†ïý{ÔC+ÅRË‘v„¡C¤ñÄj¤$˜½IU“œö}v÷Ý}õBè˜Âml?ÝxCìÝd1„!à•
ÅI$€—W÷ÈG£Ù5~1ztÖýnDÎÓÚG„®‰ZR\h¦`$…V²‚厔ì“ð]Á¿@˜Ó”˜Ê§ßà')ÎÚáLC*J.0©×IE\„~mšµL¤¤–TV.b1ÿ‰H4—‚TPh"–ÆŒæª$‚¿7‚ƒ=CãvöÌL~²uLØÆ‰Ê'yÚÎÊw•æ¶äN&ä„W¾Ñg³-—¥ÎKCfÍ9+äšÉZTñ­>ÏÍê&àö±È‡íÔ‚©½!嬮m³ÃJÒµƒ…3ì8!¬øž›Ug¼b€õʰ/Ï(ùÊ‹ûÐKúAlóÆ‹A†Á‡Ñ#* +} ŠAÁèNq}„ÛJ¥mºF!øwÝŽÍ
;6…IЃ&0º0 JŠã¦¶RнïõG%¿endstream
endobj
111 0 obj
383
endobj
112 0 obj<</Type/Page/Parent 75 0 R/Contents 113 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 3 0 R/F5 4 0 R/F8 6 0 R/F9 7 0 R>>>>/Annots 55 0 R>>endobj
113 0 obj<</Length 114 0 R/Filter/FlateDecode>>stream
Rž‹H.GôÁþ£îé­°.¢‡ñ“ˆN–o%÷¦Îצî»ÛïTµ‚Z©EfÿôåР\::ú>žµì~$“‚<Qî+óËL+Ö«ÌÚå›ÍÃgiþ:×"öÊy ¤Í@œ1ßšâgñ)Åõendstream
endobj
102 0 obj
381
endobj
103 0 obj<</Type/Page/Parent 72 0 R/Contents 104 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F6 6 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
104 0 obj<</Length 105 0 R/Filter/FlateDecode>>stream
T]o›0}çWÜÇíZÒ4…Ç %i¤ªcJ}uÍ
õâf;‹òïwZ©ÝŠ¥N „uçžã{ð¯$‡Kºr¸™ÁÕ¸J¾µÉꄼ„vG•ÅÍÚîË6Ò8Çìékûs\gÅI¯‹le9´h•1 Èó€ Þt¶!ÕXšPZ7j8x´ ™î¬Çì=Qú>0ˤD9MØ î„îÁX°ÈQü‹ŽyÊXÿÌ4Ýà…Š7ÆÔé‘ uЂ3/ŒvÀ©F OèˆüÑÀ`Mo™r±v­`ÿåîžœá{ô1W$÷ìJ“|c÷S‘RžÒ«ò53Xrkô)eSm·)Š6„ÓÈÏtÇl•é«é©ÎŠèñ]=ÔÍt«Š<ÕÃýöj+´[ÛœœGá\5ÕE=Mºª›ï÷ˆ?7@ë"Ìë6»¡µL»
72Âv[§›»i¾[<Jô>­ß¡ˆgÁܽü”ã§Å+uô¼  ÿsJ̋ˬ¤ó
eX¯ÚäGòE8%endstream
endobj
105 0 obj
426
endobj
106 0 obj<</Type/Page/Parent 72 0 R/Contents 107 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F6 6 0 R/F8 7 0 R>>>>>>endobj
107 0 obj<</Length 108 0 R/Filter/FlateDecode>>stream
’MSÂ0†ïý{ÔC+ÅRË‘v„¡C¤ñÄj¤$˜½IU“œö}v÷Ý}õBè˜Âml?ÝxCìÝd1„!à•
ÅI$€—W÷ÈG£Ù5~1ztÖýnDÎÓÚG„®‰ZR\h¦`$…V²‚厔ì“ð]Á¿@˜Ó”˜Ê§ßà')ÎÚáLC*J.0©×IE\„~mšµL¤¤–TV.b1ÿ‰H4—‚TPh"–ÆŒæª$‚¿7‚ƒ=CãvöÌL~²uLØÆ‰Ê'yÚÎÊw•æ¶äN&ä„W¾Ñg³-—¥ÎKCfÍ9+äšÉZTñ­>ÏÍê&àö±È‡íÔ‚©½!嬮m³ÃJÒµƒ…3ì8!¬øž›Ug¼b€õʰ/Ï(ùÊ‹ûÐKúAlóÆ‹A†Á‡Ñ#* +} ŠAÁèNq}„ÛJ¥mºF!øwÝŽÍ
÷Odçø/¦·ÿI(u;ºev£d? kÂeVNù`EÊ®j¾(9îʤÝÎNÉVÿ¡³žàÊyšI{­‰d™ÄAÄÕ]mã­˜òžÎ"¾Ak»’:o·@»}x´Yq:žªÃåÔœ_÷º,²bM~OùÖ¿qð­ÌúÖy”2;Ãû”¥|Šä²ÈÔ”Œf$íž»‹©#Å0¬·â´èP`GÚ§Ÿ¦ýy2¿^Ž ™^EpQ‘º´/…QA,*Rë 3È4wU1A£Q÷Mõ£¶é>Ï#,PˆLLa¡a6£®|Y°^ðá~‘àË‚ƒT³¸à¼tîšðÁŠ”­9šÖœ+ÓÍøQ¯K^ùðDò[ôrƒer/•o–”û°CéDc²˜s÷ù¯]$dÃZ›ü2wA“À¤PK‘¶¡Ôuƒ–ЉC›€AT9fÉ6ÈenµkBF3>]þ5m$Ãr×%r§EcÚ2_Cl5Äã‚Dµ}M$¿L˜óŽ}9ž$Äsæœ9æ{k lOÝ·yÐhqM´êŸI`¨%ç+EíÜÕé›L”O®@Û}JûÁBIË 2}¼š‘ô±©O©BB¥Â…z C;Ân+ÛˆºÈapuYÚæ4Á… ÈsÉ4S”ŒgêúOZh>ô.ÄtRh(ĤJn©_rÑ ¥hêæb"±Õ#µSÚŢȎ–»Ó_a•u D*®ìêq•Q™®S=¸_$³Bq™
;6…IЃ&0º0 JŠã¦¶RнïõG%¿endstream
endobj
108 0 obj
383
endobj
endobj
114 0 obj
1058
endobj
115 0 obj<</Type/Page/Parent 75 0 R/Contents 116 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 6 0 R>>>>>>endobj
116 0 obj<</Length 117 0 R/Filter/FlateDecode>>stream
xÚ+ä2T0BCc3JÎår
áÒw³P04TIS041T072PIÑp rt QÐUp
VÎO+)O,JUNM.-Ê,©TJ-È/*Ñ ÉâÒiÒ…êÊÌ ¹†pr‡Âµendstream
endobj
117 0 obj
103
endobj
118 0 obj<</Count 6/First 119 0 R/Last 133 0 R>>endobj
119 0 obj<</Parent 118 0 R/Title(Table of Contents)/Dest[112 0 R/XYZ null 756 null]/Next 120 0 R>>endobj
120 0 obj<</Parent 118 0 R/Count -3/First 121 0 R/Last 123 0 R/Title(1 Scope)/Dest[82 0 R/XYZ null 743 null]/Prev 119 0 R/Next 124 0 R>>endobj
121 0 obj<</Parent 120 0 R/Title(1.1 Identification)/Dest[82 0 R/XYZ null 693 null]/Next 122 0 R>>endobj
122 0 obj<</Parent 120 0 R/Title(1.2 System Overview)/Dest[82 0 R/XYZ null 613 null]/Prev 121 0 R/Next 123 0 R>>endobj
123 0 obj<</Parent 120 0 R/Title(1.3 Document Overview)/Dest[82 0 R/XYZ null 429 null]/Prev 122 0 R>>endobj
124 0 obj<</Parent 118 0 R/Count -2/First 125 0 R/Last 126 0 R/Title(2 References)/Dest[88 0 R/XYZ null 743 null]/Prev 120 0 R/Next 127 0 R>>endobj
125 0 obj<</Parent 124 0 R/Title(2.1 CUPS Documentation)/Dest[88 0 R/XYZ null 693 null]/Next 126 0 R>>endobj
126 0 obj<</Parent 124 0 R/Title(2.2 Other Documents)/Dest[88 0 R/XYZ null 495 null]/Prev 125 0 R>>endobj
127 0 obj<</Parent 118 0 R/Count -2/First 128 0 R/Last 129 0 R/Title(3 Risk Identification)/Dest[94 0 R/XYZ null 743 null]/Prev 124 0 R/Next 130 0 R>>endobj
128 0 obj<</Parent 127 0 R/Title(3.1 Local Access Risks)/Dest[94 0 R/XYZ null 693 null]/Next 129 0 R>>endobj
129 0 obj<</Parent 127 0 R/Title(3.2 Remote Access Risks)/Dest[94 0 R/XYZ null 634 null]/Prev 128 0 R>>endobj
130 0 obj<</Parent 118 0 R/Count -2/First 131 0 R/Last 132 0 R/Title(4 Risk Assessment)/Dest[100 0 R/XYZ null 743 null]/Prev 127 0 R/Next 133 0 R>>endobj
131 0 obj<</Parent 130 0 R/Title(4.1 Local Access Risks)/Dest[100 0 R/XYZ null 693 null]/Next 132 0 R>>endobj
132 0 obj<</Parent 130 0 R/Title(4.2 Remote Access Risks)/Dest[100 0 R/XYZ null 634 null]/Prev 131 0 R>>endobj
133 0 obj<</Parent 118 0 R/Count -2/First 134 0 R/Last 135 0 R/Title(A Glossary)/Dest[106 0 R/XYZ null 743 null]/Prev 130 0 R>>endobj
134 0 obj<</Parent 133 0 R/Title(A.1 Terms)/Dest[106 0 R/XYZ null 693 null]/Next 135 0 R>>endobj
135 0 obj<</Parent 133 0 R/Title(A.2 Acronyms)/Dest[106 0 R/XYZ null 389 null]/Prev 134 0 R>>endobj
136 0 obj<</Type/Catalog/Pages 75 0 R/Names 56 0 R/ViewerPreferences<</PageLayout/TwoColumnRight>>/Outlines 118 0 R/PageMode/UseOutlines/OpenAction[82 0 R/XYZ null null null]>>endobj
xref
0 137
0000000000 65535 f
0000000015 00000 n
0000000221 00000 n
0000000282 00000 n
0000000360 00000 n
0000000437 00000 n
0000000516 00000 n
0000000592 00000 n
0000000673 00000 n
0000000731 00000 n
0000000832 00000 n
0000000935 00000 n
0000001039 00000 n
0000001143 00000 n
0000001247 00000 n
0000001351 00000 n
0000001455 00000 n
0000001559 00000 n
0000001663 00000 n
0000001767 00000 n
0000001869 00000 n
0000001972 00000 n
0000002076 00000 n
0000002180 00000 n
0000002284 00000 n
0000002388 00000 n
0000002492 00000 n
0000002596 00000 n
0000002698 00000 n
0000002801 00000 n
0000002905 00000 n
0000003009 00000 n
0000003113 00000 n
0000003217 00000 n
0000003321 00000 n
0000003425 00000 n
0000003529 00000 n
0000003633 00000 n
0000003737 00000 n
0000003840 00000 n
0000003944 00000 n
0000004049 00000 n
0000004154 00000 n
0000004259 00000 n
0000004364 00000 n
0000004469 00000 n
0000004574 00000 n
0000004679 00000 n
0000004784 00000 n
0000004889 00000 n
0000004992 00000 n
0000005096 00000 n
0000005201 00000 n
0000005306 00000 n
0000005411 00000 n
0000005516 00000 n
0000005854 00000 n
0000005886 00000 n
0000005918 00000 n
0000006128 00000 n
0000006175 00000 n
0000006222 00000 n
0000006269 00000 n
0000006316 00000 n
0000006363 00000 n
0000006410 00000 n
0000006457 00000 n
0000006504 00000 n
0000006551 00000 n
0000006598 00000 n
0000006646 00000 n
0000006694 00000 n
0000006742 00000 n
0000006790 00000 n
0000006838 00000 n
0000006886 00000 n
0000007058 00000 n
0000007207 00000 n
0000013584 00000 n
0000013605 00000 n
0000013715 00000 n
0000013815 00000 n
0000013834 00000 n
0000013971 00000 n
0000014774 00000 n
0000014794 00000 n
0000014904 00000 n
0000015091 00000 n
0000015111 00000 n
0000015248 00000 n
0000015839 00000 n
0000015859 00000 n
0000015969 00000 n
0000016159 00000 n
0000016179 00000 n
0000016298 00000 n
0000016513 00000 n
0000016533 00000 n
0000016643 00000 n
109 0 obj<</Type/Page/Parent 72 0 R/Contents 110 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F5 5 0 R/F8 7 0 R/F9 8 0 R>>>>/Annots 53 0 R>>endobj
110 0 obj<</Length 111 0 R/Filter/FlateDecode>>stream
xÚÕ˜ÍnÔ0Çïû4þNŽ…R„„ì.°/,4ÈŒ»jìܶRkâßÄ3žÿ8ýµÁ¨ÔI‚¨@M»y¹ß\ÝÖ×hDXЂ !¹¾î¿<Û>ß)ÔÑ«î<¨ópy¾ÿ¾y½ß”E©)æ‚ÍeûÆ  •žÖ"su÷whgøï¿¢«[Ž06Í´ÚyÃh?![DyQÅ|gÊ®é~*š(%x%\»Ó«ÿáÙHPa"M¸¾¶ˆ“‚à j¡ÖùDØH‰XÐVÏÄ&Ú¡ °[ÐÛ/zWœŽ§æ0œºóãQç²kŠ{.¶vÅ>¶v0[QLô6¦$S W²1Ì@ÚÝ_Õ&Šaš¯DñøÒ¾œhïÿ¨þÏIý}<9 õ*’“É
¯+½(ÈŠ¤²Â뺀N3Yñd\šªˆÐ`ÔM×ünõvŸç…
d¬`1Ð?ÄLjˆÞQOœœ|.É(øî~‘àsIT“´à{<7áŠøÎ
”­:ª^u™‰c½.ýyäG3_G`”{7X&÷\Øu“¬Ü{ȃ3;ΫOv‰”Msõæç¥IZHrvGòµ”hB<mÒr9a|jn$&œ“l›ðäªÔÚ‘Á ¤÷Ã7Õ'Ò1M7]¢4ZÂÀù"«¨!š$\ëe ÙûeDLtôâhFO¥ ]È·VOy×5‡»yR0»E?|Ugö¬ëFëÚeÌoQ-t3`ÎìaÛÓåÇeîh¬½®M$y¦Káúƒ- ;X(‹¥t­ƒæ…|Ôæœù3vªùÝŸ†ûy\@0õht âx/{uh¾Íµ4jNxkÈO–#“µS2½&w¿¨™–&+J,]ŽÏäè+(Ç‘²Um7¨yT0ÝŠn³˜œP¹j f›¥ÐYŠßËÚÇK”#Õ¬ªÓùÜ
–Õ"Ò†Y¶½Š™¸†>À ¤u>¥8˜o5óÁ ƒ`Ý1QÒ"x+WÒ ì@Ú™Ã~“؈!Aó„iÖÏ?Àëa84s;ˆ>™œçv
§¶Y¹œÙAêàÄ8sÍ‹eNžl•4"ƒH µÚã ê!ìÀûO´Z¦µšHwp/õ×’,kâ”1õU<mÖIŒ³¥¼¹ë.—C?ɺÀëÿ^Ùþ˜ºï,JÌ  %…rÂj¡¤£C_Î ¤½êÛ¹$×Ö€–Æ·,]#²+µƒ¤¼”Ä4)/ÌTˆéßìÕôÝù~.²Œ­ï¤mczu[ÁncX—$Å•“·›íõí½@öëׇ¿‡^¡QD·êg×@Õx!‰]Ý ¢ùqóã×ï<endstream
endobj
111 0 obj
1027
endobj
112 0 obj<</Type/Page/Parent 72 0 R/Contents 113 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 7 0 R>>>>>>endobj
113 0 obj<</Length 114 0 R/Filter/FlateDecode>>stream
xÚ+ä2T0BCc3JÎår
áÒw³P04TIS041T072PIÑp rt QÐUp
VÎO+)O,JUNM.-Ê,©TJ-È/*Ñ ÉâÒiÒ…êÊÌ ¹†pr‡Âµendstream
endobj
114 0 obj
103
endobj
115 0 obj<</Count 6/First 116 0 R/Last 129 0 R>>endobj
116 0 obj<</Parent 115 0 R/Title(Table of Contents)/Dest[109 0 R/XYZ null 756 null]/Next 117 0 R>>endobj
117 0 obj<</Parent 115 0 R/Count -3/First 118 0 R/Last 120 0 R/Title(1 Scope)/Dest[79 0 R/XYZ null 743 null]/Prev 116 0 R/Next 121 0 R>>endobj
118 0 obj<</Parent 117 0 R/Title(1.1 Identification)/Dest[79 0 R/XYZ null 693 null]/Next 119 0 R>>endobj
119 0 obj<</Parent 117 0 R/Title(1.2 System Overview)/Dest[79 0 R/XYZ null 613 null]/Prev 118 0 R/Next 120 0 R>>endobj
120 0 obj<</Parent 117 0 R/Title(1.3 Document Overview)/Dest[79 0 R/XYZ null 389 null]/Prev 119 0 R>>endobj
121 0 obj<</Parent 115 0 R/Count -2/First 122 0 R/Last 123 0 R/Title(2 References)/Dest[85 0 R/XYZ null 743 null]/Prev 117 0 R/Next 124 0 R>>endobj
122 0 obj<</Parent 121 0 R/Title(2.1 CUPS Documentation)/Dest[85 0 R/XYZ null 693 null]/Next 123 0 R>>endobj
123 0 obj<</Parent 121 0 R/Title(2.2 Other Documents)/Dest[85 0 R/XYZ null 495 null]/Prev 122 0 R>>endobj
124 0 obj<</Parent 115 0 R/Count -1/First 125 0 R/Last 125 0 R/Title(3 Local Access Risks)/Dest[91 0 R/XYZ null 743 null]/Prev 121 0 R/Next 126 0 R>>endobj
125 0 obj<</Parent 124 0 R/Title(3.1 Security Breaches)/Dest[91 0 R/XYZ null 646 null]>>endobj
126 0 obj<</Parent 115 0 R/Count -2/First 127 0 R/Last 128 0 R/Title(4 Remote Access Risks)/Dest[97 0 R/XYZ null 743 null]/Prev 124 0 R/Next 129 0 R>>endobj
127 0 obj<</Parent 126 0 R/Title(4.1 Denial of Service Attacks)/Dest[97 0 R/XYZ null 659 null]/Next 128 0 R>>endobj
128 0 obj<</Parent 126 0 R/Title(4.2 Security Breaches)/Dest[97 0 R/XYZ null 210 null]/Prev 127 0 R>>endobj
129 0 obj<</Parent 115 0 R/Count -2/First 130 0 R/Last 131 0 R/Title(A Glossary)/Dest[103 0 R/XYZ null 743 null]/Prev 126 0 R>>endobj
130 0 obj<</Parent 129 0 R/Title(A.1 Terms)/Dest[103 0 R/XYZ null 693 null]/Next 131 0 R>>endobj
131 0 obj<</Parent 129 0 R/Title(A.2 Acronyms)/Dest[103 0 R/XYZ null 389 null]/Prev 130 0 R>>endobj
132 0 obj<</Type/Catalog/Pages 72 0 R/Names 54 0 R/ViewerPreferences<</PageLayout/TwoColumnRight>>/Outlines 115 0 R/PageMode/UseOutlines/OpenAction[79 0 R/XYZ null null null]>>endobj
xref
0 133
0000000000 65535 f
0000000015 00000 n
0000000221 00000 n
0000000282 00000 n
0000000356 00000 n
0000000434 00000 n
0000000511 00000 n
0000000590 00000 n
0000000666 00000 n
0000000747 00000 n
0000000805 00000 n
0000000907 00000 n
0000001010 00000 n
0000001114 00000 n
0000001218 00000 n
0000001322 00000 n
0000001426 00000 n
0000001530 00000 n
0000001634 00000 n
0000001738 00000 n
0000001842 00000 n
0000001944 00000 n
0000002047 00000 n
0000002151 00000 n
0000002255 00000 n
0000002359 00000 n
0000002463 00000 n
0000002567 00000 n
0000002671 00000 n
0000002773 00000 n
0000002876 00000 n
0000002980 00000 n
0000003084 00000 n
0000003188 00000 n
0000003292 00000 n
0000003396 00000 n
0000003498 00000 n
0000003601 00000 n
0000003705 00000 n
0000003809 00000 n
0000003913 00000 n
0000004017 00000 n
0000004121 00000 n
0000004225 00000 n
0000004329 00000 n
0000004433 00000 n
0000004537 00000 n
0000004641 00000 n
0000004744 00000 n
0000004848 00000 n
0000004953 00000 n
0000005058 00000 n
0000005163 00000 n
0000005268 00000 n
0000005586 00000 n
0000005618 00000 n
0000005650 00000 n
0000005849 00000 n
0000005896 00000 n
0000005943 00000 n
0000005990 00000 n
0000006037 00000 n
0000006084 00000 n
0000006131 00000 n
0000006178 00000 n
0000006225 00000 n
0000006272 00000 n
0000006319 00000 n
0000006366 00000 n
0000006413 00000 n
0000006461 00000 n
0000006509 00000 n
0000006557 00000 n
0000006728 00000 n
0000006877 00000 n
0000013254 00000 n
0000013275 00000 n
0000013385 00000 n
0000013485 00000 n
0000013504 00000 n
0000013641 00000 n
0000014534 00000 n
0000014554 00000 n
0000014664 00000 n
0000014851 00000 n
0000014871 00000 n
0000015008 00000 n
0000015599 00000 n
0000015619 00000 n
0000016862 00000 n
0000015729 00000 n
0000015919 00000 n
0000017194 00000 n
0000015939 00000 n
0000016067 00000 n
+94 -8
Ver Arquivo
@@ -30,6 +30,10 @@ supported with reduced functionality.
Description (&quot;PPD&quot;)-based printing options to support real
world applications under UNIX.
<P>CUPS also includes a customized version of GNU GhostScript
(currently based off GNU GhostScript 4.03) and an image file RIP that
can be used to support non-PostScript printers.
<H2>Document Overview</H2>
<P>This software security report is organized into the following sections:</P>
@@ -37,8 +41,8 @@ world applications under UNIX.
<UL>
<LI>1 - Scope</LI>
<LI>2 - References</LI>
<LI>3 - Risk Identification</LI>
<LI>4 - Risk Assessment</LI>
<LI>3 - Local Access Risks</LI>
<LI>4 - Remote Access Risks</LI>
<LI>A - Glossary</LI>
</UL>
@@ -73,17 +77,99 @@ The following non-CUPS documents are referenced by this document:
<LI>RFC 1179, Line Printer Daemon Protocol
</UL>
<H1>Risk Identification</H1>
<H1>Local Access Risks</H1>
<H2>Local Access Risks</H2>
<P>Local access risks are those that can be exploited only with a local user
account. This section does not address issues related to dissemination of the
root password or other security issues associated with the UNIX operating
system.
<H2>Remote Access Risks</H2>
<H2>Security Breaches</H2>
<H1>Risk Assessment</H2>
<P>Since the default installation creates a world-readable request directory,
it is possible for local users to read the contents of print files before they
are printed.
<H2>Local Access Risks</H2>
<P>This problem can be alleviated by making the request directory readable only
by the user specified in the CUPS configuration file.
<H2>Remote Access Risks</H2>
<H1>Remote Access Risks</H1>
<P>Remote access risks are those that can be exploited without a local user
account and/or from a remote system. This section does not address issues
related to network or firewall security.
<H2>Denial of Service Attacks</H2>
<P>Like all internet services, the CUPS server is vulnerable to denial of
service attacks, including:
<OL>
<LI>Establishing multiple connections to the server until the server
will accept no more.
<P>This cannot be protected against by the current software. It
is possible that future versions of the CUPS software could be
configured to limit the number of connections allowed from a
single host, however that still would not prevent a determined
attack.
<LI>Repeatedly opening and closing connections to the server as fast
as possible.
<P>There is no easy way of protecting against this in the CUPS
software. If the attack is coming from outside the local
network it might be possible to filter such an attack, however
once the connection request has been received by the server it
must at least accept the connection to find out who is
connecting.
<LI>Flooding the network with broadcast packets on port 631.
<P>It might be possible to disable browsing if this condition
is detected by the CUPS software, however if there are large
numbers of printers available on the network such an algorithm
might think that an attack was occurring when instead a valid
update was being received.
<LI>Sending partial IPP requests; specifically, sending part of an
attribute value and then stopping transmission.
<P>The current code is structured to read and write the IPP
request data on-the-fly, so there is no easy way to protect
against this for large attribute values.
<LI>Sending large/long print jobs to printers, preventing other users
from printing.
<P>There are limited facilities for protecting against large print
jobs (the <CODE>MaxRequestSize</CODE> attribute), however this will
not protect printers from malicious users and print files that
generate hundreds or thousands of pages. In general, we recommend
restricting printer access to known hosts or networks, and adding
user-level access control as needed for expensive printers.
</OL>
<H2>Security Breaches</H2>
<P>The current CUPS server only supports Basic authentication with
usernames and passwords. This essentially places the clear text of the
username and password on the network. Since CUPS uses the UNIX username
and password account information, the authentication information could
be used to gain access to accounts (possibly priviledged accounts) on
the server.
<P>The default CUPS configuration disables remote administration. We do
not recommend that remote administration be enabled for all hosts,
however if you have a trusted network or subnet access can be
restricted accordingly.
<P>The next minor release of CUPS will support Digest authentication of
the entire message body using separate MD5-based username and password
files. This will protect password information and prevent unauthorized
access due to compromised account passwords.
<H1 TYPE=A VALUE=1>Glossary</H1>
+3
Ver Arquivo
@@ -54,6 +54,9 @@ with reduced functionality. </P>
<P>CUPS adds network printer browsing and PostScript Printer
Description (&quot;PPD&quot;)-based printing options to support real world
applications under UNIX. </P>
<P>CUPS also includes a customized version of GNU GhostScript
(currently based off GNU GhostScript 4.03) and an image file RIP that
can be used to support non-PostScript printers. </P>
<H2><A NAME=1_3>1.3 Document Overview</A></H2>
This software test plan is organized into the following sections:
<UL>
BIN
Ver Arquivo
Arquivo binário não exibido.
+4
Ver Arquivo
@@ -31,6 +31,10 @@ supported with reduced functionality.
Description (&quot;PPD&quot;)-based printing options to support real
world applications under UNIX.
<P>CUPS also includes a customized version of GNU GhostScript
(currently based off GNU GhostScript 4.03) and an image file RIP that
can be used to support non-PostScript printers.
<H2>Document Overview</H2>
This software test plan is organized into the following sections:
+482 -25
Ver Arquivo
@@ -15,40 +15,497 @@ Copyright 1997-1999, All Rights Reserved<BR>
<HR>
<H1 ALIGN=CENTER><A NAME=CONTENTS>Table of Contents</A></H1>
<BR>
<BR><B><A HREF=#1>1 Scope</A></B>
<BR><B><A HREF=#1>Preface</A></B>
<UL>
<LI><A HREF=#1_1>1.1 Identification</A></LI>
<LI><A HREF=#1_2>1.2 Document Overview</A></LI>
<LI><A HREF=#1_1>System Overview</A></LI>
<LI><A HREF=#1_2>Document Overview</A></LI>
</UL>
<B><A HREF=#2>2 Printing System Overview</A></B>
<BR>
<BR><B><A HREF=#3>3 Using the Printing System</A></B>
<B><A HREF=#2>1 - Printing System Overview</A></B>
<UL>
<LI><A HREF=#3_1>3.1 Choosing a Printer</A></LI>
<LI><A HREF=#3_2>3.2 Setting Printer Options</A></LI>
<LI><A HREF=#3_3>3.3 Submitting Files for Printing</A></LI>
<LI><A HREF=#3_4>3.4 Checking the Printer Status</A></LI>
<LI><A HREF=#2_1>The Printing Problem</A></LI>
<LI><A HREF=#2_2>The Technology</A></LI>
<LI><A HREF=#2_3>Jobs</A></LI>
<LI><A HREF=#2_4>Classes</A></LI>
<LI><A HREF=#2_5>Filters</A></LI>
<LI><A HREF=#2_6>Printer Drivers</A></LI>
<LI><A HREF=#2_7>Networking</A></LI>
</UL>
<B><A HREF=#3>2 - Using the Printing System</A></B>
<UL>
<LI><A HREF=#3_1>Submitting Files for Printing</A></LI>
<LI><A HREF=#3_2>Choosing a Printer</A></LI>
<LI><A HREF=#3_3>Setting Printer Options</A></LI>
<LI><A HREF=#3_4>Printing Multiple Copies</A></LI>
<LI><A HREF=#3_5>Checking the Printer Status from the Command-Line</A></LI>
<LI><A HREF=#3_6>Checking the Printer Status from the Web</A></LI>
<LI><A HREF=#3_7>Canceling a Print Job</A></LI>
</UL>
<B><A HREF=#4>3 - Standard Printer Options</A></B>
<UL>
<LI><A HREF=#4_1>General Options</A></LI>
<UL>
<LI><A HREF=#4_1_1>Selecting the Media Size, Type, and Source</A></LI>
<LI><A HREF=#4_1_2>Setting the Orientation</A></LI>
<LI><A HREF=#4_1_3>Printing On Both Sides of the Paper</A></LI>
<LI><A HREF=#4_1_4>Selecting a Range of Pages</A></LI>
<LI><A HREF=#4_1_5>Setting the Brightness</A></LI>
<LI><A HREF=#4_1_6>Setting the Gamma Correction</A></LI>
</UL>
<LI><A HREF=#4_2>Text Options</A></LI>
<UL>
<LI><A HREF=#4_2_1>Setting the Number of Characters Per Inch</A></LI>
<LI><A HREF=#4_2_2>Setting the Number of Lines Per Inch</A></LI>
<LI><A HREF=#4_2_3>Setting the Number of Columns</A></LI>
<LI><A HREF=#4_2_4>Setting the Page Margins</A></LI>
<LI><A HREF=#4_2_5>Pretty Printing</A></LI>
</UL>
<LI><A HREF=#4_3>Image Options</A></LI>
<UL>
<LI><A HREF=#4_3_1>Scaling the Image</A></LI>
<LI><A HREF=#4_3_2>Adjusting the Hue (Tint) of an Image</A></LI>
<LI><A HREF=#4_3_3>Adjusting the Saturation (Color) of an Image</A></LI>
</UL>
</UL>
<HR>
<H1><A NAME=1>1 Scope</A></H1>
<H2><A NAME=1_1>1.1 Identification</A></H2>
<H1 ALIGN=RIGHT><A NAME=1>Preface</A></H1>
This software users manual describes how to use the Common UNIX
Printing System (&quot;CUPS&quot;) Version 1.0.0.
<H2><A NAME=1_2>1.2 Document Overview</A></H2>
<H2><A NAME=1_1>System Overview</A></H2>
The Common UNIX Printing System provides a portable printing layer for
UNIX&reg; 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.
<P>CUPS uses the Internet Printing Protocol (IETF-IPP) as the basis for
managing print jobs and queues. The Line Printer Daemon (LPD, RFC1179),
Server Message Block (SMB), and AppSocket protocols are also supported
with reduced functionality. </P>
<P>CUPS adds network printer browsing and PostScript Printer
Description (&quot;PPD&quot;)-based printing options to support real world
applications under UNIX. </P>
<P>CUPS also includes a customized version of GNU GhostScript
(currently based off GNU GhostScript 4.03) and an image file RIP that
can be used to support non-PostScript printers. </P>
<H2><A NAME=1_2>Document Overview</A></H2>
<P>This software users manual is organized into the following sections:</P>
<UL>
<LI>1 - Scope</LI>
<LI>2 - References</LI>
<LI>3 - Printing System Overview</LI>
<LI>4 - Using the Printing System</LI>
<LI>A - Glossary</LI>
<LI>1 - Printing System Overview</LI>
<LI>2 - Using the Printing System</LI>
<LI>3 - Standard Printer Options</LI>
<LI>4 - Checking the Status Via the Web</LI>
</UL>
<H1><A NAME=2>2 Printing System Overview</A></H1>
<P>
<H1><A NAME=3>3 Using the Printing System</A></H1>
<H2><A NAME=3_1>3.1 Choosing a Printer</A></H2>
<H2><A NAME=3_2>3.2 Setting Printer Options</A></H2>
<H2><A NAME=3_3>3.3 Submitting Files for Printing</A></H2>
<H2><A NAME=3_4>3.4 Checking the Printer Status</A></H2>
<H1 ALIGN=RIGHT><A NAME=2>1 - Printing System Overview</A></H1>
<P>This chapter provides an overview of how the Common UNIX Printing
System works. </P>
<H2><A NAME=2_1>The Printing Problem</A></H2>
<P>For years <I>the printing problem</I> has plagued UNIX&reg;. Unlike
Microsoft&reg; Windows&reg; or MacOS, UNIX has no standard interface or system
in place for supporting printers. Among the solutions previously
available, the Berkeley and System V printing systems are the most
prevalent. </P>
<P>These printing systems support line printers (text only) or
PostScript printers (text and graphics), and with some coaxing they can
be made to support a full range of printers and file formats. However,
because each varient of the UNIX operating system uses a different
printing system than the next, developing printer drivers for a wide
range of printers is extremely difficult. That combined with the
limited volume of customers for each UNIX varient has forced most
printer vendors to give up supporting UNIX entirely. </P>
<P>The Common UNIX Printing System, or CUPS, is designed to eliminate <I>
the printing problem</I>. One common printing system can be used by all
UNIX varients to support the printing needs of users. Printer vendors
can use its modular filter interface to develop a single driver program
that supports a wide range of file formats with little or no effort.
Since CUPS provides both the System V and Berkeley printing commands,
users (and applications) can reap the benefits of this new technology
with no changes. </P>
<H2><A NAME=2_2>The Technology</A></H2>
<P>CUPS is based upon an emerging Internet standard called the Internet
Printing Protocol, or IPP. IPP has been embraced by dozens of printer
and printer server manufacturers, and will be supported by the next
Microsoft Windows operating system. </P>
<P>IPP defines a standard protocol for printing as well as managing
print jobs and printer options like media size, resolution, and so
forth. Like all IP-based protocols, IPP can be used locally or over the
Internet to printers hundreds or thousands of miles away. Unlike other
protocols, however, IPP also supports access control, authentication,
and encryption, making it a much more secure printing solution than
older ones. </P>
<P>IPP is layered on top of the Hyper-Text Transport Protocol, or HTTP,
which is the basis of web servers on the Internet. This allows the user
to view documentation and status information on a printer or server
using their web browser. </P>
<P>CUPS provides a complete IPP/1.0-based printing system that provides
Basic authentication and domain or IP-based access control. Digest
authentication and TLS encryption will be available in future versions
of CUPS. </P>
<H2><A NAME=2_3>Jobs</A></H2>
<P>Each file that is submitted for printing is called a <I>job</I>.
Jobs are identified by a unique number starting at 1 and are assigned
to a particular destination (usually a printer). Jobs can also have
options associated with them such as media size, number of copies, and
priority. </P>
<H2><A NAME=2_4>Classes</A></H2>
<P>CUPS supports collections of printers known as <I>classes</I>. Jobs
sent to a class are forwarded to the first available printer in the
class. </P>
<H2><A NAME=2_5>Filters</A></H2>
<P>Filters allow a user or application to print many types of files
without extra effort. Print jobs sent to a CUPS server are filtered
before sending them to a printer. Some filters convert job files to
different formats that the printer can understand. Others perform page
selection and ordering tasks. <I>Backend</I> filters perform the most
important task of all - they send the filtered print data to the
printer. </P>
<P>CUPS provides filters for printing many types of image files,
HP-GL/2 files, PDF files, and text files. CUPS also supplies PostScript
and image file Raster Image Processors, or RIPs, that convert
PostScript or image files into bitmaps that can be sent to a raster
printer. </P>
<P>CUPS provides backends for printing over parallel and serial ports,
and over the network via the JetDirect (AppSocket), Server Message
Block, and Line Printer Daemon protocols. </P>
<H2><A NAME=2_6>Printer Drivers</A></H2>
<P>Printer drivers in CUPS consist of one of more filters specific to a
printer. CUPS includes a sample printer driver for Hewlett-Packard
LaserJet and DeskJet printers. While this driver does not generate
optimal output for different printer models, it does demonstrate how
you can write your own printer drivers and incorporate them into CUPS. </P>
<H2><A NAME=2_7>Networking</A></H2>
<P>Printers and classes on the local system are automatically shared
with other systems on the network. This allows you to setup one system
to print to a printer and use this system as a printer server or spool
host for all of the others. If there is only one occurrence of a
printer on a network, then that printer can be accessed using its name
alone. If more than one printer exists with the same name, users must
select the printer by specifying which server to use (e.g.
&quot;printer@host1&quot; or &quot;printer@host2&quot;.) </P>
<P>CUPS also provides <I>implicit classes</I>, which are collections of
printers and/or classes with the same name. This allows you to setup
multiple servers pointing to the same physical network printer, for
example, so that you aren't relying on a single system for printing.
Because this also works with printer classes, you can setup multiple
servers and printers and never worry about a &quot;single point of failure&quot;
unless all of the printers and servers goes down! </P>
<H1 ALIGN=RIGHT><A NAME=3>2 - Using the Printing System</A></H1>
<P>This chapter shows you how to submit, query, and cancel print jobs
to different printers. </P>
<H2><A NAME=3_1>Submitting Files for Printing</A></H2>
<P>CUPS provides both the System V (<CODE>lp</CODE>) and Berkeley (<CODE>
lpr</CODE>) printing commands. To print a file to the default printer
on the system (or your only printer if you have only one) you just need
to type: </P>
<UL>
<PRE>
% lp filename ENTER
</PRE>
</UL>
<P>or: </P>
<UL>
<PRE>
% lpr filename ENTER
</PRE>
</UL>
<P>CUPS understands many different types of files directly, including
PostScript and image files. This allows you to print from inside your
applications or at the command-line, whichever is most convenient! </P>
<H2><A NAME=3_2>Choosing a Printer</A></H2>
<P>Many systems will have more than one printer available to the user.
These printers can be attached to the local system via a parallel or
serial port, or available over the network. </P>
<P>To see a list of available printers, use the <CODE>lpstat</CODE>
command: </P>
<UL>
<PRE>
% lpstat -p -d ENTER
</PRE>
</UL>
<P>The &quot;-p&quot; option specifies that you want to see a list of printers,
and the &quot;-d&quot; option reports the current system default printer or
class. </P>
<P>To print to a specific printer, use the &quot;-d&quot; option to the <CODE>lp</CODE>
command: </P>
<UL>
<PRE>
% lp -d printer filename ENTER
</PRE>
</UL>
<P>or the &quot;-P&quot; option to the <CODE>lpr</CODE> command: </P>
<UL>
<PRE>
% lpr -P printer filename ENTER
</PRE>
</UL>
<H2><A NAME=3_3>Setting Printer Options</A></H2>
<P>For many types of files, the default printer options may be
sufficient for your needs. However, there may be times when you need to
change the options for a particular file you are printing. </P>
<P>The <CODE>lp</CODE> command allows you to pass printer options using
the &quot;-o&quot; option: </P>
<UL>
<PRE>
% lp -o landscape -o scaling=75 -o media=A4 filename.jpg
</PRE>
</UL>
<P>The <CODE>lpr</CODE> command has no command-line option for printer
options. </P>
<P>The available printer options vary depending on the printer. The
standard options are described in <A HREF=#4>Chapter 3</A>. </P>
<H2><A NAME=3_4>Printing Multiple Copies</A></H2>
<P>Both the <CODE>lp</CODE> and <CODE>lpr</CODE> commands have options
for printing more than one copy of a file: </P>
<UL>
<PRE>
% lp -n num-copies filename ENTER
% lpr -#num-copies filename ENTER
</PRE>
</UL>
<P>Copies are normally <I>not</I> collated for you. To get collated
copies use the <CODE>lp</CODE> command with the &quot;-o Collate=True&quot;
option: </P>
<UL>
<PRE>
% lp -n num-copies -o Collate=True filename ENTER
</PRE>
</UL>
<H2><A NAME=3_5>Checking the Printer Status from the Command-Line</A></H2>
<P>The <CODE>lpstat</CODE> command can be used to check for jobs that
you have submitted for printing: </P>
<UL>
<PRE>
% lpstat ENTER
Printer-1 johndoe 4427776
Printer-2 johndoe 15786
Printer-3 johndoe 372842
</PRE>
</UL>
<P>The jobs are listed in the order they will be printed. To see which
files and printers are active, use the &quot;-p&quot; option: </P>
<UL>
<PRE>
% lpstat -p ENTER
printer DeskJet now printing DeskJet-1.
</PRE>
</UL>
<P>Or to show the jobs and the printers, use the &quot;-o&quot; and &quot;-p&quot; options: </P>
<UL>
<PRE>
% lpstat -o -p ENTER
Printer-1 johndoe 4427776
Printer-2 johndoe 15786
Printer-3 johndoe 372842
printer DeskJet now printing DeskJet-1.
</PRE>
</UL>
<H2><A NAME=3_6>Checking the Printer Status from the Web</A></H2>
<P>Since CUPS uses the Internet Printing Protocol, it is also a
full-featured web server. To use your web browser to monitor the
printers on your system, open the URL &quot;<A HREF=http://localhost:631>
http://localhost:631</A>&quot;. From there you can view the status of
classes, jobs, and printers with the click of a button! </P>
<H2><A NAME=3_7>Canceling a Print Job</A></H2>
<P>The <CODE>cancel</CODE> command cancels a print job: </P>
<UL>
<PRE>
% cancel job-id ENTER
</PRE>
</UL>
<P>The <I>job-id</I> is a number that was reported to you by the <CODE>
lp</CODE> or <CODE>lpstat</CODE> commands. </P>
<H1 ALIGN=RIGHT><A NAME=4>3 - Standard Printer Options</A></H1>
<P>This chapter describes the standard printer options that are
available when printing with the <CODE>lp</CODE> command. </P>
<H2><A NAME=4_1>General Options</A></H2>
<P>The following options apply when printing all types of files. </P>
<H3><A NAME=4_1_1>Selecting the Media Size, Type, and Source</A></H3>
<P>The &quot;-o media=xyz&quot; option sets the media size, type, and/or source: </P>
<UL>
<PRE>
% lp -o media=Letter filename ENTER
% lp -o media=Letter,MultiPurpose filename ENTER
% lp -o media=Letter,Transparency filename ENTER
% lp -o media=Letter,MultiPurpose,Transparency filename ENTER
</PRE>
</UL>
<P>The available media sizes, types, and sources depend on the printer,
but most support the following options (case is significant): </P>
<UL>
<LI><CODE>Letter</CODE> - US Letter (8.5x11 inches, or 216x279mm) </LI>
<LI><CODE>Legal</CODE> - US Legal (8.5x14 inches, or 216x356mm) </LI>
<LI><CODE>A4</CODE> - ISO A4 (8.27x11.69 inches, or 210x297mm) </LI>
<LI><CODE>COM10</CODE> - US #10 Envelope (9.5x4.125 inches, or
241x105mm) </LI>
<LI><CODE>DL</CODE> - ISO DL Envelope (8.66x4.33 inches, or 220x110mm) </LI>
<LI><CODE>Transparency</CODE> - Transparency media type or source </LI>
<LI><CODE>Upper</CODE> - Upper paper tray </LI>
<LI><CODE>Lower</CODE> - Lower paper tray </LI>
<LI><CODE>MultiPurpose</CODE> - Multi-purpose paper tray </LI>
<LI><CODE>LargeCapacity</CODE> - Large capacity paper tray </LI>
</UL>
<P>The actual options supported are defined in the printer's PPD file
in the <CODE>PageSize</CODE>, <CODE>InputSlot</CODE>, and <CODE>
MediaType</CODE> options. </P>
<H3><A NAME=4_1_2>Setting the Orientation</A></H3>
<P>The &quot;-o landscape&quot; option will rotate the page 90 degrees to print
in landscape orientation: </P>
<UL>
<PRE>
% lp -o landscape filename ENTER
</PRE>
</UL>
<H3><A NAME=4_1_3>Printing On Both Sides of the Paper</A></H3>
<P>The &quot;-o sides=two-sided-short&quot; and &quot;-o sides=two-sided-long&quot; options
will enable duplexing on the printer (if the printer supports it.) The
&quot;two-sided-short&quot; option is suitable for landscape pages, while the
&quot;two-sided-long&quot; option is suitable for portrait pages: </P>
<UL>
<PRE>
% lp -o sides=two-sided-short filename ENTER
% lp -o sides=two-sided-long filename ENTER
</PRE>
</UL>
<H3><A NAME=4_1_4>Selecting a Range of Pages</A></H3>
<P>The &quot;-o page-ranges=pages&quot; option selects a range of pages for
printing: </P>
<UL>
<PRE>
% lp -o page-ranges=1 filename ENTER
% lp -o page-ranges=1-4 filename ENTER
% lp -o page-ranges=1-4,7,9-12 filename ENTER
</PRE>
</UL>
<P>As shown above, the <I>pages</I> value can be a single page, a range
of pages, or a collection of page numbers and ranges separated by
commas. The pages will always be printed in ascending order, regardless
of the order of the pages in the &quot;page-range&quot; option. </P>
<P>To select the even or odd pages, use the &quot;-o page-set=set&quot; option: </P>
<UL>
<PRE>
% lp -o page-set=odd filename ENTER
% lp -o page-set=even filename ENTER
</PRE>
</UL>
<H3><A NAME=4_1_5>Setting the Brightness</A></H3>
<P>You can control the overall brightness of the printed output using
the &quot;-o brightness=percent&quot; option: </P>
<UL>
<PRE>
% lp -o brightness=120 filename ENTER
</PRE>
</UL>
<P>Values greater than 100 will lighten the print, while values less
than 100 will darken it. </P>
<H3><A NAME=4_1_6>Setting the Gamma Correction</A></H3>
<P>You can control the overall gamma correction of the printed output
using the &quot;-o gamma=value&quot; option: </P>
<UL>
<PRE>
% lp -o gamma=1700 filename ENTER
</PRE>
</UL>
<P>Values greater than 1000 will lighten the print, while values less
than 1000 will darken it. </P>
<H2><A NAME=4_2>Text Options</A></H2>
<P>The following options apply when printing text files. </P>
<H3><A NAME=4_2_1>Setting the Number of Characters Per Inch</A></H3>
<P>The &quot;-o cpi=value&quot; option sets the number of characters per inch: </P>
<UL>
<PRE>
% lp -o cpi=12 filename ENTER
</PRE>
</UL>
<H3><A NAME=4_2_2>Setting the Number of Lines Per Inch</A></H3>
<P>The &quot;-o lpi=value&quot; option sets the number of lines per inch: </P>
<UL>
<PRE>
% lp -o lpi=8 filename ENTER
</PRE>
</UL>
<H3><A NAME=4_2_3>Setting the Number of Columns</A></H3>
<P>The &quot;-o columns=value&quot; option sets the number of text columns: </P>
<UL>
<PRE>
% lp -o columns=2 filename ENTER
</PRE>
</UL>
<H3><A NAME=4_2_4>Setting the Page Margins</A></H3>
<P>Normally the page margins are set to the hard limits of the printer.
To adjust the page margins use the &quot;-o page-left=value&quot;, &quot;-o
page-right=value&quot;, &quot;-o page-top=value&quot;, and &quot;-o page-bottom=value&quot;
options: </P>
<UL>
<PRE>
% lp -o page-left=value filename ENTER
% lp -o page-right=value filename ENTER
% lp -o page-top=value filename ENTER
% lp -o page-bottom=value filename ENTER
</PRE>
</UL>
<P>The <I>value</I> argument is the margin in points; each point is
1/72 inch or 0.35mm. </P>
<H3><A NAME=4_2_5>Pretty Printing</A></H3>
<P>The &quot;-o prettyprint&quot; option puts a header at the top of each page
with the page number, job title (usually the filename), and the date.
Also, C and C++ keywords are highlighted, and comment lines are
italicized: </P>
<UL>
<PRE>
% lp -o prettyprint filename ENTER
</PRE>
</UL>
<H2><A NAME=4_3>Image Options</A></H2>
<P>The following options apply when printing image files. </P>
<H3><A NAME=4_3_1>Scaling the Image</A></H3>
<P>The &quot;-o scaling=percent&quot; and &quot;-o ppi=value&quot; options change the size
of a printed image: </P>
<UL>
<PRE>
% lp -o scaling=percent filename ENTER
% lp -o ppi=value filename ENTER
</PRE>
</UL>
<P>The scaling <I>percent</I> is a number from 1 to 800 specifying the
size in relation to the page (<I>not</I> the image.) A scaling of 100
percent will fill the page as completely as the image aspect ratio
allows. A scaling of 200 percent will print on up to 4 pages. </P>
<P>The ppi <I>value</I> is a number from 1 to 1200 specifying the
resolution of the image in pixels per inch. An image that is 3000x2400
pixels will print 10x8 inches at 300 pixels per inch, for example. If
the specified resolution makes the image larger than the page, multiple
pages will be printed to satisfy the request. </P>
<H3><A NAME=4_3_2>Adjusting the Hue (Tint) of an Image</A></H3>
<P>The &quot;-o hue=value&quot; option will adjust the hue of the printed image,
much like the tint control on your television: </P>
<UL>
<PRE>
% lp -o hue=value filename ENTER
</PRE>
</UL>
<P>The <I>value</I> argument is a number from -360 to 360 and
represents the color hue rotation. The following table summarizes the
change you'll see with different colors:
<CENTER>
<TABLE BORDER=1 WIDTH=50%>
<TR><TH>Original</TH><TH>hue=-45</TH><TH>hue=45</TH></TR>
<TR><TD>Red</TD><TD>Purple</TD><TD>Yellow-orange</TD></TR>
<TR><TD>Green</TD><TD>Yellow-green</TD><TD>Blue-green</TD></TR>
<TR><TD>Yellow</TD><TD>Orange</TD><TD>Green-yellow</TD></TR>
<TR><TD>Blue</TD><TD>Sky-blue</TD><TD>Purple</TD></TR>
<TR><TD>Magenta</TD><TD>Indigo</TD><TD>Crimson</TD></TR>
<TR><TD>Cyan</TD><TD>Blue-green</TD><TD>Light-navy-blue</TD></TR>
</TABLE>
</CENTER>
</P>
<H3><A NAME=4_3_3>Adjusting the Saturation (Color) of an Image</A></H3>
<P>The &quot;-o saturation=percent&quot; option adjusts the saturation of the
colors in an image, much like the color knob on your television: </P>
<UL>
<PRE>
% lp -o saturation=percent filename ENTER
</PRE>
</UL>
<P>The <I>percent</I> argument specifies the color saturation from 0 to
200. A color saturation of 0 produces a black-and-white print, while a
value of 200 will make the colors extremely intense. </P>
</BODY>
</HTML>
BIN
Ver Arquivo
Arquivo binário não exibido.
+531 -14
Ver Arquivo
@@ -8,38 +8,555 @@
</HEAD>
<BODY>
<H1>Scope</H1>
<H2>Identification</H2>
<H1 ALIGN=RIGHT>Preface</H1>
This software users manual describes how to use the Common UNIX Printing
System ("CUPS") Version 1.0.0.
<H2>System Overview</H2>
The Common UNIX Printing System provides a portable printing layer for
UNIX&reg; 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.
<P>CUPS uses the Internet Printing Protocol (IETF-IPP) as the basis
for managing print jobs and queues. The Line Printer Daemon (LPD,
RFC1179), Server Message Block (SMB), and AppSocket protocols are also
supported with reduced functionality.
<P>CUPS adds network printer browsing and PostScript Printer
Description (&quot;PPD&quot;)-based printing options to support real
world applications under UNIX.
<P>CUPS also includes a customized version of GNU GhostScript
(currently based off GNU GhostScript 4.03) and an image file RIP that
can be used to support non-PostScript printers.
<H2>Document Overview</H2>
<P>This software users manual is organized into the following sections:</P>
<UL>
<LI>1 - Scope</LI>
<LI>2 - References</LI>
<LI>3 - Printing System Overview</LI>
<LI>4 - Using the Printing System</LI>
<LI>A - Glossary</LI>
<LI>1 - Printing System Overview</LI>
<LI>2 - Using the Printing System</LI>
<LI>3 - Standard Printer Options</LI>
<LI>4 - Checking the Status Via the Web</LI>
</UL>
<H1>Printing System Overview</H1>
<H1 ALIGN=RIGHT>1 - Printing System Overview</H1>
<P></P>
<P>This chapter provides an overview of how the Common UNIX Printing System
works.
<H1>Using the Printing System</H1>
<H2>The Printing Problem</H2>
<H2>Choosing a Printer</H2>
<P>For years <I>the printing problem</I> has plagued UNIX&reg;. Unlike
Microsoft&reg; Windows&reg; or MacOS, UNIX has no standard interface or
system in place for supporting printers. Among the solutions previously
available, the Berkeley and System V printing systems are the most
prevalent.
<H2>Setting Printer Options</H2>
<P>These printing systems support line printers (text only) or
PostScript printers (text and graphics), and with some coaxing they can
be made to support a full range of printers and file formats. However,
because each varient of the UNIX operating system uses a different
printing system than the next, developing printer drivers for a wide
range of printers is extremely difficult. That combined with the
limited volume of customers for each UNIX varient has forced most
printer vendors to give up supporting UNIX entirely.
<P>The Common UNIX Printing System, or CUPS, is designed to eliminate
<I>the printing problem</I>. One common printing system can be used by
all UNIX varients to support the printing needs of users. Printer
vendors can use its modular filter interface to develop a single driver
program that supports a wide range of file formats with little or no
effort. Since CUPS provides both the System V and Berkeley printing
commands, users (and applications) can reap the benefits of this new
technology with no changes.
<H2>The Technology</H2>
<P>CUPS is based upon an emerging Internet standard called the Internet
Printing Protocol, or IPP. IPP has been embraced by dozens of printer
and printer server manufacturers, and will be supported by the next
Microsoft Windows operating system.
<P>IPP defines a standard protocol for printing as well as managing print
jobs and printer options like media size, resolution, and so forth. Like all
IP-based protocols, IPP can be used locally or over the Internet to printers
hundreds or thousands of miles away. Unlike other protocols, however, IPP
also supports access control, authentication, and encryption, making it a
much more secure printing solution than older ones.
<P>IPP is layered on top of the Hyper-Text Transport Protocol, or HTTP,
which is the basis of web servers on the Internet. This allows the user to
view documentation and status information on a printer or server using their
web browser.
<P>CUPS provides a complete IPP/1.0-based printing system that provides Basic
authentication and domain or IP-based access control. Digest authentication
and TLS encryption will be available in future versions of CUPS.
<H2>Jobs</H2>
<P>Each file that is submitted for printing is called a <I>job</I>.
Jobs are identified by a unique number starting at 1 and are assigned
to a particular destination (usually a printer). Jobs can also have
options associated with them such as media size, number of copies, and
priority.
<H2>Classes</H2>
<P>CUPS supports collections of printers known as <I>classes</I>. Jobs sent
to a class are forwarded to the first available printer in the class.
<H2>Filters</H2>
<P>Filters allow a user or application to print many types of files
without extra effort. Print jobs sent to a CUPS server are filtered
before sending them to a printer. Some filters convert job files to
different formats that the printer can understand. Others perform page
selection and ordering tasks. <I>Backend</I> filters perform the most
important task of all - they send the filtered print data to the
printer.
<P>CUPS provides filters for printing many types of image files,
HP-GL/2 files, PDF files, and text files. CUPS also supplies
PostScript and image file Raster Image Processors, or RIPs, that
convert PostScript or image files into bitmaps that can be sent to a
raster printer.
<P>CUPS provides backends for printing over parallel and serial ports,
and over the network via the JetDirect (AppSocket), Server Message
Block, and Line Printer Daemon protocols.
<H2>Printer Drivers</H2>
<P>Printer drivers in CUPS consist of one of more filters specific to a
printer. CUPS includes a sample printer driver for Hewlett-Packard
LaserJet and DeskJet printers. While this driver does not generate
optimal output for different printer models, it does demonstrate how
you can write your own printer drivers and incorporate them into CUPS.
<H2>Networking</H2>
<P>Printers and classes on the local system are automatically shared with
other systems on the network. This allows you to setup one system to print
to a printer and use this system as a printer server or spool host for all
of the others. If there is only one occurrence of a printer on a network,
then that printer can be accessed using its name alone. If more than one
printer exists with the same name, users must select the printer by specifying
which server to use (e.g. "printer@host1" or "printer@host2".)
<P>CUPS also provides <I>implicit classes</I>, which are collections of
printers and/or classes with the same name. This allows you to setup multiple
servers pointing to the same physical network printer, for example, so that
you aren't relying on a single system for printing. Because this also works
with printer classes, you can setup multiple servers and printers and never
worry about a "single point of failure" unless all of the printers and servers
goes down!
<H1 ALIGN=RIGHT>2 - Using the Printing System</H1>
<P>This chapter shows you how to submit, query, and cancel print jobs to
different printers.
<H2>Submitting Files for Printing</H2>
<H2>Checking the Printer Status</H2>
<P>CUPS provides both the System V (<CODE>lp</CODE>) and Berkeley
(<CODE>lpr</CODE>) printing commands. To print a file to the default printer
on the system (or your only printer if you have only one) you just need to
type:
<UL><PRE>
% lp filename ENTER
</PRE></UL>
<P>or:
<UL><PRE>
% lpr filename ENTER
</PRE></UL>
<P>CUPS understands many different types of files directly, including PostScript
and image files. This allows you to print from inside your applications or at
the command-line, whichever is most convenient!
<H2>Choosing a Printer</H2>
<P>Many systems will have more than one printer available to the user. These
printers can be attached to the local system via a parallel or serial port,
or available over the network.
<P>To see a list of available printers, use the <CODE>lpstat</CODE> command:
<UL><PRE>
% lpstat -p -d ENTER
</PRE></UL>
<P>The "-p" option specifies that you want to see a list of printers, and the
"-d" option reports the current system default printer or class.
<P>To print to a specific printer, use the "-d" option to the <CODE>lp</CODE>
command:
<UL><PRE>
% lp -d printer filename ENTER
</PRE></UL>
<P>or the "-P" option to the <CODE>lpr</CODE> command:
<UL><PRE>
% lpr -P printer filename ENTER
</PRE></UL>
<H2>Setting Printer Options</H2>
<P>For many types of files, the default printer options may be sufficient for
your needs. However, there may be times when you need to change the options
for a particular file you are printing.
<P>The <CODE>lp</CODE> command allows you to pass printer options using the
"-o" option:
<UL><PRE>
% lp -o landscape -o scaling=75 -o media=A4 filename.jpg
</PRE></UL>
<P>The <CODE>lpr</CODE> command has no command-line option for printer options.
<P>The available printer options vary depending on the printer. The standard
options are described in <A HREF="#4">Chapter 3</A>.
<H2>Printing Multiple Copies</H2>
<P>Both the <CODE>lp</CODE> and <CODE>lpr</CODE> commands have options for
printing more than one copy of a file:
<UL><PRE>
% lp -n num-copies filename ENTER
% lpr -#num-copies filename ENTER
</PRE></UL>
<P>Copies are normally <I>not</I> collated for you. To get collated copies
use the <CODE>lp</CODE> command with the "-o Collate=True" option:
<UL><PRE>
% lp -n num-copies -o Collate=True filename ENTER
</PRE></UL>
<H2>Checking the Printer Status from the Command-Line</H2>
<P>The <CODE>lpstat</CODE> command can be used to check for jobs that you
have submitted for printing:
<UL><PRE>
% lpstat ENTER
Printer-1 johndoe 4427776
Printer-2 johndoe 15786
Printer-3 johndoe 372842
</PRE></UL>
<P>The jobs are listed in the order they will be printed. To see which files
and printers are active, use the "-p" option:
<UL><PRE>
% lpstat -p ENTER
printer DeskJet now printing DeskJet-1.
</PRE></UL>
<P>Or to show the jobs and the printers, use the "-o" and "-p" options:
<UL><PRE>
% lpstat -o -p ENTER
Printer-1 johndoe 4427776
Printer-2 johndoe 15786
Printer-3 johndoe 372842
printer DeskJet now printing DeskJet-1.
</PRE></UL>
<H2>Checking the Printer Status from the Web</H2>
<P>Since CUPS uses the Internet Printing Protocol, it is also a
full-featured web server. To use your web browser to monitor the
printers on your system, open the URL
"<A HREF="http://localhost:631">http://localhost:631</A>". From there
you can view the status of classes, jobs, and printers with the click
of a button!
<H2>Canceling a Print Job</H2>
<P>The <CODE>cancel</CODE> command cancels a print job:
<UL><PRE>
% cancel job-id ENTER
</PRE></UL>
<P>The <I>job-id</I> is a number that was reported to you by the
<CODE>lp</CODE> or <CODE>lpstat</CODE> commands.
<H1 ALIGN=RIGHT>3 - Standard Printer Options</H1>
<P>This chapter describes the standard printer options that are available
when printing with the <CODE>lp</CODE> command.
<H2>General Options</H2>
<P>The following options apply when printing all types of files.
<H3>Selecting the Media Size, Type, and Source</H3>
<P>The "-o media=xyz" option sets the media size, type, and/or source:
<UL><PRE>
% lp -o media=Letter filename ENTER
% lp -o media=Letter,MultiPurpose filename ENTER
% lp -o media=Letter,Transparency filename ENTER
% lp -o media=Letter,MultiPurpose,Transparency filename ENTER
</PRE></UL>
<P>The available media sizes, types, and sources depend on the printer, but
most support the following options (case is significant):
<UL>
<LI><CODE>Letter</CODE> - US Letter (8.5x11 inches, or 216x279mm)
<LI><CODE>Legal</CODE> - US Legal (8.5x14 inches, or 216x356mm)
<LI><CODE>A4</CODE> - ISO A4 (8.27x11.69 inches, or 210x297mm)
<LI><CODE>COM10</CODE> - US #10 Envelope (9.5x4.125 inches, or
241x105mm)
<LI><CODE>DL</CODE> - ISO DL Envelope (8.66x4.33 inches, or 220x110mm)
<LI><CODE>Transparency</CODE> - Transparency media type or source
<LI><CODE>Upper</CODE> - Upper paper tray
<LI><CODE>Lower</CODE> - Lower paper tray
<LI><CODE>MultiPurpose</CODE> - Multi-purpose paper tray
<LI><CODE>LargeCapacity</CODE> - Large capacity paper tray
</UL>
<P>The actual options supported are defined in the printer's PPD file in the
<CODE>PageSize</CODE>, <CODE>InputSlot</CODE>, and <CODE>MediaType</CODE>
options.
<H3>Setting the Orientation</H3>
<P>The "-o landscape" option will rotate the page 90 degrees to print in
landscape orientation:
<UL><PRE>
% lp -o landscape filename ENTER
</PRE></UL>
<H3>Printing On Both Sides of the Paper</H3>
<P>The "-o sides=two-sided-short" and "-o sides=two-sided-long" options will
enable duplexing on the printer (if the printer supports it.) The "two-sided-short"
option is suitable for landscape pages, while the "two-sided-long" option is
suitable for portrait pages:
<UL><PRE>
% lp -o sides=two-sided-short filename ENTER
% lp -o sides=two-sided-long filename ENTER
</PRE></UL>
<H3>Selecting a Range of Pages</H3>
<P>The "-o page-ranges=pages" option selects a range of pages for printing:
<UL><PRE>
% lp -o page-ranges=1 filename ENTER
% lp -o page-ranges=1-4 filename ENTER
% lp -o page-ranges=1-4,7,9-12 filename ENTER
</PRE></UL>
<P>As shown above, the <I>pages</I> value can be a single page, a range of
pages, or a collection of page numbers and ranges separated by commas. The
pages will always be printed in ascending order, regardless of the order of
the pages in the "page-range" option.
<P>To select the even or odd pages, use the "-o page-set=set" option:
<UL><PRE>
% lp -o page-set=odd filename ENTER
% lp -o page-set=even filename ENTER
</PRE></UL>
<H3>Setting the Brightness</H3>
<P>You can control the overall brightness of the printed output using the
"-o brightness=percent" option:
<UL><PRE>
% lp -o brightness=120 filename ENTER
</PRE></UL>
<P>Values greater than 100 will lighten the print, while values less than
100 will darken it.
<H3>Setting the Gamma Correction</H3>
<P>You can control the overall gamma correction of the printed output
using the "-o gamma=value" option:
<UL><PRE>
% lp -o gamma=1700 filename ENTER
</PRE></UL>
<P>Values greater than 1000 will lighten the print, while values less
than 1000 will darken it.
<H2>Text Options</H2>
<P>The following options apply when printing text files.
<H3>Setting the Number of Characters Per Inch</H3>
<P>The "-o cpi=value" option sets the number of characters per inch:
<UL><PRE>
% lp -o cpi=12 filename ENTER
</PRE></UL>
<H3>Setting the Number of Lines Per Inch</H3>
<P>The "-o lpi=value" option sets the number of lines per inch:
<UL><PRE>
% lp -o lpi=8 filename ENTER
</PRE></UL>
<H3>Setting the Number of Columns</H3>
<P>The "-o columns=value" option sets the number of text columns:
<UL><PRE>
% lp -o columns=2 filename ENTER
</PRE></UL>
<H3>Setting the Page Margins</H3>
<P>Normally the page margins are set to the hard limits of the printer. To
adjust the page margins use the "-o page-left=value", "-o page-right=value",
"-o page-top=value", and "-o page-bottom=value" options:
<UL><PRE>
% lp -o page-left=value filename ENTER
% lp -o page-right=value filename ENTER
% lp -o page-top=value filename ENTER
% lp -o page-bottom=value filename ENTER
</PRE></UL>
<P>The <I>value</I> argument is the margin in points; each point is 1/72 inch
or 0.35mm.
<H3>Pretty Printing</H3>
<P>The "-o prettyprint" option puts a header at the top of each page with the
page number, job title (usually the filename), and the date. Also, C and C++
keywords are highlighted, and comment lines are italicized:
<UL><PRE>
% lp -o prettyprint filename ENTER
</PRE></UL>
<H2>Image Options</H2>
<P>The following options apply when printing image files.
<H3>Scaling the Image</H3>
<P>The "-o scaling=percent" and "-o ppi=value" options change the size of a
printed image:
<UL><PRE>
% lp -o scaling=percent filename ENTER
% lp -o ppi=value filename ENTER
</PRE></UL>
<P>The scaling <I>percent</I> is a number from 1 to 800 specifying the size
in relation to the page (<I>not</I> the image.) A scaling of 100 percent will
fill the page as completely as the image aspect ratio allows. A scaling of
200 percent will print on up to 4 pages.
<P>The ppi <I>value</I> is a number from 1 to 1200 specifying the resolution
of the image in pixels per inch. An image that is 3000x2400 pixels will print
10x8 inches at 300 pixels per inch, for example. If the specified resolution
makes the image larger than the page, multiple pages will be printed to
satisfy the request.
<H3>Adjusting the Hue (Tint) of an Image</H3>
<P>The "-o hue=value" option will adjust the hue of the printed image, much
like the tint control on your television:
<UL><PRE>
% lp -o hue=value filename ENTER
</PRE></UL>
<P>The <I>value</I> argument is a number from -360 to 360 and represents the
color hue rotation. The following table summarizes the change you'll see with
different colors:
<CENTER><TABLE WIDTH="50%" BORDER="1">
<TR>
<TH>Original</TH>
<TH>hue=-45</TH>
<TH>hue=45</TH>
</TR>
<TR>
<TD>Red</TD>
<TD>Purple</TD>
<TD>Yellow-orange</TD>
</TR>
<TR>
<TD>Green</TD>
<TD>Yellow-green</TD>
<TD>Blue-green</TD>
</TR>
<TR>
<TD>Yellow</TD>
<TD>Orange</TD>
<TD>Green-yellow</TD>
</TR>
<TR>
<TD>Blue</TD>
<TD>Sky-blue</TD>
<TD>Purple</TD>
</TR>
<TR>
<TD>Magenta</TD>
<TD>Indigo</TD>
<TD>Crimson</TD>
</TR>
<TR>
<TD>Cyan</TD>
<TD>Blue-green</TD>
<TD>Light-navy-blue</TD>
</TR>
</TABLE></CENTER>
<H3>Adjusting the Saturation (Color) of an Image</H3>
<P>The "-o saturation=percent" option adjusts the saturation of the colors in
an image, much like the color knob on your television:
<UL><PRE>
% lp -o saturation=percent filename ENTER
</PRE></UL>
<P>The <I>percent</I> argument specifies the color saturation from 0 to 200.
A color saturation of 0 produces a black-and-white print, while a value of 200
will make the colors extremely intense.
</BODY>
</HTML>
+3
Ver Arquivo
@@ -53,6 +53,9 @@ with reduced functionality. </P>
<P>CUPS adds network printer browsing and PostScript Printer
Description (&quot;PPD&quot;)-based printing options to support real world
applications under UNIX. </P>
<P>CUPS also includes a customized version of GNU GhostScript
(currently based off GNU GhostScript 4.03) and an image file RIP that
can be used to support non-PostScript printers. </P>
<H2><A NAME=1_3>1.3 Document Overview</A></H2>
<P>This Something Something Something document is organized into the
following sections:</P>
BIN
Ver Arquivo
Arquivo binário não exibido.
+4
Ver Arquivo
@@ -30,6 +30,10 @@ supported with reduced functionality.
Description (&quot;PPD&quot;)-based printing options to support real
world applications under UNIX.
<P>CUPS also includes a customized version of GNU GhostScript
(currently based off GNU GhostScript 4.03) and an image file RIP that
can be used to support non-PostScript printers.
<H2>Document Overview</H2>
<P>This Something Something Something document is organized into the following
+49 -13
Ver Arquivo
@@ -14,7 +14,7 @@
#
# Attn: CUPS Licensing Information
# Easy Software Products
# 44145 Airport View Drive, Suite 204
# 44141 Airport View Drive, Suite 204
# Hollywood, Maryland 20636-3111 USA
#
# Voice: (301) 373-9603
@@ -24,7 +24,8 @@
include ../Makedefs
TARGETS = hpgltops texttops pstops imagetops imagetoraster
TARGETS = hpgltops texttops pstops imagetops imagetoraster \
rastertohp
HPGLOBJS = hpgl-attr.o hpgl-config.o hpgl-main.o hpgl-prolog.o \
hpgl-char.o hpgl-input.o hpgl-polygon.o hpgl-vector.o
@@ -32,7 +33,7 @@ IMAGEOBJS = image-colorspace.o image-photocd.o image-sgilib.o \
image-tiff.o image-gif.o image-png.o image-sgi.o image-zoom.o \
image-jpeg.o image-pnm.o image-sun.o image.o
OBJS = $(HPGLOBJS) $(IMAGEOBJS) imagetops.o imagetoraster.o \
common.o pstops.o texttops.o textcommon.o
common.o pstops.o rastertohp.o texttops.o textcommon.o
#
# Make all targets...
@@ -45,7 +46,7 @@ all: $(TARGETS)
#
clean:
rm -f $(OBJS) $(TARGETS) image.a
rm -f $(OBJS) $(TARGETS) $(LIBCUPSIMAGE)
#
# Install all targets...
@@ -54,54 +55,89 @@ clean:
install:
-$(MKDIR) $(SERVERROOT)/filter
$(CP) $(TARGETS) $(SERVERROOT)/filter
-$(MKDIR) $(LIBDIR)
$(CP) $(LIBCUPSIMAGE) $(LIBDIR)
if test $(LIBCUPSIMAGE) != "libcupsimage.a"; then \
$(LN) $(LIBCUPSIMAGE) `basename $(LIBCUPSIMAGE) .1` \
fi
#
# hpgltops
#
hpgltops: $(HPGLOBJS) common.o ../Makedefs ../cups/libcups.a
hpgltops: $(HPGLOBJS) common.o ../Makedefs ../cups/$(LIBCUPS)
echo Linking $@...
$(CC) $(LDFLAGS) -o $@ $(HPGLOBJS) common.o $(LIBS) -lm
$(HPGLOBJS): hpgltops.h
#
# image.a
# libcupsimage.so.1, libcupsimage.sl.1
#
image.a: $(IMAGEOBJS) ../Makedefs ../cups/libcups.a
libcupsimage.so.1 libcupsimage.sl.1: $(IMAGEOBJS) ../Makedefs
echo Linking $@...
$(DSO) $@ $(IMAGEOBJS) $(DSOLIBS)
$(LN) $@ `basename $@ .1`
#
# libcupsimage.a
#
libcupsimage.a: $(IMAGEOBJS) ../Makedefs
echo Archiving $@...
$(RM) $@
$(AR) $(ARFLAGS) $@ $(IMAGEOBJS)
$(RANLIB) $@
$(IMAGEOBJS): image.h
#
# imagetops
#
imagetops: imagetops.o common.o image.a ../Makedefs ../cups/libcups.a
$(CC) $(LDFLAGS) -o $@ imagetops.o common.o image.a $(IMGLIBS)
imagetops: imagetops.o common.o $(LIBCUPSIMAGE) ../Makedefs \
../cups/$(LIBCUPS)
echo Linking $@...
$(CC) $(LDFLAGS) -o $@ imagetops.o common.o -L. -lcupsimage \
$(IMGLIBS) $(LIBS)
imagetops: common.h image.h
#
# imagetoraster
#
imagetoraster: imagetoraster.o common.o image.a ../Makedefs ../cups/libcups.a
$(CC) $(LDFLAGS) -o $@ imagetoraster.o common.o image.a $(IMGLIBS)
imagetoraster: imagetoraster.o common.o $(LIBCUPSIMAGE) ../Makedefs \
../cups/$(LIBCUPS)
echo Linking $@...
$(CC) $(LDFLAGS) -o $@ imagetoraster.o common.o -L. -lcupsimage \
$(IMGLIBS) $(LIBS)
imagetoraster: common.h image.h
#
# pstops
#
pstops: pstops.o common.o ../Makedefs ../cups/libcups.a
pstops: pstops.o common.o ../Makedefs ../cups/$(LIBCUPS)
echo Linking $@...
$(CC) $(LDFLAGS) -o $@ pstops.o common.o $(LIBS)
pstops.o: common.h
#
# rastertohp
#
rastertohp: rastertohp.o ../Makedefs ../cups/$(LIBCUPS)
echo Linking $@...
$(CC) $(LDFLAGS) -o $@ rastertohp.o $(LIBS)
rastertohp.o: ../cups/raster.h
#
# texttops
#
texttops: texttops.o textcommon.o common.o ../Makedefs ../cups/libcups.a
texttops: texttops.o textcommon.o common.o ../Makedefs \
../cups/$(LIBCUPS)
echo Linking $@...
$(CC) $(LDFLAGS) -o $@ texttops.o textcommon.o common.o $(LIBS)
texttops.o: common.h textcommon.h
+1 -1
Ver Arquivo
@@ -61,7 +61,7 @@ SetCommonOptions(int num_options, /* I - Number of options */
float temp; /* Swapping variable */
ppd_file_t *ppd; /* PPD file */
ppd_size_t *pagesize; /* Current page size */
char *val; /* Option value */
const char *val; /* Option value */
ppd = ppdOpenFile(getenv("PPD"));
+1 -1
Ver Arquivo
@@ -135,7 +135,7 @@ main(int argc, /* I - Number of command-line arguments */
name; /* Name of command */
int num_options; /* Number of print options */
cups_option_t *options; /* Print options */
char *val; /* Option value */
const char *val; /* Option value */
int shading; /* -1 = black, 0 = grey, 1 = color */
float penwidth; /* Default pen width */
+8 -5
Ver Arquivo
@@ -84,7 +84,7 @@ main(int argc, /* I - Number of command-line arguments */
ppd_file_t *ppd; /* PPD file */
int num_options; /* Number of print options */
cups_option_t *options; /* Print options */
char *val; /* Option value */
const char *val; /* Option value */
int slowcollate; /* Collate copies the slow way */
float g; /* Gamma correction value */
float b; /* Brightness factor */
@@ -110,6 +110,8 @@ main(int argc, /* I - Number of command-line arguments */
g = 1.0;
b = 1.0;
Copies = atoi(argv[4]);
options = NULL;
num_options = cupsParseOptions(argv[5], 0, &options);
@@ -118,9 +120,6 @@ main(int argc, /* I - Number of command-line arguments */
ppdMarkDefaults(ppd);
cupsMarkOptions(ppd, num_options, options);
if ((val = cupsGetOption("copies", num_options, options)) != NULL)
Copies = atoi(val);
if ((val = cupsGetOption("multiple-document-handling", num_options, options)) != NULL)
{
/*
@@ -245,12 +244,16 @@ main(int argc, /* I - Number of command-line arguments */
puts("%!");
if (ppd != NULL && ppd->patches != NULL)
puts(ppd->patches);
ppdEmit(ppd, stdout, PPD_ORDER_DOCUMENT);
ppdEmit(ppd, stdout, PPD_ORDER_ANY);
ppdEmit(ppd, stdout, PPD_ORDER_PROLOG);
if (g != 1.0 || b != 1.0)
printf("{ neg 1 add %.3f exp neg 1 add %.3f mul } bind settransfer\n", g, b);
printf("{ neg 1 add dup 0 lt { pop 1 } { %.3f exp neg 1 add } "
"ifelse %.3f mul } bind settransfer\n", g, b);
if (Copies > 1 && !slowcollate)
{
+12 -5
Ver Arquivo
@@ -114,7 +114,7 @@ int Floyd4x4[4][4] =
ib_t OnPixels[256], /* On-pixel LUT */
OffPixels[256]; /* Off-pixel LUT */
int Planes[] = /* Number of planes for each colorspace */
{ 1, 3, 4, 1, 3, 3, 4, 4, 4, 6 };
{ 1, 3, 4, 1, 3, 3, 4, 4, 4, 6, 4, 4, 1, 1, 1 };
/*
@@ -169,7 +169,7 @@ main(int argc, /* I - Number of command-line arguments */
cups_page_header_t header; /* Page header */
int num_options; /* Number of print options */
cups_option_t *options; /* Print options */
char *val; /* Option value */
const char *val; /* Option value */
int slowcollate, /* Collate copies the slow way */
slowcopies; /* Make copies the "slow" way? */
float g; /* Gamma correction value */
@@ -214,6 +214,8 @@ main(int argc, /* I - Number of command-line arguments */
g = 1.0;
b = 1.0;
Copies = atoi(argv[4]);
options = NULL;
num_options = cupsParseOptions(argv[5], 0, &options);
@@ -222,9 +224,6 @@ main(int argc, /* I - Number of command-line arguments */
ppdMarkDefaults(ppd);
cupsMarkOptions(ppd, num_options, options);
if ((val = cupsGetOption("copies", num_options, options)) != NULL)
Copies = atoi(val);
if ((val = cupsGetOption("multiple-document-handling", num_options, options)) != NULL)
{
/*
@@ -325,6 +324,9 @@ main(int argc, /* I - Number of command-line arguments */
break;
case CUPS_CSPACE_K :
case CUPS_CSPACE_WHITE :
case CUPS_CSPACE_GOLD :
case CUPS_CSPACE_SILVER :
primary = IMAGE_BLACK;
secondary = IMAGE_BLACK;
header.cupsBitsPerPixel = header.cupsBitsPerColor;
@@ -713,6 +715,9 @@ main(int argc, /* I - Number of command-line arguments */
yerr0, yerr1, r0, r1);
break;
case CUPS_CSPACE_K :
case CUPS_CSPACE_WHITE :
case CUPS_CSPACE_GOLD :
case CUPS_CSPACE_SILVER :
format_K(&header, row, y, plane, z->xsize, z->ysize,
yerr0, yerr1, r0, r1);
break;
@@ -729,6 +734,8 @@ main(int argc, /* I - Number of command-line arguments */
yerr0, yerr1, r0, r1);
break;
case CUPS_CSPACE_YMCK :
case CUPS_CSPACE_GMCK :
case CUPS_CSPACE_GMCS :
format_YMCK(&header, row, y, plane, z->xsize, z->ysize,
yerr0, yerr1, r0, r1);
break;
+104 -28
Ver Arquivo
@@ -49,17 +49,17 @@
* Globals...
*/
int NumPages = 0; /* Number of pages in file */
long Pages[MAX_PAGES]; /* Offsets to each page */
char PageLabels[MAX_PAGES][64];
/* Page labels */
char *PageRanges = NULL; /* Range of pages selected */
char *PageSet = NULL; /* All, Even, Odd pages */
int Order = 0, /* 0 = normal, 1 = reverse pages */
Flip = 0, /* Flip/mirror pages */
NUp = 1, /* Number of pages on each sheet (1, 2, 4) */
Collate = 0, /* Collate copies? */
Copies = 1; /* Number of copies */
int NumPages = 0; /* Number of pages in file */
long Pages[MAX_PAGES]; /* Offsets to each page */
char PageLabels[MAX_PAGES][64];
/* Page labels */
const char *PageRanges = NULL; /* Range of pages selected */
const char *PageSet = NULL; /* All, Even, Odd pages */
int Order = 0, /* 0 = normal, 1 = reverse pages */
Flip = 0, /* Flip/mirror pages */
NUp = 1, /* Number of pages on each sheet (1, 2, 4) */
Collate = 0, /* Collate copies? */
Copies = 1; /* Number of copies */
/*
@@ -85,7 +85,7 @@ main(int argc, /* I - Number of command-line arguments */
ppd_file_t *ppd; /* PPD file */
int num_options; /* Number of print options */
cups_option_t *options; /* Print options */
char *val; /* Option value */
const char *val; /* Option value */
char tempfile[255]; /* Temporary file name */
FILE *temp; /* Temporary file */
int number; /* Page number */
@@ -94,6 +94,9 @@ main(int argc, /* I - Number of command-line arguments */
char line[8192]; /* Line buffer */
float g; /* Gamma correction value */
float b; /* Brightness factor */
int level; /* Nesting level for embedded files */
int nbytes, /* Number of bytes read */
tbytes; /* Total bytes to read for binary data */
if (argc < 6 || argc > 7)
@@ -129,6 +132,8 @@ main(int argc, /* I - Number of command-line arguments */
g = 1.0;
b = 1.0;
Copies = atoi(argv[4]);
ppd = ppdOpenFile(getenv("PPD"));
options = NULL;
@@ -145,9 +150,6 @@ main(int argc, /* I - Number of command-line arguments */
if ((val = cupsGetOption("page-set", num_options, options)) != NULL)
PageSet = val;
if ((val = cupsGetOption("copies", num_options, options)) != NULL)
Copies = atoi(val);
if ((val = cupsGetOption("multiple-document-handling", num_options, options)) != NULL)
{
/*
@@ -242,6 +244,9 @@ main(int argc, /* I - Number of command-line arguments */
puts(line);
if (ppd != NULL && ppd->patches != NULL)
puts(ppd->patches);
ppdEmit(ppd, stdout, PPD_ORDER_DOCUMENT);
ppdEmit(ppd, stdout, PPD_ORDER_ANY);
ppdEmit(ppd, stdout, PPD_ORDER_PROLOG);
@@ -253,7 +258,8 @@ main(int argc, /* I - Number of command-line arguments */
"end");
if (g != 1.0 || b != 1.0)
printf("{ neg 1 add %.3f exp neg 1 add %.3f mul } bind settransfer\n", g, b);
printf("{ neg 1 add dup 0 lt { pop 1 } { %.3f exp neg 1 add } "
"ifelse %.3f mul } bind settransfer\n", g, b);
if (Copies > 1 && (!Collate || !slowcollate))
printf("/#copies %d def\n", Copies);
@@ -264,9 +270,32 @@ main(int argc, /* I - Number of command-line arguments */
* OK, we have DSC comments; read until we find a %%Page comment...
*/
level = 0;
while (psgets(line, sizeof(line), fp) != NULL)
if (strncmp(line, "%%Page:", 7) == 0)
if (strncmp(line, "%%BeginDocument:", 16) == 0 ||
strncmp(line, "%%BeginDocument ", 16) == 0) /* Adobe Acrobat BUG */
level ++;
else if (strcmp(line, "%%EndDocument") == 0)
level --;
else if (strncmp(line, "%%Page:", 7) == 0 && level == 0)
break;
else if (strncmp(line, "%%BeginBinary:", 14) == 0 ||
(strncmp(line, "%%BeginData:", 12) == 0 &&
strstr(line, "Binary") != NULL))
{
/*
* Copy binary data...
*/
tbytes = atoi(strchr(line, ':') + 1);
while (tbytes > 0)
{
nbytes = fread(line, 1, sizeof(line), fp);
fwrite(line, 1, nbytes, stdout);
tbytes -= nbytes;
}
}
else
puts(line);
@@ -276,15 +305,26 @@ main(int argc, /* I - Number of command-line arguments */
for (;;)
{
if (strncmp(line, "%%Page:", 7) == 0)
if (strncmp(line, "%%BeginDocument:", 16) == 0 ||
strncmp(line, "%%BeginDocument ", 16) == 0) /* Adobe Acrobat BUG */
level ++;
else if (strcmp(line, "%%EndDocument") == 0)
level --;
else if (strncmp(line, "%%Page:", 7) == 0 && level == 0)
{
if (sscanf(line, "%*s%*s%d", &number) == 1)
{
if (!check_range(number))
{
while (psgets(line, sizeof(line), fp) != NULL)
if (strncmp(line, "%%Page:", 7) == 0)
if (strncmp(line, "%%BeginDocument:", 16) == 0 ||
strncmp(line, "%%BeginDocument ", 16) == 0) /* Adobe Acrobat BUG */
level ++;
else if (strcmp(line, "%%EndDocument") == 0)
level --;
else if (strncmp(line, "%%Page:", 7) == 0 && level == 0)
break;
continue;
}
@@ -298,11 +338,36 @@ main(int argc, /* I - Number of command-line arguments */
if (!sloworder)
{
if (ppd == NULL || ppd->num_filters == 0)
fprintf(stderr, "PAGE: %d %d\n", NumPages, Copies);
ppdEmit(ppd, stdout, PPD_ORDER_PAGE);
start_nup(NumPages - 1);
}
}
}
else if (strncmp(line, "%%BeginBinary:", 14) == 0 ||
(strncmp(line, "%%BeginData:", 12) == 0 &&
strstr(line, "Binary") != NULL))
{
/*
* Copy binary data...
*/
tbytes = atoi(strchr(line, ':') + 1);
while (tbytes > 0)
{
nbytes = fread(line, 1, sizeof(line), fp);
if (!sloworder)
fwrite(line, 1, nbytes, stdout);
if (slowcollate || sloworder)
fwrite(line, 1, nbytes, stdout);
tbytes -= nbytes;
}
}
else
{
if (!sloworder)
@@ -334,6 +399,9 @@ main(int argc, /* I - Number of command-line arguments */
for (number = 0; number < NumPages; number ++)
{
if (ppd == NULL || ppd->num_filters == 0)
fprintf(stderr, "PAGE: %d 1\n", number + 1);
ppdEmit(ppd, stdout, PPD_ORDER_PAGE);
start_nup(number);
copy_bytes(temp, Pages[number + 1] - Pages[number]);
@@ -345,13 +413,14 @@ main(int argc, /* I - Number of command-line arguments */
}
else
{
if (!slowcollate)
Copies = 1;
while (Copies > 0)
do
{
for (number = NumPages - 1; number >= 0; number --)
{
if (ppd == NULL || ppd->num_filters == 0)
fprintf(stderr, "PAGE: %d %d\n", NumPages - number,
slowcollate ? 1 : Copies);
ppdEmit(ppd, stdout, PPD_ORDER_PAGE);
start_nup(NumPages - 1 - number);
fseek(temp, Pages[number], SEEK_SET);
@@ -361,6 +430,7 @@ main(int argc, /* I - Number of command-line arguments */
Copies --;
}
while (Copies > 0 || !slowcollate);
}
}
}
@@ -370,6 +440,9 @@ main(int argc, /* I - Number of command-line arguments */
* No DSC comments - write any page commands and then the rest of the file...
*/
if (ppd == NULL || ppd->num_filters == 0)
fprintf(stderr, "PAGE: 1 %d\n", slowcollate ? 1 : Copies);
ppdEmit(ppd, stdout, PPD_ORDER_PAGE);
while (psgets(line, sizeof(line), fp) != NULL)
@@ -387,6 +460,9 @@ main(int argc, /* I - Number of command-line arguments */
{
while (Copies > 1)
{
if (ppd == NULL || ppd->num_filters == 0)
fputs("PAGE: 1 1\n", stderr);
ppdEmit(ppd, stdout, PPD_ORDER_PAGE);
rewind(temp);
copy_bytes(temp, 0);
@@ -430,8 +506,8 @@ main(int argc, /* I - Number of command-line arguments */
static int /* O - 1 if selected, 0 otherwise */
check_range(int page) /* I - Page number */
{
char *range; /* Pointer into range string */
int lower, upper; /* Lower and upper page numbers */
const char *range; /* Pointer into range string */
int lower, upper; /* Lower and upper page numbers */
if (PageSet != NULL)
@@ -455,11 +531,11 @@ check_range(int page) /* I - Page number */
{
lower = 1;
range ++;
upper = strtol(range, &range, 10);
upper = strtol(range, (char **)&range, 10);
}
else
{
lower = strtol(range, &range, 10);
lower = strtol(range, (char **)&range, 10);
if (*range == '-')
{
@@ -467,7 +543,7 @@ check_range(int page) /* I - Page number */
if (!isdigit(*range))
upper = 65535;
else
upper = strtol(range, &range, 10);
upper = strtol(range, (char **)&range, 10);
}
else
upper = lower;
+493
Ver Arquivo
@@ -0,0 +1,493 @@
/*
* "$Id$"
*
* Hewlett-Packard Page Control Language and Raster Transfer Language
* filter for ESP Print.
*
* Copyright 1993-1999 by Easy Software Products
*
* These coded instructions, statements, and computer programs contain
* unpublished proprietary information of Easy Software Products, and
* are protected by Federal copyright law. They may not be disclosed
* to third parties or copied or duplicated in any form, in whole or
* in part, without the prior written consent of Easy Software Products.
*
* Contents:
*
*/
/*
* Include necessary headers...
*/
#include <cups/cups.h>
#include <cups/raster.h>
#include <cups/string.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
/*
* Globals...
*/
unsigned char *Planes[4], /* Output buffers */
*CompBuffer; /* Compression buffer */
int NumPlanes, /* Number of color planes */
Feed; /* Number of lines to skip */
/*
* Prototypes...
*/
void Setup(void);
void StartPage(cups_page_header_t *header);
void EndPage(cups_page_header_t *header);
void Shutdown(void);
void CompressData(unsigned char *line, int length, int plane, int type);
void OutputLine(cups_page_header_t *header);
/*
* 'Setup()' - Prepare the printer for printing.
*/
void
Setup(void)
{
/*
* Send a PCL reset sequence.
*/
putchar(0x1b);
putchar('E');
}
/*
* 'StartPage()' - Start a page of graphics.
*/
void
StartPage(cups_page_header_t *header) /* I - Page header */
{
int plane; /* Looping var */
/*
* Set the media type, position, and size...
*/
printf("\033&l6D\033&k12H"); /* Set 6 LPI, 10 CPI */
printf("\033&l%.2fP", /* Set page length */
header->PageSize[1] / 12.0);
printf("\033&l%dX", header->NumCopies); /* Set number copies */
if (header->MediaPosition)
printf("\033&l%dH", header->MediaPosition); /* Set media position */
if (header->cupsMediaType)
printf("\033&l%dM", /* Set media type */
header->cupsMediaType);
/*
* Set graphics mode...
*/
if (header->cupsColorSpace == CUPS_CSPACE_KCMY)
{
NumPlanes = 4;
printf("\033*r-4U"); /* Set KCMY graphics */
}
else
NumPlanes = 1;
printf("\033*t%dR", header->HWResolution[0]); /* Set resolution */
printf("\033*r%dS", header->cupsWidth); /* Set width */
printf("\033*r%dT", header->cupsHeight); /* Set height */
printf("\033&a0H\033&a0V"); /* Set top-of-page */
printf("\033*r1A"); /* Start graphics */
if (header->cupsCompression)
printf("\033*b%dM", /* Set compression */
header->cupsCompression);
Feed = 0; /* No blank lines yet */
/*
* Allocate memory for a line of graphics...
*/
Planes[0] = malloc(header->cupsBytesPerLine);
for (plane = 1; plane < NumPlanes; plane ++)
Planes[plane] = Planes[0] + plane * header->cupsBytesPerLine / NumPlanes;
if (header->cupsCompression)
CompBuffer = malloc(header->cupsBytesPerLine * 2);
}
/*
* 'EndPage()' - Finish a page of graphics.
*/
void
EndPage(cups_page_header_t *header) /* I - Page header */
{
/*
* Eject the current page...
*/
if (NumPlanes > 1)
{
printf("\033*rC"); /* End color GFX */
printf("\033&l0H"); /* Eject current page */
}
else
{
printf("\033*r0B"); /* End GFX */
printf("\014"); /* Eject currnet page */
}
/*
* Free memory...
*/
free(Planes[0]);
if (header->cupsCompression)
free(CompBuffer);
}
/*
* 'Shutdown()' - Shutdown the printer.
*/
void
Shutdown(void)
{
/*
* Send a PCL reset sequence.
*/
putchar(0x1b);
putchar('E');
}
/*
* 'CompressData()' - Compress a line of graphics.
*/
void
CompressData(unsigned char *line, /* I - Data to compress */
int length, /* I - Number of bytes */
int plane, /* I - Color plane */
int type) /* I - Type of compression */
{
unsigned char *line_ptr, /* Current byte pointer */
*line_end, /* End-of-line byte pointer */
*comp_ptr, /* Pointer into compression buffer */
*start; /* Start of compression sequence */
int count; /* Count of bytes for output */
switch (type)
{
case 0 :
/*
* Do no compression...
*/
line_ptr = line;
line_end = line + length;
break;
case 1 :
/*
* Do run-length encoding...
*/
line_end = line + length;
for (line_ptr = line, comp_ptr = CompBuffer;
line_ptr < line_end;
comp_ptr += 2, line_ptr += count)
{
for (count = 1;
(line_ptr + count) < line_end &&
line_ptr[0] == line_ptr[count] &&
count < 256;
count ++);
comp_ptr[0] = count - 1;
comp_ptr[1] = line_ptr[0];
}
line_ptr = CompBuffer;
line_end = comp_ptr;
break;
case 2 :
/*
* Do TIFF pack-bits encoding...
*/
line_ptr = line;
line_end = line + length;
comp_ptr = CompBuffer;
while (line_ptr < line_end)
{
if ((line_ptr + 1) >= line_end)
{
/*
* Single byte on the end...
*/
*comp_ptr++ = 0x00;
*comp_ptr++ = *line_ptr++;
}
else if (line_ptr[0] == line_ptr[1])
{
/*
* Repeated sequence...
*/
line_ptr ++;
count = 2;
while (line_ptr < (line_end - 1) &&
line_ptr[0] == line_ptr[1] &&
count < 127)
{
line_ptr ++;
count ++;
}
*comp_ptr++ = 257 - count;
*comp_ptr++ = *line_ptr++;
}
else
{
/*
* Non-repeated sequence...
*/
start = line_ptr;
line_ptr ++;
count = 1;
while (line_ptr < (line_end - 1) &&
line_ptr[0] != line_ptr[1] &&
count < 127)
{
line_ptr ++;
count ++;
}
*comp_ptr++ = count - 1;
memcpy(comp_ptr, start, count);
comp_ptr += count;
}
}
line_ptr = CompBuffer;
line_end = comp_ptr;
break;
}
/*
* Set the length of the data and write a raster plane...
*/
printf("\033*b%d%c", line_end - line_ptr, plane);
fwrite(line_ptr, line_end - line_ptr, 1, stdout);
}
/*
* 'OutputLine()' - Output a line of graphics.
*/
void
OutputLine(cups_page_header_t *header) /* I - Page header */
{
int plane; /* Current plane */
/*
* Output whitespace as needed...
*/
if (Feed > 0)
{
printf("\033*b%dY", Feed);
Feed = 0;
}
/*
* Write bitmap data as needed...
*/
for (plane = 0; plane < NumPlanes; plane ++)
CompressData(Planes[plane], header->cupsBytesPerLine / NumPlanes,
plane < (NumPlanes - 1) ? 'V' : 'W',
header->cupsCompression);
}
/*
* 'main()' - Main entry and processing of driver.
*/
int /* O - Exit status */
main(int argc, /* I - Number of command-line arguments */
char *argv[]) /* I - Command-line arguments */
{
int fd; /* File descriptor */
cups_raster_t *ras; /* Raster stream for printing */
cups_page_header_t header; /* Page header from file */
int page; /* Current page */
int y; /* Current line */
/*
* Check for valid arguments...
*/
if (argc < 6 || argc > 7)
{
/*
* We don't have the correct number of arguments; write an error message
* and then sleep for 1 second to give the scheduler a chance to read
* the message.
*/
fputs("ERROR: rastertopcl job-id user title copies options [file]\n", stderr);
sleep(1);
return (1);
}
/*
* Open the page stream...
*/
if (argc == 7)
{
if ((fd = open(argv[6], O_RDONLY)) == -1)
{
perror("ERROR: Unable to open raster file - ");
sleep(1);
return (1);
}
}
else
fd = 0;
ras = cupsRasterOpen(fd, CUPS_RASTER_READ);
/*
* Initialize the print device...
*/
Setup();
/*
* Process pages as needed...
*/
page = 0;
while (cupsRasterReadHeader(ras, &header))
{
/*
* Write a status message with the page number and number of copies.
*/
page ++;
fprintf(stderr, "PAGE: %d %d\n", page, header.NumCopies);
/*
* Start the page...
*/
StartPage(&header);
/*
* Loop for each line on the page...
*/
for (y = 0; y < header.cupsHeight; y ++)
{
/*
* Let the user know how far we have progressed...
*/
if ((y & 127) == 0)
fprintf(stderr, "INFO: Printing page %d, %d%% complete...\n", page,
100 * y / header.cupsHeight);
/*
* Read a line of graphics...
*/
if (cupsRasterReadPixels(ras, Planes[0], header.cupsBytesPerLine) < 1)
break;
/*
* See if the line is blank; if not, write it to the printer...
*/
if (Planes[0][0] ||
memcmp(Planes[0], Planes[0] + 1, header.cupsBytesPerLine - 1))
OutputLine(&header);
else
Feed ++;
}
/*
* Eject the page...
*/
EndPage(&header);
}
/*
* Shutdown the printer...
*/
Shutdown();
/*
* Close the raster stream...
*/
cupsRasterClose(ras);
if (fd != 0)
close(fd);
/*
* If no pages were printed, send an error message...
*/
if (page == 0)
fputs("ERROR: No pages found!\n", stderr);
else
fputs("INFO: Ready to print.\n", stderr);
/*
* Sleep for 1 second and return...
*/
sleep(1);
return (page == 0);
}
/*
* End of "$Id$".
*/
+3 -3
Ver Arquivo
@@ -123,7 +123,7 @@ TextMain(char *name, /* I - Name of filter */
page_column; /* Current page column */
int num_options; /* Number of print options */
cups_option_t *options; /* Print options */
char *val; /* Option value */
const char *val; /* Option value */
char keyword[64], /* Keyword string */
*keyptr; /* Pointer into string */
int keycol; /* Column where keyword starts */
@@ -432,7 +432,7 @@ TextMain(char *name, /* I - Name of filter */
attr &= ~ATTR_BOLD;
}
else if (!isalpha(ch) && keyptr > keyword)
else if (!(isalnum(ch) || ch == '_') && keyptr > keyword)
{
/*
* Look for a keyword...
@@ -458,7 +458,7 @@ TextMain(char *name, /* I - Name of filter */
}
}
}
else if (isalpha(ch) && !ccomment && !cstring)
else if ((isalnum(ch) || ch == '_') && !ccomment && !cstring)
{
/*
* Add characters to the current keyword (if they'll fit).

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