Comparar commits
1 Commits
| Autor | SHA1 | Data | |
|---|---|---|---|
| 11236b767a |
-332
@@ -1,332 +0,0 @@
|
||||
Common UNIX Printing System License Agreement
|
||||
|
||||
Copyright 1997-1999 by Easy Software Products
|
||||
44141 AIRPORT VIEW DR STE 204
|
||||
HOLLYWOOD, MARYLAND 20636-3111 USA
|
||||
|
||||
Voice: +1.301.373.9603
|
||||
Email: cups-info@cups.org
|
||||
WWW: http://www.cups.org
|
||||
|
||||
Introduction
|
||||
|
||||
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.
|
||||
|
||||
For those not familiar with the GNU General Public License, the license
|
||||
basically allows you to:
|
||||
|
||||
* 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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
Binary Distribution Rights
|
||||
|
||||
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.
|
||||
|
||||
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:
|
||||
|
||||
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
|
||||
|
||||
Support
|
||||
|
||||
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.
|
||||
|
||||
Trademarks
|
||||
|
||||
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.
|
||||
|
||||
GNU General Public License
|
||||
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright 1989, 1991 Free Software Foundation, Inc.
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies of this license
|
||||
document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
The precise terms and conditions for copying, distribution and modification
|
||||
follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
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".
|
||||
|
||||
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.
|
||||
|
||||
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.)
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.)
|
||||
|
||||
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.
|
||||
|
||||
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 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
|
||||
+2
-1
@@ -69,7 +69,8 @@ CFLAGS = @CFLAGS@ $(OPTIM) -I.. $(OPTIONS)
|
||||
DSOLIBS = @DSOLIBS@
|
||||
IMGLIBS = @IMGLIBS@ -lm
|
||||
LDFLAGS = @LDFLAGS@ $(OPTIM)
|
||||
LIBS = -L../cups -lcups @LIBS@
|
||||
LIBS = -L../cups -lcups $(NETLIBS) @LIBS@
|
||||
NETLIBS = @NETLIBS@
|
||||
OPTIM = @OPTIM@
|
||||
OPTIONS =
|
||||
|
||||
|
||||
-139
@@ -1,139 +0,0 @@
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE>README - Common UNIX Printing System</TITLE>
|
||||
</HEAD>
|
||||
<BODY>
|
||||
|
||||
<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="#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="#legal">Legal Stuff</A>
|
||||
</UL>
|
||||
|
||||
<H2><A NAME="intro">Introduction</A></H2>
|
||||
|
||||
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.
|
||||
|
||||
<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 ("PPD")-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><A NAME="require">Requirements</A></H2>
|
||||
|
||||
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® Windows®.
|
||||
|
||||
<P>For the image file filters you'll need the JPEG, PNG, TIFF, and ZLIB
|
||||
libraries. CUPS will build without these, but with reduced functionality.
|
||||
|
||||
<P>If you make changes to the man pages you'll need GNU groff or another
|
||||
nroff-like package.
|
||||
|
||||
<P>The documentation is formatted using the HTMLDOC software (again, not
|
||||
needed unless you make changes.)
|
||||
|
||||
<H2><A NAME="use">Using CUPS</A></H2>
|
||||
|
||||
<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.
|
||||
|
||||
<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 fourth beta release of CUPS:
|
||||
|
||||
<UL>
|
||||
|
||||
<LI>Documentation is not completed.
|
||||
|
||||
<LI>The lpc command currently only supports the help and status
|
||||
commands.
|
||||
|
||||
</UL>
|
||||
|
||||
CUPS has been built and tested on the following operating systems:
|
||||
|
||||
<UL>
|
||||
<LI>Digital UNIX 4.0d
|
||||
<LI>HP-UX 10.20 and 11.0
|
||||
<LI>IRIX 5.3, 6.2, 6.5.3
|
||||
<LI>Linux (RedHat 5.2)
|
||||
<LI>Solaris 2.5.1, 2.6, 2.7 (aka 7)
|
||||
</UL>
|
||||
|
||||
The client libraries and filters have been successfully compiled under
|
||||
Microsoft Windows using Visual C++ 6.0.
|
||||
|
||||
<H2><A NAME="report">Reporting Problems</A></H2>
|
||||
|
||||
If you have problems, please send an email to
|
||||
<A HREF="mailto:cups-support@cups.org">cups-support@cups.org</A>. Include
|
||||
your operating system and version, compiler and version, and any errors
|
||||
or problems you've run into.
|
||||
|
||||
<H2><A NAME="resources">Other Resources</A></H2>
|
||||
|
||||
See the CUPS web site at "http://www.cups.org" for other site links.
|
||||
|
||||
<P>You can subscribe to the CUPS mailing list by sending a message containing
|
||||
"subscribe cups" to <A HREF="mailto:majordomo@cups.org">majordomo@cups.org</A>.
|
||||
This list is provided to discuss problems, questions, and improvements to
|
||||
the CUPS software. New releases of CUPS are announced to this list as well.
|
||||
|
||||
<H2><A NAME="legal">Legal Stuff</A></H2>
|
||||
|
||||
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.
|
||||
|
||||
<P>CUPS is provided under the terms of the
|
||||
<A HREF="LICENSE.html">GNU General Public License</A>
|
||||
which is located in the files "LICENSE.html" and "LICENSE.txt". For commercial
|
||||
support and "binary-only" licensing information, please contact:
|
||||
|
||||
<UL>
|
||||
Attn: CUPS Licensing Information
|
||||
<BR>Easy Software Products
|
||||
<BR>44141 Airport View Drive, Suite 204
|
||||
<BR>Hollywood, Maryland 20636-3111 USA
|
||||
|
||||
<P>Voice: +1.301.373.9603
|
||||
<BR>Email: <A HREF="mailto:cups-info@cups.org">cups-info@cups.org</A>
|
||||
<BR>WWW: <A HREF="http://www.cups.org">http://www.cups.org</A>
|
||||
</UL>
|
||||
|
||||
<P>If you're interested in a complete, commercial printing solution for UNIX,
|
||||
check out our ESP Print software at <A HREF="http://www.easysw.com/print.html">
|
||||
http://www.easysw.com/print.html</A>.
|
||||
|
||||
</BODY>
|
||||
</HTML>
|
||||
+149
-74
@@ -1,120 +1,195 @@
|
||||
README - CUPS v1.0b4
|
||||
--------------------
|
||||
README - CUPS v1.0b6 - 07/30/1999
|
||||
---------------------------------
|
||||
|
||||
CONTENTS
|
||||
BETA SOFTWARE BETA SOFTWARE BETA SOFTWARE BETA SOFTWARE BETA SOFTWARE
|
||||
|
||||
* Introduction
|
||||
* Requirements
|
||||
* Using CUPS
|
||||
* Known Problems
|
||||
* Reporting Problems
|
||||
* Other Resources
|
||||
* Legal Stuff
|
||||
WARNING - This is a BETA release of CUPS, which means that it may
|
||||
contain "bugs" that could prevent you from printing. If
|
||||
you are concerned that this may cause you lost time or
|
||||
money, please STOP and do not install this software!
|
||||
|
||||
BETA SOFTWARE BETA SOFTWARE BETA SOFTWARE BETA SOFTWARE BETA SOFTWARE
|
||||
|
||||
|
||||
INTRODUCTION
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
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.
|
||||
managing print jobs and queues. The Line Printer Daemon (LPD,
|
||||
RFC1179), Server Message Block (SMB), and AppSocket protocols are also
|
||||
supported with reduced functionality.
|
||||
|
||||
CUPS adds network printer browsing and PostScript Printer Description
|
||||
("PPD")-based printing options to support real world applications under
|
||||
UNIX.
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
CUPS is Copyright 1993-1999 by Easy Software Products, All Rights
|
||||
Reserved. CUPS is currently licensed under the terms of the GNU
|
||||
General Public License. Please see the license file for details.
|
||||
|
||||
|
||||
REQUIREMENTS
|
||||
SYSTEM REQUIREMENTS
|
||||
|
||||
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® Windows®.
|
||||
Binary distributions require a minimum of 10MB of free disk space. We
|
||||
do not recommend using CUPS on a workstation with less than 32MB of RAM
|
||||
or a PC with less than 16MB of RAM.
|
||||
|
||||
For the image file filters you'll need the JPEG, PNG, TIFF, and ZLIB
|
||||
libraries. CUPS will build without these, but with reduced functionality.
|
||||
|
||||
If you make changes to the man pages you'll need GNU groff or another
|
||||
nroff-like package.
|
||||
|
||||
The documentation is formatted using the HTMLDOC software (again, not needed
|
||||
unless you make changes.)
|
||||
If you are installing from source you'll need an ANSI C compiler and
|
||||
optionally one or more image file support libraries. Complete source
|
||||
installation instructions can be found in the CUPS System
|
||||
Administrator's Manual in the files "doc/sam.html" or "doc/sam.pdf".
|
||||
|
||||
|
||||
USING CUPS
|
||||
SOFTWARE REQUIREMENTS
|
||||
|
||||
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 following operating system software is required to install one of
|
||||
the binary distributions from Easy Software Products:
|
||||
|
||||
Once you have installed CUPS, the Software Administrator's Manual and
|
||||
Software User's Manual are excellent places to start setting things up.
|
||||
- Digital UNIX (aka OSF1 aka Compaq Tru64 UNIX) 4.0 or higher
|
||||
- HP-UX 10.20 or higher
|
||||
- IRIX 5.3 or higher
|
||||
- Linux 2.0.36 with glibc2 or higher (tested with RedHat 5.2)
|
||||
- Solaris 2.5 or higher (SPARC or Intel)
|
||||
|
||||
|
||||
KNOWN PROBLEMS
|
||||
INSTALLING CUPS
|
||||
|
||||
The following known problems are being worked on and should be resolved for
|
||||
the fourth beta release of CUPS:
|
||||
We are currently distributing CUPS binary distributions in TAR format
|
||||
with installation and removal scripts generated by our ESP Package
|
||||
Manager (EPM) software, which is also included with the source
|
||||
distribution.
|
||||
|
||||
* Documentation is not completed.
|
||||
* The lpc command currently only supports the help and status commands.
|
||||
WARNING: Installing CUPS will overwrite your existing printing system.
|
||||
Backup files are made by the installation script and restored by the
|
||||
removal script, so if you experience problems you should be able to
|
||||
remove the CUPS software to restore your previous configuration.
|
||||
However, Easy Software Products makes no warranty for this and will not
|
||||
be liable for any lost revenues, etc.
|
||||
|
||||
CUPS has been built and tested on the following operating systems:
|
||||
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:
|
||||
|
||||
* Digital UNIX 4.0d
|
||||
* HP-UX 10.20 and 11.0
|
||||
* IRIX 5.3, 6.2, 6.5.3
|
||||
* Linux (RedHat 5.2)
|
||||
* Solaris 2.5.1, 2.6, 2.7 (aka 7)
|
||||
./cups.install ENTER
|
||||
|
||||
The client libraries and filters have been successfully compiled under
|
||||
Microsoft Windows using Visual C++ 6.0.
|
||||
After asking you a few yes/no questions the CUPS software will be
|
||||
installed and the scheduler will be started automatically.
|
||||
|
||||
|
||||
SETTING UP PRINTER QUEUES
|
||||
|
||||
CUPS works best with PPD (PostScript Printer Description) files. In a
|
||||
pinch you can also use System V style printer interface scripts.
|
||||
|
||||
Two sample PPD files are provided with this distribution that utilize
|
||||
the PostScript and image file RIPs and the sample HP printer driver.
|
||||
To add the sample DeskJet driver to the system for a printer connected
|
||||
to the parallel port, use one of the following commands:
|
||||
|
||||
Digital UNIX:
|
||||
|
||||
/usr/lib/lpadmin -p DeskJet -m deskjet.ppd -v parallel:/dev/lp0 -E
|
||||
|
||||
HP-UX:
|
||||
|
||||
/usr/lib/lpadmin -p DeskJet -m deskjet.ppd -v parallel:/dev/c2t0d0_lp -E
|
||||
|
||||
IRIX:
|
||||
|
||||
/usr/lib/lpadmin -p DeskJet -m deskjet.ppd -v parallel:/dev/plp -E
|
||||
|
||||
Linux:
|
||||
|
||||
/usr/lib/lpadmin -p DeskJet -m deskjet.ppd -v parallel:/dev/par0 -E
|
||||
/usr/lib/lpadmin -p DeskJet -m deskjet.ppd -v parallel:/dev/par1 -E
|
||||
/usr/lib/lpadmin -p DeskJet -m deskjet.ppd -v parallel:/dev/par2 -E
|
||||
|
||||
Solaris:
|
||||
|
||||
/usr/lib/lpadmin -p DeskJet -m deskjet.ppd -v parallel:/dev/bpp0 -E
|
||||
/usr/lib/lpadmin -p DeskJet -m deskjet.ppd -v parallel:/dev/ecpp0 -E
|
||||
|
||||
Similarly, for the sample LaserJet driver you can use "LaserJet" and
|
||||
"laserjet.ppd".
|
||||
|
||||
For other printers and interfaces see the CUPS System Administator's
|
||||
Manual included with this software.
|
||||
|
||||
|
||||
PRINTING FILES
|
||||
|
||||
CUPS provides both the System V "lp" and Berkeley "lpr" commands for
|
||||
printing:
|
||||
|
||||
lp filename
|
||||
lpr filename
|
||||
|
||||
Both the "lp" and "lpr" commands support printing options for the
|
||||
driver:
|
||||
|
||||
lp -omedia=A4 -oresolution=600dpi filename
|
||||
lpr -omedia=A4 -oresolution=600dpi filename
|
||||
|
||||
CUPS recognizes many types of images files as well as PostScript, HP-GL/2,
|
||||
and text files, so you can print those files directly rather than through
|
||||
an application.
|
||||
|
||||
If you have an application that generates output specifically for your
|
||||
printer then you need to use the "-oraw" or "-l" options:
|
||||
|
||||
lp -oraw filename
|
||||
lpr -l filename
|
||||
|
||||
This will prevent the filters from misinterpreting your print file.
|
||||
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
You can subscribe to the CUPS mailing list by sending a message containing
|
||||
"subscribe cups" to majordomo@cups.org. This list is provided to discuss
|
||||
problems, questions, and improvements to the CUPS software. New releases of
|
||||
CUPS are announced to this list as well.
|
||||
You can subscribe to the CUPS mailing list by sending a message
|
||||
containing "subscribe cups" to majordomo@cups.org. This list is
|
||||
provided to discuss problems, questions, and improvements to the CUPS
|
||||
software. New releases of CUPS are announced to this list as well.
|
||||
|
||||
|
||||
LEGAL STUFF
|
||||
|
||||
CUPS is Copyright 1993-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 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 GNU General Public License which is
|
||||
located in the files "LICENSE.html" and "LICENSE.txt". For commercial
|
||||
support and "binary-only" licensing information, please contact:
|
||||
CUPS is provided under the terms of the GNU General Public License
|
||||
which is located in the files "LICENSE.html" and "LICENSE.txt" (or the
|
||||
file "cups.license" for a binary distribution.) For commercial
|
||||
licensing information, please contact:
|
||||
|
||||
Attn: CUPS Licensing Information
|
||||
Easy Software Products
|
||||
44141 Airport View Drive, Suite 204
|
||||
Hollywood, Maryland 20636-3111 USA
|
||||
Attn: CUPS Licensing Information
|
||||
Easy Software Products
|
||||
44141 Airport View Drive, Suite 204
|
||||
Hollywood, Maryland 20636-3111 USA
|
||||
|
||||
Voice: +1.301.373.9603
|
||||
Email: cups-info@cups.org
|
||||
WWW: http://www.cups.org
|
||||
Voice: +1.301.373.9603
|
||||
Email: cups-info@cups.org
|
||||
WWW: http://www.cups.org
|
||||
|
||||
If you're interested in a complete, commercial printing solution for UNIX,
|
||||
check out our ESP Print software at http://www.easysw.com/print.html.
|
||||
If you're interested in a complete, commercial printing solution for
|
||||
UNIX, check out our ESP Print Pro software at:
|
||||
|
||||
http://www.easysw.com/printpro
|
||||
|
||||
+10
-7
@@ -23,6 +23,7 @@
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* main() - Send a file to the printer or server.
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -146,12 +147,10 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
|
||||
NULL, uri);
|
||||
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_NAME, "requesting-user-name",
|
||||
ippAddString(request, IPP_TAG_OPERATION, 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]));
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name", NULL, argv[3]);
|
||||
|
||||
/*
|
||||
* Handle options on the command-line...
|
||||
@@ -161,12 +160,14 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
num_options = cupsParseOptions(argv[5], 0, &options);
|
||||
|
||||
if (cupsGetOption("raw", num_options, options))
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format",
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
|
||||
NULL, "application/vnd.cups-raw");
|
||||
else
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format",
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
|
||||
NULL, "application/octet-stream");
|
||||
|
||||
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "copies", atoi(argv[4]));
|
||||
|
||||
for (i = 0; i < num_options; i ++)
|
||||
{
|
||||
/*
|
||||
@@ -279,7 +280,9 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
sprintf(buffer, "%u", ippLength(request) + (size_t)fileinfo.st_size);
|
||||
httpSetField(http, HTTP_FIELD_CONTENT_LENGTH, buffer);
|
||||
}
|
||||
|
||||
else
|
||||
httpSetField(http, HTTP_FIELD_TRANSFER_ENCODING, "chunked");
|
||||
|
||||
/*
|
||||
* Do the request...
|
||||
*/
|
||||
|
||||
+14
-11
@@ -23,6 +23,8 @@
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* main() - Parse options and commands.
|
||||
* show_jobs() - Show jobs.
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -45,7 +47,8 @@
|
||||
* Local functions...
|
||||
*/
|
||||
|
||||
static int show_jobs(http_t *, char *, char *, int, int);
|
||||
static int show_jobs(http_t *, const char *, const char *, const int,
|
||||
const int);
|
||||
|
||||
|
||||
/*
|
||||
@@ -58,7 +61,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
http_t *http; /* Connection to server */
|
||||
char *dest, /* Desired printer */
|
||||
const char *dest, /* Desired printer */
|
||||
*user; /* Desired user */
|
||||
int id, /* Desired job ID */
|
||||
interval, /* Reporting interval */
|
||||
@@ -74,7 +77,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
* Check for command-line options...
|
||||
*/
|
||||
|
||||
dest = NULL;
|
||||
dest = cupsGetDefault();
|
||||
user = NULL;
|
||||
id = 0;
|
||||
interval = 0;
|
||||
@@ -136,21 +139,21 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
|
||||
/*
|
||||
* 'show_jobs()' - Show printers.
|
||||
* 'show_jobs()' - Show jobs.
|
||||
*/
|
||||
|
||||
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 */
|
||||
show_jobs(http_t *http, /* I - HTTP connection to server */
|
||||
const char *dest, /* I - Destination */
|
||||
const char *user, /* I - User */
|
||||
const int id, /* I - Job ID */
|
||||
const 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 */
|
||||
const 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 */
|
||||
@@ -160,7 +163,7 @@ show_jobs(http_t *http, /* I - HTTP connection to server */
|
||||
jobcount, /* Number of jobs */
|
||||
rank; /* Rank of job */
|
||||
char resource[1024]; /* Resource string */
|
||||
static char *ranks[10] = /* Ranking strings */
|
||||
static const char *ranks[10] =/* Ranking strings */
|
||||
{
|
||||
"th",
|
||||
"st",
|
||||
|
||||
+3
-3
@@ -46,7 +46,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
int i; /* Looping var */
|
||||
int job_id; /* Job ID */
|
||||
const char *dest; /* Destination printer */
|
||||
char *title; /* Job title */
|
||||
const 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 */
|
||||
@@ -225,7 +225,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
if (i == 0)
|
||||
{
|
||||
fputs("lpr: stdin is empty, so no job has been sent.\n", stderr);
|
||||
fputs("lpr: standard input is empty, so no job has been sent.\n", stderr);
|
||||
return (1);
|
||||
}
|
||||
|
||||
@@ -236,7 +236,7 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
if (job_id < 1)
|
||||
{
|
||||
fprintf(stderr, "lpr: unable to print file \'%s\'.\n", argv[i]);
|
||||
fputs("lpr: unable to print standard input.\n", stderr);
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -169,7 +169,14 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
response = cupsDoRequest(http, request, "/jobs/");
|
||||
|
||||
if (response != NULL)
|
||||
{
|
||||
if (response->request.status.status_code == IPP_NOT_FOUND)
|
||||
fputs("lprm: Job or printer not found!\n", stderr);
|
||||
else if (response->request.status.status_code > IPP_OK_CONFLICT)
|
||||
fputs("lprm: Unable to cancel job(s)!\n", stderr);
|
||||
|
||||
ippDelete(response);
|
||||
}
|
||||
else
|
||||
{
|
||||
fputs("lprm: Unable to cancel job(s)!\n", stderr);
|
||||
|
||||
+9
-2
@@ -28,7 +28,8 @@ include ../Makedefs
|
||||
# Config files...
|
||||
#
|
||||
|
||||
FILES = classes.conf cupsd.conf mime.convs mime.types printers.conf
|
||||
KEEP = classes.conf cupsd.conf printers.conf
|
||||
REPLACE = mime.convs mime.types
|
||||
|
||||
#
|
||||
# Make everything...
|
||||
@@ -48,13 +49,19 @@ clean:
|
||||
|
||||
install:
|
||||
-$(MKDIR) $(SERVERROOT)/conf
|
||||
for file in $(FILES); do \
|
||||
for file in $(KEEP); do \
|
||||
if test -e $(SERVERROOT)/conf/$$file ; then \
|
||||
$(CP) $$file $(SERVERROOT)/conf/$$file.N ; \
|
||||
else \
|
||||
$(CP) $$file $(SERVERROOT)/conf ; \
|
||||
fi ; \
|
||||
done
|
||||
for file in $(REPLACE); do \
|
||||
if test -e $(SERVERROOT)/conf/$$file ; then \
|
||||
$(MV) $(SERVERROOT)/conf/$$file $(SERVERROOT)/conf/$$file.O ; \
|
||||
fi ; \
|
||||
$(CP) $$file $(SERVERROOT)/conf ; \
|
||||
done
|
||||
|
||||
#
|
||||
# End of "$Id$".
|
||||
|
||||
+3
-3
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# "$Id: mime.convs 530 1999-07-13 14:11:17Z mike $"
|
||||
# "$Id: mime.convs 575 1999-07-30 13:57:16Z mike $"
|
||||
#
|
||||
# MIME converts file for the Common UNIX Printing System (CUPS).
|
||||
#
|
||||
@@ -42,7 +42,7 @@
|
||||
#
|
||||
|
||||
#application/msword application/postscript 50 mswordtops
|
||||
#application/pdf application/postscript 50 pdftops
|
||||
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
|
||||
@@ -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 530 1999-07-13 14:11:17Z mike $".
|
||||
# End of "$Id: mime.convs 575 1999-07-30 13:57:16Z mike $".
|
||||
#
|
||||
|
||||
+4
-5
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# "$Id: mime.types 487 1999-06-30 21:07:52Z mike $"
|
||||
# "$Id: mime.types 575 1999-07-30 13:57:16Z mike $"
|
||||
#
|
||||
# MIME types file for the Common UNIX Printing System (CUPS).
|
||||
#
|
||||
@@ -92,10 +92,9 @@ image/x-sgi-rgb rgb sgi bw icon short(0,474)
|
||||
image/x-xbitmap xbm
|
||||
image/x-xpixmap xpm ascii(0,1024) + string(3,"XPM")
|
||||
image/x-xwindowdump xwd
|
||||
|
||||
# TODO: Add Sun Raster, Alias, SoftImage, GIMP??? files
|
||||
|
||||
image/x-sun-raster ras
|
||||
|
||||
# TODO: Add Alias, SoftImage, GIMP??? files
|
||||
#image/x-alias pix
|
||||
#image/x-softimage
|
||||
#image/x-gimp-xcf xcf xcf.gz
|
||||
@@ -119,5 +118,5 @@ application/vnd.cups-raster string(0,"RaSt") string(0,"tSaR")
|
||||
application/vnd.cups-raw
|
||||
|
||||
#
|
||||
# End of "$Id: mime.types 487 1999-06-30 21:07:52Z mike $".
|
||||
# End of "$Id: mime.types 575 1999-07-30 13:57:16Z mike $".
|
||||
#
|
||||
|
||||
+18
-2
@@ -133,15 +133,18 @@ 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)
|
||||
|
||||
NETLIBS=""
|
||||
AC_SUBST(NETLIBS)
|
||||
AC_CHECK_LIB(socket,socket,
|
||||
if test "$uname" != "IRIX"; then
|
||||
LIBS="$LIBS -lsocket"
|
||||
NETLIBS="-lsocket"
|
||||
else
|
||||
echo "Not using -lsocket since you are running IRIX."
|
||||
fi)
|
||||
AC_CHECK_LIB(nsl,gethostbyaddr,
|
||||
if test "$uname" != "IRIX"; then
|
||||
LIBS="$LIBS -lnsl"
|
||||
NETLIBS="$NETLIBS -lnsl"
|
||||
else
|
||||
echo "Not using -lnsl since you are running IRIX."
|
||||
fi)
|
||||
@@ -238,6 +241,19 @@ if test "$DSO" != ":"; then
|
||||
# a single DSO rather than a bunch...
|
||||
DSOLIBS="\$(LIBJPEG) \$(LIBPNG) \$(LIBTIFF) \$(LIBZ)"
|
||||
IMGLIBS=""
|
||||
|
||||
# The HP-UX and Solaris run-time linkers are EXTREMELY stupid when
|
||||
# it comes to deciding where to find a DSO. Add linker options to
|
||||
# tell them where to find the DSO (usually in /usr/lib... duh!)
|
||||
case $uname in
|
||||
HP-UX*)
|
||||
LDFLAGS="$LDFLAGS -Wl,+b,$libdir,+fb"
|
||||
;;
|
||||
SunOS*)
|
||||
# Solaris
|
||||
LDFLAGS="-R$libdir"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
DSOLIBS=""
|
||||
IMGLIBS="\$(LIBJPEG) \$(LIBPNG) \$(LIBTIFF) \$(LIBZ)"
|
||||
|
||||
-345
@@ -1,345 +0,0 @@
|
||||
#
|
||||
# "$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 $".
|
||||
#
|
||||
+64
-16
@@ -4,6 +4,12 @@
|
||||
#
|
||||
# Startup/shutdown script for the Common UNIX Printing System (CUPS).
|
||||
#
|
||||
# Linux chkconfig stuff:
|
||||
#
|
||||
# chkconfig: 2345 60 60
|
||||
# description: 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
|
||||
@@ -23,7 +29,26 @@
|
||||
# WWW: http://www.cups.org
|
||||
#
|
||||
|
||||
# See if the CUPS daemon is running, and if so stop it...
|
||||
# See what program to use for configuration stuff...
|
||||
case "`uname`" in
|
||||
IRIX*)
|
||||
IS_ON=/sbin/chkconfig
|
||||
;;
|
||||
|
||||
*)
|
||||
IS_ON=/bin/true
|
||||
;;
|
||||
esac
|
||||
|
||||
# The verbose flag controls the printing of the names of
|
||||
# daemons as they are started.
|
||||
if $IS_ON verbose; then
|
||||
ECHO=echo
|
||||
else
|
||||
ECHO=:
|
||||
fi
|
||||
|
||||
# See if the CUPS server is running...
|
||||
case "`uname`" in
|
||||
IRIX* | HP-UX | SunOS)
|
||||
pid=`ps -e | awk '{print $1,$4}' | grep cupsd | awk '{print $1}'`
|
||||
@@ -39,26 +64,49 @@ case "`uname`" in
|
||||
;;
|
||||
esac
|
||||
|
||||
# Start or stop the CUPS server based upon the first argument to the script.
|
||||
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
|
||||
;;
|
||||
start | restart | reload)
|
||||
if test "$pid" != ""; then
|
||||
if $IS_ON cups; then
|
||||
kill -HUP $pid
|
||||
$ECHO "cups: scheduler restarted."
|
||||
else
|
||||
kill $pid
|
||||
$ECHO "cups: scheduler stopped."
|
||||
fi
|
||||
else
|
||||
if $IS_ON cups; then
|
||||
/usr/sbin/cupsd 2>&1 >/dev/null &
|
||||
$ECHO "cups: scheduler started."
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
|
||||
stop)
|
||||
if test "$pid" != ""; then
|
||||
echo "Stopping CUPS scheduler..."
|
||||
kill $pid
|
||||
sleep 1
|
||||
fi
|
||||
;;
|
||||
if test "$pid" != ""; then
|
||||
kill $pid
|
||||
$ECHO "cups: scheduler stopped."
|
||||
fi
|
||||
;;
|
||||
|
||||
status)
|
||||
if test "$pid" != ""; then
|
||||
echo "cups: Scheduler is running."
|
||||
else
|
||||
echo "cups: Scheduler is not running."
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: cups {reload|restart|start|status|stop}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
|
||||
#
|
||||
# End of "$Id$".
|
||||
#
|
||||
|
||||
-307
@@ -1,307 +0,0 @@
|
||||
#
|
||||
# "$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 $".
|
||||
#
|
||||
-149
@@ -1,149 +0,0 @@
|
||||
#
|
||||
# "$Id$"
|
||||
#
|
||||
# Support library Makefile 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
|
||||
#
|
||||
|
||||
include ../Makedefs
|
||||
|
||||
#
|
||||
# Object files...
|
||||
#
|
||||
|
||||
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 usersys.o \
|
||||
util.o
|
||||
|
||||
#
|
||||
# Header files to install...
|
||||
#
|
||||
|
||||
HEADERS = cups.h http.h ipp.h language.h mime.h ppd.h raster.h
|
||||
|
||||
#
|
||||
# Targets in this directory...
|
||||
#
|
||||
|
||||
TARGETS = $(LIBCUPS) testmime testppd testhttp
|
||||
|
||||
#
|
||||
# Make all targets...
|
||||
#
|
||||
|
||||
all: $(TARGETS)
|
||||
|
||||
#
|
||||
# Remove object and target files...
|
||||
#
|
||||
|
||||
clean:
|
||||
rm -f $(OBJS) $(TARGETS)
|
||||
|
||||
#
|
||||
# Install object and target files...
|
||||
#
|
||||
|
||||
install: all
|
||||
-$(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) $@
|
||||
|
||||
#
|
||||
# cups_C.h - the default POSIX locale that is compiled in.
|
||||
#
|
||||
|
||||
cups_C.h: ../locale/C/cups_C
|
||||
echo Generating $@...
|
||||
$(RM) cups_C.h
|
||||
$(AWK) '{print "\"" $$0 "\","}' < ../locale/C/cups_C > cups_C.h
|
||||
|
||||
emit.o: ppd.h ../config.h ../Makedefs
|
||||
filter.o: mime.h ../config.h ../Makedefs
|
||||
http.o: http.h ipp.h string.h ../config.h ../Makedefs
|
||||
ipp.o: http.h ipp.h ../config.h ../Makedefs
|
||||
language.o: cups_C.h language.h string.h ../config.h ../Makedefs
|
||||
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: 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 (dependency on static CUPS library is intentional)
|
||||
#
|
||||
|
||||
testhttp: testhttp.o libcups.a
|
||||
echo Linking $@...
|
||||
$(CC) $(LDFLAGS) -o $@ testhttp.o libcups.a $(LIBS)
|
||||
|
||||
testhttp.o: http.h ../Makedefs
|
||||
|
||||
#
|
||||
# testmime (dependency on static CUPS library is intentional)
|
||||
#
|
||||
|
||||
testmime: testmime.o libcups.a
|
||||
echo Linking $@...
|
||||
$(CC) $(LDFLAGS) -o $@ testmime.o libcups.a $(LIBS)
|
||||
|
||||
testmime.o: mime.h ../Makedefs
|
||||
|
||||
#
|
||||
# testppd (dependency on static CUPS library is intentional)
|
||||
#
|
||||
|
||||
testppd: testppd.o libcups.a
|
||||
echo Linking $@...
|
||||
$(CC) $(LDFLAGS) -o $@ testppd.o libcups.a $(LIBS)
|
||||
|
||||
testppd.o: ppd.h ../Makedefs
|
||||
|
||||
#
|
||||
# End of "$Id$".
|
||||
#
|
||||
-143
@@ -1,143 +0,0 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* API definitions 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
|
||||
*/
|
||||
|
||||
#ifndef _CUPS_CUPS_H_
|
||||
# define _CUPS_CUPS_H_
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
# include <cups/ipp.h>
|
||||
# include <cups/mime.h>
|
||||
# include <cups/ppd.h>
|
||||
|
||||
|
||||
/*
|
||||
* C++ magic...
|
||||
*/
|
||||
|
||||
# ifdef __cplusplus
|
||||
extern "C" {
|
||||
# endif /* __cplusplus */
|
||||
|
||||
|
||||
/*
|
||||
* Constants...
|
||||
*/
|
||||
|
||||
# define CUPS_VERSION 1.0
|
||||
# define CUPS_DATE_ANY -1
|
||||
|
||||
|
||||
/*
|
||||
* Types and structures...
|
||||
*/
|
||||
|
||||
typedef unsigned cups_ptype_t; /**** Printer Type/Capability Bits ****/
|
||||
enum /* Not a typedef'd enum so we can OR */
|
||||
{
|
||||
CUPS_PRINTER_LOCAL = 0x0000, /* Local printer or class */
|
||||
CUPS_PRINTER_CLASS = 0x0001, /* Printer class */
|
||||
CUPS_PRINTER_REMOTE = 0x0002, /* Remote printer or class */
|
||||
CUPS_PRINTER_BW = 0x0004, /* Can do B&W printing */
|
||||
CUPS_PRINTER_COLOR = 0x0008, /* Can do color printing */
|
||||
CUPS_PRINTER_DUPLEX = 0x0010, /* Can do duplexing */
|
||||
CUPS_PRINTER_STAPLE = 0x0020, /* Can staple output */
|
||||
CUPS_PRINTER_COPIES = 0x0040, /* Can do copies */
|
||||
CUPS_PRINTER_COLLATE = 0x0080, /* Can collage copies */
|
||||
CUPS_PRINTER_PUNCH = 0x0100, /* Can punch output */
|
||||
CUPS_PRINTER_COVER = 0x0200, /* Can cover output */
|
||||
CUPS_PRINTER_BIND = 0x0400, /* Can bind output */
|
||||
CUPS_PRINTER_SORT = 0x0800, /* Can sort output */
|
||||
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_IMPLICIT = 0x10000, /* Implicit class */
|
||||
CUPS_PRINTER_OPTIONS = 0xfffc /* ~(CLASS | REMOTE | IMPLICIT) */
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Types & structures...
|
||||
*/
|
||||
|
||||
typedef struct /**** Printer Information ****/
|
||||
{
|
||||
char name[IPP_MAX_NAME], /* Printer or class name */
|
||||
uri[HTTP_MAX_URI]; /* Universal resource identifier */
|
||||
unsigned char info[IPP_MAX_NAME], /* Printer or class info/description */
|
||||
location[IPP_MAX_NAME]; /* Location text */
|
||||
ipp_pstate_t state; /* Printer state */
|
||||
unsigned char message[IPP_MAX_NAME]; /* State text */
|
||||
cups_ptype_t type; /* Printer type/capability codes */
|
||||
} cups_browse_t;
|
||||
|
||||
typedef struct /**** Printer Options ****/
|
||||
{
|
||||
char *name; /* Name of option */
|
||||
char *value; /* Value of option */
|
||||
} cups_option_t;
|
||||
|
||||
|
||||
/*
|
||||
* Functions...
|
||||
*/
|
||||
|
||||
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 const char *cupsGetDefault(void);
|
||||
extern const char *cupsGetPPD(const char *printer);
|
||||
extern int cupsGetPrinters(char ***printers);
|
||||
extern int cupsPrintFile(const char *printer, const char *filename,
|
||||
const char *title, 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 const char *cupsGetOption(const char *name, int num_options,
|
||||
cups_option_t *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 */
|
||||
|
||||
#endif /* !_CUPS_CUPS_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
@@ -1,57 +0,0 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* Debugging macros 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
|
||||
*/
|
||||
|
||||
#ifndef _CUPS_DEBUG_H_
|
||||
# define _CUPS_DEBUG_H_
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
# include <stdio.h>
|
||||
|
||||
/*
|
||||
* The debug macros are used if you compile with DEBUG defined.
|
||||
*
|
||||
* Usage:
|
||||
*
|
||||
* DEBUG_puts("string")
|
||||
* DEBUG_printf(("format string", arg, arg, ...));
|
||||
*
|
||||
* Note the extra parenthesis around the DEBUG_printf macro...
|
||||
*/
|
||||
|
||||
# ifdef DEBUG
|
||||
# define DEBUG_puts(x) puts(x)
|
||||
# define DEBUG_printf(x) printf x
|
||||
# else
|
||||
# define DEBUG_puts(x)
|
||||
# define DEBUG_printf(x)
|
||||
# endif /* DEBUG */
|
||||
|
||||
#endif /* !_CUPS_DEBUG_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
-301
@@ -1,301 +0,0 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* PPD code emission routines 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
|
||||
*
|
||||
* PostScript is a trademark of Adobe Systems, Inc.
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* ppdEmit() - Emit code for marked options to a file.
|
||||
* ppdEmitFd() - Emit code for marked options to a file.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include "ppd.h"
|
||||
#include <stdlib.h>
|
||||
#include "string.h"
|
||||
|
||||
#if defined(WIN32) || defined(__EMX__)
|
||||
# include <io.h>
|
||||
#else
|
||||
# include <unistd.h>
|
||||
#endif /* WIN32 || __EMX__ */
|
||||
|
||||
|
||||
/*
|
||||
* Local functions...
|
||||
*/
|
||||
|
||||
static int ppd_sort(ppd_choice_t **c1, ppd_choice_t **c2);
|
||||
static int ppd_collect(ppd_file_t *ppd, ppd_section_t section,
|
||||
ppd_choice_t ***choices);
|
||||
|
||||
|
||||
/*
|
||||
* 'ppdEmit()' - Emit code for marked options to a file.
|
||||
*/
|
||||
|
||||
int /* O - 0 on success, -1 on failure */
|
||||
ppdEmit(ppd_file_t *ppd, /* I - PPD file record */
|
||||
FILE *fp, /* I - File to write to */
|
||||
ppd_section_t section) /* I - Section to write */
|
||||
{
|
||||
int i, /* Looping var */
|
||||
count; /* Number of choices */
|
||||
ppd_choice_t **choices; /* Choices */
|
||||
ppd_size_t *size; /* Custom page size */
|
||||
|
||||
|
||||
if ((count = ppd_collect(ppd, section, &choices)) == 0)
|
||||
return (0);
|
||||
|
||||
for (i = 0; i < count; i ++)
|
||||
if (section != PPD_ORDER_EXIT && section != PPD_ORDER_JCL)
|
||||
{
|
||||
/*
|
||||
* Send DSC comments with option...
|
||||
*/
|
||||
|
||||
if (fprintf(fp, "%%%%BeginFeature: %s %s\n",
|
||||
((ppd_option_t *)choices[i]->option)->keyword,
|
||||
choices[i]->choice) < 0)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if (strcmp(((ppd_option_t *)choices[i]->option)->keyword, "PageSize") == 0 &&
|
||||
strcmp(choices[i]->choice, "Custom") == 0)
|
||||
{
|
||||
/*
|
||||
* Variable size; write out standard size options (this should
|
||||
* eventually be changed to use the parameter positions defined
|
||||
* in the PPD file...)
|
||||
*/
|
||||
|
||||
size = ppdPageSize(ppd, "Custom");
|
||||
fprintf(fp, "%.0f %.0f 0 0 0\n", size->width, size->length);
|
||||
|
||||
if (choices[i]->code == NULL)
|
||||
{
|
||||
/*
|
||||
* This can happen with certain buggy PPD files that don't include
|
||||
* a CustomPageSize command sequence... We just use a generic
|
||||
* Level 2 command sequence...
|
||||
*/
|
||||
|
||||
fputs("pop pop pop\n", fp);
|
||||
fputs("<</PageSize[7 -2 roll]/ImagingBBox null>>setpagedevice\n", fp);
|
||||
}
|
||||
}
|
||||
|
||||
if (choices[i]->code != NULL && choices[i]->code[0] != '\0')
|
||||
{
|
||||
if (fputs(choices[i]->code, fp) < 0)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if (choices[i]->code[strlen(choices[i]->code) - 1] != '\n')
|
||||
putc('\n', fp);
|
||||
}
|
||||
|
||||
if (fputs("%%EndFeature\n", fp) < 0)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
else if (fputs(choices[i]->code, fp) < 0)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
free(choices);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'ppdEmitFd()' - Emit code for marked options to a file.
|
||||
*/
|
||||
|
||||
int /* O - 0 on success, -1 on failure */
|
||||
ppdEmitFd(ppd_file_t *ppd, /* I - PPD file record */
|
||||
int fd, /* I - File to write to */
|
||||
ppd_section_t section) /* I - Section to write */
|
||||
{
|
||||
int i, /* Looping var */
|
||||
count; /* Number of choices */
|
||||
ppd_choice_t **choices; /* Choices */
|
||||
char buf[1024]; /* Output buffer for feature */
|
||||
|
||||
|
||||
if ((count = ppd_collect(ppd, section, &choices)) == 0)
|
||||
return (0);
|
||||
|
||||
for (i = 0; i < count; i ++)
|
||||
if (section != PPD_ORDER_EXIT && section != PPD_ORDER_JCL)
|
||||
{
|
||||
/*
|
||||
* Send DSC comments with option...
|
||||
*/
|
||||
|
||||
sprintf(buf, "%%%%BeginFeature: %s %s\n",
|
||||
((ppd_option_t *)choices[i]->option)->keyword, choices[i]->choice);
|
||||
|
||||
if (write(fd, buf, strlen(buf)) < 1)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if (write(fd, choices[i]->code, strlen(choices[i]->code)) < 1)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if (write(fd, "%%EndFeature\n", 13) < 1)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
else if (write(fd, choices[i]->code, strlen(choices[i]->code)) < 1)
|
||||
{
|
||||
free(choices);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
free(choices);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'ppd_sort()' - Sort options by ordering numbers...
|
||||
*/
|
||||
|
||||
static int /* O - -1 if c1 < c2, 0 if equal, 1 otherwise */
|
||||
ppd_sort(ppd_choice_t **c1, /* I - First choice */
|
||||
ppd_choice_t **c2) /* I - Second choice */
|
||||
{
|
||||
if (((ppd_option_t *)(*c1)->option)->order < ((ppd_option_t *)(*c2)->option)->order)
|
||||
return (-1);
|
||||
else if (((ppd_option_t *)(*c1)->option)->order > ((ppd_option_t *)(*c2)->option)->order)
|
||||
return (1);
|
||||
else
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'ppd_collect()' - Collect all marked options that reside in the specified
|
||||
* section.
|
||||
*/
|
||||
|
||||
static int /* O - Number of options marked */
|
||||
ppd_collect(ppd_file_t *ppd, /* I - PPD file data */
|
||||
ppd_section_t section, /* I - Section to collect */
|
||||
ppd_choice_t ***choices) /* O - Pointers to choices */
|
||||
{
|
||||
int i, j, k, m; /* Looping vars */
|
||||
ppd_group_t *g, /* Current group */
|
||||
*sg; /* Current sub-group */
|
||||
ppd_option_t *o; /* Current option */
|
||||
ppd_choice_t *c; /* Current choice */
|
||||
int count; /* Number of choices collected */
|
||||
ppd_choice_t **collect; /* Collected choices */
|
||||
|
||||
|
||||
if (ppd == NULL)
|
||||
return (0);
|
||||
|
||||
/*
|
||||
* Allocate memory for up to 1000 selected choices...
|
||||
*/
|
||||
|
||||
count = 0;
|
||||
collect = calloc(sizeof(ppd_choice_t *), 1000);
|
||||
|
||||
/*
|
||||
* Loop through all options and add choices as needed...
|
||||
*/
|
||||
|
||||
for (i = ppd->num_groups, g = ppd->groups; i > 0; i --, g ++)
|
||||
{
|
||||
for (j = g->num_options, o = g->options; j > 0; j --, o ++)
|
||||
if (o->section == section)
|
||||
for (k = o->num_choices, c = o->choices; k > 0; k --, c ++)
|
||||
if (c->marked && count < 1000)
|
||||
{
|
||||
collect[count] = c;
|
||||
count ++;
|
||||
}
|
||||
|
||||
for (j = g->num_subgroups, sg = g->subgroups; j > 0; j --, sg ++)
|
||||
for (k = sg->num_options, o = sg->options; k > 0; k --, o ++)
|
||||
if (o->section == section)
|
||||
for (m = o->num_choices, c = o->choices; m > 0; m --, c ++)
|
||||
if (c->marked && count < 1000)
|
||||
{
|
||||
collect[count] = c;
|
||||
count ++;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* If we have more than 1 marked choice, sort them...
|
||||
*/
|
||||
|
||||
if (count > 1)
|
||||
qsort(collect, count, sizeof(ppd_choice_t *),
|
||||
(int (*)(const void *, const void *))ppd_sort);
|
||||
|
||||
/*
|
||||
* Return the array and number of choices; if 0, free the array since
|
||||
* it isn't needed.
|
||||
*/
|
||||
|
||||
if (count > 0)
|
||||
{
|
||||
*choices = collect;
|
||||
return (count);
|
||||
}
|
||||
else
|
||||
{
|
||||
*choices = NULL;
|
||||
free(collect);
|
||||
return (0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
-297
@@ -1,297 +0,0 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* File type conversion routines 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
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* mimeAddFilter() - Add a filter to the current MIME database.
|
||||
* mimeFilter() - Find the fastest way to convert from one type to another.
|
||||
* compare() - Compare two filter types...
|
||||
* lookup() - Lookup a filter...
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#include "string.h"
|
||||
#include "mime.h"
|
||||
|
||||
|
||||
/*
|
||||
* Local functions...
|
||||
*/
|
||||
|
||||
static int compare(mime_filter_t *, mime_filter_t *);
|
||||
static mime_filter_t *lookup(mime_t *, mime_type_t *, mime_type_t *);
|
||||
|
||||
|
||||
/*
|
||||
* 'mimeAddFilter()' - Add a filter to the current MIME database.
|
||||
*/
|
||||
|
||||
mime_filter_t * /* O - New filter */
|
||||
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 */
|
||||
const char *filter) /* I - Filter program to run */
|
||||
{
|
||||
mime_filter_t *temp; /* New filter */
|
||||
|
||||
|
||||
/*
|
||||
* Range-check the input...
|
||||
*/
|
||||
|
||||
if (mime == NULL || src == NULL || dst == NULL || filter == NULL)
|
||||
return (NULL);
|
||||
|
||||
if (strlen(filter) > (MIME_MAX_FILTER - 1))
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* See if we already have an existing filter for the given source and
|
||||
* destination...
|
||||
*/
|
||||
|
||||
if ((temp = lookup(mime, src, dst)) != NULL)
|
||||
{
|
||||
/*
|
||||
* Yup, does the existing filter have a higher cost? If so, copy the
|
||||
* filter and cost to the existing filter entry and return it...
|
||||
*/
|
||||
|
||||
if (temp->cost > cost)
|
||||
{
|
||||
temp->cost = cost;
|
||||
strcpy(temp->filter, filter);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Nope, add a new one...
|
||||
*/
|
||||
|
||||
if (mime->num_filters == 0)
|
||||
temp = malloc(sizeof(mime_filter_t));
|
||||
else
|
||||
temp = realloc(mime->filters, sizeof(mime_filter_t) * (mime->num_filters + 1));
|
||||
|
||||
if (temp == NULL)
|
||||
return (NULL);
|
||||
|
||||
mime->filters = temp;
|
||||
temp += mime->num_filters;
|
||||
mime->num_filters ++;
|
||||
|
||||
/*
|
||||
* Copy the information over and sort if necessary...
|
||||
*/
|
||||
|
||||
temp->src = src;
|
||||
temp->dst = dst;
|
||||
temp->cost = cost;
|
||||
strcpy(temp->filter, filter);
|
||||
|
||||
if (mime->num_filters > 1)
|
||||
qsort(mime->filters, mime->num_filters, sizeof(mime_filter_t),
|
||||
(int (*)(const void *, const void *))compare);
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the new/updated filter...
|
||||
*/
|
||||
|
||||
return (temp);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mimeFilter()' - Find the fastest way to convert from one type to another.
|
||||
*/
|
||||
|
||||
mime_filter_t * /* O - Array of filters to run */
|
||||
mimeFilter(mime_t *mime, /* I - MIME database */
|
||||
mime_type_t *src, /* I - Source file type */
|
||||
mime_type_t *dst, /* I - Destination file type */
|
||||
int *num_filters) /* O - Number of filters to run */
|
||||
{
|
||||
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 */
|
||||
*current, /* Current filter */
|
||||
*filters; /* Filters to use */
|
||||
|
||||
|
||||
/*
|
||||
* Range-check the input...
|
||||
*/
|
||||
|
||||
if (mime == NULL || src == NULL || dst == NULL || num_filters == NULL)
|
||||
return (NULL);
|
||||
|
||||
*num_filters = 0;
|
||||
|
||||
/*
|
||||
* See if there is a filter that can convert the files directly...
|
||||
*/
|
||||
|
||||
if ((temp = lookup(mime, src, dst)) != NULL)
|
||||
{
|
||||
/*
|
||||
* Got a direct filter!
|
||||
*/
|
||||
|
||||
if ((filters = (mime_filter_t *)malloc(sizeof(mime_filter_t))) == NULL)
|
||||
return (NULL);
|
||||
|
||||
memcpy(filters, temp, sizeof(mime_filter_t));
|
||||
*num_filters = 1;
|
||||
return (filters);
|
||||
}
|
||||
|
||||
/*
|
||||
* OK, now look for filters from the source type to any other type...
|
||||
*/
|
||||
|
||||
mincost = 9999999;
|
||||
mintemp = NULL;
|
||||
|
||||
for (i = mime->num_filters, current = mime->filters; i > 0; i --, current ++)
|
||||
if (current->src == src)
|
||||
{
|
||||
/*
|
||||
* See if we have any filters that can convert from the destination type
|
||||
* of this filter to the final type...
|
||||
*/
|
||||
|
||||
if ((temp = mimeFilter(mime, current->dst, dst, &num_temp)) == NULL)
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Found a match; see if this one is less costly than the last (if
|
||||
* any...)
|
||||
*/
|
||||
|
||||
for (j = 0, cost = 0; j < num_temp; j ++)
|
||||
cost += temp->cost;
|
||||
|
||||
if (cost < mincost)
|
||||
{
|
||||
if (mintemp != NULL)
|
||||
free(mintemp);
|
||||
|
||||
mincost = cost;
|
||||
mintemp = temp;
|
||||
num_mintemp = num_temp;
|
||||
mincurrent = current;
|
||||
}
|
||||
else
|
||||
free(temp);
|
||||
}
|
||||
|
||||
if (mintemp != NULL)
|
||||
{
|
||||
/*
|
||||
* Hey, we got a match! Add the current filter to the beginning of the
|
||||
* filter list...
|
||||
*/
|
||||
|
||||
filters = (mime_filter_t *)realloc(mintemp, sizeof(mime_filter_t) *
|
||||
(num_mintemp + 1));
|
||||
|
||||
if (filters == NULL)
|
||||
{
|
||||
*num_filters = 0;
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
memmove(filters + 1, filters, num_mintemp * sizeof(mime_filter_t));
|
||||
memcpy(filters, mincurrent, sizeof(mime_filter_t));
|
||||
|
||||
*num_filters = num_mintemp + 1;
|
||||
|
||||
return (filters);
|
||||
}
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'compare()' - Compare two filter types...
|
||||
*/
|
||||
|
||||
static int /* O - Comparison result */
|
||||
compare(mime_filter_t *f0, /* I - First filter */
|
||||
mime_filter_t *f1) /* I - Second filter */
|
||||
{
|
||||
int i; /* Result of comparison */
|
||||
|
||||
|
||||
if ((i = strcmp(f0->src->super, f1->src->super)) == 0)
|
||||
if ((i = strcmp(f0->src->type, f1->src->type)) == 0)
|
||||
if ((i = strcmp(f0->dst->super, f1->dst->super)) == 0)
|
||||
i = strcmp(f0->dst->type, f1->dst->type);
|
||||
|
||||
return (i);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'lookup()' - Lookup a filter...
|
||||
*/
|
||||
|
||||
static mime_filter_t * /* O - Filter for src->dst */
|
||||
lookup(mime_t *mime, /* I - MIME database */
|
||||
mime_type_t *src, /* I - Source type */
|
||||
mime_type_t *dst) /* I - Destination type */
|
||||
{
|
||||
mime_filter_t key; /* Key record for filter search */
|
||||
|
||||
|
||||
if (mime->num_filters == 0)
|
||||
return (NULL);
|
||||
|
||||
key.src = src;
|
||||
key.dst = dst;
|
||||
|
||||
return ((mime_filter_t *)bsearch(&key, mime->filters, mime->num_filters,
|
||||
sizeof(mime_filter_t),
|
||||
(int (*)(const void *, const void *))compare));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
-1375
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
-290
@@ -1,290 +0,0 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* Hyper-Text Transport Protocol definitions 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
|
||||
*/
|
||||
|
||||
#ifndef _CUPS_HTTP_H_
|
||||
# define _CUPS_HTTP_H_
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
# include <string.h>
|
||||
# include <time.h>
|
||||
# if defined(WIN32) || defined(__EMX__)
|
||||
# include <winsock.h>
|
||||
# else
|
||||
# include <unistd.h>
|
||||
# include <sys/time.h>
|
||||
# include <sys/types.h>
|
||||
# include <sys/socket.h>
|
||||
# include <netdb.h>
|
||||
# include <netinet/in.h>
|
||||
# include <arpa/inet.h>
|
||||
# include <netinet/in_systm.h>
|
||||
# include <netinet/ip.h>
|
||||
# include <netinet/tcp.h>
|
||||
# endif /* WIN32 || __EMX__ */
|
||||
|
||||
|
||||
/*
|
||||
* C++ magic...
|
||||
*/
|
||||
|
||||
# ifdef __cplusplus
|
||||
extern "C" {
|
||||
# endif /* __cplusplus */
|
||||
|
||||
|
||||
/*
|
||||
* Limits...
|
||||
*/
|
||||
|
||||
# define HTTP_MAX_URI 1024 /* Max length of URI string */
|
||||
# define HTTP_MAX_HOST 256 /* Max length of hostname string */
|
||||
# define HTTP_MAX_BUFFER 2048 /* Max length of data buffer */
|
||||
# define HTTP_MAX_VALUE 256 /* Max header field value length */
|
||||
|
||||
|
||||
/*
|
||||
* HTTP state values...
|
||||
*/
|
||||
|
||||
typedef enum /* States are server-oriented */
|
||||
{
|
||||
HTTP_WAITING, /* Waiting for command */
|
||||
HTTP_OPTIONS, /* OPTIONS command, waiting for blank line */
|
||||
HTTP_GET, /* GET command, waiting for blank line */
|
||||
HTTP_GET_SEND, /* GET command, sending data */
|
||||
HTTP_HEAD, /* HEAD command, waiting for blank line */
|
||||
HTTP_POST, /* POST command, waiting for blank line */
|
||||
HTTP_POST_RECV, /* POST command, receiving data */
|
||||
HTTP_POST_SEND, /* POST command, sending data */
|
||||
HTTP_PUT, /* PUT command, waiting for blank line */
|
||||
HTTP_PUT_RECV, /* PUT command, receiving data */
|
||||
HTTP_DELETE, /* DELETE command, waiting for blank line */
|
||||
HTTP_TRACE, /* TRACE command, waiting for blank line */
|
||||
HTTP_CLOSE, /* CLOSE command, waiting for blank line */
|
||||
HTTP_STATUS /* Command complete, sending status */
|
||||
} http_state_t;
|
||||
|
||||
|
||||
/*
|
||||
* HTTP version numbers...
|
||||
*/
|
||||
|
||||
typedef enum
|
||||
{
|
||||
HTTP_0_9 = 9, /* HTTP/0.9 */
|
||||
HTTP_1_0 = 100, /* HTTP/1.0 */
|
||||
HTTP_1_1 = 101 /* HTTP/1.1 */
|
||||
} http_version_t;
|
||||
|
||||
|
||||
/*
|
||||
* HTTP keep-alive values...
|
||||
*/
|
||||
|
||||
typedef enum
|
||||
{
|
||||
HTTP_KEEPALIVE_OFF = 0,
|
||||
HTTP_KEEPALIVE_ON
|
||||
} http_keepalive_t;
|
||||
|
||||
|
||||
/*
|
||||
* HTTP transfer encoding values...
|
||||
*/
|
||||
|
||||
typedef enum
|
||||
{
|
||||
HTTP_ENCODE_LENGTH, /* Data is sent with Content-Length */
|
||||
HTTP_ENCODE_CHUNKED /* Data is chunked */
|
||||
} http_encoding_t;
|
||||
|
||||
|
||||
/*
|
||||
* HTTP status codes...
|
||||
*/
|
||||
|
||||
typedef enum
|
||||
{
|
||||
HTTP_ERROR = -1, /* An error response from httpXxxx() */
|
||||
|
||||
HTTP_CONTINUE = 100, /* Everything OK, keep going... */
|
||||
|
||||
HTTP_OK = 200, /* OPTIONS/GET/HEAD/POST/TRACE command was successful */
|
||||
HTTP_CREATED, /* PUT command was successful */
|
||||
HTTP_ACCEPTED, /* DELETE command was successful */
|
||||
HTTP_NOT_AUTHORITATIVE, /* Information isn't authoritative */
|
||||
HTTP_NO_CONTENT, /* Successful command, no new data */
|
||||
HTTP_RESET_CONTENT, /* Content was reset/recreated */
|
||||
HTTP_PARTIAL_CONTENT, /* Only a partial file was recieved/sent */
|
||||
|
||||
HTTP_MULTIPLE_CHOICES = 300, /* Multiple files match request */
|
||||
HTTP_MOVED_PERMANENTLY, /* Document has moved permanently */
|
||||
HTTP_MOVED_TEMPORARILY, /* Document has moved temporarily */
|
||||
HTTP_SEE_OTHER, /* See this other link... */
|
||||
HTTP_NOT_MODIFIED, /* File not modified */
|
||||
HTTP_USE_PROXY, /* Must use a proxy to access this URI */
|
||||
|
||||
HTTP_BAD_REQUEST = 400, /* Bad request */
|
||||
HTTP_UNAUTHORIZED, /* Unauthorized to access host */
|
||||
HTTP_PAYMENT_REQUIRED, /* Payment required */
|
||||
HTTP_FORBIDDEN, /* Forbidden to access this URI */
|
||||
HTTP_NOT_FOUND, /* URI was not found */
|
||||
HTTP_METHOD_NOT_ALLOWED, /* Method is not allowed */
|
||||
HTTP_NOT_ACCEPTABLE, /* Not Acceptable */
|
||||
HTTP_PROXY_AUTHENTICATION, /* Proxy Authentication is Required */
|
||||
HTTP_REQUEST_TIMEOUT, /* Request timed out */
|
||||
HTTP_CONFLICT, /* Request is self-conflicting */
|
||||
HTTP_GONE, /* Server has gone away */
|
||||
HTTP_LENGTH_REQUIRED, /* A content length or encoding is required */
|
||||
HTTP_PRECONDITION, /* Precondition failed */
|
||||
HTTP_REQUEST_TOO_LARGE, /* Request entity too large */
|
||||
HTTP_URI_TOO_LONG, /* URI too long */
|
||||
HTTP_UNSUPPORTED_MEDIATYPE, /* The requested media type is unsupported */
|
||||
|
||||
HTTP_SERVER_ERROR = 500, /* Internal server error */
|
||||
HTTP_NOT_IMPLEMENTED, /* Feature not implemented */
|
||||
HTTP_BAD_GATEWAY, /* Bad gateway */
|
||||
HTTP_SERVICE_UNAVAILABLE, /* Service is unavailable */
|
||||
HTTP_GATEWAY_TIMEOUT, /* Gateway connection timed out */
|
||||
HTTP_NOT_SUPPORTED /* HTTP version not supported */
|
||||
} http_status_t;
|
||||
|
||||
|
||||
/*
|
||||
* HTTP field names...
|
||||
*/
|
||||
|
||||
typedef enum
|
||||
{
|
||||
HTTP_FIELD_UNKNOWN = -1,
|
||||
HTTP_FIELD_ACCEPT_LANGUAGE,
|
||||
HTTP_FIELD_ACCEPT_RANGES,
|
||||
HTTP_FIELD_AUTHORIZATION,
|
||||
HTTP_FIELD_CONNECTION,
|
||||
HTTP_FIELD_CONTENT_ENCODING,
|
||||
HTTP_FIELD_CONTENT_LANGUAGE,
|
||||
HTTP_FIELD_CONTENT_LENGTH,
|
||||
HTTP_FIELD_CONTENT_LOCATION,
|
||||
HTTP_FIELD_CONTENT_MD5,
|
||||
HTTP_FIELD_CONTENT_RANGE,
|
||||
HTTP_FIELD_CONTENT_TYPE,
|
||||
HTTP_FIELD_CONTENT_VERSION,
|
||||
HTTP_FIELD_DATE,
|
||||
HTTP_FIELD_HOST,
|
||||
HTTP_FIELD_IF_MODIFIED_SINCE,
|
||||
HTTP_FIELD_IF_UNMODIFIED_SINCE,
|
||||
HTTP_FIELD_KEEP_ALIVE,
|
||||
HTTP_FIELD_LAST_MODIFIED,
|
||||
HTTP_FIELD_LINK,
|
||||
HTTP_FIELD_LOCATION,
|
||||
HTTP_FIELD_RANGE,
|
||||
HTTP_FIELD_REFERER,
|
||||
HTTP_FIELD_RETRY_AFTER,
|
||||
HTTP_FIELD_TRANSFER_ENCODING,
|
||||
HTTP_FIELD_UPGRADE,
|
||||
HTTP_FIELD_USER_AGENT,
|
||||
HTTP_FIELD_WWW_AUTHENTICATE,
|
||||
HTTP_FIELD_MAX
|
||||
} http_field_t;
|
||||
|
||||
|
||||
/*
|
||||
* HTTP connection structure...
|
||||
*/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int fd; /* File descriptor for this socket */
|
||||
int blocking; /* To block or not to block */
|
||||
time_t activity; /* Time since last read/write */
|
||||
http_state_t state; /* State of client */
|
||||
http_status_t status; /* Status of last request */
|
||||
http_version_t version; /* Protocol version */
|
||||
http_keepalive_t keep_alive; /* Keep-alive supported? */
|
||||
struct sockaddr_in hostaddr; /* Address of connected host */
|
||||
char hostname[HTTP_MAX_HOST],
|
||||
/* Name of connected host */
|
||||
fields[HTTP_FIELD_MAX][HTTP_MAX_VALUE];
|
||||
/* Field values */
|
||||
char *data; /* Pointer to data buffer */
|
||||
http_encoding_t data_encoding; /* Chunked or not */
|
||||
int data_remaining; /* Number of bytes left */
|
||||
int used; /* Number of bytes used in buffer */
|
||||
char buffer[HTTP_MAX_BUFFER];
|
||||
/* Buffer for messages */
|
||||
} http_t;
|
||||
|
||||
|
||||
/*
|
||||
* Prototypes...
|
||||
*/
|
||||
|
||||
# define httpBlocking(http,b) (http)->blocking = (b)
|
||||
# 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(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, const char *uri);
|
||||
extern char *httpGets(char *line, int length, http_t *http);
|
||||
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, const char *uri);
|
||||
extern void httpInitialize(void);
|
||||
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, const char *uri);
|
||||
extern int httpRead(http_t *http, char *buffer, int length);
|
||||
extern int httpReconnect(http_t *http);
|
||||
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, 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, 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);
|
||||
|
||||
|
||||
/*
|
||||
* C++ magic...
|
||||
*/
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif /* __cplusplus */
|
||||
#endif /* !_CUPS_HTTP_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
-1459
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
-342
@@ -1,342 +0,0 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* Internet Printing Protocol definitions 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
|
||||
*/
|
||||
|
||||
#ifndef _CUPS_IPP_H_
|
||||
# define _CUPS_IPP_H_
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
# include <cups/http.h>
|
||||
|
||||
|
||||
/*
|
||||
* C++ magic...
|
||||
*/
|
||||
|
||||
# ifdef __cplusplus
|
||||
extern "C" {
|
||||
# endif /* __cplusplus */
|
||||
|
||||
|
||||
/*
|
||||
* IPP version string...
|
||||
*/
|
||||
|
||||
# define IPP_VERSION "\001\000"
|
||||
|
||||
/*
|
||||
* IPP registered port number... This is the default value - applications
|
||||
* should use the ippPort() function so that you can customize things in
|
||||
* /etc/services if needed!
|
||||
*/
|
||||
|
||||
# define IPP_PORT 631
|
||||
|
||||
/*
|
||||
* Common limits...
|
||||
*/
|
||||
|
||||
# define IPP_MAX_NAME 256
|
||||
# define IPP_MAX_VALUES 100
|
||||
|
||||
|
||||
/*
|
||||
* Types and structures...
|
||||
*/
|
||||
|
||||
typedef enum /**** Format tags for attribute formats... ****/
|
||||
{
|
||||
IPP_TAG_ZERO = 0x00,
|
||||
IPP_TAG_OPERATION,
|
||||
IPP_TAG_JOB,
|
||||
IPP_TAG_END,
|
||||
IPP_TAG_PRINTER,
|
||||
IPP_TAG_EXTENSION,
|
||||
IPP_TAG_UNSUPPORTED = 0x10,
|
||||
IPP_TAG_DEFAULT,
|
||||
IPP_TAG_UNKNOWN,
|
||||
IPP_TAG_NOVALUE,
|
||||
IPP_TAG_INTEGER = 0x21,
|
||||
IPP_TAG_BOOLEAN,
|
||||
IPP_TAG_ENUM,
|
||||
IPP_TAG_STRING = 0x30,
|
||||
IPP_TAG_DATE,
|
||||
IPP_TAG_RESOLUTION,
|
||||
IPP_TAG_RANGE,
|
||||
IPP_TAG_TEXTLANG,
|
||||
IPP_TAG_NAMELANG,
|
||||
IPP_TAG_TEXT = 0x41,
|
||||
IPP_TAG_NAME,
|
||||
IPP_TAG_KEYWORD,
|
||||
IPP_TAG_URI,
|
||||
IPP_TAG_URISCHEME,
|
||||
IPP_TAG_CHARSET,
|
||||
IPP_TAG_LANGUAGE,
|
||||
IPP_TAG_MIMETYPE
|
||||
} ipp_tag_t;
|
||||
|
||||
typedef enum /**** Resolution units... ****/
|
||||
{
|
||||
IPP_RES_PER_INCH = 3,
|
||||
IPP_RES_PER_CM
|
||||
} ipp_res_t;
|
||||
|
||||
typedef enum /**** Multiple Document Handling ****/
|
||||
{
|
||||
IPP_DOC_SINGLE,
|
||||
IPP_DOC_UNCOLLATED,
|
||||
IPP_DOC_COLLATED,
|
||||
IPP_DOC_SEPARATE
|
||||
} ipp_doc_t;
|
||||
|
||||
typedef enum /**** Finishings... ****/
|
||||
{
|
||||
IPP_FINISH_NONE = 3,
|
||||
IPP_FINISH_STAPLE,
|
||||
IPP_FINISH_PUNCH,
|
||||
IPP_FINISH_COVER,
|
||||
IPP_FINISH_BIND
|
||||
} ipp_finish_t;
|
||||
|
||||
typedef enum /**** Orientation... ****/
|
||||
{
|
||||
IPP_PORTRAIT = 3, /* No rotation */
|
||||
IPP_LANDSCAPE, /* 90 degrees counter-clockwise */
|
||||
IPP_REVERSE_LANDSCAPE, /* 90 degrees clockwise */
|
||||
IPP_REVERSE_PORTRAIT /* 180 degrees */
|
||||
} ipp_orient_t;
|
||||
|
||||
typedef enum /**** Qualities... ****/
|
||||
{
|
||||
IPP_QUALITY_DRAFT = 3,
|
||||
IPP_QUALITY_NORMAL,
|
||||
IPP_QUALITY_HIGH
|
||||
} ipp_quality_t;
|
||||
|
||||
typedef enum /**** Job States.... */
|
||||
{
|
||||
IPP_JOB_PENDING = 3,
|
||||
IPP_JOB_HELD,
|
||||
IPP_JOB_PROCESSING,
|
||||
IPP_JOB_STOPPED,
|
||||
IPP_JOB_CANCELED,
|
||||
IPP_JOB_ABORTED,
|
||||
IPP_JOB_COMPLETED
|
||||
} ipp_jstate_t;
|
||||
|
||||
typedef enum /**** Printer States.... */
|
||||
{
|
||||
IPP_PRINTER_IDLE = 3,
|
||||
IPP_PRINTER_PROCESSING,
|
||||
IPP_PRINTER_STOPPED
|
||||
} ipp_pstate_t;
|
||||
|
||||
typedef enum /**** IPP states... ****/
|
||||
{
|
||||
IPP_ERROR = -1, /* An error occurred */
|
||||
IPP_IDLE, /* Nothing is happening/request completed */
|
||||
IPP_HEADER, /* The request header needs to be sent/received */
|
||||
IPP_ATTRIBUTE, /* One or more attributes need to be sent/received */
|
||||
IPP_DATA /* IPP request data needs to be sent/received */
|
||||
} ipp_state_t;
|
||||
|
||||
typedef enum /**** IPP operations... ****/
|
||||
{
|
||||
IPP_PRINT_JOB = 0x0002,
|
||||
IPP_PRINT_URI,
|
||||
IPP_VALIDATE_JOB,
|
||||
IPP_CREATE_JOB,
|
||||
IPP_SEND_DOCUMENT,
|
||||
IPP_SEND_URI,
|
||||
IPP_CANCEL_JOB,
|
||||
IPP_GET_JOB_ATTRIBUTES,
|
||||
IPP_GET_JOBS,
|
||||
IPP_GET_PRINTER_ATTRIBUTES,
|
||||
IPP_HOLD_JOB = 0x000c,
|
||||
IPP_RELEASE_JOB,
|
||||
IPP_RESTART_JOB,
|
||||
IPP_PAUSE_PRINTER = 0x0010,
|
||||
IPP_RESUME_PRINTER,
|
||||
IPP_PURGE_JOBS,
|
||||
IPP_PRIVATE = 0x4000,
|
||||
CUPS_GET_DEFAULT,
|
||||
CUPS_GET_PRINTERS,
|
||||
CUPS_ADD_PRINTER,
|
||||
CUPS_DELETE_PRINTER,
|
||||
CUPS_GET_CLASSES,
|
||||
CUPS_ADD_CLASS,
|
||||
CUPS_DELETE_CLASS,
|
||||
CUPS_ACCEPT_JOBS,
|
||||
CUPS_REJECT_JOBS,
|
||||
CUPS_SET_DEFAULT
|
||||
} ipp_op_t;
|
||||
|
||||
typedef enum /**** IPP status codes... ****/
|
||||
{
|
||||
IPP_OK = 0x0000,
|
||||
IPP_OK_SUBST,
|
||||
IPP_OK_CONFLICT,
|
||||
IPP_BAD_REQUEST = 0x0400,
|
||||
IPP_FORBIDDEN,
|
||||
IPP_NOT_AUTHENTICATED,
|
||||
IPP_NOT_AUTHORIZED,
|
||||
IPP_NOT_POSSIBLE,
|
||||
IPP_TIMEOUT,
|
||||
IPP_NOT_FOUND,
|
||||
IPP_GONE,
|
||||
IPP_REQUEST_ENTITY,
|
||||
IPP_REQUEST_VALUE,
|
||||
IPP_DOCUMENT_FORMAT,
|
||||
IPP_ATTRIBUTES,
|
||||
IPP_URI_SCHEME,
|
||||
IPP_CHARSET,
|
||||
IPP_CONFLICT,
|
||||
IPP_INTERNAL_ERROR = 0x0500,
|
||||
IPP_OPERATION_NOT_SUPPORTED,
|
||||
IPP_SERVICE_UNAVAILABLE,
|
||||
IPP_VERSION_NOT_SUPPORTED,
|
||||
IPP_DEVICE_UNAVAILABLE,
|
||||
IPP_TEMPORARY_ERROR,
|
||||
IPP_NOT_ACCEPTING,
|
||||
IPP_PRINTER_BUSY
|
||||
} ipp_status_t;
|
||||
|
||||
typedef unsigned char ipp_uchar_t;/**** Unsigned 8-bit integer/character ****/
|
||||
|
||||
typedef union /**** Request Header ****/
|
||||
{
|
||||
struct /* Any Header */
|
||||
{
|
||||
ipp_uchar_t version[2]; /* Protocol version number */
|
||||
int op_status; /* Operation ID or status code*/
|
||||
int request_id; /* Request ID */
|
||||
} any;
|
||||
|
||||
struct /* Operation Header */
|
||||
{
|
||||
ipp_uchar_t version[2]; /* Protocol version number */
|
||||
ipp_op_t operation_id; /* Operation ID */
|
||||
int request_id; /* Request ID */
|
||||
} op;
|
||||
|
||||
struct /* Status Header */
|
||||
{
|
||||
ipp_uchar_t version[2]; /* Protocol version number */
|
||||
ipp_status_t status_code; /* Status code */
|
||||
int request_id; /* Request ID */
|
||||
} status;
|
||||
} ipp_request_t;
|
||||
|
||||
|
||||
typedef union /**** Attribute Value ****/
|
||||
{
|
||||
int integer; /* Integer/enumerated value */
|
||||
|
||||
char boolean; /* Boolean value */
|
||||
|
||||
ipp_uchar_t date[11]; /* Date/time value */
|
||||
|
||||
struct
|
||||
{
|
||||
int xres, /* Horizontal resolution */
|
||||
yres; /* Vertical resolution */
|
||||
ipp_res_t units; /* Resolution units */
|
||||
} resolution; /* Resolution value */
|
||||
|
||||
struct
|
||||
{
|
||||
int lower, /* Lower value */
|
||||
upper; /* Upper value */
|
||||
} range; /* Range of integers value */
|
||||
|
||||
struct
|
||||
{
|
||||
char *charset; /* Character set */
|
||||
char *text; /* String */
|
||||
} string; /* String with language value */
|
||||
} ipp_value_t;
|
||||
|
||||
typedef struct ipp_attribute_s /**** Attribute ****/
|
||||
{
|
||||
struct ipp_attribute_s *next;
|
||||
/* Next atrtribute in list */
|
||||
ipp_tag_t group_tag, /* Job/Printer/Operation group tag */
|
||||
value_tag; /* What type of value is it? */
|
||||
char *name; /* Name of attribute */
|
||||
int num_values; /* Number of values */
|
||||
ipp_value_t values[1]; /* Values */
|
||||
} ipp_attribute_t;
|
||||
|
||||
typedef struct /**** Request State ****/
|
||||
{
|
||||
ipp_state_t state; /* State of request */
|
||||
ipp_request_t request; /* Request header */
|
||||
ipp_attribute_t *attrs, /* Attributes */
|
||||
*last, /* Last attribute in list */
|
||||
*current; /* Current attribute (for read/write) */
|
||||
ipp_tag_t curtag; /* Current attribute group tag */
|
||||
} ipp_t;
|
||||
|
||||
|
||||
/*
|
||||
* Prototypes...
|
||||
*/
|
||||
|
||||
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, 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, 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 const ipp_uchar_t *ippTimeToDate(time_t t);
|
||||
extern ipp_state_t ippWrite(http_t *http, ipp_t *ipp);
|
||||
extern int ippPort(void);
|
||||
|
||||
/*
|
||||
* C++ magic...
|
||||
*/
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif /* __cplusplus */
|
||||
#endif /* !_CUPS_IPP_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
@@ -1,373 +0,0 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* I18N/language support 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:
|
||||
*
|
||||
* cupsLangEncoding() - Return the character encoding (us-ascii, etc.)
|
||||
* for the given language.
|
||||
* cupsLangFlush() - Flush all language data out of the cache.
|
||||
* cupsLangFree() - Free language data.
|
||||
* cupsLangGet() - Get a language.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include "string.h"
|
||||
#include "language.h"
|
||||
|
||||
|
||||
/*
|
||||
* Local globals...
|
||||
*/
|
||||
|
||||
static cups_lang_t *lang_cache = NULL; /* Language string cache */
|
||||
static char *lang_blank = ""; /* Blank constant string */
|
||||
static char *lang_encodings[] = /* Encoding strings */
|
||||
{
|
||||
"us-ascii",
|
||||
"iso8859-1",
|
||||
"iso8859-2",
|
||||
"iso8859-3",
|
||||
"iso8859-4",
|
||||
"iso8859-5",
|
||||
"iso8859-6",
|
||||
"iso8859-7",
|
||||
"iso8859-8",
|
||||
"iso8859-9",
|
||||
"iso8859-10",
|
||||
"utf8"
|
||||
};
|
||||
static char *lang_default[] = /* Default POSIX locale */
|
||||
{
|
||||
#include "cups_C.h"
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsLangEncoding()' - Return the character encoding (us-ascii, etc.)
|
||||
* for the given language.
|
||||
*/
|
||||
|
||||
char * /* O - Character encoding */
|
||||
cupsLangEncoding(cups_lang_t *lang) /* I - Language data */
|
||||
{
|
||||
if (lang == NULL)
|
||||
return (lang_encodings[0]);
|
||||
else
|
||||
return (lang_encodings[lang->encoding]);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsLangFlush()' - Flush all language data out of the cache.
|
||||
*/
|
||||
|
||||
void
|
||||
cupsLangFlush(void)
|
||||
{
|
||||
int i; /* Looping var */
|
||||
cups_lang_t *lang, /* Current language */
|
||||
*next; /* Next language */
|
||||
|
||||
|
||||
for (lang = lang_cache; lang != NULL; lang = next)
|
||||
{
|
||||
for (i = 0; i < CUPS_MSG_MAX; i ++)
|
||||
if (lang->messages[i] != NULL && lang->messages[i] != lang_blank)
|
||||
free(lang->messages[i]);
|
||||
|
||||
next = lang->next;
|
||||
free(lang);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsLangFree()' - Free language data.
|
||||
*
|
||||
* This does not actually free anything; use cupsLangFlush() for that.
|
||||
*/
|
||||
|
||||
void
|
||||
cupsLangFree(cups_lang_t *lang) /* I - Language to free */
|
||||
{
|
||||
if (lang != NULL && lang->used > 0)
|
||||
lang->used --;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsLangGet()' - Get a language.
|
||||
*/
|
||||
|
||||
cups_lang_t * /* O - Language data */
|
||||
cupsLangGet(const char *language) /* I - Language or locale */
|
||||
{
|
||||
int i, count; /* Looping vars */
|
||||
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 */
|
||||
char line[1024]; /* Line from file */
|
||||
cups_msg_t msg; /* Message number */
|
||||
char *text; /* Message text */
|
||||
cups_lang_t *lang; /* Current language... */
|
||||
|
||||
|
||||
/*
|
||||
* Convert the language string passed in to a locale string. "C" is the
|
||||
* standard POSIX locale and is copied unchanged. Otherwise the
|
||||
* language string is converted from ll-cc (language-country) to ll_CC
|
||||
* to match the file naming convention used by all POSIX-compliant
|
||||
* operating systems.
|
||||
*/
|
||||
|
||||
if (language == NULL || language[0] == '\0')
|
||||
strcpy(langname, "C");
|
||||
else
|
||||
strcpy(langname, language);
|
||||
|
||||
if (strlen(langname) < 2)
|
||||
strcpy(real, "C");
|
||||
else
|
||||
{
|
||||
real[0] = tolower(langname[0]);
|
||||
real[1] = tolower(langname[1]);
|
||||
|
||||
if (langname[2] == '_' || langname[2] == '-')
|
||||
{
|
||||
real[2] = '_';
|
||||
real[3] = toupper(langname[3]);
|
||||
real[4] = toupper(langname[4]);
|
||||
real[5] = '\0';
|
||||
langname[5] = '\0';
|
||||
}
|
||||
else
|
||||
{
|
||||
langname[2] = '\0';
|
||||
real[2] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Next try to open a locale file; we will try the country-localized file
|
||||
* first, and then look for generic language file. If all else fails we
|
||||
* will use the POSIX locale.
|
||||
*/
|
||||
|
||||
if ((localedir = getenv("LOCALEDIR")) == NULL)
|
||||
localedir = CUPS_LOCALEDIR;
|
||||
|
||||
sprintf(filename, "%s/%s/cups_%s", localedir, real, real);
|
||||
|
||||
if ((fp = fopen(filename, "r")) == NULL)
|
||||
if (strlen(real) > 2)
|
||||
{
|
||||
/*
|
||||
* Nope, see if we can open a generic language file...
|
||||
*/
|
||||
|
||||
real[2] = '\0';
|
||||
sprintf(filename, "%s/%s/cups_%s", localedir, real, real);
|
||||
fp = fopen(filename, "r");
|
||||
}
|
||||
|
||||
/*
|
||||
* Then see if we already have this language loaded...
|
||||
*/
|
||||
|
||||
for (lang = lang_cache; lang != NULL; lang = lang->next)
|
||||
if (strcmp(lang->language, langname) == 0)
|
||||
{
|
||||
lang->used ++;
|
||||
|
||||
if (fp != NULL)
|
||||
fclose(fp);
|
||||
|
||||
return (lang);
|
||||
}
|
||||
|
||||
/*
|
||||
* OK, we have an open messages file; the first line will contain the
|
||||
* language encoding (us-ascii, iso-8859-1, etc.), and the rest will
|
||||
* be messages consisting of:
|
||||
*
|
||||
* #### SP message text
|
||||
*
|
||||
* or:
|
||||
*
|
||||
* message text
|
||||
*
|
||||
* If the line starts with a number, then message processing picks up
|
||||
* where the number indicates. Otherwise the last message number is
|
||||
* incremented.
|
||||
*
|
||||
* All leading whitespace is deleted.
|
||||
*/
|
||||
|
||||
if (fp == NULL)
|
||||
strcpy(line, lang_default[0]);
|
||||
else if (fgets(line, sizeof(line), fp) == NULL)
|
||||
{
|
||||
/*
|
||||
* Can't read encoding!
|
||||
*/
|
||||
|
||||
fclose(fp);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
i = strlen(line) - 1;
|
||||
if (line[i] == '\n')
|
||||
line[i] = '\0'; /* Strip LF */
|
||||
|
||||
/*
|
||||
* See if there is a free language available; if so, use that
|
||||
* record...
|
||||
*/
|
||||
|
||||
for (lang = lang_cache; lang != NULL; lang = lang->next)
|
||||
if (lang->used == 0)
|
||||
break;
|
||||
|
||||
if (lang == NULL)
|
||||
{
|
||||
/*
|
||||
* Allocate memory for the language and add it to the cache.
|
||||
*/
|
||||
|
||||
if ((lang = calloc(sizeof(cups_lang_t), 1)) == NULL)
|
||||
{
|
||||
fclose(fp);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
lang->next = lang_cache;
|
||||
lang_cache = lang;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Free all old strings as needed...
|
||||
*/
|
||||
|
||||
for (i = 0; i < CUPS_MSG_MAX; i ++)
|
||||
{
|
||||
if (lang->messages[i] != NULL && lang->messages[i] != lang_blank)
|
||||
free(lang->messages[i]);
|
||||
|
||||
lang->messages[i] = lang_blank;
|
||||
}
|
||||
|
||||
/*
|
||||
* Then assign the language and encoding fields...
|
||||
*/
|
||||
|
||||
lang->used ++;
|
||||
strcpy(lang->language, langname);
|
||||
|
||||
for (i = 0; i < (sizeof(lang_encodings) / sizeof(lang_encodings[0])); i ++)
|
||||
if (strcmp(lang_encodings[i], line) == 0)
|
||||
{
|
||||
lang->encoding = (cups_encoding_t)i;
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Read the strings from the file...
|
||||
*/
|
||||
|
||||
msg = (cups_msg_t)-1;
|
||||
count = 1;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
/*
|
||||
* Read a line from memory or from a file...
|
||||
*/
|
||||
|
||||
if (fp == NULL)
|
||||
{
|
||||
if (lang_default[count] == NULL)
|
||||
break;
|
||||
|
||||
strcpy(line, lang_default[count]);
|
||||
}
|
||||
else if (fgets(line, sizeof(line), fp) == NULL)
|
||||
break;
|
||||
|
||||
count ++;
|
||||
|
||||
/*
|
||||
* Ignore blank lines...
|
||||
*/
|
||||
|
||||
i = strlen(line) - 1;
|
||||
if (line[i] == '\n')
|
||||
line[i] = '\0'; /* Strip LF */
|
||||
|
||||
if (line[0] == '\0')
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Grab the message number and text...
|
||||
*/
|
||||
|
||||
if (isdigit(line[0]))
|
||||
msg = (cups_msg_t)atoi(line);
|
||||
else
|
||||
msg ++;
|
||||
|
||||
if (msg < 0 || msg >= CUPS_MSG_MAX)
|
||||
continue;
|
||||
|
||||
text = line;
|
||||
while (isdigit(*text))
|
||||
text ++;
|
||||
while (isspace(*text))
|
||||
text ++;
|
||||
|
||||
lang->messages[msg] = strdup(text);
|
||||
}
|
||||
|
||||
/*
|
||||
* Close the file and return...
|
||||
*/
|
||||
|
||||
if (fp != NULL)
|
||||
fclose(fp);
|
||||
|
||||
return (lang);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
@@ -1,195 +0,0 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* Multi-language support 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
|
||||
*/
|
||||
|
||||
#ifndef _CUPS_LANGUAGE_H_
|
||||
# define _CUPS_LANGUAGE_H_
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
# include <locale.h>
|
||||
|
||||
# ifdef __cplusplus
|
||||
extern "C" {
|
||||
# endif /* __cplusplus */
|
||||
|
||||
/*
|
||||
* Messages...
|
||||
*/
|
||||
|
||||
typedef enum /**** Message Indices ****/
|
||||
{
|
||||
CUPS_MSG_OK,
|
||||
CUPS_MSG_CANCEL,
|
||||
CUPS_MSG_HELP,
|
||||
CUPS_MSG_QUIT,
|
||||
CUPS_MSG_CLOSE,
|
||||
CUPS_MSG_YES,
|
||||
CUPS_MSG_NO,
|
||||
CUPS_MSG_ON,
|
||||
CUPS_MSG_OFF,
|
||||
CUPS_MSG_SAVE,
|
||||
CUPS_MSG_DISCARD,
|
||||
CUPS_MSG_DEFAULT,
|
||||
CUPS_MSG_OPTIONS,
|
||||
CUPS_MSG_MORE_INFO,
|
||||
CUPS_MSG_BLACK,
|
||||
CUPS_MSG_COLOR,
|
||||
CUPS_MSG_CYAN,
|
||||
CUPS_MSG_MAGENTA,
|
||||
CUPS_MSG_YELLOW,
|
||||
CUPS_MSG_COPYRIGHT,
|
||||
CUPS_MSG_GENERAL,
|
||||
CUPS_MSG_PRINTER,
|
||||
CUPS_MSG_IMAGE,
|
||||
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,
|
||||
CUPS_MSG_PAGE_FORMAT,
|
||||
CUPS_MSG_1_UP,
|
||||
CUPS_MSG_2_UP,
|
||||
CUPS_MSG_4_UP,
|
||||
CUPS_MSG_IMAGE_SCALING,
|
||||
CUPS_MSG_USE_NATURAL_IMAGE_SIZE,
|
||||
CUPS_MSG_ZOOM_BY_PERCENT,
|
||||
CUPS_MSG_ZOOM_BY_PPI,
|
||||
CUPS_MSG_MIRROR_IMAGE,
|
||||
CUPS_MSG_COLOR_SATURATION,
|
||||
CUPS_MSG_COLOR_HUE,
|
||||
CUPS_MSG_FIT_TO_PAGE,
|
||||
CUPS_MSG_SHADING,
|
||||
CUPS_MSG_DEFAULT_PEN_WIDTH,
|
||||
CUPS_MSG_GAMMA_CORRECTION,
|
||||
CUPS_MSG_BRIGHTNESS,
|
||||
CUPS_MSG_ADD,
|
||||
CUPS_MSG_DELETE,
|
||||
CUPS_MSG_MODIFY,
|
||||
CUPS_MSG_PRINTER_URI,
|
||||
CUPS_MSG_PRINTER_NAME,
|
||||
CUPS_MSG_PRINTER_LOCATION,
|
||||
CUPS_MSG_PRINTER_INFO,
|
||||
CUPS_MSG_PRINTER_MAKE_AND_MODEL,
|
||||
CUPS_MSG_DEVICE_URI,
|
||||
CUPS_MSG_FORMATTING_PAGE,
|
||||
CUPS_MSG_PRINTING_PAGE,
|
||||
CUPS_MSG_INITIALIZING_PRINTER,
|
||||
CUPS_MSG_PRINTER_STATE,
|
||||
CUPS_MSG_ACCEPTING_JOBS,
|
||||
CUPS_MSG_NOT_ACCEPTING_JOBS,
|
||||
CUPS_MSG_PRINT_JOBS,
|
||||
CUPS_MSG_CLASS,
|
||||
CUPS_MSG_LOCAL,
|
||||
CUPS_MSG_REMOTE,
|
||||
CUPS_MSG_DUPLEXING,
|
||||
CUPS_MSG_STAPLING,
|
||||
CUPS_MSG_FAST_COPIES,
|
||||
CUPS_MSG_COLLATED_COPIES,
|
||||
CUPS_MSG_PUNCHING,
|
||||
CUPS_MSG_COVERING,
|
||||
CUPS_MSG_BINDING,
|
||||
CUPS_MSG_SORTING,
|
||||
CUPS_MSG_SMALL,
|
||||
CUPS_MSG_MEDIUM,
|
||||
CUPS_MSG_LARGE,
|
||||
CUPS_MSG_VARIABLE,
|
||||
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
|
||||
} cups_msg_t;
|
||||
|
||||
typedef enum /**** Language Encodings ****/
|
||||
{
|
||||
CUPS_US_ASCII,
|
||||
CUPS_ISO8859_1,
|
||||
CUPS_ISO8859_2,
|
||||
CUPS_ISO8859_3,
|
||||
CUPS_ISO8859_4,
|
||||
CUPS_ISO8859_5,
|
||||
CUPS_ISO8859_6,
|
||||
CUPS_ISO8859_7,
|
||||
CUPS_ISO8859_8,
|
||||
CUPS_ISO8859_9,
|
||||
CUPS_ISO8859_10,
|
||||
CUPS_UTF8
|
||||
} cups_encoding_t;
|
||||
|
||||
typedef struct cups_lang_str /**** Language Cache Structure ****/
|
||||
{
|
||||
struct cups_lang_str *next; /* Next language in cache */
|
||||
int used; /* Number of times this entry has been used. */
|
||||
cups_encoding_t encoding; /* Text encoding */
|
||||
char language[16]; /* Language/locale name */
|
||||
char *messages[CUPS_MSG_MAX];
|
||||
/* Message array */
|
||||
} cups_lang_t;
|
||||
|
||||
|
||||
/*
|
||||
* Prototypes...
|
||||
*/
|
||||
|
||||
# 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(const char *language);
|
||||
# define cupsLangString(lang,msg) (lang)->messages[(msg)]
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif /* __cplusplus */
|
||||
|
||||
#endif /* !_CUPS_LANGUAGE_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
-440
@@ -1,440 +0,0 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* Option marking routines 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
|
||||
*
|
||||
* PostScript is a trademark of Adobe Systems, Inc.
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* ppdConflicts() - Check to see if there are any conflicts.
|
||||
* ppdFindChoice() - Return a pointer to an option choice.
|
||||
* ppdFindMarkedChoice() - Return the marked choice for the specified option.
|
||||
* ppdFindOption() - Return a pointer to the specified option.
|
||||
* ppdIsMarked() - Check to see if an option is marked...
|
||||
* ppdMarkDefaults() - Mark all default options in the PPD file.
|
||||
* ppdMarkOption() - Mark an option in a PPD file.
|
||||
* ppd_defaults() - Set the defaults for this group and all sub-groups.
|
||||
* ppd_default() - Set the default choice for an option.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include "ppd.h"
|
||||
#include "string.h"
|
||||
|
||||
|
||||
/*
|
||||
* Local functions...
|
||||
*/
|
||||
|
||||
static void ppd_defaults(ppd_group_t *g);
|
||||
static void ppd_default(ppd_option_t *o);
|
||||
|
||||
|
||||
/*
|
||||
* 'ppdConflicts()' - Check to see if there are any conflicts.
|
||||
*/
|
||||
|
||||
int /* O - Number of conflicts found */
|
||||
ppdConflicts(ppd_file_t *ppd) /* I - PPD to check */
|
||||
{
|
||||
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 */
|
||||
|
||||
|
||||
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...
|
||||
*/
|
||||
|
||||
for (i = ppd->num_consts, c = ppd->consts; i > 0; i --, c ++)
|
||||
{
|
||||
/*
|
||||
* Grab pointers to the first option...
|
||||
*/
|
||||
|
||||
o1 = ppdFindOption(ppd, c->option1);
|
||||
|
||||
if (o1 == NULL)
|
||||
continue;
|
||||
else if (c->choice1[0] != '\0')
|
||||
{
|
||||
/*
|
||||
* This constraint maps to a specific choice.
|
||||
*/
|
||||
|
||||
c1 = ppdFindChoice(o1, c->choice1);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* This constraint applies to any choice for this option.
|
||||
*/
|
||||
|
||||
for (j = o1->num_choices, c1 = o1->choices; j > 0; j --, c1 ++)
|
||||
if (c1->marked)
|
||||
break;
|
||||
|
||||
if (j == 0)
|
||||
c1 = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Grab pointers to the second option...
|
||||
*/
|
||||
|
||||
o2 = ppdFindOption(ppd, c->option2);
|
||||
|
||||
if (o2 == NULL)
|
||||
continue;
|
||||
else if (c->choice2[0] != '\0')
|
||||
{
|
||||
/*
|
||||
* This constraint maps to a specific choice.
|
||||
*/
|
||||
|
||||
c2 = ppdFindChoice(o2, c->choice2);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* This constraint applies to any choice for this option.
|
||||
*/
|
||||
|
||||
for (j = o2->num_choices, c2 = o2->choices; j > 0; j --, c2 ++)
|
||||
if (c2->marked)
|
||||
break;
|
||||
|
||||
if (j == 0)
|
||||
c2 = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* If both options are marked then there is a conflict...
|
||||
*/
|
||||
|
||||
if (c1 != NULL && c1->marked &&
|
||||
c2 != NULL && c2->marked)
|
||||
{
|
||||
conflicts ++;
|
||||
o1->conflicted = 1;
|
||||
o2->conflicted = 1;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the number of conflicts found...
|
||||
*/
|
||||
|
||||
return (conflicts);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'ppdFindChoice()' - Return a pointer to an option choice.
|
||||
*/
|
||||
|
||||
ppd_choice_t * /* O - Choice pointer or NULL */
|
||||
ppdFindChoice(ppd_option_t *o, /* I - Pointer to option */
|
||||
const char *choice) /* I - Name of choice */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
ppd_choice_t *c; /* Current choice */
|
||||
|
||||
|
||||
if (o == NULL || choice == NULL)
|
||||
return (NULL);
|
||||
|
||||
for (i = o->num_choices, c = o->choices; i > 0; i --, c ++)
|
||||
if (strcmp(c->choice, choice) == 0)
|
||||
return (c);
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'ppdFindMarkedChoice()' - Return the marked choice for the specified option.
|
||||
*/
|
||||
|
||||
ppd_choice_t * /* O - Pointer to choice or NULL */
|
||||
ppdFindMarkedChoice(ppd_file_t *ppd, /* I - PPD file */
|
||||
const char *option) /* I - Keyword/option name */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
ppd_option_t *o; /* Pointer to option */
|
||||
ppd_choice_t *c; /* Pointer to choice */
|
||||
|
||||
|
||||
if ((o = ppdFindOption(ppd, option)) == NULL)
|
||||
return (NULL);
|
||||
|
||||
for (i = o->num_choices, c = o->choices; i > 0; i --, c ++)
|
||||
if (c->marked)
|
||||
return (c);
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'ppdFindOption()' - Return a pointer to the specified option.
|
||||
*/
|
||||
|
||||
ppd_option_t * /* O - Pointer to option or NULL */
|
||||
ppdFindOption(ppd_file_t *ppd, /* I - PPD file data */
|
||||
const char *option) /* I - Option/Keyword name */
|
||||
{
|
||||
int i, j, k; /* Looping vars */
|
||||
ppd_option_t *o; /* Pointer to option */
|
||||
ppd_group_t *g, /* Pointer to group */
|
||||
*sg; /* Pointer to subgroup */
|
||||
|
||||
|
||||
if (ppd == NULL || option == NULL)
|
||||
return (NULL);
|
||||
|
||||
for (i = ppd->num_groups, g = ppd->groups; i > 0; i --, g ++)
|
||||
{
|
||||
for (j = g->num_options, o = g->options; j > 0; j --, o ++)
|
||||
if (strcmp(o->keyword, option) == 0)
|
||||
return (o);
|
||||
|
||||
for (j = g->num_subgroups, sg = g->subgroups; j > 0; j --, sg ++)
|
||||
for (k = sg->num_options, o = sg->options; k > 0; k --, o ++)
|
||||
if (strcmp(o->keyword, option) == 0)
|
||||
return (o);
|
||||
}
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'ppdIsMarked()' - Check to see if an option is marked...
|
||||
*/
|
||||
|
||||
int /* O - Non-zero if option is marked */
|
||||
ppdIsMarked(ppd_file_t *ppd, /* I - PPD file data */
|
||||
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 */
|
||||
|
||||
|
||||
if (ppd == NULL)
|
||||
return (0);
|
||||
|
||||
if ((o = ppdFindOption(ppd, option)) == NULL)
|
||||
return (0);
|
||||
|
||||
if ((c = ppdFindChoice(o, choice)) == NULL)
|
||||
return (0);
|
||||
|
||||
return (c->marked);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'ppdMarkDefaults()' - Mark all default options in the PPD file.
|
||||
*/
|
||||
|
||||
void
|
||||
ppdMarkDefaults(ppd_file_t *ppd)/* I - PPD file record */
|
||||
{
|
||||
int i; /* Looping variables */
|
||||
ppd_group_t *g; /* Current group */
|
||||
ppd_option_t *o; /* PageSize option */
|
||||
|
||||
|
||||
if (ppd == NULL)
|
||||
return;
|
||||
|
||||
for (i = ppd->num_groups, g = ppd->groups; i > 0; i --, g ++)
|
||||
ppd_defaults(g);
|
||||
|
||||
o = ppdFindOption(ppd, "PageSize");
|
||||
|
||||
for (i = 0; i < ppd->num_sizes; i ++)
|
||||
ppd->sizes[i].marked = strcmp(ppd->sizes[i].name, o->defchoice) == 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'ppdMarkOption()' - Mark an option in a PPD file.
|
||||
*
|
||||
* Notes:
|
||||
*
|
||||
* -1 is returned if the given option would conflict with any currently
|
||||
* selected option.
|
||||
*/
|
||||
|
||||
int /* O - Number of conflicts */
|
||||
ppdMarkOption(ppd_file_t *ppd, /* I - PPD file record */
|
||||
const char *option, /* I - Keyword */
|
||||
const char *choice) /* I - Option name */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
ppd_option_t *o; /* Option pointer */
|
||||
ppd_choice_t *c; /* Choice pointer */
|
||||
|
||||
|
||||
if (ppd == NULL)
|
||||
return (0);
|
||||
|
||||
if (strcmp(option, "PageSize") == 0 && strncmp(choice, "Custom.", 7) == 0)
|
||||
{
|
||||
/*
|
||||
* Handle variable page sizes...
|
||||
*/
|
||||
|
||||
ppdPageSize(ppd, choice);
|
||||
choice = "Custom";
|
||||
}
|
||||
|
||||
if ((o = ppdFindOption(ppd, option)) == NULL)
|
||||
return (0);
|
||||
|
||||
for (i = o->num_choices, c = o->choices; i > 0; i --, c ++)
|
||||
if (strcmp(c->choice, choice) == 0)
|
||||
break;
|
||||
|
||||
if (i)
|
||||
{
|
||||
/*
|
||||
* Option found; mark it and then handle unmarking any other options.
|
||||
*/
|
||||
|
||||
c->marked = 1;
|
||||
|
||||
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 || strcmp(option, "PageRegion") == 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return (ppdConflicts(ppd));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'ppd_defaults()' - Set the defaults for this group and all sub-groups.
|
||||
*/
|
||||
|
||||
static void
|
||||
ppd_defaults(ppd_group_t *g) /* I - Group to default */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
ppd_option_t *o; /* Current option */
|
||||
ppd_group_t *sg; /* Current sub-group */
|
||||
|
||||
|
||||
if (g == NULL)
|
||||
return;
|
||||
|
||||
for (i = g->num_options, o = g->options; i > 0; i --, o ++)
|
||||
if (strcmp(o->keyword, "PageRegion") != 0)
|
||||
ppd_default(o);
|
||||
|
||||
for (i = g->num_subgroups, sg = g->subgroups; i > 0; i --, sg ++)
|
||||
ppd_defaults(sg);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'ppd_default()' - Set the default choice for an option.
|
||||
*/
|
||||
|
||||
static void
|
||||
ppd_default(ppd_option_t *o) /* I - Option to default */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
ppd_choice_t *c; /* Current choice */
|
||||
|
||||
|
||||
if (o == NULL)
|
||||
return;
|
||||
|
||||
for (i = o->num_choices, c = o->choices; i > 0; i --, c ++)
|
||||
if (strcmp(c->choice, o->defchoice) == 0)
|
||||
c->marked = 1;
|
||||
else
|
||||
c->marked = 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
-617
@@ -1,617 +0,0 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* MIME database file routines 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
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* mimeDelete() - Delete (free) a MIME database.
|
||||
* mimeMerge() - Merge a MIME database from disk with the current one.
|
||||
* mimeNew() - Create a new, empty MIME database.
|
||||
* load_types() - Load a xyz.types file...
|
||||
* delete_rules() - Free all memory for the given rule tree.
|
||||
* load_convs() - Load a xyz.convs file...
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* Revision 1.11 1999/04/21 19:31:29 mike
|
||||
* Changed the directory header stuff to use the autoconf-recommended
|
||||
* sequence of #ifdef's.
|
||||
*
|
||||
* Changed the language routines to look for the LOCALEDIR environment
|
||||
* variable, and if it is not defined to use the LOCALEDIR string defined
|
||||
* in config.h.
|
||||
*
|
||||
* Revision 1.10 1999/03/01 20:51:53 mike
|
||||
* Code cleanup - removed extraneous semi-colons...
|
||||
*
|
||||
* Revision 1.9 1999/02/26 22:00:51 mike
|
||||
* Added more debug statements.
|
||||
*
|
||||
* Fixed bugs in cupsPrintFile() - wasn't setting the IPP_TAG_MIMETYPE
|
||||
* value tag for the file type.
|
||||
*
|
||||
* Updated conversion filter code to handle wildcards for super-type.
|
||||
*
|
||||
* Revision 1.8 1999/02/20 16:04:38 mike
|
||||
* Updated mime.c to scan directories under WIN32.
|
||||
*
|
||||
* Fixed some compiler warnings under WIN32.
|
||||
*
|
||||
* Updated VC++ project files.
|
||||
*
|
||||
* Updated mime.types and mime.convs files for actual registered
|
||||
* MIME type names.
|
||||
*
|
||||
* Revision 1.7 1999/02/05 17:40:53 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.6 1999/02/01 22:08:39 mike
|
||||
* Restored original directory-scanning functionality of mimeLoad().
|
||||
*
|
||||
* Revision 1.4 1999/01/27 18:31:56 mike
|
||||
* Updated PPD routines to handle emulations and patch files.
|
||||
*
|
||||
* Added DSC comments to emit output as appropriate.
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#include "string.h"
|
||||
#include "mime.h"
|
||||
|
||||
#if defined(WIN32) || defined(__EMX__)
|
||||
# include <windows.h>
|
||||
#elif HAVE_DIRENT_H
|
||||
# include <dirent.h>
|
||||
typedef struct dirent DIRENT;
|
||||
# define NAMLEN(dirent) strlen((dirent)->d_name)
|
||||
#else
|
||||
# if HAVE_SYS_NDIR_H
|
||||
# include <sys/ndir.h>
|
||||
# endif
|
||||
# if HAVE_SYS_DIR_H
|
||||
# include <sys/dir.h>
|
||||
# endif
|
||||
# if HAVE_NDIR_H
|
||||
# include <ndir.h>
|
||||
# endif
|
||||
typedef struct direct DIRENT;
|
||||
# define NAMLEN(dirent) (dirent)->d_namlen
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Local functions...
|
||||
*/
|
||||
|
||||
static void load_types(mime_t *mime, char *filename);
|
||||
static void load_convs(mime_t *mime, char *filename);
|
||||
static void delete_rules(mime_magic_t *rules);
|
||||
|
||||
|
||||
/*
|
||||
* 'mimeDelete()' - Delete (free) a MIME database.
|
||||
*/
|
||||
|
||||
void
|
||||
mimeDelete(mime_t *mime) /* I - MIME database */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
|
||||
|
||||
if (mime == NULL)
|
||||
return;
|
||||
|
||||
/*
|
||||
* Loop through the file types and delete any rules...
|
||||
*/
|
||||
|
||||
for (i = 0; i < mime->num_types; i ++)
|
||||
{
|
||||
delete_rules(mime->types[i]->rules);
|
||||
free(mime->types[i]);
|
||||
}
|
||||
|
||||
/*
|
||||
* Free the types and filters arrays, and then the MIME database structure.
|
||||
*/
|
||||
|
||||
free(mime->types);
|
||||
free(mime->filters);
|
||||
free(mime);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mimeMerge()' - Merge a MIME database from disk with the current one.
|
||||
*/
|
||||
|
||||
mime_t * /* O - Updated MIME database */
|
||||
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 */
|
||||
WIN32_FIND_DATA dent; /* Directory entry */
|
||||
char filename[1024], /* Full filename of types/converts file */
|
||||
*pathsep; /* Last character in path */
|
||||
|
||||
|
||||
/*
|
||||
* First open the directory specified by pathname... Return NULL if nothing
|
||||
* was read or if the pathname is NULL...
|
||||
*/
|
||||
|
||||
if (pathname == NULL)
|
||||
return (NULL);
|
||||
|
||||
strcpy(filename, pathname);
|
||||
pathsep = filename + strlen(filename);
|
||||
if (pathsep == filename ||
|
||||
(pathsep[-1] != '/' && pathsep[-1] != '\\'))
|
||||
{
|
||||
strcpy(pathsep, "/");
|
||||
pathsep ++;
|
||||
}
|
||||
|
||||
strcpy(pathsep, "*.types");
|
||||
|
||||
if ((dir = FindFirstFile(filename, &dent)) == 0)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* If "mime" is NULL, make a new, blank database...
|
||||
*/
|
||||
|
||||
if (mime == NULL)
|
||||
if ((mime = mimeNew()) == NULL)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Read all the .types files...
|
||||
*/
|
||||
|
||||
do
|
||||
{
|
||||
/*
|
||||
* Load a mime.types file...
|
||||
*/
|
||||
|
||||
strcpy(pathsep, dent.cFileName);
|
||||
load_types(mime, filename);
|
||||
}
|
||||
while (FindNextFile(dir, &dent));
|
||||
|
||||
FindClose(dir);
|
||||
|
||||
/*
|
||||
* Read all the .convs files...
|
||||
*/
|
||||
|
||||
strcpy(pathsep, "*.convs");
|
||||
|
||||
if ((dir = FindFirstFile(filename, &dent)) == 0)
|
||||
return (mime);
|
||||
|
||||
do
|
||||
{
|
||||
/*
|
||||
* Load a mime.convs file...
|
||||
*/
|
||||
|
||||
strcpy(pathsep, dent.cFileName);
|
||||
load_convs(mime, filename);
|
||||
}
|
||||
while (FindNextFile(dir, &dent));
|
||||
|
||||
FindClose(dir);
|
||||
|
||||
return (mime);
|
||||
#else
|
||||
DIR *dir; /* Directory */
|
||||
DIRENT *dent; /* Directory entry */
|
||||
char filename[1024]; /* Full filename of types/converts file */
|
||||
|
||||
|
||||
/*
|
||||
* First open the directory specified by pathname... Return NULL if nothing
|
||||
* was read or if the pathname is NULL...
|
||||
*/
|
||||
|
||||
if (pathname == NULL)
|
||||
return (NULL);
|
||||
|
||||
if ((dir = opendir(pathname)) == NULL)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* If "mime" is NULL, make a new, blank database...
|
||||
*/
|
||||
|
||||
if (mime == NULL)
|
||||
if ((mime = mimeNew()) == NULL)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Read all the .types files...
|
||||
*/
|
||||
|
||||
while ((dent = readdir(dir)) != NULL)
|
||||
{
|
||||
if (NAMLEN(dent) > 6 &&
|
||||
strcmp(dent->d_name + NAMLEN(dent) - 6, ".types") == 0)
|
||||
{
|
||||
/*
|
||||
* Load a mime.types file...
|
||||
*/
|
||||
|
||||
sprintf(filename, "%s/%s", pathname, dent->d_name);
|
||||
load_types(mime, filename);
|
||||
}
|
||||
}
|
||||
|
||||
rewinddir(dir);
|
||||
|
||||
/*
|
||||
* Read all the .convs files...
|
||||
*/
|
||||
|
||||
while ((dent = readdir(dir)) != NULL)
|
||||
{
|
||||
if (NAMLEN(dent) > 6 &&
|
||||
strcmp(dent->d_name + NAMLEN(dent) - 6, ".convs") == 0)
|
||||
{
|
||||
/*
|
||||
* Load a mime.convs file...
|
||||
*/
|
||||
|
||||
sprintf(filename, "%s/%s", pathname, dent->d_name);
|
||||
load_convs(mime, filename);
|
||||
}
|
||||
}
|
||||
|
||||
closedir(dir);
|
||||
|
||||
return (mime);
|
||||
#endif /* WIN32 || __EMX__ */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mimeNew()' - Create a new, empty MIME database.
|
||||
*/
|
||||
|
||||
mime_t * /* O - MIME database */
|
||||
mimeNew(void)
|
||||
{
|
||||
return ((mime_t *)calloc(1, sizeof(mime_t)));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'load_types()' - Load a xyz.types file...
|
||||
*/
|
||||
|
||||
static void
|
||||
load_types(mime_t *mime, /* I - MIME database */
|
||||
char *filename) /* I - Types file to load */
|
||||
{
|
||||
FILE *fp; /* Types file */
|
||||
int linelen; /* Length of line */
|
||||
char line[65536], /* Input line from file */
|
||||
*lineptr, /* Current position in line */
|
||||
super[MIME_MAX_SUPER], /* Super-type name */
|
||||
type[MIME_MAX_TYPE], /* Type name */
|
||||
*temp; /* Temporary pointer */
|
||||
mime_type_t *typeptr; /* New MIME type */
|
||||
|
||||
|
||||
/*
|
||||
* First try to open the file...
|
||||
*/
|
||||
|
||||
if ((fp = fopen(filename, "r")) == NULL)
|
||||
return;
|
||||
|
||||
/*
|
||||
* Then read each line from the file, skipping any comments in the file...
|
||||
*/
|
||||
|
||||
while (fgets(line, sizeof(line), fp) != NULL)
|
||||
{
|
||||
linelen = strlen(line);
|
||||
|
||||
/*
|
||||
* While the last character in the line is a backslash, continue on to the
|
||||
* next line (and the next, etc.)
|
||||
*/
|
||||
|
||||
if (line[linelen - 1] == '\n')
|
||||
{
|
||||
line[linelen - 1] = '\0';
|
||||
linelen --;
|
||||
}
|
||||
|
||||
while (line[linelen - 1] == '\\')
|
||||
{
|
||||
linelen --;
|
||||
|
||||
if (fgets(line + linelen, sizeof(line) - linelen, fp) == NULL)
|
||||
line[linelen] = '\0';
|
||||
else
|
||||
{
|
||||
linelen += strlen(line + linelen);
|
||||
if (line[linelen - 1] == '\n')
|
||||
{
|
||||
line[linelen - 1] = '\0';
|
||||
linelen --;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Skip blank lines and lines starting with a #...
|
||||
*/
|
||||
|
||||
if (line[0] == '\n' || line[0] == '#')
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Extract the super-type and type names from the beginning of the line.
|
||||
*/
|
||||
|
||||
lineptr = line;
|
||||
temp = super;
|
||||
|
||||
while (*lineptr != '/' && *lineptr != '\n' && *lineptr != '\0' &&
|
||||
(temp - super + 1) < MIME_MAX_SUPER)
|
||||
*temp++ = tolower(*lineptr++);
|
||||
|
||||
*temp = '\0';
|
||||
|
||||
if (*lineptr != '/')
|
||||
continue;
|
||||
|
||||
lineptr ++;
|
||||
temp = type;
|
||||
|
||||
while (*lineptr != ' ' && *lineptr != '\t' && *lineptr != '\n' &&
|
||||
*lineptr != '\0' && (temp - type + 1) < MIME_MAX_TYPE)
|
||||
*temp++ = tolower(*lineptr++);
|
||||
|
||||
*temp = '\0';
|
||||
|
||||
/*
|
||||
* Add the type and rules to the MIME database...
|
||||
*/
|
||||
|
||||
typeptr = mimeAddType(mime, super, type);
|
||||
mimeAddTypeRule(typeptr, lineptr);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'load_convs()' - Load a xyz.convs file...
|
||||
*/
|
||||
|
||||
static void
|
||||
load_convs(mime_t *mime, /* I - MIME database */
|
||||
char *filename) /* I - Convs file to load */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
FILE *fp; /* Convs file */
|
||||
char line[1024], /* Input line from file */
|
||||
*lineptr, /* Current position in line */
|
||||
super[MIME_MAX_SUPER], /* Super-type name */
|
||||
type[MIME_MAX_TYPE], /* Type name */
|
||||
*temp, /* Temporary pointer */
|
||||
*filter; /* Filter program */
|
||||
mime_type_t **temptype, /* MIME type looping var */
|
||||
*dsttype; /* Destination MIME type */
|
||||
int cost; /* Cost of filter */
|
||||
|
||||
|
||||
/*
|
||||
* First try to open the file...
|
||||
*/
|
||||
|
||||
if ((fp = fopen(filename, "r")) == NULL)
|
||||
return;
|
||||
|
||||
/*
|
||||
* Then read each line from the file, skipping any comments in the file...
|
||||
*/
|
||||
|
||||
while (fgets(line, sizeof(line), fp) != NULL)
|
||||
{
|
||||
/*
|
||||
* Skip blank lines and lines starting with a #...
|
||||
*/
|
||||
|
||||
if (line[0] == '\n' || line[0] == '#')
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Extract the destination super-type and type names from the middle of
|
||||
* the line.
|
||||
*/
|
||||
|
||||
lineptr = line;
|
||||
while (*lineptr != ' ' && *lineptr != '\t' && *lineptr != '\0')
|
||||
lineptr ++;
|
||||
|
||||
while (*lineptr == ' ' || *lineptr == '\t')
|
||||
lineptr ++;
|
||||
|
||||
temp = super;
|
||||
|
||||
while (*lineptr != '/' && *lineptr != '\n' && *lineptr != '\0' &&
|
||||
(temp - super + 1) < MIME_MAX_SUPER)
|
||||
*temp++ = tolower(*lineptr++);
|
||||
|
||||
*temp = '\0';
|
||||
|
||||
if (*lineptr != '/')
|
||||
continue;
|
||||
|
||||
lineptr ++;
|
||||
temp = type;
|
||||
|
||||
while (*lineptr != ' ' && *lineptr != '\t' && *lineptr != '\n' &&
|
||||
*lineptr != '\0' && (temp - type + 1) < MIME_MAX_TYPE)
|
||||
*temp++ = tolower(*lineptr++);
|
||||
|
||||
*temp = '\0';
|
||||
|
||||
if (*lineptr == '\0' || *lineptr == '\n')
|
||||
continue;
|
||||
|
||||
if ((dsttype = mimeType(mime, super, type)) == NULL)
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Then get the cost and filter program...
|
||||
*/
|
||||
|
||||
while (*lineptr == ' ' || *lineptr == '\t')
|
||||
lineptr ++;
|
||||
|
||||
if (*lineptr < '0' || *lineptr > '9')
|
||||
continue;
|
||||
|
||||
cost = atoi(lineptr);
|
||||
|
||||
while (*lineptr != ' ' && *lineptr != '\t' && *lineptr != '\0')
|
||||
lineptr ++;
|
||||
while (*lineptr == ' ' || *lineptr == '\t')
|
||||
lineptr ++;
|
||||
|
||||
if (*lineptr == '\0' || *lineptr == '\n')
|
||||
continue;
|
||||
|
||||
filter = lineptr;
|
||||
if (filter[strlen(filter) - 1] == '\n')
|
||||
filter[strlen(filter) - 1] = '\0';
|
||||
|
||||
/*
|
||||
* Finally, get the source super-type and type names from the beginning of
|
||||
* the line. We do it here so we can support wildcards...
|
||||
*/
|
||||
|
||||
lineptr = line;
|
||||
temp = super;
|
||||
|
||||
while (*lineptr != '/' && *lineptr != '\n' && *lineptr != '\0' &&
|
||||
(temp - super + 1) < MIME_MAX_SUPER)
|
||||
*temp++ = tolower(*lineptr++);
|
||||
|
||||
*temp = '\0';
|
||||
|
||||
if (*lineptr != '/')
|
||||
continue;
|
||||
|
||||
lineptr ++;
|
||||
temp = type;
|
||||
|
||||
while (*lineptr != ' ' && *lineptr != '\t' && *lineptr != '\n' &&
|
||||
*lineptr != '\0' && (temp - type + 1) < MIME_MAX_TYPE)
|
||||
*temp++ = tolower(*lineptr++);
|
||||
|
||||
*temp = '\0';
|
||||
|
||||
/*
|
||||
* Add the filter to the MIME database, supporting wildcards as needed...
|
||||
*/
|
||||
|
||||
for (temptype = mime->types, i = 0; i < mime->num_types; i ++, temptype ++)
|
||||
if ((super[0] == '*' || strcmp((*temptype)->super, super) == 0) &&
|
||||
(type[0] == '*' || strcmp((*temptype)->type, type) == 0))
|
||||
mimeAddFilter(mime, *temptype, dsttype, cost, filter);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'delete_rules()' - Free all memory for the given rule tree.
|
||||
*/
|
||||
|
||||
static void
|
||||
delete_rules(mime_magic_t *rules) /* I - Rules to free */
|
||||
{
|
||||
mime_magic_t *next; /* Next rule to free */
|
||||
|
||||
|
||||
/*
|
||||
* Free the rules list, descending recursively to free any child rules.
|
||||
*/
|
||||
|
||||
while (rules != NULL)
|
||||
{
|
||||
next = rules->next;
|
||||
|
||||
if (rules->child != NULL)
|
||||
delete_rules(rules->child);
|
||||
|
||||
free(rules);
|
||||
rules = next;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
-137
@@ -1,137 +0,0 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* MIME type/conversion database definitions 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
|
||||
*/
|
||||
|
||||
#ifndef _MIME_H_
|
||||
# define _MIME_H_
|
||||
|
||||
/*
|
||||
* C++ magic...
|
||||
*/
|
||||
|
||||
# ifdef _cplusplus
|
||||
extern "C" {
|
||||
# endif /* _cplusplus */
|
||||
|
||||
|
||||
/*
|
||||
* Constants...
|
||||
*/
|
||||
|
||||
# define MIME_MAX_SUPER 16 /* Maximum size of supertype name */
|
||||
# define MIME_MAX_TYPE 32 /* Maximum size of type name */
|
||||
# define MIME_MAX_FILTER 256 /* Maximum size of filter pathname */
|
||||
# define MIME_MAX_BUFFER 8192 /* Maximum size of file buffer */
|
||||
|
||||
|
||||
/*
|
||||
* Types/structures...
|
||||
*/
|
||||
|
||||
typedef enum
|
||||
{
|
||||
MIME_MAGIC_NOP, /* No operation */
|
||||
MIME_MAGIC_AND, /* Logical AND of all children */
|
||||
MIME_MAGIC_OR, /* Logical OR of all children */
|
||||
MIME_MAGIC_MATCH, /* Filename match */
|
||||
MIME_MAGIC_ASCII, /* ASCII characters in range */
|
||||
MIME_MAGIC_PRINTABLE, /* Printable characters (32-255) in range */
|
||||
MIME_MAGIC_STRING, /* String matches */
|
||||
MIME_MAGIC_CHAR, /* Character/byte matches */
|
||||
MIME_MAGIC_SHORT, /* Short/16-bit word matches */
|
||||
MIME_MAGIC_INT, /* Integer/32-bit word matches */
|
||||
MIME_MAGIC_LOCALE /* Current locale matches string */
|
||||
} mime_op_t;
|
||||
|
||||
typedef struct mime_magic_str /**** MIME Magic Data ****/
|
||||
{
|
||||
struct mime_magic_str *prev, /* Previous rule */
|
||||
*next, /* Next rule */
|
||||
*parent, /* Parent rules */
|
||||
*child; /* Child rules */
|
||||
short op, /* Operation code (see above) */
|
||||
invert; /* Invert the result */
|
||||
int offset, /* Offset in file */
|
||||
length; /* Length of data */
|
||||
union
|
||||
{
|
||||
char matchv[64]; /* Match value */
|
||||
char localev[64]; /* Locale value */
|
||||
char stringv[64]; /* String value */
|
||||
char charv; /* Byte value */
|
||||
short shortv; /* Short value */
|
||||
int intv; /* Integer value */
|
||||
} value;
|
||||
} mime_magic_t;
|
||||
|
||||
typedef struct /**** MIME Type Data ****/
|
||||
{
|
||||
char super[MIME_MAX_SUPER], /* Super-type name ("image", "application", etc.) */
|
||||
type[MIME_MAX_TYPE]; /* Type name ("png", "postscript", etc.) */
|
||||
mime_magic_t *rules; /* Rules used to detect this type */
|
||||
} mime_type_t;
|
||||
|
||||
typedef struct /**** MIME Conversion Filter Data ****/
|
||||
{
|
||||
mime_type_t *src, /* Source type */
|
||||
*dst; /* Destination type */
|
||||
int cost; /* Relative cost */
|
||||
char filter[MIME_MAX_FILTER];/* Filter program to use */
|
||||
} mime_filter_t;
|
||||
|
||||
typedef struct /**** MIME Database ****/
|
||||
{
|
||||
int num_types; /* Number of file types */
|
||||
mime_type_t **types; /* File types */
|
||||
int num_filters; /* Number of type conversion filters */
|
||||
mime_filter_t *filters; /* Type conversion filters */
|
||||
} mime_t;
|
||||
|
||||
|
||||
/*
|
||||
* Functions...
|
||||
*/
|
||||
|
||||
extern void mimeDelete(mime_t *mime);
|
||||
#define mimeLoad(pathname) mimeMerge((mime_t *)0, (pathname));
|
||||
extern mime_t *mimeMerge(mime_t *mime, const char *pathname);
|
||||
extern mime_t *mimeNew(void);
|
||||
|
||||
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, const char *filter);
|
||||
extern mime_filter_t *mimeFilter(mime_t *mime, mime_type_t *src, mime_type_t *dst,
|
||||
int *num_filters);
|
||||
|
||||
# ifdef _cplusplus
|
||||
}
|
||||
# endif /* _cplusplus */
|
||||
#endif /* !_MIME_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
@@ -1,378 +0,0 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* Option 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:
|
||||
*
|
||||
* cupsAddOption() - Add an option to an option array.
|
||||
* cupsFreeOptions() - Free all memory used by options.
|
||||
* cupsGetOption() - Get an option value.
|
||||
* cupsParseOptions() - Parse options from a command-line argument.
|
||||
* cupsMarkOptions() - Mark command-line options in a PPD file.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include "cups.h"
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include "string.h"
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsAddOption()' - Add an option to an option array.
|
||||
*/
|
||||
|
||||
int /* O - Number of options */
|
||||
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 */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
cups_option_t *temp; /* Pointer to new option */
|
||||
|
||||
|
||||
if (name == NULL || value == NULL || options == NULL)
|
||||
return (0);
|
||||
|
||||
/*
|
||||
* Look for an existing option with the same name...
|
||||
*/
|
||||
|
||||
for (i = 0, temp = *options; i < num_options; i ++, temp ++)
|
||||
if (strcmp(temp->name, name) == 0)
|
||||
break;
|
||||
|
||||
if (i >= num_options)
|
||||
{
|
||||
/*
|
||||
* No matching option name...
|
||||
*/
|
||||
|
||||
if (num_options == 0)
|
||||
temp = (cups_option_t *)malloc(sizeof(cups_option_t));
|
||||
else
|
||||
temp = (cups_option_t *)realloc(*options, sizeof(cups_option_t) *
|
||||
(num_options + 1));
|
||||
|
||||
if (temp == NULL)
|
||||
return (0);
|
||||
|
||||
*options = temp;
|
||||
temp += num_options;
|
||||
temp->name = strdup(name);
|
||||
num_options ++;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Match found; free the old value...
|
||||
*/
|
||||
|
||||
free(temp->value);
|
||||
}
|
||||
|
||||
temp->value = strdup(value);
|
||||
|
||||
return (num_options);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsFreeOptions()' - Free all memory used by options.
|
||||
*/
|
||||
|
||||
void
|
||||
cupsFreeOptions(int num_options, /* I - Number of options */
|
||||
cups_option_t *options) /* I - Pointer to options */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
|
||||
|
||||
if (num_options == 0 || options == NULL)
|
||||
return;
|
||||
|
||||
for (i = 0; i < num_options; i ++)
|
||||
{
|
||||
free(options[i].name);
|
||||
free(options[i].value);
|
||||
}
|
||||
|
||||
free(options);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsGetOption()' - Get an option value.
|
||||
*/
|
||||
|
||||
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 */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
|
||||
|
||||
if (name == NULL || num_options == 0 || options == NULL)
|
||||
return (NULL);
|
||||
|
||||
for (i = 0; i < num_options; i ++)
|
||||
if (strcmp(options[i].name, name) == 0)
|
||||
return (options[i].value);
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsParseOptions()' - Parse options from a command-line argument.
|
||||
*/
|
||||
|
||||
int /* O - Number of options found */
|
||||
cupsParseOptions(const char *arg, /* I - Argument to parse */
|
||||
int num_options, /* I - Number of options */
|
||||
cups_option_t **options) /* O - Options found */
|
||||
{
|
||||
char *copyarg, /* Copy of input string */
|
||||
*ptr, /* Pointer into string */
|
||||
*name, /* Pointer to name */
|
||||
*value; /* Pointer to value */
|
||||
|
||||
|
||||
if (arg == NULL || options == NULL)
|
||||
return (0);
|
||||
|
||||
/*
|
||||
* Make a copy of the argument string and then divide it up...
|
||||
*/
|
||||
|
||||
copyarg = strdup(arg);
|
||||
ptr = copyarg;
|
||||
|
||||
while (*ptr != '\0')
|
||||
{
|
||||
/*
|
||||
* Get the name up to a SPACE, =, or end-of-string...
|
||||
*/
|
||||
|
||||
name = ptr;
|
||||
while (!isspace(*ptr) && *ptr != '=' && *ptr != '\0')
|
||||
ptr ++;
|
||||
|
||||
/*
|
||||
* Skip trailing spaces...
|
||||
*/
|
||||
|
||||
while (isspace(*ptr))
|
||||
*ptr++ = '\0';
|
||||
|
||||
if (*ptr != '=')
|
||||
{
|
||||
/*
|
||||
* Start of another option...
|
||||
*/
|
||||
|
||||
num_options = cupsAddOption(name, "", num_options, options);
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* Remove = and parse the value...
|
||||
*/
|
||||
|
||||
*ptr++ = '\0';
|
||||
|
||||
if (*ptr == '\'')
|
||||
{
|
||||
/*
|
||||
* Quoted string constant...
|
||||
*/
|
||||
|
||||
ptr ++;
|
||||
value = ptr;
|
||||
|
||||
while (*ptr != '\'' && *ptr != '\0')
|
||||
ptr ++;
|
||||
|
||||
if (*ptr != '\0')
|
||||
*ptr++ = '\0';
|
||||
}
|
||||
else if (*ptr == '\"')
|
||||
{
|
||||
/*
|
||||
* Double-quoted string constant...
|
||||
*/
|
||||
|
||||
ptr ++;
|
||||
value = ptr;
|
||||
|
||||
while (*ptr != '\"' && *ptr != '\0')
|
||||
ptr ++;
|
||||
|
||||
if (*ptr != '\0')
|
||||
*ptr++ = '\0';
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Normal space-delimited string...
|
||||
*/
|
||||
|
||||
value = ptr;
|
||||
|
||||
while (!isspace(*ptr) && *ptr != '\0')
|
||||
ptr ++;
|
||||
|
||||
while (isspace(*ptr))
|
||||
*ptr++ = '\0';
|
||||
}
|
||||
|
||||
/*
|
||||
* Add the string value...
|
||||
*/
|
||||
|
||||
num_options = cupsAddOption(name, value, num_options, options);
|
||||
}
|
||||
|
||||
/*
|
||||
* Free the copy of the argument we made and return the number of options
|
||||
* found.
|
||||
*/
|
||||
|
||||
free(copyarg);
|
||||
|
||||
return (num_options);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsMarkOptions()' - Mark command-line options in a PPD file.
|
||||
*/
|
||||
|
||||
int /* O - 1 if conflicting */
|
||||
cupsMarkOptions(ppd_file_t *ppd, /* I - PPD file */
|
||||
int num_options, /* I - Number of options */
|
||||
cups_option_t *options) /* I - Options */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
int conflict; /* Option conflicts */
|
||||
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") == 0)
|
||||
{
|
||||
/*
|
||||
* Loop through the option string, separating it at commas and
|
||||
* marking each individual option.
|
||||
*/
|
||||
|
||||
for (val = options->value; *val;)
|
||||
{
|
||||
/*
|
||||
* Extract the sub-option from the string...
|
||||
*/
|
||||
|
||||
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)
|
||||
{
|
||||
if (strcmp(options->value, "one-sided") == 0)
|
||||
{
|
||||
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", "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", "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;
|
||||
|
||||
return (conflict);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
-189
@@ -1,189 +0,0 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* Page size functions 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
|
||||
*
|
||||
* PostScript is a trademark of Adobe Systems, Inc.
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* ppdPageSize() - Get the page size record for the given size.
|
||||
* ppdPageWidth() - Get the page width for the given size.
|
||||
* ppdPageLength() - Get the page length for the given size.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include "ppd.h"
|
||||
#include "string.h"
|
||||
#include <ctype.h>
|
||||
|
||||
|
||||
/*
|
||||
* 'ppdPageSize()' - Get the page size record for the given size.
|
||||
*/
|
||||
|
||||
ppd_size_t * /* O - Size record for page or NULL */
|
||||
ppdPageSize(ppd_file_t *ppd, /* I - PPD file record */
|
||||
const char *name) /* I - Size name */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
float w, l; /* Width and length of page */
|
||||
char units[255]; /* Page size units... */
|
||||
|
||||
|
||||
if (ppd == NULL)
|
||||
return (NULL);
|
||||
|
||||
if (name != NULL)
|
||||
{
|
||||
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:
|
||||
*
|
||||
* Custom.WIDTHxLENGTHin - Size in inches
|
||||
* Custom.WIDTHxLENGTHcm - Size in centimeters
|
||||
* Custom.WIDTHxLENGTHmm - Size in millimeters
|
||||
* Custom.WIDTHxLENGTH[pt] - Size in points
|
||||
*/
|
||||
|
||||
units[0] = '\0';
|
||||
if (sscanf(name + 7, "%fx%f%s", &w, &l, units) < 2)
|
||||
return (NULL);
|
||||
|
||||
if (strcasecmp(units, "in") == 0)
|
||||
{
|
||||
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[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[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[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 + i);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Lookup by name...
|
||||
*/
|
||||
|
||||
for (i = 0; i < ppd->num_sizes; i ++)
|
||||
if (strcmp(name, ppd->sizes[i].name) == 0)
|
||||
return (ppd->sizes + i);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Find default...
|
||||
*/
|
||||
|
||||
for (i = 0; i < ppd->num_sizes; i ++)
|
||||
if (ppd->sizes[i].marked)
|
||||
return (ppd->sizes + i);
|
||||
}
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'ppdPageWidth()' - Get the page width for the given size.
|
||||
*/
|
||||
|
||||
float /* O - Width of page in points or 0.0 */
|
||||
ppdPageWidth(ppd_file_t *ppd, /* I - PPD file record */
|
||||
const char *name) /* I - Size name */
|
||||
{
|
||||
ppd_size_t *size; /* Page size */
|
||||
|
||||
|
||||
if ((size = ppdPageSize(ppd, name)) == NULL)
|
||||
return (0.0);
|
||||
else
|
||||
return (size->width);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'ppdPageLength()' - Get the page length for the given size.
|
||||
*/
|
||||
|
||||
float /* O - Length of page in points or 0.0 */
|
||||
ppdPageLength(ppd_file_t *ppd, /* I - PPD file */
|
||||
const char *name) /* I - Size name */
|
||||
{
|
||||
ppd_size_t *size; /* Page size */
|
||||
|
||||
|
||||
if ((size = ppdPageSize(ppd, name)) == NULL)
|
||||
return (0.0);
|
||||
else
|
||||
return (size->length);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
-1758
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
-238
@@ -1,238 +0,0 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* PostScript Printer Description definitions 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
|
||||
*
|
||||
* PostScript is a trademark of Adobe Systems, Inc.
|
||||
*
|
||||
* This code and any derivative of it may be used and distributed
|
||||
* freely under the terms of the GNU General Public License when
|
||||
* used with GNU Ghostscript or its derivatives. Use of the code
|
||||
* (or any derivative of it) with software other than GNU
|
||||
* GhostScript (or its derivatives) is governed by the CUPS license
|
||||
* agreement.
|
||||
*/
|
||||
|
||||
#ifndef _CUPS_PPD_H_
|
||||
# define _CUPS_PPD_H_
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
# include <stdio.h>
|
||||
|
||||
|
||||
/*
|
||||
* C++ magic...
|
||||
*/
|
||||
|
||||
# ifdef __cplusplus
|
||||
extern "C" {
|
||||
# endif /* __cplusplus */
|
||||
|
||||
|
||||
/*
|
||||
* PPD version...
|
||||
*/
|
||||
|
||||
# define PPD_VERSION 4.3 /* Kept in sync with Adobe version number */
|
||||
|
||||
|
||||
/*
|
||||
* Types and structures...
|
||||
*/
|
||||
|
||||
typedef enum /**** UI types ****/
|
||||
{
|
||||
PPD_UI_BOOLEAN, /* True or False option */
|
||||
PPD_UI_PICKONE, /* Pick one from a list */
|
||||
PPD_UI_PICKMANY /* Pick zero or more from a list */
|
||||
} ppd_ui_t;
|
||||
|
||||
typedef enum /**** Order dependency sections ****/
|
||||
{
|
||||
PPD_ORDER_ANY, /* Option code can be anywhere in the file */
|
||||
PPD_ORDER_DOCUMENT, /* ... must be in the DocumentSetup section */
|
||||
PPD_ORDER_EXIT, /* ... must be sent prior to the document */
|
||||
PPD_ORDER_JCL, /* ... must be sent as a JCL command */
|
||||
PPD_ORDER_PAGE, /* ... must be in the PageSetup section */
|
||||
PPD_ORDER_PROLOG /* ... must be in the Prolog section */
|
||||
} ppd_section_t;
|
||||
|
||||
typedef enum /**** Colorspaces ****/
|
||||
{
|
||||
PPD_CS_CMYK = -4, /* CMYK colorspace */
|
||||
PPD_CS_CMY, /* CMY colorspace */
|
||||
PPD_CS_GRAY = 1, /* Grayscale colorspace */
|
||||
PPD_CS_RGB = 3, /* RGB colorspace */
|
||||
PPD_CS_RGBK, /* RGBK (K = gray) colorspace */
|
||||
PPD_CS_N /* DeviceN colorspace */
|
||||
} ppd_cs_t;
|
||||
|
||||
typedef struct /**** Option choices ****/
|
||||
{
|
||||
char marked, /* 0 if not selected, 1 otherwise */
|
||||
choice[41], /* Computer-readable option name */
|
||||
text[81], /* Human-readable option name */
|
||||
*code; /* Code to send for this option */
|
||||
void *option; /* Pointer to parent option structure */
|
||||
} ppd_choice_t;
|
||||
|
||||
typedef struct /**** Options ****/
|
||||
{
|
||||
char conflicted, /* 0 if no conflicts exist, 1 otherwise */
|
||||
keyword[41], /* Option keyword name ("PageSize", etc.) */
|
||||
defchoice[41], /* Default option choice */
|
||||
text[81]; /* Human-readable text */
|
||||
ppd_ui_t ui; /* Type of UI option */
|
||||
ppd_section_t section; /* Section for command */
|
||||
float order; /* Order number */
|
||||
int num_choices; /* Number of option choices */
|
||||
ppd_choice_t *choices; /* Option choices */
|
||||
} ppd_option_t;
|
||||
|
||||
typedef struct ppd_group_str /**** Groups ****/
|
||||
{
|
||||
char text[81]; /* Human-readable group name */
|
||||
int num_options; /* Number of options */
|
||||
ppd_option_t *options; /* Options */
|
||||
int num_subgroups; /* Number of sub-groups */
|
||||
struct ppd_group_str *subgroups;
|
||||
/* Sub-groups (max depth = 1) */
|
||||
} ppd_group_t;
|
||||
|
||||
typedef struct /**** Constraints ****/
|
||||
{
|
||||
char option1[41], /* First keyword */
|
||||
choice1[41], /* First option/choice (blank for all) */
|
||||
option2[41], /* Second keyword */
|
||||
choice2[41]; /* Second option/choice (blank for all) */
|
||||
} ppd_const_t;
|
||||
|
||||
typedef struct /**** Page Sizes ****/
|
||||
{
|
||||
int marked; /* Page size selected? */
|
||||
char name[41]; /* Media size option */
|
||||
float width, /* Width of media in points */
|
||||
length, /* Length of media in points */
|
||||
left, /* Left printable margin in points */
|
||||
bottom, /* Bottom printable margin in points */
|
||||
right, /* Right printable margin in points */
|
||||
top; /* Top printable margin in points */
|
||||
} ppd_size_t;
|
||||
|
||||
typedef struct /**** Emulators ****/
|
||||
{
|
||||
char name[41], /* Emulator name */
|
||||
*start, /* Code to switch to this emulation */
|
||||
*stop; /* Code to stop this emulation */
|
||||
} ppd_emul_t;
|
||||
|
||||
typedef struct /**** sRGB Color Profiles ****/
|
||||
{
|
||||
char resolution[41], /* Resolution or "-" */
|
||||
media_type[41]; /* Media type of "-" */
|
||||
float density, /* Ink density to use */
|
||||
matrix[3][3]; /* Transform matrix */
|
||||
} ppd_profile_t;
|
||||
|
||||
typedef struct /**** Files ****/
|
||||
{
|
||||
int language_level, /* Language level of device */
|
||||
color_device, /* 1 = color device, 0 = grayscale */
|
||||
variable_sizes, /* 1 = supports variable sizes, 0 = doesn't */
|
||||
accurate_screens,/* 1 = supports accurate screens, 0 = not */
|
||||
contone_only, /* 1 = continuous tone only, 0 = not */
|
||||
landscape, /* -90 or 90 */
|
||||
model_number, /* Device-specific model number */
|
||||
manual_copies; /* 1 = Copies done manually, 0 = hardware */
|
||||
ppd_cs_t colorspace; /* Default colorspace */
|
||||
char *patches; /* Patch commands to be sent to printer */
|
||||
int num_emulations; /* Number of emulations supported */
|
||||
ppd_emul_t *emulations; /* Emulations and the code to invoke them */
|
||||
char *jcl_begin, /* Start JCL commands */
|
||||
*jcl_ps, /* Enter PostScript interpreter */
|
||||
*jcl_end, /* End JCL commands */
|
||||
*lang_encoding, /* Language encoding */
|
||||
*lang_version, /* Language version (English, Spanish, etc.) */
|
||||
*modelname, /* Model name (general) */
|
||||
*ttrasterizer, /* Truetype rasterizer */
|
||||
*manufacturer, /* Manufacturer name */
|
||||
*product, /* Product name (from PS RIP/interpreter) */
|
||||
*nickname, /* Nickname (specific) */
|
||||
*shortnickname; /* Short version of nickname */
|
||||
int num_groups; /* Number of UI groups */
|
||||
ppd_group_t *groups; /* UI groups */
|
||||
int num_sizes; /* Number of page sizes */
|
||||
ppd_size_t *sizes; /* Page sizes */
|
||||
float custom_min[2], /* Minimum variable page size */
|
||||
custom_max[2], /* Maximum variable page size */
|
||||
custom_margins[4];/* Margins around page */
|
||||
int num_consts; /* Number of UI/Non-UI constraints */
|
||||
ppd_const_t *consts; /* UI/Non-UI constraints */
|
||||
int num_fonts; /* Number of pre-loaded fonts */
|
||||
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;
|
||||
|
||||
|
||||
/*
|
||||
* Prototypes...
|
||||
*/
|
||||
|
||||
extern void ppdClose(ppd_file_t *ppd);
|
||||
extern int ppdConflicts(ppd_file_t *ppd);
|
||||
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, const char *keyword,
|
||||
const char *option);
|
||||
extern void ppdMarkDefaults(ppd_file_t *ppd);
|
||||
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(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...
|
||||
*/
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif /* __cplusplus */
|
||||
#endif /* !_CUPS_PPD_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
-252
@@ -1,252 +0,0 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* Raster file 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 for the CUPS Raster source
|
||||
* files are outlined in the GNU Library General Public License, located
|
||||
* in the "pstoraster" directory. If this file is missing or damaged
|
||||
* please contact Easy Software Products at:
|
||||
*
|
||||
* Attn: CUPS Licensing Information
|
||||
* Easy Software Products
|
||||
* 44141 Airport View Drive, Suite 204
|
||||
* Hollywood, Maryland 20636-3111 USA
|
||||
*
|
||||
* Voice: (301) 373-9603
|
||||
* EMail: cups-info@cups.org
|
||||
* WWW: http://www.cups.org
|
||||
*
|
||||
* This code and any derivative of it may be used and distributed
|
||||
* freely under the terms of the GNU General Public License when
|
||||
* used with GNU Ghostscript or its derivatives. Use of the code
|
||||
* (or any derivative of it) with software other than GNU
|
||||
* GhostScript (or its derivatives) is governed by the CUPS license
|
||||
* agreement.
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* cupsRasterClose() - Close a raster stream.
|
||||
* cupsRasterOpen() - Open a raster stream.
|
||||
* cupsRasterReadHeader() - Read a raster page header.
|
||||
* cupsRasterReadPixels() - Read raster pixels.
|
||||
* cupsRasterWriteHeader() - Write a raster page header.
|
||||
* cupsRasterWritePixels() - Write raster pixels.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include "raster.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
|
||||
#if defined(WIN32) || defined(__EMX__)
|
||||
# include <io.h>
|
||||
#else
|
||||
# include <unistd.h>
|
||||
#endif /* WIN32 || __EMX__ */
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsRasterClose()' - Close a raster stream.
|
||||
*/
|
||||
|
||||
void
|
||||
cupsRasterClose(cups_raster_t *r) /* I - Stream to close */
|
||||
{
|
||||
if (r != NULL)
|
||||
free(r);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsRasterOpen()' - Open a raster stream.
|
||||
*/
|
||||
|
||||
cups_raster_t * /* O - New stream */
|
||||
cupsRasterOpen(int fd, /* I - File descriptor */
|
||||
cups_mode_t mode) /* I - Mode */
|
||||
{
|
||||
cups_raster_t *r; /* New stream */
|
||||
|
||||
|
||||
if ((r = calloc(sizeof(cups_raster_t), 1)) == NULL)
|
||||
return (NULL);
|
||||
|
||||
r->fd = fd;
|
||||
r->mode = mode;
|
||||
|
||||
if (mode == CUPS_RASTER_READ)
|
||||
{
|
||||
/*
|
||||
* Open for read - get sync word...
|
||||
*/
|
||||
|
||||
if (read(fd, &(r->sync), sizeof(r->sync)) < sizeof(r->sync))
|
||||
{
|
||||
free(r);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
if (r->sync != CUPS_RASTER_SYNC &&
|
||||
r->sync != CUPS_RASTER_REVSYNC)
|
||||
{
|
||||
free(r);
|
||||
return (NULL);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Open for write - put sync word...
|
||||
*/
|
||||
|
||||
r->sync = CUPS_RASTER_SYNC;
|
||||
if (write(fd, &(r->sync), sizeof(r->sync)) < sizeof(r->sync))
|
||||
{
|
||||
free(r);
|
||||
return (NULL);
|
||||
}
|
||||
}
|
||||
|
||||
return (r);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsRasterReadHeader()' - Read a raster page header.
|
||||
*/
|
||||
|
||||
unsigned /* O - 1 on success, 0 on fail */
|
||||
cupsRasterReadHeader(cups_raster_t *r, /* I - Raster stream */
|
||||
cups_page_header_t *h) /* I - Pointer to header data */
|
||||
{
|
||||
int len; /* Number of words to swap */
|
||||
union swap_s /* Swapping structure */
|
||||
{
|
||||
unsigned char b[4];
|
||||
unsigned v;
|
||||
} *s;
|
||||
|
||||
|
||||
if (r == NULL || r->mode != CUPS_RASTER_READ)
|
||||
return (0);
|
||||
|
||||
if (cupsRasterReadPixels(r, (unsigned char *)h, sizeof(cups_page_header_t)) <
|
||||
sizeof(cups_page_header_t))
|
||||
return (0);
|
||||
|
||||
if (r->sync == CUPS_RASTER_REVSYNC)
|
||||
for (len = (sizeof(cups_page_header_t) - 256) / 4,
|
||||
s = (union swap_s *)&(h->AdvanceDistance);
|
||||
len > 0;
|
||||
len --, s ++)
|
||||
s->v = (((((s->b[3] << 8) | s->b[2]) << 8) | s->b[1]) << 8) | s->b[0];
|
||||
|
||||
return (1);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsRasterReadPixels()' - Read raster pixels.
|
||||
*/
|
||||
|
||||
unsigned /* O - Number of bytes read */
|
||||
cupsRasterReadPixels(cups_raster_t *r, /* I - Raster stream */
|
||||
unsigned char *p, /* I - Pointer to pixel buffer */
|
||||
unsigned len) /* I - Number of bytes to read */
|
||||
{
|
||||
int bytes; /* Bytes read */
|
||||
unsigned remaining; /* Bytes remaining */
|
||||
|
||||
|
||||
if (r == NULL || r->mode != CUPS_RASTER_READ)
|
||||
return (0);
|
||||
|
||||
remaining = len;
|
||||
|
||||
while (remaining > 0)
|
||||
{
|
||||
bytes = read(r->fd, p, remaining);
|
||||
|
||||
if (bytes <= 0)
|
||||
{
|
||||
if (errno != EAGAIN && errno != EINTR)
|
||||
return (0);
|
||||
else
|
||||
continue;
|
||||
}
|
||||
|
||||
remaining -= bytes;
|
||||
p += bytes;
|
||||
}
|
||||
|
||||
return (len);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsRasterWriteHeader()' - Write a raster page header.
|
||||
*/
|
||||
|
||||
unsigned
|
||||
cupsRasterWriteHeader(cups_raster_t *r,
|
||||
cups_page_header_t *h)
|
||||
{
|
||||
if (r == NULL || r->mode != CUPS_RASTER_WRITE)
|
||||
return (0);
|
||||
|
||||
return (cupsRasterWritePixels(r, (unsigned char *)h,
|
||||
sizeof(cups_page_header_t)) ==
|
||||
sizeof(cups_page_header_t));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsRasterWritePixels()' - Write raster pixels.
|
||||
*/
|
||||
|
||||
unsigned /* O - Number of bytes written */
|
||||
cupsRasterWritePixels(cups_raster_t *r, /* I - Raster stream */
|
||||
unsigned char *p, /* I - Bytes to write */
|
||||
unsigned len)/* I - Number of bytes to write */
|
||||
{
|
||||
int bytes; /* Bytes read */
|
||||
unsigned remaining; /* Bytes remaining */
|
||||
|
||||
|
||||
if (r == NULL || r->mode != CUPS_RASTER_WRITE)
|
||||
return (0);
|
||||
|
||||
remaining = len;
|
||||
|
||||
while (remaining > 0)
|
||||
{
|
||||
bytes = write(r->fd, p, remaining);
|
||||
|
||||
if (bytes <= 0)
|
||||
{
|
||||
if (errno != EAGAIN && errno != EINTR)
|
||||
return (0);
|
||||
else
|
||||
continue;
|
||||
}
|
||||
|
||||
remaining -= bytes;
|
||||
p += bytes;
|
||||
}
|
||||
|
||||
return (len);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
-233
@@ -1,233 +0,0 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* Raster file definitions 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 for the CUPS Raster source
|
||||
* files are outlined in the GNU Library General Public License, located
|
||||
* in the "pstoraster" directory. If this file is missing or damaged
|
||||
* please contact Easy Software Products at:
|
||||
*
|
||||
* Attn: CUPS Licensing Information
|
||||
* Easy Software Products
|
||||
* 44141 Airport View Drive, Suite 204
|
||||
* Hollywood, Maryland 20636-3111 USA
|
||||
*
|
||||
* Voice: (301) 373-9603
|
||||
* EMail: cups-info@cups.org
|
||||
* WWW: http://www.cups.org
|
||||
*
|
||||
* This code and any derivative of it may be used and distributed
|
||||
* freely under the terms of the GNU General Public License when
|
||||
* used with GNU Ghostscript or its derivatives. Use of the code
|
||||
* (or any derivative of it) with software other than GNU
|
||||
* GhostScript (or its derivatives) is governed by the CUPS license
|
||||
* agreement.
|
||||
*/
|
||||
|
||||
#ifndef _CUPS_RASTER_H_
|
||||
# define _CUPS_RASTER_H_
|
||||
|
||||
# ifdef __cplusplus
|
||||
extern "C" {
|
||||
# endif /* __cplusplus */
|
||||
|
||||
/*
|
||||
* Every non-PostScript printer driver that supports raster images should
|
||||
* use the application/vnd.cups-raster image file format. Since both the
|
||||
* PostScript RIP (pstoraster, based on GNU Ghostscript 4.03) and Image RIP
|
||||
* (imagetoraster, located in the filter directory) use it, using this format
|
||||
* saves you a lot of work. Also, the PostScript RIP passes any printer
|
||||
* options that are in a PS file to your driver this way as well...
|
||||
*/
|
||||
|
||||
/*
|
||||
* Constants...
|
||||
*/
|
||||
|
||||
# define CUPS_RASTER_SYNC 0x52615374 /* RaSt */
|
||||
# define CUPS_RASTER_REVSYNC 0x74536152 /* tSaR */
|
||||
|
||||
|
||||
/*
|
||||
* Types...
|
||||
*/
|
||||
|
||||
typedef enum
|
||||
{
|
||||
CUPS_RASTER_READ, /* Open stream for reading */
|
||||
CUPS_RASTER_WRITE /* Open stream for writing */
|
||||
} cups_mode_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
CUPS_FALSE, /* Logical false */
|
||||
CUPS_TRUE /* Logical true */
|
||||
} cups_bool_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
CUPS_JOG_NONE, /* Never move pages */
|
||||
CUPS_JOG_FILE, /* Move pages after this file */
|
||||
CUPS_JOG_JOB, /* Move pages after this job */
|
||||
CUPS_JOG_SET /* Move pages after this set */
|
||||
} cups_jog_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
CUPS_ORIENT_0, /* Don't rotate the page */
|
||||
CUPS_ORIENT_90, /* Rotate the page counter-clockwise */
|
||||
CUPS_ORIENT_180, /* Turn the page upside down */
|
||||
CUPS_ORIENT_270 /* Rotate the page clockwise */
|
||||
} cups_orient_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
CUPS_CUT_NONE, /* Never cut the roll */
|
||||
CUPS_CUT_FILE, /* Cut the roll after this file */
|
||||
CUPS_CUT_JOB, /* Cut the roll after this job */
|
||||
CUPS_CUT_SET, /* Cut the roll after this set */
|
||||
CUPS_CUT_PAGE /* Cut the roll after this page */
|
||||
} cups_cut_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
CUPS_ADVANCE_NONE, /* Never advance the roll */
|
||||
CUPS_ADVANCE_FILE, /* Advance the roll after this file */
|
||||
CUPS_ADVANCE_JOB, /* Advance the roll after this job */
|
||||
CUPS_ADVANCE_SET, /* Advance the roll after this set */
|
||||
CUPS_ADVANCE_PAGE /* Advance the roll after this page */
|
||||
} cups_adv_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
CUPS_EDGE_TOP, /* Leading edge is the top of the page */
|
||||
CUPS_EDGE_RIGHT, /* Leading edge is the right of the page */
|
||||
CUPS_EDGE_BOTTOM, /* Leading edge is the bottom of the page */
|
||||
CUPS_EDGE_LEFT /* Leading edge is the left of the page */
|
||||
} cups_edge_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
CUPS_ORDER_CHUNKED, /* CMYK CMYK CMYK ... */
|
||||
CUPS_ORDER_BANDED, /* CCC MMM YYY KKK ... */
|
||||
CUPS_ORDER_PLANAR /* CCC ... MMM ... YYY ... KKK ... */
|
||||
} cups_order_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
CUPS_CSPACE_W, /* Luminance */
|
||||
CUPS_CSPACE_RGB, /* Red, green, blue */
|
||||
CUPS_CSPACE_RGBA, /* Red, green, blue, alpha */
|
||||
CUPS_CSPACE_K, /* Black */
|
||||
CUPS_CSPACE_CMY, /* Cyan, magenta, yellow */
|
||||
CUPS_CSPACE_YMC, /* Yellow, magenta, cyan */
|
||||
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, *
|
||||
* 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;
|
||||
|
||||
|
||||
/*
|
||||
* The page header structure contains the standard PostScript page device
|
||||
* dictionary, along with some CUPS-specific parameters that are provided
|
||||
* by the RIPs...
|
||||
*/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
/**** Standard Page Device Dictionary String Values ****/
|
||||
char MediaClass[64]; /* MediaClass string */
|
||||
char MediaColor[64]; /* MediaColor string */
|
||||
char MediaType[64]; /* MediaType string */
|
||||
char OutputType[64]; /* OutputType string */
|
||||
|
||||
/**** Standard Page Device Dictionary Integer Values ****/
|
||||
unsigned AdvanceDistance; /* AdvanceDistance value in points */
|
||||
cups_adv_t AdvanceMedia; /* AdvanceMedia value (see above) */
|
||||
cups_bool_t Collate; /* Collated copies value */
|
||||
cups_cut_t CutMedia; /* CutMedia value (see above) */
|
||||
cups_bool_t Duplex; /* Duplexed (double-sided) value */
|
||||
unsigned HWResolution[2]; /* Resolution in dots-per-inch */
|
||||
unsigned ImagingBoundingBox[4]; /* Pixel region that is painted (points) */
|
||||
cups_bool_t InsertSheet; /* InsertSheet value */
|
||||
cups_jog_t Jog; /* Jog value (see above) */
|
||||
cups_edge_t LeadingEdge; /* LeadingEdge value (see above) */
|
||||
unsigned Margins[2]; /* Lower-lefthand margins in points */
|
||||
cups_bool_t ManualFeed; /* ManualFeed value */
|
||||
unsigned MediaPosition; /* MediaPosition value */
|
||||
unsigned MediaWeight; /* MediaWeight value in grams/m^2 */
|
||||
cups_bool_t MirrorPrint; /* MirrorPrint value */
|
||||
cups_bool_t NegativePrint; /* NegativePrint value */
|
||||
unsigned NumCopies; /* Number of copies to produce */
|
||||
cups_orient_t Orientation; /* Orientation value (see above) */
|
||||
cups_bool_t OutputFaceUp; /* OutputFaceUp value */
|
||||
unsigned PageSize[2]; /* Width and length of page in points */
|
||||
cups_bool_t Separations; /* Separations value */
|
||||
cups_bool_t TraySwitch; /* TraySwitch value */
|
||||
cups_bool_t Tumble; /* Tumble value */
|
||||
|
||||
/**** CUPS Page Device Dictionary Values ****/
|
||||
unsigned cupsWidth; /* Width of page image in pixels */
|
||||
unsigned cupsHeight; /* Height of page image in pixels */
|
||||
unsigned cupsMediaType; /* Media type code */
|
||||
unsigned cupsBitsPerColor; /* Number of bits for each color */
|
||||
unsigned cupsBitsPerPixel; /* Number of bits for each pixel */
|
||||
unsigned cupsBytesPerLine; /* Number of bytes per line */
|
||||
cups_order_t cupsColorOrder; /* Order of colors */
|
||||
cups_cspace_t cupsColorSpace; /* True colorspace */
|
||||
unsigned cupsCompression; /* Device compression to use */
|
||||
unsigned cupsRowCount; /* Rows per band */
|
||||
unsigned cupsRowFeed; /* Feed between bands */
|
||||
unsigned cupsRowStep; /* Spacing between lines */
|
||||
} cups_page_header_t;
|
||||
|
||||
|
||||
/*
|
||||
* The raster structure maintains information about a raster data
|
||||
* stream...
|
||||
*/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned sync; /* Sync word from start of stream */
|
||||
int fd; /* File descriptor */
|
||||
cups_mode_t mode; /* Read/write mode */
|
||||
} cups_raster_t;
|
||||
|
||||
|
||||
/*
|
||||
* Prototypes...
|
||||
*/
|
||||
|
||||
extern void cupsRasterClose(cups_raster_t *r);
|
||||
extern cups_raster_t *cupsRasterOpen(int fd, cups_mode_t mode);
|
||||
extern unsigned cupsRasterReadHeader(cups_raster_t *r,
|
||||
cups_page_header_t *h);
|
||||
extern unsigned cupsRasterReadPixels(cups_raster_t *r,
|
||||
unsigned char *p, unsigned len);
|
||||
extern unsigned cupsRasterWriteHeader(cups_raster_t *r,
|
||||
cups_page_header_t *h);
|
||||
extern unsigned cupsRasterWritePixels(cups_raster_t *r,
|
||||
unsigned char *p, unsigned len);
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif /* __cplusplus */
|
||||
|
||||
#endif /* !_CUPS_RASTER_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
-125
@@ -1,125 +0,0 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* String functions 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:
|
||||
*
|
||||
* strdup() - Duplicate a string.
|
||||
* strcasecmp() - Do a case-insensitive comparison.
|
||||
* strncasecmp() - Do a case-insensitive comparison on up to N chars.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include "string.h"
|
||||
|
||||
|
||||
/*
|
||||
* 'strdup()' - Duplicate a string.
|
||||
*/
|
||||
|
||||
# ifndef HAVE_STRDUP
|
||||
char * /* O - New string pointer */
|
||||
strdup(const char *s) /* I - String to duplicate */
|
||||
{
|
||||
char *t; /* New string pointer */
|
||||
|
||||
|
||||
if (s == NULL)
|
||||
return (NULL);
|
||||
|
||||
if ((t = malloc(strlen(s) + 1)) == NULL)
|
||||
return (NULL);
|
||||
|
||||
return (strcpy(t, s));
|
||||
}
|
||||
# endif /* !HAVE_STRDUP */
|
||||
|
||||
|
||||
/*
|
||||
* 'strcasecmp()' - Do a case-insensitive comparison.
|
||||
*/
|
||||
|
||||
# ifndef HAVE_STRCASECMP
|
||||
int /* O - Result of comparison (-1, 0, or 1) */
|
||||
strcasecmp(const char *s, /* I - First string */
|
||||
const char *t) /* I - Second string */
|
||||
{
|
||||
while (*s != '\0' && *t != '\0')
|
||||
{
|
||||
if (tolower(*s) < tolower(*t))
|
||||
return (-1);
|
||||
else if (tolower(*s) > tolower(*t))
|
||||
return (1);
|
||||
|
||||
s ++;
|
||||
t ++;
|
||||
}
|
||||
|
||||
if (*s == '\0' && *t == '\0')
|
||||
return (0);
|
||||
else if (*s != '\0')
|
||||
return (1);
|
||||
else
|
||||
return (-1);
|
||||
}
|
||||
# endif /* !HAVE_STRCASECMP */
|
||||
|
||||
/*
|
||||
* 'strncasecmp()' - Do a case-insensitive comparison on up to N chars.
|
||||
*/
|
||||
|
||||
# ifndef HAVE_STRNCASECMP
|
||||
int /* O - Result of comparison (-1, 0, or 1) */
|
||||
strncasecmp(const char *s, /* I - First string */
|
||||
const char *t, /* I - Second string */
|
||||
size_t n) /* I - Maximum number of characters to compare */
|
||||
{
|
||||
while (*s != '\0' && *t != '\0' && n > 0)
|
||||
{
|
||||
if (tolower(*s) < tolower(*t))
|
||||
return (-1);
|
||||
else if (tolower(*s) > tolower(*t))
|
||||
return (1);
|
||||
|
||||
s ++;
|
||||
t ++;
|
||||
n --;
|
||||
}
|
||||
|
||||
if (n == 0)
|
||||
return (0);
|
||||
else if (*s == '\0' && *t == '\0')
|
||||
return (0);
|
||||
else if (*s != '\0')
|
||||
return (1);
|
||||
else
|
||||
return (-1);
|
||||
}
|
||||
# endif /* !HAVE_STRNCASECMP */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
@@ -1,66 +0,0 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* String definitions 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
|
||||
*/
|
||||
|
||||
#ifndef _CUPS_STRING_H_
|
||||
# define _CUPS_STRING_H_
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
# include <config.h>
|
||||
# include <string.h>
|
||||
|
||||
|
||||
/*
|
||||
* Stuff for WIN32 and OS/2...
|
||||
*/
|
||||
|
||||
# if defined(WIN32) || defined(__EMX__)
|
||||
# define strcasecmp stricmp
|
||||
# define strncasecmp strnicmp
|
||||
# endif /* WIN32 || __EMX__ */
|
||||
|
||||
|
||||
/*
|
||||
* Prototypes...
|
||||
*/
|
||||
|
||||
# ifndef HAVE_STRDUP
|
||||
extern char *strdup(const char *);
|
||||
# endif /* !HAVE_STRDUP */
|
||||
|
||||
# ifndef HAVE_STRCASECMP
|
||||
extern int strcasecmp(const char *, const char *);
|
||||
# endif /* !HAVE_STRCASECMP */
|
||||
|
||||
# ifndef HAVE_STRNCASECMP
|
||||
extern int strncasecmp(const char *, const char *, size_t n);
|
||||
# endif /* !HAVE_STRNCASECMP */
|
||||
|
||||
#endif /* !_CUPS_STRING_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
@@ -1,109 +0,0 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* HTTP test program 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "http.h"
|
||||
|
||||
|
||||
/*
|
||||
* 'main()' - Main entry.
|
||||
*/
|
||||
|
||||
int /* O - Exit status */
|
||||
main(int argc, /* I - Number of command-line arguments */
|
||||
char *argv[]) /* I - Command-line arguments */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
http_t *http; /* HTTP connection */
|
||||
http_status_t status; /* Status of GET command */
|
||||
char buffer[1024]; /* Input buffer */
|
||||
int bytes; /* Number of bytes read */
|
||||
FILE *out; /* Output file */
|
||||
|
||||
#define HOST "dns.easysw.com"
|
||||
#define PORT 80
|
||||
|
||||
puts("Connecting to " HOST "...");
|
||||
|
||||
httpInitialize();
|
||||
http = httpConnect(HOST, PORT);
|
||||
if (http == NULL)
|
||||
{
|
||||
puts("Unable to connect to " HOST "!");
|
||||
return (1);
|
||||
}
|
||||
|
||||
puts("Connected to " HOST "...");
|
||||
|
||||
out = stdout;
|
||||
|
||||
for (i = 1; i < argc; i ++)
|
||||
{
|
||||
if (strcmp(argv[i], "-o") == 0)
|
||||
{
|
||||
i ++;
|
||||
out = fopen(argv[i], "wb");
|
||||
continue;
|
||||
}
|
||||
|
||||
printf("Requesting file \"%s\"...\n", argv[i]);
|
||||
httpClearFields(http);
|
||||
httpSetField(http, HTTP_FIELD_ACCEPT_LANGUAGE, "en");
|
||||
httpGet(http, argv[i]);
|
||||
status = httpUpdate(http);
|
||||
|
||||
if (status == HTTP_OK)
|
||||
puts("GET OK:");
|
||||
else
|
||||
printf("GET failed with status %d...\n", status);
|
||||
|
||||
while ((bytes = httpRead(http, buffer, sizeof(buffer))) > 0)
|
||||
{
|
||||
fwrite(buffer, bytes, 1, out);
|
||||
if (out != stdout)
|
||||
printf("Read %d bytes, %d total...\n", bytes, ftell(out));
|
||||
}
|
||||
}
|
||||
|
||||
puts("Closing connection to server...");
|
||||
httpClose(http);
|
||||
|
||||
if (out != stdout)
|
||||
fclose(out);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
@@ -1,199 +0,0 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* MIME test program 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
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* main() - Main entry for the test program.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "mime.h"
|
||||
|
||||
|
||||
/*
|
||||
* Local functions...
|
||||
*/
|
||||
|
||||
static void print_rules(mime_magic_t *rules);
|
||||
|
||||
|
||||
/*
|
||||
* 'main()' - Main entry for the test program.
|
||||
*/
|
||||
|
||||
int /* O - Exit status */
|
||||
main(int argc, /* I - Number of command-line args */
|
||||
char *argv[]) /* I - Command-line arguments */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
char super[MIME_MAX_SUPER], /* Super-type name */
|
||||
type[MIME_MAX_TYPE]; /* Type name */
|
||||
mime_t *mime; /* MIME database */
|
||||
mime_type_t *src, /* Source type */
|
||||
*dst, /* Destination type */
|
||||
**types; /* File type array pointer */
|
||||
mime_filter_t *filters; /* Filters for the file */
|
||||
int num_filters; /* Number of filters for the file */
|
||||
|
||||
|
||||
mime = mimeLoad("../conf");
|
||||
|
||||
puts("MIME database types:");
|
||||
for (i = 0, types = mime->types; i < mime->num_types; i ++, types ++)
|
||||
{
|
||||
printf("\t%s/%s: ", (*types)->super, (*types)->type);
|
||||
print_rules((*types)->rules);
|
||||
puts("");
|
||||
}
|
||||
|
||||
puts("");
|
||||
|
||||
puts("MIME database filters:");
|
||||
for (i = 0, filters = mime->filters; i < mime->num_filters; i ++, filters ++)
|
||||
printf("\t%s/%s to %s/%s: %s (%d)\n",
|
||||
filters->src->super, filters->src->type,
|
||||
filters->dst->super, filters->dst->type,
|
||||
filters->filter, filters->cost);
|
||||
|
||||
puts("");
|
||||
|
||||
switch (argc)
|
||||
{
|
||||
default :
|
||||
fputs("Usage: testmime source-file [destination-type]\n", stderr);
|
||||
return (1);
|
||||
|
||||
case 2 :
|
||||
src = mimeFileType(mime, argv[1]);
|
||||
|
||||
if (src != NULL)
|
||||
{
|
||||
printf("%s: %s/%s\n", argv[1], src->super, src->type);
|
||||
return (0);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("%s: unknown\n", argv[1]);
|
||||
return (1);
|
||||
}
|
||||
|
||||
case 3 :
|
||||
src = mimeFileType(mime, argv[1]);
|
||||
|
||||
sscanf(argv[2], "%[^/]/%s", super, type);
|
||||
dst = mimeType(mime, super, type);
|
||||
|
||||
filters = mimeFilter(mime, src, dst, &num_filters);
|
||||
|
||||
if (filters == NULL)
|
||||
{
|
||||
printf("No filters to convert from %s to %s.\n", argv[1], argv[2]);
|
||||
return (1);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < num_filters; i ++)
|
||||
if (i < (num_filters - 1))
|
||||
printf("%s | ", filters[i].filter);
|
||||
else
|
||||
puts(filters[i].filter);
|
||||
|
||||
return (0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'print_rules()' - Print the rules for a file type...
|
||||
*/
|
||||
|
||||
static void
|
||||
print_rules(mime_magic_t *rules) /* I - Rules to print */
|
||||
{
|
||||
char logic; /* Logic separator */
|
||||
|
||||
|
||||
if (rules == NULL)
|
||||
return;
|
||||
|
||||
if (rules->parent == NULL ||
|
||||
rules->parent->op == MIME_MAGIC_OR)
|
||||
logic = ',';
|
||||
else
|
||||
logic = '+';
|
||||
|
||||
while (rules != NULL)
|
||||
{
|
||||
if (rules->prev != NULL)
|
||||
putchar(logic);
|
||||
|
||||
switch (rules->op)
|
||||
{
|
||||
case MIME_MAGIC_MATCH :
|
||||
printf("match(%s)", rules->value.matchv);
|
||||
break;
|
||||
case MIME_MAGIC_LOCALE :
|
||||
printf("locale(%s)", rules->value.localev);
|
||||
break;
|
||||
case MIME_MAGIC_ASCII :
|
||||
printf("ascii(%d,%d)", rules->offset, rules->length);
|
||||
break;
|
||||
case MIME_MAGIC_PRINTABLE :
|
||||
printf("printable(%d,%d)", rules->offset, rules->length);
|
||||
break;
|
||||
case MIME_MAGIC_STRING :
|
||||
printf("string(%d,%s)", rules->offset, rules->value.stringv);
|
||||
break;
|
||||
case MIME_MAGIC_CHAR :
|
||||
printf("char(%d,%d)", rules->offset, rules->value.charv);
|
||||
break;
|
||||
case MIME_MAGIC_SHORT :
|
||||
printf("short(%d,%d)", rules->offset, rules->value.shortv);
|
||||
break;
|
||||
case MIME_MAGIC_INT :
|
||||
printf("int(%d,%d)", rules->offset, rules->value.intv);
|
||||
break;
|
||||
default :
|
||||
if (rules->child != NULL)
|
||||
{
|
||||
putchar('(');
|
||||
print_rules(rules->child);
|
||||
putchar(')');
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
rules = rules->next;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
@@ -1,102 +0,0 @@
|
||||
# Microsoft Developer Studio Project File - Name="testmime" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||
# ** DO NOT EDIT **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Console Application" 0x0103
|
||||
|
||||
CFG=testmime - Win32 Debug
|
||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||
!MESSAGE use the Export Makefile command and run
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "testmime.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "testmime.mak" CFG="testmime - Win32 Debug"
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE "testmime - Win32 Release" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE "testmime - Win32 Debug" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "testmime - Win32 Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "Release"
|
||||
# PROP BASE Intermediate_Dir "Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Release"
|
||||
# PROP Intermediate_Dir "Release"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /MT /W3 /GX /O2 /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||
# ADD LINK32 cups.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"testmime.exe"
|
||||
|
||||
!ELSEIF "$(CFG)" == "testmime - Win32 Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "testmime___Win32_Debug"
|
||||
# PROP BASE Intermediate_Dir "testmime___Win32_Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Debug"
|
||||
# PROP Intermediate_Dir "Debug"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
||||
# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
||||
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
# ADD LINK32 cupsd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"testmimed.exe" /pdbtype:sept
|
||||
|
||||
!ENDIF
|
||||
|
||||
# Begin Target
|
||||
|
||||
# Name "testmime - Win32 Release"
|
||||
# Name "testmime - Win32 Debug"
|
||||
# Begin Group "Source Files"
|
||||
|
||||
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\testmime.c
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Header Files"
|
||||
|
||||
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\mime.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# End Target
|
||||
# End Project
|
||||
@@ -1,183 +0,0 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* PPD test program 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
|
||||
*
|
||||
* PostScript is a trademark of Adobe Systems, Inc.
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* main() - Main entry for test program.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include "cups.h"
|
||||
#include "string.h"
|
||||
|
||||
|
||||
/*
|
||||
* 'main()' - Main entry for test program.
|
||||
*/
|
||||
|
||||
int /* O - Exit status */
|
||||
main(int argc, /* I - Number of command-line arguments */
|
||||
char *argv[]) /* I - Command-line arguments */
|
||||
{
|
||||
int i, j, k, m, n; /* Looping vars */
|
||||
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 */
|
||||
ppd_option_t *option; /* Standard UI option */
|
||||
ppd_choice_t *choice; /* Standard UI option choice */
|
||||
static char *uis[] = { "BOOLEAN", "PICKONE", "PICKMANY" };
|
||||
static char *sections[] = { "ANY", "DOCUMENT", "EXIT",
|
||||
"JCL", "PAGE", "PROLOG" };
|
||||
|
||||
|
||||
/*
|
||||
* Display PPD files for each file listed on the command-line...
|
||||
*/
|
||||
|
||||
if (argc == 1)
|
||||
{
|
||||
fputs("Usage: ppdtest filename1.ppd [... filenameN.ppd]\n", stderr);
|
||||
return (1);
|
||||
}
|
||||
|
||||
for (i = 1; i < argc; i ++)
|
||||
{
|
||||
if (strstr(argv[i], ".ppd"))
|
||||
filename = argv[i];
|
||||
else
|
||||
filename = cupsGetPPD(argv[i]);
|
||||
|
||||
if ((ppd = ppdOpenFile(filename)) == NULL)
|
||||
{
|
||||
fprintf(stderr, "Unable to open \'%s\' as a PPD file!\n", filename);
|
||||
continue;
|
||||
}
|
||||
|
||||
printf("FILE: %s\n", filename);
|
||||
printf(" language_level = %d\n", ppd->language_level);
|
||||
printf(" color_device = %s\n", ppd->color_device ? "TRUE" : "FALSE");
|
||||
printf(" variable_sizes = %s\n", ppd->variable_sizes ? "TRUE" : "FALSE");
|
||||
printf(" landscape = %d\n", ppd->landscape);
|
||||
|
||||
switch (ppd->colorspace)
|
||||
{
|
||||
case PPD_CS_CMYK :
|
||||
puts(" colorspace = PPD_CS_CMYK");
|
||||
break;
|
||||
case PPD_CS_CMY :
|
||||
puts(" colorspace = PPD_CS_CMY");
|
||||
break;
|
||||
case PPD_CS_GRAY :
|
||||
puts(" colorspace = PPD_CS_GRAY");
|
||||
break;
|
||||
case PPD_CS_RGB :
|
||||
puts(" colorspace = PPD_CS_RGB");
|
||||
break;
|
||||
default :
|
||||
puts(" colorspace = <unknown>");
|
||||
break;
|
||||
}
|
||||
|
||||
printf(" num_emulations = %d\n", ppd->num_emulations);
|
||||
for (j = 0; j < ppd->num_emulations; j ++)
|
||||
printf(" emulations[%d] = %s\n", j, ppd->emulations[j].name);
|
||||
|
||||
printf(" lang_encoding = %s\n", ppd->lang_encoding);
|
||||
printf(" lang_version = %s\n", ppd->lang_version);
|
||||
printf(" modelname = %s\n", ppd->modelname);
|
||||
printf(" ttrasterizer = %s\n",
|
||||
ppd->ttrasterizer == NULL ? "None" : ppd->ttrasterizer);
|
||||
printf(" manufacturer = %s\n", ppd->manufacturer);
|
||||
printf(" product = %s\n", ppd->product);
|
||||
printf(" nickname = %s\n", ppd->nickname);
|
||||
printf(" shortnickname = %s\n", ppd->shortnickname);
|
||||
printf(" patches = %d bytes\n",
|
||||
ppd->patches == NULL ? 0 : strlen(ppd->patches));
|
||||
|
||||
printf(" num_groups = %d\n", ppd->num_groups);
|
||||
for (j = 0, group = ppd->groups; j < ppd->num_groups; j ++, group ++)
|
||||
{
|
||||
printf(" group[%d] = %s\n", j, group->text);
|
||||
|
||||
for (k = 0, option = group->options; k < group->num_options; k ++, option ++)
|
||||
{
|
||||
printf(" options[%d] = %s (%s) %s %s %.0f\n", k,
|
||||
option->keyword, option->text, uis[option->ui],
|
||||
sections[option->section], option->order);
|
||||
|
||||
if (strcmp(option->keyword, "PageSize") == 0 ||
|
||||
strcmp(option->keyword, "PageRegion") == 0)
|
||||
{
|
||||
for (m = option->num_choices, choice = option->choices;
|
||||
m > 0;
|
||||
m --, choice ++)
|
||||
{
|
||||
size = ppdPageSize(ppd, choice->choice);
|
||||
|
||||
if (size == NULL)
|
||||
printf(" %s (%s) = ERROR", choice->choice, choice->text);
|
||||
else
|
||||
printf(" %s (%s) = %.2fx%.2fin (%.1f,%.1f,%.1f,%.1f)", choice->choice,
|
||||
choice->text, size->width / 72.0, size->length / 72.0,
|
||||
size->left / 72.0, size->bottom / 72.0,
|
||||
size->right / 72.0, size->top / 72.0);
|
||||
|
||||
if (strcmp(option->defchoice, choice->choice) == 0)
|
||||
puts(" *");
|
||||
else
|
||||
putchar('\n');
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (m = option->num_choices, choice = option->choices;
|
||||
m > 0;
|
||||
m --, choice ++)
|
||||
{
|
||||
printf(" %s (%s)", choice->choice, choice->text);
|
||||
|
||||
if (strcmp(option->defchoice, choice->choice) == 0)
|
||||
puts(" *");
|
||||
else
|
||||
putchar('\n');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ppdClose(ppd);
|
||||
}
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
@@ -1,102 +0,0 @@
|
||||
# Microsoft Developer Studio Project File - Name="testppd" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||
# ** DO NOT EDIT **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Console Application" 0x0103
|
||||
|
||||
CFG=testppd - Win32 Debug
|
||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||
!MESSAGE use the Export Makefile command and run
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "testppd.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "testppd.mak" CFG="testppd - Win32 Debug"
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE "testppd - Win32 Release" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE "testppd - Win32 Debug" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "testppd - Win32 Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "Release"
|
||||
# PROP BASE Intermediate_Dir "Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Release"
|
||||
# PROP Intermediate_Dir "Release"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /MT /W3 /GX /O2 /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||
# ADD LINK32 cups.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"testppd.exe"
|
||||
|
||||
!ELSEIF "$(CFG)" == "testppd - Win32 Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "testppd___Win32_Debug"
|
||||
# PROP BASE Intermediate_Dir "testppd___Win32_Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Debug"
|
||||
# PROP Intermediate_Dir "Debug"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
||||
# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
||||
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
# ADD LINK32 cupsd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"testppdd.exe" /pdbtype:sept
|
||||
|
||||
!ENDIF
|
||||
|
||||
# Begin Target
|
||||
|
||||
# Name "testppd - Win32 Release"
|
||||
# Name "testppd - Win32 Debug"
|
||||
# Begin Group "Source Files"
|
||||
|
||||
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\testppd.c
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Header Files"
|
||||
|
||||
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\ppd.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# End Target
|
||||
# End Project
|
||||
-1011
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
@@ -1,175 +0,0 @@
|
||||
/*
|
||||
* "$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$".
|
||||
*/
|
||||
-940
@@ -1,940 +0,0 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* Printing utilities 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:
|
||||
*
|
||||
* 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...
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include necessary headers...
|
||||
*/
|
||||
|
||||
#include "cups.h"
|
||||
#include "ipp.h"
|
||||
#include "language.h"
|
||||
#include "string.h"
|
||||
#include "debug.h"
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <sys/stat.h>
|
||||
#if defined(WIN32) || defined(__EMX__)
|
||||
# include <io.h>
|
||||
#else
|
||||
# include <unistd.h>
|
||||
#endif /* WIN32 || __EMX__ */
|
||||
|
||||
|
||||
/*
|
||||
* Local globals...
|
||||
*/
|
||||
|
||||
static http_t *cups_server = NULL;
|
||||
|
||||
|
||||
/*
|
||||
* Local functions...
|
||||
*/
|
||||
|
||||
static char *cups_connect(const char *name, char *printer, char *hostname);
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsCancelJob()' - Cancel a print job.
|
||||
*/
|
||||
|
||||
int /* O - 1 on success, 0 on failure */
|
||||
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 */
|
||||
uri[HTTP_MAX_URI]; /* Printer URI */
|
||||
ipp_t *request, /* IPP request */
|
||||
*response; /* IPP response */
|
||||
cups_lang_t *language; /* Language info */
|
||||
|
||||
|
||||
/*
|
||||
* See if we can connect to the server...
|
||||
*/
|
||||
|
||||
if (!cups_connect(name, printer, hostname))
|
||||
return (0);
|
||||
|
||||
/*
|
||||
* Build an IPP_CANCEL_JOB request, which requires the following
|
||||
* attributes:
|
||||
*
|
||||
* attributes-charset
|
||||
* attributes-natural-language
|
||||
* printer-uri
|
||||
* job-id
|
||||
*/
|
||||
|
||||
request = ippNew();
|
||||
|
||||
request->request.op.operation_id = IPP_CANCEL_JOB;
|
||||
request->request.op.request_id = 1;
|
||||
|
||||
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");
|
||||
|
||||
sprintf(uri, "ipp://%s:%d/printers/%s", hostname, ippPort(), printer);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
|
||||
NULL, uri);
|
||||
|
||||
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-id", job);
|
||||
|
||||
/*
|
||||
* Do the request...
|
||||
*/
|
||||
|
||||
if ((response = cupsDoRequest(cups_server, request, "/jobs/")) == NULL)
|
||||
return (0);
|
||||
|
||||
ippDelete(response);
|
||||
return (1);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsDoFileRequest()' - Do an IPP request...
|
||||
*/
|
||||
|
||||
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 */
|
||||
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 */
|
||||
static char authstring[255] = "";
|
||||
/* Authorization string */
|
||||
|
||||
|
||||
DEBUG_printf(("cupsDoFileRequest(%08x, %08s, \'%s\', \'%s\')\n",
|
||||
http, request, resource, filename ? filename : "(null)"));
|
||||
|
||||
/*
|
||||
* See if we have a file to send...
|
||||
*/
|
||||
|
||||
if (filename != NULL)
|
||||
{
|
||||
if (stat(filename, &fileinfo))
|
||||
{
|
||||
/*
|
||||
* Can't get file information!
|
||||
*/
|
||||
|
||||
ippDelete(request);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
if ((file = fopen(filename, "rb")) == NULL)
|
||||
{
|
||||
/*
|
||||
* Can't open file!
|
||||
*/
|
||||
|
||||
ippDelete(request);
|
||||
return (NULL);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Loop until we can send the request without authorization problems.
|
||||
*/
|
||||
|
||||
response = NULL;
|
||||
|
||||
while (response == NULL)
|
||||
{
|
||||
DEBUG_puts("cupsDoFileRequest: setup...");
|
||||
|
||||
/*
|
||||
* Setup the HTTP variables needed...
|
||||
*/
|
||||
|
||||
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);
|
||||
|
||||
/*
|
||||
* Try the request...
|
||||
*/
|
||||
|
||||
DEBUG_puts("cupsDoFileRequest: post...");
|
||||
|
||||
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)
|
||||
{
|
||||
DEBUG_puts("cupsDoFileRequest: unauthorized...");
|
||||
|
||||
/*
|
||||
* 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...
|
||||
*/
|
||||
|
||||
ippDelete(request);
|
||||
|
||||
return (response);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsGetClasses()' - Get a list of printer classes.
|
||||
*/
|
||||
|
||||
int /* O - Number of classes */
|
||||
cupsGetClasses(char ***classes) /* O - Classes */
|
||||
{
|
||||
int n; /* Number of classes */
|
||||
ipp_t *request, /* IPP Request */
|
||||
*response; /* IPP Response */
|
||||
ipp_attribute_t *attr; /* Current attribute */
|
||||
cups_lang_t *language; /* Default language */
|
||||
|
||||
|
||||
/*
|
||||
* Try to connect to the server...
|
||||
*/
|
||||
|
||||
if (!cups_connect("default", NULL, NULL))
|
||||
return (0);
|
||||
|
||||
/*
|
||||
* 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;
|
||||
|
||||
language = cupsLangDefault();
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
|
||||
"attributes-charset", NULL, cupsLangEncoding(language));
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
|
||||
"attributes-natural-language", NULL, language->language);
|
||||
|
||||
/*
|
||||
* Do the request and get back a response...
|
||||
*/
|
||||
|
||||
n = 0;
|
||||
*classes = NULL;
|
||||
|
||||
if ((response = cupsDoRequest(cups_server, request, "/classes/")) != NULL)
|
||||
{
|
||||
for (attr = response->attrs; attr != NULL; attr = attr->next)
|
||||
if (strcmp(attr->name, "printer-name") == 0 &&
|
||||
attr->value_tag == IPP_TAG_NAME)
|
||||
{
|
||||
if (n == 0)
|
||||
*classes = malloc(sizeof(char *));
|
||||
else
|
||||
*classes = realloc(*classes, sizeof(char *) * (n + 1));
|
||||
|
||||
if (*classes == NULL)
|
||||
{
|
||||
ippDelete(response);
|
||||
return (0);
|
||||
}
|
||||
|
||||
(*classes)[n] = strdup(attr->values[0].string.text);
|
||||
n ++;
|
||||
}
|
||||
|
||||
ippDelete(response);
|
||||
}
|
||||
|
||||
return (n);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsGetDefault()' - Get the default printer or class.
|
||||
*/
|
||||
|
||||
const char * /* O - Default printer or NULL */
|
||||
cupsGetDefault(void)
|
||||
{
|
||||
ipp_t *request, /* IPP Request */
|
||||
*response; /* IPP Response */
|
||||
ipp_attribute_t *attr; /* Current attribute */
|
||||
cups_lang_t *language; /* Default language */
|
||||
static char def_printer[64];/* Default printer */
|
||||
|
||||
|
||||
/*
|
||||
* First see if the LPDEST or PRINTER environment variables are
|
||||
* set...
|
||||
*/
|
||||
|
||||
if (getenv("LPDEST") != NULL)
|
||||
return (getenv("LPDEST"));
|
||||
else if (getenv("PRINTER") != NULL)
|
||||
return (getenv("PRINTER"));
|
||||
|
||||
/*
|
||||
* Try to connect to the server...
|
||||
*/
|
||||
|
||||
if (!cups_connect("default", NULL, NULL))
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Build a CUPS_GET_DEFAULT request, which requires the following
|
||||
* attributes:
|
||||
*
|
||||
* attributes-charset
|
||||
* attributes-natural-language
|
||||
*/
|
||||
|
||||
request = ippNew();
|
||||
|
||||
request->request.op.operation_id = CUPS_GET_DEFAULT;
|
||||
request->request.op.request_id = 1;
|
||||
|
||||
language = cupsLangDefault();
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
|
||||
"attributes-charset", NULL, cupsLangEncoding(language));
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
|
||||
"attributes-natural-language", NULL, language->language);
|
||||
|
||||
/*
|
||||
* Do the request and get back a response...
|
||||
*/
|
||||
|
||||
if ((response = cupsDoRequest(cups_server, request, "/printers/")) != NULL)
|
||||
{
|
||||
if ((attr = ippFindAttribute(response, "printer-name", IPP_TAG_NAME)) != NULL)
|
||||
{
|
||||
strcpy(def_printer, attr->values[0].string.text);
|
||||
ippDelete(response);
|
||||
return (def_printer);
|
||||
}
|
||||
|
||||
ippDelete(response);
|
||||
}
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsGetPPD()' - Get the PPD file for a printer.
|
||||
*/
|
||||
|
||||
const char * /* O - Filename for PPD file */
|
||||
cupsGetPPD(const char *name) /* I - Printer name */
|
||||
{
|
||||
FILE *fp; /* PPD file */
|
||||
int bytes; /* Number of bytes read */
|
||||
char buffer[8192]; /* Buffer for file */
|
||||
char printer[HTTP_MAX_URI], /* Printer name */
|
||||
hostname[HTTP_MAX_URI], /* Hostname */
|
||||
resource[HTTP_MAX_URI]; /* Resource name */
|
||||
static char filename[HTTP_MAX_URI]; /* Local filename */
|
||||
char *tempdir; /* Temporary file directory */
|
||||
struct stat fileinfo; /* File information */
|
||||
|
||||
|
||||
/*
|
||||
* See if we can connect to the server...
|
||||
*/
|
||||
|
||||
if (!cups_connect(name, printer, hostname))
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Then check for the cache file...
|
||||
*/
|
||||
|
||||
#if defined(WIN32) || defined(__EMX__)
|
||||
tempdir = "C:/WINDOWS/TEMP";
|
||||
#else
|
||||
if ((tempdir = getenv("TMPDIR")) == NULL)
|
||||
tempdir = "/tmp";
|
||||
#endif /* WIN32 || __EMX__ */
|
||||
|
||||
sprintf(filename, "%s/%s.ppd", tempdir, printer);
|
||||
if (stat(filename, &fileinfo))
|
||||
memset(&fileinfo, 0, sizeof(fileinfo));
|
||||
|
||||
/*
|
||||
* And send a request to the HTTP server using "if-modified-since"...
|
||||
*/
|
||||
|
||||
sprintf(resource, "/printers/%s.ppd", printer);
|
||||
|
||||
httpClearFields(cups_server);
|
||||
httpSetField(cups_server, HTTP_FIELD_HOST, hostname);
|
||||
httpSetField(cups_server, HTTP_FIELD_IF_MODIFIED_SINCE,
|
||||
httpGetDateString(fileinfo.st_mtime));
|
||||
httpGet(cups_server, resource);
|
||||
|
||||
switch (httpUpdate(cups_server))
|
||||
{
|
||||
case HTTP_OK : /* New file - get it! */
|
||||
break;
|
||||
case HTTP_NOT_MODIFIED : /* File hasn't been modified; use the current copy */
|
||||
return (filename);
|
||||
default :
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* OK, we need to copy the file; open the file and copy it...
|
||||
*/
|
||||
|
||||
unlink(filename);
|
||||
if ((fp = fopen(filename, "w")) == NULL)
|
||||
{
|
||||
/*
|
||||
* Can't open file; close the server connection and return NULL...
|
||||
*/
|
||||
|
||||
httpClose(cups_server);
|
||||
cups_server = NULL;
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
while ((bytes = httpRead(cups_server, buffer, sizeof(buffer))) > 0)
|
||||
fwrite(buffer, bytes, 1, fp);
|
||||
|
||||
fclose(fp);
|
||||
|
||||
return (filename);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsGetPrinters()' - Get a list of printers.
|
||||
*/
|
||||
|
||||
int /* O - Number of printers */
|
||||
cupsGetPrinters(char ***printers) /* O - Printers */
|
||||
{
|
||||
int n; /* Number of printers */
|
||||
ipp_t *request, /* IPP Request */
|
||||
*response; /* IPP Response */
|
||||
ipp_attribute_t *attr; /* Current attribute */
|
||||
cups_lang_t *language; /* Default language */
|
||||
|
||||
|
||||
/*
|
||||
* Try to connect to the server...
|
||||
*/
|
||||
|
||||
if (!cups_connect("default", NULL, NULL))
|
||||
return (0);
|
||||
|
||||
/*
|
||||
* Build a CUPS_GET_PRINTERS request, which requires the following
|
||||
* attributes:
|
||||
*
|
||||
* attributes-charset
|
||||
* attributes-natural-language
|
||||
*/
|
||||
|
||||
request = ippNew();
|
||||
|
||||
request->request.op.operation_id = CUPS_GET_PRINTERS;
|
||||
request->request.op.request_id = 1;
|
||||
|
||||
language = cupsLangDefault();
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
|
||||
"attributes-charset", NULL, cupsLangEncoding(language));
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
|
||||
"attributes-natural-language", NULL, language->language);
|
||||
|
||||
/*
|
||||
* Do the request and get back a response...
|
||||
*/
|
||||
|
||||
n = 0;
|
||||
*printers = NULL;
|
||||
|
||||
if ((response = cupsDoRequest(cups_server, request, "/printers/")) != NULL)
|
||||
{
|
||||
for (attr = response->attrs; attr != NULL; attr = attr->next)
|
||||
if (strcmp(attr->name, "printer-name") == 0 &&
|
||||
attr->value_tag == IPP_TAG_NAME)
|
||||
{
|
||||
if (n == 0)
|
||||
*printers = malloc(sizeof(char *));
|
||||
else
|
||||
*printers = realloc(*printers, sizeof(char *) * (n + 1));
|
||||
|
||||
if (*printers == NULL)
|
||||
{
|
||||
ippDelete(response);
|
||||
return (0);
|
||||
}
|
||||
|
||||
(*printers)[n] = strdup(attr->values[0].string.text);
|
||||
n ++;
|
||||
}
|
||||
|
||||
ippDelete(response);
|
||||
}
|
||||
|
||||
return (n);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsPrintFile()' - Print a file to a printer or class.
|
||||
*/
|
||||
|
||||
int /* O - Job ID */
|
||||
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 */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
int n, n2; /* Attribute values */
|
||||
char *option, /* Name of option */
|
||||
*val, /* Pointer to option value */
|
||||
*s; /* Pointer into option value */
|
||||
ipp_t *request; /* IPP request */
|
||||
ipp_t *response; /* IPP response */
|
||||
ipp_attribute_t *attr; /* IPP job-id attribute */
|
||||
char hostname[HTTP_MAX_URI], /* Hostname */
|
||||
printer[HTTP_MAX_URI], /* Printer or class name */
|
||||
uri[HTTP_MAX_URI]; /* Printer URI */
|
||||
cups_lang_t *language; /* Language to use */
|
||||
int jobid; /* New job ID */
|
||||
|
||||
|
||||
DEBUG_printf(("cupsPrintFile(\'%s\', \'%s\', %d, %08x)\n",
|
||||
printer, filename, num_options, options));
|
||||
|
||||
if (name == NULL || filename == NULL)
|
||||
return (0);
|
||||
|
||||
/*
|
||||
* Setup a connection and request data...
|
||||
*/
|
||||
|
||||
if ((request = ippNew()) == NULL)
|
||||
return (0);
|
||||
|
||||
if (!cups_connect(name, printer, hostname))
|
||||
{
|
||||
DEBUG_printf(("cupsPrintFile: Unable to open connection - %s.\n",
|
||||
strerror(errno)));
|
||||
ippDelete(request);
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Build a standard CUPS URI for the printer and fill the standard IPP
|
||||
* attributes...
|
||||
*/
|
||||
|
||||
request->request.op.operation_id = IPP_PRINT_JOB;
|
||||
request->request.op.request_id = 1;
|
||||
|
||||
sprintf(uri, "ipp://%s:%d/printers/%s", hostname, ippPort(), printer);
|
||||
|
||||
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);
|
||||
|
||||
/*
|
||||
* Handle raw print files...
|
||||
*/
|
||||
|
||||
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");
|
||||
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_NAME, "requesting-user-name",
|
||||
NULL, cupsUser());
|
||||
|
||||
if (title)
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_NAME, "job-name", NULL, title);
|
||||
|
||||
/*
|
||||
* Then add all options on the command-line...
|
||||
*/
|
||||
|
||||
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)...
|
||||
*/
|
||||
|
||||
DEBUG_printf(("cupsPrintFile: Adding string option \'%s\' with value \'%s\'...\n",
|
||||
option, val));
|
||||
|
||||
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, option, NULL, val);
|
||||
}
|
||||
else if (val != NULL)
|
||||
{
|
||||
/*
|
||||
* Numeric value, range, or resolution...
|
||||
*/
|
||||
|
||||
if (*s == '-')
|
||||
{
|
||||
n2 = strtol(s + 1, NULL, 0);
|
||||
ippAddRange(request, IPP_TAG_JOB, option, n, n2);
|
||||
|
||||
DEBUG_printf(("cupsPrintFile: Adding range option \'%s\' with value %d-%d...\n",
|
||||
option, n, n2));
|
||||
}
|
||||
else if (*s == 'x')
|
||||
{
|
||||
n2 = strtol(s + 1, &s, 0);
|
||||
|
||||
if (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);
|
||||
|
||||
DEBUG_printf(("cupsPrintFile: Adding resolution option \'%s\' with value %s...\n",
|
||||
option, val));
|
||||
}
|
||||
else
|
||||
{
|
||||
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, option, n);
|
||||
|
||||
DEBUG_printf(("cupsPrintFile: Adding integer option \'%s\' with value %d...\n",
|
||||
option, n));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Boolean value...
|
||||
*/
|
||||
|
||||
DEBUG_printf(("cupsPrintFile: Adding boolean option \'%s\' with value %d...\n",
|
||||
option, n));
|
||||
ippAddBoolean(request, IPP_TAG_JOB, option, (char)n);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Try printing the file...
|
||||
*/
|
||||
|
||||
sprintf(uri, "/printers/%s", printer);
|
||||
|
||||
if ((response = cupsDoFileRequest(cups_server, request, uri, filename)) == NULL)
|
||||
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;
|
||||
|
||||
if (response != NULL)
|
||||
ippDelete(response);
|
||||
|
||||
return (jobid);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cups_connect()' - Connect to the specified host...
|
||||
*/
|
||||
|
||||
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 */
|
||||
static char printerbuf[HTTP_MAX_URI];
|
||||
/* Name of printer or class */
|
||||
|
||||
|
||||
if (name == NULL)
|
||||
return (NULL);
|
||||
|
||||
if (sscanf(name, "%[^@]@%s", printerbuf, hostbuf) == 1)
|
||||
strcpy(hostbuf, cupsServer());
|
||||
|
||||
if (hostname != NULL)
|
||||
strcpy(hostname, hostbuf);
|
||||
else
|
||||
hostname = hostbuf;
|
||||
|
||||
if (printer != NULL)
|
||||
strcpy(printer, printerbuf);
|
||||
else
|
||||
printer = printerbuf;
|
||||
|
||||
if (cups_server != NULL)
|
||||
{
|
||||
if (strcasecmp(cups_server->hostname, hostname) == 0)
|
||||
return (printer);
|
||||
|
||||
httpClose(cups_server);
|
||||
}
|
||||
|
||||
if ((cups_server = httpConnect(hostname, ippPort())) == NULL)
|
||||
return (NULL);
|
||||
else
|
||||
return (printer);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
@@ -1,62 +0,0 @@
|
||||
%%BeginResource: procset hpgltops 1.0 0
|
||||
%
|
||||
% "$Id: HPGLprolog 312 1999-05-11 19:45:40Z mike $"
|
||||
%
|
||||
% HP-GL/2 filter procset for the Common UNIX Printing System (CUPS).
|
||||
%
|
||||
% This procset contains the basic drawing commands that are used to
|
||||
% reduce output size. Note the 'MP' (make newpath) definition - this
|
||||
% should be called 'NP' (newpath), but GhostScript uses the 'NP' name
|
||||
% for 'noaccess put' in some of its font files...
|
||||
%
|
||||
% Copyright 1993-1999 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
|
||||
%
|
||||
/MO { moveto } bind def
|
||||
/LI { lineto } bind def
|
||||
/FI { fill } bind def
|
||||
/ST { stroke } bind def
|
||||
/CP { closepath } bind def
|
||||
/MP { newpath } bind def
|
||||
%
|
||||
% If you have more than 8 pens defined for your HP-GL/2 output you'll
|
||||
% need to add P# definitions (# = pen number) to set the appropriate color.
|
||||
% If you don't you'll get errors. The default 8 pens cover the primary
|
||||
% colors (white, black, red, green, yellow, blue, magenta, cyan). Ditto
|
||||
% for pen widths (W#).
|
||||
%
|
||||
% PC and PW commands in the input stream will define/redefine these
|
||||
% appropriately, but some packages don't generate them...
|
||||
%
|
||||
/P0 { 1.0 1.0 1.0 setrgbcolor } bind def
|
||||
/P1 { 0.0 0.0 0.0 setrgbcolor } bind def
|
||||
/P2 { 1.0 0.0 0.0 setrgbcolor } bind def
|
||||
/P3 { 0.0 1.0 0.0 setrgbcolor } bind def
|
||||
/P4 { 1.0 1.0 0.0 setrgbcolor } bind def
|
||||
/P5 { 0.0 0.0 1.0 setrgbcolor } bind def
|
||||
/P6 { 1.0 0.0 1.0 setrgbcolor } bind def
|
||||
/P7 { 0.0 1.0 1.0 setrgbcolor } bind def
|
||||
/W0 { DefaultPenWidth PenScaling mul setlinewidth } bind def
|
||||
/W1 { DefaultPenWidth PenScaling mul setlinewidth } bind def
|
||||
/W2 { DefaultPenWidth PenScaling mul setlinewidth } bind def
|
||||
/W3 { DefaultPenWidth PenScaling mul setlinewidth } bind def
|
||||
/W4 { DefaultPenWidth PenScaling mul setlinewidth } bind def
|
||||
/W5 { DefaultPenWidth PenScaling mul setlinewidth } bind def
|
||||
/W6 { DefaultPenWidth PenScaling mul setlinewidth } bind def
|
||||
/W7 { DefaultPenWidth PenScaling mul setlinewidth } bind def
|
||||
%%EndResource
|
||||
+2
-2
@@ -48,8 +48,8 @@ clean:
|
||||
#
|
||||
|
||||
install:
|
||||
-$(MKDIR) $(DATADIR)
|
||||
$(CP) $(FILES) $(DATADIR)
|
||||
-$(MKDIR) $(DATADIR)/data
|
||||
$(CP) $(FILES) $(DATADIR)/data
|
||||
|
||||
#
|
||||
# End of "$Id$".
|
||||
|
||||
-1051
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
+6
-4
@@ -243,17 +243,17 @@ specific model of printer. </P>
|
||||
<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
|
||||
resolution/type density gamma m00 m01 m02 m10 m11 m12 m20 m21 m22
|
||||
</PRE>
|
||||
</UL>
|
||||
<P>The <I>resolution</I> and <I>type</I> values may be "-" 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>
|
||||
<P>The <I>density</I> and <I>gamma</I> values define gamma and density
|
||||
adjustment function such that: </P>
|
||||
<UL>
|
||||
<PRE>
|
||||
f(x) = d * x<SUP>1/d</SUP>
|
||||
f(x) = density * x<SUP>gamma</SUP>
|
||||
</PRE>
|
||||
</UL>
|
||||
<P>The <I>m00</I> through <I>m22</I> values define a 3x3 transformation
|
||||
@@ -662,6 +662,8 @@ 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>This is the root directory of the CUPS static data. </DD>
|
||||
<DT>/usr/share/cups/data </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>
|
||||
|
||||
+77
-77
@@ -1,6 +1,6 @@
|
||||
%PDF-1.2
|
||||
%âãÏÓ
|
||||
1 0 obj<</Producer(htmldoc 2.0b1 Copyright 1997-1999 Michael Sweet, All Rights Reserved.)/CreationDate(D:19990709142832Z)/Title(DRAFT - CUPS Interface Design Description)/Author(Easy Software Products)>>endobj
|
||||
1 0 obj<</Producer(htmldoc 2.0b1 Copyright 1997-1999 Michael Sweet, All Rights Reserved.)/CreationDate(D:19990730151722Z)/Title(DRAFT - CUPS Interface 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/Times-Roman/Encoding 2 0 R>>endobj
|
||||
@@ -794,13 +794,11 @@ endobj
|
||||
424 0 obj<</Type/Page/Parent 408 0 R/Contents 425 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 7 0 R>>>>>>endobj
|
||||
425 0 obj<</Length 426 0 R/Filter/FlateDecode>>stream
|
||||
xÚ-‹Á
|
||||
Â0DïûsÔC´›”êµZÞ´® q#ŒšöÿшÌÀ03¼71ª¯®)öÚ-û5˜!ìV¶‚\gÝÐöƒíùpÂ>MšÃÅ+:ã-•ð9¾¦øLs¹“) ù“uYjË‹¿n1hЬÉëX®�Б>H.#ùendstream
|
||||
endobj
|
||||
426 0 obj
|
||||
123
|
||||
endobj
|
||||
427 0 obj<</Type/Page/Parent 408 0 R/Contents 428 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R/Fc 9 0 R>>>>>>endobj
|
||||
428 0 obj<</Length 429 0 R/Filter/FlateDecode>>stream
|
||||
Â0DïûsÔC´›”êµZÞ´® q#ŒšöÿшÌÀ03¼71ª¯®)öÚ-û5˜!ìV¶‚\gÝÐöƒíùpÂ>MšÃÅ+:ã-•ð9¾¦øLs¹“) ù“uYjË‹¿n1hЬÉëX®�Б>H.#ùendstream
|
||||
endobj
|
||||
426 0 obj
|
||||
123
|
||||
endobj
|
||||
427 0 obj<</Type/Page/Parent 408 0 R/Contents 428 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R/Fc 9 0 R>>>>>>endobj
|
||||
428 0 obj<</Length 429 0 R/Filter/FlateDecode>>stream
|
||||
xÚ�VÑn›0}ÏW\õ©•
|
||||
@@ -929,19 +927,21 @@ endobj
|
||||
450 0 obj
|
||||
1407
|
||||
endobj
|
||||
xÚ�˜Ks£8…÷ùZÎT5n$ñòb“¤=�®N:“¸+kbËD=Ñ<Ò�_?Wº@æ¡JUl£Ì9\]ùû%.üQ2²;^\n/Þo<B)ÙˆOIñUD¶û?Xà9,ÿÜ~»ðB8]©4�+¡Q×Çc.ù‹ìÉTEv8¯¹¥¦\âP¾bš£À�¶îÊ…[êþ=üC¼hå’ ðVñBxËùÊ#… �#ìÚïX¸¥˜¹nG3õhðA«÷]8`ÔGiO}]ÝŠ½ŒÏä߉WQ�]]‘c;>§’Ä“øPz�©Pìœú¦ž?‡JQ
|
||||
ïÊãDÌ»í¯iëvÈáßœÛÈ¢Ûs0º�4ºýF£Û~6n‡ÜöOݾ®óTü<óú¾�YEJ™%©pJ¹û»Ú«úùšQïGp²]!k[kH�ךï5Ú‡EüTûǧQª´®¤Êz|T…ü²*†'›í ”]%wð¡èp"3^•N.
|
||||
451 0 obj<</Type/Page/Parent 408 0 R/Contents 452 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R>>>>>>endobj
|
||||
452 0 obj<</Length 453 0 R/Filter/FlateDecode>>stream
|
||||
xÚ�˜Ks£8…÷ùZÎT5n$ñòb“¤=�®N:“¸+kbËD=Ñ<Ò�_?Wº@æ¡JUl£Ì9\]ùû%.üQ2²;^\n/Þo<B)ÙˆOIñUD¶û?Xà9,ÿÜ~»ðB8]©4�+¡Q×Çc.ù‹ìÉTEv8¯¹¥¦\âP¾bš£À�¶îÊ…[êþ=üC¼hå’ ðVñBxËùÊ#… �#ìÚïX¸¥˜¹nG3õhðA«÷]8`ÔGiO}]ÝŠ½ŒÏä߉WQ�]]‘c;>§’Ä“øPz�©Pìœú¦ž?‡JQ
|
||||
ïÊãDÌ»í¯iëvÈáßœÛÈ¢Ûs0º�4ºýF£Û~6n‡ÜöOݾ®óTü<óú¾�YEJ™%©pJ¹û»Ú«úùšQïGp²]!k[kH�ךï5Ú‡EüTûǧQª´®¤Êz|T…ü²*†'›í ”]%wð¡èp"3^•N.
|
||||
‹ÎÁ�‡†Fßhô�¯ÃæžÝÈá´·ú}±žöÉùú¿U90@d >e5â烞�³”¶óÒLßYLûùæú94m'÷»åmÑNdmíDzÂNÞ,oœ2°³—r·q)Wö¬4ªtbaˆ{`tFÉ£(ËL⼫�ÅHGÖ6Ò‘�tNÛÚa�IŒ÷Åfuœn®Ãc‘t4Dú‹ | ||||