Comparar commits

..

1 Commits

Autor SHA1 Mensagem Data
msweet 11236b767a Import cups.org releases
git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/tags/release-1.0b6@4306 a1ca3aef-8c08-0410-bb20-df032aa958be
2013-05-10 18:56:23 +00:00
152 arquivos alterados com 845 adições e 44356 exclusões
-332
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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&reg; operating systems. It has been developed by Easy Software
Products to promote a standard printing solution for all UNIX vendors
and users. CUPS provides the System V and Berkeley command-line
interfaces.
<P>CUPS uses the Internet Printing Protocol (IETF-IPP) as the basis
for managing print jobs and queues. The Line Printer Daemon (LPD,
RFC1179), Server Message Block (SMB), and AppSocket protocols are also
supported with reduced functionality.
<P>CUPS adds network printer browsing and PostScript Printer
Description (&quot;PPD&quot;)-based printing options to support real
world applications under UNIX.
<P>CUPS also includes a customized version of GNU GhostScript (currently
based off GNU GhostScript 4.03) and an image file RIP that can be used to
support non-PostScript printers.
<H2><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&reg; Windows&reg;.
<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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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);
}
}
+7
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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$".
*/
-57
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
-290
Ver Arquivo
@@ -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
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
-342
Ver Arquivo
@@ -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$".
*/
-373
Ver Arquivo
@@ -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$".
*/
-195
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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$".
*/
-378
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
-238
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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$".
*/
-66
Ver Arquivo
@@ -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$".
*/
-109
Ver Arquivo
@@ -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$".
*/
-199
Ver Arquivo
@@ -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$".
*/
-102
Ver Arquivo
@@ -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
-183
Ver Arquivo
@@ -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$".
*/
-102
Ver Arquivo
@@ -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
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
-175
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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$".
*/
-62
Ver Arquivo
@@ -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
Ver Arquivo
@@ -48,8 +48,8 @@ clean:
#
install:
-$(MKDIR) $(DATADIR)
$(CP) $(FILES) $(DATADIR)
-$(MKDIR) $(DATADIR)/data
$(CP) $(FILES) $(DATADIR)/data
#
# End of "$Id$".
-1051
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+6 -4
Ver Arquivo
@@ -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 &quot;-&quot; to act as a
wildcard. Otherwise they must match one of the <CODE>Resolution</CODE>
or <CODE>MediaType</CODE> attributes defined in the PPD file. </P>
<P>The <I>density</I> value defines a gamma and density adjustment
function such that: </P>
<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
Ver Arquivo
@@ -1,6 +1,6 @@
%PDF-1.2
%âãÏÓ
1 0 obj<</Producer(htmldoc 2.0b1 Copyright 1997-1999 Michael Sweet, All Rights Reserved.)/CreationDate(D: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
VÑn0}ÏW\õ©•
@@ -929,19 +927,21 @@ endobj
450 0 obj
1407
endobj
˜Ks£8…÷ùZÎT5n$ñòb“¤=®N:“¸+kbËD=Ñ<Ò_?Wº@ æ¡JUl£Ì9\]ùû%.üQ²;^\n/Þo<B)ÙˆOIñUD¶û?Xà9,ÿÜ~»ðB8]©4Q×Çc.ù‹ìÉTEv8 ¯¹¥¦\âP¾bš£ÀîÊ…[êþ=üC¼hå’ ðVñBxËùÊ#… #ìÚïX¸¥˜¹nG3õhðA«÷]8`ÔG iO}]ÝŠ½ŒÏä߉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
˜Ks£8…÷ùZÎT5n$ñòb“¤=®N:“¸+kbËD=Ñ<Ò_?Wº@ æ¡JUl£Ì9\]ùû%.üQ²;^\n/Þo<B)ÙˆOIñUD¶û?Xà9,ÿÜ~»ðB8]©4Q×Çc.ù‹ìÉTEv8 ¯¹¥¦\âP¾bš£ÀîÊ…[êþ=üC¼hå’ ðVñBxËùÊ#… #ìÚïX¸¥˜¹nG3õhðA«÷]8`ÔG iO}]ÝŠ½ŒÏä߉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ÛÚaIŒ÷Åfuœn®Ãc‘t4Dú‹šl£nÇ©i+غ[Ý£YÛ(Bz<ŠXÛBsaÄzad:Èûfýé¹q“åе•)¸Ñ®OäP@¸°‚‘»¡ÐIE–ÏYÛgŽôø3g‡â7B!/8=ú$ô¬ïÉ4ÇÉ3 +:)âcI [çi¢ñ{K
Gf»—Õ‚tskF:sáVg¥¥ÏÁtC£ô7º‘ÎÚ‰ dÖëSñ7Ç8Ç{©êlo^ûE°Qu"+‘ˆ¢$‰|†T/‚¤âP½#ϪªÔñ)dòµK•Ê5’«Rj³J¢æ\=AàTüFxóSÛ˜+øš…”ò]û”BÖºrÜé”òÖMJq×u¸Û«›¬„ªx| ½És9-
Ñ‘ÇE\)MöÍ49í‰RëÙ„¬­'HOxâ‡èˆŽôV­O*w61~Lú§vl>³‡Øxh©&µg<¤äý5L•Y
ÎÁ‡†Fßhô¯ÃæžÝÈá´·ú}±žöÉùú¿U90@d >e5â烞³”¶óÒLßYLûùæú94m'÷»åmÑNdmíDzÂNÞ,oœ2°³—r·q)Wö¬4ªtbaˆ{`tFÉ£(ËL⼫ÅHGÖ6Ò‘tNÛÚaIŒ÷Åfuœn®Ãc‘t4Dú‹šl£nÇ©i+غ[Ý£YÛ(Bz<ŠXÛBsaÄzad:Èûfýé¹q“åе•)¸Ñ®OäP@¸°‚‘»¡ÐIE–ÏYÛgŽôø3g‡â7B!/8=ú$ô¬ïÉ4ÇÉ3 +:)âcI [çi¢ñ{K
óÃv>/Ë5¬µ\COÈõx3Ÿ9ÌgÞkWoeQ¨Â4ž“5níV÷p|F?ó¬—Xd­ëÚÐuM]T€ú^šÝ‰$®ä«˜Õ/3ݯN뿎Oë§ÐE–ú‘µÕô¸~M¹{q^/âîêãU·«íÔS=u™>¤÷غ²`“Íü\«©¤nX‚#Ä!tÁ„еžÈÚN¤Ç'õƒæÖ=n_
endobj
453 0 obj
)`srm'EP¨JÿÐîH‡MÂÛ(ÙA;àìRµûï‡,Ǻ¯m]dH×¹ÞçÁÖçG6Ò/ô®{z½wiWb‹-²¶-Òã-ú«0T¿¨_ê
ˆ_ó3wq`tÌ:@ê|^¼Ù—ÛM/ƒÚÎ.OüòÒ>.²Õï¥Ë=<¶Gù»ßw>É}õbº¥Td ¼µÝ±…mr.ïwÃ.8-¶»a—›Ã)ãq#,€Ðz¡ñˆû*½ø¡c§Ž¦ØNþÖ±S©Þõ¯7³~pëø4¨õêÁÇÃóý&jŽrNB†¿ð<ü½ÙBÌ]}½„ð‡¹njóZ”2ÉôË®y›%Ž>ÑiÎôàÒæ¬‡¸Ô=æٛy¡ßÉËþ½ø×Àþ[endstream
endobj
453 0 obj
1348
endobj
454 0 obj<</Type/Page/Parent 408 0 R/Contents 455 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
454 0 obj<</Type/Page/Parent 408 0 R/Contents 455 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
455 0 obj<</Length 456 0 R/Filter/FlateDecode>>stream
xÚÅ—Msâ8†ïüŠ>fªbdÉ_‡=LÈdf*Cm–°µEÕ\#@;`¼¶ÿߖÚ$ x÷’JʆæmÙïÓrKþ§ÇáÙÿ|Ù»õ>ÞIàFS9D‰ðM®D$=ÅF÷dŒ9UÙöq£M>·QÎB
@@ -1507,71 +1507,71 @@ xref
0000032975 00000 n
0000033079 00000 n
0000033181 00000 n
0000034967 00000 n
0000035072 00000 n
0000035122 00000 n
0000035156 00000 n
0000035190 00000 n
0000035785 00000 n
0000035834 00000 n
0000035883 00000 n
0000035932 00000 n
0000035981 00000 n
0000036030 00000 n
0000036079 00000 n
0000036128 00000 n
0000033284 00000 n
0000034654 00000 n
0000034758 00000 n
0000034863 00000 n
0000034967 00000 n
0000035072 00000 n
0000035122 00000 n
0000035156 00000 n
0000035190 00000 n
0000035785 00000 n
0000035834 00000 n
0000035883 00000 n
0000035932 00000 n
0000036226 00000 n
0000036275 00000 n
0000036324 00000 n
0000036373 00000 n
0000036422 00000 n
0000036471 00000 n
0000036520 00000 n
0000036569 00000 n
0000036618 00000 n
0000036667 00000 n
0000036716 00000 n
0000036765 00000 n
0000036814 00000 n
0000036863 00000 n
0000036912 00000 n
0000036961 00000 n
0000037010 00000 n
0000037059 00000 n
0000037108 00000 n
0000037157 00000 n
0000037206 00000 n
0000037255 00000 n
0000037304 00000 n
0000037353 00000 n
0000037402 00000 n
0000037451 00000 n
0000037500 00000 n
0000037549 00000 n
0000037598 00000 n
0000037647 00000 n
0000037696 00000 n
0000037745 00000 n
0000037794 00000 n
0000037843 00000 n
0000037892 00000 n
0000037941 00000 n
0000038218 00000 n
0000038370 00000 n
0000044766 00000 n
0000044788 00000 n
0000044901 00000 n
0000045003 00000 n
0000045023 00000 n
0000045163 00000 n
0000046071 00000 n
0000046092 00000 n
0000046205 00000 n
0000046396 00000 n
0000046417 00000 n
0000035981 00000 n
0000036030 00000 n
0000036079 00000 n
0000036128 00000 n
0000036177 00000 n
0000036226 00000 n
0000036275 00000 n
0000036324 00000 n
0000036373 00000 n
0000036422 00000 n
0000036471 00000 n
0000036520 00000 n
0000036569 00000 n
0000036618 00000 n
0000036667 00000 n
0000036716 00000 n
0000036765 00000 n
0000036814 00000 n
0000036863 00000 n
0000036912 00000 n
0000036961 00000 n
0000037010 00000 n
0000037059 00000 n
0000037108 00000 n
0000037157 00000 n
0000037206 00000 n
0000037255 00000 n
0000037304 00000 n
0000037353 00000 n
0000037402 00000 n
0000037451 00000 n
0000037500 00000 n
0000037549 00000 n
0000037598 00000 n
0000037647 00000 n
0000037696 00000 n
0000037745 00000 n
0000037794 00000 n
0000037843 00000 n
0000037892 00000 n
0000037941 00000 n
0000038218 00000 n
0000038370 00000 n
0000044766 00000 n
0000044788 00000 n
0000044901 00000 n
0000045003 00000 n
0000045023 00000 n
0000045163 00000 n
0000046071 00000 n
0000046092 00000 n
0000046205 00000 n
0000046396 00000 n
0000047291 00000 n
0000046417 00000 n
0000046557 00000 n
+7 -4
Ver Arquivo
@@ -210,18 +210,18 @@ printer.
<P>This string attribute specifies a color profile of the form:
<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>The <I>density</I> value defines a gamma and density adjustment function
such that:
<P>The <I>density</I> and <I>gamma</I> values define gamma and density
adjustment function such that:
<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
@@ -1091,6 +1091,9 @@ System (CIFS) protocols are described at
<DD>The <CODE>lpc</CODE> and <CODE>cupsd</CODE> commands resize here.
<DT>/usr/share/cups
<DD>This is the root directory of the CUPS static data.
<DT>/usr/share/cups/data
<DD>The character set and filter data files reside here.
<DT>/usr/share/cups/fonts
+36 -4
Ver Arquivo
@@ -345,8 +345,8 @@ installation of CUPS: </P>
<DT>file:/dev/filename </DT>
<DT>/dev/filename </DT>
<DD>Sends all output to the specified file. </DD>
<DT>http://hostname[:port]/resource </DT>
<DT>ipp://hostname[:port]/resource </DT>
<DT>http://[username:password@]hostname[:port]/resource </DT>
<DT>ipp://[username:password@]hostname[:port]/resource </DT>
<DD>Sends all output to the specified IPP printer or server. The <I>
port</I> parameters defaults to 631. </DD>
<DT>lpd://hostname/queue </DT>
@@ -365,6 +365,9 @@ character:
<LI><CODE>parity=<I>none</I></CODE> - Turns parity checking off. </LI>
</UL>
</DD>
<DT>smb://[username:password@]hostname/queue </DT>
<DD>Sends all output to the specified SMB (Windows) printer queue
using the SAMBA software. </DD>
<DT>socket://hostname[:port] </DT>
<DD>Sends all output to the specified printer using the AppSocket
protocol. The <I>port</I> parameter defaults to 9100. </DD>
@@ -598,7 +601,21 @@ Allow from nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
</UL>
<P><CODE>Allow</CODE> directives are cummulative, so multiple <CODE>
Allow</CODE> directives can be used to allow access for multiple hosts
or networks. </P>
or networks. The <CODE>/mm</CODE> notation specifies a CIDR netmask:
<CENTER>
<TABLE BORDER=1 WIDTH=80%>
<TR><TH>mm</TH><TH>netmask</TH></TR>
<TR><TD>0</TD><TD>0.0.0.0</TD></TR>
<TR><TD>1</TD><TD>128.0.0.0</TD></TR>
<TR><TD>2</TD><TD>192.0.0.0</TD></TR>
<TR><TD>...</TD><TD>...</TD></TR>
<TR><TD>8</TD><TD>255.0.0.0</TD></TR>
<TR><TD>16</TD><TD>255.255.0.0</TD></TR>
<TR><TD>24</TD><TD>255.255.255.0</TD></TR>
<TR><TD>32</TD><TD>255.255.255.255</TD></TR>
</TABLE>
</CENTER>
</P>
<P>The <CODE>Allow</CODE> directive must appear inside a <CODE>Location</CODE>
directive. </P>
<H3><A NAME=5_4_4>Deny</A></H3>
@@ -620,7 +637,22 @@ Deny from nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
</PRE>
</UL>
<P><CODE>Deny</CODE> directives are cummulative, so multiple <CODE>Deny</CODE>
directives can be used to allow access for multiple hosts or networks. </P>
directives can be used to allow access for multiple hosts or networks.
The <CODE>/mm</CODE> notation specifies a CIDR netmask:
<CENTER>
<TABLE BORDER=1 WIDTH=80%>
<TR><TH>mm</TH><TH>netmask</TH></TR>
<TR><TD>0</TD><TD>0.0.0.0</TD></TR>
<TR><TD>1</TD><TD>128.0.0.0</TD></TR>
<TR><TD>2</TD><TD>192.0.0.0</TD></TR>
<TR><TD>...</TD><TD>...</TD></TR>
<TR><TD>8</TD><TD>255.0.0.0</TD></TR>
<TR><TD>16</TD><TD>255.255.0.0</TD></TR>
<TR><TD>24</TD><TD>255.255.255.0</TD></TR>
<TR><TD>32</TD><TD>255.255.255.255</TD></TR>
</TABLE>
</CENTER>
</P>
<P>The <CODE>Deny</CODE> directive must appear inside a <CODE>Location</CODE>
directive. </P>
<H3><A NAME=5_4_5>AuthType</A></H3>
+231 -219
Ver Arquivo
@@ -1,6 +1,6 @@
%PDF-1.2
%âãÏÓ
1 0 obj<</Producer(htmldoc 2.0b1 Copyright 1997-1999 Michael Sweet, All Rights Reserved.)/CreationDate(D:19990624171520Z)/Title(DRAFT - CUPS Software Administrators Manual)/Author(Easy Software Products)>>endobj
1 0 obj<</Producer(htmldoc 2.0b1 Copyright 1997-1999 Michael Sweet, All Rights Reserved.)/CreationDate(D:19990730151724Z)/Title(DRAFT - CUPS Software Administrators Manual)/Author(Easy Software Products)>>endobj
2 0 obj<</Type/Encoding/BaseEncoding/WinAnsiEncoding>>endobj
3 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding 2 0 R>>endobj
4 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier-Oblique/Encoding 2 0 R>>endobj
@@ -85,27 +85,27 @@
76 0 obj<</Subtype/Link/Rect[143.8 369.6 162.4 382.6]/Border[0 0 0]/Dest[244 0 R/XYZ null 311 0]>>endobj
77 0 obj<</Subtype/Link/Rect[162.4 369.6 212.2 382.6]/Border[0 0 0]/Dest[244 0 R/XYZ null 311 0]>>endobj
78 0 obj<</Subtype/Link/Rect[212.2 369.6 246.4 382.6]/Border[0 0 0]/Dest[244 0 R/XYZ null 311 0]>>endobj
79 0 obj<</Subtype/Link/Rect[144.0 356.4 173.0 369.4]/Border[0 0 0]/Dest[247 0 R/XYZ null 224 0]>>endobj
80 0 obj<</Subtype/Link/Rect[173.0 356.4 214.9 369.4]/Border[0 0 0]/Dest[247 0 R/XYZ null 224 0]>>endobj
81 0 obj<</Subtype/Link/Rect[214.9 356.4 247.6 369.4]/Border[0 0 0]/Dest[247 0 R/XYZ null 224 0]>>endobj
82 0 obj<</Subtype/Link/Rect[247.6 356.4 280.6 369.4]/Border[0 0 0]/Dest[247 0 R/XYZ null 224 0]>>endobj
83 0 obj<</Subtype/Link/Rect[108.0 343.2 156.6 356.2]/Border[0 0 0]/Dest[250 0 R/XYZ null 730 0]>>endobj
84 0 obj<</Subtype/Link/Rect[156.6 343.2 190.8 356.2]/Border[0 0 0]/Dest[250 0 R/XYZ null 730 0]>>endobj
85 0 obj<</Subtype/Link/Rect[108.0 330.0 140.7 343.0]/Border[0 0 0]/Dest[250 0 R/XYZ null 627 0]>>endobj
86 0 obj<</Subtype/Link/Rect[140.7 330.0 173.7 343.0]/Border[0 0 0]/Dest[250 0 R/XYZ null 627 0]>>endobj
87 0 obj<</Subtype/Link/Rect[108.0 316.8 141.9 329.8]/Border[0 0 0]/Dest[250 0 R/XYZ null 420 0]>>endobj
88 0 obj<</Subtype/Link/Rect[141.9 316.8 158.1 329.8]/Border[0 0 0]/Dest[250 0 R/XYZ null 420 0]>>endobj
89 0 obj<</Subtype/Link/Rect[158.1 316.8 193.9 329.8]/Border[0 0 0]/Dest[250 0 R/XYZ null 420 0]>>endobj
90 0 obj<</Subtype/Link/Rect[193.9 316.8 223.8 329.8]/Border[0 0 0]/Dest[250 0 R/XYZ null 420 0]>>endobj
91 0 obj<</Subtype/Link/Rect[108.0 303.6 145.6 316.6]/Border[0 0 0]/Dest[250 0 R/XYZ null 277 0]>>endobj
92 0 obj<</Subtype/Link/Rect[145.6 303.6 164.2 316.6]/Border[0 0 0]/Dest[250 0 R/XYZ null 277 0]>>endobj
93 0 obj<</Subtype/Link/Rect[164.2 303.6 206.7 316.6]/Border[0 0 0]/Dest[250 0 R/XYZ null 277 0]>>endobj
94 0 obj<</Subtype/Link/Rect[206.7 303.6 240.9 316.6]/Border[0 0 0]/Dest[250 0 R/XYZ null 277 0]>>endobj
95 0 obj<</Subtype/Link/Rect[108.0 290.4 156.0 303.4]/Border[0 0 0]/Dest[253 0 R/XYZ null 767 0]>>endobj
96 0 obj<</Subtype/Link/Rect[156.0 290.4 174.6 303.4]/Border[0 0 0]/Dest[253 0 R/XYZ null 767 0]>>endobj
97 0 obj<</Subtype/Link/Rect[174.6 290.4 219.5 303.4]/Border[0 0 0]/Dest[253 0 R/XYZ null 767 0]>>endobj
98 0 obj<</Subtype/Link/Rect[219.5 290.4 243.7 303.4]/Border[0 0 0]/Dest[253 0 R/XYZ null 767 0]>>endobj
99 0 obj<</Subtype/Link/Rect[243.7 290.4 263.2 303.4]/Border[0 0 0]/Dest[253 0 R/XYZ null 767 0]>>endobj
79 0 obj<</Subtype/Link/Rect[144.0 356.4 173.0 369.4]/Border[0 0 0]/Dest[247 0 R/XYZ null 172 0]>>endobj
80 0 obj<</Subtype/Link/Rect[173.0 356.4 214.9 369.4]/Border[0 0 0]/Dest[247 0 R/XYZ null 172 0]>>endobj
81 0 obj<</Subtype/Link/Rect[214.9 356.4 247.6 369.4]/Border[0 0 0]/Dest[247 0 R/XYZ null 172 0]>>endobj
82 0 obj<</Subtype/Link/Rect[247.6 356.4 280.6 369.4]/Border[0 0 0]/Dest[247 0 R/XYZ null 172 0]>>endobj
83 0 obj<</Subtype/Link/Rect[108.0 343.2 156.6 356.2]/Border[0 0 0]/Dest[250 0 R/XYZ null 666 0]>>endobj
84 0 obj<</Subtype/Link/Rect[156.6 343.2 190.8 356.2]/Border[0 0 0]/Dest[250 0 R/XYZ null 666 0]>>endobj
85 0 obj<</Subtype/Link/Rect[108.0 330.0 140.7 343.0]/Border[0 0 0]/Dest[250 0 R/XYZ null 563 0]>>endobj
86 0 obj<</Subtype/Link/Rect[140.7 330.0 173.7 343.0]/Border[0 0 0]/Dest[250 0 R/XYZ null 563 0]>>endobj
87 0 obj<</Subtype/Link/Rect[108.0 316.8 141.9 329.8]/Border[0 0 0]/Dest[250 0 R/XYZ null 356 0]>>endobj
88 0 obj<</Subtype/Link/Rect[141.9 316.8 158.1 329.8]/Border[0 0 0]/Dest[250 0 R/XYZ null 356 0]>>endobj
89 0 obj<</Subtype/Link/Rect[158.1 316.8 193.9 329.8]/Border[0 0 0]/Dest[250 0 R/XYZ null 356 0]>>endobj
90 0 obj<</Subtype/Link/Rect[193.9 316.8 223.8 329.8]/Border[0 0 0]/Dest[250 0 R/XYZ null 356 0]>>endobj
91 0 obj<</Subtype/Link/Rect[108.0 303.6 145.6 316.6]/Border[0 0 0]/Dest[250 0 R/XYZ null 213 0]>>endobj
92 0 obj<</Subtype/Link/Rect[145.6 303.6 164.2 316.6]/Border[0 0 0]/Dest[250 0 R/XYZ null 213 0]>>endobj
93 0 obj<</Subtype/Link/Rect[164.2 303.6 206.7 316.6]/Border[0 0 0]/Dest[250 0 R/XYZ null 213 0]>>endobj
94 0 obj<</Subtype/Link/Rect[206.7 303.6 240.9 316.6]/Border[0 0 0]/Dest[250 0 R/XYZ null 213 0]>>endobj
95 0 obj<</Subtype/Link/Rect[108.0 290.4 156.0 303.4]/Border[0 0 0]/Dest[253 0 R/XYZ null 703 0]>>endobj
96 0 obj<</Subtype/Link/Rect[156.0 290.4 174.6 303.4]/Border[0 0 0]/Dest[253 0 R/XYZ null 703 0]>>endobj
97 0 obj<</Subtype/Link/Rect[174.6 290.4 219.5 303.4]/Border[0 0 0]/Dest[253 0 R/XYZ null 703 0]>>endobj
98 0 obj<</Subtype/Link/Rect[219.5 290.4 243.7 303.4]/Border[0 0 0]/Dest[253 0 R/XYZ null 703 0]>>endobj
99 0 obj<</Subtype/Link/Rect[243.7 290.4 263.2 303.4]/Border[0 0 0]/Dest[253 0 R/XYZ null 703 0]>>endobj
100 0 obj<</Subtype/Link/Rect[72.0 264.0 80.2 277.0]/Border[0 0 0]/Dest[256 0 R/XYZ null 818 0]>>endobj
101 0 obj<</Subtype/Link/Rect[80.2 264.0 89.3 277.0]/Border[0 0 0]/Dest[256 0 R/XYZ null 818 0]>>endobj
102 0 obj<</Subtype/Link/Rect[89.3 264.0 131.1 277.0]/Border[0 0 0]/Dest[256 0 R/XYZ null 818 0]>>endobj
@@ -128,10 +128,10 @@
119 0 obj<</Subtype/Link/Rect[144.0 145.2 183.1 158.2]/Border[0 0 0]/Dest[262 0 R/XYZ null 482 0]>>endobj
120 0 obj<</Subtype/Link/Rect[144.0 132.0 169.7 145.0]/Border[0 0 0]/Dest[265 0 R/XYZ null 782 0]>>endobj
121 0 obj<</Subtype/Link/Rect[144.0 118.8 171.5 131.8]/Border[0 0 0]/Dest[265 0 R/XYZ null 617 0]>>endobj
122 0 obj<</Subtype/Link/Rect[144.0 105.6 167.8 118.6]/Border[0 0 0]/Dest[265 0 R/XYZ null 331 0]>>endobj
123 0 obj<</Subtype/Link/Rect[144.0 92.4 188.6 105.4]/Border[0 0 0]/Dest[268 0 R/XYZ null 713 0]>>endobj
124 0 obj<</Subtype/Link/Rect[144.0 79.2 189.8 92.2]/Border[0 0 0]/Dest[268 0 R/XYZ null 561 0]>>endobj
125 0 obj<</Subtype/Link/Rect[144.0 66.0 220.4 79.0]/Border[0 0 0]/Dest[268 0 R/XYZ null 357 0]>>endobj
122 0 obj<</Subtype/Link/Rect[144.0 105.6 167.8 118.6]/Border[0 0 0]/Dest[268 0 R/XYZ null 782 0]>>endobj
123 0 obj<</Subtype/Link/Rect[144.0 92.4 188.6 105.4]/Border[0 0 0]/Dest[268 0 R/XYZ null 274 0]>>endobj
124 0 obj<</Subtype/Link/Rect[144.0 79.2 189.8 92.2]/Border[0 0 0]/Dest[271 0 R/XYZ null 782 0]>>endobj
125 0 obj<</Subtype/Link/Rect[144.0 66.0 220.4 79.0]/Border[0 0 0]/Dest[271 0 R/XYZ null 577 0]>>endobj
126 0 obj[23 0 R
24 0 R
25 0 R
@@ -236,11 +236,11 @@
124 0 R
125 0 R
]endobj
127 0 obj<</Subtype/Link/Rect[108.0 673.2 168.5 686.2]/Border[0 0 0]/Dest[268 0 R/XYZ null 259 0]>>endobj
128 0 obj<</Subtype/Link/Rect[72.0 660.0 91.9 673.0]/Border[0 0 0]/Dest[271 0 R/XYZ null 800 0]>>endobj
129 0 obj<</Subtype/Link/Rect[91.9 660.0 127.9 673.0]/Border[0 0 0]/Dest[271 0 R/XYZ null 800 0]>>endobj
130 0 obj<</Subtype/Link/Rect[108.0 646.8 159.0 659.8]/Border[0 0 0]/Dest[271 0 R/XYZ null 679 0]>>endobj
131 0 obj<</Subtype/Link/Rect[108.0 633.6 161.5 646.6]/Border[0 0 0]/Dest[271 0 R/XYZ null 202 0]>>endobj
127 0 obj<</Subtype/Link/Rect[108.0 673.2 168.5 686.2]/Border[0 0 0]/Dest[271 0 R/XYZ null 479 0]>>endobj
128 0 obj<</Subtype/Link/Rect[72.0 660.0 91.9 673.0]/Border[0 0 0]/Dest[271 0 R/XYZ null 408 0]>>endobj
129 0 obj<</Subtype/Link/Rect[91.9 660.0 127.9 673.0]/Border[0 0 0]/Dest[271 0 R/XYZ null 408 0]>>endobj
130 0 obj<</Subtype/Link/Rect[108.0 646.8 159.0 659.8]/Border[0 0 0]/Dest[271 0 R/XYZ null 288 0]>>endobj
131 0 obj<</Subtype/Link/Rect[108.0 633.6 161.5 646.6]/Border[0 0 0]/Dest[274 0 R/XYZ null 488 0]>>endobj
132 0 obj<</Subtype/Link/Rect[36.0 607.2 44.2 620.2]/Border[0 0 0]/Dest[280 0 R/XYZ null 818 0]>>endobj
133 0 obj<</Subtype/Link/Rect[44.2 607.2 53.3 620.2]/Border[0 0 0]/Dest[280 0 R/XYZ null 818 0]>>endobj
134 0 obj<</Subtype/Link/Rect[53.3 607.2 90.2 620.2]/Border[0 0 0]/Dest[280 0 R/XYZ null 818 0]>>endobj
@@ -308,12 +308,12 @@
172 0 obj<</D[244 0 R/XYZ null 818 null]>>endobj
173 0 obj<</D[244 0 R/XYZ null 416 null]>>endobj
174 0 obj<</D[244 0 R/XYZ null 311 null]>>endobj
175 0 obj<</D[247 0 R/XYZ null 224 null]>>endobj
176 0 obj<</D[250 0 R/XYZ null 730 null]>>endobj
177 0 obj<</D[250 0 R/XYZ null 627 null]>>endobj
178 0 obj<</D[250 0 R/XYZ null 420 null]>>endobj
179 0 obj<</D[250 0 R/XYZ null 277 null]>>endobj
180 0 obj<</D[253 0 R/XYZ null 767 null]>>endobj
175 0 obj<</D[247 0 R/XYZ null 172 null]>>endobj
176 0 obj<</D[250 0 R/XYZ null 666 null]>>endobj
177 0 obj<</D[250 0 R/XYZ null 563 null]>>endobj
178 0 obj<</D[250 0 R/XYZ null 356 null]>>endobj
179 0 obj<</D[250 0 R/XYZ null 213 null]>>endobj
180 0 obj<</D[253 0 R/XYZ null 703 null]>>endobj
181 0 obj<</D[256 0 R/XYZ null 818 null]>>endobj
182 0 obj<</D[256 0 R/XYZ null 416 null]>>endobj
183 0 obj<</D[256 0 R/XYZ null 234 null]>>endobj
@@ -326,14 +326,14 @@
190 0 obj<</D[262 0 R/XYZ null 482 null]>>endobj
191 0 obj<</D[265 0 R/XYZ null 782 null]>>endobj
192 0 obj<</D[265 0 R/XYZ null 617 null]>>endobj
193 0 obj<</D[265 0 R/XYZ null 331 null]>>endobj
194 0 obj<</D[268 0 R/XYZ null 713 null]>>endobj
195 0 obj<</D[268 0 R/XYZ null 561 null]>>endobj
196 0 obj<</D[268 0 R/XYZ null 357 null]>>endobj
197 0 obj<</D[268 0 R/XYZ null 259 null]>>endobj
198 0 obj<</D[271 0 R/XYZ null 800 null]>>endobj
199 0 obj<</D[271 0 R/XYZ null 679 null]>>endobj
200 0 obj<</D[271 0 R/XYZ null 202 null]>>endobj
193 0 obj<</D[268 0 R/XYZ null 782 null]>>endobj
194 0 obj<</D[268 0 R/XYZ null 274 null]>>endobj
195 0 obj<</D[271 0 R/XYZ null 782 null]>>endobj
196 0 obj<</D[271 0 R/XYZ null 577 null]>>endobj
197 0 obj<</D[271 0 R/XYZ null 479 null]>>endobj
198 0 obj<</D[271 0 R/XYZ null 408 null]>>endobj
199 0 obj<</D[271 0 R/XYZ null 288 null]>>endobj
200 0 obj<</D[274 0 R/XYZ null 488 null]>>endobj
201 0 obj<</D[280 0 R/XYZ null 818 null]>>endobj
202 0 obj<</D[280 0 R/XYZ null 429 null]>>endobj
203 0 obj<</D[280 0 R/XYZ null 337 null]>>endobj
@@ -517,30 +517,32 @@ endobj
;(¿H¤0e…²¾¸8­ŒA;öÆ"¨­£," Ì·Å0
žÄMyBøËˆG1LȺz ¹Ó?¼=0
FÏ]yÞíâq”g÷Ú·[V›î‰ÔëÓ—LúxM|¤ÕXÆÀiHêõ)Ù=§•¬¶(³^a‡¦dô¢ÙÜë›;Ø瀕dJc¤E/:…@
ŠIQ#P¼t+{d¢`²Õ´;ŸÉÓO¸D†ÿûOh0‰qãø2Œëö|iýíû=endstream
endobj
234 0 obj
831
endobj
ŠIQ#P¼t+{d¢`²Õ´;ŸÉÓO¸D†ÿûOh0‰qãø2Œëö|iýíû=endstream
endobj
234 0 obj
831
endobj
235 0 obj<</Type/Page/Parent 207 0 R/Contents 236 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R>>>>/Annots 22 0 R>>endobj
236 0 obj<</Length 237 0 R/Filter/FlateDecode>>stream
U]sÓ:}ϯØa†¹a¦–í´
U]sÓ:}ϯØa†¹a¦–í´
3÷¡´M JiÍË^[Nd©!ÿž]9n\ÓÞ“Œ[ûuέ¾bˆðÃñ˜¾Y5x.ÓAÄ"|OKLËíî²Æ ­ÄIÌ’ÝS wäÔó0K§Ò‚B“׿î߄!®l©Óf®Ý"\]¯Ò¯(Ñ.J|rŠ©"ò%ƒpzqL1ƒ¦ˆàxÂÆ´›®ä:s•P–[©È
m*n­ÈÁÕR-Á¢Ñ»ôÃüâã9Ôº°nƒY[í@ ´³*þM@¶âj)j¿‘qKaÉÛ‰¹ X>ìÇ‚ÂèêMShýƒ¿Ñ¤áw2BPÍÓ³ü©±'fe=«›Í† ^oë
Ët®lU"!ÏÐz:Æ Z'ДHÄúìÁñ¨!ö\WkY{çŸoî7!ÚóO›È2Rvuý¸³:Óª >éW.²Cô»…,ÑŽ«‰s&C¶u.¨YD·„`EÅ íú¶É;ì÷Àn×âùäÓÃK`á>úåuzyÛ¹>R—(¸+-HU[^–È6²,aí¼8|{-Hå_¶5Q‡¡«ÍãDCÏDßìžÿb–K#2«Dò0uúlV2[õøñµé{a6FZY¶ ~ÈÚR/×F*ÿ¥Raþ~DÏþéÓØ¸ÒøÞôr–:kˆA)<?Öûÿ£M¯Éë/»×ý—È
©„ò`GñÐSy7×WGðþæ×t6ù^ü7Ÿ½…R. ÷\`ÛÒS‚à·ªkeñ€üË…(±†rû|‡&_¨TYérñ;jð¸ä¢gúåµììP;»êfLõýϧ󳫻ßH4¿xÒR¨{i´¢Ù
©„ò`GñÐSy7×WGðþæ×t6ù^ü7Ÿ½…R. ÷\`ÛÒS‚à·ªkeñ€üË…(±†rû|‡&_¨TYérñ;jð¸ä¢gúåµììP;»êfLõýϧ󳫻ßH4¿xÒR¨{i´¢Ù
(LÉx€{GEáyÄŒSªQÖ®?ÐU¬sAS/¼fa­+¶Êß¾xÚ~W6:Ì8teÃ;(“
(LÉx€{GEáyÄŒSªQÖ®?ÐU¬sAS/¼fa­+¶Êß¾xÚ~W6:Ì8teÃ;(“
Ç]+~/öìà««íŸNÃÊŒL.œ,sßχ˪?­£ý ž5òlﹻ˳»wÀÎö߀iu@%»ŒInãQÌ&dq{6M!hÆI["œå•T8™ ÇžÕð+ÇK
Ä£t^ü]•л“8a§ÍÝu+¾;ì4é²Þ]­Ÿ?´Nendstream
endobj
237 0 obj
endobj
858
endobj
238 0 obj<</Type/Page/Parent 207 0 R/Contents 239 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F5 6 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
239 0 obj<</Length 240 0 R/Filter/FlateDecode>>stream
238 0 obj<</Type/Page/Parent 207 0 R/Contents 239 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F5 6 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
239 0 obj<</Length 240 0 R/Filter/FlateDecode>>stream
TIo1¾ó+>EjE¤0¬aÉlUM[2U.¹xÆp3ØÄ dþ}¼Ì jUqñð–oy~~kõÑs¿>& ÇÈ×­ë´Õ½Ÿ¡?LH OûþHÛ +Ó,ÌŽ(vžþqé#ôû1¹3'#ŸüCä •´X-Ú²d4ëº8Äs"à‚Ê„ÐÍïŸO „­¥@VÁT‡xQz˜ENŽh'ò£mŸ¶¿ kµêꌋnn7šâ+îÓ»ElàT]&Sß¡ã[ g‘êC$ç¥\sAT…[®â™5\ŠO]áØ>3x¹UŠ SV û*×+HÉb;zÐN;7Î(¤Zƒ7«Æ â@…rlI +¾1:‰$.kž~ãôó|ñøðøíꯣ8Ð8íxYBn™Ú)nÂØ»cè36Š‹pЕ6là¡cbï¦8óS¥¼(xnKÙŽìÝäš9Ôc @û9{A‚ùéK,%2’¿úc@–%=½ˆfSì`û+r‚¶jظŽrË©«þÕ–Ö.×G˜(”\׌œRrº¹þ7·& ?•8lw,øÿŒ¡”Ë¥ûpÃ'JJƒ—6•áÖ œi{®;’‚ i—«—óÍèõ4t±š© (+Â_G©ï]ùïJÂæ$¶ƒõi®Ö‘
óÂ0å½z!^6AÁv¨˜î
‰7Ët¼óŸ=
þd‡oƒRxò£¶t}›œð@0zjƒ5ÒmÏ]yUoÈ´&ÙŒ\Òp2‰;p»˜ß§èD
‰7Ët¼óŸ=
Íã…9]sáW“©4¾aI&Ë;“Aï_/ßhÚKf)3ÿ}—¶~µ>ùq°endstream
endobj
240 0 obj
640
@@ -575,51 +577,59 @@ endobj
OñšŒ: WmrzçaÑÔ îG‘Î6QN©É'p´Ï–4
)pæp(ƒt&ˆ¸z™ òB¥DòÅýëø†ó=áÑrttmô…XøBÛfl”)=ØéÙò«ìøá/ϱó¾JÍÍÚbÿí,ð–h’G<»<Ÿ5©[ãtµI¾ ·µ¡Â¾=jGV|fy—@h3Î$FýýÖmŒåö
>‹úý2ÉÎéÓ;ëŽ÷œýyΟyðÏQŽ8)dî`Ò¹¶|@§4­2BÆj‡•öñ6pY®•jñ`½¬OV
ØiºR6à0\wîm&*õ¤µ¹®*V‹Ð—ÐÑð6É:µî|±V?c­xHºUxÚ Ñø9u޾7>¥ à™ ¨g°Äs‚´Å«é
öÌB&¸d`åOñ
„KºXεDUµqåfºgR±%ÂÈ6ƃɤ 8 W^ØZ»ýާ
î‡÷»ñS3DÕz†½í@„½g6~7ä7·ñ¢ßé<S˜Í³î¶y}{õ.Ç=C8XéÂÞ£¾pE+cqñk¼c`ë;æQ¢4"ޤGH3z9™ŽãIy%uÕù£ªØÑSh;ßo7ùèÏÑ?†f@-endstream
endobj
249 0 obj
952
endobj
ã™üm “eLóÐgPÑ(çc8¨Ôº*;|ü1éBâÙXŸý§D~&êlÞ2¥ à P_ÀO7Ò /`•ò”IX¸=aöÄ$@Dƒf5žL*‰/¾Ì>,p˜é6q˜5inWƒ9VÊ3U¶NåŽÔ'ïh@‡£~wåƒç$Ѻ4\¦úT*åy¿h}ný•÷4endstream
endobj
249 0 obj
883
endobj
250 0 obj<</Type/Page/Parent 207 0 R/Contents 251 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 4 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
xÚ½VmoÛ8 þž_A8\¨“ØIó²o½¥Å0܆\›á>+ݪgKž$'Í¿)ÛiÎI‡--ÐÚ&Eòy’úÞ‹aH?1LM -z®zƒ›1Ä1¬2ú2™û3XÉóÕ«Gú8i>žFb^¿kÎAØûª@íÁ•˜ªL¡O®Z& ÿ/— ÈTNÏ”öh3‘"¸ÔªÒ÷á†Þâ“(ÊR‚€ÒK¨œÒ÷sQ<ê'œŸé‚|ZÂÝ¿Ÿ‘â£åàÒª
251 0 obj<</Length 252 0 R/Filter/FlateDecode>>stream
xÚÅVQoÛ6~÷¯8š•dÉŽl÷­­ Ã6x‰Š>Óâ)a**IÙñ¿ß‘’<Uq
•³ƒ\­y)d¡4DeIt
ZøÁ"yÇ;~ßwG~Ä0¥_ f)äÕäC6‰®h&†¬ •t9ñó¨1:2wLc”7µ‰*űü=»'ëyg}\hÌ­ÒØ {öá,¨Î@ÕV(ù®5ŸÂ*Lœ= â™ûæçniJÃØ
~­Û¨¬¯„„ n“Þ9&Ï9%HæµÒ¢ï¾ Äý:ìFþ³¤wç¸9޽ËTãÐ)ýûµGÏdÑù]þ“]^‹P¬.È*˜­ÂÔÙdPk‘öžÄ•éÛ¦BiÁÔ˜‹B ñØJV!¨Âo6k(DIc
†û/öÃ`9 d°lŒÈQÝ¿-ïBNZ;°•„´U66t™MMQ-a«üCp;‹žÎÀ”^ý& žjç¤uŽÉsLåy“|÷ô)¡¾¿€Z<›’å¸/ø˜ çðeØ>Ä’ÙºAvoMU2^*¶ÅÒ‘l ÙN;´¥^þy@ö!QY’¦–®¥Í:è¼v¼ÐÒ»ŽÈ·*ÏaäcR¤*$¬wÁ4SÖyA®sÜó­˜[áëSûÍiɤFdÕí«çÞU åð›³(m•âÞÖSoJ”v'ô7|; lï™L%ÖÖ%£!Å}î·ãáxJ ¤!QyS¯RÒÛTʃ4èôïžÆŸr4 »¸¦æ±"ªIBÿWû½—ÃÖ›Nd‚ÐîÐ{Yœð3Qå¾_?›^ŽÆ&»ÈÆ¥•©iÚëÝBù2„4â Á!:.ç­Íi‰
géÏ$vtô‰-¬Ž×oË~—Ãá}^ØÀÃvçMY¾nÿS‚š§ÓQžtlÇP*wʲ᎘甂££|öÕ|¯°Bšžùâáiéç»_åt­ô Î:„Χí¨xýF¢P—'4õu#Äİû奷—ËsßMVž«w€°ÔJu\ …Øt¼NDšbƒÌ4ë¾€uåéijH¤¾
#ª^VBïÂÝÍÑ¥‰Î`AíøøÎ¶"˜&”4ÅHƒôKc+«ržt‡",DžU:
Ž‚å&×¢¶!\Ñ,>°ª.ñ-XŒs`Ðò¶g #Äíi¼ü±5š/"ÅGí‚s-vä—+)‰oänËšiV–XB­´%E5’“É_B6pP
ìUSr
…?&ƒ>Ïió]D$F4Љ-N÷húæCV_8) ."Q0wA®±R;:>lZ0Ì·ØOd)ÐÎÈѹ?~ÚÜøAh@7ÒÒŸ²ã°;Á˜Ù\U“|X/¯R/?P/§Q‹—‹N»¸/øX2cðiØ<>Ä’ÚAv«US;¼DÉt¥!Ù²£rèÎ]”x!|¾CçC¢Ò$MÉMO
Ü«­×yëøÖCKs#‘ïEYÂÉGåH§à°=xÓBhcíe¸-ñÈ·pÜ2Ûîv»%i‹H6®«ÿxUÔgàf΂¼WŠùu­5²9({asœM)îsÍñ”
@È52׆XcUŬÈIo \¡‘o,µ?a¨«¸¥æ¾!ªIB?«ü^ŠË°ôi‡ŒÚ
ZëZ–KxkJÛ·¯çº—¡¶é\xçÒËTuåõjå¯!Bjñs!F.VÇ{û¤Ä¦K‚ô9‰=ÚúÄ-,_¿c,Ã1‡Ó}–iÏŸƒíƪº~Ùý󘔮;=Ê“¶raNYvÜó.%ïh(Ÿãi¾6Ø uOîáaéÒ/ßËéVȨÍF„®}«øžiÙs9O䫤
252 0 obj
½¾~•AÐ^Ç7ª°{zªÂ{'%ª{ÍèUjào&æ_WAœÌÝm¶H|€OîD\Lóž Xûwާd¾˜÷ÙÄ37q™MþüKŽ0Àendstream
endobj
252 0 obj
915
254 0 obj<</Length 255 0 R/Filter/FlateDecode>>stream
xÚ­SKÚ0¾ó+æR)+-@–GoiË*µÚBzÛ‹“L£Äfm´ÿ¾3v€õX%ÊÃ3ß÷Íóm”À”®æ ¾Ënô%MžSHÈk²,Vi¼‚¼Š„A8©V j‡\s>1 - EKÆ×È:aÈíõ!~È÷͆ä‰I˜o<_Ç)óee‰ª‚-î±ôßuaø
C ÍI8§ƒ1žíyæ;Gã…îKÝuäl!ðx`ð žâZ‡¤•è(Ï!õGr´þˆíûç³Ü:ž15ÕtœÌù»ŠØDY°f}‚Ioͤ•ÅdÐ ÈÙ¹^Ò{Ê®ƒÐ=ó’Jêí°ù™o¶l&©§ ™ükÍÆÉ2¹v$³ ´ŸŒBñÄe0J¡ @°Nd/z7Ô˜{­ðô¡¾1d70ÑZÍXs™
endobj
253 0 obj<</Type/Page/Parent 207 0 R/Contents 254 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 4 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
254 0 obj<</Length 255 0 R/Filter/FlateDecode>>stream
xÚ­TMoÚ@½ó+æR•HÁØ@ ôF[r¨Ô* î-—µ=®­wÉîÄ¿ïŒ×|¹½Tª@Bx>Þ›7óü>H ¦OÓ9ózð9ŒŸbXFHK~6\@Z ?À¸qvœI=.¤™B¸K·”;9å&ñ$šS3JÞY©=Úpi¶ˆCÖ?ÒõkÏ I8:Jóh£é’ºPÎsèáÀWƒ°nµ8‚óR)yŽ;[“9(Xê_÷5F¤ÒÜ7B©c‚ÐG(¥B
¥*jGnÏlbb1e²ÅТóÂz,"H+逾òQ K®nF"£ÊFç^í¨yGÓ€F¢éeà
Ùßu]o©ñh谻쨄*´ºÙš“l[.E¤`ÄQÈ–œf-ÆH@«)!Òº]ƒ“ë²JœÌRÒœÑîø…ù¶ÍžsÃ×ß/;ØéÚx%³ªãtN÷¡zцYððñræ{˜¤|8O§ñ<4uÇKz^¿·ç²}$;oòѯÑ_ÙD=rendstream
äÆZÌ}Weh„:‚Ñxo°!̾‡ÎãDÉ0×ÄuâmØÑ|»‹‚žKHHgR4nÅœq¿U« Ó2|Å-ñá­Èð­#pYF|ÙCZ6wÁaPý¶bØvî%Ú¨Ÿ˜›º¦dwÚ†ÌnEçuòÐZÔ4g7ú=%º“ߣ:~êØü¢àIÐäêx•ÌÆfïv— úýÇÓ%¨‡¿t“üo$—¬hÓ^Fföxâ|¹Ð!yÃìvgˆóæ5®ô¥ ¼)Ê®µçÛ üÞU^mçP‘…@z²’–®B¶©qÌZ‰=R/ÔáÂÿ´ïöPQœ½R7ŽÖ=ÀZ0A-tŽ`ôøhü
) {!Uûn"Û
255 0 obj
g$@ˆ0¤)À”­3;»<v'“aNË€üõuõ”¾ü|ÞÀÆ”þÀ–\5ë­ð†zšÞ,áÚòÑbÒî0™ñÃé,ަa©6éÉ~^ÏÙ}D’“×éàeð„u²ˆendstream
endobj
endobj
256 0 obj<</Type/Page/Parent 207 0 R/Contents 257 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
257 0 obj<</Length 258 0 R/Filter/FlateDecode>>stream
xÚ…T]Ú0|çW¬NªJ88úÖž8µ½Ò’û&qˆÛÄvmß];ÉÝ…û2agvg<£fø‰a=‡Å
255 0 obj
652
endobj
256 0 obj<</Type/Page/Parent 207 0 R/Contents 257 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
257 0 obj<</Length 258 0 R/Filter/FlateDecode>>stream
xÚ…T]Ú0|çW¬NªJ88úÖž8µ½Ò’û&qˆÛÄvmß];ÉÝ…û2agvg<£fø‰a=‡Å
Òjô5Mï6o É!^/`µ^B—0Ò y„}c¯à“ìÈ+.ݧä–Çn²XÎ"M
a!-˜vÜ€-ÔÙ~A£jH™„TÉ\kÃÁnv{°Üœ¸‰+sÝï I7ó¶`òH£xLËÀœPîDÉíópEÀ/e *÷°Ð¥ïÐ9¡á4¥J™ãé«ã¬eOOÌLÓZÛ)៷C& O2M?eʽւ8T,ãÀ¨ÑœfJI ÊWÀ|_.9öÆG†[ÇŒšO2#„Cà·‡Xq” õ¨mgŽ­µ.rÙÔí­¯²HQd‹ž«Ï]Ù†`9e¥§ècúñ¢iËÑO¾½O¶¿ !‚îJœò $3
úf‡Ú_…ˆ/Kdøé_¹ !…‹²W/ÎÂ'Yuˆþ]Ô\²sÝÚ¯äÀTêtÂ?•™ôîënw¬ß·²ðJ+Cv¼å{e*ô§ ±ÐµÃ܆t <ºž%D{)®Êà{N ü˜A)þúXv¥E~t•jÊr ½‹-Ï„{oü)‹^Z!š:jÉç«àÌÞç “ŸÎ\—pÉÏOÔ>ÎÇ$†ž»¾ŽimÞn5hn*a-ÆÌ¶Ù¾ybð<üþ;o¹^âõͨ8¾¦Ûdôkô9åšõendstream
endobj
258 0 obj
587
endobj
úf‡Ú_…ˆ/Kdøé_¹ !…‹²W/ÎÂ'Yuˆþ]Ô\²sÝÚ¯äÀTêtÂ?•™ôîënw¬ß·²ðJ+Cv¼å{e*ô§ ±ÐµÃ܆t <ºž%D{)®Êà{N ü˜A)þúXv¥E~t•jÊr ½‹-Ï„{oü)‹^Z!š:jÉç«àÌÞç “ŸÎ\—pÉÏOÔ>ÎÇ$†ž»¾ŽimÞn5hn*a-ÆÌ¶Ù¾ybð<üþ;o¹^âõͨ8¾¦Ûdôkô9åšõendstream
259 0 obj<</Type/Page/Parent 207 0 R/Contents 260 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 4 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
260 0 obj<</Length 261 0 R/Filter/FlateDecode>>stream
258 0 obj
xÚ¥VÛrÛ6}×Wl2‘§/BÉykš™4ã&ì›_`´P“ €fô÷ÝH]ÙS·#ÍH{9çì‚ORHð“Â"£oQO®óI¼Ià*šC^ÒZ¶^AΧù_“fiJo ~äÒ-Æ›ù`½\àoBq©u|ÏLìê&í]fËhŒàæk~ó¶gi²>ø.¶µæÀ~5Ý7±NÿS€x³r_b”uŠû³ÅU”‘M¾
#2õ ÀmTR (´rL*©üÚ x˜æ¢n>Isêw
endobj
ˆ(œ| Õ¹cEÛX¡ër|Òioh³Ã'æ`§Û·ObÀ Åt #˜üý¨fäiorÂTŸëÿdj áryp#«ªÝ%a3Ηb…y˜Ý:‚” ”ÒX‡ûˆ”V K\”–hœ0Qté; ¡gIq¾
×@ùÐFNKNh.JÖVŽØ<œ!|üóöûf%­ÊB©
«>]ª-&Y²B`]
Õf‹tDÑÝÔ#à˜âÌpø|{ë-ï."øÀkT•u}*e«úHÌòj‰Ô’*]°ê$•Nº­Ï›5Ñ‘¨‚QÜ«Q¬FÅ¡aÖbÊ<êæY@ñséuÅ1Ú£ð¡(*°k²ôŒ»ì©½¥¯>d%¸tç„?¡|HÝ1!?¯óRVâ@ñ"¨ŒHÒn¦þÙþ¸ m#
xÚ¥VÛrÛ6}×Wl2‘§/BÉykš™4ã&ì›_`´P“ €fô÷ÝH]ÙS·#ÍH{9çì‚ORHð“Â"£oQO®óI¼Ià*šC^ÒZ¶^AΧù_“fiJo ~äÒ-Æ›ù`½\àoBq©u|ÏLìê&í]fËhŒàæk~ó¶gi²>ø.¶µæÀ~5Ý7±NÿS€x³r_b”uŠû³ÅU”‘M¾
YJ䊪|µÄ4‘G\µJ#¸Vr´?ËÜM‘ë» B
¦Fè³ÊjÔ“k› ­“˜ä÷·<ßû['è-¹pèX”ŒòÞgщûÃÆ(t'ªê%X¿ø^ì¹ÏAÊ£QÉ87¤"¯?¬ðÄÜâÃäÎ*év}ž>*êEn#:†Ž)Ï+2©»“†ÑªÚ…öSÝ7TÍŠ-÷žAÂý_Ò ¤óU”à'}ß7þÑX¤³¨R¡9ãôypÏ·ì¾ÔqòbS±mïñï%Ö‹=n[*f»€ %5Lµ#ÞFÊRÚ„·v|æ—dwmtgÅk{ú¹SÇò£ëÙè
§âVÛÐMx‰ÔZI¼>qXQsQk'G%u8u÷n#HoÝÚ_½£²Ç- [Ý ê½A9ý aý|¼ïÀuŸo:_¢³l•E rùéÛ‡M³Ðáßué:ùG÷6~gªeUx!òÇg«¹¿ÓŒ—É*z.dºÖµaøª°Á™êÂM>ùcò3Rò‚endstream
endobj
@@ -659,31 +669,33 @@ endobj
Iˆ6EDÀyíóØ~±ÏŸ™ þ\ x$åì|9;»ŠÁõlË cAäªÛôè’ñ×ãåo ûàº:hy±¨àrÅ@ÑAš×,iòg²bIžåL…•
§%;…ë iZ3)OAÔÀYó"ê'hV´¥E!^X
4IPÀvÅêgVêÓÇš‡céQ¤G*„°ŠB²Z”°(Š-‘-¡;%͹ˆr‹d¿Bx¿ŠsnŸìˆM‰OÕà5MuV–“…¥½v
endobj
267 0 obj
636
endobj
268 0 obj<</Type/Page/Parent 207 0 R/Contents 269 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>>>>>endobj
269 0 obj<</Length 270 0 R/Filter/FlateDecode>>stream
xÚ½VMsÚ0½ó+vr"3±‹
ÃGo$i:™i™¦˜™¸(¶ÀjmÉñÊaø÷]Y`0 LÚ '´Ú}OoßÊzjyСŸº}ÓÖuÐútG+ Šô‡=wAÔ¾år}ü¦`¯
¶!9µxæiZ$Ì,\* ?Zd ›÷Rô­R!“ðÈ¡@VÀ’D­€…!G„…Ê·ec…8^×õ
MŠK®W*ÿƒnòûnÏ„‚ø<&X–q–ƒ("l¿Â7Ò•<Zŵ‘X†FS§ë»}Ãh\è8Xg¼žl6Œì†ÊÍ9»´#¾’tÔ”¬i'¨0ÊâR KÖÈšñœÄL?Û:aUÇÉbs¿?ØÇŸ(y€íÀDíC`¬Š$2¬¨›ó6qcÔ>w~YÇÝé`è5C¢–˧(ä²d6¹ÿC$‹DÀdË\,D­c«Á»Zð!ιIèçZ§!©É;«˜iHø3OŒ{NéF5 !çOŒÎ¶ÖX*¹NUî¯òüt Ï,Æ=<—,å¥]6ÞÙ9©{Øtš§ï€»*#ÆÍ›­¥áy¢ŒÍU»À5^BÖíó¶ŽÅæ¦
c&—µ)idüÕ¤µÎU ¿Ú“©7©ÑXõŸ‹±|A©ñ1»ÉBë¦3›a)¹MhÓë3êЗós÷!Æ‘ã¼}i¼­ ׸UÚÈNí(?×§ô»>Û'|¸Odõße=:¯‹zÊ@m%eQ*¤@Û›Ï*\>V¤ZM¼×æwɼ
ía©õéݳÓ*¸ì5ƒ¤-˶ êÅ)HøÐäUq˜ë$$”Ã/­D¡}:CõvÊÐqoݪ’ý@Þ)mqüY?È÷Ô\4È,øÀï×—·ª§’Ê'cÛ¹iázáÄ8¶¯2êÝÈÇ—ŽzaZ©·Ÿ—3Çvðó}û»ý~d;à»»q€÷ÄÁ[œ¿»1ñý5õ| îö~sr:ž8Ð4Ø‘úí¦ñbõ?•¦WoÐ ƒy8˜×P¸$šÄ†Øz2‡Qržö-rÄdÇ<ÄÖ“9Œz”Ã÷´MlÛ˜ç ^ˆ-'3õ(1G4 óù¤¹pÜګG9¯[ƒ`àì!qx€I{õ‰ˆ6)ñGQ:œ=0ap€S{õ(L@´S=²¯=8óàÃöê
õè©9¸Z([Ù­*FkȹÌS†Ûè‡¾Š¤Ûj·öbëÈzqcyf~m³Z¾Vìg¼Í:vʲœã–¯ª”• 2 ØŠñ&×°êªXGOiN‚ÄôCÔ®l‘@á$?æï‹”õÜ–.SÈ•h‹T{&ž}GÈFñ°³އy×뱤çTæÉfÖîõ”Ä­Ìùc7!÷߯BE¥ÄK:žÂc-Ú
²¼`²[+KÏÁ?-ÁÿtNÔÒÄG® ðMõr»¸Zâ\ÜßÜÁÈšU°,Ò2ç¹ljÚˆZÂ7Ê[Ú•›–nn…ÄY¯}üðíwcóAþ˜ý­¦õÞendstream
endobj
270 0 obj
816
endobj
271 0 obj<</Type/Page/Parent 207 0 R/Contents 272 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>>>>>endobj
272 0 obj<</Length 273 0 R/Filter/FlateDecode>>stream
xÚµVÛrÛ6}×WlõdOMF¤YÎd:ã8v“™8Mkå¡3zIHD 
JÑßwM‰””4ÛcËÀb÷œ³àS/~'0ÓOVö^M{Ïî® Æ)Lç¸7ž$ô1?»®\q#™µçÓÐfI,¢áU<&iÁ!l¶›ÇA. ÏœXqÈù\(na]0’¯¸=oûyŬÈÚ>X–qkAX0üS…óÁ$Ûš¤¥ãxDðféø²ƒOiµ)uÕÁÁ{
ÑsåDÆœÐ
l¡+™Ã#‡%7smJžÃì ñ³Jºxv¾… *ŽüÑrÓ
endobj
z
+&Eî*Vr`*‡%ê·Ö&ßeÿ¯`ëxùá.üªÑ˜–•u¨…ÔjNû½¾ÝØ>E¹Œ'
 …ÑÕ…r:̘"³‚©§À‚Žw ' þŽ- ~Ý’"Ú ~Hƒ^¸‹:ʲÆÚâLÍâ±½G££¬=Ý»õ;ûÎCfË%g„²"GÂm7ït(ýÓ`öF4L¬t¾<4¾¬Xîl£4ÉŽéì˯Ê÷~o{ƒfV|;ªŸ.ëÑÎ8-ê×4T#)ËK¡„u&L¾ 0Ê›ã˜æjO¼SýÛŽä6KÃ[·U»nŠíµ{s$m”xŽmôÄÒ'éNHw8‡™;~)Ý|üðK£W˜ ‹©¸{=2¢2§ó‰(PGãÿŽú¯ä4 „- Q¦ÕŠçÍ=D†þ„rìQúrÃðô§Å‰³¬vÜÄp !¥(yLtz”°2& ã€*\¢^¼šßáDIE”Ìà⊠顇úÛL§­ÏÛ©ú;†ûtùg[ßÿý_¥×ªa`c¸%%qÃGÁ=ë˜ÁrY WøEJjùdœÅ-rs-ñ®³W“;¥6»raè…¾àM%):ðϬ\J¼lT¹ãŸÝ³Â•òPVWQ''f_Ô篂¬4Åk€5Þħ¢v õ/˜Íö,àéë©ggƒ‹dŽfçð+޷ؽXË´Øùfzÿî·>nì.þòú›éßnq½~¼Ô :÷Ë\œkn­ƒ4`Ùf[SjØúdàíŽÈ9Î= ŸÔöû¤‚ãO…ÎÀ—Þ°Þq+kƶãÚÖxˆ-½% Ë|•S7½I"ú‚h—KÁB­ tºwGœbÌ"¬¹”Û™lžOÆñs:ÿú¯ë»)¾)üôyÐs·&h×ÍTÕˆöž©ŠùÒ‰Âñè2Ðét@‹£á8¾‚Açí};íýÙû#²v}endstream
endobj
271 0 obj<</Type/Page/Parent 207 0 R/Contents 272 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>>>>>endobj
272 0 obj<</Length 273 0 R/Filter/FlateDecode>>stream
W]sê6}ϯØë—’^ð¤ÓéL>§™ÉW÷¡3¼[Æjl‰J2\þ}w%0Æ!sá&™$ȫݳgWGëÿŽÐÇè')®â£ow08
Ï!ÎðÙèì,AœvîDÁáNé’Ysÿ‹fC ¼QïäÂ]ÿýò3­æ"å<Þ?Þö&Ìð2Úo—3!§À¤ûl¹¦O%Or&…)Á*H”œsm¹¡†þ„´l‚Û3žþŒ;8 #ŠËY’{;®Cˆsb±SŠ’‡·°w–]Æ䃱G•òLHLì³âœvŽ(™ÆÅ9…ƒ®d 2í6Kcyú(Ⱥ{ä <¡Ÿánp~P¶ºqØß¥ZÈM&„[¢± ÜT¶IÏX¦­…°¹[¤¢nr.Ù&¼•\¦ŠB-°ê“%fŽî4”J7éÒ<QS)¬PtUPtl.àßY9+x×jeeùwû-·e±«*Þ«X'f~[ï¿ð´b‡××x®kǰþãñ–Ô_u3Ž;ýî 
ÇÇðÆc©—i1øýÏøñá4¿Ü<_Çÿ¼Üâúøx;ƒ!k–3ÚX° 婃ûž’KŸ­+“È—åÒ‰X± $ü±íþ
273 0 obj
974
endobj
274 0 obj<</Type/Page/Parent 207 0 R/Contents 275 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>>>>>endobj
275 0 obj<</Length 276 0 R/Filter/FlateDecode>>stream
WKSã8¾ó+z}Ù ›„$„³'CU3 ÙÓfŠ-Û[òHr2ù÷Ó-%Æ1’)8Äv«ûëî¯úq0„þ
átÇóƒËéÁÑ͆C˜Æøer6îŸÁ4êLS±ÐÆ‚]*ÐeÆ
Dœe`TƳ,…MÁ¢d9»ß±È8̹ ØUÁ£>LSaÿKÃã2ƒeÊ¥“TZ$B¢::B*>MŸÐ÷Gd<Kµ”]HÕ’/¸†Xi(´Ö1N‹áš>EŠù§–-ÙÊ@ʬ‚¥ÒÏ2!Â7©Ð‘s
,{æ¦a<dzíÂ(”1b.2aWÀd¬´*gV„,Ã0Ä")5¢Q¥}‰ùsfxe¡¼Ã¡’–Kk¶B%¤±œEýµýѤ?ÞÄž-˜ÈØœ´qƒÇÒg;º ×É!ÚêÌl49/0X tfà?
¾eë}ž¯ðŸ7£‹(¼ g7¯—w1òìÞ³ÞTfø2-¾?YͬB yd²òubHÔžE}Úõiq¢³þ®wºÛøè¯£ÿ¶ý$Ôendstream
³OþÃ&ÍèÁwT(ˆA)´$ÈÑS„›hU˜Ãmsµø´Ùú뵉¯*¡(ÁÅýõ^ªºMUo™
ŒCÁB^Süía/½¼
ñþÛt/UH€0u‚‚Y˵ Ú#쾌kê;[â?‘6”– ‡ýJ<ØË
³ŽŠcÃma&6móiªKdm ófƒ8 –‰È¦cëÅãÕí-Ì:W]¸ÿÚ…éÅe.»p<ê
@@ -708,12 +720,12 @@ endobj
åvmüQgC¶?6¨* rcÚ®a‘¿Hø J*;„3ánøÚ¤íMšK5“ášü—ƒ»iÑdIeȃ#J,qõL&"œ2ÓvËv«òt-IôâCKgu¬(QTVÇiQç7;e.K`èçùæ%»„
L!“Íÿ,‰fixw^ÕÍ–Þt¬‰Oýq@ÇÏ·NV†•;B/´2Êǃu¯Ü,|Ž1Er÷uÝuÁ¦îØW@+Ml´æÇGâyÈÞ³_\ãwendstream
endobj
280 0 obj<</Type/Page/Parent 207 0 R/Contents 281 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
281 0 obj<</Length 282 0 R/Filter/FlateDecode>>stream
xÚ…TaoÚ0ýί8åS§‰$ ¾mU«Vê4¦fš¦ušŒcˆWÇf¶Ó*ÿ~w mZJY,…8ðÞó½»Ç߃ƒyˆzô©%Š5dóIÌ`6ŸBQž|€1,2A:ø(„mLPfó®øƒ€)0F€qO²yœ¨¨”Qñ-¡Jé…S+é!Tξ-o@Û
¬•–>î‰PùC|JT)²äq§ü½’NB°p¡LÙa¯vA°—ò=fÖ Ëu5׺¬“%(ÓQõ éŽá$¹ç.ÍÖ'ˆÞ£?R9)ÞÆðÃ6 ¸¡âÌOG…®Z¥"[ˆú%3žMzS
aͺ{*czÜ—£wjÓ8”5])Çl¢’¹ÒûßzçÏQ{ö* ûÇ aÐÊ’‹
.b NzÛ8A•óX|GcÑr+g<öݺ®ÙÉÕr B+iB çHD:ÏlÑÊH"Ú5ÆÛ±À~!atfë
279 0 obj
257
endobj
280 0 obj<</Type/Page/Parent 207 0 R/Contents 281 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
281 0 obj<</Length 282 0 R/Filter/FlateDecode>>stream
xÚ…TaoÚ0ýί8åS§‰$ ¾mU«Vê4¦fš¦ušŒcˆWÇf¶Ó*ÿ~w mZJY,…8ðÞó½»Ç߃ƒyˆzô©%Š5dóIÌ`6ŸBQž|€1,2A:ø(„mLPfó®øƒ€)0F€qO²yœ¨¨”Qñ-¡Jé…S+é!Tξ-o@Û
¬•–>î‰PùC|JT)²äq§ü½’NB°p¡LÙa¯vA°—ò=fÖ Ëu5׺¬“%(ÓQõ éŽá$¹ç.ÍÖ'ˆÞ£?R9)ÞÆðÃ6 ¸¡âÌOG…®Z¥"[ˆú%3žMzS
aͺ{*czÜ—£wjÓ8”5])Çl¢’¹ÒûßzçÏQ{ö* ûÇ aÐÊ’‹
.b NzÛ8A•óX|GcÑr+g<öݺ®ÙÉÕr B+iB çHD:ÏlÑÊH"Ú5ÆÛ±À~!atfë
@@ -726,14 +738,14 @@ endobj
652
endobj
283 0 obj<</Type/Page/Parent 207 0 R/Contents 284 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>>>>>endobj
ᆾ†¼:å5µCÄ?>FñÇ_;Ðkxy9‡77ðCH¯¿Öq´9Æé 轿@÷ ³W±_&É5x;nVFÀZïÏ“Ö ´®oý×ÇþF—wÇoSnÐêÒ¤¯3>•9î˜J_»ïÑÜ'4Vjõ6<;ÃTNypÉ–nídQ™¥4ŠÊpAã÷óíõÍrÁúÑ›Ë<‘ÏÅÂÂd³¹-Nщ‚hŸy´N¸Òí¦nâ¢Ì
ª¸µ¥ÈóHÇ`[qR—&¥Mff‰¼É·Rqª3´ ÂL[+'9zàøU³O F5­Rñ¾×FþKl‰4Ek[uE~Øk?ý´Oß& ‡ûp ÊbB@wåQ§kàšy8ëïõß’mP´™Z³˜©öÕõ5‹… Q±n0EùDÌL.V'Ég@ô# .k/ïÓ†4F›¿s}´ÖË wmé°®½ñÜÆD-È%ÓPP“Ä=•ÝTeÓÌÊœ ÝùöæÂ(’k[oí½õ)Ç'Ì¡‘Ö:ÝšÍÚ±Xt¢Á`0ŒèÝÆý¥¤Á=¡3‹ZX‘´1Gh? ;äÝyXÈG< ÞˆGÃ0^ÿÏxñ0î®Ç› ©P)æ¹×•Hû+rÅݳï³J—Ü.{“.]â>µ¥ÙbwqïÝæ˜œoæhÙòc:MKc0 Öƒ®Œÿ®ˆ¿oGd|t¾“ VìT–€Ó0CÃgXÍ'ʲû}É®¶“])ŒR,‘×¼|_ÔÑvÔNÊû{¾µ¬Fl{‚_é㋵^n]/æþRCúK YL
Ÿ|3#ߟ‚ŠWÖ‹~sû‘›R.3#Ë™u·³LñÚýG­854y•IcöøAØÊiŸ¹¤OˆíjR~uåV_ûKß(îÞ^<à„£ßÎ.j]uNßè©›óQv–R‘úáHÝ`,…«zéÛïâ½ã./žöYäºþgÄŸ'Ÿ¾‰AH`endstream
endobj
285 0 obj
1010
endobj
286 0 obj<</Type/Page/Parent 207 0 R/Contents 287 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
284 0 obj<</Length 285 0 R/Filter/FlateDecode>>stream
xÚ¥VmSã6þίØÉ`JÛ¤¹$ßh7M+f:íÑé(öTl)'ÉäÒ_»VlòäÚIˆ¼oϳ«GúrAHœöø?%.D$SzÒëwƒ>$ÙQò€pœüC{ˇG¥Eã—jû#˜JÌ3Ù‹’>•“©p˜›+Q èiõÔà—­“ê¾zÀÕ”~6*ƒ™°v®MÑ–³Y.1ã”!´£Ó æÂ¦Ú¬†ãÿ}ƒ¯%ÕÊ ©,´Ú­`é÷‚î  2ªµíd¯"c«ª@¶ÜRÁ{ƒ¨æ2}€1
‰à1üyûËíÝqåNá$W‹Û 
ᆾ†¼:å5µCÄ?>FñÇ_;Ðkxy9‡77ðCH¯¿Öq´9Æé 轿@÷ ³W±_&É5x;nVFÀZïÏ“Ö ´®oý×ÇþF—wÇoSnÐêÒ¤¯3>•9î˜J_»ïÑÜ'4Vjõ6<;ÃTNypÉ–nídQ™¥4ŠÊpAã÷óíõÍrÁúÑ›Ë<‘ÏÅÂÂd³¹-Nщ‚hŸy´N¸Òí¦nâ¢Ì
ª¸µ¥ÈóHÇ`[qR—&¥Mff‰¼É·Rqª3´ ÂL[+'9zàøU³O F5­Rñ¾×FþKl‰4Ek[uE~Øk?ý´Oß& ‡ûp ÊbB@wåQ§kàšy8ëïõß’mP´™Z³˜©öÕõ5‹… Q±n0EùDÌL.V'Ég@ô# .k/ïÓ†4F›¿s}´ÖË wmé°®½ñÜÆD-È%ÓPP“Ä=•ÝTeÓÌÊœ ÝùöæÂ(’k[oí½õ)Ç'Ì¡‘Ö:ÝšÍÚ±Xt¢Á`0ŒèÝÆý¥¤Á=¡3‹ZX‘´1Gh? ;äÝyXÈG< ÞˆGÃ0^ÿÏxñ0î®Ç› ©P)æ¹×•Hû+rÅݳï³J—Ü.{“.]â>µ¥ÙbwqïÝæ˜œoæhÙòc:MKc0 Öƒ®Œÿ®ˆ¿oGd|t¾“ VìT–€Ó0CÃgXÍ'ʲû}É®¶“])ŒR,‘×¼|_ÔÑvÔNÊû{¾µ¬Fl{‚_é㋵^n]/æþRCúK YL
Ÿ|3#ߟ‚ŠWÖ‹~sû‘›R.3#Ë™u·³LñÚýG­854y•IcöøAØÊiŸ¹¤OˆíjR~uåV_ûKß(îÞ^<à„£ßÎ.j]uNßè©›óQv–R‘úáHÝ`,…«zéÛïâ½ã./žöYäºþgÄŸ'Ÿ¾‰AH`endstream
endobj
285 0 obj
1010
endobj
286 0 obj<</Type/Page/Parent 207 0 R/Contents 287 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
@@ -991,112 +1003,112 @@ xref
0000013728 00000 n
0000013834 00000 n
0000013940 00000 n
0000015516 00000 n
0000015622 00000 n
0000015726 00000 n
0000015831 00000 n
0000015937 00000 n
0000016147 00000 n
0000016181 00000 n
0000016215 00000 n
0000016916 00000 n
0000016965 00000 n
0000017014 00000 n
0000017063 00000 n
0000017112 00000 n
0000017161 00000 n
0000017210 00000 n
0000017259 00000 n
0000017308 00000 n
0000017357 00000 n
0000017406 00000 n
0000017455 00000 n
0000017504 00000 n
0000017553 00000 n
0000017602 00000 n
0000017651 00000 n
0000017700 00000 n
0000017749 00000 n
0000017798 00000 n
0000017847 00000 n
0000017896 00000 n
0000017945 00000 n
0000017994 00000 n
0000018043 00000 n
0000018092 00000 n
0000018141 00000 n
0000018190 00000 n
0000018239 00000 n
0000018288 00000 n
0000018337 00000 n
0000018386 00000 n
0000018435 00000 n
0000018484 00000 n
0000018533 00000 n
0000018582 00000 n
0000018631 00000 n
0000018680 00000 n
0000018729 00000 n
0000018778 00000 n
0000018827 00000 n
0000018876 00000 n
0000018925 00000 n
0000018974 00000 n
0000019023 00000 n
0000019072 00000 n
0000019121 00000 n
0000019170 00000 n
0000019219 00000 n
0000019268 00000 n
0000019317 00000 n
0000019366 00000 n
0000019415 00000 n
0000019464 00000 n
0000019773 00000 n
0000019925 00000 n
0000026317 00000 n
0000026339 00000 n
0000026452 00000 n
0000026554 00000 n
0000026574 00000 n
0000026705 00000 n
0000027474 00000 n
0000027495 00000 n
0000027636 00000 n
0000028014 00000 n
0000028035 00000 n
0000028175 00000 n
0000029089 00000 n
0000029110 00000 n
0000029250 00000 n
0000030693 00000 n
0000030715 00000 n
0000030855 00000 n
0000031753 00000 n
0000031774 00000 n
0000031887 00000 n
0000032089 00000 n
0000032110 00000 n
0000032264 00000 n
0000033166 00000 n
0000033187 00000 n
0000033341 00000 n
0000034270 00000 n
0000034291 00000 n
0000034440 00000 n
0000035151 00000 n
0000035172 00000 n
0000035285 00000 n
0000035488 00000 n
0000035509 00000 n
0000035667 00000 n
0000036420 00000 n
0000036441 00000 n
0000036599 00000 n
0000037622 00000 n
0000037643 00000 n
0000014044 00000 n
0000014148 00000 n
0000014252 00000 n
0000014357 00000 n
0000014462 00000 n
0000014568 00000 n
0000014674 00000 n
0000014780 00000 n
0000014886 00000 n
0000014992 00000 n
0000015096 00000 n
0000015201 00000 n
0000015307 00000 n
0000015411 00000 n
0000015516 00000 n
0000015622 00000 n
0000015726 00000 n
0000015831 00000 n
0000015937 00000 n
0000016147 00000 n
0000016181 00000 n
0000016215 00000 n
0000016916 00000 n
0000016965 00000 n
0000017014 00000 n
0000017063 00000 n
0000017112 00000 n
0000017161 00000 n
0000017210 00000 n
0000017259 00000 n
0000017308 00000 n
0000017357 00000 n
0000017406 00000 n
0000017455 00000 n
0000017504 00000 n
0000017553 00000 n
0000017602 00000 n
0000017651 00000 n
0000017700 00000 n
0000017749 00000 n
0000017798 00000 n
0000017847 00000 n
0000017896 00000 n
0000017945 00000 n
0000017994 00000 n
0000018043 00000 n
0000018092 00000 n
0000018141 00000 n
0000018190 00000 n
0000018239 00000 n
0000018288 00000 n
0000018337 00000 n
0000018386 00000 n
0000018435 00000 n
0000018484 00000 n
0000018533 00000 n
0000018582 00000 n
0000018631 00000 n
0000018680 00000 n
0000018729 00000 n
0000018778 00000 n
0000018827 00000 n
0000018876 00000 n
0000018925 00000 n
0000018974 00000 n
0000019023 00000 n
0000019072 00000 n
0000019121 00000 n
0000019170 00000 n
0000019219 00000 n
0000019268 00000 n
0000019317 00000 n
0000019366 00000 n
0000019415 00000 n
0000019464 00000 n
0000019773 00000 n
0000019925 00000 n
0000026317 00000 n
0000026339 00000 n
0000026452 00000 n
0000026554 00000 n
0000026574 00000 n
0000026705 00000 n
0000027474 00000 n
0000027495 00000 n
0000027636 00000 n
0000028014 00000 n
0000028035 00000 n
0000028175 00000 n
0000029089 00000 n
0000029110 00000 n
0000029250 00000 n
0000030693 00000 n
0000030715 00000 n
0000030855 00000 n
0000031753 00000 n
0000031774 00000 n
0000031887 00000 n
0000032089 00000 n
0000032110 00000 n
0000032264 00000 n
0000033166 00000 n
0000033187 00000 n
0000033341 00000 n
0000034270 00000 n
0000034291 00000 n
0000034440 00000 n
0000039043 00000 n
0000035151 00000 n
0000035172 00000 n
+88 -4
Ver Arquivo
@@ -315,8 +315,8 @@ CUPS:
<DT>/dev/filename
<DD>Sends all output to the specified file.
<DT>http://hostname[:port]/resource
<DT>ipp://hostname[:port]/resource
<DT>http://[username:password@]hostname[:port]/resource
<DT>ipp://[username:password@]hostname[:port]/resource
<DD>Sends all output to the specified IPP printer or server.
The <I>port</I> parameters defaults to 631.
@@ -343,6 +343,10 @@ CUPS:
checking off.
</UL>
<DT>smb://[username:password@]hostname/queue
<DD>Sends all output to the specified SMB (Windows) printer queue
using the SAMBA software.
<DT>socket://hostname[:port]
<DD>Sends all output to the specified printer using the
AppSocket protocol. The <I>port</I> parameter defaults to 9100.
@@ -633,7 +637,47 @@ Allow from nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
</PRE></UL>
<P><CODE>Allow</CODE> directives are cummulative, so multiple <CODE>Allow</CODE>
directives can be used to allow access for multiple hosts or networks.
directives can be used to allow access for multiple hosts or networks. The
<CODE>/mm</CODE> notation specifies a CIDR netmask:
<CENTER><TABLE WIDTH="80%" BORDER="1">
<TR>
<TH>mm</TH>
<TH>netmask</TH>
</TR>
<TR>
<TD>0</TD>
<TD>0.0.0.0</TD>
</TR>
<TR>
<TD>1</TD>
<TD>128.0.0.0</TD>
</TR>
<TR>
<TD>2</TD>
<TD>192.0.0.0</TD>
</TR>
<TR>
<TD>...</TD>
<TD>...</TD>
</TR>
<TR>
<TD>8</TD>
<TD>255.0.0.0</TD>
</TR>
<TR>
<TD>16</TD>
<TD>255.255.0.0</TD>
</TR>
<TR>
<TD>24</TD>
<TD>255.255.255.0</TD>
</TR>
<TR>
<TD>32</TD>
<TD>255.255.255.255</TD>
</TR>
</TABLE></CENTER>
<P>The <CODE>Allow</CODE> directive must appear inside a
<CODE>Location</CODE> directive.
@@ -658,7 +702,47 @@ Deny from nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
</PRE></UL>
<P><CODE>Deny</CODE> directives are cummulative, so multiple <CODE>Deny</CODE>
directives can be used to allow access for multiple hosts or networks.
directives can be used to allow access for multiple hosts or networks. The
<CODE>/mm</CODE> notation specifies a CIDR netmask:
<CENTER><TABLE WIDTH="80%" BORDER="1">
<TR>
<TH>mm</TH>
<TH>netmask</TH>
</TR>
<TR>
<TD>0</TD>
<TD>0.0.0.0</TD>
</TR>
<TR>
<TD>1</TD>
<TD>128.0.0.0</TD>
</TR>
<TR>
<TD>2</TD>
<TD>192.0.0.0</TD>
</TR>
<TR>
<TD>...</TD>
<TD>...</TD>
</TR>
<TR>
<TD>8</TD>
<TD>255.0.0.0</TD>
</TR>
<TR>
<TD>16</TD>
<TD>255.255.0.0</TD>
</TR>
<TR>
<TD>24</TD>
<TD>255.255.255.0</TD>
</TR>
<TR>
<TD>32</TD>
<TD>255.255.255.255</TD>
</TR>
</TABLE></CENTER>
<P>The <CODE>Deny</CODE> directive must appear inside a
<CODE>Location</CODE> directive.
BIN
Ver Arquivo
Arquivo binário não exibido.
+4 -4
Ver Arquivo
@@ -57,8 +57,8 @@ install:
$(CP) $(TARGETS) $(SERVERROOT)/filter
-$(MKDIR) $(LIBDIR)
$(CP) $(LIBCUPSIMAGE) $(LIBDIR)
if test $(LIBCUPSIMAGE) != "libcupsimage.a"; then \
$(LN) $(LIBCUPSIMAGE) `basename $(LIBCUPSIMAGE) .1` \
-if test $(LIBCUPSIMAGE) != "libcupsimage.a"; then \
$(LN) $(LIBCUPSIMAGE) `basename $(LIBCUPSIMAGE) .1`; \
fi
#
@@ -76,8 +76,8 @@ $(HPGLOBJS): hpgltops.h
libcupsimage.so.1 libcupsimage.sl.1: $(IMAGEOBJS) ../Makedefs
echo Linking $@...
$(DSO) $@ $(IMAGEOBJS) $(DSOLIBS)
$(LN) $@ `basename $@ .1`
$(DSO) $@ $(IMAGEOBJS) $(DSOLIBS) -lm
-$(LN) $@ `basename $@ .1`
#
# libcupsimage.a
-250
Ver Arquivo
@@ -1,250 +0,0 @@
/*
* "$Id$"
*
* Common filter 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:
*
* SetCommonOptions() - Set common filter options for media size, etc.
*/
/*
* Include necessary headers...
*/
#include "common.h"
/*
* Globals...
*/
int Orientation = 0, /* 0 = portrait, 1 = landscape, etc. */
Duplex = 0, /* Duplexed? */
LanguageLevel = 1, /* Language level of printer */
ColorDevice = 1; /* Do color text? */
float PageLeft = 18.0f, /* Left margin */
PageRight = 594.0f, /* Right margin */
PageBottom = 36.0f, /* Bottom margin */
PageTop = 756.0f, /* Top margin */
PageWidth = 612.0f, /* Total page width */
PageLength = 792.0f; /* Total page length */
/*
* 'SetCommonOptions()' - Set common filter options for media size, etc.
*/
ppd_file_t * /* O - PPD file */
SetCommonOptions(int num_options, /* I - Number of options */
cups_option_t *options, /* I - Options */
int change_size) /* I - Change page size? */
{
float temp; /* Swapping variable */
ppd_file_t *ppd; /* PPD file */
ppd_size_t *pagesize; /* Current page size */
const char *val; /* Option value */
ppd = ppdOpenFile(getenv("PPD"));
ppdMarkDefaults(ppd);
cupsMarkOptions(ppd, num_options, options);
if ((pagesize = ppdPageSize(ppd, NULL)) != NULL)
{
PageWidth = pagesize->width;
PageLength = pagesize->length;
PageTop = pagesize->top;
PageBottom = pagesize->bottom;
PageLeft = pagesize->left;
PageRight = pagesize->right;
}
if (ppd != NULL)
{
ColorDevice = ppd->color_device;
LanguageLevel = ppd->language_level;
}
if ((val = cupsGetOption("landscape", num_options, options)) != NULL)
Orientation = 1;
if ((val = cupsGetOption("orientation-requested", num_options, options)) != NULL)
{
/*
* Map IPP orientation values to 0 to 3:
*
* 3 = 0 degrees = 0
* 4 = 90 degrees = 1
* 5 = -90 degrees = 3
* 6 = 180 degrees = 2
*/
Orientation = atoi(val) - 3;
if (Orientation >= 2)
Orientation ^= 1;
}
if ((val = cupsGetOption("page-left", num_options, options)) != NULL)
{
switch (Orientation)
{
case 0 :
PageLeft = (float)atof(val);
break;
case 1 :
PageBottom = (float)atof(val);
break;
case 2 :
PageRight = PageWidth - (float)atof(val);
break;
case 3 :
PageTop = PageLength - (float)atof(val);
break;
}
}
if ((val = cupsGetOption("page-right", num_options, options)) != NULL)
{
switch (Orientation)
{
case 0 :
PageRight = PageWidth - (float)atof(val);
break;
case 1 :
PageTop = PageLength - (float)atof(val);
break;
case 2 :
PageLeft = (float)atof(val);
break;
case 3 :
PageBottom = (float)atof(val);
break;
}
}
if ((val = cupsGetOption("page-bottom", num_options, options)) != NULL)
{
switch (Orientation)
{
case 0 :
PageBottom = (float)atof(val);
break;
case 1 :
PageRight = PageWidth - (float)atof(val);
break;
case 2 :
PageTop = PageLength - (float)atof(val);
break;
case 3 :
PageLeft = (float)atof(val);
break;
}
}
if ((val = cupsGetOption("page-top", num_options, options)) != NULL)
{
switch (Orientation)
{
case 0 :
PageTop = PageLength - (float)atof(val);
break;
case 1 :
PageLeft = (float)atof(val);
break;
case 2 :
PageBottom = (float)atof(val);
break;
case 3 :
PageRight = PageWidth - (float)atof(val);
break;
}
}
if (change_size)
switch (Orientation)
{
case 0 : /* Portait */
break;
case 1 : /* Landscape */
temp = PageLeft;
PageLeft = PageBottom;
PageBottom = temp;
temp = PageRight;
PageRight = PageTop;
PageTop = temp;
temp = PageWidth;
PageWidth = PageLength;
PageLength = temp;
break;
case 2 : /* Reverse Portrait */
temp = PageWidth - PageLeft;
PageLeft = PageWidth - PageRight;
PageRight = temp;
temp = PageLength - PageBottom;
PageBottom = PageLength - PageTop;
PageTop = temp;
break;
case 3 : /* Reverse Landscape */
temp = PageWidth - PageLeft;
PageLeft = PageWidth - PageRight;
PageRight = temp;
temp = PageLength - PageBottom;
PageBottom = PageLength - PageTop;
PageTop = temp;
temp = PageLeft;
PageLeft = PageBottom;
PageBottom = temp;
temp = PageRight;
PageRight = PageTop;
PageTop = temp;
temp = PageWidth;
PageWidth = PageLength;
PageLength = temp;
break;
}
if ((val = cupsGetOption("sides", num_options, options)) != NULL &&
strncmp(val, "two-", 4) == 0)
Duplex = 1;
if ((val = cupsGetOption("Duplex", num_options, options)) != NULL &&
strcmp(val, "DuplexNoTumble") == 0)
Duplex = 1;
return (ppd);
}
/*
* End of "$Id$".
*/
-67
Ver Arquivo
@@ -1,67 +0,0 @@
/*
* "$Id$"
*
* Common filter 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
*/
/*
* Include necessary headers...
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <ctype.h>
#include <time.h>
#include <cups/cups.h>
#include <cups/language.h>
#include <cups/string.h>
/*
* Globals...
*/
extern int Orientation, /* 0 = portrait, 1 = landscape, etc. */
Duplex, /* Duplexed? */
LanguageLevel, /* Language level of printer */
ColorDevice; /* Do color text? */
extern float PageLeft, /* Left margin */
PageRight, /* Right margin */
PageBottom, /* Bottom margin */
PageTop, /* Top margin */
PageWidth, /* Total page width */
PageLength; /* Total page length */
/*
* Prototypes...
*/
extern ppd_file_t *SetCommonOptions(int num_options, cups_option_t *options,
int change_size);
/*
* End of "$Id$".
*/
-405
Ver Arquivo
@@ -1,405 +0,0 @@
/*
* "$Id$"
*
* HP-GL/2 attribute processing for the Common UNIX Printing System (CUPS).
*
* Copyright 1993-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:
*
* CR_color_range() - Set the range for color values.
* AC_anchor_corner() - Set the anchor corner.
* FT_fill_type() - Set the fill type or pattern.
* LA_line_attributes() - Set the line drawing attributes.
* LT_line_type() - Set the line type (style)...
* NP_number_pens() - Set the number of pens to be used.
* PC_pen_color() - Set the pen color...
* PW_pen_width() - Set the pen width.
* RF_raster_fill() - Set the raster fill pattern.
* SM_symbol_mode() - Set where symbols are drawn.
* SP_select_pen() - Select a pen for drawing.
* UL_user_line_type() - Set a user-defined line type.
* WU_width_units() - Set the units used for pen widths.
*/
/*
* Include necessary headers...
*/
#include "hpgltops.h"
/*
* 'CR_color_range()' - Set the range for color values.
*/
void
CR_color_range(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
if (num_params == 0)
{
/*
* Default to 0 to 255 for all color values.
*/
ColorRange[0][0] = 0.0;
ColorRange[0][1] = 255.0;
ColorRange[1][0] = 0.0;
ColorRange[1][1] = 255.0;
ColorRange[2][0] = 0.0;
ColorRange[2][1] = 255.0;
}
else if (num_params == 6)
{
/*
* Set the range based on the parameters...
*/
ColorRange[0][0] = params[0].value.number;
ColorRange[0][1] = params[1].value.number - params[0].value.number;
ColorRange[1][0] = params[2].value.number;
ColorRange[1][1] = params[3].value.number - params[2].value.number;
ColorRange[2][0] = params[4].value.number;
ColorRange[2][1] = params[5].value.number - params[4].value.number;
}
else
fprintf(stderr, "WARNING: HP-GL/2 \'CR\' command with invalid number of parameters (%d)!\n",
num_params);
}
/*
* 'AC_anchor_corner()' - Set the anchor corner.
*/
void
AC_anchor_corner(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
(void)num_params;
(void)params;
}
/*
* 'FT_fill_type()' - Set the fill type or pattern.
*
* Note:
*
* This needs to be updated to support non-solid fill.
*/
void
FT_fill_type(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
if (num_params == 0 ||
params[0].value.number == 1 ||
params[0].value.number == 2)
{
/**** SOLID PATTERN ****/
}
}
/*
* 'LA_line_attributes()' - Set the line drawing attributes.
*/
void
LA_line_attributes(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
int i; /* Looping var */
if (num_params == 0)
{
Outputf("3.0 setmiterlimit\n");
Outputf("0 setlinecap\n");
Outputf("0 setlinejoin\n");
}
else for (i = 0; i < (num_params - 1); i += 2)
switch ((int)params[i].value.number)
{
case 1 :
Outputf("%d setlinecap\n",
params[i + 1].value.number == 1 ? 0 :
params[i + 1].value.number == 4 ? 1 : 2);
break;
case 2 :
switch ((int)params[i + 1].value.number)
{
case 1 :
case 2 :
case 3 :
Outputf("0 setlinejoin\n");
break;
case 5 :
Outputf("2 setlinejoin\n");
break;
default :
Outputf("1 setlinejoin\n");
break;
}
break;
case 3 :
Outputf("%f setmiterlimit\n",
1.0 + 0.5 * (params[i + 1].value.number - 1.0));
break;
}
}
/*
* 'LT_line_type()' - Set the line type (style)...
*
* Note:
*
* This needs to be updated to support line types.
*/
void
LT_line_type(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
(void)num_params;
(void)params;
}
/*
* 'NP_number_pens()' - Set the number of pens to be used.
*/
void
NP_number_pens(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
int i; /* Looping var */
if (num_params == 0)
PenCount = 8;
else if (num_params == 1)
PenCount = (int)params[0].value.number;
else
fprintf(stderr, "WARNING: HP-GL/2 \'NP\' command with invalid number of parameters (%d)!\n",
num_params);
PC_pen_color(0, NULL);
for (i = 0; i <= PenCount; i ++)
Outputf("/W%d { DefaultPenWidth PenScaling mul setlinewidth } bind def\n", i);
}
/*
* 'PC_pen_color()' - Set the pen color...
*/
void
PC_pen_color(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
int i; /* Looping var */
static float standard_colors[8][3] = /* Standard colors for first 8 pens */
{
{ 1.0, 1.0, 1.0 }, /* White */
{ 0.0, 0.0, 0.0 }, /* Black */
{ 1.0, 0.0, 0.0 }, /* Red */
{ 0.0, 1.0, 0.0 }, /* Green */
{ 1.0, 1.0, 0.0 }, /* Yellow */
{ 0.0, 0.0, 1.0 }, /* Blue */
{ 1.0, 0.0, 1.0 }, /* Magenta */
{ 0.0, 1.0, 1.0 } /* Cyan */
};
if (num_params == 0)
{
for (i = 0; i <= PenCount; i ++)
if (i < 8)
Outputf("/P%d { %.3f %.3f %.3f setrgbcolor } bind def\n",
i, standard_colors[i][0],
standard_colors[i][1], standard_colors[i][2]);
else
Outputf("/P%d { 0.0 0.0 0.0 setrgbcolor } bind def\n", i);
}
else if (num_params == 1)
{
i = (int)params[0].value.number;
Outputf("/P%d { %.3f %.3f %.3f setrgbcolor } bind def\n",
i, standard_colors[i & 7][0], standard_colors[i & 7][1],
standard_colors[i & 7][2]);
}
else if (num_params == 4)
Outputf("/P%d { %.3f %.3f %.3f setrgbcolor } bind def\n",
(int)params[0].value.number,
(params[1].value.number - ColorRange[0][0]) / ColorRange[0][1],
(params[2].value.number - ColorRange[1][0]) / ColorRange[1][1],
(params[3].value.number - ColorRange[2][0]) / ColorRange[2][1]);
else
fprintf(stderr, "WARNING: HP-GL/2 \'PC\' command with invalid number of parameters (%d)!\n",
num_params);
}
/*
* 'PW_pen_width()' - Set the pen width.
*/
void
PW_pen_width(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
int pen; /* Pen number */
float w; /* Width value */
if (WidthUnits == 0)
{
/*
* Metric...
*/
if (num_params == 0)
w = 0.35f / 25.4f * 72.0f;
else
w = params[0].value.number / 25.4f * 72.0f;
}
else
{
/*
* Relative...
*/
w = (float)hypot(PlotSize[0], PlotSize[1]) / 1016.0f * 72.0f;
if (num_params == 0)
w *= 0.01f;
else
w *= params[0].value.number;
}
if (num_params == 2)
Outputf("/W%d { %.1f PenScaling mul setlinewidth } bind def W%d\n",
(int)params[1].value.number, w, (int)params[1].value.number);
else if (num_params < 2)
{
/*
* Set width for all pens...
*/
for (pen = 0; pen <= PenCount; pen ++)
Outputf("/W%d { %.1f PenScaling mul setlinewidth } bind def\n",
pen, w);
Outputf("W%d\n", PenNumber);
}
else
fprintf(stderr, "WARNING: HP-GL/2 \'PW\' command with invalid number of parameters (%d)!\n",
num_params);
}
/*
* 'RF_raster_fill()' - Set the raster fill pattern.
*
* Note:
*
* This needs to be implemented.
*/
void
RF_raster_fill(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
(void)num_params;
(void)params;
}
/*
* 'SM_symbol_mode()' - Set where symbols are drawn.
*/
void
SM_symbol_mode(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
(void)num_params;
(void)params;
}
/*
* 'SP_select_pen()' - Select a pen for drawing.
*/
void
SP_select_pen(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
if (num_params == 0)
PenNumber = 1;
else if (params[0].value.number <= PenCount)
PenNumber = (int)params[0].value.number;
else
fprintf(stderr, "WARNING: HP-GL/2 \'SP\' command with invalid number or value of parameters (%d, %d)!\n",
num_params, (int)params[0].value.number);
Outputf("P%d W%d\n", PenNumber, PenNumber);
}
/*
* 'UL_user_line_type()' - Set a user-defined line type.
*/
void
UL_user_line_type(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
(void)num_params;
(void)params;
}
/*
* 'WU_width_units()' - Set the units used for pen widths.
*/
void
WU_width_units(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
if (num_params == 0)
WidthUnits = 0;
else if (num_params == 1)
WidthUnits = (int)params[0].value.number;
else
fprintf(stderr, "WARNING: HP-GL/2 \'WU\' command with invalid number of parameters (%d)!\n",
num_params);
}
/*
* End of "$Id$".
*/
-433
Ver Arquivo
@@ -1,433 +0,0 @@
/*
* "$Id$"
*
* HP-GL/2 character processing for the Common UNIX Printing System (CUPS).
*
* Copyright 1993-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:
*
* AD_define_alternate() - Define the alternate font.
* CF_character_fill() - Set whether or not to fill or outline
* characters.
* CP_character_plot() - Move the current pen position for the given
* number of columns and rows.
* DI_absolute_direction() - Set the direction vector for text.
* DR_relative_direction() - Set the relative direction vector for text.
* DT_define_label_term() - Set the label string terminator.
* DV_define_variable_path() - Define a path for text.
* ES_extra_space() - Set extra spacing (kerning) between characters.
* LB_label() - Display a label string.
* LO_label_origin() - Set the label origin.
* SA_select_alternate() - Select the alternate font.
* SD_define_standard() - Define the standard font...
* SI_absolute_size() - Set the absolute size of text.
* SL_character_slant() - Set the slant of text.
* SR_relative_size() - Set the relative size of text.
* SS_select_standard() - Select the standard font for text.
* TD_transparent_data() - Send transparent print data.
*/
/*
* Include necessary headers...
*/
#include "hpgltops.h"
/*
* 'AD_define_alternate()' - Define the alternate font.
*/
void
AD_define_alternate(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
int i; /* Looping var */
int typeface, /* Typeface number */
posture, /* Posture number */
weight; /* Weight number */
float height; /* Height/size of font */
/*
* Set default font attributes...
*/
typeface = 48;
posture = 0;
weight = 0;
height = 11.5;
/*
* Loop through parameter value pairs...
*/
for (i = 0; i < (num_params - 1); i += 2)
switch ((int)params[i].value.number)
{
case 4 :
height = params[i + 1].value.number;
break;
case 5 :
posture = (int)params[i + 1].value.number;
break;
case 6 :
weight = (int)params[i + 1].value.number;
break;
case 7 :
typeface = (int)params[i + 1].value.number;
break;
}
/*
* Define the font...
*/
Outputf("/SA { /%s%s%s%s findfont %.1f scalefont setfont } def\n",
typeface == 48 ? "Courier" : "Helvetica",
(weight != 0 || posture != 0) ? "-" : "",
weight != 0 ? "Bold" : "",
posture != 0 ? "Oblique" : "",
height);
CharHeight[1] = height;
}
/*
* 'CF_character_fill()' - Set whether or not to fill or outline characters.
*/
void
CF_character_fill(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
if (num_params == 0)
CharFillMode = 0;
else
CharFillMode = (int)params[0].value.number;
if (num_params == 2)
CharPen = (int)params[1].value.number;
}
/*
* 'CP_character_plot()' - Move the current pen position for the given number
* of columns and rows.
*/
void
CP_character_plot(int num_params,
param_t *params)
{
if (num_params < 2)
return;
switch (Rotation)
{
case 0:
PenPosition[0] += params[0].value.number * 1.2f / CharHeight[CharFont];
PenPosition[1] += params[1].value.number * CharHeight[CharFont];
break;
case 90:
PenPosition[0] -= params[1].value.number * 1.2f / CharHeight[CharFont];
PenPosition[1] += params[0].value.number * CharHeight[CharFont];
break;
case 180:
PenPosition[0] -= params[0].value.number * 1.2f / CharHeight[CharFont];
PenPosition[1] -= params[1].value.number * CharHeight[CharFont];
break;
case 270:
PenPosition[0] += params[1].value.number * 1.2f / CharHeight[CharFont];
PenPosition[1] -= params[0].value.number * CharHeight[CharFont];
break;
}
}
/*
* 'DI_absolute_direction()' - Set the direction vector for text.
*/
void
DI_absolute_direction(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
Outputf(CharFont == 0 ? "SS\n" : "SA\n");
if (num_params == 2)
Outputf("currentfont [ %f %f %f %f 0.0 0.0 ] makefont setfont\n",
params[0].value.number, -params[1].value.number,
params[1].value.number, params[0].value.number);
}
/*
* 'DR_relative_direction()' - Set the relative direction vector for text.
*/
void
DR_relative_direction(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
(void)num_params;
(void)params;
}
/*
* 'DT_define_label_term()' - Set the label string terminator.
*/
void
DT_define_label_term(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
if (num_params == 0)
StringTerminator = '\003';
else
StringTerminator = params[0].value.string[0];
}
/*
* 'DV_define_variable_path()' - Define a path for text.
*/
void
DV_define_variable_path(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
(void)num_params;
(void)params;
}
/*
* 'ES_extra_space()' - Set extra spacing (kerning) between characters.
*/
void
ES_extra_space(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
(void)num_params;
(void)params;
}
/*
* 'LB_label()' - Display a label string.
*/
void
LB_label(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
char *s; /* Pointer into string */
if (num_params == 0)
return;
Outputf("gsave\n");
Outputf("currentmiterlimit 1.0 setmiterlimit\n");
Outputf("MP\n");
Outputf("%.3f %.3f MO\n", PenPosition[0], PenPosition[1]);
Outputf("(");
for (s = params[0].value.string; *s != '\0'; s ++)
if (strchr("()\\", *s) != NULL)
Outputf("\\%c", *s);
else
Outputf("%c", *s);
Outputf(") true charpath\n");
if (CharFillMode != 1)
Outputf("FI\n");
if (CharFillMode == 1 || CharFillMode == 3)
Outputf("P%d ST\n", CharPen);
Outputf("setmiterlimit\n");
Outputf("grestore\n");
}
/*
* 'LO_label_origin()' - Set the label origin.
*/
void
LO_label_origin(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
(void)num_params;
(void)params;
}
/*
* 'SA_select_alternate()' - Select the alternate font.
*/
void
SA_select_alternate(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
(void)num_params;
(void)params;
Outputf("SA\n");
CharFont = 1;
}
/*
* 'SD_define_standard()' - Define the standard font...
*/
void
SD_define_standard(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
int i; /* Looping var */
int typeface, /* Typeface number */
posture, /* Posture number */
weight; /* Weight number */
float height; /* Height/size of font */
/*
* Set default font attributes...
*/
typeface = 48;
posture = 0;
weight = 0;
height = 11.5;
/*
* Loop through parameter value pairs...
*/
for (i = 0; i < (num_params - 1); i += 2)
switch ((int)params[i].value.number)
{
case 4 :
height = params[i + 1].value.number;
break;
case 5 :
posture = (int)params[i + 1].value.number;
break;
case 6 :
weight = (int)params[i + 1].value.number;
break;
case 7 :
typeface = (int)params[i + 1].value.number;
break;
}
/*
* Define the font...
*/
Outputf("/SS { /%s%s%s%s findfont %.1f scalefont setfont } def\n",
typeface == 48 ? "Courier" : "Helvetica",
(weight != 0 || posture != 0) ? "-" : "",
weight != 0 ? "Bold" : "",
posture != 0 ? "Oblique" : "",
height);
CharHeight[0] = height;
}
/*
* 'SI_absolute_size()' - Set the absolute size of text.
*/
void
SI_absolute_size(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
(void)num_params;
(void)params;
}
/*
* 'SL_character_slant()' - Set the slant of text.
*/
void
SL_character_slant(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
(void)num_params;
(void)params;
}
/*
* 'SR_relative_size()' - Set the relative size of text.
*/
void
SR_relative_size(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
(void)num_params;
(void)params;
}
/*
* 'SS_select_standard()' - Select the standard font for text.
*/
void
SS_select_standard(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
(void)num_params;
(void)params;
Outputf("SS\n");
CharFont = 0;
}
/*
* 'TD_transparent_data()' - Send transparent print data.
*/
void
TD_transparent_data(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
(void)num_params;
(void)params;
}
/*
* End of "$Id$".
*/
-473
Ver Arquivo
@@ -1,473 +0,0 @@
/*
* "$Id$"
*
* HP-GL/2 configuration routines for the Common UNIX Printing System (CUPS).
*
* Copyright 1993-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:
*
* update_transform() - Update the page transformation matrix as needed.
* BP_begin_plot() - Start a plot...
* DF_default_values() - Set all state info to the default values.
* IN_initialize() - Initialize the plotter.
* IP_input_absolute() - Set P1 and P2 values for the plot.
* IR_input_relative() - Update P1 and P2.
* IW_input_window() - Setup an input window.
* PG_advance_page() - Eject the current page.
* PS_plot_size() - Set the plot size.
* RO_rotate() - Rotate the plot.
* RP_replot() - Replot the current page.
* SC_scale() - Set user-defined scaling.
*/
/*
* Include necessary headers...
*/
#include "hpgltops.h"
/*
* 'update_transform()' - Update the page transformation matrix as needed.
*/
void
update_transform(void)
{
float width, /* Plot width */
height; /* Plot height */
float page_width, /* Actual page width in points */
page_length; /* Actual page length in points */
float scaling; /* Scaling factor */
/*
* Get the page and input window sizes...
*/
width = IW2[0] - IW1[0];
height = IW2[1] - IW1[1];
if (width == 0 || height == 0)
return;
/*
* Scale the plot as needed...
*/
if (FitPlot)
{
page_width = PageRight - PageLeft;
page_length = PageTop - PageBottom;
if (Rotation == 0 || Rotation == 180)
{
scaling = page_width / width;
if (scaling > (page_length / width))
scaling = page_length / width;
}
else
{
scaling = page_width / height;
if (scaling > (page_length / height))
scaling = page_length / height;
}
}
else
{
page_width = PlotSize[0];
page_length = PlotSize[1];
if (Rotation == 0 || Rotation == 180)
scaling = page_width / width;
else
scaling = page_width / height;
}
/*
* Generate a new transformation matrix...
*/
switch (Rotation)
{
case 0 :
Transform[0][0] = scaling;
Transform[0][1] = 0.0;
Transform[0][2] = -IW1[0] * scaling;
Transform[1][0] = 0.0;
Transform[1][1] = scaling;
Transform[1][2] = -IW1[1] * scaling;
break;
case 90 :
Transform[0][0] = 0.0;
Transform[0][1] = -scaling;
Transform[0][2] = (height - IW1[0]) * scaling;
Transform[1][0] = scaling;
Transform[1][1] = 0.0;
Transform[1][2] = -IW1[1] * scaling;
break;
case 180 :
Transform[0][0] = -scaling;
Transform[0][1] = 0.0;
Transform[0][2] = (height - IW1[0]) * scaling;
Transform[1][0] = 0.0;
Transform[1][1] = -scaling;
Transform[1][2] = (width - IW1[1]) * scaling;
break;
case 270 :
Transform[0][0] = 0.0;
Transform[0][1] = scaling;
Transform[0][2] = -IW1[0] * scaling;
Transform[1][0] = -scaling;
Transform[1][1] = 0.0;
Transform[1][2] = (width - IW1[1]) * scaling;
break;
}
PenScaling = Transform[0][0] + Transform[0][1];
if (PenScaling < 0.0)
PenScaling = -PenScaling;
if (PageDirty)
printf("/PenScaling %.3f def W%d\n", PenScaling, PenNumber);
}
/*
* 'BP_begin_plot()' - Start a plot...
*/
void
BP_begin_plot(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
(void)num_params;
(void)params;
}
/*
* 'DF_default_values()' - Set all state info to the default values.
*/
void
DF_default_values(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
(void)num_params;
(void)params;
AC_anchor_corner(0, NULL);
AD_define_alternate(0, NULL);
SD_define_standard(0, NULL);
CF_character_fill(0, NULL);
DI_absolute_direction(0, NULL);
DT_define_label_term(0, NULL);
DV_define_variable_path(0, NULL);
ES_extra_space(0, NULL);
FT_fill_type(0, NULL);
IW_input_window(0, NULL);
LA_line_attributes(0, NULL);
LO_label_origin(0, NULL);
LT_line_type(0, NULL);
PA_plot_absolute(0, NULL);
PolygonMode = 0;
RF_raster_fill(0, NULL);
SC_scale(0, NULL);
SM_symbol_mode(0, NULL);
SS_select_standard(0, NULL);
TD_transparent_data(0, NULL);
UL_user_line_type(0, NULL);
}
/*
* 'IN_initialize()' - Initialize the plotter.
*/
void
IN_initialize(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
(void)num_params;
(void)params;
DF_default_values(0, NULL);
PU_pen_up(0, NULL);
RO_rotate(0, NULL);
PS_plot_size(0, NULL);
WU_width_units(0, NULL);
PW_pen_width(0, NULL);
SP_select_pen(0, NULL);
PenPosition[0] = PenPosition[1] = 0.0;
}
/*
* 'IP_input_absolute()' - Set P1 and P2 values for the plot.
*/
void
IP_input_absolute(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
if (num_params == 0)
{
P1[0] = 0.0;
P1[1] = 0.0;
P2[0] = PlotSize[0] / 72.0f * 1016.0f;
P2[1] = PlotSize[1] / 72.0f * 1016.0f;
}
else if (num_params == 2)
{
P2[0] -= P1[0];
P2[1] -= P1[1];
P1[0] = params[0].value.number;
P1[1] = params[1].value.number;
P2[0] += P1[0];
P2[1] += P1[1];
}
else if (num_params == 4)
{
P1[0] = params[0].value.number;
P1[1] = params[1].value.number;
P2[0] = params[2].value.number;
P2[1] = params[3].value.number;
}
IW1[0] = P1[0];
IW1[1] = P1[1];
IW2[0] = P2[0];
IW2[1] = P2[1];
update_transform();
}
/*
* 'IR_input_relative()' - Update P1 and P2.
*/
void
IR_input_relative(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
if (num_params == 0)
{
P1[0] = PageLeft / 72.0f * 1016.0f;
P1[1] = PageBottom / 72.0f * 1016.0f;
P2[0] = PageRight / 72.0f * 1016.0f;
P2[1] = PageTop / 72.0f * 1016.0f;
}
else if (num_params == 2)
{
P2[0] -= P1[0];
P2[1] -= P1[1];
P1[0] = params[0].value.number * PlotSize[0] / 72.0f * 1016.0f / 100.0f;
P1[1] = params[1].value.number * PlotSize[1] / 72.0f * 1016.0f / 100.0f;
P2[0] += P1[0];
P2[1] += P1[1];
}
else if (num_params == 4)
{
P1[0] = params[0].value.number * PlotSize[0] / 72.0f * 1016.0f / 100.0f;
P1[1] = params[1].value.number * PlotSize[1] / 72.0f * 1016.0f / 100.0f;
P2[0] = params[2].value.number * PlotSize[0] / 72.0f * 1016.0f / 100.0f;
P2[1] = params[3].value.number * PlotSize[1] / 72.0f * 1016.0f / 100.0f;
}
IW1[0] = P1[0];
IW1[1] = P1[1];
IW2[0] = P2[0];
IW2[1] = P2[1];
update_transform();
}
/*
* 'IW_input_window()' - Setup an input window.
*/
void
IW_input_window(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
if (num_params == 0)
{
IW1[0] = P1[0];
IW1[1] = P1[1];
IW2[0] = P2[0];
IW2[1] = P2[1];
}
else if (num_params == 4)
{
IW1[0] = params[0].value.number;
IW1[1] = params[1].value.number;
IW2[0] = params[2].value.number;
IW2[1] = params[3].value.number;
}
update_transform();
}
/*
* 'PG_advance_page()' - Eject the current page.
*/
void
PG_advance_page(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
(void)num_params;
(void)params;
if (PageDirty)
{
puts("grestore");
puts("showpage");
PageDirty = 0;
}
}
/*
* 'PS_plot_size()' - Set the plot size.
*/
void
PS_plot_size(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
switch (num_params)
{
case 0 :
if (Rotation == 0 || Rotation == 180)
{
PlotSize[0] = PageRight - PageLeft;
PlotSize[1] = PageTop - PageBottom;
}
else
{
PlotSize[0] = PageTop - PageBottom;
PlotSize[1] = PageRight - PageLeft;
}
break;
case 1 :
if (Rotation == 0 || Rotation == 180)
{
PlotSize[1] = 72.0f * params[0].value.number / 1016.0f;
PlotSize[0] = 0.75f * PlotSize[1];
}
else
{
PlotSize[0] = 72.0f * params[0].value.number / 1016.0f;
PlotSize[1] = 0.75f * PlotSize[0];
}
break;
case 2 :
if (Rotation == 0 || Rotation == 180)
{
PlotSize[0] = 72.0f * params[1].value.number / 1016.0f;
PlotSize[1] = 72.0f * params[0].value.number / 1016.0f;
}
else
{
PlotSize[0] = 72.0f * params[0].value.number / 1016.0f;
PlotSize[1] = 72.0f * params[1].value.number / 1016.0f;
}
break;
}
/*
* This is required for buggy files that don't set the input window.
*/
IP_input_absolute(0, NULL);
}
/*
* 'RO_rotate()' - Rotate the plot.
*/
void
RO_rotate(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
if (num_params == 0)
Rotation = 0;
else
Rotation = (int)params[0].value.number;
update_transform();
}
/*
* 'RP_replot()' - Replot the current page.
*/
void
RP_replot(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
(void)num_params;
(void)params;
}
/*
* 'SC_scale()' - Set user-defined scaling.
*/
void
SC_scale(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
if (num_params == 0)
ScalingType = -1;
else if (num_params > 3)
{
Scaling1[0] = params[0].value.number;
Scaling2[0] = params[1].value.number;
Scaling1[1] = params[2].value.number;
Scaling2[1] = params[3].value.number;
if (num_params > 4)
ScalingType = (int)params[4].value.number;
else
ScalingType = 0;
}
update_transform();
}
/*
* End of "$Id$".
*/
-232
Ver Arquivo
@@ -1,232 +0,0 @@
/*
* "$Id$"
*
* HP-GL/2 input processing for the Common UNIX Printing System (CUPS).
*
* Copyright 1993-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:
*
* ParseCommand() - Parse an HPGL/2 command.
* FreeParameters() - Free all string parameter values.
*/
/*
* Include necessary headers...
*/
#include "hpgltops.h"
#include <ctype.h>
#define MAX_PARAMS 16384
/*
* 'ParseCommand()' - Parse an HPGL/2 command.
*
* Returns the number of parameters seen or -1 on EOF.
*/
int /* O - -1 on EOF, # params otherwise */
ParseCommand(FILE *fp, /* I - File to read from */
char *name, /* O - Name of command */
param_t **params) /* O - Parameter list */
{
int num_params, /* Number of parameters seen */
ch, /* Current char */
done, /* Non-zero when the current command is read */
i; /* Looping var */
char buf[262144]; /* String buffer */
static param_t p[MAX_PARAMS]; /* Parameter buffer */
num_params = 0;
done = 0;
do
{
while ((ch = getc(fp)) != EOF)
if (strchr(" \t\r\n,;", ch) == NULL)
break;
if (ch == EOF)
return (-1);
if (ch == 0x1b)
switch (getc(fp))
{
case '.' : /* HP-GL/2 job control */
i = getc(fp);
if (strchr(")Z", i) != NULL)
{
/*
* 'Printer Off' command - look for next 'Printer On' command...
*/
for (;;)
{
while ((i = getc(fp)) != EOF && i != 0x1b);
if (i == EOF)
return (-1);
if (getc(fp) != '.')
continue;
if ((i = getc(fp)) == '(' ||
i == 'Y')
break;
}
}
else if (strchr("@HIMNTI\003", i) != NULL)
{
while ((i = getc(fp)) != EOF && i != ':');
}
break;
default : /* HP RTL/PCL control */
while ((i = getc(fp)) != EOF && !isupper(i));
break;
}
} while (ch == 0x1b);
name[0] = ch;
name[1] = getc(fp);
name[2] = '\0';
if (strcasecmp(name, "LB") == 0)
{
for (i = 0; (ch = getc(fp)) != StringTerminator; i ++)
buf[i] = ch;
buf[i] = '\0';
p[num_params].type = PARAM_STRING;
p[num_params].value.string = strdup(buf);
num_params ++;
}
else if (strcasecmp(name, "SM") == 0)
{
buf[0] = getc(fp);
buf[1] = '\0';
p[num_params].type = PARAM_STRING;
p[num_params].value.string = strdup(buf);
num_params ++;
}
else if (strcasecmp(name, "DT") == 0)
{
if ((buf[0] = getc(fp)) != ';')
{
buf[1] = '\0';
p[num_params].type = PARAM_STRING;
p[num_params].value.string = strdup(buf);
num_params ++;
}
}
else if (strcasecmp(name, "PE") == 0)
{
for (i = 0; i < (sizeof(buf) - 1); i ++)
if ((buf[i] = getc(fp)) == ';')
break;
buf[i] = '\0';
p[num_params].type = PARAM_STRING;
p[num_params].value.string = strdup(buf);
num_params ++;
}
while (!done)
switch (ch = getc(fp))
{
case ',' :
case ' ' :
case '\n' :
case '\r' :
case '\t' :
break;
case '\"' :
fscanf(fp, "%[^\"]\"", buf);
if (num_params < MAX_PARAMS)
{
p[num_params].type = PARAM_STRING;
p[num_params].value.string = strdup(buf);
num_params ++;
};
break;
case '-' :
case '+' :
ungetc(ch, fp);
fscanf(fp, "%f", &(p[num_params].value.number));
if (num_params < MAX_PARAMS)
{
p[num_params].type = PARAM_RELATIVE;
num_params ++;
}
break;
case '0' :
case '1' :
case '2' :
case '3' :
case '4' :
case '5' :
case '6' :
case '7' :
case '8' :
case '9' :
case '.' :
ungetc(ch, fp);
fscanf(fp, "%f", &(p[num_params].value.number));
if (num_params < MAX_PARAMS)
{
p[num_params].type = PARAM_ABSOLUTE;
num_params ++;
}
break;
default :
ungetc(ch, fp);
done = 1;
break;
}
*params = p;
return (num_params);
}
/*
* 'FreeParameters()' - Free all string parameter values.
*/
void
FreeParameters(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameter values */
{
int i; /* Looping var */
for (i = 0; i < num_params; i ++)
if (params[i].type == PARAM_STRING)
free(params[i].value.string);
}
/*
* End of "$Id$".
*/
-255
Ver Arquivo
@@ -1,255 +0,0 @@
/*
* "$Id$"
*
* HP-GL/2 filter main entry for the Common UNIX Printing System (CUPS).
*
* Copyright 1993-1999 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* Contents:
*
* main() - Main entry for HP-GL/2 filter.
* compare_names() - Compare two command names.
*/
/*
* Include necessary headers...
*/
/*#define DEBUG*/
#define _HPGL_MAIN_C_
#include "hpgltops.h"
/*
* HP-GL/2 command table...
*/
typedef struct
{
char name[4]; /* Name of command */
void (*func)(int, param_t *); /* Function to call */
} name_t;
static name_t commands[] =
{
{ "BP", BP_begin_plot },
{ "DF", DF_default_values },
{ "IN", IN_initialize },
{ "IP", IP_input_absolute },
{ "IR", IR_input_relative },
{ "IW", IW_input_window },
{ "PG", PG_advance_page },
{ "RO", RO_rotate },
{ "RP", RP_replot },
{ "SC", SC_scale },
{ "AA", AA_arc_absolute },
{ "AR", AR_arc_relative },
{ "AT", AT_arc_absolute3 },
{ "CI", CI_circle },
{ "PA", PA_plot_absolute },
{ "PD", PD_pen_down },
{ "PE", PE_polyline_encoded },
{ "PR", PR_plot_relative },
{ "PS", PS_plot_size },
{ "PU", PU_pen_up },
{ "RT", RT_arc_relative3 },
{ "EA", EA_edge_rect_absolute },
{ "EP", EP_edge_polygon },
{ "ER", ER_edge_rect_relative },
{ "EW", EW_edge_wedge },
{ "FP", FP_fill_polygon },
{ "PM", PM_polygon_mode },
{ "RA", RA_fill_rect_absolute },
{ "RR", RR_fill_rect_relative },
{ "WG", WG_fill_wedge },
{ "AD", AD_define_alternate },
{ "CF", CF_character_fill },
{ "CP", CP_character_plot },
{ "DI", DI_absolute_direction },
{ "DR", DR_relative_direction },
{ "DT", DT_define_label_term },
{ "DV", DV_define_variable_path },
{ "ES", ES_extra_space },
{ "LB", LB_label },
{ "LO", LO_label_origin },
{ "SA", SA_select_alternate },
{ "SD", SD_define_standard },
{ "SI", SI_absolute_size },
{ "SL", SL_character_slant },
{ "SR", SR_relative_size },
{ "SS", SS_select_standard },
{ "TD", TD_transparent_data },
{ "AC", AC_anchor_corner },
{ "FT", FT_fill_type },
{ "LA", LA_line_attributes },
{ "LT", LT_line_type },
{ "NP", NP_number_pens },
{ "PC", PC_pen_color },
{ "CR", CR_color_range },
{ "PW", PW_pen_width },
{ "RF", RF_raster_fill },
{ "SM", SM_symbol_mode },
{ "SP", SP_select_pen },
{ "UL", UL_user_line_type },
{ "WU", WU_width_units }
};
#define NUM_COMMANDS (sizeof(commands) / sizeof(name_t))
/*
* Local functions...
*/
static int compare_names(const void *p1, const void *p2);
/*
* 'main()' - Main entry for HP-GL/2 filter.
*/
int /* O - Exit status */
main(int argc, /* I - Number of command-line arguments */
char *argv[]) /* I - Command-line arguments */
{
FILE *fp; /* Input file */
ppd_file_t *ppd; /* PPD file */
int num_params; /* Number of parameters */
param_t *params; /* Command parameters */
name_t *command, /* Command */
name; /* Name of command */
int num_options; /* Number of print options */
cups_option_t *options; /* Print options */
const char *val; /* Option value */
int shading; /* -1 = black, 0 = grey, 1 = color */
float penwidth; /* Default pen width */
if (argc < 6 || argc > 7)
{
fputs("ERROR: hpgltops job-id user title copies options [file]\n", stderr);
return (1);
}
/*
* If we have 7 arguments, print the file named on the command-line.
* Otherwise, send stdin instead...
*/
if (argc == 6)
fp = stdin;
else
{
/*
* Try to open the print file...
*/
if ((fp = fopen(argv[6], "rb")) == NULL)
{
perror("ERROR: unable to open print file - ");
return (1);
}
}
/*
* Process command-line options and write the prolog...
*/
options = NULL;
num_options = cupsParseOptions(argv[5], 0, &options);
if ((ppd = SetCommonOptions(num_options, options, 1)) != NULL)
ppdClose(ppd);
shading = 1;
penwidth = 1.0;
if ((val = cupsGetOption("blackplot", num_options, options)) != NULL)
shading = 0;
if ((val = cupsGetOption("fitplot", num_options, options)) != NULL)
FitPlot = 1;
if ((val = cupsGetOption("penwidth", num_options, options)) != NULL)
penwidth = (float)atof(val);
/*
* Write the PostScript prolog and initialize the plotting "engine"...
*/
OutputProlog(argv[3], argv[2], shading, penwidth);
IP_input_absolute(0, NULL);
/*
* Sort the command array...
*/
qsort(commands, NUM_COMMANDS, sizeof(name_t),
(int (*)(const void *, const void *))compare_names);
/*
* Read commands until we reach the end of file.
*/
while ((num_params = ParseCommand(fp, name.name, &params)) >= 0)
{
#ifdef DEBUG
{
int i;
fprintf(stderr, "DEBUG: %s(%d)", name.name, num_params);
for (i = 0; i < num_params; i ++)
if (params[i].type == PARAM_STRING)
fprintf(stderr, " \'%s\'", params[i].value.string);
else
fprintf(stderr, " %f", params[i].value.number);
fputs("\n", stderr);
}
#endif /* DEBUG */
if ((command = bsearch(&name, commands, NUM_COMMANDS, sizeof(name_t),
(int (*)(const void *, const void *))compare_names)) != NULL)
(*command->func)(num_params, params);
FreeParameters(num_params, params);
}
OutputTrailer();
if (fp != stdin)
fclose(fp);
return (0);
}
/*
* 'compare_names()' - Compare two command names.
*/
static int /* O - Result of strcasecmp() on names */
compare_names(const void *p1, /* I - First name */
const void *p2) /* I - Second name */
{
return (strcasecmp(((name_t *)p1)->name, ((name_t *)p2)->name));
}
/*
* End of "$Id$".
*/
-380
Ver Arquivo
@@ -1,380 +0,0 @@
/*
* "$Id$"
*
* HP-GL/2 polygon routines for the Common UNIX Printing System (CUPS).
*
* Copyright 1993-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:
*
* EA_edge_rect_absolute() - Draw a rectangle.
* EP_edge_polygon() - Stroke the edges of a polygon.
* ER_edge_rect_relative() - Draw a rectangle relative to the current
* EW_edge_wedge() - Draw a pie wedge.
* FP_fill_polygon() - Fill a polygon.
* PM_polygon_mode() - Set the polygon drawing mode.
* RA_fill_rect_absolute() - Fill a rectangle.
* RR_fill_rect_relative() - Fill a rectangle relative to the current
* WG_fill_wedge() - Fill a pie wedge.
*/
/*
* Include necessary headers...
*/
#include "hpgltops.h"
/*
* 'EA_edge_rect_absolute()' - Draw a rectangle.
*/
void
EA_edge_rect_absolute(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
float x, y; /* Transformed coordinates */
if (num_params < 2)
return;
x = Transform[0][0] * params[0].value.number +
Transform[0][1] * params[1].value.number +
Transform[0][2];
y = Transform[1][0] * params[0].value.number +
Transform[1][1] * params[1].value.number +
Transform[1][2];
if (!PolygonMode)
Outputf("MP\n");
Outputf("%.3f %.3f MO\n", PenPosition[0], PenPosition[1]);
Outputf("%.3f %.3f LI\n", PenPosition[0], y);
Outputf("%.3f %.3f LI\n", x, y);
Outputf("%.3f %.3f LI\n", x, PenPosition[1]);
Outputf("CP\n");
if (!PolygonMode)
Outputf("ST\n");
}
/*
* 'EP_edge_polygon()' - Stroke the edges of a polygon.
*/
void
EP_edge_polygon(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
(void)num_params;
(void)params;
Outputf("ST\n");
}
/*
* 'ER_edge_rect_relative()' - Draw a rectangle relative to the current
* pen position.
*/
void
ER_edge_rect_relative(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
float x, y; /* Transformed coordinates */
if (num_params < 2)
return;
x = Transform[0][0] * params[0].value.number +
Transform[0][1] * params[1].value.number +
PenPosition[0];
y = Transform[1][0] * params[0].value.number +
Transform[1][1] * params[1].value.number +
PenPosition[1];
if (!PolygonMode)
Outputf("MP\n");
Outputf("%.3f %.3f MO\n", PenPosition[0], PenPosition[1]);
Outputf("%.3f %.3f LI\n", PenPosition[0], y);
Outputf("%.3f %.3f LI\n", x, y);
Outputf("%.3f %.3f LI\n", x, PenPosition[1]);
Outputf("CP\n");
if (!PolygonMode)
Outputf("ST\n");
}
/*
* 'EW_edge_wedge()' - Draw a pie wedge.
*/
void
EW_edge_wedge(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
float x, y; /* Transformed coordinates */
float start, end, /* Start and end of arc */
theta, /* Current angle */
dt, /* Step between points */
radius; /* Radius of arc */
if (num_params < 3)
return;
radius = params[0].value.number;
start = params[1].value.number;
end = start + params[2].value.number;
if (num_params > 3)
dt = (float)fabs(params[3].value.number);
else
dt = 5.0f;
if (!PolygonMode)
Outputf("MP\n");
Outputf("%.3f %.3f MO\n", PenPosition[0], PenPosition[1]);
if (start < end)
for (theta = start + dt; theta < end; theta += dt)
{
x = (float)(PenPosition[0] +
radius * cos(M_PI * theta / 180.0) * Transform[0][0] +
radius * sin(M_PI * theta / 180.0) * Transform[0][1]);
y = (float)(PenPosition[1] +
radius * cos(M_PI * theta / 180.0) * Transform[1][0] +
radius * sin(M_PI * theta / 180.0) * Transform[1][1]);
Outputf("%.3f %.3f LI\n", x, y);
}
else
for (theta = start - dt; theta > end; theta -= dt)
{
x = (float)(PenPosition[0] +
radius * cos(M_PI * theta / 180.0) * Transform[0][0] +
radius * sin(M_PI * theta / 180.0) * Transform[0][1]);
y = (float)(PenPosition[1] +
radius * cos(M_PI * theta / 180.0) * Transform[1][0] +
radius * sin(M_PI * theta / 180.0) * Transform[1][1]);
Outputf("%.3f %.3f LI\n", x, y);
}
x = (float)(PenPosition[0] +
radius * cos(M_PI * end / 180.0) * Transform[0][0] +
radius * sin(M_PI * end / 180.0) * Transform[0][1]);
y = (float)(PenPosition[1] +
radius * cos(M_PI * end / 180.0) * Transform[1][0] +
radius * sin(M_PI * end / 180.0) * Transform[1][1]);
Outputf("%.3f %.3f LI\n", x, y);
Outputf("CP\n");
if (!PolygonMode)
Outputf("ST\n");
}
/*
* 'FP_fill_polygon()' - Fill a polygon.
*/
void
FP_fill_polygon(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
(void)num_params;
(void)params;
Outputf("FI\n");
}
/*
* 'PM_polygon_mode()' - Set the polygon drawing mode.
*/
void
PM_polygon_mode(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
if (num_params == 0 ||
params[0].value.number == 0)
{
Outputf("MP\n");
Outputf("%.3f %.3f MO\n", PenPosition[0], PenPosition[1]);
PolygonMode = 1;
}
else if (params[0].value.number == 2)
PolygonMode = 0;
}
/*
* 'RA_fill_rect_absolute()' - Fill a rectangle.
*/
void
RA_fill_rect_absolute(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
float x, y; /* Transformed coordinates */
if (num_params < 2)
return;
x = Transform[0][0] * params[0].value.number +
Transform[0][1] * params[1].value.number +
Transform[0][2];
y = Transform[1][0] * params[0].value.number +
Transform[1][1] * params[1].value.number +
Transform[1][2];
if (!PolygonMode)
Outputf("MP\n");
Outputf("%.3f %.3f MO\n", PenPosition[0], PenPosition[1]);
Outputf("%.3f %.3f LI\n", PenPosition[0], y);
Outputf("%.3f %.3f LI\n", x, y);
Outputf("%.3f %.3f LI\n", x, PenPosition[1]);
Outputf("CP\n");
if (!PolygonMode)
Outputf("FI\n");
}
/*
* 'RR_fill_rect_relative()' - Fill a rectangle relative to the current
* pen position.
*/
void
RR_fill_rect_relative(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
float x, y; /* Transformed coordinates */
if (num_params < 2)
return;
x = Transform[0][0] * params[0].value.number +
Transform[0][1] * params[1].value.number +
PenPosition[0];
y = Transform[1][0] * params[0].value.number +
Transform[1][1] * params[1].value.number +
PenPosition[1];
if (!PolygonMode)
Outputf("MP\n");
Outputf("%.3f %.3f MO\n", PenPosition[0], PenPosition[1]);
Outputf("%.3f %.3f LI\n", PenPosition[0], y);
Outputf("%.3f %.3f LI\n", x, y);
Outputf("%.3f %.3f LI\n", x, PenPosition[1]);
Outputf("CP\n");
if (!PolygonMode)
Outputf("FI\n");
}
/*
* 'WG_fill_wedge()' - Fill a pie wedge.
*/
void
WG_fill_wedge(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
float x, y; /* Transformed coordinates */
float start, end, /* Start and end angles */
theta, /* Current angle */
dt, /* Step between points */
radius; /* Radius of arc */
if (num_params < 3)
return;
radius = params[0].value.number;
start = params[1].value.number;
end = start + params[2].value.number;
if (num_params > 3)
dt = (float)fabs(params[3].value.number);
else
dt = 5.0;
if (!PolygonMode)
Outputf("MP\n");
Outputf("%.3f %.3f MO\n", PenPosition[0], PenPosition[1]);
if (start < end)
for (theta = start + dt; theta < end; theta += dt)
{
x = (float)(PenPosition[0] +
radius * cos(M_PI * theta / 180.0) * Transform[0][0] +
radius * sin(M_PI * theta / 180.0) * Transform[0][1]);
y = (float)(PenPosition[1] +
radius * cos(M_PI * theta / 180.0) * Transform[1][0] +
radius * sin(M_PI * theta / 180.0) * Transform[1][1]);
Outputf("%.3f %.3f LI\n", x, y);
}
else
for (theta = start - dt; theta > end; theta -= dt)
{
x = (float)(PenPosition[0] +
radius * cos(M_PI * theta / 180.0) * Transform[0][0] +
radius * sin(M_PI * theta / 180.0) * Transform[0][1]);
y = (float)(PenPosition[1] +
radius * cos(M_PI * theta / 180.0) * Transform[1][0] +
radius * sin(M_PI * theta / 180.0) * Transform[1][1]);
Outputf("%.3f %.3f LI\n", x, y);
}
x = (float)(PenPosition[0] +
radius * cos(M_PI * end / 180.0) * Transform[0][0] +
radius * sin(M_PI * end / 180.0) * Transform[0][1]);
y = (float)(PenPosition[1] +
radius * cos(M_PI * end / 180.0) * Transform[1][0] +
radius * sin(M_PI * end / 180.0) * Transform[1][1]);
Outputf("%.3f %.3f LI\n", x, y);
Outputf("CP\n");
if (!PolygonMode)
Outputf("FI\n");
}
/*
* End of "$Id$".
*/
-192
Ver Arquivo
@@ -1,192 +0,0 @@
/*
* "$Id$"
*
* HP-GL/2 prolog routines for for the Common UNIX Printing System (CUPS).
*
* Copyright 1993-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:
*
* OutputProlog() - Output the PostScript prolog...
* OutputTrailer() - Output the PostScript trailer...
* Outputf() - Write a formatted string to the output file, creating the
* page header as needed...
*/
/*
* Include necessary headers...
*/
#include "hpgltops.h"
#include <stdarg.h>
/*
* 'OutputProlog()' - Output the PostScript prolog...
*/
void
OutputProlog(char *title, /* I - Job title */
char *user, /* I - Username */
int shading, /* I - Type of shading */
float penwidth) /* I - Default pen width */
{
FILE *prolog; /* Prolog file */
char line[255]; /* Line from prolog file */
time_t curtime; /* Current time */
struct tm *curtm; /* Current date */
curtime = time(NULL);
curtm = localtime(&curtime);
puts("%!PS-Adobe-3.0");
printf("%%%%BoundingBox: %.0f %.0f %.0f %.0f\n",
PageLeft, PageBottom, PageRight, PageTop);
puts("%%Pages: (atend)");
printf("%%%%LanguageLevel: %d\n", LanguageLevel);
puts("%%DocumentData: Clean7Bit");
puts("%%DocumentSuppliedResources: procset hpgltops 1.0 0");
puts("%%DocumentNeededResources: font Courier Helvetica");
puts("%%Creator: hpgltops/" CUPS_SVERSION);
strftime(line, sizeof(line), "%%%%CreationDate: %c", curtm);
puts(line);
printf("%%%%Title: %s\n", title);
printf("%%%%For: %s\n", user);
if (Orientation & 1)
puts("%%Orientation: Landscape");
puts("%%EndComments");
puts("%%BeginProlog");
printf("/DefaultPenWidth %.2f def\n", penwidth * 72.0 / 25.4);
puts("3.0 setmiterlimit");
if (!shading) /* Black only */
puts("/setrgbcolor { pop pop pop } bind def");
else if (!ColorDevice) /* Greyscale */
puts("/setrgbcolor { 0.08 mul exch 0.61 mul add exch 0.31 mul add setgray } bind def\n");
if ((prolog = fopen(CUPS_DATADIR "/HPGLprolog", "r")) == NULL)
{
perror("ERROR: Unable to open HPGL prolog \"" CUPS_DATADIR "/HPGLprolog\" for reading");
exit(1);
}
while (fgets(line, sizeof(line), prolog) != NULL)
fputs(line, stdout);
fclose(prolog);
puts("%%EndProlog");
IN_initialize(0, NULL);
}
/*
* 'OutputTrailer()' - Output the PostScript trailer...
*/
void
OutputTrailer(void)
{
if (PageDirty)
PG_advance_page(0, NULL);
puts("%%BeginTrailer");
printf("%%%%Pages: %d\n", PageCount);
puts("%%EOF");
}
/*
* 'Outputf()' - Write a formatted string to the output file, creating the
* page header as needed...
*/
int /* O - Number of bytes written */
Outputf(const char *format, /* I - Printf-style string */
...) /* I - Additional args as needed */
{
va_list ap; /* Argument pointer */
int bytes; /* Number of bytes written */
/*
* Write the page header as needed...
*/
if (!PageDirty)
{
PageDirty = 1;
PageCount ++;
printf("%%%%Page: %d %d\n", PageCount, PageCount);
printf("/PenScaling %.3f def\n", PenScaling);
puts("gsave");
if (Duplex && (PageCount & 1) == 0)
switch ((PageRotation / 90) & 3)
{
case 0 :
printf("%.1f %.1f translate\n", PageWidth - PageRight, PageBottom);
break;
case 1 :
printf("%.1f %.1f translate\n", PageLength - PageTop,
PageWidth - PageRight);
break;
case 2 :
printf("%.1f %.1f translate\n", PageLeft, PageLength - PageTop);
break;
case 3 :
printf("%.1f %.1f translate\n", PageBottom, PageLeft);
break;
}
else
switch ((PageRotation / 90) & 3)
{
case 0 :
printf("%.1f %.1f translate\n", PageLeft, PageBottom);
break;
case 1 :
printf("%.1f %.1f translate\n", PageBottom, PageWidth - PageRight);
break;
case 2 :
printf("%.1f %.1f translate\n", PageWidth - PageRight,
PageLength - PageTop);
break;
case 3 :
printf("%.1f %.1f translate\n", PageLength - PageTop, PageLeft);
break;
}
}
/*
* Write the string to the output file...
*/
va_start(ap, format);
bytes = vprintf(format, ap);
va_end(ap);
return (bytes);
}
/*
* End of "$Id$".
*/
-704
Ver Arquivo
@@ -1,704 +0,0 @@
/*
* "$Id$"
*
* HP-GL/2 vector routines for the Common UNIX Printing System (CUPS).
*
* Copyright 1993-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:
*
* AA_arc_absolute() - Draw an arc.
* AR_arc_relative() - Draw an arc relative to the current pen
* AT_arc_absolute3() - Draw an arc using 3 points.
* CI_circle() - Draw a circle.
* PA_plot_absolute() - Plot a line using absolute coordinates.
* PD_pen_down() - Start drawing.
* PE_polygon_encoded() - Draw an encoded polyline.
* PR_plot_relative() - Plot a line using relative coordinates.
* PU_pen_up() - Stop drawing.
* RT_arc_relative3() - Draw an arc through 3 points relative to the
* decode_number() - Decode an encoded number.
* plot_points() - Plot the specified points.
*/
/*
* Include necessary headers...
*/
#include "hpgltops.h"
/*
* Local functions...
*/
static double decode_number(unsigned char **, int, double);
static void plot_points(int, param_t *);
/*
* 'AA_arc_absolute()' - Draw an arc.
*/
void
AA_arc_absolute(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
float x, y, /* Transformed coordinates */
dx, dy; /* Distance from current pen */
float start, end, /* Start and end angles */
theta, /* Current angle */
dt, /* Step between points */
radius; /* Radius of arc */
if (num_params < 3)
return;
x = Transform[0][0] * params[0].value.number +
Transform[0][1] * params[1].value.number +
Transform[0][2];
y = Transform[1][0] * params[0].value.number +
Transform[1][1] * params[1].value.number +
Transform[1][2];
dx = PenPosition[0] - x;
dy = PenPosition[1] - y;
start = (float)(180.0 * atan2(dy, dx) / M_PI);
if (start < 0.0)
start += 360.0f;
end = start + params[2].value.number;
radius = (float)hypot(dx, dy);
if (PenDown)
{
if (num_params > 3 && params[3].value.number > 0.0)
dt = (float)fabs(params[3].value.number);
else
dt = 5.0;
if (!PolygonMode)
Outputf("MP\n");
Outputf("%.3f %.3f MO\n", PenPosition[0], PenPosition[1]);
if (start < end)
for (theta = start + dt; theta < end; theta += dt)
{
PenPosition[0] = (float)(x + radius * cos(M_PI * theta / 180.0));
PenPosition[1] = (float)(y + radius * sin(M_PI * theta / 180.0));
Outputf("%.3f %.3f LI\n", PenPosition[0], PenPosition[1]);
}
else
for (theta = start - dt; theta > end; theta -= dt)
{
PenPosition[0] = (float)(x + radius * cos(M_PI * theta / 180.0));
PenPosition[1] = (float)(y + radius * sin(M_PI * theta / 180.0));
Outputf("%.3f %.3f LI\n", PenPosition[0], PenPosition[1]);
}
}
PenPosition[0] = (float)(x + radius * cos(M_PI * end / 180.0));
PenPosition[1] = (float)(y + radius * sin(M_PI * end / 180.0));
if (PenDown)
{
Outputf("%.3f %.3f LI\n", PenPosition[0], PenPosition[1]);
if (!PolygonMode)
Outputf("ST\n");
}
}
/*
* 'AR_arc_relative()' - Draw an arc relative to the current pen
* position.
*/
void
AR_arc_relative(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
float x, y, /* Transformed coordinates */
dx, dy; /* Distance from current pen */
float start, end, /* Start and end angles */
theta, /* Current angle */
dt, /* Step between points */
radius; /* Radius of arc */
if (num_params < 3)
return;
x = Transform[0][0] * params[0].value.number +
Transform[0][1] * params[1].value.number +
PenPosition[0];
y = Transform[1][0] * params[0].value.number +
Transform[1][1] * params[1].value.number +
PenPosition[1];
dx = PenPosition[0] - x;
dy = PenPosition[1] - y;
start = (float)(180.0 * atan2(dy, dx) / M_PI);
if (start < 0.0)
start += 360.0f;
end = start + params[2].value.number;
radius = (float)hypot(dx, dy);
if (PenDown)
{
if (num_params > 3 && params[3].value.number > 0.0)
dt = (float)fabs(params[3].value.number);
else
dt = 5.0;
if (!PolygonMode)
Outputf("MP\n");
Outputf("%.3f %.3f MO\n", PenPosition[0], PenPosition[1]);
if (start < end)
for (theta = start + dt; theta < end; theta += dt)
{
PenPosition[0] = (float)(x + radius * cos(M_PI * theta / 180.0));
PenPosition[1] = (float)(y + radius * sin(M_PI * theta / 180.0));
Outputf("%.3f %.3f LI\n", PenPosition[0], PenPosition[1]);
}
else
for (theta = start - dt; theta > end; theta -= dt)
{
PenPosition[0] = (float)(x + radius * cos(M_PI * theta / 180.0));
PenPosition[1] = (float)(y + radius * sin(M_PI * theta / 180.0));
Outputf("%.3f %.3f LI\n", PenPosition[0], PenPosition[1]);
}
}
PenPosition[0] = (float)(x + radius * cos(M_PI * end / 180.0));
PenPosition[1] = (float)(y + radius * sin(M_PI * end / 180.0));
if (PenDown)
{
Outputf("%.3f %.3f LI\n", PenPosition[0], PenPosition[1]);
if (!PolygonMode)
Outputf("ST\n");
}
}
/*
* 'AT_arc_absolute3()' - Draw an arc using 3 points.
*
* Note:
*
* Currently this only draws two line segments through the
* specified points.
*/
void
AT_arc_absolute3(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
if (num_params < 4)
return;
if (PenDown)
{
if (!PolygonMode)
Outputf("MP\n");
Outputf("%.3f %.3f MO\n", PenPosition[0], PenPosition[1]);
PenPosition[0] = Transform[0][0] * params[0].value.number +
Transform[0][1] * params[1].value.number +
Transform[0][2];
PenPosition[1] = Transform[1][0] * params[0].value.number +
Transform[1][1] * params[1].value.number +
Transform[1][2];
Outputf("%.3f %.3f LI\n", PenPosition[0], PenPosition[1]);
}
PenPosition[0] = Transform[0][0] * params[2].value.number +
Transform[0][1] * params[3].value.number +
Transform[0][2];
PenPosition[1] = Transform[1][0] * params[2].value.number +
Transform[1][1] * params[3].value.number +
Transform[1][2];
if (PenDown)
{
Outputf("%.3f %.3f LI\n", PenPosition[0], PenPosition[1]);
if (!PolygonMode)
Outputf("ST\n");
}
}
/*
* 'CI_circle()' - Draw a circle.
*/
void
CI_circle(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
float x, y; /* Transformed coordinates */
float theta, /* Current angle */
dt, /* Step between points */
radius; /* Radius of circle */
if (num_params < 1)
return;
if (!PenDown)
return;
radius = params[0].value.number;
if (num_params > 1)
dt = (float)fabs(params[1].value.number);
else
dt = 5.0;
if (!PolygonMode)
Outputf("MP\n");
for (theta = 0.0; theta < 360.0; theta += dt)
{
x = (float)(PenPosition[0] +
radius * cos(M_PI * theta / 180.0) * Transform[0][0] +
radius * sin(M_PI * theta / 180.0) * Transform[0][1]);
y = (float)(PenPosition[1] +
radius * cos(M_PI * theta / 180.0) * Transform[1][0] +
radius * sin(M_PI * theta / 180.0) * Transform[1][1]);
Outputf("%.3f %.3f %s\n", x, y, theta == 0.0 ? "MO" : "LI");
}
Outputf("CP\n");
if (!PolygonMode)
Outputf("ST\n");
}
/*
* 'PA_plot_absolute()' - Plot a line using absolute coordinates.
*/
void
PA_plot_absolute(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
PenMotion = 0;
if (num_params > 1)
plot_points(num_params, params);
}
/*
* 'PD_pen_down()' - Start drawing.
*/
void
PD_pen_down(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
PenDown = 1;
if (num_params > 1)
plot_points(num_params, params);
}
/*
* 'PE_polygon_encoded()' - Draw an encoded polyline.
*/
void
PE_polyline_encoded(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
unsigned char *s; /* Pointer into string */
int temp, /* Temporary value */
base_bits, /* Data bits per byte */
draw, /* Draw or move */
abscoords; /* Use absolute coordinates */
double tx, ty, /* Transformed coordinates */
x, y, /* Raw coordinates */
frac_bits; /* Multiplier for encoded number */
base_bits = 6;
frac_bits = 1.0;
draw = 1;
abscoords = 0;
if (num_params == 0)
return;
if (!PolygonMode)
{
Outputf("MP\n");
Outputf("%.3f %.3f MO\n", PenPosition[0], PenPosition[1]);
}
for (s = (unsigned char *)params[0].value.string; *s != '\0';)
switch (*s)
{
case '7' :
s ++;
base_bits = 5;
break;
case ':' : /* Select pen */
s ++;
temp = (int)decode_number(&s, base_bits, 1.0);
Outputf("P%d W%d\n", temp, temp);
break;
case '<' : /* Next coords are a move-to */
draw = 0;
s ++;
break;
case '>' : /* Set fractional bits */
s ++;
temp = (int)decode_number(&s, base_bits, 1.0);
frac_bits = 1.0 / (1 << temp);
break;
case '=' : /* Next coords are absolute */
s ++;
abscoords = 1;
break;
default :
if (*s >= 63)
{
/*
* Coordinate...
*/
x = decode_number(&s, base_bits, frac_bits);
y = decode_number(&s, base_bits, frac_bits);
if (abscoords)
{
tx = Transform[0][0] * x + Transform[0][1] * y +
Transform[0][2];
ty = Transform[1][0] * x + Transform[1][1] * y +
Transform[1][2];
}
else if (x == 0.0 && y == 0.0)
{
draw = 1;
continue;
}
else
{
tx = Transform[0][0] * x + Transform[0][1] * y +
PenPosition[0];
ty = Transform[1][0] * x + Transform[1][1] * y +
PenPosition[1];
}
if (draw)
Outputf("%.3f %.3f LI\n", tx, ty);
else
Outputf("%.3f %.3f MO\n", tx, ty);
PenPosition[0] = (float)tx;
PenPosition[1] = (float)ty;
draw = 1;
abscoords = 0;
}
else
{
/*
* Junk - ignore...
*/
if (*s != '\n' && *s != '\r')
fprintf(stderr, "WARNING: ignoring illegal PE char \'%c\'...\n", *s);
s ++;
}
break;
}
if (!PolygonMode)
Outputf("ST\n");
}
/*
* 'PR_plot_relative()' - Plot a line using relative coordinates.
*/
void
PR_plot_relative(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
PenMotion = 1;
if (num_params > 1)
plot_points(num_params, params);
}
/*
* 'PU_pen_up()' - Stop drawing.
*/
void
PU_pen_up(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
PenDown = 0;
if (num_params > 1)
plot_points(num_params, params);
}
/*
* 'RT_arc_relative3()' - Draw an arc through 3 points relative to the
* current pen position.
*
* Note:
*
* This currently only draws two line segments through the specified
* points.
*/
void
RT_arc_relative3(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
if (num_params < 4)
return;
if (PenDown)
{
if (!PolygonMode)
Outputf("MP\n");
Outputf("%.3f %.3f MO\n", PenPosition[0], PenPosition[1]);
PenPosition[0] = Transform[0][0] * params[0].value.number +
Transform[0][1] * params[1].value.number +
PenPosition[0];
PenPosition[1] = Transform[1][0] * params[0].value.number +
Transform[1][1] * params[1].value.number +
PenPosition[1];
Outputf("%.3f %.3f LI\n", PenPosition[0], PenPosition[1]);
}
PenPosition[0] = Transform[0][0] * params[2].value.number +
Transform[0][1] * params[3].value.number +
PenPosition[0];
PenPosition[1] = Transform[1][0] * params[2].value.number +
Transform[1][1] * params[3].value.number +
PenPosition[1];
if (PenDown)
{
Outputf("%.3f %.3f LI\n", PenPosition[0], PenPosition[1]);
if (!PolygonMode)
Outputf("ST\n");
}
}
/*
* 'decode_number()' - Decode an encoded number.
*/
static double /* O - Value */
decode_number(unsigned char **s, /* IO - String to decode */
int base_bits, /* I - Number of data bits per byte */
double frac_bits) /* I - Multiplier for fractional data */
{
double temp, /* Current value */
shift; /* Multiplier */
int sign; /* Sign of result */
sign = 0;
if (base_bits == 5)
{
for (temp = 0.0, shift = frac_bits * 0.5; **s != '\0'; (*s) ++)
if (**s >= 95 && **s < 127)
{
if (sign == 0)
{
if ((**s - 95) & 1)
sign = -1;
else
sign = 1;
temp += ((**s - 95) & ~1) * shift;
}
else
temp += (**s - 95) * shift;
break;
}
else if (**s < 63)
{
if (**s != '\r' && **s != '\n')
fprintf(stderr, "hpgl2ps: Bad PE character \'%c\'!\n", **s);
continue;
}
else
{
if (sign == 0)
{
if ((**s - 63) & 1)
sign = -1;
else
sign = 1;
temp += ((**s - 63) & ~1) * shift;
}
else
temp += (**s - 63) * shift;
shift *= 32.0;
}
}
else
{
for (temp = 0.0, shift = frac_bits * 0.5; **s != '\0'; (*s) ++)
if (**s >= 191 && **s < 255)
{
if (sign == 0)
{
if ((**s - 191) & 1)
sign = -1;
else
sign = 1;
temp += ((**s - 191) & ~1) * shift;
}
else
temp += (**s - 191) * shift;
break;
}
else if (**s < 63)
{
if (**s != '\r' && **s != '\n')
fprintf(stderr, "hpgl2ps: Bad PE character \'%c\'!\n", **s);
continue;
}
else
{
if (sign == 0)
{
if ((**s - 63) & 1)
sign = -1;
else
sign = 1;
temp += ((**s - 63) & ~1) * shift;
}
else
temp += (**s - 63) * shift;
shift *= 64.0;
}
}
(*s) ++;
return (temp * sign);
}
/*
* 'plot_points()' - Plot the specified points.
*/
static void
plot_points(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
int i; /* Looping var */
float x, y; /* Transformed coordinates */
if (PenDown)
{
if (!PolygonMode)
Outputf("MP\n");
Outputf("%.3f %.3f MO\n", PenPosition[0], PenPosition[1]);
}
for (i = 0; i < num_params; i += 2)
{
if (PenMotion == 0)
{
x = Transform[0][0] * params[i + 0].value.number +
Transform[0][1] * params[i + 1].value.number +
Transform[0][2];
y = Transform[1][0] * params[i + 0].value.number +
Transform[1][1] * params[i + 1].value.number +
Transform[1][2];
}
else
{
x = Transform[0][0] * params[i + 0].value.number +
Transform[0][1] * params[i + 1].value.number +
PenPosition[0];
y = Transform[1][0] * params[i + 0].value.number +
Transform[1][1] * params[i + 1].value.number +
PenPosition[1];
}
if (PenDown)
Outputf("%.3f %.3f LI\n", x, y);
PenPosition[0] = x;
PenPosition[1] = y;
}
if (PenDown)
{
if (!PolygonMode)
Outputf("ST\n");
}
}
/*
* End of "$Id$".
*/
-130
Ver Arquivo
@@ -1,130 +0,0 @@
# Microsoft Developer Studio Project File - Name="hpgltops" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=hpgltops - 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 "hpgltops.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 "hpgltops.mak" CFG="hpgltops - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "hpgltops - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "hpgltops - 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)" == "hpgltops - 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/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:"hpgltops.exe"
!ELSEIF "$(CFG)" == "hpgltops - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "hpgltops___Win32_Debug"
# PROP BASE Intermediate_Dir "hpgltops___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 ../cups/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:"hpgltopsd.exe" /pdbtype:sept
!ENDIF
# Begin Target
# Name "hpgltops - Win32 Release"
# Name "hpgltops - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=".\hpgl-attr.c"
# End Source File
# Begin Source File
SOURCE=".\hpgl-char.c"
# End Source File
# Begin Source File
SOURCE=".\hpgl-config.c"
# End Source File
# Begin Source File
SOURCE=".\hpgl-input.c"
# End Source File
# Begin Source File
SOURCE=".\hpgl-main.c"
# End Source File
# Begin Source File
SOURCE=".\hpgl-polygon.c"
# End Source File
# Begin Source File
SOURCE=".\hpgl-prolog.c"
# End Source File
# Begin Source File
SOURCE=".\hpgl-vector.c"
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\hpgltops.h
# End Source File
# End Group
# End Target
# End Project
-196
Ver Arquivo
@@ -1,196 +0,0 @@
/*
* "$Id$"
*
* HP-GL/2 to PostScript filter for the Common UNIX Printing System (CUPS).
*
* Copyright 1993-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
*/
/*
* Include necessary headers...
*/
#include "common.h"
#include <math.h>
#ifndef M_PI
# define M_PI 3.14159265358979323846
#endif /* M_PI */
/*
* Parameter value structure...
*/
typedef struct
{
int type;
union
{
float number;
char *string;
} value;
} param_t;
#define PARAM_ABSOLUTE 0
#define PARAM_RELATIVE 1
#define PARAM_STRING 2
/*
* Globals...
*/
#ifdef _HPGL_MAIN_C_
# define VAR
# define VALUE(x) =x
# define VALUE2(x,y) ={x,y}
#else
# define VAR extern
# define VALUE(x)
# define VALUE2(x,y)
#endif /* _HPGL_MAIN_C_ */
VAR float P1[2], /* Lower-lefthand physical limit */
P2[2], /* Upper-righthand physical limit */
IW1[2], /* Window lower-lefthand limit */
IW2[2]; /* Window upper-righthand limit */
VAR int Rotation VALUE(0); /* Page rotation */
VAR int ScalingType VALUE(-1); /* Type of scaling (-1 for none) */
VAR float Scaling1[2], /* Lower-lefthand user limit */
Scaling2[2]; /* Upper-righthand user limit */
VAR float Transform[2][3]; /* Transform matrix */
VAR int PageRotation VALUE(0); /* Page/plot rotation */
VAR char StringTerminator VALUE('\003'); /* Terminator for labels */
VAR float PenPosition[2] VALUE2(0.0f, 0.0f),
/* Current pen position */
PenScaling VALUE(1.0f); /* Pen width scaling factor */
VAR int PenMotion VALUE(0), /* 0 = absolute, 1 = relative */
PenNumber VALUE(1), /* Current pen number */
PenCount VALUE(8), /* Number of pens */
PenDown VALUE(0), /* 0 = pen up, 1 = pen down */
PolygonMode VALUE(0), /* Drawing polygons? */
PageCount VALUE(1), /* Number of pages in plot */
PageDirty VALUE(0), /* Current page written on? */
WidthUnits VALUE(0); /* 0 = mm, 1 = proportionate */
VAR float PlotSize[2] VALUE2(2592.0f, 3456.0f);
/* Plot size */
VAR int CharFillMode VALUE(0), /* Where to draw labels */
CharPen VALUE(0), /* Pen to use for labels */
CharFont VALUE(0); /* Font to use for labels */
VAR float CharHeight[2] VALUE2(11.5f,11.5f);
/* Size of font for labels */
VAR int FitPlot VALUE(0); /* 1 = fit to page */
VAR float ColorRange[3][2] /* Range of color values */
#ifdef _HPGL_MAIN_C_
= {
{ 0.0, 255.0 },
{ 0.0, 255.0 },
{ 0.0, 255.0 }
}
#endif /* _HPGL_MAIN_C_ */
;
/*
* Prototypes...
*/
/* hpgl-input.c */
extern int ParseCommand(FILE *fp, char *name, param_t **params);
extern void FreeParameters(int num_params, param_t *params);
/* hpgl-config.c */
extern void update_transform(void);
extern void BP_begin_plot(int num_params, param_t *params);
extern void DF_default_values(int num_params, param_t *params);
extern void IN_initialize(int num_params, param_t *params);
extern void IP_input_absolute(int num_params, param_t *params);
extern void IR_input_relative(int num_params, param_t *params);
extern void IW_input_window(int num_params, param_t *params);
extern void PG_advance_page(int num_params, param_t *params);
extern void PS_plot_size(int num_params, param_t *params);
extern void RO_rotate(int num_params, param_t *params);
extern void RP_replot(int num_params, param_t *params);
extern void SC_scale(int num_params, param_t *params);
/* hpgl-vector.c */
extern void AA_arc_absolute(int num_params, param_t *params);
extern void AR_arc_relative(int num_params, param_t *params);
extern void AT_arc_absolute3(int num_params, param_t *params);
extern void CI_circle(int num_params, param_t *params);
extern void PA_plot_absolute(int num_params, param_t *params);
extern void PD_pen_down(int num_params, param_t *params);
extern void PE_polyline_encoded(int num_params, param_t *params);
extern void PR_plot_relative(int num_params, param_t *params);
extern void PU_pen_up(int num_params, param_t *params);
extern void RT_arc_relative3(int num_params, param_t *params);
/* hpgl-polygon.c */
extern void EA_edge_rect_absolute(int num_params, param_t *params);
extern void EP_edge_polygon(int num_params, param_t *params);
extern void ER_edge_rect_relative(int num_params, param_t *params);
extern void EW_edge_wedge(int num_params, param_t *params);
extern void FP_fill_polygon(int num_params, param_t *params);
extern void PM_polygon_mode(int num_params, param_t *params);
extern void RA_fill_rect_absolute(int num_params, param_t *params);
extern void RR_fill_rect_relative(int num_params, param_t *params);
extern void WG_fill_wedge(int num_params, param_t *params);
/* hpgl-char.c */
extern void AD_define_alternate(int num_params, param_t *params);
extern void CF_character_fill(int num_params, param_t *params);
extern void CP_character_plot(int num_params, param_t *params);
extern void DI_absolute_direction(int num_params, param_t *params);
extern void DR_relative_direction(int num_params, param_t *params);
extern void DT_define_label_term(int num_params, param_t *params);
extern void DV_define_variable_path(int num_params, param_t *params);
extern void ES_extra_space(int num_params, param_t *params);
extern void LB_label(int num_params, param_t *params);
extern void LO_label_origin(int num_params, param_t *params);
extern void SA_select_alternate(int num_params, param_t *params);
extern void SD_define_standard(int num_params, param_t *params);
extern void SI_absolute_size(int num_params, param_t *params);
extern void SL_character_slant(int num_params, param_t *params);
extern void SR_relative_size(int num_params, param_t *params);
extern void SS_select_standard(int num_params, param_t *params);
extern void TD_transparent_data(int num_params, param_t *params);
/* hpgl-attr.c */
extern void AC_anchor_corner(int num_params, param_t *params);
extern void CR_color_range(int num_params, param_t *params);
extern void FT_fill_type(int num_params, param_t *params);
extern void LA_line_attributes(int num_params, param_t *params);
extern void LT_line_type(int num_params, param_t *params);
extern void NP_number_pens(int num_params, param_t *params);
extern void PC_pen_color(int num_params, param_t *params);
extern void PW_pen_width(int num_params, param_t *params);
extern void RF_raster_fill(int num_params, param_t *params);
extern void SM_symbol_mode(int num_params, param_t *params);
extern void SP_select_pen(int num_params, param_t *params);
extern void UL_user_line_type(int num_params, param_t *params);
extern void WU_width_units(int num_params, param_t *params);
/* hpgl-prolog.c */
extern void OutputProlog(char *title, char *user, int shading, float penwidth);
extern void OutputTrailer(void);
extern int Outputf(const char *format, ...);
/*
* End of "$Id$".
*/
-910
Ver Arquivo
@@ -1,910 +0,0 @@
/*
* "$Id$"
*
* Colorspace conversions for the Common UNIX Printing System (CUPS).
*
* Copyright 1993-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:
*
* ImageWhiteToWhite() - Convert luminance colors to device-dependent
* ImageWhiteToRGB() - Convert luminance data to RGB.
* ImageWhiteToBlack() - Convert luminance colors to black.
* ImageWhiteToCMY() - Convert luminance colors to CMY.
* ImageWhiteToCMYK() - Convert luminance colors to CMYK.
* ImageRGBToBlack() - Convert RGB data to black.
* ImageRGBToCMY() - Convert RGB colors to CMY.
* ImageRGBToCMYK() - Convert RGB colors to CMYK.
* ImageRGBToWhite() - Convert RGB colors to luminance.
* ImageRGBToRGB() - Convert RGB colors to device-dependent RGB.
* ImageLut() - Adjust all pixel values with the given LUT.
* ImageRGBAdjust() - Adjust the hue and saturation of the given RGB
* colors.
* huerotate() - Rotate the hue, maintaining luminance.
* ident() - Make an identity matrix.
* mult() - Multiply two matrices.
* saturate() - Make a saturation matrix.
* xform() - Transform a 3D point using a matrix...
* xrotate() - Rotate about the x (red) axis...
* yrotate() - Rotate about the y (green) axis...
* zrotate() - Rotate about the z (blue) axis...
* zshear() - Shear z using x and y...
*/
/*
* Include necessary headers...
*/
#include "image.h"
#include <math.h>
/*
* Globals...
*/
extern int ImageHaveProfile;
extern int ImageDensity[256];
extern int ImageMatrix[3][3][256];
/*
* Local functions...
*/
static void huerotate(float [3][3], float);
static void ident(float [3][3]);
static void mult(float [3][3], float [3][3], float [3][3]);
static void saturate(float [3][3], float);
static void xform(float [3][3], float, float, float, float *, float *, float *);
static void xrotate(float [3][3], float, float);
static void yrotate(float [3][3], float, float);
static void zrotate(float [3][3], float, float);
static void zshear(float [3][3], float, float);
/*
* 'ImageWhiteToWhite()' - Convert luminance colors to device-dependent
* luminance.
*/
void
ImageWhiteToWhite(ib_t *in, /* I - Input pixels */
ib_t *out, /* I - Output pixels */
int count) /* I - Number of pixels */
{
if (ImageHaveProfile)
while (count > 0)
{
*out++ = 255 - ImageDensity[255 - *in++];
count --;
}
else if (in != out)
memcpy(out, in, count);
}
/*
* 'ImageWhiteToRGB()' - Convert luminance data to RGB.
*/
void
ImageWhiteToRGB(ib_t *in, /* I - Input pixels */
ib_t *out, /* I - Output pixels */
int count) /* I - Number of pixels */
{
if (ImageHaveProfile)
while (count > 0)
{
out[0] = 255 - ImageDensity[255 - *in++];
out[1] = out[0];
out[2] = out[0];
out += 3;
count --;
}
else
while (count > 0)
{
*out++ = *in;
*out++ = *in;
*out++ = *in++;
count --;
}
}
/*
* 'ImageWhiteToBlack()' - Convert luminance colors to black.
*/
void
ImageWhiteToBlack(ib_t *in, /* I - Input pixels */
ib_t *out, /* I - Output pixels */
int count) /* I - Number of pixels */
{
if (ImageHaveProfile)
while (count > 0)
{
*out++ = ImageDensity[255 - *in++];
count --;
}
else
while (count > 0)
{
*out++ = 255 - *in++;
count --;
}
}
/*
* 'ImageWhiteToCMY()' - Convert luminance colors to CMY.
*/
void
ImageWhiteToCMY(ib_t *in, /* I - Input pixels */
ib_t *out, /* I - Output pixels */
int count) /* I - Number of pixels */
{
if (ImageHaveProfile)
while (count > 0)
{
out[0] = ImageDensity[255 - *in++];
out[1] = out[0];
out[2] = out[0];
out += 3;
count --;
}
else
while (count > 0)
{
*out++ = 255 - *in;
*out++ = 255 - *in;
*out++ = 255 - *in++;
count --;
}
}
/*
* 'ImageWhiteToCMYK()' - Convert luminance colors to CMYK.
*/
void
ImageWhiteToCMYK(ib_t *in, /* I - Input pixels */
ib_t *out, /* I - Output pixels */
int count) /* I - Number of pixels */
{
if (ImageHaveProfile)
while (count > 0)
{
*out++ = 0;
*out++ = 0;
*out++ = 0;
*out++ = ImageDensity[255 - *in++];
count --;
}
else
while (count > 0)
{
*out++ = 0;
*out++ = 0;
*out++ = 0;
*out++ = 255 - *in++;
count --;
}
}
/*
* 'ImageRGBToBlack()' - Convert RGB data to black.
*/
void
ImageRGBToBlack(ib_t *in, /* I - Input pixels */
ib_t *out, /* I - Output pixels */
int count) /* I - Number of pixels */
{
if (ImageHaveProfile)
while (count > 0)
{
*out++ = ImageDensity[255 - (31 * in[0] + 61 * in[1] + 8 * in[2]) / 100];
in += 3;
count --;
}
else
while (count > 0)
{
*out++ = 255 - (31 * in[0] + 61 * in[1] + 8 * in[2]) / 100;
in += 3;
count --;
}
}
/*
* 'ImageRGBToCMY()' - Convert RGB colors to CMY.
*/
void
ImageRGBToCMY(ib_t *in, /* I - Input pixels */
ib_t *out, /* I - Output pixels */
int count) /* I - Number of pixels */
{
int c, m, y, k; /* CMYK values */
int cc, cm, cy; /* Calibrated CMY values */
if (ImageHaveProfile)
while (count > 0)
{
c = 255 - *in++;
m = 255 - *in++;
y = 255 - *in++;
k = min(c, min(m, y));
c -= k;
m -= k;
y -= k;
cc = ImageMatrix[0][0][c] +
ImageMatrix[0][1][m] +
ImageMatrix[0][2][y] + k;
cm = ImageMatrix[1][0][c] +
ImageMatrix[1][1][m] +
ImageMatrix[1][2][y] + k;
cy = ImageMatrix[2][0][c] +
ImageMatrix[2][1][m] +
ImageMatrix[2][2][y] + k;
if (cc < 0)
*out++ = 0;
else if (cc > 255)
*out++ = ImageDensity[255];
else
*out++ = ImageDensity[cc];
if (cm < 0)
*out++ = 0;
else if (cm > 255)
*out++ = ImageDensity[255];
else
*out++ = ImageDensity[cm];
if (cy < 0)
*out++ = 0;
else if (cy > 255)
*out++ = ImageDensity[255];
else
*out++ = ImageDensity[cy];
count --;
}
else
while (count > 0)
{
c = 255 - in[0];
m = 255 - in[1];
y = 255 - in[2];
k = min(c, min(m, y));
*out++ = (255 - in[1] / 4) * (c - k) / 255 + k;
*out++ = (255 - in[2] / 4) * (m - k) / 255 + k;
*out++ = (255 - in[0] / 4) * (y - k) / 255 + k;
in += 3;
count --;
}
}
/*
* 'ImageRGBToCMYK()' - Convert RGB colors to CMYK.
*/
void
ImageRGBToCMYK(ib_t *in, /* I - Input pixels */
ib_t *out, /* I - Output pixels */
int count) /* I - Number of pixels */
{
int c, m, y, k, /* CMYK values */
diff, /* Color differences */
divk; /* Color divisor */
int cc, cm, cy; /* Calibrated CMY values */
if (ImageHaveProfile)
while (count > 0)
{
c = 255 - *in++;
m = 255 - *in++;
y = 255 - *in++;
k = min(c, min(m, y));
diff = 255 - (max(c, max(m, y)) - k);
k = k * diff / 255;
if (k == 255)
c = m = y = 0;
else if (k > 0)
{
divk = 255 - k;
c = 255 * (c - k) / divk;
m = 255 * (m - k) / divk;
y = 255 * (y - k) / divk;
if (c > 255)
c = 255;
if (m > 255)
m = 255;
if (y > 255)
y = 255;
}
cc = (ImageMatrix[0][0][c] +
ImageMatrix[0][1][m] +
ImageMatrix[0][2][y]);
cm = (ImageMatrix[1][0][c] +
ImageMatrix[1][1][m] +
ImageMatrix[1][2][y]);
cy = (ImageMatrix[2][0][c] +
ImageMatrix[2][1][m] +
ImageMatrix[2][2][y]);
if (cc < 0)
*out++ = 0;
else if (cc > 255)
*out++ = ImageDensity[255];
else
*out++ = ImageDensity[cc];
if (cm < 0)
*out++ = 0;
else if (cm > 255)
*out++ = ImageDensity[255];
else
*out++ = ImageDensity[cm];
if (cy < 0)
*out++ = 0;
else if (cy > 255)
*out++ = ImageDensity[255];
else
*out++ = cy;
*out++ = ImageDensity[k];
count --;
}
else
while (count > 0)
{
c = 255 - *in++;
m = 255 - *in++;
y = 255 - *in++;
k = min(c, min(m, y));
if (k == 255)
c = m = y = 0;
else if (k > 0)
{
divk = 255 - k;
c = 255 * (c - k) / divk;
m = 255 * (m - k) / divk;
y = 255 * (y - k) / divk;
if (c > 255)
c = 255;
if (m > 255)
m = 255;
if (y > 255)
y = 255;
}
*out++ = c;
*out++ = m;
*out++ = y;
*out++ = k;
count --;
}
}
/*
* 'ImageRGBToWhite()' - Convert RGB colors to luminance.
*/
void
ImageRGBToWhite(ib_t *in, /* I - Input pixels */
ib_t *out, /* I - Output pixels */
int count) /* I - Number of pixels */
{
if (ImageHaveProfile)
while (count > 0)
{
*out++ = 255 - ImageDensity[255 - (31 * in[0] + 61 * in[1] + 8 * in[2]) / 100];
in += 3;
count --;
}
else
while (count > 0)
{
*out++ = (31 * in[0] + 61 * in[1] + 8 * in[2]) / 100;
in += 3;
count --;
}
}
/*
* 'ImageRGBToRGB()' - Convert RGB colors to device-dependent RGB.
*/
void
ImageRGBToRGB(ib_t *in, /* I - Input pixels */
ib_t *out, /* I - Output pixels */
int count) /* I - Number of pixels */
{
int c, m, y, k; /* CMYK values */
int cr, cg, cb; /* Calibrated RGB values */
if (ImageHaveProfile)
while (count > 0)
{
c = 255 - *in++;
m = 255 - *in++;
y = 255 - *in++;
k = min(c, min(m, y));
c -= k;
m -= k;
y -= k;
cr = ImageMatrix[0][0][c] +
ImageMatrix[0][1][m] +
ImageMatrix[0][2][y] + k;
cg = ImageMatrix[1][0][c] +
ImageMatrix[1][1][m] +
ImageMatrix[1][2][y] + k;
cb = ImageMatrix[2][0][c] +
ImageMatrix[2][1][m] +
ImageMatrix[2][2][y] + k;
if (cr < 0)
*out++ = 255;
else if (cr > 255)
*out++ = 255 - ImageDensity[255];
else
*out++ = 255 - ImageDensity[cr];
if (cg < 0)
*out++ = 255;
else if (cg > 255)
*out++ = 255 - ImageDensity[255];
else
*out++ = 255 - ImageDensity[cg];
if (cb < 0)
*out++ = 255;
else if (cb > 255)
*out++ = 255 - ImageDensity[255];
else
*out++ = 255 - ImageDensity[cb];
count --;
}
else if (in != out)
memcpy(out, in, count * 3);
}
/*
* 'ImageLut()' - Adjust all pixel values with the given LUT.
*/
void
ImageLut(ib_t *pixels, /* I - Input/output pixels */
int count, /* I - Number of pixels/bytes to adjust */
ib_t *lut) /* I - Lookup table */
{
while (count > 0)
{
*pixels = lut[*pixels];
pixels ++;
count --;
}
}
/*
* 'ImageRGBAdjust()' - Adjust the hue and saturation of the given RGB colors.
*/
void
ImageRGBAdjust(ib_t *pixels, /* I - Input/output pixels */
int count, /* I - Number of pixels to adjust */
int saturation, /* I - Color saturation (%) */
int hue) /* I - Color hue (degrees) */
{
int i, j, k; /* Looping vars */
float mat[3][3]; /* Color adjustment matrix */
static int last_sat = 100, /* Last saturation used */
last_hue = 0; /* Last hue used */
static int lut[3][3][256]; /* Lookup table for matrix */
if (saturation != last_sat ||
hue != last_hue)
{
/*
* Build the color adjustment matrix...
*/
ident(mat);
saturate(mat, saturation * 0.01);
huerotate(mat, (float)hue);
/*
* Convert the matrix into a 3x3 array of lookup tables...
*/
for (i = 0; i < 3; i ++)
for (j = 0; j < 3; j ++)
for (k = 0; k < 256; k ++)
lut[i][j][k] = mat[i][j] * k + 0.5;
/*
* Save the saturation and hue to compare later...
*/
last_sat = saturation;
last_hue = hue;
}
/*
* Adjust each pixel in the given buffer.
*/
while (count > 0)
{
i = lut[0][0][pixels[0]] +
lut[1][0][pixels[1]] +
lut[2][0][pixels[2]];
if (i < 0)
pixels[0] = 0;
else if (i > 255)
pixels[0] = 255;
else
pixels[0] = i;
i = lut[0][1][pixels[0]] +
lut[1][1][pixels[1]] +
lut[2][1][pixels[2]];
if (i < 0)
pixels[1] = 0;
else if (i > 255)
pixels[1] = 255;
else
pixels[1] = i;
i = lut[0][2][pixels[0]] +
lut[1][2][pixels[1]] +
lut[2][2][pixels[2]];
if (i < 0)
pixels[2] = 0;
else if (i > 255)
pixels[2] = 255;
else
pixels[2] = i;
count --;
pixels += 3;
}
}
/*
* The color saturation/hue matrix stuff is provided thanks to Mr. Paul
* Haeberli at "http://www.sgi.com/grafica/matrix/index.html".
*/
/*
* 'huerotate()' - Rotate the hue, maintaining luminance.
*/
static void
huerotate(float mat[3][3], /* I - Matrix to append to */
float rot) /* I - Hue rotation in degrees */
{
float hmat[3][3]; /* Hue matrix */
float lx, ly, lz; /* Luminance vector */
float xrs, xrc; /* X rotation sine/cosine */
float yrs, yrc; /* Y rotation sine/cosine */
float zrs, zrc; /* Z rotation sine/cosine */
float zsx, zsy; /* Z shear x/y */
/*
* Load the identity matrix...
*/
ident(hmat);
/*
* Rotate the grey vector into positive Z...
*/
xrs = M_SQRT1_2;
xrc = M_SQRT1_2;
xrotate(hmat,xrs,xrc);
yrs = -1.0 / sqrt(3.0);
yrc = -M_SQRT2 * yrs;
yrotate(hmat,yrs,yrc);
/*
* Shear the space to make the luminance plane horizontal...
*/
xform(hmat, 0.3086, 0.6094, 0.0820, &lx, &ly, &lz);
zsx = lx / lz;
zsy = ly / lz;
zshear(hmat, zsx, zsy);
/*
* Rotate the hue...
*/
zrs = sin(rot * M_PI / 180.0);
zrc = cos(rot * M_PI / 180.0);
zrotate(hmat, zrs, zrc);
/*
* Unshear the space to put the luminance plane back...
*/
zshear(hmat, -zsx, -zsy);
/*
* Rotate the grey vector back into place...
*/
yrotate(hmat, -yrs, yrc);
xrotate(hmat, -xrs, xrc);
/*
* Append it to the current matrix...
*/
mult(hmat, mat, mat);
}
/*
* 'ident()' - Make an identity matrix.
*/
static void
ident(float mat[3][3]) /* I - Matrix to identify */
{
mat[0][0] = 1.0;
mat[0][1] = 0.0;
mat[0][2] = 0.0;
mat[1][0] = 0.0;
mat[1][1] = 1.0;
mat[1][2] = 0.0;
mat[2][0] = 0.0;
mat[2][1] = 0.0;
mat[2][2] = 1.0;
}
/*
* 'mult()' - Multiply two matrices.
*/
static void
mult(float a[3][3], /* I - First matrix */
float b[3][3], /* I - Second matrix */
float c[3][3]) /* I - Destination matrix */
{
int x, y; /* Looping vars */
float temp[3][3]; /* Temporary matrix */
/*
* Multiply a and b, putting the result in temp...
*/
for (y = 0; y < 3; y ++)
for (x = 0; x < 3; x ++)
temp[y][x] = b[y][0] * a[0][x] +
b[y][1] * a[1][x] +
b[y][2] * a[2][x];
/*
* Copy temp to c (that way c can be a pointer to a or b).
*/
memcpy(c, temp, sizeof(temp));
}
/*
* 'saturate()' - Make a saturation matrix.
*/
static void
saturate(float mat[3][3], /* I - Matrix to append to */
float sat) /* I - Desired color saturation */
{
float smat[3][3]; /* Saturation matrix */
smat[0][0] = (1.0 - sat) * 0.3086 + sat;
smat[0][1] = (1.0 - sat) * 0.3086;
smat[0][2] = (1.0 - sat) * 0.3086;
smat[1][0] = (1.0 - sat) * 0.6094;
smat[1][1] = (1.0 - sat) * 0.6094 + sat;
smat[1][2] = (1.0 - sat) * 0.6094;
smat[2][0] = (1.0 - sat) * 0.0820;
smat[2][1] = (1.0 - sat) * 0.0820;
smat[2][2] = (1.0 - sat) * 0.0820 + sat;
mult(smat, mat, mat);
}
/*
* 'xform()' - Transform a 3D point using a matrix...
*/
static void
xform(float mat[3][3], /* I - Matrix */
float x, /* I - Input X coordinate */
float y, /* I - Input Y coordinate */
float z, /* I - Input Z coordinate */
float *tx, /* O - Output X coordinate */
float *ty, /* O - Output Y coordinate */
float *tz) /* O - Output Z coordinate */
{
*tx = x * mat[0][0] + y * mat[1][0] + z * mat[2][0];
*ty = x * mat[0][1] + y * mat[1][1] + z * mat[2][1];
*tz = x * mat[0][2] + y * mat[1][2] + z * mat[2][2];
}
/*
* 'xrotate()' - Rotate about the x (red) axis...
*/
static void
xrotate(float mat[3][3], /* I - Matrix */
float rs, /* I - Rotation angle sine */
float rc) /* I - Rotation angle cosine */
{
float rmat[3][3]; /* I - Rotation matrix */
rmat[0][0] = 1.0;
rmat[0][1] = 0.0;
rmat[0][2] = 0.0;
rmat[1][0] = 0.0;
rmat[1][1] = rc;
rmat[1][2] = rs;
rmat[2][0] = 0.0;
rmat[2][1] = -rs;
rmat[2][2] = rc;
mult(rmat, mat, mat);
}
/*
* 'yrotate()' - Rotate about the y (green) axis...
*/
static void
yrotate(float mat[3][3], /* I - Matrix */
float rs, /* I - Rotation angle sine */
float rc) /* I - Rotation angle cosine */
{
float rmat[3][3]; /* I - Rotation matrix */
rmat[0][0] = rc;
rmat[0][1] = 0.0;
rmat[0][2] = -rs;
rmat[1][0] = 0.0;
rmat[1][1] = 1.0;
rmat[1][2] = 0.0;
rmat[2][0] = rs;
rmat[2][1] = 0.0;
rmat[2][2] = rc;
mult(rmat,mat,mat);
}
/*
* 'zrotate()' - Rotate about the z (blue) axis...
*/
static void
zrotate(float mat[3][3], /* I - Matrix */
float rs, /* I - Rotation angle sine */
float rc) /* I - Rotation angle cosine */
{
float rmat[3][3]; /* I - Rotation matrix */
rmat[0][0] = rc;
rmat[0][1] = rs;
rmat[0][2] = 0.0;
rmat[1][0] = -rs;
rmat[1][1] = rc;
rmat[1][2] = 0.0;
rmat[2][0] = 0.0;
rmat[2][1] = 0.0;
rmat[2][2] = 1.0;
mult(rmat,mat,mat);
}
/*
* 'zshear()' - Shear z using x and y...
*/
static void
zshear(float mat[3][3], /* I - Matrix */
float dx, /* I - X shear */
float dy) /* I - Y shear */
{
float smat[3][3]; /* Shear matrix */
smat[0][0] = 1.0;
smat[0][1] = 0.0;
smat[0][2] = dx;
smat[1][0] = 0.0;
smat[1][1] = 1.0;
smat[1][2] = dy;
smat[2][0] = 0.0;
smat[2][1] = 0.0;
smat[2][2] = 1.0;
mult(smat, mat, mat);
}
/*
* End of "$Id$".
*/
-644
Ver Arquivo
@@ -1,644 +0,0 @@
/*
* "$Id$"
*
* GIF image routines for the Common UNIX Printing System (CUPS).
*
* Copyright 1993-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:
*
* ImageReadGIF() - Read a GIF image file.
* gif_read_cmap() - Read the colormap from a GIF file...
* gif_get_block() - Read a GIF data block...
* gif_get_code() - Get a LZW code from the file...
* gif_read_lzw() - Read a byte from the LZW stream...
* gif_read_image() - Read a GIF image stream...
*/
/*
* Include necessary headers...
*/
#include "image.h"
/*
* GIF definitions...
*/
#define GIF_INTERLACE 0x40
#define GIF_COLORMAP 0x80
typedef ib_t gif_cmap_t[256][4];
/*
* Local globals...
*/
static int gif_eof = 0; /* Did we hit EOF? */
/*
* Local functions...
*/
static int gif_read_cmap(FILE *fp, int ncolors, gif_cmap_t cmap,
int *gray);
static int gif_get_block(FILE *fp, unsigned char *buffer);
static int gif_get_code (FILE *fp, int code_size, int first_time);
static int gif_read_lzw(FILE *fp, int first_time, int input_code_size);
static int gif_read_image(FILE *fp, image_t *img, gif_cmap_t cmap,
int interlace);
/*
* 'ImageReadGIF()' - Read a GIF image file.
*/
int /* O - Read status */
ImageReadGIF(image_t *img, /* IO - Image */
FILE *fp, /* I - Image file */
int primary, /* I - Primary choice for colorspace */
int secondary, /* I - Secondary choice for colorspace */
int saturation,/* I - Color saturation (%) */
int hue, /* I - Color hue (degrees) */
ib_t *lut) /* I - Lookup table for gamma/brightness */
{
unsigned char buf[1024]; /* Input buffer */
gif_cmap_t cmap; /* Colormap */
int i, /* Looping var */
bpp, /* Bytes per pixel */
gray, /* Grayscale image? */
ncolors, /* Bits per pixel */
transparent; /* Transparent color index */
/*
* Read the header; we already know it is a GIF file...
*/
fread(buf, 13, 1, fp);
img->xsize = (buf[7] << 8) | buf[6];
img->ysize = (buf[9] << 8) | buf[8];
ncolors = 2 << (buf[10] & 0x07);
gray = primary == IMAGE_BLACK || primary == IMAGE_WHITE;
if (buf[10] & GIF_COLORMAP)
if (gif_read_cmap(fp, ncolors, cmap, &gray))
{
fclose(fp);
return (-1);
}
transparent = -1;
for (;;)
{
switch (getc(fp))
{
case ';' : /* End of image */
fclose(fp);
return (-1); /* Early end of file */
case '!' : /* Extension record */
buf[0] = getc(fp);
if (buf[0] == 0xf9) /* Graphic Control Extension */
{
gif_get_block(fp, buf);
if (buf[0] & 1) /* Get transparent color index */
transparent = buf[3];
}
while (gif_get_block(fp, buf) != 0);
break;
case ',' : /* Image data */
fread(buf, 9, 1, fp);
if (buf[8] & GIF_COLORMAP)
{
ncolors = 2 << (buf[8] & 0x07);
gray = primary == IMAGE_BLACK || primary == IMAGE_WHITE;
if (gif_read_cmap(fp, ncolors, cmap, &gray))
{
fclose(fp);
return (-1);
}
}
if (transparent >= 0)
{
/*
* Make transparent color white...
*/
cmap[transparent][0] = 255;
cmap[transparent][1] = 255;
cmap[transparent][2] = 255;
}
if (gray)
{
switch (secondary)
{
case IMAGE_CMYK :
for (i = ncolors - 1; i >= 0; i --)
ImageWhiteToCMYK(cmap[i], cmap[i], 1);
break;
case IMAGE_CMY :
for (i = ncolors - 1; i >= 0; i --)
ImageWhiteToCMY(cmap[i], cmap[i], 1);
break;
case IMAGE_BLACK :
for (i = ncolors - 1; i >= 0; i --)
ImageWhiteToBlack(cmap[i], cmap[i], 1);
break;
case IMAGE_WHITE :
break;
case IMAGE_RGB :
for (i = ncolors - 1; i >= 0; i --)
ImageWhiteToRGB(cmap[i], cmap[i], 1);
break;
}
img->colorspace = secondary;
}
else
{
if (hue != 0 || saturation != 100)
for (i = ncolors - 1; i >= 0; i --)
ImageRGBAdjust(cmap[i], 1, saturation, hue);
switch (primary)
{
case IMAGE_CMYK :
for (i = ncolors - 1; i >= 0; i --)
ImageRGBToCMYK(cmap[i], cmap[i], 1);
break;
case IMAGE_CMY :
for (i = ncolors - 1; i >= 0; i --)
ImageRGBToCMY(cmap[i], cmap[i], 1);
break;
case IMAGE_BLACK :
for (i = ncolors - 1; i >= 0; i --)
ImageRGBToBlack(cmap[i], cmap[i], 1);
break;
case IMAGE_WHITE :
for (i = ncolors - 1; i >= 0; i --)
ImageRGBToWhite(cmap[i], cmap[i], 1);
break;
case IMAGE_RGB :
break;
}
img->colorspace = primary;
}
if (lut)
{
bpp = ImageGetDepth(img);
for (i = ncolors - 1; i >= 0; i --)
ImageLut(cmap[i], bpp, lut);
}
img->xsize = (buf[5] << 8) | buf[4];
img->ysize = (buf[7] << 8) | buf[6];
i = gif_read_image(fp, img, cmap, buf[8] & GIF_INTERLACE);
fclose(fp);
return (i);
}
}
}
/*
* 'gif_read_cmap()' - Read the colormap from a GIF file...
*/
static int
gif_read_cmap(FILE *fp,
int ncolors,
gif_cmap_t cmap,
int *gray)
{
int i;
/*
* Read the colormap...
*/
for (i = 0; i < ncolors; i ++)
if (fread(cmap[i], 3, 1, fp) < 1)
return (-1);
/*
* Check to see if the colormap is a grayscale ramp...
*/
for (i = 0; i < ncolors; i ++)
if (cmap[i][0] != cmap[i][1] || cmap[i][1] != cmap[i][2])
break;
if (i == ncolors)
{
*gray = 1;
return (0);
}
/*
* If this needs to be a grayscale image, convert the RGB values to
* luminance values...
*/
if (*gray)
for (i = 0; i < ncolors; i ++)
cmap[i][0] = (cmap[i][0] * 31 + cmap[i][1] * 61 + cmap[i][2] * 8) / 100;
return (0);
}
/*
* 'gif_get_block()' - Read a GIF data block...
*/
static int /* O - Number characters read */
gif_get_block(FILE *fp, /* I - File to read from */
unsigned char *buf) /* I - Input buffer */
{
int count; /* Number of character to read */
/*
* Read the count byte followed by the data from the file...
*/
if ((count = getc(fp)) == EOF)
{
gif_eof = 1;
return (-1);
}
else if (count == 0)
gif_eof = 1;
else if (fread(buf, 1, count, fp) < count)
{
gif_eof = 1;
return (-1);
}
else
gif_eof = 0;
return (count);
}
/*
* 'gif_get_code()' - Get a LZW code from the file...
*/
static int /* O - LZW code */
gif_get_code(FILE *fp, /* I - File to read from */
int code_size, /* I - Size of code in bits */
int first_time) /* I - 1 = first time, 0 = not first time */
{
unsigned i, j, /* Looping vars */
ret; /* Return value */
int count; /* Number of bytes read */
static unsigned char buf[280]; /* Input buffer */
static unsigned curbit, /* Current bit */
lastbit, /* Last bit in buffer */
done, /* Done with this buffer? */
last_byte; /* Last byte in buffer */
static unsigned char bits[8] = /* Bit masks for codes */
{
0x01, 0x02, 0x04, 0x08,
0x10, 0x20, 0x40, 0x80
};
if (first_time)
{
/*
* Just initialize the input buffer...
*/
curbit = 0;
lastbit = 0;
done = 0;
return (0);
}
if ((curbit + code_size) >= lastbit)
{
/*
* Don't have enough bits to hold the code...
*/
if (done)
return (-1); /* Sorry, no more... */
/*
* Move last two bytes to front of buffer...
*/
buf[0] = buf[last_byte - 2];
buf[1] = buf[last_byte - 1];
/*
* Read in another buffer...
*/
if ((count = gif_get_block (fp, buf + 2)) <= 0)
{
/*
* Whoops, no more data!
*/
done = 1;
return (-1);
}
/*
* Update buffer state...
*/
last_byte = 2 + count;
curbit = (curbit - lastbit) + 16;
lastbit = last_byte * 8;
}
ret = 0;
for (ret = 0, i = curbit + code_size - 1, j = code_size;
j > 0;
i --, j --)
ret = (ret << 1) | ((buf[i / 8] & bits[i & 7]) != 0);
curbit += code_size;
return ret;
}
/*
* 'gif_read_lzw()' - Read a byte from the LZW stream...
*/
static int /* I - Byte from stream */
gif_read_lzw(FILE *fp, /* I - File to read from */
int first_time, /* I - 1 = first time, 0 = not first time */
int input_code_size) /* I - Code size in bits */
{
int i, /* Looping var */
code, /* Current code */
incode; /* Input code */
static short fresh = 0, /* 1 = empty buffers */
code_size, /* Current code size */
set_code_size, /* Initial code size set */
max_code, /* Maximum code used */
max_code_size, /* Maximum code size */
firstcode, /* First code read */
oldcode, /* Last code read */
clear_code, /* Clear code for LZW input */
end_code, /* End code for LZW input */
table[2][4096], /* String table */
stack[8192], /* Output stack */
*sp; /* Current stack pointer */
if (first_time)
{
/*
* Setup LZW state...
*/
set_code_size = input_code_size;
code_size = set_code_size + 1;
clear_code = 1 << set_code_size;
end_code = clear_code + 1;
max_code_size = 2 * clear_code;
max_code = clear_code + 2;
/*
* Initialize input buffers...
*/
gif_get_code(fp, 0, 1);
/*
* Wipe the decompressor table...
*/
fresh = 1;
for (i = 0; i < clear_code; i ++)
{
table[0][i] = 0;
table[1][i] = i;
}
for (; i < 4096; i ++)
table[0][i] = table[1][0] = 0;
sp = stack;
return (0);
}
else if (fresh)
{
fresh = 0;
do
firstcode = oldcode = gif_get_code(fp, code_size, 0);
while (firstcode == clear_code);
return (firstcode);
}
if (sp > stack)
return (*--sp);
while ((code = gif_get_code (fp, code_size, 0)) >= 0)
{
if (code == clear_code)
{
for (i = 0; i < clear_code; i ++)
{
table[0][i] = 0;
table[1][i] = i;
}
for (; i < 4096; i ++)
table[0][i] = table[1][i] = 0;
code_size = set_code_size + 1;
max_code_size = 2 * clear_code;
max_code = clear_code + 2;
sp = stack;
firstcode = oldcode = gif_get_code(fp, code_size, 0);
return (firstcode);
}
else if (code == end_code)
{
unsigned char buf[260];
if (!gif_eof)
while (gif_get_block(fp, buf) > 0);
return (-2);
}
incode = code;
if (code >= max_code)
{
*sp++ = firstcode;
code = oldcode;
}
while (code >= clear_code)
{
*sp++ = table[1][code];
if (code == table[0][code])
return (255);
code = table[0][code];
}
*sp++ = firstcode = table[1][code];
code = max_code;
if (code < 4096)
{
table[0][code] = oldcode;
table[1][code] = firstcode;
max_code ++;
if (max_code >= max_code_size && max_code_size < 4096)
{
max_code_size *= 2;
code_size ++;
}
}
oldcode = incode;
if (sp > stack)
return (*--sp);
}
return (code);
}
/*
* 'gif_read_image()' - Read a GIF image stream...
*/
static int /* I - 0 = success, -1 = failure */
gif_read_image(FILE *fp, /* I - Input file */
image_t *img, /* I - Image pointer */
gif_cmap_t cmap, /* I - Colormap */
int interlace) /* I - Non-zero = interlaced image */
{
unsigned char code_size; /* Code size */
ib_t *pixels, /* Pixel buffer */
*temp; /* Current pixel */
int xpos, /* Current X position */
ypos, /* Current Y position */
pass; /* Current pass */
int pixel; /* Current pixel */
int bpp; /* Bytes per pixel */
static int xpasses[4] = { 8, 8, 4, 2 },
ypasses[5] = { 0, 4, 2, 1, 999999 };
bpp = ImageGetDepth(img);
pixels = calloc(bpp, img->xsize);
xpos = 0;
ypos = 0;
pass = 0;
code_size = getc(fp);
if (gif_read_lzw(fp, 1, code_size) < 0)
return (-1);
temp = pixels;
while ((pixel = gif_read_lzw(fp, 0, code_size)) >= 0)
{
switch (bpp)
{
case 4 :
temp[3] = cmap[pixel][3];
case 3 :
temp[2] = cmap[pixel][2];
case 2 :
temp[1] = cmap[pixel][1];
default :
temp[0] = cmap[pixel][0];
}
xpos ++;
temp += bpp;
if (xpos == img->xsize)
{
ImagePutRow(img, 0, ypos, img->xsize, pixels);
xpos = 0;
temp = pixels;
if (interlace)
{
ypos += xpasses[pass];
if (ypos >= img->ysize)
{
pass ++;
ypos = ypasses[pass];
}
}
else
ypos ++;
}
if (ypos >= img->ysize)
break;
}
free(pixels);
return (0);
}
/*
* End of "$Id$".
*/
-190
Ver Arquivo
@@ -1,190 +0,0 @@
/*
* "$Id$"
*
* JPEG image routines for the Common UNIX Printing System (CUPS).
*
* Copyright 1993-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:
*
* ImageReadJPEG() - Read a JPEG image file.
*/
/*
* Include necessary headers...
*/
#include "image.h"
#ifdef HAVE_LIBJPEG
# include <jpeglib.h> /* JPEG/JFIF image definitions */
/*
* 'ImageReadJPEG()' - Read a JPEG image file.
*/
int /* O - Read status */
ImageReadJPEG(image_t *img, /* IO - Image */
FILE *fp, /* I - Image file */
int primary, /* I - Primary choice for colorspace */
int secondary, /* I - Secondary choice for colorspace */
int saturation, /* I - Color saturation (%) */
int hue, /* I - Color hue (degrees) */
ib_t *lut) /* I - Lookup table for gamma/brightness */
{
struct jpeg_decompress_struct cinfo; /* Decompressor info */
struct jpeg_error_mgr jerr; /* Error handler info */
ib_t *in, /* Input pixels */
*out; /* Output pixels */
(void)secondary;
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_decompress(&cinfo);
jpeg_stdio_src(&cinfo, fp);
jpeg_read_header(&cinfo, 1);
cinfo.quantize_colors = 0;
if (cinfo.num_components == 1)
{
cinfo.out_color_space = JCS_GRAYSCALE;
cinfo.out_color_components = 1;
cinfo.output_components = 1;
}
else
{
cinfo.out_color_space = JCS_RGB;
cinfo.out_color_components = 3;
cinfo.output_components = 3;
}
jpeg_calc_output_dimensions(&cinfo);
img->xsize = cinfo.output_width;
img->ysize = cinfo.output_height;
img->colorspace = primary;
if (cinfo.X_density > 0 && cinfo.Y_density > 0 && cinfo.density_unit > 0)
{
if (cinfo.density_unit == 1)
{
img->xppi = cinfo.X_density;
img->yppi = cinfo.Y_density;
}
else
{
img->xppi = (int)((float)cinfo.X_density * 2.54);
img->yppi = (int)((float)cinfo.Y_density * 2.54);
}
}
ImageSetMaxTiles(img, 0);
in = malloc(img->xsize * cinfo.output_components);
if (primary < 0)
out = malloc(-img->xsize * primary);
else
out = malloc(img->xsize * primary);
jpeg_start_decompress(&cinfo);
while (cinfo.output_scanline < cinfo.output_height)
{
jpeg_read_scanlines(&cinfo, (JSAMPROW *)&in, (JDIMENSION)1);
if ((saturation != 100 || hue != 0) && cinfo.output_components > 1)
ImageRGBAdjust(in, img->xsize, saturation, hue);
if ((primary == IMAGE_WHITE && cinfo.out_color_space == JCS_GRAYSCALE) ||
(primary == IMAGE_RGB && cinfo.out_color_space == JCS_RGB))
{
if (lut)
ImageLut(in, img->xsize * ImageGetDepth(img), lut);
ImagePutRow(img, 0, cinfo.output_scanline - 1, img->xsize, in);
}
else if (cinfo.out_color_space == JCS_GRAYSCALE)
{
switch (primary)
{
case IMAGE_BLACK :
ImageWhiteToBlack(in, out, img->xsize);
break;
case IMAGE_RGB :
ImageWhiteToRGB(in, out, img->xsize);
break;
case IMAGE_CMY :
ImageWhiteToCMY(in, out, img->xsize);
break;
case IMAGE_CMYK :
ImageWhiteToCMYK(in, out, img->xsize);
break;
}
if (lut)
ImageLut(out, img->xsize * ImageGetDepth(img), lut);
ImagePutRow(img, 0, cinfo.output_scanline - 1, img->xsize, out);
}
else
{
switch (primary)
{
case IMAGE_WHITE :
ImageRGBToWhite(in, out, img->xsize);
break;
case IMAGE_BLACK :
ImageRGBToBlack(in, out, img->xsize);
break;
case IMAGE_CMY :
ImageRGBToCMY(in, out, img->xsize);
break;
case IMAGE_CMYK :
ImageRGBToCMYK(in, out, img->xsize);
break;
}
if (lut)
ImageLut(out, img->xsize * ImageGetDepth(img), lut);
ImagePutRow(img, 0, cinfo.output_scanline - 1, img->xsize, out);
}
}
free(in);
free(out);
jpeg_finish_decompress(&cinfo);
jpeg_destroy_decompress(&cinfo);
fclose(fp);
return (0);
}
#endif /* HAVE_LIBJPEG */
/*
* End of "$Id$".
*/
-319
Ver Arquivo
@@ -1,319 +0,0 @@
/*
* "$Id$"
*
* PhotoCD routines for the Common UNIX Printing System (CUPS).
*
* Copyright 1993-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:
*
* ImageReadPhotoCD() - Read a PhotoCD image file.
*/
/*
* Include necessary headers...
*/
#include "image.h"
/*
* PhotoCD support is currently limited to the 768x512 base image, which
* is only YCC encoded. Support for the higher resolution images will
* require a lot of extra code...
*/
/*
* 'ImageReadPhotoCD()' - Read a PhotoCD image file.
*/
int /* O - Read status */
ImageReadPhotoCD(image_t *img, /* IO - Image */
FILE *fp, /* I - Image file */
int primary, /* I - Primary choice for colorspace */
int secondary, /* I - Secondary choice for colorspace */
int saturation, /* I - Color saturation (%) */
int hue, /* I - Color hue (degrees) */
ib_t *lut) /* I - Lookup table for gamma/brightness */
{
int x, y; /* Looping vars */
int xdir, /* X direction */
xstart; /* X starting point */
int bpp; /* Bytes per pixel */
int pass; /* Pass number */
int rotation; /* 0 for 768x512, 1 for 512x768 */
int temp, /* Adjusted luminance */
temp2, /* Red, green, and blue values */
cb, cr; /* Adjusted chroma values */
ib_t *in, /* Input (YCC) pixels */
*iy, /* Luminance */
*icb, /* Blue chroma */
*icr, /* Red chroma */
*rgb, /* RGB */
*rgbptr, /* Pointer into RGB data */
*out; /* Output pixels */
(void)secondary;
/*
* Get the image orientation...
*/
fseek(fp, 72, SEEK_SET);
rotation = (getc(fp) & 63) != 8;
/*
* Seek to the start of the base image...
*/
fseek(fp, 0x30000, SEEK_SET);
/*
* Allocate and initialize...
*/
img->colorspace = primary;
img->xppi = 128;
img->yppi = 128;
if (rotation)
{
img->xsize = 512;
img->ysize = 768;
}
else
{
img->xsize = 768;
img->ysize = 512;
}
ImageSetMaxTiles(img, 0);
bpp = ImageGetDepth(img);
in = malloc(768 * 3);
out = malloc(768 * bpp);
if (bpp > 1)
rgb = malloc(768 * 3);
if (rotation)
{
xstart = 767 * bpp;
xdir = -2 * bpp;
}
else
{
xstart = 0;
xdir = 0;
}
/*
* Read the image file...
*/
for (y = 0; y < 512; y += 2)
{
/*
* Grab the next two scanlines:
*
* YYYYYYYYYYYYYYY...
* YYYYYYYYYYYYYYY...
* CbCbCb...CrCrCr...
*/
if (fread(in, 1, 768 * 3, fp) < (768 * 3))
{
/*
* Couldn't read a row of data - return an error!
*/
free(in);
free(out);
return (-1);
}
/*
* Process the two scanlines...
*/
for (pass = 0, iy = in; pass < 2; pass ++)
{
if (bpp == 1)
{
/*
* Just extract the luminance channel from the line and put it
* in the image...
*/
if (primary == IMAGE_BLACK)
{
if (rotation)
{
for (rgbptr = out + xstart, x = 0; x < 768; x ++)
*rgbptr-- = 255 - *iy++;
if (lut)
ImageLut(out, 768, lut);
ImagePutCol(img, 511 - y - pass, 0, 768, out);
}
else
{
ImageWhiteToBlack(iy, out, 768);
if (lut)
ImageLut(out, 768, lut);
ImagePutRow(img, 0, y + pass, 768, out);
iy += 768;
}
}
else if (rotation)
{
for (rgbptr = out + xstart, x = 0; x < 768; x ++)
*rgbptr-- = 255 - *iy++;
if (lut)
ImageLut(out, 768, lut);
ImagePutCol(img, 511 - y - pass, 0, 768, out);
}
else
{
if (lut)
ImageLut(iy, 768, lut);
ImagePutRow(img, 0, y + pass, 768, iy);
iy += 768;
}
}
else
{
/*
* Convert YCbCr to RGB... While every pixel gets a luminance
* value, adjacent pixels share chroma information.
*/
for (x = 0, rgbptr = rgb + xstart, icb = in + 1536, icr = in + 1920;
x < 768;
x ++, iy ++, rgbptr += xdir)
{
if (!(x & 1))
{
cb = (float)(*icb - 156);
cr = (float)(*icr - 137);
}
temp = 92241 * (*iy);
temp2 = (temp + 86706 * cr) / 65536;
if (temp2 < 0)
*rgbptr++ = 0;
else if (temp2 > 255)
*rgbptr++ = 255;
else
*rgbptr++ = temp2;
temp2 = (temp - 25914 * cb - 44166 * cr) / 65536;
if (temp2 < 0)
*rgbptr++ = 0;
else if (temp2 > 255)
*rgbptr++ = 255;
else
*rgbptr++ = temp2;
temp2 = (temp + 133434 * cb) / 65536;
if (temp2 < 0)
*rgbptr++ = 0;
else if (temp2 > 255)
*rgbptr++ = 255;
else
*rgbptr++ = temp2;
if (x & 1)
{
icb ++;
icr ++;
}
}
/*
* Adjust the hue and saturation if needed...
*/
if (saturation != 100 || hue != 0)
ImageRGBAdjust(rgb, 768, saturation, hue);
/*
* Then convert the RGB data to the appropriate colorspace and
* put it in the image...
*/
if (img->colorspace == IMAGE_RGB)
{
if (lut)
ImageLut(rgb, 768 * 3, lut);
if (rotation)
ImagePutCol(img, 511 - y - pass, 0, 768, rgb);
else
ImagePutRow(img, 0, y + pass, 768, rgb);
}
else
{
switch (img->colorspace)
{
case IMAGE_CMY :
ImageRGBToCMY(rgb, out, 768);
break;
case IMAGE_CMYK :
ImageRGBToCMYK(rgb, out, 768);
break;
}
if (lut)
ImageLut(out, 768 * bpp, lut);
if (rotation)
ImagePutCol(img, 511 - y - pass, 0, 768, out);
else
ImagePutRow(img, 0, y + pass, 768, out);
}
}
}
}
/*
* Free memory and return...
*/
free(in);
free(out);
if (bpp > 1)
free(rgb);
return (0);
}
/*
* End of "$Id$".
*/
-205
Ver Arquivo
@@ -1,205 +0,0 @@
/*
* "$Id$"
*
* PNG image routines for the Common UNIX Printing System (CUPS).
*
* Copyright 1993-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:
*
* ImageReadPNG() - Read a PNG image file.
*/
/*
* Include necessary headers...
*/
#include "image.h"
#if defined(HAVE_LIBPNG) && defined(HAVE_LIBZ)
#include <png.h> /* Portable Network Graphics (PNG) definitions */
/*
* 'ImageReadPNG()' - Read a PNG image file.
*/
int /* O - Read status */
ImageReadPNG(image_t *img, /* IO - Image */
FILE *fp, /* I - Image file */
int primary, /* I - Primary choice for colorspace */
int secondary, /* I - Secondary choice for colorspace */
int saturation,/* I - Color saturation (%) */
int hue, /* I - Color hue (degrees) */
ib_t *lut) /* I - Lookup table for gamma/brightness */
{
int y; /* Looping var */
png_structp pp; /* PNG read pointer */
png_infop info; /* PNG info pointers */
int bpp; /* Bytes per pixel */
ib_t *in, /* Input pixels */
*out; /* Output pixels */
/*
* Setup the PNG data structures...
*/
pp = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
info = png_create_info_struct(pp);
/*
* Initialize the PNG read "engine"...
*/
png_init_io(pp, fp);
/*
* Get the image dimensions and load the output image...
*/
png_read_info(pp, info);
if (info->color_type == PNG_COLOR_TYPE_PALETTE)
png_set_expand(pp);
if (info->color_type == PNG_COLOR_TYPE_GRAY ||
info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
img->colorspace = secondary;
else
img->colorspace = primary;
img->xsize = info->width;
img->ysize = info->height;
if (info->valid & PNG_INFO_pHYs &&
info->phys_unit_type == PNG_RESOLUTION_METER)
{
img->xppi = (int)((float)info->x_pixels_per_unit * 0.0254);
img->yppi = (int)((float)info->y_pixels_per_unit * 0.0254);
}
ImageSetMaxTiles(img, 0);
if (info->bit_depth < 8)
{
png_set_packing(pp);
if (info->valid & PNG_INFO_sBIT)
png_set_shift(pp, &(info->sig_bit));
}
else if (info->bit_depth == 16)
png_set_strip_16(pp);
if (info->color_type == PNG_COLOR_TYPE_GRAY ||
info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
in = malloc(img->xsize);
else
in = malloc(img->xsize * 3);
bpp = ImageGetDepth(img);
out = malloc(img->xsize * bpp);
/*
* This doesn't work for interlaced PNG files... :(
*/
for (y = 0; y < img->ysize; y ++)
{
if (info->color_type == PNG_COLOR_TYPE_GRAY ||
info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
{
if (img->colorspace == IMAGE_WHITE)
png_read_row(pp, (png_bytep)out, NULL);
else
{
png_read_row(pp, (png_bytep)in, NULL);
switch (img->colorspace)
{
case IMAGE_RGB :
ImageWhiteToRGB(in, out, img->xsize);
break;
case IMAGE_BLACK :
ImageWhiteToBlack(in, out, img->xsize);
break;
case IMAGE_CMY :
ImageWhiteToCMY(in, out, img->xsize);
break;
case IMAGE_CMYK :
ImageWhiteToCMYK(in, out, img->xsize);
break;
}
}
}
else
{
if (img->colorspace == IMAGE_RGB)
{
png_read_row(pp, (png_bytep)out, NULL);
if (saturation != 100 || hue != 0)
ImageRGBAdjust(out, img->xsize, saturation, hue);
}
else
{
png_read_row(pp, (png_bytep)in, NULL);
if ((saturation != 100 || hue != 0) && bpp > 1)
ImageRGBAdjust(in, img->xsize, saturation, hue);
switch (img->colorspace)
{
case IMAGE_WHITE :
ImageRGBToWhite(in, out, img->xsize);
break;
case IMAGE_BLACK :
ImageRGBToBlack(in, out, img->xsize);
break;
case IMAGE_CMY :
ImageRGBToCMY(in, out, img->xsize);
break;
case IMAGE_CMYK :
ImageRGBToCMYK(in, out, img->xsize);
break;
}
}
}
if (lut)
ImageLut(out, img->xsize * bpp, lut);
ImagePutRow(img, 0, y, img->xsize, out);
}
png_read_end(pp, info);
png_read_destroy(pp, info, NULL);
fclose(fp);
return (0);
}
#endif /* HAVE_LIBPNG && HAVE_LIBZ */
/*
* End of "$Id$".
*/
-288
Ver Arquivo
@@ -1,288 +0,0 @@
/*
* "$Id$"
*
* Portable Any Map file routines for the Common UNIX Printing System (CUPS).
*
* Copyright 1993-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:
*
* ImageReadPNM() - Read a PNM image file.
*/
/*
* Include necessary headers...
*/
#include "image.h"
#include <ctype.h>
/*
* 'ImageReadPNM()' - Read a PNM image file.
*/
int /* O - Read status */
ImageReadPNM(image_t *img, /* IO - Image */
FILE *fp, /* I - Image file */
int primary, /* I - Primary choice for colorspace */
int secondary, /* I - Secondary choice for colorspace */
int saturation,/* I - Color saturation (%) */
int hue, /* I - Color hue (degrees) */
ib_t *lut) /* I - Lookup table for gamma/brightness */
{
int x, y; /* Looping vars */
int bpp; /* Bytes per pixel */
ib_t *in, /* Input pixels */
*inptr, /* Current input pixel */
*out, /* Output pixels */
*outptr, /* Current output pixel */
bit; /* Bit in input line */
char line[255], /* Input line */
*lineptr; /* Pointer in line */
int format, /* Format of PNM file */
val, /* Pixel value */
maxval; /* Maximum pixel value */
/*
* Read the file header in the format:
*
* Pformat
* # comment1
* # comment2
* ...
* # commentN
* width
* height
* max sample
*/
lineptr = fgets(line, sizeof(line), fp);
lineptr ++;
format = atoi(lineptr);
while (isdigit(*lineptr))
lineptr ++;
while (lineptr != NULL && img->xsize == 0)
{
if (*lineptr == '\0' || *lineptr == '#')
lineptr = fgets(line, sizeof(line), fp);
else if (isdigit(*lineptr))
{
img->xsize = atoi(lineptr);
while (isdigit(*lineptr))
lineptr ++;
}
else
lineptr ++;
}
while (lineptr != NULL && img->ysize == 0)
{
if (*lineptr == '\0' || *lineptr == '#')
lineptr = fgets(line, sizeof(line), fp);
else if (isdigit(*lineptr))
{
img->ysize = atoi(lineptr);
while (isdigit(*lineptr))
lineptr ++;
}
else
lineptr ++;
}
if (format != 1 && format != 4)
{
maxval = 0;
while (lineptr != NULL && maxval == 0)
{
if (*lineptr == '\0' || *lineptr == '#')
lineptr = fgets(line, sizeof(line), fp);
else if (isdigit(*lineptr))
{
maxval = atoi(lineptr);
while (isdigit(*lineptr))
lineptr ++;
}
else
lineptr ++;
}
}
else
maxval = 1;
if (format == 1 || format == 2 || format == 4 || format == 5)
img->colorspace = secondary;
else
img->colorspace = primary;
ImageSetMaxTiles(img, 0);
bpp = ImageGetDepth(img);
in = malloc(img->xsize * 3);
out = malloc(img->xsize * bpp);
/*
* Read the image file...
*/
for (y = 0; y < img->ysize; y ++)
{
switch (format)
{
case 1 :
case 2 :
for (x = img->xsize, inptr = in; x > 0; x --, inptr ++)
if (fscanf(fp, "%d", &val) == 1)
*inptr = 255 * val / maxval;
break;
case 3 :
for (x = img->xsize, inptr = in; x > 0; x --, inptr += 3)
{
if (fscanf(fp, "%d", &val) == 1)
inptr[0] = 255 * val / maxval;
if (fscanf(fp, "%d", &val) == 1)
inptr[1] = 255 * val / maxval;
if (fscanf(fp, "%d", &val) == 1)
inptr[2] = 255 * val / maxval;
}
break;
case 4 :
fread(out, (img->xsize + 7) / 8, 1, fp);
for (x = img->xsize, inptr = in, outptr = out, bit = 128;
x > 0;
x --, inptr ++)
{
if (*outptr & bit)
*inptr = 255;
else
*inptr = 0;
if (bit > 1)
bit >>= 1;
else
{
bit = 128;
inptr ++;
}
}
break;
case 5 :
fread(in, img->xsize, 1, fp);
break;
case 6 :
fread(in, img->xsize, 3, fp);
break;
}
switch (format)
{
case 1 :
case 2 :
case 4 :
case 5 :
if (img->colorspace == IMAGE_WHITE)
{
if (lut)
ImageLut(in, img->xsize, lut);
ImagePutRow(img, 0, y, img->xsize, in);
}
else
{
switch (img->colorspace)
{
case IMAGE_RGB :
ImageWhiteToRGB(in, out, img->xsize);
break;
case IMAGE_BLACK :
ImageWhiteToBlack(in, out, img->xsize);
break;
case IMAGE_CMY :
ImageWhiteToCMY(in, out, img->xsize);
break;
case IMAGE_CMYK :
ImageWhiteToCMYK(in, out, img->xsize);
break;
}
if (lut)
ImageLut(out, img->xsize * bpp, lut);
ImagePutRow(img, 0, y, img->xsize, out);
}
break;
default :
if ((saturation != 100 || hue != 0) && bpp > 1)
ImageRGBAdjust(in, img->xsize, saturation, hue);
if (img->colorspace == IMAGE_RGB)
{
if (lut)
ImageLut(in, img->xsize * 3, lut);
ImagePutRow(img, 0, y, img->xsize, in);
}
else
{
switch (img->colorspace)
{
case IMAGE_WHITE :
ImageRGBToWhite(in, out, img->xsize);
break;
case IMAGE_BLACK :
ImageRGBToBlack(in, out, img->xsize);
break;
case IMAGE_CMY :
ImageRGBToCMY(in, out, img->xsize);
break;
case IMAGE_CMYK :
ImageRGBToCMYK(in, out, img->xsize);
break;
}
if (lut)
ImageLut(out, img->xsize * bpp, lut);
ImagePutRow(img, 0, y, img->xsize, out);
}
break;
}
}
free(in);
free(out);
fclose(fp);
return (0);
}
/*
* End of "$Id$".
*/
-267
Ver Arquivo
@@ -1,267 +0,0 @@
/*
* "$Id$"
*
* SGI image file routines for the Common UNIX Printing System (CUPS).
*
* Copyright 1993-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:
*
* ImageReadSGI() - Read a SGI image file.
*/
/*
* Include necessary headers...
*/
#include "image.h"
#include "image-sgi.h"
/*
* 'ImageReadSGI()' - Read a SGI image file.
*/
int /* O - Read status */
ImageReadSGI(image_t *img, /* IO - Image */
FILE *fp, /* I - Image file */
int primary, /* I - Primary choice for colorspace */
int secondary, /* I - Secondary choice for colorspace */
int saturation,/* I - Color saturation (%) */
int hue, /* I - Color hue (degrees) */
ib_t *lut) /* I - Lookup table for gamma/brightness */
{
int i, y; /* Looping vars */
int bpp; /* Bytes per pixel */
sgi_t *sgip; /* SGI image file */
ib_t *in, /* Input pixels */
*inptr, /* Current input pixel */
*out; /* Output pixels */
unsigned short *rows[4], /* Row pointers for image data */
*red,
*green,
*blue,
*gray,
*alpha;
/*
* Setup the SGI file...
*/
sgip = sgiOpenFile(fp, SGI_READ, 0, 0, 0, 0, 0);
/*
* Get the image dimensions and load the output image...
*/
if (sgip->zsize < 3)
img->colorspace = secondary;
else
img->colorspace = primary;
img->xsize = sgip->xsize;
img->ysize = sgip->ysize;
ImageSetMaxTiles(img, 0);
bpp = ImageGetDepth(img);
in = malloc(img->xsize * sgip->zsize);
out = malloc(img->xsize * bpp);
rows[0] = calloc(img->xsize * sgip->zsize, sizeof(unsigned short));
for (i = 1; i < sgip->zsize; i ++)
rows[i] = rows[0] + i * img->xsize;
/*
* Read the SGI image file...
*/
for (y = 0; y < img->ysize; y ++)
{
for (i = 0; i < sgip->zsize; i ++)
sgiGetRow(sgip, rows[i], img->ysize - 1 - y, i);
switch (sgip->zsize)
{
case 1 :
if (sgip->bpp == 1)
for (i = img->xsize - 1, gray = rows[0], inptr = in;
i >= 0;
i --)
{
*inptr++ = *gray++;
}
else
for (i = img->xsize - 1, gray = rows[0], inptr = in;
i >= 0;
i --)
{
*inptr++ = (*gray++) / 256 + 128;
}
break;
case 2 :
if (sgip->bpp == 1)
for (i = img->xsize - 1, gray = rows[0], alpha = rows[1], inptr = in;
i >= 0;
i --)
{
*inptr++ = (*gray++) * (*alpha++) / 255;
}
else
for (i = img->xsize - 1, gray = rows[0], alpha = rows[1], inptr = in;
i >= 0;
i --)
{
*inptr++ = ((*gray++) / 256 + 128) * (*alpha++) / 32767;
}
break;
case 3 :
if (sgip->bpp == 1)
for (i = img->xsize - 1, red = rows[0], green = rows[1],
blue = rows[2], inptr = in;
i >= 0;
i --)
{
*inptr++ = *red++;
*inptr++ = *green++;
*inptr++ = *blue++;
}
else
for (i = img->xsize - 1, red = rows[0], green = rows[1],
blue = rows[2], inptr = in;
i >= 0;
i --)
{
*inptr++ = (*red++) / 256 + 128;
*inptr++ = (*green++) / 256 + 128;
*inptr++ = (*blue++) / 256 + 128;
}
break;
case 4 :
if (sgip->bpp == 1)
for (i = img->xsize - 1, red = rows[0], green = rows[1],
blue = rows[2], alpha = rows[3], inptr = in;
i >= 0;
i --)
{
*inptr++ = (*red++) * (*alpha) / 255;
*inptr++ = (*green++) * (*alpha) / 255;
*inptr++ = (*blue++) * (*alpha++) / 255;
}
else
for (i = img->xsize - 1, red = rows[0], green = rows[1],
blue = rows[2], inptr = in;
i >= 0;
i --)
{
*inptr++ = ((*red++) / 256 + 128) * (*alpha) / 32767;
*inptr++ = ((*green++) / 256 + 128) * (*alpha) / 32767;
*inptr++ = ((*blue++) / 256 + 128) * (*alpha++) / 32767;
}
break;
}
if (sgip->zsize < 3)
{
if (img->colorspace == IMAGE_WHITE)
{
if (lut)
ImageLut(in, img->xsize, lut);
ImagePutRow(img, 0, y, img->xsize, in);
}
else
{
switch (img->colorspace)
{
case IMAGE_RGB :
ImageWhiteToRGB(in, out, img->xsize);
break;
case IMAGE_BLACK :
ImageWhiteToBlack(in, out, img->xsize);
break;
case IMAGE_CMY :
ImageWhiteToCMY(in, out, img->xsize);
break;
case IMAGE_CMYK :
ImageWhiteToCMYK(in, out, img->xsize);
break;
}
if (lut)
ImageLut(out, img->xsize * bpp, lut);
ImagePutRow(img, 0, y, img->xsize, out);
}
}
else
{
if (img->colorspace == IMAGE_RGB)
{
if (saturation != 100 || hue != 0)
ImageRGBAdjust(in, img->xsize, saturation, hue);
if (lut)
ImageLut(in, img->xsize * 3, lut);
ImagePutRow(img, 0, y, img->xsize, in);
}
else
{
if ((saturation != 100 || hue != 0) && bpp > 1)
ImageRGBAdjust(in, img->xsize, saturation, hue);
switch (img->colorspace)
{
case IMAGE_WHITE :
ImageRGBToWhite(in, out, img->xsize);
break;
case IMAGE_BLACK :
ImageRGBToBlack(in, out, img->xsize);
break;
case IMAGE_CMY :
ImageRGBToCMY(in, out, img->xsize);
break;
case IMAGE_CMYK :
ImageRGBToCMYK(in, out, img->xsize);
break;
}
if (lut)
ImageLut(out, img->xsize * bpp, lut);
ImagePutRow(img, 0, y, img->xsize, out);
}
}
}
free(in);
free(out);
free(rows[0]);
sgiClose(sgip);
return (0);
}
/*
* End of "$Id$".
*/
-94
Ver Arquivo
@@ -1,94 +0,0 @@
/*
* "$Id$"
*
* SGI image file format library definitions for the Common UNIX Printing
* System (CUPS).
*
* Copyright 1993-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 _SGI_H_
# define _SGI_H_
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# ifdef __cplusplus
extern "C" {
# endif
/*
* Constants...
*/
# define SGI_MAGIC 474 /* Magic number in image file */
# define SGI_READ 0 /* Read from an SGI image file */
# define SGI_WRITE 1 /* Write to an SGI image file */
# define SGI_COMP_NONE 0 /* No compression */
# define SGI_COMP_RLE 1 /* Run-length encoding */
# define SGI_COMP_ARLE 2 /* Agressive run-length encoding */
/*
* Image structure...
*/
typedef struct
{
FILE *file; /* Image file */
int mode, /* File open mode */
bpp, /* Bytes per pixel/channel */
comp; /* Compression */
unsigned short xsize, /* Width in pixels */
ysize, /* Height in pixels */
zsize; /* Number of channels */
long firstrow, /* File offset for first row */
nextrow, /* File offset for next row */
**table, /* Offset table for compression */
**length; /* Length table for compression */
unsigned short *arle_row; /* Advanced RLE compression buffer */
long arle_offset, /* Advanced RLE buffer offset */
arle_length; /* Advanced RLE buffer length */
} sgi_t;
/*
* Prototypes...
*/
extern int sgiClose(sgi_t *sgip);
extern int sgiGetRow(sgi_t *sgip, unsigned short *row, int y, int z);
extern sgi_t *sgiOpen(char *filename, int mode, int comp, int bpp,
int xsize, int ysize, int zsize);
extern sgi_t *sgiOpenFile(FILE *file, int mode, int comp, int bpp,
int xsize, int ysize, int zsize);
extern int sgiPutRow(sgi_t *sgip, unsigned short *row, int y, int z);
# ifdef __cplusplus
}
# endif
#endif /* !_SGI_H_ */
/*
* End of "$Id$".
*/
-857
Ver Arquivo
@@ -1,857 +0,0 @@
/*
* "$Id$"
*
* SGI image file format library routines for the Common UNIX Printing
* System (CUPS).
*
* Copyright 1993-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:
*
* sgiClose() - Close an SGI image file.
* sgiGetRow() - Get a row of image data from a file.
* sgiOpen() - Open an SGI image file for reading or writing.
* sgiOpenFile() - Open an SGI image file for reading or writing.
* sgiPutRow() - Put a row of image data to a file.
* getlong() - Get a 32-bit big-endian integer.
* getshort() - Get a 16-bit big-endian integer.
* putlong() - Put a 32-bit big-endian integer.
* putshort() - Put a 16-bit big-endian integer.
* read_rle8() - Read 8-bit RLE data.
* read_rle16() - Read 16-bit RLE data.
* write_rle8() - Write 8-bit RLE data.
* write_rle16() - Write 16-bit RLE data.
*/
#include "image-sgi.h"
/*
* Local functions...
*/
static int getlong(FILE *);
static int getshort(FILE *);
static int putlong(long, FILE *);
static int putshort(unsigned short, FILE *);
static int read_rle8(FILE *, unsigned short *, int);
static int read_rle16(FILE *, unsigned short *, int);
static int write_rle8(FILE *, unsigned short *, int);
static int write_rle16(FILE *, unsigned short *, int);
/*
* 'sgiClose()' - Close an SGI image file.
*/
int
sgiClose(sgi_t *sgip) /* I - SGI image */
{
int i; /* Return status */
long *offset; /* Looping var for offset table */
if (sgip == NULL)
return (-1);
if (sgip->mode == SGI_WRITE && sgip->comp != SGI_COMP_NONE)
{
/*
* Write the scanline offset table to the file...
*/
fseek(sgip->file, 512, SEEK_SET);
for (i = sgip->ysize * sgip->zsize, offset = sgip->table[0];
i > 0;
i --, offset ++)
if (putlong(offset[0], sgip->file) < 0)
return (-1);
for (i = sgip->ysize * sgip->zsize, offset = sgip->length[0];
i > 0;
i --, offset ++)
if (putlong(offset[0], sgip->file) < 0)
return (-1);
}
if (sgip->table != NULL)
{
free(sgip->table[0]);
free(sgip->table);
}
if (sgip->length != NULL)
{
free(sgip->length[0]);
free(sgip->length);
}
if (sgip->comp == SGI_COMP_ARLE)
free(sgip->arle_row);
i = fclose(sgip->file);
free(sgip);
return (i);
}
/*
* 'sgiGetRow()' - Get a row of image data from a file.
*/
int
sgiGetRow(sgi_t *sgip, /* I - SGI image */
unsigned short *row, /* O - Row to read */
int y, /* I - Line to read */
int z) /* I - Channel to read */
{
int x; /* X coordinate */
long offset; /* File offset */
if (sgip == NULL ||
row == NULL ||
y < 0 || y >= sgip->ysize ||
z < 0 || z >= sgip->zsize)
return (-1);
switch (sgip->comp)
{
case SGI_COMP_NONE :
/*
* Seek to the image row - optimize buffering by only seeking if
* necessary...
*/
offset = 512 + (y + z * sgip->ysize) * sgip->xsize * sgip->bpp;
if (offset != ftell(sgip->file))
fseek(sgip->file, offset, SEEK_SET);
if (sgip->bpp == 1)
{
for (x = sgip->xsize; x > 0; x --, row ++)
*row = getc(sgip->file);
}
else
{
for (x = sgip->xsize; x > 0; x --, row ++)
*row = getshort(sgip->file);
}
break;
case SGI_COMP_RLE :
offset = sgip->table[z][y];
if (offset != ftell(sgip->file))
fseek(sgip->file, offset, SEEK_SET);
if (sgip->bpp == 1)
return (read_rle8(sgip->file, row, sgip->xsize));
else
return (read_rle16(sgip->file, row, sgip->xsize));
}
return (0);
}
/*
* 'sgiOpen()' - Open an SGI image file for reading or writing.
*/
sgi_t *
sgiOpen(char *filename, /* I - File to open */
int mode, /* I - Open mode (SGI_READ or SGI_WRITE) */
int comp, /* I - Type of compression */
int bpp, /* I - Bytes per pixel */
int xsize, /* I - Width of image in pixels */
int ysize, /* I - Height of image in pixels */
int zsize) /* I - Number of channels */
{
sgi_t *sgip; /* New SGI image file */
FILE *file; /* Image file pointer */
if (mode == SGI_READ)
file = fopen(filename, "rb");
else
file = fopen(filename, "wb+");
if (file == NULL)
return (NULL);
if ((sgip = sgiOpenFile(file, mode, comp, bpp, xsize, ysize, zsize)) == NULL)
fclose(file);
return (sgip);
}
/*
* 'sgiOpenFile()' - Open an SGI image file for reading or writing.
*/
sgi_t *
sgiOpenFile(FILE *file, /* I - File to open */
int mode, /* I - Open mode (SGI_READ or SGI_WRITE) */
int comp, /* I - Type of compression */
int bpp, /* I - Bytes per pixel */
int xsize, /* I - Width of image in pixels */
int ysize, /* I - Height of image in pixels */
int zsize) /* I - Number of channels */
{
int i, j; /* Looping var */
char name[80]; /* Name of file in image header */
short magic; /* Magic number */
sgi_t *sgip; /* New image pointer */
if ((sgip = calloc(sizeof(sgi_t), 1)) == NULL)
return (NULL);
sgip->file = file;
switch (mode)
{
case SGI_READ :
sgip->mode = SGI_READ;
magic = getshort(sgip->file);
if (magic != SGI_MAGIC)
{
free(sgip);
return (NULL);
}
sgip->comp = getc(sgip->file);
sgip->bpp = getc(sgip->file);
getshort(sgip->file); /* Dimensions */
sgip->xsize = getshort(sgip->file);
sgip->ysize = getshort(sgip->file);
sgip->zsize = getshort(sgip->file);
getlong(sgip->file); /* Minimum pixel */
getlong(sgip->file); /* Maximum pixel */
if (sgip->comp)
{
/*
* This file is compressed; read the scanline tables...
*/
fseek(sgip->file, 512, SEEK_SET);
sgip->table = calloc(sgip->zsize, sizeof(long *));
sgip->table[0] = calloc(sgip->ysize * sgip->zsize, sizeof(long));
for (i = 1; i < sgip->zsize; i ++)
sgip->table[i] = sgip->table[0] + i * sgip->ysize;
for (i = 0; i < sgip->zsize; i ++)
for (j = 0; j < sgip->ysize; j ++)
sgip->table[i][j] = getlong(sgip->file);
}
break;
case SGI_WRITE :
if (xsize < 1 ||
ysize < 1 ||
zsize < 1 ||
bpp < 1 || bpp > 2 ||
comp < SGI_COMP_NONE || comp > SGI_COMP_ARLE)
{
free(sgip);
return (NULL);
}
sgip->mode = SGI_WRITE;
putshort(SGI_MAGIC, sgip->file);
putc((sgip->comp = comp) != 0, sgip->file);
putc(sgip->bpp = bpp, sgip->file);
putshort(3, sgip->file); /* Dimensions */
putshort(sgip->xsize = xsize, sgip->file);
putshort(sgip->ysize = ysize, sgip->file);
putshort(sgip->zsize = zsize, sgip->file);
if (bpp == 1)
{
putlong(0, sgip->file); /* Minimum pixel */
putlong(255, sgip->file); /* Maximum pixel */
}
else
{
putlong(-32768, sgip->file); /* Minimum pixel */
putlong(32767, sgip->file); /* Maximum pixel */
}
putlong(0, sgip->file); /* Reserved */
memset(name, 0, sizeof(name));
fwrite(name, sizeof(name), 1, sgip->file);
for (i = 0; i < 102; i ++)
putlong(0, sgip->file);
switch (comp)
{
case SGI_COMP_NONE : /* No compression */
/*
* This file is uncompressed. To avoid problems with sparse files,
* we need to write blank pixels for the entire image...
*/
if (bpp == 1)
{
for (i = xsize * ysize * zsize; i > 0; i --)
putc(0, sgip->file);
}
else
{
for (i = xsize * ysize * zsize; i > 0; i --)
putshort(0, sgip->file);
}
break;
case SGI_COMP_ARLE : /* Aggressive RLE */
sgip->arle_row = calloc(xsize, sizeof(unsigned short));
sgip->arle_offset = 0;
case SGI_COMP_RLE : /* Run-Length Encoding */
/*
* This file is compressed; write the (blank) scanline tables...
*/
for (i = 2 * ysize * zsize; i > 0; i --)
putlong(0, sgip->file);
sgip->firstrow = ftell(sgip->file);
sgip->nextrow = ftell(sgip->file);
sgip->table = calloc(sgip->zsize, sizeof(long *));
sgip->table[0] = calloc(sgip->ysize * sgip->zsize, sizeof(long));
for (i = 1; i < sgip->zsize; i ++)
sgip->table[i] = sgip->table[0] + i * sgip->ysize;
sgip->length = calloc(sgip->zsize, sizeof(long *));
sgip->length[0] = calloc(sgip->ysize * sgip->zsize, sizeof(long));
for (i = 1; i < sgip->zsize; i ++)
sgip->length[i] = sgip->length[0] + i * sgip->ysize;
break;
}
break;
default :
free(sgip);
return (NULL);
}
return (sgip);
}
/*
* 'sgiPutRow()' - Put a row of image data to a file.
*/
int
sgiPutRow(sgi_t *sgip, /* I - SGI image */
unsigned short *row, /* I - Row to write */
int y, /* I - Line to write */
int z) /* I - Channel to write */
{
int x; /* X coordinate */
long offset; /* File offset */
if (sgip == NULL ||
row == NULL ||
y < 0 || y >= sgip->ysize ||
z < 0 || z >= sgip->zsize)
return (-1);
switch (sgip->comp)
{
case SGI_COMP_NONE :
/*
* Seek to the image row - optimize buffering by only seeking if
* necessary...
*/
offset = 512 + (y + z * sgip->ysize) * sgip->xsize * sgip->bpp;
if (offset != ftell(sgip->file))
fseek(sgip->file, offset, SEEK_SET);
if (sgip->bpp == 1)
{
for (x = sgip->xsize; x > 0; x --, row ++)
putc(*row, sgip->file);
}
else
{
for (x = sgip->xsize; x > 0; x --, row ++)
putshort(*row, sgip->file);
}
break;
case SGI_COMP_ARLE :
if (sgip->table[z][y] != 0)
return (-1);
/*
* First check the last row written...
*/
if (sgip->arle_offset > 0)
{
for (x = 0; x < sgip->xsize; x ++)
if (row[x] != sgip->arle_row[x])
break;
if (x == sgip->xsize)
{
sgip->table[z][y] = sgip->arle_offset;
sgip->length[z][y] = sgip->arle_length;
return (0);
}
}
/*
* If that didn't match, search all the previous rows...
*/
fseek(sgip->file, sgip->firstrow, SEEK_SET);
if (sgip->bpp == 1)
{
for (;;)
{
sgip->arle_offset = ftell(sgip->file);
if ((sgip->arle_length = read_rle8(sgip->file, sgip->arle_row, sgip->xsize)) < 0)
{
x = 0;
break;
}
if (memcmp(row, sgip->arle_row, sgip->xsize * sizeof(unsigned short)) == 0)
{
x = sgip->xsize;
break;
}
}
}
else
{
for (;;)
{
sgip->arle_offset = ftell(sgip->file);
if ((sgip->arle_length = read_rle16(sgip->file, sgip->arle_row, sgip->xsize)) < 0)
{
x = 0;
break;
}
if (memcmp(row, sgip->arle_row, sgip->xsize * sizeof(unsigned short)) == 0)
{
x = sgip->xsize;
break;
}
}
}
if (x == sgip->xsize)
{
sgip->table[z][y] = sgip->arle_offset;
sgip->length[z][y] = sgip->arle_length;
return (0);
}
else
fseek(sgip->file, 0, SEEK_END); /* Clear EOF */
case SGI_COMP_RLE :
if (sgip->table[z][y] != 0)
return (-1);
offset = sgip->table[z][y] = sgip->nextrow;
if (offset != ftell(sgip->file))
fseek(sgip->file, offset, SEEK_SET);
if (sgip->bpp == 1)
x = write_rle8(sgip->file, row, sgip->xsize);
else
x = write_rle16(sgip->file, row, sgip->xsize);
if (sgip->comp == SGI_COMP_ARLE)
{
sgip->arle_offset = offset;
sgip->arle_length = x;
memcpy(sgip->arle_row, row, sgip->xsize * sizeof(unsigned short));
}
sgip->nextrow = ftell(sgip->file);
sgip->length[z][y] = x;
return (x);
}
return (0);
}
/*
* 'getlong()' - Get a 32-bit big-endian integer.
*/
static int
getlong(FILE *fp) /* I - File to read from */
{
unsigned char b[4];
fread(b, 4, 1, fp);
return ((b[0] << 24) | (b[1] << 16) | (b[2] << 8) | b[3]);
}
/*
* 'getshort()' - Get a 16-bit big-endian integer.
*/
static int
getshort(FILE *fp) /* I - File to read from */
{
unsigned char b[2];
fread(b, 2, 1, fp);
return ((b[0] << 8) | b[1]);
}
/*
* 'putlong()' - Put a 32-bit big-endian integer.
*/
static int
putlong(long n, /* I - Long to write */
FILE *fp) /* I - File to write to */
{
if (putc(n >> 24, fp) == EOF)
return (EOF);
if (putc(n >> 16, fp) == EOF)
return (EOF);
if (putc(n >> 8, fp) == EOF)
return (EOF);
if (putc(n, fp) == EOF)
return (EOF);
else
return (0);
}
/*
* 'putshort()' - Put a 16-bit big-endian integer.
*/
static int
putshort(unsigned short n, /* I - Short to write */
FILE *fp) /* I - File to write to */
{
if (putc(n >> 8, fp) == EOF)
return (EOF);
if (putc(n, fp) == EOF)
return (EOF);
else
return (0);
}
/*
* 'read_rle8()' - Read 8-bit RLE data.
*/
static int
read_rle8(FILE *fp, /* I - File to read from */
unsigned short *row, /* O - Data */
int xsize) /* I - Width of data in pixels */
{
int i, /* Looping var */
ch, /* Current character */
count, /* RLE count */
length; /* Number of bytes read... */
length = 0;
while (xsize > 0)
{
if ((ch = getc(fp)) == EOF)
return (-1);
length ++;
count = ch & 127;
if (count == 0)
break;
if (ch & 128)
{
for (i = 0; i < count; i ++, row ++, xsize --, length ++)
*row = getc(fp);
}
else
{
ch = getc(fp);
length ++;
for (i = 0; i < count; i ++, row ++, xsize --)
*row = ch;
}
}
return (xsize > 0 ? -1 : length);
}
/*
* 'read_rle16()' - Read 16-bit RLE data.
*/
static int
read_rle16(FILE *fp, /* I - File to read from */
unsigned short *row, /* O - Data */
int xsize)/* I - Width of data in pixels */
{
int i, /* Looping var */
ch, /* Current character */
count, /* RLE count */
length; /* Number of bytes read... */
length = 0;
while (xsize > 0)
{
if ((ch = getshort(fp)) == EOF)
return (-1);
length ++;
count = ch & 127;
if (count == 0)
break;
if (ch & 128)
{
for (i = 0; i < count; i ++, row ++, xsize --, length ++)
*row = getshort(fp);
}
else
{
ch = getshort(fp);
length ++;
for (i = 0; i < count; i ++, row ++, xsize --)
*row = ch;
}
}
return (xsize > 0 ? -1 : length * 2);
}
/*
* 'write_rle8()' - Write 8-bit RLE data.
*/
static int
write_rle8(FILE *fp, /* I - File to write to */
unsigned short *row, /* I - Data */
int xsize)/* I - Width of data in pixels */
{
int length,
count,
i,
x;
unsigned short *start,
repeat;
for (x = xsize, length = 0; x > 0;)
{
start = row;
row += 2;
x -= 2;
while (x > 0 && (row[-2] != row[-1] || row[-1] != row[0]))
{
row ++;
x --;
}
row -= 2;
x += 2;
count = row - start;
while (count > 0)
{
i = count > 126 ? 126 : count;
count -= i;
if (putc(128 | i, fp) == EOF)
return (-1);
length ++;
while (i > 0)
{
if (putc(*start, fp) == EOF)
return (-1);
start ++;
i --;
length ++;
}
}
if (x <= 0)
break;
start = row;
repeat = row[0];
row ++;
x --;
while (x > 0 && *row == repeat)
{
row ++;
x --;
}
count = row - start;
while (count > 0)
{
i = count > 126 ? 126 : count;
count -= i;
if (putc(i, fp) == EOF)
return (-1);
length ++;
if (putc(repeat, fp) == EOF)
return (-1);
length ++;
}
}
length ++;
if (putc(0, fp) == EOF)
return (-1);
else
return (length);
}
/*
* 'write_rle16()' - Write 16-bit RLE data.
*/
static int
write_rle16(FILE *fp, /* I - File to write to */
unsigned short *row, /* I - Data */
int xsize)/* I - Width of data in pixels */
{
int length,
count,
i,
x;
unsigned short *start,
repeat;
for (x = xsize, length = 0; x > 0;)
{
start = row;
row += 2;
x -= 2;
while (x > 0 && (row[-2] != row[-1] || row[-1] != row[0]))
{
row ++;
x --;
}
row -= 2;
x += 2;
count = row - start;
while (count > 0)
{
i = count > 126 ? 126 : count;
count -= i;
if (putshort(128 | i, fp) == EOF)
return (-1);
length ++;
while (i > 0)
{
if (putshort(*start, fp) == EOF)
return (-1);
start ++;
i --;
length ++;
}
}
if (x <= 0)
break;
start = row;
repeat = row[0];
row ++;
x --;
while (x > 0 && *row == repeat)
{
row ++;
x --;
}
count = row - start;
while (count > 0)
{
i = count > 126 ? 126 : count;
count -= i;
if (putshort(i, fp) == EOF)
return (-1);
length ++;
if (putshort(repeat, fp) == EOF)
return (-1);
length ++;
}
}
length ++;
if (putshort(0, fp) == EOF)
return (-1);
else
return (2 * length);
}
/*
* End of "$Id$".
*/
-376
Ver Arquivo
@@ -1,376 +0,0 @@
/*
* "$Id$"
*
* Sun Raster image file routines for the Common UNIX Printing System (CUPS).
*
* Copyright 1993-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:
*
* ImageReadSunRaster() - Read a SunRaster image file.
* read_unsigned() - Read a 32-bit unsigned integer.
*/
/*
* Include necessary headers...
*/
#include "image.h"
#define RAS_MAGIC 0x59a66a95
/* Sun supported ras_type's */
#define RT_OLD 0 /* Raw pixrect image in 68000 byte order */
#define RT_STANDARD 1 /* Raw pixrect image in 68000 byte order */
#define RT_BYTE_ENCODED 2 /* Run-length compression of bytes */
#define RT_FORMAT_RGB 3 /* XRGB or RGB instead of XBGR or BGR */
#define RT_EXPERIMENTAL 0xffff /* Reserved for testing */
/* Sun registered ras_maptype's */
#define RMT_RAW 2
/* Sun supported ras_maptype's */
#define RMT_NONE 0 /* ras_maplength is expected to be 0 */
#define RMT_EQUAL_RGB 1 /* red[ras_maplength/3],green[],blue[] */
#define RAS_RLE 0x80
/*
* NOTES:
* Each line of the image is rounded out to a multiple of 16 bits.
* This corresponds to the rounding convention used by the memory pixrect
* package (/usr/include/pixrect/memvar.h) of the SunWindows system.
* The ras_encoding field (always set to 0 by Sun's supported software)
* was renamed to ras_length in release 2.0. As a result, rasterfiles
* of type 0 generated by the old software claim to have 0 length; for
* compatibility, code reading rasterfiles must be prepared to compute the
* true length from the width, height, and depth fields.
*/
/*
* Local functions...
*/
static unsigned read_unsigned(FILE *fp);
/*
* 'ImageReadSunRaster()' - Read a SunRaster image file.
*/
int /* O - Read status */
ImageReadSunRaster(image_t *img, /* IO - Image */
FILE *fp, /* I - Image file */
int primary, /* I - Primary choice for colorspace */
int secondary, /* I - Secondary choice for colorspace */
int saturation, /* I - Color saturation (%) */
int hue, /* I - Color hue (degrees) */
ib_t *lut) /* I - Lookup table for gamma/brightness */
{
int i, x, y,
bpp, /* Bytes per pixel */
scanwidth,
run_count,
run_value;
ib_t *in,
*out,
*scanline,
*scanptr,
*p,
bit;
unsigned ras_depth, /* depth (1, 8, or 24 bits) of pixel */
ras_type, /* type of file; see RT_* below */
ras_maplength; /* length (bytes) of following map */
unsigned char cmap[3][256]; /* colormap */
/*
* Read the header; we already know that this is a raster file (ImageOpen
* checks this) so we don't need to check the magic number again.
*/
read_unsigned(fp); /* Skip magic */
img->xsize = read_unsigned(fp);
img->ysize = read_unsigned(fp);
ras_depth = read_unsigned(fp);
/* ras_length */read_unsigned(fp);
ras_type = read_unsigned(fp);
/* ras_maptype*/read_unsigned(fp);
ras_maplength = read_unsigned(fp);
if (ras_maplength > 0)
{
fread(cmap[0], 1, ras_maplength / 3, fp);
fread(cmap[1], 1, ras_maplength / 3, fp);
fread(cmap[2], 1, ras_maplength / 3, fp);
}
/*
* Compute the width of each line and allocate memory as needed...
*/
scanwidth = (img->xsize * ras_depth + 7) / 8;
if (scanwidth & 1)
scanwidth ++;
if (ras_depth < 24 && ras_maplength == 0)
{
img->colorspace = secondary;
in = malloc(img->xsize + 1);
}
else
{
img->colorspace = primary;
in = malloc(img->xsize * 3 + 1);
}
bpp = ImageGetDepth(img);
out = malloc(img->xsize * bpp);
scanline = malloc(scanwidth);
run_count = 0;
for (y = 0; y < img->ysize; y ++)
{
if (ras_depth != 8 || ras_maplength > 0)
p = scanline;
else
p = in;
if (ras_type != RT_BYTE_ENCODED)
fread(p, scanwidth, 1, fp);
else
{
for (i = scanwidth; i > 0; i --, p ++)
{
if (run_count > 0)
{
*p = run_value;
run_count --;
}
else
{
run_value = getc(fp);
if (run_value == RAS_RLE)
{
run_count = getc(fp);
if (run_count == 0)
*p = RAS_RLE;
else
run_value = *p = getc(fp);
}
else
*p = run_value;
}
}
}
if (ras_depth == 1 && ras_maplength == 0)
{
/*
* 1-bit B&W image...
*/
for (x = img->xsize, bit = 128, scanptr = scanline, p = in;
x > 0;
x --, p ++)
{
if (*scanptr & bit)
*p = 255;
else
*p = 0;
if (bit > 1)
{
bit = 128;
scanptr ++;
}
else
bit >>= 1;
}
}
else if (ras_depth == 1)
{
/*
* 1-bit colormapped image...
*/
for (x = img->xsize, bit = 128, scanptr = scanline, p = in;
x > 0;
x --)
{
if (*scanptr & bit)
{
*p++ = cmap[0][1];
*p++ = cmap[1][1];
*p++ = cmap[2][1];
}
else
{
*p++ = cmap[0][0];
*p++ = cmap[1][0];
*p++ = cmap[2][0];
}
if (bit > 1)
{
bit = 128;
scanptr ++;
}
else
bit >>= 1;
}
}
else if (ras_depth == 8 && ras_maplength > 0)
{
/*
* 8-bit colormapped image.
*/
for (x = img->xsize, scanptr = scanline, p = in;
x > 0;
x --)
{
*p++ = cmap[0][*scanptr];
*p++ = cmap[1][*scanptr];
*p++ = cmap[2][*scanptr++];
}
}
else if (ras_depth == 24 && ras_type != RT_FORMAT_RGB)
{
/*
* Convert BGR to RGB...
*/
for (x = img->xsize, scanptr = scanline, p = in;
x > 0;
x --, scanptr += 3)
{
*p++ = scanptr[2];
*p++ = scanptr[1];
*p++ = scanptr[0];
}
}
if (bpp == 1)
{
if (img->colorspace == IMAGE_WHITE)
{
if (lut)
ImageLut(in, img->xsize, lut);
ImagePutRow(img, 0, y, img->xsize, in);
}
else
{
switch (img->colorspace)
{
case IMAGE_RGB :
ImageWhiteToRGB(in, out, img->xsize);
break;
case IMAGE_BLACK :
ImageWhiteToBlack(in, out, img->xsize);
break;
case IMAGE_CMY :
ImageWhiteToCMY(in, out, img->xsize);
break;
case IMAGE_CMYK :
ImageWhiteToCMYK(in, out, img->xsize);
break;
}
if (lut)
ImageLut(out, img->xsize * bpp, lut);
ImagePutRow(img, 0, y, img->xsize, out);
}
}
else
{
if (img->colorspace == IMAGE_RGB)
{
if (saturation != 100 || hue != 0)
ImageRGBAdjust(in, img->xsize, saturation, hue);
if (lut)
ImageLut(in, img->xsize * 3, lut);
ImagePutRow(img, 0, y, img->xsize, in);
}
else
{
if ((saturation != 100 || hue != 0) && bpp > 1)
ImageRGBAdjust(in, img->xsize, saturation, hue);
switch (img->colorspace)
{
case IMAGE_WHITE :
ImageRGBToWhite(in, out, img->xsize);
break;
case IMAGE_BLACK :
ImageRGBToBlack(in, out, img->xsize);
break;
case IMAGE_CMY :
ImageRGBToCMY(in, out, img->xsize);
break;
case IMAGE_CMYK :
ImageRGBToCMYK(in, out, img->xsize);
break;
}
if (lut)
ImageLut(out, img->xsize * bpp, lut);
ImagePutRow(img, 0, y, img->xsize, out);
}
}
}
free(scanline);
free(in);
free(out);
fclose(fp);
return (0);
}
/*
* 'read_unsigned()' - Read a 32-bit unsigned integer.
*/
static unsigned /* O - Integer from file */
read_unsigned(FILE *fp) /* I - File to read from */
{
unsigned v; /* Integer from file */
v = getc(fp);
v = (v << 8) | getc(fp);
v = (v << 8) | getc(fp);
v = (v << 8) | getc(fp);
return (v);
}
/*
* End of "$Id$".
*/
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
-310
Ver Arquivo
@@ -1,310 +0,0 @@
/*
* "$Id$"
*
* Image zoom routines for the Common UNIX Printing System (CUPS).
*
* Copyright 1993-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:
*
* ImageZoomAlloc() - Allocate a pixel zoom record...
* ImageZoomFill() - Fill a zoom record with image data utilizing bilinear
* interpolation.
* ImageZoomQFill() - Fill a zoom record quickly using nearest-neighbor
* sampling.
* ImageZoomFree() - Free a zoom record...
*/
/*
* Include necessary headers...
*/
#include "image.h"
/*
* 'ZoomAlloc()' - Allocate a pixel zoom record...
*/
izoom_t *
ImageZoomAlloc(image_t *img, /* I - Image to zoom */
int x0, /* I - Upper-lefthand corner */
int y0, /* I - ... */
int x1, /* I - Lower-righthand corner */
int y1, /* I - ... */
int xsize, /* I - Final width of image */
int ysize, /* I - Final height of image */
int rotated) /* I - Non-zero if image is rotated 90 degs */
{
izoom_t *z; /* New zoom record */
if ((z = (izoom_t *)calloc(1, sizeof(izoom_t))) == NULL)
return (NULL);
z->img = img;
z->row = 0;
z->depth = ImageGetDepth(img);
z->rotated = rotated;
if (rotated)
{
z->xorig = x1;
z->yorig = y0;
z->width = y1 - y0 + 1;
z->height = x1 - x0 + 1;
z->xsize = xsize;
z->ysize = ysize;
z->xmod = z->width % z->xsize;
z->xstep = z->width / z->xsize;
z->xincr = 1;
z->ymod = z->height % z->ysize;
z->ystep = z->height / z->ysize;
z->yincr = 1;
z->instep = z->xstep * z->depth;
z->inincr = z->xincr * z->depth;
if (z->width < img->ysize)
z->xmax = z->width;
else
z->xmax = z->width - 1;
if (z->height < img->xsize)
z->ymax = z->height;
else
z->ymax = z->height - 1;
}
else
{
z->xorig = x0;
z->yorig = y0;
z->width = x1 - x0 + 1;
z->height = y1 - y0 + 1;
z->xsize = xsize;
z->ysize = ysize;
z->xmod = z->width % z->xsize;
z->xstep = z->width / z->xsize;
z->xincr = 1;
z->ymod = z->height % z->ysize;
z->ystep = z->height / z->ysize;
z->yincr = 1;
z->instep = z->xstep * z->depth;
z->inincr = z->xincr * z->depth;
if (z->width < img->xsize)
z->xmax = z->width;
else
z->xmax = z->width - 1;
if (z->height < img->ysize)
z->ymax = z->height;
else
z->ymax = z->height - 1;
}
if ((z->rows[0] = (ib_t *)malloc(z->xsize * z->depth)) == NULL)
{
free(z);
return (NULL);
}
if ((z->rows[1] = (ib_t *)malloc(z->xsize * z->depth)) == NULL)
{
free(z->rows[0]);
free(z);
return (NULL);
}
if ((z->in = (ib_t *)malloc(z->width * z->depth)) == NULL)
{
free(z->rows[0]);
free(z->rows[1]);
free(z);
return (NULL);
}
return (z);
}
/*
* 'ImageZoomFill()' - Fill a zoom record with image data utilizing bilinear
* interpolation.
*/
void
ImageZoomFill(izoom_t *z, /* I - Zoom record to fill */
int iy) /* I - Zoom image row */
{
ib_t *r, /* Row pointer */
*inptr; /* Pixel pointer */
int xerr0, /* X error counter */
xerr1; /* ... */
int ix,
x,
count,
z_depth,
z_xstep,
z_xincr,
z_instep,
z_inincr,
z_xmax,
z_xmod,
z_xsize;
if (iy > z->ymax)
iy = z->ymax;
z->row ^= 1;
z_depth = z->depth;
z_xsize = z->xsize;
z_xmax = z->xmax;
z_xmod = z->xmod;
z_xstep = z->xstep;
z_xincr = z->xincr;
z_instep = z->instep;
z_inincr = z->inincr;
if (z->rotated)
ImageGetCol(z->img, z->xorig - iy, z->yorig, z->width, z->in);
else
ImageGetRow(z->img, z->xorig, z->yorig + iy, z->width, z->in);
if (z_inincr < 0)
inptr = z->in + (z->width - 1) * z_depth;
else
inptr = z->in;
for (x = z_xsize, xerr0 = z_xsize, xerr1 = 0, ix = 0, r = z->rows[z->row];
x > 0;
x --)
{
if (ix < z_xmax)
{
for (count = 0; count < z_depth; count ++)
*r++ = (inptr[count] * xerr0 + inptr[z_depth + count] * xerr1) / z_xsize;
}
else
{
for (count = 0; count < z_depth; count ++)
*r++ = inptr[count];
}
ix += z_xstep;
inptr += z_instep;
xerr0 -= z_xmod;
xerr1 += z_xmod;
if (xerr0 <= 0)
{
xerr0 += z_xsize;
xerr1 -= z_xsize;
ix += z_xincr;
inptr += z_inincr;
}
}
}
/*
* 'ImageZoomQFill()' - Fill a zoom record quickly using nearest-neighbor sampling.
*/
void
ImageZoomQFill(izoom_t *z, /* I - Zoom record to fill */
int iy) /* I - Zoom image row */
{
ib_t *r, /* Row pointer */
*inptr; /* Pixel pointer */
int xerr0; /* X error counter */
int ix,
x,
count,
z_depth,
z_xstep,
z_xincr,
z_instep,
z_inincr,
z_xmod,
z_xsize;
if (iy > z->ymax)
iy = z->ymax;
z->row ^= 1;
z_depth = z->depth;
z_xsize = z->xsize;
z_xmod = z->xmod;
z_xstep = z->xstep;
z_xincr = z->xincr;
z_instep = z->instep;
z_inincr = z->inincr;
if (z->rotated)
ImageGetCol(z->img, z->xorig - iy, z->yorig, z->width, z->in);
else
ImageGetRow(z->img, z->xorig, z->yorig + iy, z->width, z->in);
if (z_inincr < 0)
inptr = z->in + (z->width - 1) * z_depth;
else
inptr = z->in;
for (x = z_xsize, xerr0 = z_xsize, ix = 0, r = z->rows[z->row];
x > 0;
x --)
{
for (count = 0; count < z_depth; count ++)
*r++ = inptr[count];
ix += z_xstep;
inptr += z_instep;
xerr0 -= z_xmod;
if (xerr0 <= 0)
{
xerr0 += z_xsize;
ix += z_xincr;
inptr += z_inincr;
}
}
}
/*
* 'ImageZoomFree()' - Free a zoom record...
*/
void
ImageZoomFree(izoom_t *z) /* I - Zoom record to free */
{
free(z->rows[0]);
free(z->rows[1]);
free(z->in);
free(z);
}
/*
* End of "$Id$".
*/
-745
Ver Arquivo
@@ -1,745 +0,0 @@
/*
* "$Id$"
*
* Base image support for the Common UNIX Printing System (CUPS).
*
* Copyright 1993-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:
*
* ImageOpen() - Open an image file and read it into memory.
* ImageClose() - Close an image file.
* ImageSetMaxTiles() - Set the maximum number of tiles to cache.
* ImageSetProfile() - Set the device color profile.
* ImageGetCol() - Get a column of pixels from an image.
* ImageGetRow() - Get a row of pixels from an image.
* ImagePutCol() - Put a column of pixels to an image.
* ImagePutRow() - Put a row of pixels to an image.
* get_tile() - Get a cached tile.
* flush_tile() - Flush the least-recently-used tile in the cache.
*/
/*
* Include necessary headers...
*/
#include "image.h"
#include <unistd.h>
#include <ctype.h>
#include <math.h>
/*
* Globals...
*/
int ImageHaveProfile = 0; /* Do we have a color profile? */
int ImageDensity[256]; /* Ink/marker density LUT */
int ImageMatrix[3][3][256]; /* Color transform matrix LUT */
/*
* Local functions...
*/
static ib_t *get_tile(image_t *img, int x, int y);
static void flush_tile(image_t *img);
/*
* 'ImageOpen()' - Open an image file and read it into memory.
*/
image_t * /* O - New image */
ImageOpen(char *filename, /* I - Filename of image */
int primary, /* I - Primary colorspace needed */
int secondary, /* I - Secondary colorspace if primary no good */
int saturation, /* I - Color saturation level */
int hue, /* I - Color hue adjustment */
ib_t *lut) /* I - RGB gamma/brightness LUT */
{
FILE *fp; /* File pointer */
unsigned char header[16], /* First 16 bytes of file */
header2[16]; /* Bytes 2048-2064 (PhotoCD) */
image_t *img; /* New image buffer */
int status; /* Status of load... */
/*
* Range check...
*/
if (filename == NULL)
return (NULL);
/*
* Figure out the file type...
*/
if ((fp = fopen(filename, "r")) == NULL)
return (NULL);
if (fread(header, 1, sizeof(header), fp) == 0)
{
fclose(fp);
return (NULL);
}
fseek(fp, 2048, SEEK_SET);
memset(header2, 0, sizeof(header2));
fread(header2, 1, sizeof(header2), fp);
fseek(fp, 0, SEEK_SET);
/*
* Allocate memory...
*/
img = calloc(sizeof(image_t), 1);
if (img == NULL)
{
fclose(fp);
return (NULL);
}
/*
* Load the image as appropriate...
*/
img->max_ics = TILE_MINIMUM;
img->xppi = 128;
img->yppi = 128;
if (memcmp(header, "GIF87a", 6) == 0 ||
memcmp(header, "GIF89a", 6) == 0)
status = ImageReadGIF(img, fp, primary, secondary, saturation, hue, lut);
else if (header[0] == 0x01 && header[1] == 0xda)
status = ImageReadSGI(img, fp, primary, secondary, saturation, hue, lut);
else if (header[0] == 0x59 && header[1] == 0xa6 &&
header[2] == 0x6a && header[3] == 0x95)
status = ImageReadSunRaster(img, fp, primary, secondary, saturation, hue, lut);
else if (header[0] == 'P' && header[1] >= '1' && header[1] <= '6')
status = ImageReadPNM(img, fp, primary, secondary, saturation, hue, lut);
else if (memcmp(header2, "PCD_IPI", 7) == 0)
status = ImageReadPhotoCD(img, fp, primary, secondary, saturation, hue, lut);
#if defined(HAVE_LIBPNG) && defined(HAVE_LIBZ)
else if (memcmp(header, "\211PNG", 4) == 0)
status = ImageReadPNG(img, fp, primary, secondary, saturation, hue, lut);
#endif /* HAVE_LIBPNG && HAVE_LIBZ */
#ifdef HAVE_LIBJPEG
else if (memcmp(header + 6, "JFIF", 4) == 0)
status = ImageReadJPEG(img, fp, primary, secondary, saturation, hue, lut);
#endif /* HAVE_LIBJPEG */
#ifdef HAVE_LIBTIFF
else if (memcmp(header, "MM", 2) == 0 ||
memcmp(header, "II", 2) == 0)
status = ImageReadTIFF(img, fp, primary, secondary, saturation, hue, lut);
#endif /* HAVE_LIBTIFF */
else
{
fclose(fp);
status = -1;
}
if (status)
{
free(img);
return (NULL);
}
else
return (img);
}
/*
* 'ImageClose()' - Close an image file.
*/
void
ImageClose(image_t *img) /* I - Image to close */
{
ic_t *current, /* Current cached tile */
*next; /* Next cached tile */
/*
* Free the image cache...
*/
for (current = img->first; current != NULL; current = next)
{
next = current->next;
free(current);
}
/*
* Wipe the tile cache file (if any)...
*/
if (img->cachefile != NULL)
{
fclose(img->cachefile);
unlink(img->cachename);
}
/*
* Free the rest of memory...
*/
if (img->tiles != NULL)
{
free(img->tiles[0]);
free(img->tiles);
}
free(img);
}
/*
* 'ImageSetMaxTiles()' - Set the maximum number of tiles to cache.
*
* If the "max_tiles" argument is 0 then the maximum number of tiles is
* computed from the image size.
*/
void
ImageSetMaxTiles(image_t *img, /* I - Image to set */
int max_tiles) /* I - Number of tiles to cache */
{
int cache_size, /* Size of tile cache in bytes */
min_tiles, /* Minimum number of tiles to cache */
max_size; /* Maximum cache size in bytes */
char *cache_env, /* Cache size environment variable */
cache_units[255]; /* Cache size units */
min_tiles = max(TILE_MINIMUM,
1 + max((img->xsize + TILE_SIZE - 1) / TILE_SIZE,
(img->ysize + TILE_SIZE - 1) / TILE_SIZE));
if (max_tiles == 0)
max_tiles = ((img->xsize + TILE_SIZE - 1) / TILE_SIZE) *
((img->ysize + TILE_SIZE - 1) / TILE_SIZE);
cache_size = max_tiles * TILE_SIZE * TILE_SIZE * ImageGetDepth(img);
if ((cache_env = getenv("RIP_MAX_CACHE")) != NULL)
{
switch (sscanf(cache_env, "%d%s", &max_size, cache_units))
{
case 0 :
max_size = 32 * 1024 * 1024;
break;
case 1 :
max_size *= 4 * TILE_SIZE * TILE_SIZE;
break;
case 2 :
if (tolower(cache_units[0]) == 'g')
max_size *= 1024 * 1024 * 1024;
else if (tolower(cache_units[0]) == 'm')
max_size *= 1024 * 1024;
else if (tolower(cache_units[0]) == 'k')
max_size *= 1024;
else if (tolower(cache_units[0]) == 't')
max_size *= 4 * TILE_SIZE * TILE_SIZE;
break;
}
}
else
max_size = 32 * 1024 * 1024;
if (cache_size > max_size)
max_tiles = max_size / TILE_SIZE / TILE_SIZE / ImageGetDepth(img);
if (max_tiles < min_tiles)
max_tiles = min_tiles;
img->max_ics = max_tiles;
#ifdef DEBUG
fprintf(stderr, "ImageSetMaxTiles: max_ics=%d...\n", img->max_ics);
#endif /* DEBUG */
}
/*
* 'ImageSetProfile()' - Set the device color profile.
*/
void
ImageSetProfile(float density, /* I - Ink/marker density */
float matrix[3][3]) /* I - Color transform matrix */
{
int i, j, k; /* Looping vars */
float g; /* Gamma correction */
ImageHaveProfile = 1;
for (i = 0; i < 3; i ++)
for (j = 0; j < 3; j ++)
for (k = 0; k < 256; k ++)
ImageMatrix[i][j][k] = (int)(k * matrix[i][j] + 0.5);
g = 1.0 / density;
for (k = 0; k < 256; k ++)
ImageDensity[k] = 255.0 * density * pow((float)k / 255.0, g) + 0.5;
}
/*
* 'ImageGetCol()' - Get a column of pixels from an image.
*/
int
ImageGetCol(image_t *img,
int x,
int y,
int height,
ib_t *pixels)
{
int bpp,
twidth,
count;
ib_t *ib;
if (img == NULL || x < 0 || x >= img->xsize || y >= img->ysize)
return (-1);
if (y < 0)
{
height += y;
y = 0;
}
if ((y + height) > img->ysize)
height = img->ysize - y;
if (height < 1)
return (-1);
bpp = ImageGetDepth(img);
twidth = bpp * (TILE_SIZE - 1);
while (height > 0)
{
ib = get_tile(img, x, y);
if (ib == NULL)
return (-1);
count = TILE_SIZE - (y & (TILE_SIZE - 1));
if (count > height)
count = height;
y += count;
height -= count;
for (; count > 0; count --, ib += twidth)
switch (bpp)
{
case 4 :
*pixels++ = *ib++;
case 3 :
*pixels++ = *ib++;
*pixels++ = *ib++;
case 1 :
*pixels++ = *ib++;
break;
}
}
return (0);
}
/*
* 'ImageGetRow()' - Get a row of pixels from an image.
*/
int
ImageGetRow(image_t *img,
int x,
int y,
int width,
ib_t *pixels)
{
int bpp,
count;
ib_t *ib;
if (img == NULL || y < 0 || y >= img->ysize || x >= img->xsize)
return (-1);
if (x < 0)
{
width += x;
x = 0;
}
if ((x + width) > img->xsize)
width = img->xsize - x;
if (width < 1)
return (-1);
bpp = img->colorspace < 0 ? -img->colorspace : img->colorspace;
while (width > 0)
{
ib = get_tile(img, x, y);
if (ib == NULL)
return (-1);
count = TILE_SIZE - (x & (TILE_SIZE - 1));
if (count > width)
count = width;
memcpy(pixels, ib, count * bpp);
pixels += count * bpp;
x += count;
width -= count;
}
return (0);
}
/*
* 'ImagePutCol()' - Put a column of pixels to an image.
*/
int
ImagePutCol(image_t *img,
int x,
int y,
int height,
ib_t *pixels)
{
int bpp,
twidth,
count;
int tilex,
tiley;
ib_t *ib;
if (img == NULL || x < 0 || x >= img->xsize || y >= img->ysize)
return (-1);
if (y < 0)
{
height += y;
y = 0;
}
if ((y + height) > img->ysize)
height = img->ysize - y;
if (height < 1)
return (-1);
bpp = ImageGetDepth(img);
twidth = bpp * (TILE_SIZE - 1);
tilex = x / TILE_SIZE;
tiley = y / TILE_SIZE;
while (height > 0)
{
ib = get_tile(img, x, y);
if (ib == NULL)
return (-1);
img->tiles[tiley][tilex].dirty = 1;
tiley ++;
count = TILE_SIZE - (y & (TILE_SIZE - 1));
if (count > height)
count = height;
y += count;
height -= count;
for (; count > 0; count --, ib += twidth)
switch (bpp)
{
case 4 :
*ib++ = *pixels++;
case 3 :
*ib++ = *pixels++;
*ib++ = *pixels++;
case 1 :
*ib++ = *pixels++;
break;
}
}
return (0);
}
/*
* 'ImagePutRow()' - Put a row of pixels to an image.
*/
int
ImagePutRow(image_t *img,
int x,
int y,
int width,
ib_t *pixels)
{
int bpp,
count;
int tilex,
tiley;
ib_t *ib;
if (img == NULL || y < 0 || y >= img->ysize || x >= img->xsize)
return (-1);
if (x < 0)
{
width += x;
x = 0;
}
if ((x + width) > img->xsize)
width = img->xsize - x;
if (width < 1)
return (-1);
bpp = img->colorspace < 0 ? -img->colorspace : img->colorspace;
tilex = x / TILE_SIZE;
tiley = y / TILE_SIZE;
while (width > 0)
{
ib = get_tile(img, x, y);
if (ib == NULL)
return (-1);
img->tiles[tiley][tilex].dirty = 1;
count = TILE_SIZE - (x & (TILE_SIZE - 1));
if (count > width)
count = width;
memcpy(ib, pixels, count * bpp);
pixels += count * bpp;
x += count;
width -= count;
tilex ++;
}
return (0);
}
/*
* 'get_tile()' - Get a cached tile.
*/
static ib_t *
get_tile(image_t *img,
int x,
int y)
{
int bpp,
tilex,
tiley,
xtiles,
ytiles;
ic_t *ic;
itile_t *tile;
if (img->tiles == NULL)
{
xtiles = (img->xsize + TILE_SIZE - 1) / TILE_SIZE;
ytiles = (img->ysize + TILE_SIZE - 1) / TILE_SIZE;
#ifdef DEBUG
fprintf(stderr, "get_tile: Creating tile array (%dx%d)\n", xtiles, ytiles);
#endif /* DEBUG */
img->tiles = calloc(sizeof(itile_t *), ytiles);
tile = calloc(sizeof(itile_t), xtiles * ytiles);
for (tiley = 0; tiley < ytiles; tiley ++)
{
img->tiles[tiley] = tile;
for (tilex = xtiles; tilex > 0; tilex --, tile ++)
tile->pos = -1;
}
}
bpp = ImageGetDepth(img);
tilex = x / TILE_SIZE;
tiley = y / TILE_SIZE;
x &= (TILE_SIZE - 1);
y &= (TILE_SIZE - 1);
tile = img->tiles[tiley] + tilex;
if ((ic = tile->ic) == NULL)
{
if (img->num_ics < img->max_ics)
{
#ifdef DEBUG
fputs("get_tile: Allocating new cache tile...\n", stderr);
#endif /* DEBUG */
ic = calloc(sizeof(ic_t) + bpp * TILE_SIZE * TILE_SIZE, 1);
ic->pixels = ((ib_t *)ic) + sizeof(ic_t);
img->num_ics ++;
}
else
{
#ifdef DEBUG
fputs("get_tile: Flushing old cache tile...\n", stderr);
#endif /* DEBUG */
flush_tile(img);
ic = img->first;
}
ic->tile = tile;
tile->ic = ic;
if (tile->pos >= 0)
{
#ifdef DEBUG
fprintf(stderr, "get_tile: loading cache tile from file position %d...\n",
tile->pos);
#endif /* DEBUG */
if (ftell(img->cachefile) != tile->pos)
if (fseek(img->cachefile, tile->pos, SEEK_SET))
perror("get_tile:");
fread(ic->pixels, bpp, TILE_SIZE * TILE_SIZE, img->cachefile);
}
else
{
#ifdef DEBUG
fputs("get_tile: Clearing cache tile...\n", stderr);
#endif /* DEBUG */
memset(ic->pixels, 0, bpp * TILE_SIZE * TILE_SIZE);
}
}
if (ic == img->first)
img->first = ic->next;
else if (img->first == NULL)
img->first = ic;
if (ic != img->last)
{
if (img->last != NULL)
img->last->next = ic;
ic->prev = img->last;
img->last = ic;
}
ic->next = NULL;
return (ic->pixels + bpp * (y * TILE_SIZE + x));
}
/*
* 'flush_tile()' - Flush the least-recently-used tile in the cache.
*/
static void
flush_tile(image_t *img)
{
int bpp;
itile_t *tile;
#ifdef DEBUG
fprintf(stderr, "flush_tile(%08x)...\n", img);
#endif /* DEBUG */
bpp = ImageGetDepth(img);
tile = img->first->tile;
if (!tile->dirty)
{
tile->ic = NULL;
return;
}
if (img->cachefile == NULL)
{
tmpnam(img->cachename);
#ifdef DEBUG
fprintf(stderr, "flush_tile: Creating cache file %s...\n", img->cachename);
#endif /* DEBUG */
if ((img->cachefile = fopen(img->cachename, "wb+")) == NULL)
{
fprintf(stderr, "flush_tile: Unable to create swap file - %s\n",
strerror(errno));
return;
}
}
if (tile->pos >= 0)
{
if (ftell(img->cachefile) != tile->pos)
if (fseek(img->cachefile, tile->pos, SEEK_SET))
perror("flush_tile:");
}
else
{
if (fseek(img->cachefile, 0, SEEK_END))
perror("flush_tile:");
tile->pos = ftell(img->cachefile);
}
#ifdef DEBUG
fprintf(stderr, "flush_tile: Wrote tile cache at position %d...\n",
tile->pos);
#endif /* DEBUG */
fwrite(tile->ic->pixels, bpp, TILE_SIZE * TILE_SIZE, img->cachefile);
tile->ic = NULL;
tile->dirty = 0;
}
/*
* End of "$Id$".
*/
-223
Ver Arquivo
@@ -1,223 +0,0 @@
/*
* "$Id$"
*
* Image library definitions for the Common UNIX Printing System (CUPS).
*
* Copyright 1993-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 _IMAGE_H_
# define _IMAGE_H_
/*
* Include necessary headers...
*/
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <errno.h>
# include <config.h>
/*
* Colorspaces...
*/
# define IMAGE_CMYK -4 /* Cyan, magenta, yellow, and black */
# define IMAGE_CMY -3 /* Cyan, magenta, and yellow */
# define IMAGE_BLACK -1 /* Black */
# define IMAGE_WHITE 1 /* White (luminance) */
# define IMAGE_RGB 3 /* Red, green, and blue */
/*
* Tile definitions...
*/
# define TILE_SIZE 256 /* 256x256 pixel tiles */
# define TILE_MINIMUM 10 /* Minimum number of tiles */
/*
* min/max/abs macros...
*/
#ifndef max
# define max(a,b) ((a) > (b) ? (a) : (b))
#endif /* !max */
#ifndef min
# define min(a,b) ((a) < (b) ? (a) : (b))
#endif /* !min */
#ifndef abs
# define abs(a) ((a) < 0 ? -(a) : (a))
#endif /* !abs */
/*
* Image byte type...
*/
typedef unsigned char ib_t;
/*
* Tile cache structure...
*/
typedef struct ic_str
{
struct ic_str *prev, /* Previous tile in cache */
*next; /* Next tile in cache */
void *tile; /* Tile this is attached to */
ib_t *pixels; /* Pixel data */
} ic_t;
/*
* Tile structure...
*/
typedef struct
{
int dirty; /* True if tile is dirty */
long pos; /* Position of tile on disk (-1 if not written) */
ic_t *ic; /* Pixel data */
} itile_t;
/*
* Image structure...
*/
typedef struct
{
int colorspace; /* Colorspace of image */
unsigned xsize, /* Width of image in pixels */
ysize, /* Height of image in pixels */
xppi, /* X resolution in pixels-per-inch */
yppi, /* Y resolution in pixels-per-inch */
num_ics, /* Number of cached tiles */
max_ics; /* Maximum number of cached tiles */
itile_t **tiles; /* Tiles in image */
ic_t *first, /* First cached tile in image */
*last; /* Last cached tile in image */
FILE *cachefile; /* Tile cache file */
char cachename[256]; /* Tile cache filename */
} image_t;
/*
* Image row zooming structure...
*/
typedef struct
{
image_t *img; /* Image to zoom */
unsigned xorig,
yorig,
width, /* Width of input area */
height, /* Height of input area */
depth, /* Number of bytes per pixel */
rotated, /* Non-zero if image needs to be rotated */
xsize, /* Width of output image */
ysize, /* Height of output image */
xmax, /* Maximum input image X position */
ymax, /* Maximum input image Y position */
xmod, /* Threshold for Bresenheim rounding */
ymod; /* ... */
int xstep, /* Amount to step for each pixel along X */
xincr,
instep, /* Amount to step pixel pointer along X */
inincr,
ystep, /* Amount to step for each pixel along Y */
yincr,
row; /* Current row */
ib_t *rows[2], /* Horizontally scaled pixel data */
*in; /* Unscaled input pixel data */
} izoom_t;
/*
* Basic image functions...
*/
extern image_t *ImageOpen(char *filename, int primary, int secondary,
int saturation, int hue, ib_t *lut);
extern void ImageClose(image_t *img);
extern void ImageSetMaxTiles(image_t *img, int max_tiles);
extern void ImageSetProfile(float density, float matrix[3][3]);
#define ImageGetDepth(img) ((img)->colorspace < 0 ? -(img)->colorspace : (img)->colorspace)
extern int ImageGetCol(image_t *img, int x, int y, int height, ib_t *pixels);
extern int ImageGetRow(image_t *img, int x, int y, int width, ib_t *pixels);
extern int ImagePutCol(image_t *img, int x, int y, int height, ib_t *pixels);
extern int ImagePutRow(image_t *img, int x, int y, int width, ib_t *pixels);
/*
* File formats...
*/
extern int ImageReadGIF(image_t *img, FILE *fp, int primary, int secondary,
int saturation, int hue, ib_t *lut);
extern int ImageReadJPEG(image_t *img, FILE *fp, int primary, int secondary,
int saturation, int hue, ib_t *lut);
extern int ImageReadPNG(image_t *img, FILE *fp, int primary, int secondary,
int saturation, int hue, ib_t *lut);
extern int ImageReadPNM(image_t *img, FILE *fp, int primary, int secondary,
int saturation, int hue, ib_t *lut);
extern int ImageReadPhotoCD(image_t *img, FILE *fp, int primary,
int secondary, int saturation, int hue, ib_t *lut);
extern int ImageReadSGI(image_t *img, FILE *fp, int primary, int secondary,
int saturation, int hue, ib_t *lut);
extern int ImageReadSunRaster(image_t *img, FILE *fp, int primary,
int secondary, int saturation, int hue, ib_t *lut);
extern int ImageReadTIFF(image_t *img, FILE *fp, int primary, int secondary,
int saturation, int hue, ib_t *lut);
/*
* Colorspace conversions...
*/
extern void ImageWhiteToWhite(ib_t *in, ib_t *out, int count);
extern void ImageWhiteToRGB(ib_t *in, ib_t *out, int count);
extern void ImageWhiteToBlack(ib_t *in, ib_t *out, int count);
extern void ImageWhiteToCMY(ib_t *in, ib_t *out, int count);
extern void ImageWhiteToCMYK(ib_t *in, ib_t *out, int count);
extern void ImageRGBToWhite(ib_t *in, ib_t *out, int count);
extern void ImageRGBToRGB(ib_t *in, ib_t *out, int count);
extern void ImageRGBToBlack(ib_t *in, ib_t *out, int count);
extern void ImageRGBToCMY(ib_t *in, ib_t *out, int count);
extern void ImageRGBToCMYK(ib_t *in, ib_t *out, int count);
extern void ImageRGBAdjust(ib_t *pixels, int count, int saturation, int hue);
extern void ImageLut(ib_t *pixels, int count, ib_t *lut);
/*
* Image scaling operations...
*/
extern izoom_t *ImageZoomAlloc(image_t *img, int x0, int y0, int x1, int y1,
int xsize, int ysize, int rotated);
extern void ImageZoomFill(izoom_t *z, int iy);
extern void ImageZoomQFill(izoom_t *z, int iy);
extern void ImageZoomFree(izoom_t *z);
#endif /* !_IMAGE_H_ */
/*
* End of "$Id$".
*/
-489
Ver Arquivo
@@ -1,489 +0,0 @@
/*
* "$Id$"
*
* Image file to PostScript filter for the Common UNIX Printing System (CUPS).
*
* Copyright 1993-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...
* ps_hex() - Print binary data as a series of hexadecimal numbers.
* ps_ascii85() - Print binary data as a series of base-85 numbers.
*/
/*
* Include necessary headers...
*/
#include "common.h"
#include "image.h"
#include <math.h>
/*
* Globals...
*/
int Flip = 0, /* Flip/mirror pages */
Collate = 0, /* Collate copies? */
Copies = 1; /* Number of copies */
/*
* Local functions...
*/
static void ps_hex(ib_t *, int);
static void ps_ascii85(ib_t *, int, int);
/*
* 'main()' - Main entry...
*/
int /* O - Exit status */
main(int argc, /* I - Number of command-line arguments */
char *argv[]) /* I - Command-line arguments */
{
image_t *img; /* Image to print */
float xprint, /* Printable area */
yprint,
xinches, /* Total size in inches */
yinches;
float xsize, /* Total size in points */
ysize;
int xpages, /* # x pages */
ypages, /* # y pages */
xpage, /* Current x page */
ypage, /* Current y page */
page; /* Current page number */
int x0, y0, /* Corners of the page in image coords */
x1, y1;
ib_t *row; /* Current row */
int y; /* Current Y coordinate in image */
int colorspace; /* Output colorspace */
int out_offset, /* Offset into output buffer */
out_length; /* Length of output buffer */
ppd_file_t *ppd; /* PPD file */
int num_options; /* Number of print options */
cups_option_t *options; /* Print options */
const char *val; /* Option value */
int slowcollate; /* Collate copies the slow way */
float g; /* Gamma correction value */
float b; /* Brightness factor */
float zoom; /* Zoom facter */
int ppi; /* Pixels-per-inch */
int hue, sat; /* Hue and saturation adjustment */
if (argc != 7)
{
fputs("ERROR: imagetops job-id user title copies options file\n", stderr);
return (1);
}
/*
* Process command-line options and write the prolog...
*/
zoom = 0.0;
ppi = 0;
hue = 0;
sat = 100;
g = 1.0;
b = 1.0;
Copies = atoi(argv[4]);
options = NULL;
num_options = cupsParseOptions(argv[5], 0, &options);
ppd = SetCommonOptions(num_options, options, 1);
ppdMarkDefaults(ppd);
cupsMarkOptions(ppd, num_options, options);
if ((val = cupsGetOption("multiple-document-handling", num_options, options)) != NULL)
{
/*
* This IPP attribute is unnecessarily complicated...
*
* single-document, separate-documents-collated-copies, and
* single-document-new-sheet all require collated copies.
*
* separate-documents-collated-copies allows for uncollated copies.
*/
Collate = strcmp(val, "separate-documents-collated-copies") != 0;
}
if ((val = cupsGetOption("Collate", num_options, options)) != NULL &&
strcmp(val, "True") == 0)
Collate = 1;
if ((val = cupsGetOption("gamma", num_options, options)) != NULL)
g = atoi(val) * 0.001f;
if ((val = cupsGetOption("brightness", num_options, options)) != NULL)
b = atoi(val) * 0.01f;
if ((val = cupsGetOption("scaling", num_options, options)) != NULL)
zoom = atoi(val) * 0.01;
if ((val = cupsGetOption("ppi", num_options, options)) != NULL)
ppi = atoi(val);
if ((val = cupsGetOption("saturation", num_options, options)) != NULL)
sat = atoi(val);
if ((val = cupsGetOption("hue", num_options, options)) != NULL)
hue = atoi(val);
/*
* Open the input image to print...
*/
colorspace = ColorDevice ? IMAGE_RGB : IMAGE_WHITE;
if ((img = ImageOpen(argv[6], colorspace, IMAGE_WHITE, sat, hue, NULL)) == NULL)
{
fputs("ERROR: Unable to open image file for printing!\n", stderr);
ppdClose(ppd);
return (1);
}
colorspace = img->colorspace;
/*
* Scale as necessary...
*/
xprint = (PageRight - PageLeft) / 72.0;
yprint = (PageTop - PageBottom) / 72.0;
if (zoom == 0.0 && ppi == 0)
ppi = img->xppi;
if (ppi > 0)
{
/*
* Scale the image as neccesary to match the desired pixels-per-inch.
*/
xinches = (float)img->xsize / (float)ppi;
yinches = (float)img->ysize / (float)ppi;
}
else
{
/*
* Scale percentage of page size...
*/
xsize = xprint * zoom;
ysize = xsize * img->ysize / img->xsize;
if (ysize > (yprint * zoom))
{
ysize = yprint * zoom;
xsize = ysize * img->xsize / img->ysize;
}
xinches = xsize;
yinches = ysize;
}
xpages = ceil(xinches / xprint);
ypages = ceil(yinches / yprint);
/*
* See if we need to collate, and if so how we need to do it...
*/
if (xpages == 1 && ypages == 1)
Collate = 0;
slowcollate = Collate && ppdFindOption(ppd, "Collate") == NULL;
/*
* Write any "exit server" options that have been selected...
*/
ppdEmit(ppd, stdout, PPD_ORDER_EXIT);
/*
* Write any JCL commands that are needed to print PostScript code...
*/
if (ppd != NULL && ppd->jcl_begin && ppd->jcl_ps)
{
fputs(ppd->jcl_begin, stdout);
ppdEmit(ppd, stdout, PPD_ORDER_JCL);
fputs(ppd->jcl_ps, stdout);
}
/*
* Start sending the document with any commands needed...
*/
puts("%!");
if (ppd != NULL && ppd->patches != NULL)
puts(ppd->patches);
ppdEmit(ppd, stdout, PPD_ORDER_DOCUMENT);
ppdEmit(ppd, stdout, PPD_ORDER_ANY);
ppdEmit(ppd, stdout, PPD_ORDER_PROLOG);
if (g != 1.0 || b != 1.0)
printf("{ neg 1 add dup 0 lt { pop 1 } { %.3f exp neg 1 add } "
"ifelse %.3f mul } bind settransfer\n", g, b);
if (Copies > 1 && !slowcollate)
{
printf("/#copies %d def\n", Copies);
Copies = 1;
}
/*
* Output the pages...
*/
xprint = xinches / xpages;
yprint = yinches / ypages;
row = malloc(img->xsize * abs(colorspace) + 3);
for (page = 1; Copies > 0; Copies --)
for (xpage = 0; xpage < xpages; xpage ++)
for (ypage = 0; ypage < ypages; ypage ++, page ++)
{
fprintf(stderr, "INFO: Printing page %d...\n", page);
ppdEmit(ppd, stdout, PPD_ORDER_PAGE);
puts("gsave");
if (Flip)
printf("%.0f 0 translate -1 1 scale\n", PageWidth);
switch (Orientation)
{
case 1 : /* Landscape */
printf("%.0f 0 translate 90 rotate\n", PageLength);
break;
case 2 : /* Reverse Portrait */
printf("%.0f %.0f translate 180 rotate\n", PageWidth, PageLength);
break;
case 3 : /* Reverse Landscape */
printf("0 %.0f translate -90 rotate\n", PageWidth);
break;
}
x0 = img->xsize * xpage / xpages;
x1 = img->xsize * (xpage + 1) / xpages - 1;
y0 = img->ysize * ypage / ypages;
y1 = img->ysize * (ypage + 1) / ypages - 1;
printf("%.1f %.1f translate\n", PageLeft, PageBottom + 72.0 * yprint);
printf("%.3f %.3f scale\n\n",
xprint * 72.0 / (x1 - x0 + 1),
yprint * 72.0 / (y1 - y0 + 1));
if (LanguageLevel == 1)
{
printf("/picture %d string def\n", (x1 - x0 + 1) * abs(colorspace));
printf("%d %d 8[1 0 0 -1 0 1]", (x1 - x0 + 1), (y1 - y0 + 1));
if (colorspace == IMAGE_WHITE)
puts("{currentfile picture readhexstring pop} image");
else
puts("{currentfile picture readhexstring pop} false 3 colorimage");
for (y = y0; y <= y1; y ++)
{
ImageGetRow(img, x0, y, x1 - x0 + 1, row);
ps_hex(row, (x1 - x0 + 1) * abs(colorspace));
}
}
else
{
if (colorspace == IMAGE_WHITE)
puts("/DeviceGray setcolorspace");
else
puts("/DeviceRGB setcolorspace");
printf("<<"
"/ImageType 1"
"/Width %d"
"/Height %d"
"/BitsPerComponent 8",
x1 - x0 + 1, y1 - y0 + 1);
if (colorspace == IMAGE_WHITE)
fputs("/Decode[0 1]", stdout);
else
fputs("/Decode[0 1 0 1 0 1]", stdout);
fputs("/DataSource currentfile /ASCII85Decode filter", stdout);
if (((x1 - x0 + 1) / xprint) < 100.0)
fputs("/Interpolate true", stdout);
puts("/ImageMatrix[1 0 0 -1 0 1]>>image");
for (y = y0, out_offset = 0; y <= y1; y ++)
{
ImageGetRow(img, x0, y, x1 - x0 + 1, row + out_offset);
out_length = (x1 - x0 + 1) * abs(colorspace) + out_offset;
out_offset = out_length & 3;
ps_ascii85(row, out_length, y == y1);
if (out_offset > 0)
memcpy(row, row + out_length - out_offset, out_offset);
}
}
puts("grestore");
puts("showpage");
}
/*
* End the job with the appropriate JCL command or CTRL-D otherwise.
*/
if (ppd != NULL && ppd->jcl_end)
fputs(ppd->jcl_end, stdout);
else
putchar(0x04);
/*
* Close files...
*/
ImageClose(img);
ppdClose(ppd);
return (0);
}
/*
* 'ps_hex()' - Print binary data as a series of hexadecimal numbers.
*/
static void
ps_hex(ib_t *data, /* I - Data to print */
int length) /* I - Number of bytes to print */
{
int col;
static char *hex = "0123456789ABCDEF";
col = 0;
while (length > 0)
{
/*
* Put the hex chars out to the file; note that we don't use printf()
* for speed reasons...
*/
putchar(hex[*data >> 4]);
putchar(hex[*data & 15]);
data ++;
length --;
col = (col + 1) & 31;
if (col == 0 && length > 0)
putchar('\n');
}
putchar('\n');
}
/*
* 'ps_ascii85()' - Print binary data as a series of base-85 numbers.
*/
static void
ps_ascii85(ib_t *data, /* I - Data to print */
int length, /* I - Number of bytes to print */
int last_line) /* I - Last line of raster data? */
{
int i; /* Looping var */
unsigned b; /* Binary data word */
unsigned char c[5]; /* ASCII85 encoded chars */
while (length > 3)
{
b = (((((data[0] << 8) | data[1]) << 8) | data[2]) << 8) | data[3];
if (b == 0)
putchar('z');
else
{
c[4] = (b % 85) + '!';
b /= 85;
c[3] = (b % 85) + '!';
b /= 85;
c[2] = (b % 85) + '!';
b /= 85;
c[1] = (b % 85) + '!';
b /= 85;
c[0] = b + '!';
fwrite(c, 5, 1, stdout);
}
data += 4;
length -= 4;
}
if (last_line)
{
if (length > 0)
{
for (b = 0, i = length; i > 0; b = (b << 8) | data[0], data ++, i --);
c[4] = (b % 85) + '!';
b /= 85;
c[3] = (b % 85) + '!';
b /= 85;
c[2] = (b % 85) + '!';
b /= 85;
c[1] = (b % 85) + '!';
b /= 85;
c[0] = b + '!';
fwrite(c, length + 1, 1, stdout);
}
puts("~>");
}
}
/*
* End of "$Id$".
*/
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
-782
Ver Arquivo
@@ -1,782 +0,0 @@
/*
* "$Id$"
*
* PostScript filter for the Common UNIX Printing System (CUPS).
*
* Copyright 1993-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...
* check_range() - Check to see if the current page is selected for
* copy_bytes() - Copy bytes from the input file to stdout...
* end_nup() - End processing for N-up printing...
* psgets() - Get a line from a file.
* start_nup() - Start processing for N-up printing...
*/
/*
* Include necessary headers...
*/
#include "common.h"
/*
* Constants...
*/
#define MAX_PAGES 10000
/*
* Globals...
*/
int NumPages = 0; /* Number of pages in file */
long Pages[MAX_PAGES]; /* Offsets to each page */
char PageLabels[MAX_PAGES][64];
/* Page labels */
const char *PageRanges = NULL; /* Range of pages selected */
const char *PageSet = NULL; /* All, Even, Odd pages */
int Order = 0, /* 0 = normal, 1 = reverse pages */
Flip = 0, /* Flip/mirror pages */
NUp = 1, /* Number of pages on each sheet (1, 2, 4) */
Collate = 0, /* Collate copies? */
Copies = 1; /* Number of copies */
/*
* Local functions...
*/
static int check_range(int page);
static void copy_bytes(FILE *fp, size_t length);
static void end_nup(int number);
static char *psgets(char *buf, size_t len, FILE *fp);
static void start_nup(int number);
/*
* 'main()' - Main entry...
*/
int /* O - Exit status */
main(int argc, /* I - Number of command-line arguments */
char *argv[]) /* I - Command-line arguments */
{
FILE *fp; /* Print file */
ppd_file_t *ppd; /* PPD file */
int num_options; /* Number of print options */
cups_option_t *options; /* Print options */
const char *val; /* Option value */
char tempfile[255]; /* Temporary file name */
FILE *temp; /* Temporary file */
int number; /* Page number */
int slowcollate; /* 1 if we need to collate manually */
int sloworder; /* 1 if we need to order manually */
char line[8192]; /* Line buffer */
float g; /* Gamma correction value */
float b; /* Brightness factor */
int level; /* Nesting level for embedded files */
int nbytes, /* Number of bytes read */
tbytes; /* Total bytes to read for binary data */
if (argc < 6 || argc > 7)
{
fputs("ERROR: pstops job-id user title copies options [file]\n", stderr);
return (1);
}
/*
* If we have 7 arguments, print the file named on the command-line.
* Otherwise, send stdin instead...
*/
if (argc == 6)
fp = stdin;
else
{
/*
* Try to open the print file...
*/
if ((fp = fopen(argv[6], "rb")) == NULL)
{
perror("ERROR: unable to open print file - ");
return (1);
}
}
/*
* Process command-line options and write the prolog...
*/
g = 1.0;
b = 1.0;
Copies = atoi(argv[4]);
ppd = ppdOpenFile(getenv("PPD"));
options = NULL;
num_options = cupsParseOptions(argv[5], 0, &options);
ppd = SetCommonOptions(num_options, options, 1);
ppdMarkDefaults(ppd);
cupsMarkOptions(ppd, num_options, options);
if ((val = cupsGetOption("page-ranges", num_options, options)) != NULL)
PageRanges = val;
if ((val = cupsGetOption("page-set", num_options, options)) != NULL)
PageSet = val;
if ((val = cupsGetOption("multiple-document-handling", num_options, options)) != NULL)
{
/*
* This IPP attribute is unnecessarily complicated...
*
* single-document, separate-documents-collated-copies, and
* single-document-new-sheet all require collated copies.
*
* separate-documents-collated-copies allows for uncollated copies.
*/
Collate = strcmp(val, "separate-documents-collated-copies") != 0;
}
if ((val = cupsGetOption("Collate", num_options, options)) != NULL &&
strcmp(val, "True") == 0)
Collate = 1;
if ((val = cupsGetOption("OutputOrder", num_options, options)) != NULL &&
strcmp(val, "Reverse") == 0)
Order = 1;
if ((val = cupsGetOption("number-up", num_options, options)) != NULL)
NUp = atoi(val);
if ((val = cupsGetOption("gamma", num_options, options)) != NULL)
g = atoi(val) * 0.001f;
if ((val = cupsGetOption("brightness", num_options, options)) != NULL)
b = atoi(val) * 0.01f;
/*
* See if we have to filter the fast or slow way...
*/
if (ppdFindOption(ppd, "Collate") == NULL && Collate && Copies > 1)
slowcollate = 1;
else
slowcollate = 0;
if (ppdFindOption(ppd, "OutputOrder") == NULL && Order)
sloworder = 1;
else
sloworder = 0;
/*
* If we need to filter slowly, then create a temporary file for page data...
*
* If the temp file can't be created, then we'll ignore the collating/output
* order options...
*/
if (sloworder || slowcollate)
{
temp = fopen(tmpnam(tempfile), "wb+");
if (temp == NULL)
slowcollate = sloworder = 0;
}
/*
* Write any "exit server" options that have been selected...
*/
ppdEmit(ppd, stdout, PPD_ORDER_EXIT);
/*
* Write any JCL commands that are needed to print PostScript code...
*/
if (ppd != NULL && ppd->jcl_begin && ppd->jcl_ps)
{
fputs(ppd->jcl_begin, stdout);
ppdEmit(ppd, stdout, PPD_ORDER_JCL);
fputs(ppd->jcl_ps, stdout);
}
/*
* Read the first line to see if we have DSC comments...
*/
if (psgets(line, sizeof(line), fp) == NULL)
{
fputs("ERROR: Empty print file!\n", stderr);
ppdClose(ppd);
return (1);
}
/*
* Start sending the document with any commands needed...
*/
puts(line);
if (ppd != NULL && ppd->patches != NULL)
puts(ppd->patches);
ppdEmit(ppd, stdout, PPD_ORDER_DOCUMENT);
ppdEmit(ppd, stdout, PPD_ORDER_ANY);
ppdEmit(ppd, stdout, PPD_ORDER_PROLOG);
if (NUp > 1)
puts("userdict begin\n"
"/ESPshowpage /showpage load def\n"
"/showpage { } def\n"
"end");
if (g != 1.0 || b != 1.0)
printf("{ neg 1 add dup 0 lt { pop 1 } { %.3f exp neg 1 add } "
"ifelse %.3f mul } bind settransfer\n", g, b);
if (Copies > 1 && (!Collate || !slowcollate))
printf("/#copies %d def\n", Copies);
if (strncmp(line, "%!PS-Adobe-", 11) == 0)
{
/*
* OK, we have DSC comments; read until we find a %%Page comment...
*/
level = 0;
while (psgets(line, sizeof(line), fp) != NULL)
if (strncmp(line, "%%BeginDocument:", 16) == 0 ||
strncmp(line, "%%BeginDocument ", 16) == 0) /* Adobe Acrobat BUG */
level ++;
else if (strcmp(line, "%%EndDocument") == 0)
level --;
else if (strncmp(line, "%%Page:", 7) == 0 && level == 0)
break;
else if (strncmp(line, "%%BeginBinary:", 14) == 0 ||
(strncmp(line, "%%BeginData:", 12) == 0 &&
strstr(line, "Binary") != NULL))
{
/*
* Copy binary data...
*/
tbytes = atoi(strchr(line, ':') + 1);
while (tbytes > 0)
{
nbytes = fread(line, 1, sizeof(line), fp);
fwrite(line, 1, nbytes, stdout);
tbytes -= nbytes;
}
}
else
puts(line);
/*
* Then read all of the pages, filtering as needed...
*/
for (;;)
{
if (strncmp(line, "%%BeginDocument:", 16) == 0 ||
strncmp(line, "%%BeginDocument ", 16) == 0) /* Adobe Acrobat BUG */
level ++;
else if (strcmp(line, "%%EndDocument") == 0)
level --;
else if (strncmp(line, "%%Page:", 7) == 0 && level == 0)
{
if (sscanf(line, "%*s%*s%d", &number) == 1)
{
if (!check_range(number))
{
while (psgets(line, sizeof(line), fp) != NULL)
if (strncmp(line, "%%BeginDocument:", 16) == 0 ||
strncmp(line, "%%BeginDocument ", 16) == 0) /* Adobe Acrobat BUG */
level ++;
else if (strcmp(line, "%%EndDocument") == 0)
level --;
else if (strncmp(line, "%%Page:", 7) == 0 && level == 0)
break;
continue;
}
if (!sloworder && NumPages > 0)
end_nup(NumPages - 1);
if (slowcollate || sloworder)
Pages[NumPages] = ftell(temp);
NumPages ++;
if (!sloworder)
{
if (ppd == NULL || ppd->num_filters == 0)
fprintf(stderr, "PAGE: %d %d\n", NumPages, Copies);
ppdEmit(ppd, stdout, PPD_ORDER_PAGE);
start_nup(NumPages - 1);
}
}
}
else if (strncmp(line, "%%BeginBinary:", 14) == 0 ||
(strncmp(line, "%%BeginData:", 12) == 0 &&
strstr(line, "Binary") != NULL))
{
/*
* Copy binary data...
*/
tbytes = atoi(strchr(line, ':') + 1);
while (tbytes > 0)
{
nbytes = fread(line, 1, sizeof(line), fp);
if (!sloworder)
fwrite(line, 1, nbytes, stdout);
if (slowcollate || sloworder)
fwrite(line, 1, nbytes, stdout);
tbytes -= nbytes;
}
}
else
{
if (!sloworder)
puts(line);
if (slowcollate || sloworder)
{
fputs(line, temp);
putc('\n', temp);
}
}
if (psgets(line, sizeof(line), fp) == NULL)
break;
}
if (!sloworder)
end_nup((NumPages + NUp - 1) & (NUp - 1));
if (slowcollate || sloworder)
{
Pages[NumPages] = ftell(temp);
if (!sloworder)
{
while (Copies > 1)
{
rewind(temp);
for (number = 0; number < NumPages; number ++)
{
if (ppd == NULL || ppd->num_filters == 0)
fprintf(stderr, "PAGE: %d 1\n", number + 1);
ppdEmit(ppd, stdout, PPD_ORDER_PAGE);
start_nup(number);
copy_bytes(temp, Pages[number + 1] - Pages[number]);
end_nup(number);
}
Copies --;
}
}
else
{
do
{
for (number = NumPages - 1; number >= 0; number --)
{
if (ppd == NULL || ppd->num_filters == 0)
fprintf(stderr, "PAGE: %d %d\n", NumPages - number,
slowcollate ? 1 : Copies);
ppdEmit(ppd, stdout, PPD_ORDER_PAGE);
start_nup(NumPages - 1 - number);
fseek(temp, Pages[number], SEEK_SET);
copy_bytes(temp, Pages[number + 1] - Pages[number]);
end_nup(NumPages - 1 - number);
}
Copies --;
}
while (Copies > 0 || !slowcollate);
}
}
}
else
{
/*
* No DSC comments - write any page commands and then the rest of the file...
*/
if (ppd == NULL || ppd->num_filters == 0)
fprintf(stderr, "PAGE: 1 %d\n", slowcollate ? 1 : Copies);
ppdEmit(ppd, stdout, PPD_ORDER_PAGE);
while (psgets(line, sizeof(line), fp) != NULL)
{
puts(line);
if (slowcollate)
{
fputs(line, temp);
putc('\n', temp);
}
}
if (slowcollate)
{
while (Copies > 1)
{
if (ppd == NULL || ppd->num_filters == 0)
fputs("PAGE: 1 1\n", stderr);
ppdEmit(ppd, stdout, PPD_ORDER_PAGE);
rewind(temp);
copy_bytes(temp, 0);
}
}
}
/*
* End the job with the appropriate JCL command or CTRL-D otherwise.
*/
if (ppd != NULL && ppd->jcl_end)
fputs(ppd->jcl_end, stdout);
else
putchar(0x04);
/*
* Close files and remove the temporary file if needed...
*/
if (slowcollate || sloworder)
{
fclose(temp);
unlink(tempfile);
}
ppdClose(ppd);
if (fp != stdin)
fclose(fp);
return (0);
}
/*
* 'check_range()' - Check to see if the current page is selected for
* printing.
*/
static int /* O - 1 if selected, 0 otherwise */
check_range(int page) /* I - Page number */
{
const char *range; /* Pointer into range string */
int lower, upper; /* Lower and upper page numbers */
if (PageSet != NULL)
{
/*
* See if we only print even or odd pages...
*/
if (strcmp(PageSet, "even") == 0 && (page & 1))
return (0);
if (strcmp(PageSet, "odd") == 0 && !(page & 1))
return (0);
}
if (PageRanges == NULL)
return (1); /* No range, print all pages... */
for (range = PageRanges; *range != '\0';)
{
if (*range == '-')
{
lower = 1;
range ++;
upper = strtol(range, (char **)&range, 10);
}
else
{
lower = strtol(range, (char **)&range, 10);
if (*range == '-')
{
range ++;
if (!isdigit(*range))
upper = 65535;
else
upper = strtol(range, (char **)&range, 10);
}
else
upper = lower;
}
if (page >= lower && page <= upper)
return (1);
if (*range == ',')
range ++;
else
break;
}
return (0);
}
/*
* 'copy_bytes()' - Copy bytes from the input file to stdout...
*/
static void
copy_bytes(FILE *fp, /* I - File to read from */
size_t length) /* I - Length of page data */
{
char buffer[8192]; /* Data buffer */
size_t nbytes, /* Number of bytes read */
nleft; /* Number of bytes left/remaining */
nleft = length;
while (nleft > 0 || length == 0)
{
if ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) < 1)
return;
nleft -= nbytes;
fwrite(buffer, 1, nbytes, stdout);
}
}
/*
* 'end_nup()' - End processing for N-up printing...
*/
static void
end_nup(int number) /* I - Page number */
{
puts("grestore");
switch (NUp)
{
case 2 :
if ((number & 1) == 1)
puts("ESPshowpage");
break;
case 4 :
if ((number & 3) == 3)
puts("ESPshowpage");
break;
}
}
/*
* 'psgets()' - Get a line from a file.
*
* Note:
*
* This function differs from the gets() function in that it
* handles any combination of CR, LF, or CR LF to end input
* lines.
*/
static char * /* O - String or NULL if EOF */
psgets(char *buf, /* I - Buffer to read into */
size_t len, /* I - Length of buffer */
FILE *fp) /* I - File to read from */
{
char *bufptr; /* Pointer into buffer */
int ch; /* Character from file */
len --;
bufptr = buf;
while ((bufptr - buf) < len)
{
if ((ch = getc(fp)) == EOF)
break;
if (ch == 0x0d)
{
/*
* Got a CR; see if there is a LF as well...
*/
ch = getc(fp);
if (ch != EOF && ch != 0x0a)
ungetc(ch, fp); /* Nope, save it for later... */
break;
}
else if (ch == 0x0a)
break;
else
*bufptr++ = ch;
}
/*
* Nul-terminate the string and return it (or NULL for EOF).
*/
*bufptr = '\0';
if (ch == EOF && bufptr == buf)
return (NULL);
else
return (buf);
}
/*
* 'start_nup()' - Start processing for N-up printing...
*/
static void
start_nup(int number) /* I - Page number */
{
int x, y; /* Relative position of subpage */
float w, l, /* Width and length of subpage */
tx, ty; /* Translation values for subpage */
puts("gsave");
if (Flip)
printf("%.0f 0 translate -1 1 scale\n", PageWidth);
switch (Orientation)
{
case 1 : /* Landscape */
printf("%.0f 0 translate 90 rotate\n", PageLength);
break;
case 2 : /* Reverse Portrait */
printf("%.0f %.0f translate 180 rotate\n", PageWidth, PageLength);
break;
case 3 : /* Reverse Landscape */
printf("0 %.0f translate -90 rotate\n", PageWidth);
break;
}
switch (NUp)
{
case 2 :
x = number & 1;
if (Orientation & 1)
{
x = 1 - x;
w = PageLength;
l = w * PageLength / PageWidth;
if (l > (PageWidth * 0.5))
{
l = PageWidth * 0.5;
w = l * PageWidth / PageLength;
}
tx = PageWidth * 0.5 - l;
ty = (PageLength - w) * 0.5;
}
else
{
l = PageWidth;
w = l * PageWidth / PageLength;
if (w > (PageLength * 0.5))
{
w = PageLength * 0.5;
l = w * PageLength / PageWidth;
}
tx = PageLength * 0.5 - w;
ty = (PageWidth - l) * 0.5;
}
if (Orientation & 1)
{
printf("0 %.0f translate -90 rotate\n", PageLength);
printf("%.0f %.0f translate %.3f %.3f scale\n",
ty, tx + l * x, w / PageWidth, l / PageLength);
}
else
{
printf("%.0f 0 translate 90 rotate\n", PageWidth);
printf("%.0f %.0f translate %.3f %.3f scale\n",
tx + w * x, ty, w / PageWidth, l / PageLength);
}
printf("newpath\n"
"0 0 moveto\n"
"%.0f 0 lineto\n"
"%.0f %.0f lineto\n"
"0 %.0f lineto\n"
"closepath clip newpath\n",
PageWidth, PageWidth, PageLength, PageLength);
break;
case 4 :
x = number & 1;
y = 1 - ((number & 2) != 0);
w = PageWidth * 0.5;
l = PageLength * 0.5;
printf("%.0f %.0f translate 0.5 0.5 scale\n", x * w, y * l);
printf("newpath\n"
"0 0 moveto\n"
"%.0f 0 lineto\n"
"%.0f %.0f lineto\n"
"0 %.0f lineto\n"
"closepath clip newpath\n",
PageWidth, PageWidth, PageLength, PageLength);
break;
}
}
/*
* End of "$Id$".
*/
-107
Ver Arquivo
@@ -1,107 +0,0 @@
# Microsoft Developer Studio Project File - Name="pstops" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=pstops - 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 "pstops.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 "pstops.mak" CFG="pstops - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "pstops - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "pstops - 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)" == "pstops - 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/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:"pstops.exe"
!ELSEIF "$(CFG)" == "pstops - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "pstops___Win32_Debug"
# PROP BASE Intermediate_Dir "pstops___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 ../cups/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 /incremental:no /debug /machine:I386 /out:"pstopsd.exe" /pdbtype:sept
!ENDIF
# Begin Target
# Name "pstops - Win32 Release"
# Name "pstops - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\pstops.c
!IF "$(CFG)" == "pstops - Win32 Release"
!ELSEIF "$(CFG)" == "pstops - Win32 Debug"
# ADD CPP /Zi
!ENDIF
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# End Group
# End Target
# End Project
-493
Ver Arquivo
@@ -1,493 +0,0 @@
/*
* "$Id$"
*
* Hewlett-Packard Page Control Language and Raster Transfer Language
* filter for ESP Print.
*
* Copyright 1993-1999 by Easy Software Products
*
* These coded instructions, statements, and computer programs contain
* unpublished proprietary information of Easy Software Products, and
* are protected by Federal copyright law. They may not be disclosed
* to third parties or copied or duplicated in any form, in whole or
* in part, without the prior written consent of Easy Software Products.
*
* Contents:
*
*/
/*
* Include necessary headers...
*/
#include <cups/cups.h>
#include <cups/raster.h>
#include <cups/string.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
/*
* Globals...
*/
unsigned char *Planes[4], /* Output buffers */
*CompBuffer; /* Compression buffer */
int NumPlanes, /* Number of color planes */
Feed; /* Number of lines to skip */
/*
* Prototypes...
*/
void Setup(void);
void StartPage(cups_page_header_t *header);
void EndPage(cups_page_header_t *header);
void Shutdown(void);
void CompressData(unsigned char *line, int length, int plane, int type);
void OutputLine(cups_page_header_t *header);
/*
* 'Setup()' - Prepare the printer for printing.
*/
void
Setup(void)
{
/*
* Send a PCL reset sequence.
*/
putchar(0x1b);
putchar('E');
}
/*
* 'StartPage()' - Start a page of graphics.
*/
void
StartPage(cups_page_header_t *header) /* I - Page header */
{
int plane; /* Looping var */
/*
* Set the media type, position, and size...
*/
printf("\033&l6D\033&k12H"); /* Set 6 LPI, 10 CPI */
printf("\033&l%.2fP", /* Set page length */
header->PageSize[1] / 12.0);
printf("\033&l%dX", header->NumCopies); /* Set number copies */
if (header->MediaPosition)
printf("\033&l%dH", header->MediaPosition); /* Set media position */
if (header->cupsMediaType)
printf("\033&l%dM", /* Set media type */
header->cupsMediaType);
/*
* Set graphics mode...
*/
if (header->cupsColorSpace == CUPS_CSPACE_KCMY)
{
NumPlanes = 4;
printf("\033*r-4U"); /* Set KCMY graphics */
}
else
NumPlanes = 1;
printf("\033*t%dR", header->HWResolution[0]); /* Set resolution */
printf("\033*r%dS", header->cupsWidth); /* Set width */
printf("\033*r%dT", header->cupsHeight); /* Set height */
printf("\033&a0H\033&a0V"); /* Set top-of-page */
printf("\033*r1A"); /* Start graphics */
if (header->cupsCompression)
printf("\033*b%dM", /* Set compression */
header->cupsCompression);
Feed = 0; /* No blank lines yet */
/*
* Allocate memory for a line of graphics...
*/
Planes[0] = malloc(header->cupsBytesPerLine);
for (plane = 1; plane < NumPlanes; plane ++)
Planes[plane] = Planes[0] + plane * header->cupsBytesPerLine / NumPlanes;
if (header->cupsCompression)
CompBuffer = malloc(header->cupsBytesPerLine * 2);
}
/*
* 'EndPage()' - Finish a page of graphics.
*/
void
EndPage(cups_page_header_t *header) /* I - Page header */
{
/*
* Eject the current page...
*/
if (NumPlanes > 1)
{
printf("\033*rC"); /* End color GFX */
printf("\033&l0H"); /* Eject current page */
}
else
{
printf("\033*r0B"); /* End GFX */
printf("\014"); /* Eject currnet page */
}
/*
* Free memory...
*/
free(Planes[0]);
if (header->cupsCompression)
free(CompBuffer);
}
/*
* 'Shutdown()' - Shutdown the printer.
*/
void
Shutdown(void)
{
/*
* Send a PCL reset sequence.
*/
putchar(0x1b);
putchar('E');
}
/*
* 'CompressData()' - Compress a line of graphics.
*/
void
CompressData(unsigned char *line, /* I - Data to compress */
int length, /* I - Number of bytes */
int plane, /* I - Color plane */
int type) /* I - Type of compression */
{
unsigned char *line_ptr, /* Current byte pointer */
*line_end, /* End-of-line byte pointer */
*comp_ptr, /* Pointer into compression buffer */
*start; /* Start of compression sequence */
int count; /* Count of bytes for output */
switch (type)
{
case 0 :
/*
* Do no compression...
*/
line_ptr = line;
line_end = line + length;
break;
case 1 :
/*
* Do run-length encoding...
*/
line_end = line + length;
for (line_ptr = line, comp_ptr = CompBuffer;
line_ptr < line_end;
comp_ptr += 2, line_ptr += count)
{
for (count = 1;
(line_ptr + count) < line_end &&
line_ptr[0] == line_ptr[count] &&
count < 256;
count ++);
comp_ptr[0] = count - 1;
comp_ptr[1] = line_ptr[0];
}
line_ptr = CompBuffer;
line_end = comp_ptr;
break;
case 2 :
/*
* Do TIFF pack-bits encoding...
*/
line_ptr = line;
line_end = line + length;
comp_ptr = CompBuffer;
while (line_ptr < line_end)
{
if ((line_ptr + 1) >= line_end)
{
/*
* Single byte on the end...
*/
*comp_ptr++ = 0x00;
*comp_ptr++ = *line_ptr++;
}
else if (line_ptr[0] == line_ptr[1])
{
/*
* Repeated sequence...
*/
line_ptr ++;
count = 2;
while (line_ptr < (line_end - 1) &&
line_ptr[0] == line_ptr[1] &&
count < 127)
{
line_ptr ++;
count ++;
}
*comp_ptr++ = 257 - count;
*comp_ptr++ = *line_ptr++;
}
else
{
/*
* Non-repeated sequence...
*/
start = line_ptr;
line_ptr ++;
count = 1;
while (line_ptr < (line_end - 1) &&
line_ptr[0] != line_ptr[1] &&
count < 127)
{
line_ptr ++;
count ++;
}
*comp_ptr++ = count - 1;
memcpy(comp_ptr, start, count);
comp_ptr += count;
}
}
line_ptr = CompBuffer;
line_end = comp_ptr;
break;
}
/*
* Set the length of the data and write a raster plane...
*/
printf("\033*b%d%c", line_end - line_ptr, plane);
fwrite(line_ptr, line_end - line_ptr, 1, stdout);
}
/*
* 'OutputLine()' - Output a line of graphics.
*/
void
OutputLine(cups_page_header_t *header) /* I - Page header */
{
int plane; /* Current plane */
/*
* Output whitespace as needed...
*/
if (Feed > 0)
{
printf("\033*b%dY", Feed);
Feed = 0;
}
/*
* Write bitmap data as needed...
*/
for (plane = 0; plane < NumPlanes; plane ++)
CompressData(Planes[plane], header->cupsBytesPerLine / NumPlanes,
plane < (NumPlanes - 1) ? 'V' : 'W',
header->cupsCompression);
}
/*
* 'main()' - Main entry and processing of driver.
*/
int /* O - Exit status */
main(int argc, /* I - Number of command-line arguments */
char *argv[]) /* I - Command-line arguments */
{
int fd; /* File descriptor */
cups_raster_t *ras; /* Raster stream for printing */
cups_page_header_t header; /* Page header from file */
int page; /* Current page */
int y; /* Current line */
/*
* Check for valid arguments...
*/
if (argc < 6 || argc > 7)
{
/*
* We don't have the correct number of arguments; write an error message
* and then sleep for 1 second to give the scheduler a chance to read
* the message.
*/
fputs("ERROR: rastertopcl job-id user title copies options [file]\n", stderr);
sleep(1);
return (1);
}
/*
* Open the page stream...
*/
if (argc == 7)
{
if ((fd = open(argv[6], O_RDONLY)) == -1)
{
perror("ERROR: Unable to open raster file - ");
sleep(1);
return (1);
}
}
else
fd = 0;
ras = cupsRasterOpen(fd, CUPS_RASTER_READ);
/*
* Initialize the print device...
*/
Setup();
/*
* Process pages as needed...
*/
page = 0;
while (cupsRasterReadHeader(ras, &header))
{
/*
* Write a status message with the page number and number of copies.
*/
page ++;
fprintf(stderr, "PAGE: %d %d\n", page, header.NumCopies);
/*
* Start the page...
*/
StartPage(&header);
/*
* Loop for each line on the page...
*/
for (y = 0; y < header.cupsHeight; y ++)
{
/*
* Let the user know how far we have progressed...
*/
if ((y & 127) == 0)
fprintf(stderr, "INFO: Printing page %d, %d%% complete...\n", page,
100 * y / header.cupsHeight);
/*
* Read a line of graphics...
*/
if (cupsRasterReadPixels(ras, Planes[0], header.cupsBytesPerLine) < 1)
break;
/*
* See if the line is blank; if not, write it to the printer...
*/
if (Planes[0][0] ||
memcmp(Planes[0], Planes[0] + 1, header.cupsBytesPerLine - 1))
OutputLine(&header);
else
Feed ++;
}
/*
* Eject the page...
*/
EndPage(&header);
}
/*
* Shutdown the printer...
*/
Shutdown();
/*
* Close the raster stream...
*/
cupsRasterClose(ras);
if (fd != 0)
close(fd);
/*
* If no pages were printed, send an error message...
*/
if (page == 0)
fputs("ERROR: No pages found!\n", stderr);
else
fputs("INFO: Ready to print.\n", stderr);
/*
* Sleep for 1 second and return...
*/
sleep(1);
return (page == 0);
}
/*
* End of "$Id$".
*/
-707
Ver Arquivo
@@ -1,707 +0,0 @@
/*
* "$Id$"
*
* Common text filter 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:
*
* TextMain() - Standard main entry for text filters.
* compare_keywords() - Compare two C/C++ keywords.
* getutf8() - Get a UTF-8 encoded wide character...
*/
/*
* Include necessary headers...
*/
#include "textcommon.h"
/*
* Globals...
*/
int WrapLines = 0, /* Wrap text in lines */
SizeLines = 60, /* Number of lines on a page */
SizeColumns = 80, /* Number of columns on a line */
PageColumns = 1, /* Number of columns on a page */
ColumnGutter = 0, /* Number of characters between text columns */
ColumnWidth = 80, /* Width of each column */
PrettyPrint = 0; /* Do pretty code formatting */
lchar_t **Page = NULL; /* Page characters */
int NumPages = 0; /* Number of pages in document */
int CharsPerInch = 10; /* Number of character columns per inch */
int LinesPerInch = 6; /* Number of lines per inch */
int UTF8 = 0; /* Use UTF-8 encoding? */
char *Keywords[] = /* List of known keywords... */
{
"auto",
"break",
"case",
"char",
"class",
"const",
"continue",
"default",
"delete",
"double",
"do",
"else",
"enum",
"extern",
"float",
"for",
"friend",
"goto",
"if",
"int",
"long",
"new",
"private",
"protected",
"public",
"register",
"return",
"short",
"signed",
"sizeof",
"static",
"struct",
"switch",
"typedef",
"union",
"unsigned",
"void",
"volatile",
"while"
};
/*
* Local functions...
*/
static int compare_keywords(const void *, const void *);
static int getutf8(FILE *fp);
/*
* 'TextMain()' - Standard main entry for text filters.
*/
int /* O - Exit status */
TextMain(char *name, /* I - Name of filter */
int argc, /* I - Number of command-line arguments */
char *argv[]) /* I - Command-line arguments */
{
FILE *fp; /* Print file */
ppd_file_t *ppd; /* PPD file */
int i, /* Looping var */
ch, /* Current char from file */
lastch, /* Previous char from file */
attr, /* Current attribute */
line, /* Current line */
column, /* Current column */
page_column; /* Current page column */
int num_options; /* Number of print options */
cups_option_t *options; /* Print options */
const char *val; /* Option value */
char keyword[64], /* Keyword string */
*keyptr; /* Pointer into string */
int keycol; /* Column where keyword starts */
int ccomment; /* Inside a C-style comment? */
int cstring; /* Inside a C string */
if (argc < 6 || argc > 7)
{
fprintf(stderr, "ERROR: %s job-id user title copies options [file]\n",
name);
return (1);
}
/*
* If we have 7 arguments, print the file named on the command-line.
* Otherwise, send stdin instead...
*/
if (argc == 6)
fp = stdin;
else
{
/*
* Try to open the print file...
*/
if ((fp = fopen(argv[6], "rb")) == NULL)
{
perror("ERROR: unable to open print file - ");
return (1);
}
}
/*
* Process command-line options and write the prolog...
*/
options = NULL;
num_options = cupsParseOptions(argv[5], 0, &options);
if ((ppd = SetCommonOptions(num_options, options, 1)) != NULL)
ppdClose(ppd);
WrapLines = cupsGetOption("wrap", num_options, options) != NULL;
if ((val = cupsGetOption("columns", num_options, options)) != NULL)
PageColumns = atoi(val);
if ((val = cupsGetOption("cpi", num_options, options)) != NULL)
CharsPerInch = atoi(val);
if ((val = cupsGetOption("lpi", num_options, options)) != NULL)
LinesPerInch = atoi(val);
if ((val = cupsGetOption("prettyprint", num_options, options)) != NULL)
{
PrettyPrint = 1;
PageTop -= 216.0f / LinesPerInch;
}
WriteProlog(argv[3], argv[2]);
/*
* Read text from the specified source and print it...
*/
column = 0;
line = 0;
page_column = 0;
attr = 0;
keyptr = keyword;
keycol = 0;
ccomment = 0;
cstring = 0;
while ((ch = getutf8(fp)) >= 0)
{
/*
* Control codes:
*
* BS Backspace (0x08)
* HT Horizontal tab; next 8th column (0x09)
* LF Line feed; forward full line (0x0a)
* VT Vertical tab; reverse full line (0x0b)
* FF Form feed (0x0c)
* CR Carriage return (0x0d)
* ESC 7 Reverse full line (0x1b 0x37)
* ESC 8 Reverse half line (0x1b 0x38)
* ESC 9 Forward half line (0x1b 0x39)
*/
switch (ch)
{
case 0x08 : /* BS - backspace for boldface & underline */
if (column > 0)
column --;
keyptr = keyword;
keycol = column;
break;
case 0x09 : /* HT - tab to next 8th column */
if (PrettyPrint && keyptr > keyword)
{
*keyptr = '\0';
keyptr = keyword;
if (bsearch(&keyptr, Keywords, sizeof(Keywords) / sizeof(Keywords[0]),
sizeof(Keywords[0]), compare_keywords))
{
/*
* Put keywords in boldface...
*/
i = page_column * (ColumnWidth + ColumnGutter);
while (keycol < column)
{
Page[line][keycol + i].attr |= ATTR_BOLD;
keycol ++;
}
}
}
column = (column + 8) & ~7;
if (column >= ColumnWidth && WrapLines)
{ /* Wrap text to margins */
line ++;
column = 0;
if (line >= SizeLines)
{
page_column ++;
line = 0;
if (page_column >= PageColumns)
{
WritePage();
page_column = 0;
}
}
}
keycol = column;
break;
case 0x0a : /* LF - output current line */
if (PrettyPrint && keyptr > keyword)
{
*keyptr = '\0';
keyptr = keyword;
if (bsearch(&keyptr, Keywords, sizeof(Keywords) / sizeof(Keywords[0]),
sizeof(Keywords[0]), compare_keywords))
{
/*
* Put keywords in boldface...
*/
i = page_column * (ColumnWidth + ColumnGutter);
while (keycol < column)
{
Page[line][keycol + i].attr |= ATTR_BOLD;
keycol ++;
}
}
}
line ++;
column = 0;
keycol = 0;
if (!ccomment && !cstring)
attr &= ~(ATTR_ITALIC | ATTR_BOLD | ATTR_RED | ATTR_GREEN | ATTR_BLUE);
if (line >= SizeLines)
{
page_column ++;
line = 0;
if (page_column >= PageColumns)
{
WritePage();
page_column = 0;
}
}
break;
case 0x0b : /* VT - move up 1 line */
if (line > 0)
line --;
keyptr = keyword;
keycol = column;
if (!ccomment && !cstring)
attr &= ~(ATTR_ITALIC | ATTR_BOLD | ATTR_RED | ATTR_GREEN | ATTR_BLUE);
break;
case 0x0c : /* FF - eject current page... */
if (PrettyPrint && keyptr > keyword)
{
*keyptr = '\0';
keyptr = keyword;
if (bsearch(&keyptr, Keywords, sizeof(Keywords) / sizeof(Keywords[0]),
sizeof(Keywords[0]), compare_keywords))
{
/*
* Put keywords in boldface...
*/
i = page_column * (ColumnWidth + ColumnGutter);
while (keycol < column)
{
Page[line][keycol + i].attr |= ATTR_BOLD;
keycol ++;
}
}
}
page_column ++;
column = 0;
keycol = 0;
line = 0;
if (!ccomment && !cstring)
attr &= ~(ATTR_ITALIC | ATTR_BOLD | ATTR_RED | ATTR_GREEN | ATTR_BLUE);
if (page_column >= PageColumns)
{
WritePage();
page_column = 0;
}
break;
case 0x0d : /* CR */
column = 0;
break;
case 0x1b : /* Escape sequence */
ch = getutf8(fp);
if (ch == '7')
{
/*
* ESC 7 Reverse full line (0x1b 0x37)
*/
if (line > 0)
line --;
}
else if (ch == '8')
{
/*
* ESC 8 Reverse half line (0x1b 0x38)
*/
if ((attr & ATTR_RAISED) && line > 0)
{
attr &= ~ATTR_RAISED;
line --;
}
else if (attr & ATTR_LOWERED)
attr &= ~ATTR_LOWERED;
else
attr |= ATTR_RAISED;
}
else if (ch == '9')
{
/*
* ESC 9 Forward half line (0x1b 0x39)
*/
if ((attr & ATTR_LOWERED) && line < (SizeLines - 1))
{
attr &= ~ATTR_LOWERED;
line ++;
}
else if (attr & ATTR_RAISED)
attr &= ~ATTR_RAISED;
else
attr |= ATTR_LOWERED;
}
break;
default : /* All others... */
if (ch < ' ')
break; /* Ignore other control chars */
if (PrettyPrint)
{
/*
* Do highlighting of C/C++ keywords, preprocessor commands,
* and comments...
*/
if ((ch == ' ' || ch == '\t') && (attr & ATTR_BOLD))
{
/*
* Stop bolding preprocessor command...
*/
attr &= ~ATTR_BOLD;
}
else if (!(isalnum(ch) || ch == '_') && keyptr > keyword)
{
/*
* Look for a keyword...
*/
*keyptr = '\0';
keyptr = keyword;
if (!(attr & ATTR_ITALIC) &&
bsearch(&keyptr, Keywords, sizeof(Keywords) / sizeof(Keywords[0]),
sizeof(Keywords[0]), compare_keywords))
{
/*
* Put keywords in boldface...
*/
i = page_column * (ColumnWidth + ColumnGutter);
while (keycol < column)
{
Page[line][keycol + i].attr |= ATTR_BOLD;
keycol ++;
}
}
}
else if ((isalnum(ch) || ch == '_') && !ccomment && !cstring)
{
/*
* Add characters to the current keyword (if they'll fit).
*/
if (keyptr == keyword)
keycol = column;
if (keyptr < (keyword + sizeof(keyword) - 1))
*keyptr++ = ch;
}
else if (ch == '\"' && lastch != '\\' && !ccomment && !cstring)
{
/*
* Start a C string constant...
*/
cstring = -1;
attr |= ATTR_BLUE;
}
else if (ch == '*' && lastch == '/' && !cstring)
{
/*
* Start a C-style comment...
*/
ccomment = 1;
attr |= ATTR_ITALIC | ATTR_GREEN;
}
else if (ch == '/' && lastch == '/' && !cstring)
{
/*
* Start a C++-style comment...
*/
attr |= ATTR_ITALIC | ATTR_GREEN;
}
else if (ch == '#' && column == 0 && !ccomment && !cstring)
{
/*
* Start a preprocessor command...
*/
attr |= ATTR_BOLD | ATTR_RED;
}
}
if (column >= ColumnWidth && WrapLines)
{ /* Wrap text to margins */
column = 0;
line ++;
if (line >= SizeLines)
{
page_column ++;
line = 0;
if (page_column >= PageColumns)
{
WritePage();
page_column = 0;
}
}
}
/*
* Add text to the current column & line...
*/
if (column < ColumnWidth)
{
i = column + page_column * (ColumnWidth + ColumnGutter);
if (PrettyPrint)
Page[line][i].attr = attr;
else if (ch == Page[line][i].ch)
Page[line][i].attr |= ATTR_BOLD;
else if (Page[line][i].ch == '_')
Page[line][i].attr |= ATTR_UNDERLINE;
else
Page[line][i].attr = attr;
Page[line][i].ch = ch;
}
if (PrettyPrint)
{
if ((ch == '{' || ch == '}') && !ccomment && !cstring &&
column < ColumnWidth)
{
/*
* Highlight curley braces...
*/
Page[line][i].attr |= ATTR_BOLD;
}
else if ((ch == '/' || ch == '*') && lastch == '/' &&
column < ColumnWidth)
{
/*
* Highlight first comment character...
*/
Page[line][i - 1].attr = attr;
}
else if (ch == '\"' && lastch != '\\' && !ccomment && cstring > 0)
{
/*
* End a C string constant...
*/
cstring = 0;
attr &= ~ATTR_BLUE;
}
else if (ch == '/' && lastch == '*' && ccomment)
{
/*
* End a C-style comment...
*/
ccomment = 0;
attr &= ~(ATTR_ITALIC | ATTR_GREEN);
}
if (cstring < 0)
cstring = 1;
}
column ++;
break;
}
/*
* Save this character for the next cycle.
*/
lastch = ch;
}
/*
* Write any remaining page data...
*/
if (line > 0 || page_column > 0 || column > 0)
WritePage();
/*
* Write the epilog and return...
*/
WriteEpilogue();
return (0);
}
/*
* 'compare_keywords()' - Compare two C/C++ keywords.
*/
static int /* O - Result of strcmp */
compare_keywords(const void *k1, /* I - First keyword */
const void *k2) /* I - Second keyword */
{
return (strcmp(*((const char **)k1), *((const char **)k2)));
}
/*
* 'getutf8()' - Get a UTF-8 encoded wide character...
*/
static int /* O - Character or -1 on error */
getutf8(FILE *fp) /* I - File to read from */
{
int ch; /* Current character value */
int next; /* Next character from file */
/*
* Read the first character and process things accordingly...
*
* UTF-8 maps 16-bit characters to:
*
* 0 to 127 = 0xxxxxxx
* 128 to 2047 = 110xxxxx 10yyyyyy (xxxxxyyyyyy)
* 2048 to 65535 = 1110xxxx 10yyyyyy 10zzzzzz (xxxxyyyyyyzzzzzz)
*
* We also accept:
*
* 128 to 191 = 10xxxxxx
*
* since this range of values is otherwise undefined unless you are
* in the middle of a multi-byte character...
*
* This code currently does not support anything beyond 16-bit
* characters, in part because PostScript doesn't support more than
* 16-bit characters...
*/
if ((ch = getc(fp)) == EOF)
return (EOF);
if (ch < 0xc0 || !UTF8) /* One byte character? */
return (ch);
else if ((ch & 0xe0) == 0xc0)
{
/*
* Two byte character...
*/
if ((next = getc(fp)) == EOF)
return (EOF);
else
return (((ch & 0x1f) << 6) | (next & 0x3f));
}
else if ((ch & 0xf0) == 0xe0)
{
/*
* Three byte character...
*/
if ((next = getc(fp)) == EOF)
return (EOF);
ch = ((ch & 0x0f) << 6) | (next & 0x3f);
if ((next = getc(fp)) == EOF)
return (EOF);
else
return ((ch << 6) | (next & 0x3f));
}
else
{
/*
* More than three bytes... We don't support that...
*/
return (EOF);
}
}
/*
* End of "$Id$".
*/
-88
Ver Arquivo
@@ -1,88 +0,0 @@
/*
* "$Id$"
*
* Common text filter 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
*/
/*
* Include necessary headers...
*/
#include "common.h"
/*
* Constants...
*/
#define ATTR_BOLD 0x01
#define ATTR_UNDERLINE 0x02
#define ATTR_RAISED 0x04
#define ATTR_LOWERED 0x08
#define ATTR_ITALIC 0x10
#define ATTR_RED 0x20
#define ATTR_GREEN 0x40
#define ATTR_BLUE 0x80
/*
* Structures...
*/
typedef struct /**** Character/attribute structure... ****/
{
unsigned short ch, /* Character */
attr; /* Any attributes */
} lchar_t;
/*
* Globals...
*/
extern int WrapLines, /* Wrap text in lines */
SizeLines, /* Number of lines on a page */
SizeColumns, /* Number of columns on a line */
PageColumns, /* Number of columns on a page */
ColumnGutter, /* Number of characters between text columns */
ColumnWidth, /* Width of each column */
PrettyPrint; /* Do pretty code formatting */
extern lchar_t **Page; /* Page characters */
extern int NumPages; /* Number of pages in document */
extern int CharsPerInch, /* Number of character columns per inch */
LinesPerInch, /* Number of lines per inch */
UTF8; /* Use UTF-8 encoding? */
extern char *Keywords[]; /* List of known keywords... */
/*
* Required functions...
*/
extern int TextMain(char *name, int argc, char *argv[]);
extern void WriteEpilogue(void);
extern void WritePage(void);
extern void WriteProlog(char *title, char *user);
/*
* End of "$Id$".
*/
-569
Ver Arquivo
@@ -1,569 +0,0 @@
/*
* "$Id$"
*
* Text to PostScript filter for the Common UNIX Printing System (CUPS).
*
* Copyright 1993-1999 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* Contents:
*
* main() - Main entry for text to PostScript filter.
* WriteEpilogue() - Write the PostScript file epilogue.
* WritePage() - Write a page of text.
* WriteProlog() - Write the PostScript file prolog with options.
* write_line() - Write a row of text.
* write_string() - Write a string of text.
*/
/*
* Include necessary headers...
*/
#include "textcommon.h"
/*
* Globals...
*/
char *Glyphs[65536]; /* PostScript glyphs for Unicode */
/*
* Local functions...
*/
static void write_line(int row, lchar_t *line);
static void write_string(int col, int row, int len, lchar_t *s);
/*
* 'main()' - Main entry for text to PostScript filter.
*/
int /* O - Exit status */
main(int argc, /* I - Number of command-line arguments */
char *argv[]) /* I - Command-line arguments */
{
return (TextMain("texttops", argc, argv));
}
/*
* 'WriteEpilogue()' - Write the PostScript file epilogue.
*/
void
WriteEpilogue(void)
{
puts("%%BeginTrailer");
printf("%%%%Pages: %d\n", NumPages);
puts("%%EOF");
free(Page[0]);
free(Page);
}
/*
* 'WritePage()' - Write a page of text.
*/
void
WritePage(void)
{
int line; /* Current line */
NumPages ++;
printf("%%%%Page: %d %d\n", NumPages, NumPages);
puts("gsave");
if (PrettyPrint)
printf("%d H\n", NumPages);
for (line = 0; line < SizeLines; line ++)
write_line(line, Page[line]);
puts("grestore");
puts("showpage");
memset(Page[0], 0, sizeof(lchar_t) * SizeColumns * SizeLines);
}
/*
* 'WriteProlog()' - Write the PostScript file prolog with options.
*/
void
WriteProlog(char *title, /* I - Title of job */
char *user) /* I - Username */
{
int line; /* Current output line */
char *charset; /* Character set string */
char filename[1024]; /* Glyph filenames */
FILE *fp; /* Glyph files */
int ch, unicode; /* Character values */
char glyph[64]; /* Glyph name */
int chars[256]; /* Character encoding array */
time_t curtime; /* Current time */
struct tm *curtm; /* Current date */
char curdate[255]; /* Current date (text format) */
curtime = time(NULL);
curtm = localtime(&curtime);
strftime(curdate, sizeof(curdate), "%c", curtm);
puts("%!PS-Adobe-3.0");
printf("%%%%BoundingBox: %.0f %.0f %.0f %.0f\n", PageLeft, PageBottom,
PageRight, PageTop);
if (Orientation & 1)
puts("%%Orientation: Landscape");
puts("%%Creator: texttops/" CUPS_SVERSION);
printf("%%%%CreationDate: %s\n", curdate);
printf("%%%%Title: %s\n", title);
printf("%%%%For: %s\n", user);
if (PrettyPrint)
puts("%%DocumentNeededResources: font Courier Courier-Bold Courier-Oblique");
else
puts("%%DocumentNeededResources: font Courier Courier-Bold");
puts("%%DocumentSuppliedResources: procset texttops 1.0 0");
puts("%%Pages: (atend)");
puts("%%EndComments");
SizeColumns = (PageRight - PageLeft) / 72.0 * CharsPerInch;
SizeLines = (PageTop - PageBottom) / 72.0 * LinesPerInch;
Page = calloc(sizeof(lchar_t *), SizeLines);
Page[0] = calloc(sizeof(lchar_t), SizeColumns * SizeLines);
for (line = 1; line < SizeLines; line ++)
Page[line] = Page[0] + line * SizeColumns;
if (PageColumns > 1)
{
ColumnGutter = CharsPerInch / 2;
ColumnWidth = (SizeColumns - ColumnGutter * (PageColumns - 1)) /
PageColumns;
}
else
ColumnWidth = SizeColumns;
/*
* Get the output character set; if it is undefined or "us-ascii", do
* nothing because we can use the default encoding...
*/
puts("%%BeginProlog");
puts("%%BeginResource: procset texttops 1.0 0");
charset = getenv("CHARSET");
if (charset != NULL && strcmp(charset, "us-ascii") != 0)
{
/*
* Load the PostScript glyph names and the corresponding character
* set definition...
*/
memset(Glyphs, 0, sizeof(Glyphs));
if ((fp = fopen(CUPS_DATADIR "/data/psglyphs", "r")) != NULL)
{
while (fscanf(fp, "%x%s", &unicode, glyph) == 2)
Glyphs[unicode] = strdup(glyph);
fclose(fp);
}
if (strncmp(charset, "iso-", 4) == 0)
{
memset(chars, 0, sizeof(chars));
sprintf(filename, CUPS_DATADIR "/%s", charset + 4);
if ((fp = fopen(filename, "r")) != NULL)
{
while (fscanf(fp, "%x%x", &ch, &unicode) == 2)
chars[ch] = unicode;
fclose(fp);
}
}
else
{
/*
* UTF-8 encoding - just pass the first 256 characters for now...
*/
UTF8 = 1;
for (unicode = 0; unicode < 256; unicode ++)
chars[unicode] = unicode;
}
/*
* Write the encoding array...
*/
printf("%% %s encoding\n", charset);
puts("/textEncoding [");
for (ch = 0; ch < 256; ch ++)
{
if (Glyphs[chars[ch]])
printf("/%s", Glyphs[chars[ch]]);
else
printf("/.notdef");
if ((ch & 7) == 7)
putchar('\n');
}
puts("] def");
puts("% Reencode fonts");
puts("/Courier findfont");
puts("dup length dict begin\n"
" { 1 index /FID ne { def } { pop pop } ifelse } forall\n"
" /Encoding textEncoding def\n"
" currentdict\n"
"end");
puts("/Courier exch definefont pop");
puts("/Courier-Bold findfont");
puts("dup length dict begin\n"
" { 1 index /FID ne { def } { pop pop } ifelse } forall\n"
" /Encoding textEncoding def\n"
" currentdict\n"
"end");
puts("/Courier-Bold exch definefont pop");
if (PrettyPrint)
{
puts("/Courier-Oblique findfont");
puts("dup length dict begin\n"
" { 1 index /FID ne { def } { pop pop } ifelse } forall\n"
" /Encoding textEncoding def\n"
" currentdict\n"
"end");
puts("/Courier-Oblique exch definefont pop");
}
}
puts("% Define fonts");
printf("/FN /Courier findfont [%.1f 0 0 %.1f 0 0] makefont def\n",
120.0 / CharsPerInch, 68.0 / LinesPerInch);
printf("/FB /Courier-Bold findfont [%.1f 0 0 %.1f 0 0] makefont def\n",
120.0 / CharsPerInch, 68.0 / LinesPerInch);
if (PrettyPrint)
printf("/FI /Courier-Oblique findfont [%.1f 0 0 %.1f 0 0] makefont def\n",
120.0 / CharsPerInch, 68.0 / LinesPerInch);
puts("% Common procedures");
puts("/N { FN setfont moveto } bind def");
puts("/B { FB setfont moveto } bind def");
puts("/U { gsave 0 rlineto stroke grestore } bind def");
if (PrettyPrint)
{
if (ColorDevice)
{
puts("/S { 0.0 setgray show } bind def");
puts("/r { 0.5 0.0 0.0 setrgbcolor show } bind def");
puts("/g { 0.0 0.5 0.0 setrgbcolor show } bind def");
puts("/b { 0.0 0.0 0.5 setrgbcolor show } bind def");
}
else
{
puts("/S { 0.0 setgray show } bind def");
puts("/r { 0.2 setgray show } bind def");
puts("/g { 0.2 setgray show } bind def");
puts("/b { 0.2 setgray show } bind def");
}
puts("/I { FI setfont moveto } bind def");
puts("/P 20 string def");
printf("/T(");
while (*title != '\0')
{
if (*title == '(' || *title == ')' || *title == '\\')
putchar('\\');
putchar(*title++);
}
puts(")def");
puts("/H {");
puts("gsave");
puts("\t0.9 setgray");
if (Duplex)
{
puts("\tdup 2 mod 0 eq {");
printf("\t\t%.1f %.1f translate } {\n",
PageWidth - PageRight, PageTop + 72.0f / LinesPerInch);
printf("\t\t%.1f %.1f translate } ifelse\n",
PageLeft, PageTop + 72.0f / LinesPerInch);
}
else
printf("\t%.1f %.1f translate\n",
PageLeft, PageTop + 72.0f / LinesPerInch);
printf("\t0 0 %.1f %.1f rectfill\n", PageRight - PageLeft,
144.0f / LinesPerInch);
puts("\tFN setfont");
puts("\t0 setgray");
if (Duplex)
{
puts("\tdup 2 mod 0 eq {");
printf("\t\tT stringwidth pop neg %.1f add %.1f } {\n",
PageRight - PageLeft - 36.0f / LinesPerInch, 54.0f / LinesPerInch);
printf("\t\t%.1f %.1f } ifelse\n", 36.0f / LinesPerInch,
54.0f / LinesPerInch);
}
else
printf("\t%.1f %.1f\n", 36.0f / LinesPerInch,
54.0f / LinesPerInch);
puts("\tmoveto T show");
printf("\t(%s)\n", curdate);
printf("\tdup stringwidth pop neg 2 div %.1f add %.1f\n",
(PageRight - PageLeft) * 0.5, 54.0f / LinesPerInch);
puts("\tmoveto show");
if (Duplex)
{
puts("\tdup P cvs exch 2 mod 0 eq {");
printf("\t\t%.1f %.1f } {\n", 36.0f / LinesPerInch,
54.0f / LinesPerInch);
printf("\t\tdup stringwidth pop neg %.1f add %.1f } ifelse\n",
PageRight - PageLeft - 36.0f / LinesPerInch,
54.0f / LinesPerInch);
}
else
printf("\tP cvs dup stringwidth pop neg %.1f add %.1f\n",
PageRight - PageLeft - 36.0f / LinesPerInch,
54.0f / LinesPerInch);
puts("\tmoveto show");
puts("\tgrestore");
puts("} bind def");
}
else
puts("/S { show } bind def");
puts("%%EndResource");
puts("%%EndProlog");
}
/*
* 'write_line()' - Write a row of text.
*/
static void
write_line(int row, /* I - Row number (0 to N) */
lchar_t *line) /* I - Line to print */
{
int col; /* Current column */
int attr; /* Current attribute */
lchar_t *start; /* First character in sequence */
for (col = 0, start = line; col < SizeColumns;)
{
while (col < SizeColumns && (line->ch == ' ' || line->ch == 0))
{
col ++;
line ++;
}
if (col >= SizeColumns)
break;
attr = line->attr;
start = line;
while (col < SizeColumns && line->ch != 0 && attr == line->attr)
{
col ++;
line ++;
}
write_string(col - (line - start), row, line - start, start);
}
}
/*
* 'write_string()' - Write a string of text.
*/
static void
write_string(int col, /* I - Start column */
int row, /* I - Row */
int len, /* I - Number of characters */
lchar_t *s) /* I - String to print */
{
int i; /* Looping var */
float x, y; /* Position of text */
unsigned attr; /* Character attributes */
/*
* Position the text and set the font...
*/
if (Duplex && (NumPages & 1) == 0)
{
x = PageWidth - PageRight;
y = PageTop;
}
else
{
x = PageLeft;
y = PageTop;
}
x += (float)col * 72.0 / (float)CharsPerInch;
y -= (float)(row + 1) * 72.0 / (float)LinesPerInch;
attr = s->attr;
if (attr & ATTR_RAISED)
y += 36.0 / (float)LinesPerInch;
else if (attr & ATTR_LOWERED)
y -= 36.0 / (float)LinesPerInch;
if (x == (int)x)
printf("%.0f ", x);
else
printf("%.1f ", x);
if (y == (int)y)
printf("%.0f ", y);
else
printf("%.1f ", y);
if (attr & ATTR_BOLD)
putchar('B');
else if (attr & ATTR_ITALIC)
putchar('I');
else
putchar('N');
if (attr & ATTR_UNDERLINE)
printf(" %.1f U", (float)len * 72.0 / (float)CharsPerInch);
/*
* See if the string contains 16-bit characters...
*/
for (i = 0; i < len; i ++)
if (s[i].ch > 255)
break;
if (i < len)
{
/*
* Write a hex Unicode string...
*/
fputs("<feff", stdout);
while (len > 0)
{
printf("%04x", s->ch);
len --;
s ++;
}
putchar('>');
if (attr & ATTR_RED)
puts("r");
else if (attr & ATTR_GREEN)
puts("g");
else if (attr & ATTR_BLUE)
puts("b");
else
puts("S");
}
else
{
/*
* Write a quoted string...
*/
putchar('(');
while (len > 0)
{
if (s->ch > 126)
{
/*
* Quote 8-bit characters...
*/
printf("\\%03o", s->ch);
}
else
{
/*
* Quote the parenthesis and backslash as needed...
*/
if (s->ch == '(' || s->ch == ')' || s->ch == '\\')
putchar('\\');
putchar(s->ch);
}
len --;
s ++;
}
putchar(')');
if (attr & ATTR_RED)
puts("r");
else if (attr & ATTR_GREEN)
puts("g");
else if (attr & ATTR_BLUE)
puts("b");
else
puts("S");
}
}
/*
* End of "$Id$".
*/
-98
Ver Arquivo
@@ -1,98 +0,0 @@
# Microsoft Developer Studio Project File - Name="texttops" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=texttops - 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 "texttops.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 "texttops.mak" CFG="texttops - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "texttops - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "texttops - 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)" == "texttops - 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 /W1 /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/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:"texttops.exe"
!ELSEIF "$(CFG)" == "texttops - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "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 /W1 /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 ../cups/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:"texttopsd.exe" /pdbtype:sept
!ENDIF
# Begin Target
# Name "texttops - Win32 Release"
# Name "texttops - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\texttops.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# End Group
# End Target
# End Project
-57
Ver Arquivo
@@ -1,57 +0,0 @@
.\"
.\" "$Id: accept.8 380 1999-06-10 16:15:04Z mike $"
.\"
.\" accept/reject man page 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
.\"
.TH accept 8 "Common UNIX Printing System" "14 May 1999" "Easy Software Products"
.SH NAME
accept/reject \- accept/reject jobs sent to a destination
.SH SYNOPSIS
.B accept
destination(s)
.br
.B reject
[ -h
.I server
] [ -r [
.I reason
] ]
destination(s)
.SH DESCRIPTION
\fBaccept\fR instructs the printing system to accept print jobs to the
specified destinations.
.LP
\fBreject\fR instructs the printing system to reject print jobs to the
specified destinations. The \fI-r\fR option sets the reason for rejecting
print jobs. If not specified the reason defaults to "Reason Unknown".
.SH COMPATIBILITY
The CUPS versions of \fBaccept\fR and \fBreject\fR may ask the user for an
access password depending on the printing system configuration. This differs
from the System V versions which require the root user to execute these
commands.
.SH SEE ALSO
cancel(1), disable(8), enable(8), lp(1), lpadmin(8), lpstat(1),
CUPS Software Administrator's Manual
.SH COPYRIGHT
Copyright 1993-1999 by Easy Software Products, All Rights Reserved.
.\"
.\" End of "$Id: accept.8 380 1999-06-10 16:15:04Z mike $".
.\"
BIN
Ver Arquivo
Arquivo binário não exibido.
-88
Ver Arquivo
@@ -1,88 +0,0 @@
.\"
.\" "$Id: backend.1 327 1999-05-14 17:03:06Z mike $"
.\"
.\" backend man page 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
.\"
.TH backend 1 "Common UNIX Printing System" "14 May 1999" "Easy Software Products"
.SH NAME
backend \- backend transmission interfaces
.SH SYNOPSIS
.B backend
job user title num-copies options
.I [ filename ]
.SH DESCRIPTION
The CUPS backend interface provides a standard method for sending document
files to different physical interfaces.
.LP
Backends must be capable of reading from a filename on the command-line
or from the standard input, copying stdin to a temporary if required by
the physical interface.
.LP
The command name (argv[0]) is set to the device URI of the destination printer.
.SH ENVIRONMENT VARIABLES
The following environment variables are defined by the CUPS server when
executing the backend:
.TP 5
CHARSET
.br
The default text character set (typically us-ascii or iso-8859-1).
.TP 5
LANG
.br
The default language locale (typically C or en).
.TP 5
PATH
.br
The standard execution path for external programs that may be run by the backend.
.TP 5
PPD
.br
The full pathname of the PostScript Printer Description (PPD) file for
this printer.
.TP 5
RIP_CACHE
.br
The recommended amount of memory to use for Raster Image Processors (RIPs).
.TP 5
SERVER_ROOT
.br
The root directory of the server.
.TP 5
SOFTWARE
.br
The name and version number of the server (typically CUPS/1.0).
.TP 5
TZ
.br
The timezone of the server (typically GMT).
.TP 5
USER
.br
The user executing the backend (typically root).
.SH SEE ALSO
cupsd(8), filter(1)
CUPS Software Administrator's Manual,
CUPS Interface Design Description
.SH COPYRIGHT
Copyright 1993-1999 by Easy Software Products, All Rights Reserved.
.\"
.\" End of "$Id: backend.1 327 1999-05-14 17:03:06Z mike $".
.\"
BIN
Ver Arquivo
Arquivo binário não exibido.
-36
Ver Arquivo
@@ -1,36 +0,0 @@
.\"
.\" "$Id: classes.conf.5 327 1999-05-14 17:03:06Z mike $"
.\"
.\" classes.conf man page 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
.\"
.TH classes.conf 5 "Common UNIX Printing System" "14 May 1999" "Easy Software Products"
.SH NAME
classes.conf \- class configuration file for cups
.SH DESCRIPTION
.SH SEE ALSO
cupsd(8), cupsd.conf(5), mime.convs(5), mime.types(5), printers.conf(5),
CUPS Software Administrator's Manual,
CUPS Interface Design Description
.SH COPYRIGHT
Copyright 1993-1999 by Easy Software Products, All Rights Reserved.
.\"
.\" End of "$Id: classes.conf.5 327 1999-05-14 17:03:06Z mike $".
.\"
Arquivo binário não exibido.
-47
Ver Arquivo
@@ -1,47 +0,0 @@
.\"
.\" "$Id: cupsd.8 327 1999-05-14 17:03:06Z mike $"
.\"
.\" cupsd man page 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
.\"
.TH cupsd 8 "Common UNIX Printing System" "14 May 1999" "Easy Software Products"
.SH NAME
cupsd \- common unix printing system daemon
.SH SYNOPSIS
.B cups
.I [ \-c config-file ]
.SH DESCRIPTION
\fBcupsd\fR is the scheduler for the Common UNIX Printing System. It implements
a printing system based upon the Internet Printing Protocol, version 1.0. If
no options are specified on the command-line then the default configuration file
(usually \fI/var/cups/conf/cupsf.conf\fR) will be used.
.SH COMPATIBILITY
\fBcupsd\fR implements all of the required IPP/1.0 attributes and operations.
It also implements optional operation set 1 and several CUPS-specific
administation operations.
.SH SEE ALSO
classes.conf(5), cupsd.conf(5), mime.convs(5), mime.types(5), printers.conf(5),
CUPS Software Administrator's Manual,
CUPS Interface Design Description
.SH COPYRIGHT
Copyright 1993-1999 by Easy Software Products, All Rights Reserved.
.\"
.\" End of "$Id: cupsd.8 327 1999-05-14 17:03:06Z mike $".
.\"
-36
Ver Arquivo
@@ -1,36 +0,0 @@
.\"
.\" "$Id: cupsd.conf.5 327 1999-05-14 17:03:06Z mike $"
.\"
.\" cupsd.conf man page 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
.\"
.TH cupsd.conf 5 "Common UNIX Printing System" "14 May 1999" "Easy Software Products"
.SH NAME
cupsd.conf \- server configuration file for cups
.SH DESCRIPTION
.SH SEE ALSO
classes.conf(5), cupsd(8), mime.convs(5), mime.types(5), printers.conf(5),
CUPS Software Administrator's Manual,
CUPS Interface Design Description
.SH COPYRIGHT
Copyright 1993-1999 by Easy Software Products, All Rights Reserved.
.\"
.\" End of "$Id: cupsd.conf.5 327 1999-05-14 17:03:06Z mike $".
.\"
Arquivo binário não exibido.

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