mirror of
https://git.code.sf.net/p/libpng/code.git
synced 2025-07-10 18:04:09 +02:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4922b1b6e9 | ||
|
|
38d73aff67 | ||
|
|
7cd899c707 | ||
|
|
ea3bcd7087 | ||
|
|
983ec160b4 | ||
|
|
08a3343e05 |
34
CHANGES
34
CHANGES
@@ -1,4 +1,4 @@
|
|||||||
pngchange.txt - changes for libpng
|
CHANGES - changes for libpng
|
||||||
|
|
||||||
version 0.2
|
version 0.2
|
||||||
added reader into png.h
|
added reader into png.h
|
||||||
@@ -244,3 +244,35 @@ version 0.99e [February 28, 1998]
|
|||||||
Replaced pngtest.png with one created with zlib 1.1.1
|
Replaced pngtest.png with one created with zlib 1.1.1
|
||||||
Changed pngtest to report PASS even when file size is different (Jean-loup G.)
|
Changed pngtest to report PASS even when file size is different (Jean-loup G.)
|
||||||
Corrected some logic errors in png_do_invert_alpha() (Chris Patterson)
|
Corrected some logic errors in png_do_invert_alpha() (Chris Patterson)
|
||||||
|
version 0.99f [March 5, 1998]
|
||||||
|
Corrected a bug in pngpread() introduced in version 99c (Kevin Bracey)
|
||||||
|
Moved makefiles into a "scripts" directory, and added INSTALL instruction file
|
||||||
|
Added makefile.os2 and pngos2.def (A. Zabolotny) and makefile.s2x (W. Sebok)
|
||||||
|
Added pointers to "note on libpng versions" in makefile.lnx and README
|
||||||
|
Added row callback feature when reading and writing nonprogressive rows
|
||||||
|
and added a test of this feature in pngtest.c
|
||||||
|
Added user transform callbacks, with test of the feature in pngtest.c
|
||||||
|
version 0.99g [March 6, 1998, morning]
|
||||||
|
Minor changes to pngtest.c to suppress compiler warnings.
|
||||||
|
Removed "beta" language from documentation.
|
||||||
|
version 0.99h [March 6, 1998, evening]
|
||||||
|
Minor changes to previous minor changes to pngtest.c
|
||||||
|
Changed PNG_READ_NOT_FULLY_SUPPORTED to PNG_READ_TRANSFORMS_NOT_SUPPORTED
|
||||||
|
and added PNG_PROGRESSIVE_READ_NOT_SUPPORTED macro
|
||||||
|
version 1.00 [March 7, 1998]
|
||||||
|
Changed several typedefs in pngrutil.c
|
||||||
|
Added makefile.wat (Pawel Mrochen), updated makefile.tc3 (Willem van Schaik)
|
||||||
|
replaced "while(1)" with "for(;;)"
|
||||||
|
added PNGARG() to prototypes in pngtest.c and removed some prototypes
|
||||||
|
updated some of the makefiles (Tom Lane)
|
||||||
|
changed some typedefs (s_start, etc.) in pngrutil.c
|
||||||
|
fixed dimensions of "short_months" array in pngwrite.c
|
||||||
|
Replaced ansi2knr.c with the one from jpeg-v6
|
||||||
|
version 1.0.0 [March 8, 1998]
|
||||||
|
Changed name from 1.00 to 1.0.0 (Adam Costello)
|
||||||
|
Added smakefile.ppc (with SCOPTIONS.ppc) for Amiga PPC (Andreas Kleinert)
|
||||||
|
version 1.0.1 [March 9, 1998]
|
||||||
|
Fixed three bugs in pngrtran.c to make gamma+background handling consistent
|
||||||
|
(Greg Roelofs)
|
||||||
|
Changed format of the PNG_LIBPNG_VER integer to xyyyzzzz instead of xyz
|
||||||
|
for major, minor, and bugfix releases. This is 10000001L. (Adam Costello)
|
||||||
|
|||||||
87
INSTALL
Normal file
87
INSTALL
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
|
||||||
|
Installing libpng version 1.0.1 March 9, 1998
|
||||||
|
|
||||||
|
Before installing libpng, you must first install zlib. zlib
|
||||||
|
can usually be found wherever you got libpng. zlib can be
|
||||||
|
placed in another directory, at the same level as libpng.
|
||||||
|
Note that your system might already have a preinstalled
|
||||||
|
zlib, but you will still need to have access to the
|
||||||
|
zlib.h and zconf.h include files that correspond to the
|
||||||
|
version of zlib that's installed.
|
||||||
|
|
||||||
|
You can rename the directories that you downloaded (they
|
||||||
|
might be called "libpng-1.0.1 or "lpng100" and "zlib-1.1.1"
|
||||||
|
or "zlib111") so that you have directories called "zlib" and "libpng".
|
||||||
|
|
||||||
|
Your directory structure should look like this:
|
||||||
|
|
||||||
|
.. (the parent directory)
|
||||||
|
libpng (this directory)
|
||||||
|
INSTALL (this file)
|
||||||
|
README
|
||||||
|
*.h
|
||||||
|
*.c
|
||||||
|
scripts
|
||||||
|
makefile.*
|
||||||
|
pngtest.png
|
||||||
|
etc.
|
||||||
|
zlib
|
||||||
|
README
|
||||||
|
*.h
|
||||||
|
*.c
|
||||||
|
contrib
|
||||||
|
etc.
|
||||||
|
|
||||||
|
First enter the zlib directory and follow the instructions
|
||||||
|
in zlib/README. Then come back here and choose the
|
||||||
|
appropriate makefile.sys in the scripts directory.
|
||||||
|
The files that are presently available in the scripts directory
|
||||||
|
include
|
||||||
|
|
||||||
|
descrip.mms => VMS makefile for MMS or MMK
|
||||||
|
makefile.std => Generic UNIX makefile
|
||||||
|
makefile.knr => Archaic UNIX Makefile that converts files with ansi2knr
|
||||||
|
makefile.dec => DEC Alpha UNIX makefile
|
||||||
|
makefile.sgi => Silicon Graphics IRIX makefile
|
||||||
|
makefile.sun => Sun makefile
|
||||||
|
makefile.s2x => Solaris 2.X makefile (gcc, creates libpng.so.2.1.0)
|
||||||
|
makefile.lnx => Linux/ELF makefile (gcc, creates libpng.so.2.1.0)
|
||||||
|
makefile.mip => MIPS makefile
|
||||||
|
makefile.aco => Acorn makefile
|
||||||
|
makefile.ama => Amiga makefile
|
||||||
|
smakefile.ppc => AMIGA smakefile for SAS C V6.58/7.00 PPC compiler
|
||||||
|
(Requires SCOPTIONS, copied from scripts/SCOPTIONS.ppc)
|
||||||
|
makefile.atr => Atari makefile
|
||||||
|
makefile.bor => Borland makefile
|
||||||
|
build.bat => MS-DOS batch file for Borland compiler
|
||||||
|
makefile.dj2 => DJGPP 2 makefile
|
||||||
|
makefile.msc => Microsoft C makefile
|
||||||
|
makefile.tc3 => Turbo C 3.0 makefile
|
||||||
|
makefile.os2 => OS/2 Makefile (gcc and emx, requires pngos2.def)
|
||||||
|
pngos2.def => OS/2 module definition file used by makefile.os2
|
||||||
|
makefile.wat => Watcom 10a+ Makefile, 32-bit flat memory model
|
||||||
|
makevms.com => VMS build script
|
||||||
|
|
||||||
|
Copy the file (or files) that you need from the
|
||||||
|
scripts directory into this directory, for example
|
||||||
|
|
||||||
|
MSDOS example: copy scripts\makefile.msd makefile
|
||||||
|
UNIX example: cp scripts/makefile.std makefile
|
||||||
|
|
||||||
|
Read the makefile to see if you need to change any source or
|
||||||
|
target directories to match your preferences.
|
||||||
|
|
||||||
|
Then read pngconf.h to see if you want to make any configuration
|
||||||
|
changes.
|
||||||
|
|
||||||
|
Then just run "make test" which will create the libpng library in
|
||||||
|
this directory and run a quick test that reads the "pngtest.png"
|
||||||
|
file and writes a "pngout.png" file that should be identical to it.
|
||||||
|
|
||||||
|
Most of the makefiles will allow you to run "make install" to
|
||||||
|
put the library in its final resting place (if you want to
|
||||||
|
do that, run "make install" in the zlib directory first if necessary).
|
||||||
|
|
||||||
|
Further information can be found in the README and libpng.txt
|
||||||
|
files, in the individual makefiles, and in png.h, and the manual
|
||||||
|
pages libpng.3 and png.5.
|
||||||
48
README
48
README
@@ -1,8 +1,7 @@
|
|||||||
[NOTE: this is still beta version 0.99e; the text below has already
|
README for libpng 1.0.1 (shared library 2.1)
|
||||||
been updated in anticipation of the imminent 1.0 release.]
|
See the note about version numbers near the top of png.h
|
||||||
|
|
||||||
|
See INSTALL for instructions on how to install libpng.
|
||||||
README for libpng 1.0
|
|
||||||
|
|
||||||
This is the first official release of libpng. Don't let the fact that
|
This is the first official release of libpng. Don't let the fact that
|
||||||
it's the first release fool you. The libpng library has been in
|
it's the first release fool you. The libpng library has been in
|
||||||
@@ -117,7 +116,7 @@ and ...". If in doubt, send questions to me. I'll bounce them
|
|||||||
to others, if necessary.
|
to others, if necessary.
|
||||||
|
|
||||||
Please do not send suggestions on how to change PNG. We have
|
Please do not send suggestions on how to change PNG. We have
|
||||||
been discussing PNG for a couple years now, and it is official and
|
been discussing PNG for three years now, and it is official and
|
||||||
finished. If you have suggestions for libpng, however, I'll
|
finished. If you have suggestions for libpng, however, I'll
|
||||||
gladly listen. Even if your suggestion is not used for version
|
gladly listen. Even if your suggestion is not used for version
|
||||||
1.0, it may be used later.
|
1.0, it may be used later.
|
||||||
@@ -135,21 +134,6 @@ Files in this distribution:
|
|||||||
libpng.3 => manual page for libpng
|
libpng.3 => manual page for libpng
|
||||||
libpng.txt => Description of libpng and its functions
|
libpng.txt => Description of libpng and its functions
|
||||||
libpngpf.3 => manual page for libpng's private functions
|
libpngpf.3 => manual page for libpng's private functions
|
||||||
makefile.aco => ACORN makefile
|
|
||||||
makefile.ama => Amiga makefile
|
|
||||||
makefile.atr => Atari makefile
|
|
||||||
makefile.bor => Borland makefile
|
|
||||||
makefile.dec => DEC makefile
|
|
||||||
makefile.dj2 => DJGPP 2 makefile
|
|
||||||
makefile.knr => Makefile which calls ansi2knr to convert files
|
|
||||||
makefile.lnx => Unix Linux/ELF makefile
|
|
||||||
makefile.mip => MIPS makefile
|
|
||||||
makefile.msc => Microsoft C makefile
|
|
||||||
makefile.sgi => Silicon Graphics Irix makefile
|
|
||||||
makefile.std => Standard Unix makefile
|
|
||||||
makefile.sun => SUN makefile
|
|
||||||
makefile.tc3 => Turbo C 3.0 makefile
|
|
||||||
makevms.com => VMS make program
|
|
||||||
png.5 => manual page for the PNG format
|
png.5 => manual page for the PNG format
|
||||||
png.c => Basic interface functions common to library
|
png.c => Basic interface functions common to library
|
||||||
png.h => Library function and interface declarations
|
png.h => Library function and interface declarations
|
||||||
@@ -170,6 +154,30 @@ Files in this distribution:
|
|||||||
pngwrite.c => High-level write functions
|
pngwrite.c => High-level write functions
|
||||||
pngwtran.c => Write data transformations
|
pngwtran.c => Write data transformations
|
||||||
pngwutil.c => Write utility functions
|
pngwutil.c => Write utility functions
|
||||||
|
scripts => Directory containing scripts for building libpng:
|
||||||
|
descrip.mms => VMS makefile for MMS or MMK
|
||||||
|
makefile.std => Generic UNIX makefile
|
||||||
|
makefile.knr => Archaic UNIX Makefile that converts files with ansi2knr
|
||||||
|
makefile.dec => DEC Alpha UNIX makefile
|
||||||
|
makefile.sgi => Silicon Graphics IRIX makefile
|
||||||
|
makefile.sun => Sun makefile
|
||||||
|
makefile.s2x => Solaris 2.X makefile (gcc, creates libpng.so.2.1.0)
|
||||||
|
makefile.lnx => Linux/ELF makefile (gcc, creates libpng.so.2.1.0)
|
||||||
|
makefile.mip => MIPS makefile
|
||||||
|
makefile.aco => Acorn makefile
|
||||||
|
makefile.ama => Amiga makefile
|
||||||
|
smakefile.ppc => AMIGA smakefile for SAS C V6.58/7.00 PPC compiler
|
||||||
|
(Requires SCOPTIONS, copied from scripts/SCOPTIONS.ppc)
|
||||||
|
makefile.atr => Atari makefile
|
||||||
|
makefile.bor => Borland makefile
|
||||||
|
build.bat => MS-DOS batch file for Borland compiler
|
||||||
|
makefile.dj2 => DJGPP 2 makefile
|
||||||
|
makefile.msc => Microsoft C makefile
|
||||||
|
makefile.tc3 => Turbo C 3.0 makefile
|
||||||
|
makefile.os2 => OS/2 Makefile (gcc and emx, requires pngos2.def)
|
||||||
|
makefile.wat => Watcom 10a+ Makefile, 32-bit flat memory model
|
||||||
|
pngos2.def => OS/2 module definition file used by makefile.os2
|
||||||
|
makevms.com => VMS build script
|
||||||
|
|
||||||
Good luck, and happy coding.
|
Good luck, and happy coding.
|
||||||
|
|
||||||
|
|||||||
3
TODO
3
TODO
@@ -1,5 +1,6 @@
|
|||||||
pngtodo.txt - list of things to do for libpng
|
TODO - list of things to do for libpng
|
||||||
|
|
||||||
|
fix problem with C++ and EXTERN "C"
|
||||||
add "grayscale->palette" transformation and "palette->grayscale" detection
|
add "grayscale->palette" transformation and "palette->grayscale" detection
|
||||||
improved dithering
|
improved dithering
|
||||||
multi-lingual error and warning message support
|
multi-lingual error and warning message support
|
||||||
|
|||||||
339
ansi2knr.c
339
ansi2knr.c
@@ -1,26 +1,32 @@
|
|||||||
/* Copyright (C) 1989, 1991, 1993 Aladdin Enterprises. All rights reserved. */
|
|
||||||
|
|
||||||
/* ansi2knr.c */
|
/* ansi2knr.c */
|
||||||
/* Convert ANSI function declarations to K&R syntax */
|
/* Convert ANSI C function definitions to K&R ("traditional C") syntax */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
ansi2knr is distributed in the hope that it will be useful, but
|
ansi2knr is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
|
WARRANTY. No author or distributor accepts responsibility to anyone for the
|
||||||
to anyone for the consequences of using it or for whether it serves any
|
consequences of using it or for whether it serves any particular purpose or
|
||||||
particular purpose or works at all, unless he says so in writing. Refer
|
works at all, unless he says so in writing. Refer to the GNU General Public
|
||||||
to the GNU General Public License for full details.
|
License (the "GPL") for full details.
|
||||||
|
|
||||||
Everyone is granted permission to copy, modify and redistribute
|
Everyone is granted permission to copy, modify and redistribute ansi2knr,
|
||||||
ansi2knr, but only under the conditions described in the GNU
|
but only under the conditions described in the GPL. A copy of this license
|
||||||
General Public License. A copy of this license is supposed to have been
|
is supposed to have been given to you along with ansi2knr so you can know
|
||||||
given to you along with ansi2knr so you can know your rights and
|
your rights and responsibilities. It should be in a file named COPYLEFT.
|
||||||
responsibilities. It should be in a file named COPYING. Among other
|
[In the IJG distribution, the GPL appears below, not in a separate file.]
|
||||||
things, the copyright notice and this notice must be preserved on all
|
Among other things, the copyright notice and this notice must be preserved
|
||||||
copies.
|
on all copies.
|
||||||
|
|
||||||
|
We explicitly state here what we believe is already implied by the GPL: if
|
||||||
|
the ansi2knr program is distributed as a separate set of sources and a
|
||||||
|
separate executable file which are aggregated on a storage medium together
|
||||||
|
with another program, this in itself does not bring the other program under
|
||||||
|
the GPL, nor does the mere fact that such a program or the procedures for
|
||||||
|
constructing it invoke the ansi2knr executable bring any other part of the
|
||||||
|
program under the GPL.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
---------- Here is the GNU GPL file COPYING, referred to above ----------
|
---------- Here is the GNU GPL file COPYLEFT, referred to above ----------
|
||||||
----- These terms do NOT apply to the JPEG software itself; see README ------
|
----- These terms do NOT apply to the JPEG software itself; see README ------
|
||||||
|
|
||||||
GHOSTSCRIPT GENERAL PUBLIC LICENSE
|
GHOSTSCRIPT GENERAL PUBLIC LICENSE
|
||||||
@@ -166,13 +172,87 @@ PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) GHOSTSCRIPT, EVEN IF YOU
|
|||||||
HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM
|
HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM
|
||||||
BY ANY OTHER PARTY.
|
BY ANY OTHER PARTY.
|
||||||
|
|
||||||
-------------------- End of file COPYING ------------------------------
|
-------------------- End of file COPYLEFT ------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Usage:
|
||||||
|
ansi2knr input_file [output_file]
|
||||||
|
* If no output_file is supplied, output goes to stdout.
|
||||||
|
* There are no error messages.
|
||||||
|
*
|
||||||
|
* ansi2knr recognizes function definitions by seeing a non-keyword
|
||||||
|
* identifier at the left margin, followed by a left parenthesis,
|
||||||
|
* with a right parenthesis as the last character on the line,
|
||||||
|
* and with a left brace as the first token on the following line
|
||||||
|
* (ignoring possible intervening comments).
|
||||||
|
* It will recognize a multi-line header provided that no intervening
|
||||||
|
* line ends with a left or right brace or a semicolon.
|
||||||
|
* These algorithms ignore whitespace and comments, except that
|
||||||
|
* the function name must be the first thing on the line.
|
||||||
|
* The following constructs will confuse it:
|
||||||
|
* - Any other construct that starts at the left margin and
|
||||||
|
* follows the above syntax (such as a macro or function call).
|
||||||
|
* - Some macros that tinker with the syntax of the function header.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The original and principal author of ansi2knr is L. Peter Deutsch
|
||||||
|
* <ghost@aladdin.com>. Other authors are noted in the change history
|
||||||
|
* that follows (in reverse chronological order):
|
||||||
|
lpd 96-01-21 added code to cope with not HAVE_CONFIG_H and with
|
||||||
|
compilers that don't understand void, as suggested by
|
||||||
|
Tom Lane
|
||||||
|
lpd 96-01-15 changed to require that the first non-comment token
|
||||||
|
on the line following a function header be a left brace,
|
||||||
|
to reduce sensitivity to macros, as suggested by Tom Lane
|
||||||
|
<tgl@sss.pgh.pa.us>
|
||||||
|
lpd 95-06-22 removed #ifndefs whose sole purpose was to define
|
||||||
|
undefined preprocessor symbols as 0; changed all #ifdefs
|
||||||
|
for configuration symbols to #ifs
|
||||||
|
lpd 95-04-05 changed copyright notice to make it clear that
|
||||||
|
including ansi2knr in a program does not bring the entire
|
||||||
|
program under the GPL
|
||||||
|
lpd 94-12-18 added conditionals for systems where ctype macros
|
||||||
|
don't handle 8-bit characters properly, suggested by
|
||||||
|
Francois Pinard <pinard@iro.umontreal.ca>;
|
||||||
|
removed --varargs switch (this is now the default)
|
||||||
|
lpd 94-10-10 removed CONFIG_BROKETS conditional
|
||||||
|
lpd 94-07-16 added some conditionals to help GNU `configure',
|
||||||
|
suggested by Francois Pinard <pinard@iro.umontreal.ca>;
|
||||||
|
properly erase prototype args in function parameters,
|
||||||
|
contributed by Jim Avera <jima@netcom.com>;
|
||||||
|
correct error in writeblanks (it shouldn't erase EOLs)
|
||||||
|
lpd 89-xx-xx original version
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Most of the conditionals here are to make ansi2knr work with */
|
||||||
|
/* or without the GNU configure machinery. */
|
||||||
|
|
||||||
|
#if HAVE_CONFIG_H
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
|
#if HAVE_CONFIG_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
For properly autoconfiguring ansi2knr, use AC_CONFIG_HEADER(config.h).
|
||||||
|
This will define HAVE_CONFIG_H and so, activate the following lines.
|
||||||
|
*/
|
||||||
|
|
||||||
|
# if STDC_HEADERS || HAVE_STRING_H
|
||||||
|
# include <string.h>
|
||||||
|
# else
|
||||||
|
# include <strings.h>
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#else /* not HAVE_CONFIG_H */
|
||||||
|
|
||||||
|
/* Otherwise do it the hard way */
|
||||||
|
|
||||||
# ifdef BSD
|
# ifdef BSD
|
||||||
# include <strings.h>
|
# include <strings.h>
|
||||||
# else
|
# else
|
||||||
@@ -183,8 +263,15 @@ BY ANY OTHER PARTY.
|
|||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
/* malloc and free should be declared in stdlib.h, */
|
#endif /* not HAVE_CONFIG_H */
|
||||||
/* but if you've got a K&R compiler, they probably aren't. */
|
|
||||||
|
#if STDC_HEADERS
|
||||||
|
# include <stdlib.h>
|
||||||
|
#else
|
||||||
|
/*
|
||||||
|
malloc and free should be declared in stdlib.h,
|
||||||
|
but if you've got a K&R compiler, they probably aren't.
|
||||||
|
*/
|
||||||
# ifdef MSDOS
|
# ifdef MSDOS
|
||||||
# include <malloc.h>
|
# include <malloc.h>
|
||||||
# else
|
# else
|
||||||
@@ -197,28 +284,30 @@ BY ANY OTHER PARTY.
|
|||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
/* Usage:
|
#endif
|
||||||
ansi2knr input_file [output_file]
|
|
||||||
* If no output_file is supplied, output goes to stdout.
|
/*
|
||||||
* There are no error messages.
|
* The ctype macros don't always handle 8-bit characters correctly.
|
||||||
*
|
* Compensate for this here.
|
||||||
* ansi2knr recognizes functions by seeing a non-keyword identifier
|
|
||||||
* at the left margin, followed by a left parenthesis,
|
|
||||||
* with a right parenthesis as the last character on the line.
|
|
||||||
* It will recognize a multi-line header provided that the last character
|
|
||||||
* of the last line of the header is a right parenthesis,
|
|
||||||
* and no intervening line ends with a left brace or a semicolon.
|
|
||||||
* These algorithms ignore whitespace and comments, except that
|
|
||||||
* the function name must be the first thing on the line.
|
|
||||||
* The following constructs will confuse it:
|
|
||||||
* - Any other construct that starts at the left margin and
|
|
||||||
* follows the above syntax (such as a macro or function call).
|
|
||||||
* - Macros that tinker with the syntax of the function header.
|
|
||||||
*/
|
*/
|
||||||
|
#ifdef isascii
|
||||||
|
# undef HAVE_ISASCII /* just in case */
|
||||||
|
# define HAVE_ISASCII 1
|
||||||
|
#else
|
||||||
|
#endif
|
||||||
|
#if STDC_HEADERS || !HAVE_ISASCII
|
||||||
|
# define is_ascii(c) 1
|
||||||
|
#else
|
||||||
|
# define is_ascii(c) isascii(c)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define is_space(c) (is_ascii(c) && isspace(c))
|
||||||
|
#define is_alpha(c) (is_ascii(c) && isalpha(c))
|
||||||
|
#define is_alnum(c) (is_ascii(c) && isalnum(c))
|
||||||
|
|
||||||
/* Scanning macros */
|
/* Scanning macros */
|
||||||
#define isidchar(ch) (isalnum(ch) || (ch) == '_')
|
#define isidchar(ch) (is_alnum(ch) || (ch) == '_')
|
||||||
#define isidfirstchar(ch) (isalpha(ch) || (ch) == '_')
|
#define isidfirstchar(ch) (is_alpha(ch) || (ch) == '_')
|
||||||
|
|
||||||
/* Forward references */
|
/* Forward references */
|
||||||
char *skipspace();
|
char *skipspace();
|
||||||
@@ -227,6 +316,7 @@ int test1();
|
|||||||
int convert1();
|
int convert1();
|
||||||
|
|
||||||
/* The main program */
|
/* The main program */
|
||||||
|
int
|
||||||
main(argc, argv)
|
main(argc, argv)
|
||||||
int argc;
|
int argc;
|
||||||
char *argv[];
|
char *argv[];
|
||||||
@@ -234,46 +324,99 @@ main(argc, argv)
|
|||||||
#define bufsize 5000 /* arbitrary size */
|
#define bufsize 5000 /* arbitrary size */
|
||||||
char *buf;
|
char *buf;
|
||||||
char *line;
|
char *line;
|
||||||
|
char *more;
|
||||||
|
/*
|
||||||
|
* In previous versions, ansi2knr recognized a --varargs switch.
|
||||||
|
* If this switch was supplied, ansi2knr would attempt to convert
|
||||||
|
* a ... argument to va_alist and va_dcl; if this switch was not
|
||||||
|
* supplied, ansi2knr would simply drop any such arguments.
|
||||||
|
* Now, ansi2knr always does this conversion, and we only
|
||||||
|
* check for this switch for backward compatibility.
|
||||||
|
*/
|
||||||
|
int convert_varargs = 1;
|
||||||
|
|
||||||
|
if ( argc > 1 && argv[1][0] == '-' )
|
||||||
|
{ if ( !strcmp(argv[1], "--varargs") )
|
||||||
|
{ convert_varargs = 1;
|
||||||
|
argc--;
|
||||||
|
argv++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ fprintf(stderr, "Unrecognized switch: %s\n", argv[1]);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
switch ( argc )
|
switch ( argc )
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
printf("Usage: ansi2knr input_file [output_file]\n");
|
printf("Usage: ansi2knr input_file [output_file]\n");
|
||||||
exit(0);
|
exit(0);
|
||||||
case 2:
|
case 2:
|
||||||
out = stdout; break;
|
out = stdout;
|
||||||
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
out = fopen(argv[2], "w");
|
out = fopen(argv[2], "w");
|
||||||
if ( out == NULL )
|
if ( out == NULL )
|
||||||
{ fprintf(stderr, "Cannot open %s\n", argv[2]);
|
{ fprintf(stderr, "Cannot open output file %s\n", argv[2]);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
in = fopen(argv[1], "r");
|
in = fopen(argv[1], "r");
|
||||||
if ( in == NULL )
|
if ( in == NULL )
|
||||||
{ fprintf(stderr, "Cannot open %s\n", argv[1]);
|
{ fprintf(stderr, "Cannot open input file %s\n", argv[1]);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
fprintf(out, "#line 1 \"%s\"\n", argv[1]);
|
fprintf(out, "#line 1 \"%s\"\n", argv[1]);
|
||||||
buf = malloc(bufsize);
|
buf = malloc(bufsize);
|
||||||
line = buf;
|
line = buf;
|
||||||
while ( fgets(line, (unsigned)(buf + bufsize - line), in) != NULL )
|
while ( fgets(line, (unsigned)(buf + bufsize - line), in) != NULL )
|
||||||
{ switch ( test1(buf) )
|
|
||||||
{
|
{
|
||||||
|
test: line += strlen(line);
|
||||||
|
switch ( test1(buf) )
|
||||||
|
{
|
||||||
|
case 2: /* a function header */
|
||||||
|
convert1(buf, out, 1, convert_varargs);
|
||||||
|
break;
|
||||||
case 1: /* a function */
|
case 1: /* a function */
|
||||||
convert1(buf, out);
|
/* Check for a { at the start of the next line. */
|
||||||
|
more = ++line;
|
||||||
|
f: if ( line >= buf + (bufsize - 1) ) /* overflow check */
|
||||||
|
goto wl;
|
||||||
|
if ( fgets(line, (unsigned)(buf + bufsize - line), in) == NULL )
|
||||||
|
goto wl;
|
||||||
|
switch ( *skipspace(more, 1) )
|
||||||
|
{
|
||||||
|
case '{':
|
||||||
|
/* Definitely a function header. */
|
||||||
|
convert1(buf, out, 0, convert_varargs);
|
||||||
|
fputs(more, out);
|
||||||
|
break;
|
||||||
|
case 0:
|
||||||
|
/* The next line was blank or a comment: */
|
||||||
|
/* keep scanning for a non-comment. */
|
||||||
|
line += strlen(line);
|
||||||
|
goto f;
|
||||||
|
default:
|
||||||
|
/* buf isn't a function header, but */
|
||||||
|
/* more might be. */
|
||||||
|
fputs(buf, out);
|
||||||
|
strcpy(buf, more);
|
||||||
|
line = buf;
|
||||||
|
goto test;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case -1: /* maybe the start of a function */
|
case -1: /* maybe the start of a function */
|
||||||
line = buf + strlen(buf);
|
|
||||||
if ( line != buf + (bufsize - 1) ) /* overflow check */
|
if ( line != buf + (bufsize - 1) ) /* overflow check */
|
||||||
continue;
|
continue;
|
||||||
/* falls through */
|
/* falls through */
|
||||||
default: /* not a function */
|
default: /* not a function */
|
||||||
fputs(buf, out);
|
wl: fputs(buf, out);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
line = buf;
|
line = buf;
|
||||||
}
|
}
|
||||||
if ( line != buf ) fputs(buf, out);
|
if ( line != buf )
|
||||||
|
fputs(buf, out);
|
||||||
free(buf);
|
free(buf);
|
||||||
fclose(out);
|
fclose(out);
|
||||||
fclose(in);
|
fclose(in);
|
||||||
@@ -286,11 +429,14 @@ skipspace(p, dir)
|
|||||||
register char *p;
|
register char *p;
|
||||||
register int dir; /* 1 for forward, -1 for backward */
|
register int dir; /* 1 for forward, -1 for backward */
|
||||||
{ for ( ; ; )
|
{ for ( ; ; )
|
||||||
{ while ( isspace(*p) ) p += dir;
|
{ while ( is_space(*p) )
|
||||||
if ( !(*p == '/' && p[dir] == '*') ) break;
|
p += dir;
|
||||||
|
if ( !(*p == '/' && p[dir] == '*') )
|
||||||
|
break;
|
||||||
p += dir; p += dir;
|
p += dir; p += dir;
|
||||||
while ( !(*p == '*' && p[dir] == '/') )
|
while ( !(*p == '*' && p[dir] == '/') )
|
||||||
{ if ( *p == 0 ) return p; /* multi-line comment?? */
|
{ if ( *p == 0 )
|
||||||
|
return p; /* multi-line comment?? */
|
||||||
p += dir;
|
p += dir;
|
||||||
}
|
}
|
||||||
p += dir; p += dir;
|
p += dir; p += dir;
|
||||||
@@ -300,13 +446,16 @@ skipspace(p, dir)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Write blanks over part of a string.
|
* Write blanks over part of a string.
|
||||||
|
* Don't overwrite end-of-line characters.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
writeblanks(start, end)
|
writeblanks(start, end)
|
||||||
char *start;
|
char *start;
|
||||||
char *end;
|
char *end;
|
||||||
{ char *p;
|
{ char *p;
|
||||||
for ( p = start; p < end; p++ ) *p = ' ';
|
for ( p = start; p < end; p++ )
|
||||||
|
if ( *p != '\r' && *p != '\n' )
|
||||||
|
*p = ' ';
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -316,8 +465,12 @@ writeblanks(start, end)
|
|||||||
* Return as follows:
|
* Return as follows:
|
||||||
* 0 - definitely not a function definition;
|
* 0 - definitely not a function definition;
|
||||||
* 1 - definitely a function definition;
|
* 1 - definitely a function definition;
|
||||||
|
* 2 - definitely a function prototype (NOT USED);
|
||||||
* -1 - may be the beginning of a function definition,
|
* -1 - may be the beginning of a function definition,
|
||||||
* append another line and look again.
|
* append another line and look again.
|
||||||
|
* The reason we don't attempt to convert function prototypes is that
|
||||||
|
* Ghostscript's declaration-generating macros look too much like
|
||||||
|
* prototypes, and confuse the algorithms.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
test1(buf)
|
test1(buf)
|
||||||
@@ -326,17 +479,20 @@ test1(buf)
|
|||||||
char *bend;
|
char *bend;
|
||||||
char *endfn;
|
char *endfn;
|
||||||
int contin;
|
int contin;
|
||||||
|
|
||||||
if ( !isidfirstchar(*p) )
|
if ( !isidfirstchar(*p) )
|
||||||
return 0; /* no name at left margin */
|
return 0; /* no name at left margin */
|
||||||
bend = skipspace(buf + strlen(buf) - 1, -1);
|
bend = skipspace(buf + strlen(buf) - 1, -1);
|
||||||
switch ( *bend )
|
switch ( *bend )
|
||||||
{
|
{
|
||||||
|
case ';': contin = 0 /*2*/; break;
|
||||||
case ')': contin = 1; break;
|
case ')': contin = 1; break;
|
||||||
case '{':
|
case '{': return 0; /* not a function */
|
||||||
case ';': return 0; /* not a function */
|
case '}': return 0; /* not a function */
|
||||||
default: contin = -1;
|
default: contin = -1;
|
||||||
}
|
}
|
||||||
while ( isidchar(*p) ) p++;
|
while ( isidchar(*p) )
|
||||||
|
p++;
|
||||||
endfn = p;
|
endfn = p;
|
||||||
p = skipspace(p, 1);
|
p = skipspace(p, 1);
|
||||||
if ( *p++ != '(' )
|
if ( *p++ != '(' )
|
||||||
@@ -357,6 +513,7 @@ test1(buf)
|
|||||||
char **key = words;
|
char **key = words;
|
||||||
char *kp;
|
char *kp;
|
||||||
int len = endfn - buf;
|
int len = endfn - buf;
|
||||||
|
|
||||||
while ( (kp = *key) != 0 )
|
while ( (kp = *key) != 0 )
|
||||||
{ if ( strlen(kp) == len && !strncmp(kp, buf, len) )
|
{ if ( strlen(kp) == len && !strncmp(kp, buf, len) )
|
||||||
return 0; /* name is a keyword */
|
return 0; /* name is a keyword */
|
||||||
@@ -366,10 +523,13 @@ test1(buf)
|
|||||||
return contin;
|
return contin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Convert a recognized function definition or header to K&R syntax. */
|
||||||
int
|
int
|
||||||
convert1(buf, out)
|
convert1(buf, out, header, convert_varargs)
|
||||||
char *buf;
|
char *buf;
|
||||||
FILE *out;
|
FILE *out;
|
||||||
|
int header; /* Boolean */
|
||||||
|
int convert_varargs; /* Boolean */
|
||||||
{ char *endfn;
|
{ char *endfn;
|
||||||
register char *p;
|
register char *p;
|
||||||
char **breaks;
|
char **breaks;
|
||||||
@@ -377,9 +537,12 @@ convert1(buf, out)
|
|||||||
char **btop;
|
char **btop;
|
||||||
char **bp;
|
char **bp;
|
||||||
char **ap;
|
char **ap;
|
||||||
|
char *vararg = 0;
|
||||||
|
|
||||||
/* Pre-ANSI implementations don't agree on whether strchr */
|
/* Pre-ANSI implementations don't agree on whether strchr */
|
||||||
/* is called strchr or index, so we open-code it here. */
|
/* is called strchr or index, so we open-code it here. */
|
||||||
for ( endfn = buf; *(endfn++) != '('; ) ;
|
for ( endfn = buf; *(endfn++) != '('; )
|
||||||
|
;
|
||||||
top: p = endfn;
|
top: p = endfn;
|
||||||
breaks = (char **)malloc(sizeof(char *) * num_breaks * 2);
|
breaks = (char **)malloc(sizeof(char *) * num_breaks * 2);
|
||||||
if ( breaks == 0 )
|
if ( breaks == 0 )
|
||||||
@@ -393,7 +556,10 @@ top: p = endfn;
|
|||||||
/* Parse the argument list */
|
/* Parse the argument list */
|
||||||
do
|
do
|
||||||
{ int level = 0;
|
{ int level = 0;
|
||||||
|
char *lp = NULL;
|
||||||
|
char *rp;
|
||||||
char *end = NULL;
|
char *end = NULL;
|
||||||
|
|
||||||
if ( bp >= btop )
|
if ( bp >= btop )
|
||||||
{ /* Filled up break table. */
|
{ /* Filled up break table. */
|
||||||
/* Allocate a bigger one and start over. */
|
/* Allocate a bigger one and start over. */
|
||||||
@@ -406,13 +572,27 @@ top: p = endfn;
|
|||||||
for ( ; end == NULL; p++ )
|
for ( ; end == NULL; p++ )
|
||||||
{ switch(*p)
|
{ switch(*p)
|
||||||
{
|
{
|
||||||
case ',': if ( !level ) end = p; break;
|
case ',':
|
||||||
case '(': level++; break;
|
if ( !level ) end = p;
|
||||||
case ')': if ( --level < 0 ) end = p; break;
|
break;
|
||||||
case '/': p = skipspace(p, 1) - 1; break;
|
case '(':
|
||||||
default: ;
|
if ( !level ) lp = p;
|
||||||
|
level++;
|
||||||
|
break;
|
||||||
|
case ')':
|
||||||
|
if ( --level < 0 ) end = p;
|
||||||
|
else rp = p;
|
||||||
|
break;
|
||||||
|
case '/':
|
||||||
|
p = skipspace(p, 1) - 1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* Erase any embedded prototype parameters. */
|
||||||
|
if ( lp )
|
||||||
|
writeblanks(lp + 1, rp);
|
||||||
p--; /* back up over terminator */
|
p--; /* back up over terminator */
|
||||||
/* Find the name being declared. */
|
/* Find the name being declared. */
|
||||||
/* This is complicated because of procedure and */
|
/* This is complicated because of procedure and */
|
||||||
@@ -440,10 +620,16 @@ top: p = endfn;
|
|||||||
goto found;
|
goto found;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default: goto found;
|
default:
|
||||||
|
goto found;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
found: if ( *p == '.' && p[-1] == '.' && p[-2] == '.' )
|
found: if ( *p == '.' && p[-1] == '.' && p[-2] == '.' )
|
||||||
|
{ if ( convert_varargs )
|
||||||
|
{ *bp++ = "va_alist";
|
||||||
|
vararg = p-2;
|
||||||
|
}
|
||||||
|
else
|
||||||
{ p++;
|
{ p++;
|
||||||
if ( bp == breaks + 1 ) /* sole argument */
|
if ( bp == breaks + 1 ) /* sole argument */
|
||||||
writeblanks(breaks[0], p);
|
writeblanks(breaks[0], p);
|
||||||
@@ -451,6 +637,7 @@ found: if ( *p == '.' && p[-1] == '.' && p[-2] == '.' )
|
|||||||
writeblanks(bp[-1] - 1, p);
|
writeblanks(bp[-1] - 1, p);
|
||||||
bp--;
|
bp--;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{ while ( isidchar(*p) ) p--;
|
{ while ( isidchar(*p) ) p--;
|
||||||
*bp++ = p+1;
|
*bp++ = p+1;
|
||||||
@@ -470,19 +657,37 @@ found: if ( *p == '.' && p[-1] == '.' && p[-2] == '.' )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Put out the function name */
|
/* Put out the function name and left parenthesis. */
|
||||||
p = buf;
|
p = buf;
|
||||||
while ( p != endfn ) putc(*p, out), p++;
|
while ( p != endfn ) putc(*p, out), p++;
|
||||||
/* Put out the declaration */
|
/* Put out the declaration. */
|
||||||
for ( ap = breaks+1; ap < bp; ap += 2 )
|
if ( header )
|
||||||
|
{ fputs(");", out);
|
||||||
|
for ( p = breaks[0]; *p; p++ )
|
||||||
|
if ( *p == '\r' || *p == '\n' )
|
||||||
|
putc(*p, out);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ for ( ap = breaks+1; ap < bp; ap += 2 )
|
||||||
{ p = *ap;
|
{ p = *ap;
|
||||||
while ( isidchar(*p) ) putc(*p, out), p++;
|
while ( isidchar(*p) )
|
||||||
if ( ap < bp - 1 ) fputs(", ", out);
|
putc(*p, out), p++;
|
||||||
|
if ( ap < bp - 1 )
|
||||||
|
fputs(", ", out);
|
||||||
}
|
}
|
||||||
fputs(") ", out);
|
fputs(") ", out);
|
||||||
/* Put out the argument declarations */
|
/* Put out the argument declarations */
|
||||||
for ( ap = breaks+2; ap <= bp; ap += 2 ) (*ap)[-1] = ';';
|
for ( ap = breaks+2; ap <= bp; ap += 2 )
|
||||||
|
(*ap)[-1] = ';';
|
||||||
|
if ( vararg != 0 )
|
||||||
|
{ *vararg = 0;
|
||||||
|
fputs(breaks[0], out); /* any prior args */
|
||||||
|
fputs("va_dcl", out); /* the final arg */
|
||||||
|
fputs(bp[0], out);
|
||||||
|
}
|
||||||
|
else
|
||||||
fputs(breaks[0], out);
|
fputs(breaks[0], out);
|
||||||
|
}
|
||||||
free((char *)breaks);
|
free((char *)breaks);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
11
example.c
11
example.c
@@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
/* example.c - an example of using libpng */
|
/* example.c - an example of using libpng */
|
||||||
|
|
||||||
/* This is an example of how to use libpng to read and write PNG files.
|
/* This is an example of how to use libpng to read and write PNG files.
|
||||||
@@ -14,7 +15,7 @@
|
|||||||
|
|
||||||
#include "png.h"
|
#include "png.h"
|
||||||
|
|
||||||
/* Check to see if a file is a PNG file using png_check_sig(). Returns
|
/* Check to see if a file is a PNG file using png_sig_cmp(). Returns
|
||||||
* non-zero if the image is a PNG, and 0 if it isn't a PNG.
|
* non-zero if the image is a PNG, and 0 if it isn't a PNG.
|
||||||
*
|
*
|
||||||
* If this call is successful, and you are going to keep the file open,
|
* If this call is successful, and you are going to keep the file open,
|
||||||
@@ -28,7 +29,7 @@
|
|||||||
*
|
*
|
||||||
* Many applications already read the first 2 or 4 bytes from the start
|
* Many applications already read the first 2 or 4 bytes from the start
|
||||||
* of the image to determine the file type, so it would be easiest just
|
* of the image to determine the file type, so it would be easiest just
|
||||||
* to pass the bytes to png_check_sig() or even skip that if you know
|
* to pass the bytes to png_sig_cmp() or even skip that if you know
|
||||||
* you have a PNG file, and call png_set_sig_bytes().
|
* you have a PNG file, and call png_set_sig_bytes().
|
||||||
*/
|
*/
|
||||||
#define PNG_BYTES_TO_CHECK 4
|
#define PNG_BYTES_TO_CHECK 4
|
||||||
@@ -45,7 +46,7 @@ int check_if_png(char *file_name, FILE **fp)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Compare the first PNG_BYTES_TO_CHECK bytes of the signature. */
|
/* Compare the first PNG_BYTES_TO_CHECK bytes of the signature. */
|
||||||
return(png_check_sig(buf, PNG_BYTES_TO_CHECK));
|
return(png_sig_cmp(buf, (png_size_t)0, PNG_BYTES_TO_CHECK));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Read a PNG file. You may want to return an error code if the read
|
/* Read a PNG file. You may want to return an error code if the read
|
||||||
@@ -91,7 +92,7 @@ void read_png(FILE *fp, unsigned int sig_read) /* file is already open */
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Allocate/initialize the memory for image information. REQUIRED. */
|
/* Allocate/initialize the memory for image information. REQUIRED. */
|
||||||
info_ptr = png_create_info_struct();
|
info_ptr = png_create_info_struct(png_ptr);
|
||||||
if (info_ptr == NULL)
|
if (info_ptr == NULL)
|
||||||
{
|
{
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
@@ -126,7 +127,7 @@ void read_png(FILE *fp, unsigned int sig_read) /* file is already open */
|
|||||||
#endif no_streams /* Use only one I/O method! */
|
#endif no_streams /* Use only one I/O method! */
|
||||||
|
|
||||||
/* If we have already read some of the signature */
|
/* If we have already read some of the signature */
|
||||||
png_set_sig_bytes_read(png_ptr, sig_read);
|
png_set_sig_bytes(png_ptr, sig_read);
|
||||||
|
|
||||||
/* The call to png_read_info() gives us all of the information from the
|
/* The call to png_read_info() gives us all of the information from the
|
||||||
* PNG file before the first IDAT (image data chunk). REQUIRED
|
* PNG file before the first IDAT (image data chunk). REQUIRED
|
||||||
|
|||||||
136
libpng.3
136
libpng.3
@@ -1,4 +1,4 @@
|
|||||||
.TH LIBPNG 3 "February 28, 1998"
|
.TH LIBPNG 3 "March 9, 1998"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
libpng \- Portable Network Graphics (PNG) Reference Library
|
libpng \- Portable Network Graphics (PNG) Reference Library
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@@ -301,6 +301,12 @@ png_colorp palette, int num_palette);
|
|||||||
void png_set_read_fn (png_structp png_ptr, png_voidp io_ptr,
|
void png_set_read_fn (png_structp png_ptr, png_voidp io_ptr,
|
||||||
png_rw_ptr read_data_fn);
|
png_rw_ptr read_data_fn);
|
||||||
|
|
||||||
|
void png_set_read_status_fn (png_structp png_ptr, png_read_status_ptr
|
||||||
|
read_row_fn);
|
||||||
|
|
||||||
|
void png_set_read_user_transform_fn (png_structp png_ptr,
|
||||||
|
png_user_transform_ptr read_user_transform_fn);
|
||||||
|
|
||||||
void png_set_rgb_to_gray (png_structp png_ptr);
|
void png_set_rgb_to_gray (png_structp png_ptr);
|
||||||
|
|
||||||
void png_set_sBIT (png_structp png_ptr, png_infop info_ptr,
|
void png_set_sBIT (png_structp png_ptr, png_infop info_ptr,
|
||||||
@@ -337,6 +343,12 @@ png_bytep trans, int num_trans, png_color_16p trans_values);
|
|||||||
void png_set_write_fn (png_structp png_ptr, png_voidp io_ptr,
|
void png_set_write_fn (png_structp png_ptr, png_voidp io_ptr,
|
||||||
png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn);
|
png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn);
|
||||||
|
|
||||||
|
void png_set_write_status_fn (png_structp png_ptr, png_write_status_ptr
|
||||||
|
write_row_fn);
|
||||||
|
|
||||||
|
void png_set_write_user_transform_fn (png_structp png_ptr,
|
||||||
|
png_user_transform_ptr write_user_transform_fn);
|
||||||
|
|
||||||
int png_sig_cmp (png_bytep sig, png_size_t start, png_size_t
|
int png_sig_cmp (png_bytep sig, png_size_t start, png_size_t
|
||||||
num_to_check);
|
num_to_check);
|
||||||
|
|
||||||
@@ -384,23 +396,23 @@ Following is a copy of the libpng.txt file that accompanies libpng.
|
|||||||
.SH LIBPNG.TXT
|
.SH LIBPNG.TXT
|
||||||
libpng.txt - A description on how to use and modify libpng
|
libpng.txt - A description on how to use and modify libpng
|
||||||
|
|
||||||
libpng version 0.99e
|
libpng version 1.0.1 March 9, 1998
|
||||||
Updated and distributed by Glenn Randers-Pehrson
|
Updated and distributed by Glenn Randers-Pehrson
|
||||||
<randeg@alumni.rpi.edu>
|
<randeg@alumni.rpi.edu>
|
||||||
Copyright (c) 1998, Glenn Randers-Pehrson
|
Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
February 28, 1998
|
For conditions of distribution and use, see copyright
|
||||||
|
notice in png.h.
|
||||||
|
|
||||||
based on:
|
based on:
|
||||||
|
|
||||||
libpng 1.0 beta 6 version 0.96
|
libpng 1.0 beta 6 version 0.96 May 28, 1997
|
||||||
Updated and distributed by Andreas Dilger
|
Updated and distributed by Andreas Dilger
|
||||||
Copyright (c) 1996, 1997 Andreas Dilger
|
Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
May 28, 1997
|
|
||||||
|
|
||||||
libpng 1.0 beta 2 - version 0.88
|
libpng 1.0 beta 2 - version 0.88 January 26, 1996
|
||||||
For conditions of distribution and use, see copyright
|
For conditions of distribution and use, see copyright
|
||||||
notice in png.h. Copyright (c) 1995, 1996 Guy Eric
|
notice in png.h. Copyright (c) 1995, 1996 Guy Eric
|
||||||
Schalnat, Group 42, Inc. January 26, 1996
|
Schalnat, Group 42, Inc.
|
||||||
|
|
||||||
Updated/rewritten per request in the libpng FAQ
|
Updated/rewritten per request in the libpng FAQ
|
||||||
Copyright (c) 1995 Frank J. T. Wojcik
|
Copyright (c) 1995 Frank J. T. Wojcik
|
||||||
@@ -414,7 +426,8 @@ file: introduction, structures, reading, writing, and modification and
|
|||||||
configuration notes for various special platforms. In addition to this
|
configuration notes for various special platforms. In addition to this
|
||||||
file, example.c is a good starting point for using the library, as
|
file, example.c is a good starting point for using the library, as
|
||||||
it is heavily commented and should include everything most people
|
it is heavily commented and should include everything most people
|
||||||
will need.
|
will need. We assume that libpng is already installed; see the
|
||||||
|
INSTALL file for instructions on how to install libpng.
|
||||||
|
|
||||||
Libpng was written as a companion to the PNG specification, as a way
|
Libpng was written as a companion to the PNG specification, as a way
|
||||||
of reducing the amount of time and effort it takes to support the PNG
|
of reducing the amount of time and effort it takes to support the PNG
|
||||||
@@ -586,6 +599,22 @@ libpng know that there are some bytes missing from the start of the file.
|
|||||||
|
|
||||||
png_set_sig_bytes(png_ptr, number);
|
png_set_sig_bytes(png_ptr, number);
|
||||||
|
|
||||||
|
At this point, you can set up a callback function that will be
|
||||||
|
called after each row has been read, which you can use to control
|
||||||
|
a progress meter or the like. It's demonstrated in pngtest.c.
|
||||||
|
You must supply a function
|
||||||
|
|
||||||
|
void read_row_callback(png_ptr, png_uint_32 row, int pass);
|
||||||
|
{
|
||||||
|
/* put your code here */
|
||||||
|
}
|
||||||
|
|
||||||
|
(You can give it another name that you like instead of "read_row_callback")
|
||||||
|
|
||||||
|
To inform libpng about your function, use
|
||||||
|
|
||||||
|
png_set_read_status_fn(png_ptr, read_row_callback);
|
||||||
|
|
||||||
In PNG files, the alpha channel in an image is the level of opacity.
|
In PNG files, the alpha channel in an image is the level of opacity.
|
||||||
If you need the alpha channel in an image to be the level of transparency
|
If you need the alpha channel in an image to be the level of transparency
|
||||||
instead of opacity, you can invert the alpha channel (or the tRNS chunk
|
instead of opacity, you can invert the alpha channel (or the tRNS chunk
|
||||||
@@ -599,6 +628,21 @@ because the tRNS chunk data must be modified in the case of paletted images.
|
|||||||
If your image is not a paletted image, the tRNS data (which in such cases
|
If your image is not a paletted image, the tRNS data (which in such cases
|
||||||
represents a single color to be rendered as transparent) won't be changed.
|
represents a single color to be rendered as transparent) won't be changed.
|
||||||
|
|
||||||
|
Finally, you can write your own transformation function if none of
|
||||||
|
the existing ones meets your needs. This is done by setting a callback
|
||||||
|
with
|
||||||
|
|
||||||
|
png_set_read_user_transform_fn(png_ptr,
|
||||||
|
read_transform_fn);
|
||||||
|
|
||||||
|
You must supply the function
|
||||||
|
|
||||||
|
void read_transform_fn(png_ptr ptr, row_info_ptr
|
||||||
|
row_info, png_bytep data)
|
||||||
|
|
||||||
|
See pngtest.c for a working example. Your function will be called
|
||||||
|
after all of the other transformations have been processed.
|
||||||
|
|
||||||
You are now ready to read all the file information up to the actual
|
You are now ready to read all the file information up to the actual
|
||||||
image data. You do this with a call to png_read_info().
|
image data. You do this with a call to png_read_info().
|
||||||
|
|
||||||
@@ -958,9 +1002,8 @@ the overall gamma correction required to produce pleasing results,
|
|||||||
which depends on the lighting conditions in the surrounding environment.
|
which depends on the lighting conditions in the surrounding environment.
|
||||||
Screen_gamma is display_gamma/viewing_gamma, where viewing_gamma is
|
Screen_gamma is display_gamma/viewing_gamma, where viewing_gamma is
|
||||||
the amount of additional gamma correction needed to compensate for
|
the amount of additional gamma correction needed to compensate for
|
||||||
a dark (viewing_gamma=1.25) environment.
|
a (viewing_gamma=1.25) environment. In a dim or brightly lit room, no
|
||||||
In a dim or brightly lit room, no compensation other than the display_gamma
|
compensation other than the display_gamma is needed (viewing_gamma=1.0).
|
||||||
is needed (viewing_gamma=1.0).
|
|
||||||
|
|
||||||
if (/* We have a user-defined screen
|
if (/* We have a user-defined screen
|
||||||
gamma value */)
|
gamma value */)
|
||||||
@@ -1299,6 +1342,7 @@ png_infop info_ptr;
|
|||||||
read.
|
read.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
|
info_callback(png_structp png_ptr, png_infop info)
|
||||||
{
|
{
|
||||||
/* Do any setup here, including setting any of
|
/* Do any setup here, including setting any of
|
||||||
the transformations mentioned in the Reading
|
the transformations mentioned in the Reading
|
||||||
@@ -1368,8 +1412,6 @@ png_infop info_ptr;
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.SH IV. Writing
|
.SH IV. Writing
|
||||||
|
|
||||||
Much of this is very similar to reading. However, everything of
|
Much of this is very similar to reading. However, everything of
|
||||||
@@ -1390,7 +1432,10 @@ custom writing functions. See the discussion under Customizing libpng.
|
|||||||
Next, png_struct and png_info need to be allocated and initialized.
|
Next, png_struct and png_info need to be allocated and initialized.
|
||||||
As these can be both relatively large, you may not want to store these
|
As these can be both relatively large, you may not want to store these
|
||||||
on the stack, unless you have stack space to spare. Of course, you
|
on the stack, unless you have stack space to spare. Of course, you
|
||||||
will want to check if they return NULL.
|
will want to check if they return NULL. If you are also reading,
|
||||||
|
you won't want to name your read structure and your write structure
|
||||||
|
both "png_ptr"; you can call them anything you like, such as
|
||||||
|
"read_ptr" and "write_ptr". Look at pngtest.c, for example.
|
||||||
|
|
||||||
png_structp png_ptr = png_create_write_struct
|
png_structp png_ptr = png_create_write_struct
|
||||||
(PNG_LIBPNG_VER_STRING, (void *)user_error_ptr,
|
(PNG_LIBPNG_VER_STRING, (void *)user_error_ptr,
|
||||||
@@ -1433,6 +1478,22 @@ Libpng section below.
|
|||||||
|
|
||||||
png_init_io(png_ptr, fp);
|
png_init_io(png_ptr, fp);
|
||||||
|
|
||||||
|
At this point, you can set up a callback function that will be
|
||||||
|
called after each row has been written, which you can use to control
|
||||||
|
a progress meter or the like. It's demonstrated in pngtest.c.
|
||||||
|
You must supply a function
|
||||||
|
|
||||||
|
void write_row_callback(png_ptr, png_uint_32 row, int pass);
|
||||||
|
{
|
||||||
|
/* put your code here */
|
||||||
|
}
|
||||||
|
|
||||||
|
(You can give it another name that you like instead of "write_row_callback")
|
||||||
|
|
||||||
|
To inform libpng about your function, use
|
||||||
|
|
||||||
|
png_set_write_status_fn(png_ptr, write_row_callback);
|
||||||
|
|
||||||
You now have the option of modifying how the compression library will
|
You now have the option of modifying how the compression library will
|
||||||
run. The following functions are mainly for testing, but may be useful
|
run. The following functions are mainly for testing, but may be useful
|
||||||
in some cases, like if you need to write PNG files extremely fast and
|
in some cases, like if you need to write PNG files extremely fast and
|
||||||
@@ -1789,6 +1850,21 @@ one. This code would be used if the pixels are supplied with this reversed
|
|||||||
|
|
||||||
png_set_invert_mono(png_ptr);
|
png_set_invert_mono(png_ptr);
|
||||||
|
|
||||||
|
Finally, you can write your own transformation function if none of
|
||||||
|
the existing ones meets your needs. This is done by setting a callback
|
||||||
|
with
|
||||||
|
|
||||||
|
png_set_write_user_transform_fn(png_ptr,
|
||||||
|
write_transform_fn);
|
||||||
|
|
||||||
|
You must supply the function
|
||||||
|
|
||||||
|
void write_transform_fn(png_ptr ptr, row_info_ptr
|
||||||
|
row_info, png_bytep data)
|
||||||
|
|
||||||
|
See pngtest.c for a working example. Your function will be called
|
||||||
|
before any of the other transformations have been processed.
|
||||||
|
|
||||||
It is possible to have libpng flush any pending output, either manually,
|
It is possible to have libpng flush any pending output, either manually,
|
||||||
or automatically after a certain number of lines have been written. To
|
or automatically after a certain number of lines have been written. To
|
||||||
flush the output stream a single time call:
|
flush the output stream a single time call:
|
||||||
@@ -2143,15 +2219,18 @@ There are a bunch of #define's in pngconf.h that control what parts of
|
|||||||
libpng are compiled. All the defines end in _SUPPORTED. If you are
|
libpng are compiled. All the defines end in _SUPPORTED. If you are
|
||||||
never going to use an ability, you can change the #define to #undef
|
never going to use an ability, you can change the #define to #undef
|
||||||
before recompiling libpng and save yourself code and data space.
|
before recompiling libpng and save yourself code and data space.
|
||||||
You can also turn them off en masse with a compiler directive that
|
You can also turn a number of them off en masse with a compiler directive
|
||||||
defines PNG_READ[or WRITE]_NOT_FULLY_SUPPORTED, or
|
that defines PNG_READ[or WRITE]_TRANSFORMS_NOT_SUPPORTED, or
|
||||||
PNG_READ[or WRITE]_ANCILLARY_CHUNKS_NOT_SUPPORTED, or all four,
|
PNG_READ[or WRITE]_ANCILLARY_CHUNKS_NOT_SUPPORTED, or all four,
|
||||||
along with directives to turn on any of the capabilities that you do
|
along with directives to turn on any of the capabilities that you do
|
||||||
want. The NOT_FULLY_SUPPORTED directives disable the extra
|
want. The PNG_READ[or WRITE]_TRANSFORMS_NOT_SUPPORTED directives disable
|
||||||
transformations but still leave the library fully capable of reading
|
the extra transformations but still leave the library fully capable of reading
|
||||||
and writing PNG files with all known public chunks [except for sPLT].
|
and writing PNG files with all known public chunks [except for sPLT].
|
||||||
Use of the PNG_READ[or WRITE]_ANCILLARY_CHUNKS_NOT_SUPPORTED directive
|
Use of the PNG_READ[or WRITE]_ANCILLARY_CHUNKS_NOT_SUPPORTED directive
|
||||||
produces a library that is incapable of reading or writing ancillary chunks.
|
produces a library that is incapable of reading or writing ancillary chunks.
|
||||||
|
If you are not using the progressive reading capability, you can
|
||||||
|
turn that off with PNG_PROGRESSIVE_READ_NOT_SUPPORTED (don't confuse
|
||||||
|
this with the INTERLACING capability, which you'll still have).
|
||||||
|
|
||||||
All the reading and writing specific code are in separate files, so the
|
All the reading and writing specific code are in separate files, so the
|
||||||
linker should only grab the files it needs. However, if you want to
|
linker should only grab the files it needs. However, if you want to
|
||||||
@@ -2222,15 +2301,13 @@ the first widely used release:
|
|||||||
[should have been 2.0.95]
|
[should have been 2.0.95]
|
||||||
0.96 ("1.0 beta 6") 0.96 0.96
|
0.96 ("1.0 beta 6") 0.96 0.96
|
||||||
[should have been 2.0.96]
|
[should have been 2.0.96]
|
||||||
0.97b ("1.00.97 beta 7") 1.00.97 1.0.0
|
0.97b ("1.00.97 beta 7") 1.00.97 1.0.1
|
||||||
[should have been 2.0.97]
|
[should have been 2.0.97]
|
||||||
0.97c 0.97 2.0.97
|
0.97c 0.97 2.0.97
|
||||||
0.98 0.98 2.0.98
|
0.98 0.98 2.0.98
|
||||||
0.99 0.99 2.0.99
|
0.99 0.99 2.0.99
|
||||||
0.99a 0.99 2.0.99
|
0.99a-m 0.99 2.0.99
|
||||||
0.99b 0.99 2.0.99
|
1.0.1 1.00 2.1.0
|
||||||
0.99e 0.99 2.0.99
|
|
||||||
1.0 1.00 2.1.0
|
|
||||||
|
|
||||||
Henceforth the source version will match the shared-library minor
|
Henceforth the source version will match the shared-library minor
|
||||||
and patch numbers; the shared-library major version number will be
|
and patch numbers; the shared-library major version number will be
|
||||||
@@ -2288,7 +2365,7 @@ possible without all of you.
|
|||||||
|
|
||||||
Thanks to Frank J. T. Wojcik for helping with the documentation.
|
Thanks to Frank J. T. Wojcik for helping with the documentation.
|
||||||
|
|
||||||
Libpng version 0.99e (February 28, 1998):
|
Libpng version 1.0.1 (March 9, 1998):
|
||||||
Initially created in 1995 by Guy Eric Schalnat, then of Group 42, Inc.
|
Initially created in 1995 by Guy Eric Schalnat, then of Group 42, Inc.
|
||||||
Currently maintained by Glenn Randers-Pehrson (randeg@alumni.rpi.edu).
|
Currently maintained by Glenn Randers-Pehrson (randeg@alumni.rpi.edu).
|
||||||
|
|
||||||
@@ -2296,17 +2373,6 @@ Supported by the PNG development group
|
|||||||
.br
|
.br
|
||||||
(png-implement@dworkin.wustl.edu).
|
(png-implement@dworkin.wustl.edu).
|
||||||
|
|
||||||
.SH BETA NOTICE
|
|
||||||
This is a beta version. It reads and writes valid files on the
|
|
||||||
platforms I have, and has had a wide testing program. You may
|
|
||||||
have to modify the includes in png.h to get it to work on your
|
|
||||||
system, and you may have to supply the correct compiler flags in
|
|
||||||
the makefile if you can't find a makefile suitable for your
|
|
||||||
operating system/compiler combination. Please contact the authors
|
|
||||||
via the mailing list png-implement@dworkin.wustl.edu if you have any
|
|
||||||
problems, or if you want your compiler/platform to be supported in
|
|
||||||
the next official libpng release.
|
|
||||||
|
|
||||||
.SH COPYRIGHT NOTICE:
|
.SH COPYRIGHT NOTICE:
|
||||||
|
|
||||||
The PNG Reference Library (libpng) is supplied "AS IS". The Contributing
|
The PNG Reference Library (libpng) is supplied "AS IS". The Contributing
|
||||||
|
|||||||
94
libpng.txt
94
libpng.txt
@@ -1,22 +1,22 @@
|
|||||||
libpng.txt - A description on how to use and modify libpng
|
libpng.txt - A description on how to use and modify libpng
|
||||||
|
|
||||||
libpng version 0.99e
|
libpng version 1.0.1 March 9, 1998
|
||||||
Updated and distributed by Glenn Randers-Pehrson
|
Updated and distributed by Glenn Randers-Pehrson
|
||||||
<randeg@alumni.rpi.edu>
|
<randeg@alumni.rpi.edu>
|
||||||
Copyright (c) 1998, Glenn Randers-Pehrson
|
Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
February 28, 1998
|
For conditions of distribution and use, see copyright
|
||||||
|
notice in png.h.
|
||||||
|
|
||||||
based on:
|
based on:
|
||||||
|
|
||||||
libpng 1.0 beta 6 version 0.96
|
libpng 1.0 beta 6 version 0.96 May 28, 1997
|
||||||
Updated and distributed by Andreas Dilger
|
Updated and distributed by Andreas Dilger
|
||||||
Copyright (c) 1996, 1997 Andreas Dilger
|
Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
May 28, 1997
|
|
||||||
|
|
||||||
libpng 1.0 beta 2 - version 0.88
|
libpng 1.0 beta 2 - version 0.88 January 26, 1996
|
||||||
For conditions of distribution and use, see copyright
|
For conditions of distribution and use, see copyright
|
||||||
notice in png.h. Copyright (c) 1995, 1996 Guy Eric
|
notice in png.h. Copyright (c) 1995, 1996 Guy Eric
|
||||||
Schalnat, Group 42, Inc. January 26, 1996
|
Schalnat, Group 42, Inc.
|
||||||
|
|
||||||
Updated/rewritten per request in the libpng FAQ
|
Updated/rewritten per request in the libpng FAQ
|
||||||
Copyright (c) 1995 Frank J. T. Wojcik
|
Copyright (c) 1995 Frank J. T. Wojcik
|
||||||
@@ -30,7 +30,8 @@ file: introduction, structures, reading, writing, and modification and
|
|||||||
configuration notes for various special platforms. In addition to this
|
configuration notes for various special platforms. In addition to this
|
||||||
file, example.c is a good starting point for using the library, as
|
file, example.c is a good starting point for using the library, as
|
||||||
it is heavily commented and should include everything most people
|
it is heavily commented and should include everything most people
|
||||||
will need.
|
will need. We assume that libpng is already installed; see the
|
||||||
|
INSTALL file for instructions on how to install libpng.
|
||||||
|
|
||||||
Libpng was written as a companion to the PNG specification, as a way
|
Libpng was written as a companion to the PNG specification, as a way
|
||||||
of reducing the amount of time and effort it takes to support the PNG
|
of reducing the amount of time and effort it takes to support the PNG
|
||||||
@@ -202,6 +203,22 @@ libpng know that there are some bytes missing from the start of the file.
|
|||||||
|
|
||||||
png_set_sig_bytes(png_ptr, number);
|
png_set_sig_bytes(png_ptr, number);
|
||||||
|
|
||||||
|
At this point, you can set up a callback function that will be
|
||||||
|
called after each row has been read, which you can use to control
|
||||||
|
a progress meter or the like. It's demonstrated in pngtest.c.
|
||||||
|
You must supply a function
|
||||||
|
|
||||||
|
void read_row_callback(png_ptr, png_uint_32 row, int pass);
|
||||||
|
{
|
||||||
|
/* put your code here */
|
||||||
|
}
|
||||||
|
|
||||||
|
(You can give it another name that you like instead of "read_row_callback")
|
||||||
|
|
||||||
|
To inform libpng about your function, use
|
||||||
|
|
||||||
|
png_set_read_status_fn(png_ptr, read_row_callback);
|
||||||
|
|
||||||
In PNG files, the alpha channel in an image is the level of opacity.
|
In PNG files, the alpha channel in an image is the level of opacity.
|
||||||
If you need the alpha channel in an image to be the level of transparency
|
If you need the alpha channel in an image to be the level of transparency
|
||||||
instead of opacity, you can invert the alpha channel (or the tRNS chunk
|
instead of opacity, you can invert the alpha channel (or the tRNS chunk
|
||||||
@@ -215,6 +232,21 @@ because the tRNS chunk data must be modified in the case of paletted images.
|
|||||||
If your image is not a paletted image, the tRNS data (which in such cases
|
If your image is not a paletted image, the tRNS data (which in such cases
|
||||||
represents a single color to be rendered as transparent) won't be changed.
|
represents a single color to be rendered as transparent) won't be changed.
|
||||||
|
|
||||||
|
Finally, you can write your own transformation function if none of
|
||||||
|
the existing ones meets your needs. This is done by setting a callback
|
||||||
|
with
|
||||||
|
|
||||||
|
png_set_read_user_transform_fn(png_ptr,
|
||||||
|
read_transform_fn);
|
||||||
|
|
||||||
|
You must supply the function
|
||||||
|
|
||||||
|
void read_transform_fn(png_ptr ptr, row_info_ptr
|
||||||
|
row_info, png_bytep data)
|
||||||
|
|
||||||
|
See pngtest.c for a working example. Your function will be called
|
||||||
|
after all of the other transformations have been processed.
|
||||||
|
|
||||||
You are now ready to read all the file information up to the actual
|
You are now ready to read all the file information up to the actual
|
||||||
image data. You do this with a call to png_read_info().
|
image data. You do this with a call to png_read_info().
|
||||||
|
|
||||||
@@ -914,6 +946,7 @@ png_infop info_ptr;
|
|||||||
read.
|
read.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
|
info_callback(png_structp png_ptr, png_infop info)
|
||||||
{
|
{
|
||||||
/* Do any setup here, including setting any of
|
/* Do any setup here, including setting any of
|
||||||
the transformations mentioned in the Reading
|
the transformations mentioned in the Reading
|
||||||
@@ -1005,7 +1038,10 @@ custom writing functions. See the discussion under Customizing libpng.
|
|||||||
Next, png_struct and png_info need to be allocated and initialized.
|
Next, png_struct and png_info need to be allocated and initialized.
|
||||||
As these can be both relatively large, you may not want to store these
|
As these can be both relatively large, you may not want to store these
|
||||||
on the stack, unless you have stack space to spare. Of course, you
|
on the stack, unless you have stack space to spare. Of course, you
|
||||||
will want to check if they return NULL.
|
will want to check if they return NULL. If you are also reading,
|
||||||
|
you won't want to name your read structure and your write structure
|
||||||
|
both "png_ptr"; you can call them anything you like, such as
|
||||||
|
"read_ptr" and "write_ptr". Look at pngtest.c, for example.
|
||||||
|
|
||||||
png_structp png_ptr = png_create_write_struct
|
png_structp png_ptr = png_create_write_struct
|
||||||
(PNG_LIBPNG_VER_STRING, (void *)user_error_ptr,
|
(PNG_LIBPNG_VER_STRING, (void *)user_error_ptr,
|
||||||
@@ -1048,6 +1084,22 @@ Libpng section below.
|
|||||||
|
|
||||||
png_init_io(png_ptr, fp);
|
png_init_io(png_ptr, fp);
|
||||||
|
|
||||||
|
At this point, you can set up a callback function that will be
|
||||||
|
called after each row has been written, which you can use to control
|
||||||
|
a progress meter or the like. It's demonstrated in pngtest.c.
|
||||||
|
You must supply a function
|
||||||
|
|
||||||
|
void write_row_callback(png_ptr, png_uint_32 row, int pass);
|
||||||
|
{
|
||||||
|
/* put your code here */
|
||||||
|
}
|
||||||
|
|
||||||
|
(You can give it another name that you like instead of "write_row_callback")
|
||||||
|
|
||||||
|
To inform libpng about your function, use
|
||||||
|
|
||||||
|
png_set_write_status_fn(png_ptr, write_row_callback);
|
||||||
|
|
||||||
You now have the option of modifying how the compression library will
|
You now have the option of modifying how the compression library will
|
||||||
run. The following functions are mainly for testing, but may be useful
|
run. The following functions are mainly for testing, but may be useful
|
||||||
in some cases, like if you need to write PNG files extremely fast and
|
in some cases, like if you need to write PNG files extremely fast and
|
||||||
@@ -1404,6 +1456,21 @@ one. This code would be used if the pixels are supplied with this reversed
|
|||||||
|
|
||||||
png_set_invert_mono(png_ptr);
|
png_set_invert_mono(png_ptr);
|
||||||
|
|
||||||
|
Finally, you can write your own transformation function if none of
|
||||||
|
the existing ones meets your needs. This is done by setting a callback
|
||||||
|
with
|
||||||
|
|
||||||
|
png_set_write_user_transform_fn(png_ptr,
|
||||||
|
write_transform_fn);
|
||||||
|
|
||||||
|
You must supply the function
|
||||||
|
|
||||||
|
void write_transform_fn(png_ptr ptr, row_info_ptr
|
||||||
|
row_info, png_bytep data)
|
||||||
|
|
||||||
|
See pngtest.c for a working example. Your function will be called
|
||||||
|
before any of the other transformations have been processed.
|
||||||
|
|
||||||
It is possible to have libpng flush any pending output, either manually,
|
It is possible to have libpng flush any pending output, either manually,
|
||||||
or automatically after a certain number of lines have been written. To
|
or automatically after a certain number of lines have been written. To
|
||||||
flush the output stream a single time call:
|
flush the output stream a single time call:
|
||||||
@@ -1758,15 +1825,18 @@ There are a bunch of #define's in pngconf.h that control what parts of
|
|||||||
libpng are compiled. All the defines end in _SUPPORTED. If you are
|
libpng are compiled. All the defines end in _SUPPORTED. If you are
|
||||||
never going to use an ability, you can change the #define to #undef
|
never going to use an ability, you can change the #define to #undef
|
||||||
before recompiling libpng and save yourself code and data space.
|
before recompiling libpng and save yourself code and data space.
|
||||||
You can also turn them off en masse with a compiler directive that
|
You can also turn a number of them off en masse with a compiler directive
|
||||||
defines PNG_READ[or WRITE]_NOT_FULLY_SUPPORTED, or
|
that defines PNG_READ[or WRITE]_TRANSFORMS_NOT_SUPPORTED, or
|
||||||
PNG_READ[or WRITE]_ANCILLARY_CHUNKS_NOT_SUPPORTED, or all four,
|
PNG_READ[or WRITE]_ANCILLARY_CHUNKS_NOT_SUPPORTED, or all four,
|
||||||
along with directives to turn on any of the capabilities that you do
|
along with directives to turn on any of the capabilities that you do
|
||||||
want. The NOT_FULLY_SUPPORTED directives disable the extra
|
want. The PNG_READ[or WRITE]_TRANSFORMS_NOT_SUPPORTED directives disable
|
||||||
transformations but still leave the library fully capable of reading
|
the extra transformations but still leave the library fully capable of reading
|
||||||
and writing PNG files with all known public chunks [except for sPLT].
|
and writing PNG files with all known public chunks [except for sPLT].
|
||||||
Use of the PNG_READ[or WRITE]_ANCILLARY_CHUNKS_NOT_SUPPORTED directive
|
Use of the PNG_READ[or WRITE]_ANCILLARY_CHUNKS_NOT_SUPPORTED directive
|
||||||
produces a library that is incapable of reading or writing ancillary chunks.
|
produces a library that is incapable of reading or writing ancillary chunks.
|
||||||
|
If you are not using the progressive reading capability, you can
|
||||||
|
turn that off with PNG_PROGRESSIVE_READ_NOT_SUPPORTED (don't confuse
|
||||||
|
this with the INTERLACING capability, which you'll still have).
|
||||||
|
|
||||||
All the reading and writing specific code are in separate files, so the
|
All the reading and writing specific code are in separate files, so the
|
||||||
linker should only grab the files it needs. However, if you want to
|
linker should only grab the files it needs. However, if you want to
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.TH LIBPNGPF 3 "February 28, 1998"
|
.TH LIBPNGPF 3 "March 9, 1998"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
libpng \- Portable Network Graphics (PNG) Reference Library
|
libpng \- Portable Network Graphics (PNG) Reference Library
|
||||||
(private functions)
|
(private functions)
|
||||||
|
|||||||
2
png.5
2
png.5
@@ -1,4 +1,4 @@
|
|||||||
.TH PNG 5 "February 28, 1998"
|
.TH PNG 5 "March 9, 1998"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
png \- Portable Network Graphics (PNG) format
|
png \- Portable Network Graphics (PNG) format
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
|
|||||||
8
png.c
8
png.c
@@ -1,12 +1,12 @@
|
|||||||
|
|
||||||
/* png.c - location for general purpose libpng functions
|
/* png.c - location for general purpose libpng functions
|
||||||
*
|
*
|
||||||
* libpng 0.99e
|
* libpng 1.0.1
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, Glenn Randers-Pehrson
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
* February 28, 1998
|
* March 9, 1998
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PNG_INTERNAL
|
#define PNG_INTERNAL
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
/* Version information for C files. This had better match the version
|
/* Version information for C files. This had better match the version
|
||||||
* string defined in png.h.
|
* string defined in png.h.
|
||||||
*/
|
*/
|
||||||
char png_libpng_ver[5] = "0.99";
|
char png_libpng_ver[6] = "1.0.1";
|
||||||
|
|
||||||
/* Place to hold the signature string for a PNG file. */
|
/* Place to hold the signature string for a PNG file. */
|
||||||
png_byte FARDATA png_sig[8] = {137, 80, 78, 71, 13, 10, 26, 10};
|
png_byte FARDATA png_sig[8] = {137, 80, 78, 71, 13, 10, 26, 10};
|
||||||
@@ -185,7 +185,7 @@ png_calculate_crc(png_structp png_ptr, png_bytep ptr, png_size_t length)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (need_crc)
|
if (need_crc)
|
||||||
png_ptr->crc = crc32(png_ptr->crc, ptr, length);
|
png_ptr->crc = crc32(png_ptr->crc, ptr, (uInt)length);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Allocate the memory for an info_struct for the application. We don't
|
/* Allocate the memory for an info_struct for the application. We don't
|
||||||
|
|||||||
77
png.h
77
png.h
@@ -1,12 +1,12 @@
|
|||||||
|
|
||||||
/* png.h - header file for PNG reference library
|
/* png.h - header file for PNG reference library
|
||||||
*
|
*
|
||||||
* libpng 0.99e beta
|
* libpng 1.0.1
|
||||||
* For conditions of distribution and use, see the COPYRIGHT NOTICE below.
|
* For conditions of distribution and use, see the COPYRIGHT NOTICE below.
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998 Glenn Randers-Pehrson
|
* Copyright (c) 1998 Glenn Randers-Pehrson
|
||||||
* February 28, 1998
|
* March 9, 1998
|
||||||
*
|
*
|
||||||
* Note about libpng version numbers:
|
* Note about libpng version numbers:
|
||||||
*
|
*
|
||||||
@@ -23,31 +23,17 @@
|
|||||||
* 0.90 ("1.0 beta 4") 0.90 0.90 [should have been 2.0.90]
|
* 0.90 ("1.0 beta 4") 0.90 0.90 [should have been 2.0.90]
|
||||||
* 0.95 ("1.0 beta 5") 0.95 0.95 [should have been 2.0.95]
|
* 0.95 ("1.0 beta 5") 0.95 0.95 [should have been 2.0.95]
|
||||||
* 0.96 ("1.0 beta 6") 0.96 0.96 [should have been 2.0.96]
|
* 0.96 ("1.0 beta 6") 0.96 0.96 [should have been 2.0.96]
|
||||||
* 0.97b ("1.00.97 beta 7") 1.00.97 1.0.0 [should have been 2.0.97]
|
* 0.97b ("1.00.97 beta 7") 1.00.97 1.0.1 [should have been 2.0.97]
|
||||||
* 0.97c 0.97 2.0.97
|
* 0.97c 0.97 2.0.97
|
||||||
* 0.98 0.98 2.0.98
|
* 0.98 0.98 2.0.98
|
||||||
* 0.99 0.99 2.0.99
|
* 0.99 0.99 2.0.99
|
||||||
* 0.99a 0.99 2.0.99
|
* 0.99a-m 0.99 2.0.99
|
||||||
* 0.99b 0.99 2.0.99
|
* 1.0.1 1.00 2.1.0
|
||||||
* 0.99c 0.99 2.0.99
|
|
||||||
* 0.99e 0.99 2.0.99
|
|
||||||
* 1.0 1.00 2.1.0
|
|
||||||
*
|
*
|
||||||
* Henceforth the source version will match the shared-library minor
|
* Henceforth the source version will match the shared-library minor
|
||||||
* and patch numbers; the shared-library major version number will be
|
* and patch numbers; the shared-library major version number will be
|
||||||
* used for changes in backward compatibility, as it is intended.
|
* used for changes in backward compatibility, as it is intended.
|
||||||
*
|
*
|
||||||
* BETA NOTICE:
|
|
||||||
* This is a beta version. It reads and writes valid files on the
|
|
||||||
* platforms I have, and has had a wide testing program. You may
|
|
||||||
* have to modify the includes below to get it to work on your
|
|
||||||
* system, and you may have to supply the correct compiler flags in
|
|
||||||
* the makefile if you can't find a makefile suitable for your
|
|
||||||
* operating system/compiler combination. Read libpng.txt for more
|
|
||||||
* information, including how to contact the authors if you have any
|
|
||||||
* problems, or if you want your compiler/platform to be supported in
|
|
||||||
* the next official libpng release.
|
|
||||||
*
|
|
||||||
* See libpng.txt for more information. The PNG specification is available
|
* See libpng.txt for more information. The PNG specification is available
|
||||||
* as RFC 2083 <ftp://ftp.uu.net/graphics/png/documents/>
|
* as RFC 2083 <ftp://ftp.uu.net/graphics/png/documents/>
|
||||||
* and as a W3C Recommendation <http://www.w3.org/TR/REC.png.html>
|
* and as a W3C Recommendation <http://www.w3.org/TR/REC.png.html>
|
||||||
@@ -126,19 +112,20 @@ extern "C" {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* Version information for png.h - this should match the version in png.c */
|
/* Version information for png.h - this should match the version in png.c */
|
||||||
#define PNG_LIBPNG_VER_STRING "0.99"
|
#define PNG_LIBPNG_VER_STRING "1.0.1"
|
||||||
|
|
||||||
/* careful here. At one time, I wanted to use 082, but that would be octal.
|
/* careful here. At one time, I wanted to use 082, but that would be octal.
|
||||||
* Version 1.0 will be 100 here, etc.
|
* We must not include leading blanks.
|
||||||
*/
|
* Versions 0.7 through 1.0.0 were in the range 0 to 100 here. From
|
||||||
#define PNG_LIBPNG_VER 99
|
* version 1.0.1 it's xxxyyyzzzzL, where x=major, y=minor, z-bugfix*/
|
||||||
|
#define PNG_LIBPNG_VER 10000001L
|
||||||
|
|
||||||
/* variables declared in png.c - only it needs to define PNG_NO_EXTERN */
|
/* variables declared in png.c - only it needs to define PNG_NO_EXTERN */
|
||||||
#if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN)
|
#if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN)
|
||||||
/* Version information for C files, stored in png.c. This had better match
|
/* Version information for C files, stored in png.c. This had better match
|
||||||
* the version above.
|
* the version above.
|
||||||
*/
|
*/
|
||||||
extern char png_libpng_ver[5];
|
extern char png_libpng_ver[6];
|
||||||
|
|
||||||
/* Structures to facilitate easy interlacing. See png.c for more details */
|
/* Structures to facilitate easy interlacing. See png.c for more details */
|
||||||
extern int FARDATA png_pass_start[7];
|
extern int FARDATA png_pass_start[7];
|
||||||
@@ -508,6 +495,8 @@ typedef png_struct FAR * png_structp;
|
|||||||
typedef void (*png_error_ptr) PNGARG((png_structp, png_const_charp));
|
typedef void (*png_error_ptr) PNGARG((png_structp, png_const_charp));
|
||||||
typedef void (*png_rw_ptr) PNGARG((png_structp, png_bytep, png_size_t));
|
typedef void (*png_rw_ptr) PNGARG((png_structp, png_bytep, png_size_t));
|
||||||
typedef void (*png_flush_ptr) PNGARG((png_structp));
|
typedef void (*png_flush_ptr) PNGARG((png_structp));
|
||||||
|
typedef void (*png_read_status_ptr) PNGARG((png_structp, png_uint_32, int));
|
||||||
|
typedef void (*png_write_status_ptr) PNGARG((png_structp, png_uint_32, int));
|
||||||
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
|
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
|
||||||
typedef void (*png_progressive_info_ptr) PNGARG((png_structp, png_infop));
|
typedef void (*png_progressive_info_ptr) PNGARG((png_structp, png_infop));
|
||||||
typedef void (*png_progressive_end_ptr) PNGARG((png_structp, png_infop));
|
typedef void (*png_progressive_end_ptr) PNGARG((png_structp, png_infop));
|
||||||
@@ -515,6 +504,12 @@ typedef void (*png_progressive_row_ptr) PNGARG((png_structp, png_bytep,
|
|||||||
png_uint_32, int));
|
png_uint_32, int));
|
||||||
#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
|
#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
|
||||||
|
|
||||||
|
#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
|
||||||
|
defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
|
||||||
|
typedef void (*png_user_transform_ptr) PNGARG((png_structp,
|
||||||
|
png_row_infop, png_bytep));
|
||||||
|
#endif /* PNG_READ|WRITE_USER_TRANSFORM_SUPPORTED */
|
||||||
|
|
||||||
/* The structure that holds the information to read and write PNG files.
|
/* The structure that holds the information to read and write PNG files.
|
||||||
* The only people who need to care about what is inside of this are the
|
* The only people who need to care about what is inside of this are the
|
||||||
* people who will be modifying the library for their own special needs.
|
* people who will be modifying the library for their own special needs.
|
||||||
@@ -531,9 +526,14 @@ struct png_struct_def
|
|||||||
png_voidp error_ptr; /* user supplied struct for error functions */
|
png_voidp error_ptr; /* user supplied struct for error functions */
|
||||||
png_rw_ptr write_data_fn; /* function for writing output data */
|
png_rw_ptr write_data_fn; /* function for writing output data */
|
||||||
png_rw_ptr read_data_fn; /* function for reading input data */
|
png_rw_ptr read_data_fn; /* function for reading input data */
|
||||||
|
#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
|
||||||
|
defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
|
||||||
|
png_user_transform_ptr read_user_transform_fn; /* user read transform */
|
||||||
|
png_user_transform_ptr write_user_transform_fn; /* user write transform */
|
||||||
|
#endif
|
||||||
png_voidp io_ptr; /* ptr to application struct for I/O functions*/
|
png_voidp io_ptr; /* ptr to application struct for I/O functions*/
|
||||||
|
|
||||||
png_uint_32 mode; /* tells us whre we are in the PNG file */
|
png_uint_32 mode; /* tells us where we are in the PNG file */
|
||||||
png_uint_32 flags; /* flags indicating various things to libpng */
|
png_uint_32 flags; /* flags indicating various things to libpng */
|
||||||
png_uint_32 transformations; /* which transformations to perform */
|
png_uint_32 transformations; /* which transformations to perform */
|
||||||
|
|
||||||
@@ -620,9 +620,11 @@ struct png_struct_def
|
|||||||
png_bytep trans; /* transparency values for paletted files */
|
png_bytep trans; /* transparency values for paletted files */
|
||||||
png_color_16 trans_values; /* transparency values for non-paletted files */
|
png_color_16 trans_values; /* transparency values for non-paletted files */
|
||||||
#endif /* PNG_READ_tRNS_SUPPORTED || PNG_READ_BACKGROUND_SUPPORTED */
|
#endif /* PNG_READ_tRNS_SUPPORTED || PNG_READ_BACKGROUND_SUPPORTED */
|
||||||
|
png_read_status_ptr read_row_fn; /* called after each row is decoded */
|
||||||
|
png_write_status_ptr write_row_fn; /* called after each row is encoded */
|
||||||
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
|
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
|
||||||
png_progressive_info_ptr info_fn; /* called after header data fully read */
|
png_progressive_info_ptr info_fn; /* called after header data fully read */
|
||||||
png_progressive_row_ptr row_fn; /* called after each row is decoded */
|
png_progressive_row_ptr row_fn; /* called after each prog. row is decoded */
|
||||||
png_progressive_end_ptr end_fn; /* called after image is complete */
|
png_progressive_end_ptr end_fn; /* called after image is complete */
|
||||||
png_bytep save_buffer_ptr; /* current location in save_buffer */
|
png_bytep save_buffer_ptr; /* current location in save_buffer */
|
||||||
png_bytep save_buffer; /* buffer for previously read data */
|
png_bytep save_buffer; /* buffer for previously read data */
|
||||||
@@ -811,7 +813,7 @@ extern PNG_EXPORT(void,png_set_swap) PNGARG((png_structp png_ptr));
|
|||||||
extern PNG_EXPORT(void,png_set_packing) PNGARG((png_structp png_ptr));
|
extern PNG_EXPORT(void,png_set_packing) PNGARG((png_structp png_ptr));
|
||||||
#endif /* PNG_READ_PACK_SUPPORTED || PNG_WRITE_PACK_SUPPORTED */
|
#endif /* PNG_READ_PACK_SUPPORTED || PNG_WRITE_PACK_SUPPORTED */
|
||||||
|
|
||||||
#if defined(PNG_READ_PACKSWAP_SUPPORTED) || defined(PNG_WRITE_PACKSWAP_SUPPOR)
|
#if defined(PNG_READ_PACKSWAP_SUPPORTED) || defined(PNG_WRITE_PACKSWAP_SUPPORTED)
|
||||||
/* Swap packing order of pixels in bytes. */
|
/* Swap packing order of pixels in bytes. */
|
||||||
extern PNG_EXPORT(void,png_set_packswap) PNGARG((png_structp png_ptr));
|
extern PNG_EXPORT(void,png_set_packswap) PNGARG((png_structp png_ptr));
|
||||||
#endif /* PNG_READ_PACKSWAP_SUPPORTED || PNG_WRITE_PACKSWAP_SUPPOR */
|
#endif /* PNG_READ_PACKSWAP_SUPPORTED || PNG_WRITE_PACKSWAP_SUPPOR */
|
||||||
@@ -1096,6 +1098,22 @@ extern PNG_EXPORT(void,png_set_read_fn) PNGARG((png_structp png_ptr,
|
|||||||
/* Return the user pointer associated with the I/O functions */
|
/* Return the user pointer associated with the I/O functions */
|
||||||
extern PNG_EXPORT(png_voidp,png_get_io_ptr) PNGARG((png_structp png_ptr));
|
extern PNG_EXPORT(png_voidp,png_get_io_ptr) PNGARG((png_structp png_ptr));
|
||||||
|
|
||||||
|
extern PNG_EXPORT(void,png_set_read_status_fn) PNGARG((png_structp png_ptr,
|
||||||
|
png_read_status_ptr read_row_fn));
|
||||||
|
|
||||||
|
extern PNG_EXPORT(void,png_set_write_status_fn) PNGARG((png_structp png_ptr,
|
||||||
|
png_write_status_ptr write_row_fn));
|
||||||
|
|
||||||
|
#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED
|
||||||
|
extern PNG_EXPORT(void,png_set_read_user_transform_fn) PNGARG((png_structp
|
||||||
|
png_ptr, png_user_transform_ptr read_user_transform_fn));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED
|
||||||
|
extern PNG_EXPORT(void,png_set_write_user_transform_fn) PNGARG((png_structp
|
||||||
|
png_ptr, png_user_transform_ptr write_user_transform_fn));
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
|
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
|
||||||
/* Sets the function callbacks for the push reader, and a pointer to a
|
/* Sets the function callbacks for the push reader, and a pointer to a
|
||||||
* user-defined structure available to the callback functions.
|
* user-defined structure available to the callback functions.
|
||||||
@@ -1466,10 +1484,11 @@ extern PNG_EXPORT(void,png_set_tRNS) PNGARG((png_structp png_ptr,
|
|||||||
#define PNG_GAMMA 0x2000
|
#define PNG_GAMMA 0x2000
|
||||||
#define PNG_GRAY_TO_RGB 0x4000
|
#define PNG_GRAY_TO_RGB 0x4000
|
||||||
#define PNG_FILLER 0x8000
|
#define PNG_FILLER 0x8000
|
||||||
#define PNG_PACKSWAP 0x10000L
|
#define PNG_PACKSWAP 0x1.0.1L
|
||||||
#define PNG_SWAP_ALPHA 0x20000L
|
#define PNG_SWAP_ALPHA 0x20000L
|
||||||
#define PNG_STRIP_ALPHA 0x40000L
|
#define PNG_STRIP_ALPHA 0x40000L
|
||||||
#define PNG_INVERT_ALPHA 0x80000L
|
#define PNG_INVERT_ALPHA 0x80000L
|
||||||
|
#define PNG_USER_TRANSFORM 0x1.0.10L
|
||||||
|
|
||||||
/* flags for png_create_struct */
|
/* flags for png_create_struct */
|
||||||
#define PNG_STRUCT_PNG 0x0001
|
#define PNG_STRUCT_PNG 0x0001
|
||||||
@@ -1498,7 +1517,7 @@ extern PNG_EXPORT(void,png_set_tRNS) PNGARG((png_structp png_ptr,
|
|||||||
#define PNG_FLAG_FREE_TRANS 0x2000
|
#define PNG_FLAG_FREE_TRANS 0x2000
|
||||||
#define PNG_FLAG_FREE_HIST 0x4000
|
#define PNG_FLAG_FREE_HIST 0x4000
|
||||||
#define PNG_FLAG_HAVE_CHUNK_HEADER 0x8000L
|
#define PNG_FLAG_HAVE_CHUNK_HEADER 0x8000L
|
||||||
#define PNG_FLAG_WROTE_tIME 0x10000L
|
#define PNG_FLAG_WROTE_tIME 0x1.0.1L
|
||||||
|
|
||||||
#define PNG_FLAG_CRC_ANCILLARY_MASK (PNG_FLAG_CRC_ANCILLARY_USE | \
|
#define PNG_FLAG_CRC_ANCILLARY_MASK (PNG_FLAG_CRC_ANCILLARY_USE | \
|
||||||
PNG_FLAG_CRC_ANCILLARY_NOWARN)
|
PNG_FLAG_CRC_ANCILLARY_NOWARN)
|
||||||
|
|||||||
46
pngconf.h
46
pngconf.h
@@ -1,12 +1,12 @@
|
|||||||
|
|
||||||
/* pngconf.h - machine configurable file for libpng
|
/* pngconf.h - machine configurable file for libpng
|
||||||
*
|
*
|
||||||
* libpng 0.99e
|
* libpng 1.0.1
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, Glenn Randers-Pehrson
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
* February 28, 1998
|
* March 9, 1998
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Any machine specific code is near the front of this file, so if you
|
/* Any machine specific code is near the front of this file, so if you
|
||||||
@@ -236,21 +236,24 @@ __dont__ include it again
|
|||||||
|
|
||||||
/* Any transformations you will not be using can be undef'ed here */
|
/* Any transformations you will not be using can be undef'ed here */
|
||||||
|
|
||||||
/* GR-P, 0.96a: Set "*FULLY_SUPPORTED as default but allow user
|
/* GR-P, 0.96a: Set "*TRANSFORMS_SUPPORTED as default but allow user
|
||||||
to turn it off with "*NOT_FULLY_SUPPORTED" on the compile line,
|
to turn it off with "*TRANSFORMS_NOT_SUPPORTED" on the compile line,
|
||||||
then pick and choose which ones to define without having to edit
|
then pick and choose which ones to define without having to edit
|
||||||
this file.
|
this file. It is safe to use the *TRANSFORMS_NOT_SUPPORTED if you
|
||||||
|
only want to have a png-compliant reader/writer but don't need
|
||||||
|
any of the extra transformations. This saves about 80 kbytes in a
|
||||||
|
typical installation of the library.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef PNG_READ_NOT_FULLY_SUPPORTED
|
|
||||||
#define PNG_READ_FULLY_SUPPORTED
|
#ifndef PNG_READ_TRANSFORMS_NOT_SUPPORTED
|
||||||
|
#define PNG_READ_TRANSFORMS_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_WRITE_NOT_FULLY_SUPPORTED
|
#ifndef PNG_WRITE_TRANSFORMS_NOT_SUPPORTED
|
||||||
#define PNG_WRITE_FULLY_SUPPORTED
|
#define PNG_WRITE_TRANSFORMS_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_READ_FULLY_SUPPORTED
|
#ifdef PNG_READ_TRANSFORMS_SUPPORTED
|
||||||
#define PNG_PROGRESSIVE_READ_SUPPORTED
|
|
||||||
#define PNG_READ_EXPAND_SUPPORTED
|
#define PNG_READ_EXPAND_SUPPORTED
|
||||||
#define PNG_READ_SHIFT_SUPPORTED
|
#define PNG_READ_SHIFT_SUPPORTED
|
||||||
#define PNG_READ_PACK_SUPPORTED
|
#define PNG_READ_PACK_SUPPORTED
|
||||||
@@ -267,12 +270,20 @@ __dont__ include it again
|
|||||||
#define PNG_READ_SWAP_ALPHA_SUPPORTED
|
#define PNG_READ_SWAP_ALPHA_SUPPORTED
|
||||||
#define PNG_READ_INVERT_ALPHA_SUPPORTED
|
#define PNG_READ_INVERT_ALPHA_SUPPORTED
|
||||||
#define PNG_READ_STRIP_ALPHA_SUPPORTED
|
#define PNG_READ_STRIP_ALPHA_SUPPORTED
|
||||||
#define PNG_READ_COMPOSITE_NODIV_SUPPORTED /* well tested on Intel */
|
#define PNG_READ_USER_TRANSFORM_SUPPORTED
|
||||||
#endif /* PNG_READ_FULLY_SUPPORTED */
|
/* the following aren't implemented yet
|
||||||
|
#define PNG_READ_RGB_TO_GRAY_SUPPORTED
|
||||||
|
*/
|
||||||
|
#endif /* PNG_READ_TRANSFORMS_SUPPORTED */
|
||||||
|
|
||||||
|
#ifndef PNG_PROGRESSIVE_READ_NOT_SUPPORTED /* if you don't do progressive */
|
||||||
|
#define PNG_PROGRESSIVE_READ_SUPPORTED /* reading. This is not talking */
|
||||||
|
#endif /* about interlacing capability! You'll */
|
||||||
|
/* still have interlacing unless you change the following line: */
|
||||||
#define PNG_READ_INTERLACING_SUPPORTED /* required for PNG-compliant decoders */
|
#define PNG_READ_INTERLACING_SUPPORTED /* required for PNG-compliant decoders */
|
||||||
|
#define PNG_READ_COMPOSITE_NODIV_SUPPORTED /* well tested on Intel and SGI */
|
||||||
|
|
||||||
#ifdef PNG_WRITE_FULLY_SUPPORTED
|
#ifdef PNG_WRITE_TRANSFORMS_SUPPORTED
|
||||||
#define PNG_WRITE_SHIFT_SUPPORTED
|
#define PNG_WRITE_SHIFT_SUPPORTED
|
||||||
#define PNG_WRITE_PACK_SUPPORTED
|
#define PNG_WRITE_PACK_SUPPORTED
|
||||||
#define PNG_WRITE_BGR_SUPPORTED
|
#define PNG_WRITE_BGR_SUPPORTED
|
||||||
@@ -284,10 +295,11 @@ __dont__ include it again
|
|||||||
#define PNG_WRITE_SWAP_ALPHA_SUPPORTED
|
#define PNG_WRITE_SWAP_ALPHA_SUPPORTED
|
||||||
#define PNG_WRITE_INVERT_ALPHA_SUPPORTED
|
#define PNG_WRITE_INVERT_ALPHA_SUPPORTED
|
||||||
#define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
|
#define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
|
||||||
#endif /* PNG_WRITE_FULLY_SUPPORTED */
|
#define PNG_WRITE_USER_TRANSFORM_SUPPORTED
|
||||||
|
#endif /* PNG_WRITE_TRANSFORMS_SUPPORTED */
|
||||||
|
|
||||||
#define PNG_WRITE_INTERLACING_SUPPORTED /* not required for PNG-compliant */
|
#define PNG_WRITE_INTERLACING_SUPPORTED /* not required for PNG-compliant
|
||||||
/* encoders, but can cause trouble
|
encoders, but can cause trouble
|
||||||
if left undefined */
|
if left undefined */
|
||||||
|
|
||||||
#if !defined(PNG_NO_STDIO)
|
#if !defined(PNG_NO_STDIO)
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
|
|
||||||
/* pngerror.c - stub functions for i/o and memory allocation
|
/* pngerror.c - stub functions for i/o and memory allocation
|
||||||
*
|
*
|
||||||
* libpng 0.99e
|
* libpng 1.0.1
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, Glenn Randers-Pehrson
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
* February 28, 1998
|
* March 9, 1998
|
||||||
*
|
*
|
||||||
* This file provides a location for all error handling. Users which
|
* This file provides a location for all error handling. Users which
|
||||||
* need special error handling are expected to write replacement functions
|
* need special error handling are expected to write replacement functions
|
||||||
@@ -59,7 +59,7 @@ png_warning(png_structp png_ptr, png_const_charp message)
|
|||||||
* if the character is invalid.
|
* if the character is invalid.
|
||||||
*/
|
*/
|
||||||
#define isnonalpha(c) ((c) < 41 || (c) > 122 || ((c) > 90 && (c) < 97))
|
#define isnonalpha(c) ((c) < 41 || (c) > 122 || ((c) > 90 && (c) < 97))
|
||||||
static const char png_digit[16] = {
|
static PNG_CONST char png_digit[16] = {
|
||||||
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
|
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
8
pngget.c
8
pngget.c
@@ -1,12 +1,12 @@
|
|||||||
|
|
||||||
/* pngget.c - retrieval of values from info struct
|
/* pngget.c - retrieval of values from info struct
|
||||||
*
|
*
|
||||||
* libpng 0.99e
|
* libpng 1.0.1
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, Glenn Randers-Pehrson
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
* February 28, 1998
|
* March 9, 1998
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PNG_INTERNAL
|
#define PNG_INTERNAL
|
||||||
@@ -259,14 +259,14 @@ float
|
|||||||
png_get_x_offset_inches(png_structp png_ptr, png_infop info_ptr)
|
png_get_x_offset_inches(png_structp png_ptr, png_infop info_ptr)
|
||||||
{
|
{
|
||||||
return ((float)png_get_x_offset_microns(png_ptr, info_ptr)
|
return ((float)png_get_x_offset_microns(png_ptr, info_ptr)
|
||||||
*.03937/1000000. +.5)
|
*.03937/1.0.100. +.5)
|
||||||
}
|
}
|
||||||
|
|
||||||
float
|
float
|
||||||
png_get_y_offset_inches(png_structp png_ptr, png_infop info_ptr)
|
png_get_y_offset_inches(png_structp png_ptr, png_infop info_ptr)
|
||||||
{
|
{
|
||||||
return ((float)png_get_y_offset_microns(png_ptr, info_ptr)
|
return ((float)png_get_y_offset_microns(png_ptr, info_ptr)
|
||||||
*.03937/1000000. +.5)
|
*.03937/1.0.100. +.5)
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(PNG_READ_pHYs_SUPPORTED)
|
#if defined(PNG_READ_pHYs_SUPPORTED)
|
||||||
|
|||||||
5
pngmem.c
5
pngmem.c
@@ -1,11 +1,12 @@
|
|||||||
|
|
||||||
/* pngmem.c - stub functions for memory allocation
|
/* pngmem.c - stub functions for memory allocation
|
||||||
*
|
*
|
||||||
* libpng 0.99e
|
* libpng 1.0.1
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, Glenn Randers-Pehrson
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
* February 28, 1998
|
* March 9, 1998
|
||||||
*
|
*
|
||||||
* This file provides a location for all memory allocation. Users which
|
* This file provides a location for all memory allocation. Users which
|
||||||
* need special memory handling are expected to modify the code in this file
|
* need special memory handling are expected to modify the code in this file
|
||||||
|
|||||||
13
pngpread.c
13
pngpread.c
@@ -1,12 +1,12 @@
|
|||||||
|
|
||||||
/* pngpread.c - read a png file in push mode
|
/* pngpread.c - read a png file in push mode
|
||||||
*
|
*
|
||||||
* libpng 0.99e
|
* libpng 1.0.1
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, Glenn Randers-Pehrson
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
* February 28, 1998
|
* March 9, 1998
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PNG_INTERNAL
|
#define PNG_INTERNAL
|
||||||
@@ -591,7 +591,7 @@ png_process_IDAT_data(png_structp png_ptr, png_bytep buffer,
|
|||||||
|
|
||||||
png_ptr->zstream.next_in = buffer;
|
png_ptr->zstream.next_in = buffer;
|
||||||
png_ptr->zstream.avail_in = (uInt)buffer_length;
|
png_ptr->zstream.avail_in = (uInt)buffer_length;
|
||||||
while(1)
|
for(;;)
|
||||||
{
|
{
|
||||||
ret = inflate(&png_ptr->zstream, Z_PARTIAL_FLUSH);
|
ret = inflate(&png_ptr->zstream, Z_PARTIAL_FLUSH);
|
||||||
if (ret == Z_STREAM_END)
|
if (ret == Z_STREAM_END)
|
||||||
@@ -785,7 +785,10 @@ png_read_push_finish_row(png_structp png_ptr)
|
|||||||
png_pass_inc[png_ptr->pass] - 1 -
|
png_pass_inc[png_ptr->pass] - 1 -
|
||||||
png_pass_start[png_ptr->pass]) /
|
png_pass_start[png_ptr->pass]) /
|
||||||
png_pass_inc[png_ptr->pass];
|
png_pass_inc[png_ptr->pass];
|
||||||
png_ptr->irowbytes = ((png_ptr->pixel_depth + 7) >> 3) + 1;
|
|
||||||
|
png_ptr->irowbytes = ((png_ptr->iwidth *
|
||||||
|
png_ptr->pixel_depth + 7) >> 3) + 1;
|
||||||
|
|
||||||
if (!(png_ptr->transformations & PNG_INTERLACE))
|
if (!(png_ptr->transformations & PNG_INTERLACE))
|
||||||
{
|
{
|
||||||
png_ptr->num_rows = (png_ptr->height +
|
png_ptr->num_rows = (png_ptr->height +
|
||||||
@@ -978,7 +981,7 @@ png_push_read_zTXt(png_structp png_ptr, png_infop info_ptr)
|
|||||||
png_ptr->zstream.avail_in = (uInt)(png_ptr->current_text_size -
|
png_ptr->zstream.avail_in = (uInt)(png_ptr->current_text_size -
|
||||||
(text - key));
|
(text - key));
|
||||||
png_ptr->zstream.next_out = png_ptr->zbuf;
|
png_ptr->zstream.next_out = png_ptr->zbuf;
|
||||||
png_ptr->zstream.avail_out = png_ptr->zbuf_size;
|
png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
|
||||||
|
|
||||||
key_size = text - key;
|
key_size = text - key;
|
||||||
text_size = 0;
|
text_size = 0;
|
||||||
|
|||||||
15
pngread.c
15
pngread.c
@@ -1,12 +1,12 @@
|
|||||||
|
|
||||||
/* pngread.c - read a PNG file
|
/* pngread.c - read a PNG file
|
||||||
*
|
*
|
||||||
* libpng 0.99e
|
* libpng 1.0.1
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, Glenn Randers-Pehrson
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
* February 28, 1998
|
* March 9, 1998
|
||||||
*
|
*
|
||||||
* This file contains routines that an application calls directly to
|
* This file contains routines that an application calls directly to
|
||||||
* read a PNG file or stream.
|
* read a PNG file or stream.
|
||||||
@@ -154,7 +154,7 @@ png_read_info(png_structp png_ptr, png_infop info_ptr)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
while (1)
|
for(;;)
|
||||||
{
|
{
|
||||||
png_byte chunk_length[4];
|
png_byte chunk_length[4];
|
||||||
png_uint_32 length;
|
png_uint_32 length;
|
||||||
@@ -449,6 +449,9 @@ png_read_row(png_structp png_ptr, png_bytep row, png_bytep dsp_row)
|
|||||||
png_combine_row(png_ptr, dsp_row, 0xff);
|
png_combine_row(png_ptr, dsp_row, 0xff);
|
||||||
}
|
}
|
||||||
png_read_finish_row(png_ptr);
|
png_read_finish_row(png_ptr);
|
||||||
|
|
||||||
|
if (png_ptr->read_row_fn != NULL)
|
||||||
|
(*(png_ptr->read_row_fn))(png_ptr, png_ptr->row_number, png_ptr->pass);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Read one or more rows of image data. If the image is interlaced,
|
/* Read one or more rows of image data. If the image is interlaced,
|
||||||
@@ -778,3 +781,9 @@ png_read_destroy(png_structp png_ptr, png_infop info_ptr, png_infop end_info_ptr
|
|||||||
|
|
||||||
png_memcpy(png_ptr->jmpbuf, tmp_jmp, sizeof (jmp_buf));
|
png_memcpy(png_ptr->jmpbuf, tmp_jmp, sizeof (jmp_buf));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
png_set_read_status_fn(png_structp png_ptr, png_read_status_ptr read_row_fn)
|
||||||
|
{
|
||||||
|
png_ptr->read_row_fn = read_row_fn;
|
||||||
|
}
|
||||||
|
|||||||
4
pngrio.c
4
pngrio.c
@@ -1,12 +1,12 @@
|
|||||||
|
|
||||||
/* pngrio.c - functions for data input
|
/* pngrio.c - functions for data input
|
||||||
*
|
*
|
||||||
* libpng 0.99e
|
* libpng 1.0.1
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, Glenn Randers-Pehrson
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
* February 28, 1998
|
* March 9, 1998
|
||||||
*
|
*
|
||||||
* This file provides a location for all input. Users which need
|
* This file provides a location for all input. Users which need
|
||||||
* special handling are expected to write a function which has the same
|
* special handling are expected to write a function which has the same
|
||||||
|
|||||||
108
pngrtran.c
108
pngrtran.c
@@ -1,12 +1,12 @@
|
|||||||
|
|
||||||
/* pngrtran.c - transforms the data in a row for PNG readers
|
/* pngrtran.c - transforms the data in a row for PNG readers
|
||||||
*
|
*
|
||||||
* libpng 0.99e
|
* libpng 1.0.1
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, Glenn Randers-Pehrson
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
* February 28, 1998
|
* March 9, 1998
|
||||||
*
|
*
|
||||||
* This file contains functions optionally called by an application
|
* This file contains functions optionally called by an application
|
||||||
* in order to tell libpng how to handle data when reading a PNG.
|
* in order to tell libpng how to handle data when reading a PNG.
|
||||||
@@ -600,6 +600,17 @@ png_set_rgb_to_gray(png_structp png_ptr, int gray_bits)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED)
|
||||||
|
void
|
||||||
|
png_set_read_user_transform_fn(png_structp png_ptr, png_user_transform_ptr
|
||||||
|
read_user_transform_fn)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_set_read_user_transform_fn\n");
|
||||||
|
png_ptr->transformations |= PNG_USER_TRANSFORM;
|
||||||
|
png_ptr->read_user_transform_fn = read_user_transform_fn;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Initialize everything needed for the read. This includes modifying
|
/* Initialize everything needed for the read. This includes modifying
|
||||||
* the palette.
|
* the palette.
|
||||||
*/
|
*/
|
||||||
@@ -654,7 +665,8 @@ png_init_read_transformations(png_structp png_ptr)
|
|||||||
if (png_ptr->transformations & PNG_INVERT_ALPHA)
|
if (png_ptr->transformations & PNG_INVERT_ALPHA)
|
||||||
{
|
{
|
||||||
#if defined(PNG_READ_EXPAND_SUPPORTED)
|
#if defined(PNG_READ_EXPAND_SUPPORTED)
|
||||||
if (png_ptr->transformations & !PNG_EXPAND)
|
/* GRR BUG #1: was (png_ptr->transformations & !PNG_EXPAND) */
|
||||||
|
if (!(png_ptr->transformations & PNG_EXPAND))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
/* invert the alpha channel (in tRNS) unless the pixels are
|
/* invert the alpha channel (in tRNS) unless the pixels are
|
||||||
@@ -701,12 +713,44 @@ png_init_read_transformations(png_structp png_ptr)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
double g;
|
double g, gs;
|
||||||
|
|
||||||
g = 1.0 / (png_ptr->background_gamma * png_ptr->screen_gamma);
|
/*
|
||||||
|
GRR BUG #3: inconsistent with handling of full RGBA below
|
||||||
|
g = 1.0 / png_ptr->background_gamma;
|
||||||
|
gs = 1.0 / (png_ptr->background_gamma * png_ptr->screen_gamma);
|
||||||
|
*/
|
||||||
|
switch (png_ptr->background_gamma_type)
|
||||||
|
{
|
||||||
|
case PNG_BACKGROUND_GAMMA_SCREEN:
|
||||||
|
g = (png_ptr->screen_gamma);
|
||||||
|
gs = 1.0;
|
||||||
|
break;
|
||||||
|
case PNG_BACKGROUND_GAMMA_FILE:
|
||||||
|
g = 1.0 / (png_ptr->gamma);
|
||||||
|
gs = 1.0 / (png_ptr->gamma * png_ptr->screen_gamma);
|
||||||
|
break;
|
||||||
|
case PNG_BACKGROUND_GAMMA_UNIQUE:
|
||||||
|
g = 1.0 / (png_ptr->background_gamma);
|
||||||
|
gs = 1.0 / (png_ptr->background_gamma *
|
||||||
|
png_ptr->screen_gamma);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
g = 1.0; /* back_1 */
|
||||||
|
gs = 1.0; /* back */
|
||||||
|
}
|
||||||
|
|
||||||
if (png_ptr->background_gamma_type==PNG_BACKGROUND_GAMMA_SCREEN||
|
if (
|
||||||
fabs(g - 1.0) < PNG_GAMMA_THRESHOLD)
|
/*
|
||||||
|
GRR BUG #2: This creates self-inconsistent images--fully
|
||||||
|
transparent and fully opaque look fine, but translucent
|
||||||
|
pixels are wrong (too bright if XV's code can be trusted).
|
||||||
|
Commenting it out makes an internally self-consistent
|
||||||
|
image, but still not consistent with RGBA version of same
|
||||||
|
thing (again, too bright in XV).
|
||||||
|
png_ptr->background_gamma_type==PNG_BACKGROUND_GAMMA_SCREEN||
|
||||||
|
*/
|
||||||
|
fabs(gs - 1.0) < PNG_GAMMA_THRESHOLD)
|
||||||
{
|
{
|
||||||
back.red = (png_byte)png_ptr->background.red;
|
back.red = (png_byte)png_ptr->background.red;
|
||||||
back.green = (png_byte)png_ptr->background.green;
|
back.green = (png_byte)png_ptr->background.green;
|
||||||
@@ -714,28 +758,20 @@ png_init_read_transformations(png_structp png_ptr)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
back.red =
|
back.red = (png_byte)(pow(
|
||||||
(png_byte)(pow((double)png_ptr->background.red/255, g) *
|
(double)png_ptr->background.red/255, gs) * 255.0 + .5);
|
||||||
255.0 + 0.5);
|
back.green = (png_byte)(pow(
|
||||||
back.green =
|
(double)png_ptr->background.green/255, gs) * 255.0 + .5);
|
||||||
(png_byte)(pow((double)png_ptr->background.green/255, g) *
|
back.blue = (png_byte)(pow(
|
||||||
255.0 + 0.5);
|
(double)png_ptr->background.blue/255, gs) * 255.0 + .5);
|
||||||
back.blue =
|
|
||||||
(png_byte)(pow((double)png_ptr->background.blue/255, g) *
|
|
||||||
255.0 + 0.5);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
g = 1.0 / png_ptr->background_gamma;
|
back_1.red = (png_byte)(pow(
|
||||||
|
(double)png_ptr->background.red/255, g) * 255.0 + .5);
|
||||||
back_1.red =
|
back_1.green = (png_byte)(pow(
|
||||||
(png_byte)(pow((double)png_ptr->background.red/255, g) *
|
(double)png_ptr->background.green/255, g) * 255.0 + .5);
|
||||||
255.0 + 0.5);
|
back_1.blue = (png_byte)(pow(
|
||||||
back_1.green =
|
(double)png_ptr->background.blue/255, g) * 255.0 + .5);
|
||||||
(png_byte)(pow((double)png_ptr->background.green/255, g) *
|
|
||||||
255.0 + 0.5);
|
|
||||||
back_1.blue =
|
|
||||||
(png_byte)(pow((double)png_ptr->background.blue/255, g) *
|
|
||||||
255.0 + 0.5);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < num_palette; i++)
|
for (i = 0; i < num_palette; i++)
|
||||||
@@ -1078,7 +1114,7 @@ png_do_read_transformations(png_structp png_ptr)
|
|||||||
png_ptr->gamma_shift);
|
png_ptr->gamma_shift);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PNG_RGB_TO_GRAY_SUPPORTED)
|
#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
|
||||||
if (png_ptr->transformations & PNG_RGB_TO_GRAY)
|
if (png_ptr->transformations & PNG_RGB_TO_GRAY)
|
||||||
png_do_rgb_to_gray(&(png_ptr->row_info), png_ptr->row_buf + 1);
|
png_do_rgb_to_gray(&(png_ptr->row_info), png_ptr->row_buf + 1);
|
||||||
#endif
|
#endif
|
||||||
@@ -1149,6 +1185,22 @@ png_do_read_transformations(png_structp png_ptr)
|
|||||||
if (png_ptr->transformations & PNG_SWAP_BYTES)
|
if (png_ptr->transformations & PNG_SWAP_BYTES)
|
||||||
png_do_swap(&(png_ptr->row_info), png_ptr->row_buf + 1);
|
png_do_swap(&(png_ptr->row_info), png_ptr->row_buf + 1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED)
|
||||||
|
if (png_ptr->transformations & PNG_USER_TRANSFORM)
|
||||||
|
if(png_ptr->read_user_transform_fn != NULL)
|
||||||
|
(*(png_ptr->read_user_transform_fn)) /* user read transform function */
|
||||||
|
(png_ptr, /* png_ptr */
|
||||||
|
&(png_ptr->row_info), /* row_info: */
|
||||||
|
/* png_uint_32 width; width of row */
|
||||||
|
/* png_uint_32 rowbytes; number of bytes in row */
|
||||||
|
/* png_byte color_type; color type of pixels */
|
||||||
|
/* png_byte bit_depth; bit depth of samples */
|
||||||
|
/* png_byte channels; number of channels (1-4) */
|
||||||
|
/* png_byte pixel_depth; bits per pixel (depth*channels) */
|
||||||
|
png_ptr->row_buf + 1); /* start of pixel data for row */
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(PNG_READ_PACK_SUPPORTED)
|
#if defined(PNG_READ_PACK_SUPPORTED)
|
||||||
|
|||||||
50
pngrutil.c
50
pngrutil.c
@@ -1,12 +1,12 @@
|
|||||||
|
|
||||||
/* pngrutil.c - utilities to read a PNG file
|
/* pngrutil.c - utilities to read a PNG file
|
||||||
*
|
*
|
||||||
* libpng 0.99
|
* libpng 1.0.1
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, Glenn Randers-Pehrson
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
* February 28, 1998
|
* March 9, 1998
|
||||||
*
|
*
|
||||||
* This file contains routines which are only called from within
|
* This file contains routines which are only called from within
|
||||||
* libpng itself during the course of reading an image.
|
* libpng itself during the course of reading an image.
|
||||||
@@ -436,7 +436,7 @@ png_handle_gAMA(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
|||||||
}
|
}
|
||||||
#endif /* PNG_READ_sRGB_SUPPORTED */
|
#endif /* PNG_READ_sRGB_SUPPORTED */
|
||||||
|
|
||||||
file_gamma = (float)igamma / (float)100000.0;
|
file_gamma = (float)igamma / (float)1.0.10.0;
|
||||||
#ifdef PNG_READ_GAMMA_SUPPORTED
|
#ifdef PNG_READ_GAMMA_SUPPORTED
|
||||||
png_ptr->gamma = file_gamma;
|
png_ptr->gamma = file_gamma;
|
||||||
#endif
|
#endif
|
||||||
@@ -549,11 +549,11 @@ png_handle_cHRM(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
|||||||
|
|
||||||
png_crc_read(png_ptr, buf, 4);
|
png_crc_read(png_ptr, buf, 4);
|
||||||
val = png_get_uint_32(buf);
|
val = png_get_uint_32(buf);
|
||||||
white_x = (float)val / (float)100000.0;
|
white_x = (float)val / (float)1.0.10.0;
|
||||||
|
|
||||||
png_crc_read(png_ptr, buf, 4);
|
png_crc_read(png_ptr, buf, 4);
|
||||||
val = png_get_uint_32(buf);
|
val = png_get_uint_32(buf);
|
||||||
white_y = (float)val / (float)100000.0;
|
white_y = (float)val / (float)1.0.10.0;
|
||||||
|
|
||||||
if (white_x < 0 || white_x > 0.8 || white_y < 0 || white_y > 0.8 ||
|
if (white_x < 0 || white_x > 0.8 || white_y < 0 || white_y > 0.8 ||
|
||||||
white_x + white_y > 1.0)
|
white_x + white_y > 1.0)
|
||||||
@@ -565,11 +565,11 @@ png_handle_cHRM(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
|||||||
|
|
||||||
png_crc_read(png_ptr, buf, 4);
|
png_crc_read(png_ptr, buf, 4);
|
||||||
val = png_get_uint_32(buf);
|
val = png_get_uint_32(buf);
|
||||||
red_x = (float)val / (float)100000.0;
|
red_x = (float)val / (float)1.0.10.0;
|
||||||
|
|
||||||
png_crc_read(png_ptr, buf, 4);
|
png_crc_read(png_ptr, buf, 4);
|
||||||
val = png_get_uint_32(buf);
|
val = png_get_uint_32(buf);
|
||||||
red_y = (float)val / (float)100000.0;
|
red_y = (float)val / (float)1.0.10.0;
|
||||||
|
|
||||||
if (red_x < 0 || red_x > 0.8 || red_y < 0 || red_y > 0.8 ||
|
if (red_x < 0 || red_x > 0.8 || red_y < 0 || red_y > 0.8 ||
|
||||||
red_x + red_y > 1.0)
|
red_x + red_y > 1.0)
|
||||||
@@ -581,11 +581,11 @@ png_handle_cHRM(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
|||||||
|
|
||||||
png_crc_read(png_ptr, buf, 4);
|
png_crc_read(png_ptr, buf, 4);
|
||||||
val = png_get_uint_32(buf);
|
val = png_get_uint_32(buf);
|
||||||
green_x = (float)val / (float)100000.0;
|
green_x = (float)val / (float)1.0.10.0;
|
||||||
|
|
||||||
png_crc_read(png_ptr, buf, 4);
|
png_crc_read(png_ptr, buf, 4);
|
||||||
val = png_get_uint_32(buf);
|
val = png_get_uint_32(buf);
|
||||||
green_y = (float)val / (float)100000.0;
|
green_y = (float)val / (float)1.0.10.0;
|
||||||
|
|
||||||
if (green_x < 0 || green_x > 0.8 || green_y < 0 || green_y > 0.8 ||
|
if (green_x < 0 || green_x > 0.8 || green_y < 0 || green_y > 0.8 ||
|
||||||
green_x + green_y > 1.0)
|
green_x + green_y > 1.0)
|
||||||
@@ -597,11 +597,11 @@ png_handle_cHRM(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
|||||||
|
|
||||||
png_crc_read(png_ptr, buf, 4);
|
png_crc_read(png_ptr, buf, 4);
|
||||||
val = png_get_uint_32(buf);
|
val = png_get_uint_32(buf);
|
||||||
blue_x = (float)val / (float)100000.0;
|
blue_x = (float)val / (float)1.0.10.0;
|
||||||
|
|
||||||
png_crc_read(png_ptr, buf, 4);
|
png_crc_read(png_ptr, buf, 4);
|
||||||
val = png_get_uint_32(buf);
|
val = png_get_uint_32(buf);
|
||||||
blue_y = (float)val / (float)100000.0;
|
blue_y = (float)val / (float)1.0.10.0;
|
||||||
|
|
||||||
if (blue_x < (float)0 || blue_x > (float)0.8 || blue_y < (float)0 ||
|
if (blue_x < (float)0 || blue_x > (float)0.8 || blue_y < (float)0 ||
|
||||||
blue_y > (float)0.8 || blue_x + blue_y > (float)1.0)
|
blue_y > (float)0.8 || blue_x + blue_y > (float)1.0)
|
||||||
@@ -694,7 +694,7 @@ png_handle_sRGB(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
|||||||
|
|
||||||
#if defined(PNG_READ_gAMA_SUPPORTED) && defined(PNG_READ_GAMMA_SUPPORTED)
|
#if defined(PNG_READ_gAMA_SUPPORTED) && defined(PNG_READ_GAMMA_SUPPORTED)
|
||||||
if ((info_ptr->valid & PNG_INFO_gAMA))
|
if ((info_ptr->valid & PNG_INFO_gAMA))
|
||||||
if((png_uint_32)(png_ptr->gamma*(float)100000.+.5) != (png_uint_32)45000L)
|
if((png_uint_32)(png_ptr->gamma*(float)1.0.10.+.5) != (png_uint_32)45000L)
|
||||||
{
|
{
|
||||||
png_warning(png_ptr,
|
png_warning(png_ptr,
|
||||||
"Ignoring incorrect gAMA value when sRGB is also present");
|
"Ignoring incorrect gAMA value when sRGB is also present");
|
||||||
@@ -1305,7 +1305,7 @@ png_handle_zTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
|||||||
png_ptr->zstream.next_in = (png_bytep)text;
|
png_ptr->zstream.next_in = (png_bytep)text;
|
||||||
png_ptr->zstream.avail_in = (uInt)(length - (text - key));
|
png_ptr->zstream.avail_in = (uInt)(length - (text - key));
|
||||||
png_ptr->zstream.next_out = png_ptr->zbuf;
|
png_ptr->zstream.next_out = png_ptr->zbuf;
|
||||||
png_ptr->zstream.avail_out = png_ptr->zbuf_size;
|
png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
|
||||||
|
|
||||||
key_size = (png_size_t)(text - key);
|
key_size = (png_size_t)(text - key);
|
||||||
text_size = 0;
|
text_size = 0;
|
||||||
@@ -1763,13 +1763,13 @@ png_do_read_interlace(png_row_infop row_info, png_bytep row, int pass,
|
|||||||
int s_start, s_end, s_inc;
|
int s_start, s_end, s_inc;
|
||||||
png_uint_32 i;
|
png_uint_32 i;
|
||||||
|
|
||||||
sp = row + (png_size_t)((row_info->width - 1) >> 2);
|
sp = row + (png_uint_32)((row_info->width - 1) >> 2);
|
||||||
dp = row + (png_size_t)((final_width - 1) >> 2);
|
dp = row + (png_uint_32)((final_width - 1) >> 2);
|
||||||
#if defined(PNG_READ_PACKSWAP_SUPPORTED)
|
#if defined(PNG_READ_PACKSWAP_SUPPORTED)
|
||||||
if (transformations & PNG_PACKSWAP)
|
if (transformations & PNG_PACKSWAP)
|
||||||
{
|
{
|
||||||
sshift = (png_size_t)(((row_info->width + 3) & 3) << 1);
|
sshift = (int)(((row_info->width + 3) & 3) << 1);
|
||||||
dshift = (png_size_t)(((final_width + 3) & 3) << 1);
|
dshift = (int)(((final_width + 3) & 3) << 1);
|
||||||
s_start = 6;
|
s_start = 6;
|
||||||
s_end = 0;
|
s_end = 0;
|
||||||
s_inc = -2;
|
s_inc = -2;
|
||||||
@@ -1777,8 +1777,8 @@ png_do_read_interlace(png_row_infop row_info, png_bytep row, int pass,
|
|||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
sshift = (png_size_t)((3 - ((row_info->width + 3) & 3)) << 1);
|
sshift = (int)((3 - ((row_info->width + 3) & 3)) << 1);
|
||||||
dshift = (png_size_t)((3 - ((final_width + 3) & 3)) << 1);
|
dshift = (int)((3 - ((final_width + 3) & 3)) << 1);
|
||||||
s_start = 0;
|
s_start = 0;
|
||||||
s_end = 6;
|
s_end = 6;
|
||||||
s_inc = 2;
|
s_inc = 2;
|
||||||
@@ -1824,8 +1824,8 @@ png_do_read_interlace(png_row_infop row_info, png_bytep row, int pass,
|
|||||||
#if defined(PNG_READ_PACKSWAP_SUPPORTED)
|
#if defined(PNG_READ_PACKSWAP_SUPPORTED)
|
||||||
if (transformations & PNG_PACKSWAP)
|
if (transformations & PNG_PACKSWAP)
|
||||||
{
|
{
|
||||||
sshift = (png_size_t)(((row_info->width + 1) & 1) << 2);
|
sshift = (int)(((row_info->width + 1) & 1) << 2);
|
||||||
dshift = (png_size_t)(((final_width + 1) & 1) << 2);
|
dshift = (int)(((final_width + 1) & 1) << 2);
|
||||||
s_start = 4;
|
s_start = 4;
|
||||||
s_end = 0;
|
s_end = 0;
|
||||||
s_inc = -4;
|
s_inc = -4;
|
||||||
@@ -1833,8 +1833,8 @@ png_do_read_interlace(png_row_infop row_info, png_bytep row, int pass,
|
|||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
sshift = (png_size_t)((1 - ((row_info->width + 1) & 1)) << 2);
|
sshift = (int)((1 - ((row_info->width + 1) & 1)) << 2);
|
||||||
dshift = (png_size_t)((1 - ((final_width + 1) & 1)) << 2);
|
dshift = (int)((1 - ((final_width + 1) & 1)) << 2);
|
||||||
s_start = 0;
|
s_start = 0;
|
||||||
s_end = 4;
|
s_end = 4;
|
||||||
s_inc = 4;
|
s_inc = 4;
|
||||||
@@ -2059,7 +2059,7 @@ png_read_finish_row(png_structp png_ptr)
|
|||||||
|
|
||||||
png_ptr->zstream.next_out = (Byte *)&extra;
|
png_ptr->zstream.next_out = (Byte *)&extra;
|
||||||
png_ptr->zstream.avail_out = (uInt)1;
|
png_ptr->zstream.avail_out = (uInt)1;
|
||||||
do
|
for(;;)
|
||||||
{
|
{
|
||||||
if (!(png_ptr->zstream.avail_in))
|
if (!(png_ptr->zstream.avail_in))
|
||||||
{
|
{
|
||||||
@@ -2102,7 +2102,7 @@ png_read_finish_row(png_structp png_ptr)
|
|||||||
if (!(png_ptr->zstream.avail_out))
|
if (!(png_ptr->zstream.avail_out))
|
||||||
png_error(png_ptr, "Extra compressed data");
|
png_error(png_ptr, "Extra compressed data");
|
||||||
|
|
||||||
} while (1);
|
}
|
||||||
png_ptr->zstream.avail_out = 0;
|
png_ptr->zstream.avail_out = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
4
pngset.c
4
pngset.c
@@ -1,12 +1,12 @@
|
|||||||
|
|
||||||
/* pngset.c - storage of image information into info struct
|
/* pngset.c - storage of image information into info struct
|
||||||
*
|
*
|
||||||
* libpng 0.99e
|
* libpng 1.0.1
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, Glenn Randers-Pehrson
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
* February 28, 1998
|
* March 9, 1998
|
||||||
*
|
*
|
||||||
* The functions here are used during reads to store data from the file
|
* The functions here are used during reads to store data from the file
|
||||||
* into the info struct, and during writes to store application data
|
* into the info struct, and during writes to store application data
|
||||||
|
|||||||
185
pngtest.c
185
pngtest.c
@@ -1,12 +1,12 @@
|
|||||||
|
|
||||||
/* pngtest.c - a simple test program to test libpng
|
/* pngtest.c - a simple test program to test libpng
|
||||||
*
|
*
|
||||||
* libpng 0.99e
|
* libpng 1.0.1
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, Glenn Randers-Pehrson
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
* February 28, 1998
|
* March 9, 1998
|
||||||
*
|
*
|
||||||
* This program reads in a PNG image, writes it out again, and then
|
* This program reads in a PNG image, writes it out again, and then
|
||||||
* compares the two files. If the files are identical, this shows that
|
* compares the two files. If the files are identical, this shows that
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
|
|
||||||
#include "png.h"
|
#include "png.h"
|
||||||
|
|
||||||
int test_one_file(PNG_CONST char *inname, PNG_CONST char *outname);
|
int test_one_file PNGARG((PNG_CONST char *inname, PNG_CONST char *outname));
|
||||||
|
|
||||||
#ifdef __TURBOC__
|
#ifdef __TURBOC__
|
||||||
#include <mem.h>
|
#include <mem.h>
|
||||||
@@ -47,6 +47,126 @@ int test_one_file(PNG_CONST char *inname, PNG_CONST char *outname);
|
|||||||
/* #define STDERR stderr */
|
/* #define STDERR stderr */
|
||||||
#define STDERR stdout /* for DOS */
|
#define STDERR stdout /* for DOS */
|
||||||
|
|
||||||
|
/* example of using row callbacks to make a simple progress meter */
|
||||||
|
static int status_pass=1;
|
||||||
|
static int status_dots_requested=0;
|
||||||
|
static int status_dots=1;
|
||||||
|
|
||||||
|
void
|
||||||
|
read_row_callback(png_structp png_ptr, png_uint_32 row_number, int pass)
|
||||||
|
{
|
||||||
|
if(png_ptr == NULL || row_number > 0x3fffffffL) return;
|
||||||
|
if(status_pass != pass)
|
||||||
|
{
|
||||||
|
fprintf(stdout,"\n Pass %d: ",pass);
|
||||||
|
status_pass = pass;
|
||||||
|
status_dots = 30;
|
||||||
|
}
|
||||||
|
status_dots--;
|
||||||
|
if(status_dots == 0)
|
||||||
|
{
|
||||||
|
fprintf(stdout, "\n ");
|
||||||
|
status_dots=30;
|
||||||
|
}
|
||||||
|
fprintf(stdout, "r");
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
write_row_callback(png_structp png_ptr, png_uint_32 row_number, int pass)
|
||||||
|
{
|
||||||
|
if(png_ptr == NULL || row_number > 0x3fffffffL || pass > 7) return;
|
||||||
|
fprintf(stdout, "w");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
|
||||||
|
/* example of using user transform callback (we don't transform anything,
|
||||||
|
but merely count the black pixels) */
|
||||||
|
|
||||||
|
static png_uint_32 black_pixels;
|
||||||
|
|
||||||
|
void
|
||||||
|
count_black_pixels(png_structp png_ptr, png_row_infop row_info, png_bytep data)
|
||||||
|
{
|
||||||
|
png_bytep dp = data;
|
||||||
|
if(png_ptr == NULL)return;
|
||||||
|
|
||||||
|
/* contents of row_info:
|
||||||
|
* png_uint_32 width width of row
|
||||||
|
* png_uint_32 rowbytes number of bytes in row
|
||||||
|
* png_byte color_type color type of pixels
|
||||||
|
* png_byte bit_depth bit depth of samples
|
||||||
|
* png_byte channels number of channels (1-4)
|
||||||
|
* png_byte pixel_depth bits per pixel (depth*channels)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* counts the number of black pixels (or zero pixels if color_type is 3 */
|
||||||
|
|
||||||
|
if(row_info->color_type == 0 || row_info->color_type == 3)
|
||||||
|
{
|
||||||
|
int pos=0;
|
||||||
|
png_uint_32 n;
|
||||||
|
for (n=0; n<row_info->width; n++)
|
||||||
|
{
|
||||||
|
if(row_info->bit_depth == 1)
|
||||||
|
if(((*dp << pos++ )& 0x80) == 0) black_pixels++;
|
||||||
|
if(pos == 8)
|
||||||
|
{
|
||||||
|
pos=0;
|
||||||
|
dp++;
|
||||||
|
}
|
||||||
|
if(row_info->bit_depth == 2)
|
||||||
|
if(((*dp << (pos+=2))& 0xc0) == 0) black_pixels++;
|
||||||
|
if(pos == 8)
|
||||||
|
{
|
||||||
|
pos=0;
|
||||||
|
dp++;
|
||||||
|
}
|
||||||
|
if(row_info->bit_depth == 4)
|
||||||
|
if(((*dp << (pos+=4))& 0xf0) == 0) black_pixels++;
|
||||||
|
if(pos == 8)
|
||||||
|
{
|
||||||
|
pos=0;
|
||||||
|
dp++;
|
||||||
|
}
|
||||||
|
if(row_info->bit_depth == 8)
|
||||||
|
if(*dp++ == 0) black_pixels++;
|
||||||
|
if(row_info->bit_depth == 16)
|
||||||
|
{
|
||||||
|
if((*dp | *(dp+1)) == 0) black_pixels++;
|
||||||
|
dp+=2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else /* other color types */
|
||||||
|
{
|
||||||
|
png_uint_32 n;
|
||||||
|
int channel;
|
||||||
|
int color_channels = row_info->channels;
|
||||||
|
if(row_info->color_type > 3)color_channels--;
|
||||||
|
|
||||||
|
for (n=0; n<row_info->width; n++)
|
||||||
|
{
|
||||||
|
for (channel = 0; channel < color_channels; channel++)
|
||||||
|
{
|
||||||
|
if(row_info->bit_depth == 8)
|
||||||
|
if(*dp++ == 0) black_pixels++;
|
||||||
|
if(row_info->bit_depth == 16)
|
||||||
|
{
|
||||||
|
if((*dp | *(dp+1)) == 0) black_pixels++;
|
||||||
|
dp+=2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(row_info->color_type > 3)
|
||||||
|
{
|
||||||
|
dp++;
|
||||||
|
if(row_info->bit_depth == 16)dp++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* PNG_WRITE_USER_TRANSFORM_SUPPORTED */
|
||||||
|
|
||||||
static int verbose = 0;
|
static int verbose = 0;
|
||||||
static int wrote_question = 0;
|
static int wrote_question = 0;
|
||||||
|
|
||||||
@@ -60,8 +180,6 @@ static int wrote_question = 0;
|
|||||||
than changing the library. */
|
than changing the library. */
|
||||||
#ifndef USE_FAR_KEYWORD
|
#ifndef USE_FAR_KEYWORD
|
||||||
static void
|
static void
|
||||||
png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length);
|
|
||||||
static void
|
|
||||||
png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
||||||
{
|
{
|
||||||
png_size_t check;
|
png_size_t check;
|
||||||
@@ -86,8 +204,6 @@ png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
|||||||
#define NEAR_BUF_SIZE 1024
|
#define NEAR_BUF_SIZE 1024
|
||||||
#define MIN(a,b) (a <= b ? a : b)
|
#define MIN(a,b) (a <= b ? a : b)
|
||||||
|
|
||||||
static void
|
|
||||||
png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length);
|
|
||||||
static void
|
static void
|
||||||
png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
||||||
{
|
{
|
||||||
@@ -131,8 +247,6 @@ png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
|||||||
|
|
||||||
#if defined(PNG_WRITE_FLUSH_SUPPORTED)
|
#if defined(PNG_WRITE_FLUSH_SUPPORTED)
|
||||||
static void
|
static void
|
||||||
png_default_flush(png_structp png_ptr);
|
|
||||||
static void
|
|
||||||
png_default_flush(png_structp png_ptr)
|
png_default_flush(png_structp png_ptr)
|
||||||
{
|
{
|
||||||
FILE *io_ptr;
|
FILE *io_ptr;
|
||||||
@@ -148,8 +262,6 @@ png_default_flush(png_structp png_ptr)
|
|||||||
than changing the library. */
|
than changing the library. */
|
||||||
#ifndef USE_FAR_KEYWORD
|
#ifndef USE_FAR_KEYWORD
|
||||||
static void
|
static void
|
||||||
png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length);
|
|
||||||
static void
|
|
||||||
png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
||||||
{
|
{
|
||||||
png_uint_32 check;
|
png_uint_32 check;
|
||||||
@@ -169,8 +281,6 @@ png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
|||||||
#define NEAR_BUF_SIZE 1024
|
#define NEAR_BUF_SIZE 1024
|
||||||
#define MIN(a,b) (a <= b ? a : b)
|
#define MIN(a,b) (a <= b ? a : b)
|
||||||
|
|
||||||
static void
|
|
||||||
png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length);
|
|
||||||
static void
|
static void
|
||||||
png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
||||||
{
|
{
|
||||||
@@ -344,7 +454,8 @@ png_free(png_structp png_ptr, png_voidp ptr)
|
|||||||
/* END of code to test memory allocation/deallocation */
|
/* END of code to test memory allocation/deallocation */
|
||||||
|
|
||||||
/* Test one file */
|
/* Test one file */
|
||||||
int test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
int
|
||||||
|
test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
||||||
{
|
{
|
||||||
static FILE *fpin, *fpout; /* "static" prevents setjmp corruption */
|
static FILE *fpin, *fpout; /* "static" prevents setjmp corruption */
|
||||||
png_structp read_ptr, write_ptr;
|
png_structp read_ptr, write_ptr;
|
||||||
@@ -439,6 +550,21 @@ int test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
#else
|
#else
|
||||||
NULL);
|
NULL);
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
if(status_dots_requested == 1)
|
||||||
|
{
|
||||||
|
png_set_write_status_fn(write_ptr, write_row_callback);
|
||||||
|
png_set_read_status_fn(read_ptr, read_row_callback);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
png_set_write_status_fn(write_ptr, NULL);
|
||||||
|
png_set_read_status_fn(read_ptr, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
# if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
|
||||||
|
black_pixels=0;
|
||||||
|
png_set_write_user_transform_fn(write_ptr, count_black_pixels);
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
png_debug(0, "Reading info struct\n");
|
png_debug(0, "Reading info struct\n");
|
||||||
@@ -672,7 +798,7 @@ int test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
while (1)
|
for(;;)
|
||||||
{
|
{
|
||||||
png_size_t num_in, num_out;
|
png_size_t num_in, num_out;
|
||||||
|
|
||||||
@@ -730,11 +856,11 @@ int test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
|
|
||||||
/* input and output filenames */
|
/* input and output filenames */
|
||||||
#ifdef RISCOS
|
#ifdef RISCOS
|
||||||
PNG_CONST char *inname = "pngtest_png";
|
PNG_CONST char *inname = "pngtest/png";
|
||||||
PNG_CONST char *outname = "pngout_png";
|
PNG_CONST char *outname = "pngout/png";
|
||||||
#else
|
#else
|
||||||
static char *inname = "pngtest.png";
|
static PNG_CONST char *inname = "pngtest.png";
|
||||||
static char *outname = "pngout.png";
|
static PNG_CONST char *outname = "pngout.png";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int
|
int
|
||||||
@@ -770,20 +896,28 @@ main(int argc, char *argv[])
|
|||||||
if (argc > 1)
|
if (argc > 1)
|
||||||
{
|
{
|
||||||
if (strcmp(argv[1], "-m") == 0)
|
if (strcmp(argv[1], "-m") == 0)
|
||||||
|
{
|
||||||
multiple = 1;
|
multiple = 1;
|
||||||
|
status_dots_requested = 0;
|
||||||
|
}
|
||||||
else if (strcmp(argv[1], "-mv") == 0 ||
|
else if (strcmp(argv[1], "-mv") == 0 ||
|
||||||
strcmp(argv[1], "-vm") == 0 )
|
strcmp(argv[1], "-vm") == 0 )
|
||||||
{
|
{
|
||||||
multiple = 1;
|
multiple = 1;
|
||||||
verbose = 1;
|
verbose = 1;
|
||||||
|
status_dots_requested = 1;
|
||||||
}
|
}
|
||||||
else if (strcmp(argv[1], "-v") == 0)
|
else if (strcmp(argv[1], "-v") == 0)
|
||||||
{
|
{
|
||||||
verbose = 1;
|
verbose = 1;
|
||||||
|
status_dots_requested = 1;
|
||||||
inname = argv[2];
|
inname = argv[2];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
inname = argv[1];
|
inname = argv[1];
|
||||||
|
status_dots_requested = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!multiple && argc == 3+verbose)
|
if (!multiple && argc == 3+verbose)
|
||||||
@@ -813,7 +947,11 @@ main(int argc, char *argv[])
|
|||||||
fprintf(STDERR, "Testing %s:",argv[i]);
|
fprintf(STDERR, "Testing %s:",argv[i]);
|
||||||
kerror = test_one_file(argv[i], outname);
|
kerror = test_one_file(argv[i], outname);
|
||||||
if (kerror == 0)
|
if (kerror == 0)
|
||||||
|
#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
|
||||||
|
fprintf(STDERR, " PASS (%lu black pixels)\n",black_pixels);
|
||||||
|
#else
|
||||||
fprintf(STDERR, " PASS\n");
|
fprintf(STDERR, " PASS\n");
|
||||||
|
#endif
|
||||||
else {
|
else {
|
||||||
fprintf(STDERR, " FAIL\n");
|
fprintf(STDERR, " FAIL\n");
|
||||||
ierror += kerror;
|
ierror += kerror;
|
||||||
@@ -847,12 +985,19 @@ main(int argc, char *argv[])
|
|||||||
#ifdef PNGTEST_MEMORY_DEBUG
|
#ifdef PNGTEST_MEMORY_DEBUG
|
||||||
int allocation_now = current_allocation;
|
int allocation_now = current_allocation;
|
||||||
#endif
|
#endif
|
||||||
|
if (i == 1) status_dots_requested = 1;
|
||||||
|
else if(verbose == 0)status_dots_requested = 0;
|
||||||
if (i == 0 || verbose == 1 || ierror != 0)
|
if (i == 0 || verbose == 1 || ierror != 0)
|
||||||
fprintf(STDERR, "Testing %s:",inname);
|
fprintf(STDERR, "Testing %s:",inname);
|
||||||
kerror = test_one_file(inname, outname);
|
kerror = test_one_file(inname, outname);
|
||||||
if(kerror == 0)
|
if(kerror == 0)
|
||||||
{
|
{
|
||||||
if(verbose == 1 || i == 2) fprintf(STDERR, " PASS\n");
|
if(verbose == 1 || i == 2)
|
||||||
|
#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
|
||||||
|
fprintf(STDERR, " PASS (%lu black pixels)\n",black_pixels);
|
||||||
|
#else
|
||||||
|
fprintf(STDERR, " PASS\n");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
|
|
||||||
/* pngtrans.c - transforms the data in a row (used by both readers and writers)
|
/* pngtrans.c - transforms the data in a row (used by both readers and writers)
|
||||||
*
|
*
|
||||||
* libpng 0.99e
|
* libpng 1.0.1
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, Glenn Randers-Pehrson
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
* February 28, 1998
|
* March 9, 1998
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PNG_INTERNAL
|
#define PNG_INTERNAL
|
||||||
|
|||||||
4
pngwio.c
4
pngwio.c
@@ -1,12 +1,12 @@
|
|||||||
|
|
||||||
/* pngwio.c - functions for data output
|
/* pngwio.c - functions for data output
|
||||||
*
|
*
|
||||||
* libpng 0.99e
|
* libpng 1.0.1
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, Glenn Randers-Pehrson
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
* February 28, 1998
|
* March 9, 1998
|
||||||
*
|
*
|
||||||
* This file provides a location for all output. Users which need
|
* This file provides a location for all output. Users which need
|
||||||
* special handling are expected to write functions which have the same
|
* special handling are expected to write functions which have the same
|
||||||
|
|||||||
33
pngwrite.c
33
pngwrite.c
@@ -1,12 +1,12 @@
|
|||||||
|
|
||||||
/* pngwrite.c - general routines to write a PNG file
|
/* pngwrite.c - general routines to write a PNG file
|
||||||
*
|
*
|
||||||
* libpng 0.99e
|
* libpng 1.0.1
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, Glenn Randers-Pehrson
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
* February 28, 1998
|
* March 9, 1998
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* get internal access to png.h */
|
/* get internal access to png.h */
|
||||||
@@ -225,7 +225,8 @@ png_write_end(png_structp png_ptr, png_infop info_ptr)
|
|||||||
png_charp
|
png_charp
|
||||||
png_convert_to_rfc1123(png_structp png_ptr, png_timep ptime)
|
png_convert_to_rfc1123(png_structp png_ptr, png_timep ptime)
|
||||||
{
|
{
|
||||||
const char *short_months[12] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
static PNG_CONST char short_months[12][4] =
|
||||||
|
{"Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
||||||
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
|
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
|
||||||
|
|
||||||
if (png_ptr->time_buffer == NULL)
|
if (png_ptr->time_buffer == NULL)
|
||||||
@@ -527,6 +528,9 @@ png_write_row(png_structp png_ptr, png_bytep row)
|
|||||||
|
|
||||||
/* Find a filter if necessary, filter the row and write it out. */
|
/* Find a filter if necessary, filter the row and write it out. */
|
||||||
png_write_find_filter(png_ptr, &(png_ptr->row_info));
|
png_write_find_filter(png_ptr, &(png_ptr->row_info));
|
||||||
|
|
||||||
|
if (png_ptr->write_row_fn != NULL)
|
||||||
|
(*(png_ptr->write_row_fn))(png_ptr, png_ptr->row_number, png_ptr->pass);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(PNG_WRITE_FLUSH_SUPPORTED)
|
#if defined(PNG_WRITE_FLUSH_SUPPORTED)
|
||||||
@@ -831,10 +835,10 @@ png_set_filter_heuristics(png_structp png_ptr, int heuristic_method,
|
|||||||
|
|
||||||
if (png_ptr->filter_weights == NULL)
|
if (png_ptr->filter_weights == NULL)
|
||||||
{
|
{
|
||||||
png_ptr->filter_weights = png_malloc(png_ptr,
|
png_ptr->filter_weights = (png_uint_16p) png_malloc(png_ptr,
|
||||||
(png_uint_32)(sizeof(png_uint_16) * num_weights));
|
(png_uint_32)(sizeof(png_uint_16) * num_weights));
|
||||||
|
|
||||||
png_ptr->inv_filter_weights = png_malloc(png_ptr,
|
png_ptr->inv_filter_weights = (png_uint_16p) png_malloc(png_ptr,
|
||||||
(png_uint_32)(sizeof(png_uint_16) * num_weights));
|
(png_uint_32)(sizeof(png_uint_16) * num_weights));
|
||||||
|
|
||||||
for (i = 0; i < num_weights; i++)
|
for (i = 0; i < num_weights; i++)
|
||||||
@@ -866,7 +870,7 @@ png_set_filter_heuristics(png_structp png_ptr, int heuristic_method,
|
|||||||
*/
|
*/
|
||||||
if (png_ptr->filter_costs == NULL)
|
if (png_ptr->filter_costs == NULL)
|
||||||
{
|
{
|
||||||
png_ptr->filter_costs = png_malloc(png_ptr,
|
png_ptr->filter_costs = (png_uint_16p) png_malloc(png_ptr,
|
||||||
(png_uint_32)(sizeof(png_uint_16) * PNG_FILTER_VALUE_LAST));
|
(png_uint_32)(sizeof(png_uint_16) * PNG_FILTER_VALUE_LAST));
|
||||||
|
|
||||||
png_ptr->inv_filter_costs = (png_uint_16p) png_malloc(png_ptr,
|
png_ptr->inv_filter_costs = (png_uint_16p) png_malloc(png_ptr,
|
||||||
@@ -947,3 +951,20 @@ png_set_compression_method(png_structp png_ptr, int method)
|
|||||||
png_ptr->zlib_method = method;
|
png_ptr->zlib_method = method;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
png_set_write_status_fn(png_structp png_ptr, png_write_status_ptr write_row_fn)
|
||||||
|
{
|
||||||
|
png_ptr->write_row_fn = write_row_fn;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
|
||||||
|
void
|
||||||
|
png_set_write_user_transform_fn(png_structp png_ptr, png_user_transform_ptr
|
||||||
|
write_user_transform_fn)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_set_write_user_transform_fn\n");
|
||||||
|
png_ptr->transformations |= PNG_USER_TRANSFORM;
|
||||||
|
png_ptr->write_user_transform_fn = write_user_transform_fn;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|||||||
19
pngwtran.c
19
pngwtran.c
@@ -1,12 +1,12 @@
|
|||||||
|
|
||||||
/* pngwtran.c - transforms the data in a row for PNG writers
|
/* pngwtran.c - transforms the data in a row for PNG writers
|
||||||
*
|
*
|
||||||
* libpng 0.99e
|
* libpng 1.0.1
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, Glenn Randers-Pehrson
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
* February 28, 1998
|
* March 9, 1998
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PNG_INTERNAL
|
#define PNG_INTERNAL
|
||||||
@@ -19,6 +19,21 @@ void
|
|||||||
png_do_write_transformations(png_structp png_ptr)
|
png_do_write_transformations(png_structp png_ptr)
|
||||||
{
|
{
|
||||||
png_debug(1, "in png_do_write_transformations\n");
|
png_debug(1, "in png_do_write_transformations\n");
|
||||||
|
|
||||||
|
#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
|
||||||
|
if (png_ptr->transformations & PNG_USER_TRANSFORM)
|
||||||
|
if(png_ptr->write_user_transform_fn != NULL)
|
||||||
|
(*(png_ptr->write_user_transform_fn)) /* user write transform function */
|
||||||
|
(png_ptr, /* png_ptr */
|
||||||
|
&(png_ptr->row_info), /* row_info: */
|
||||||
|
/* png_uint_32 width; width of row */
|
||||||
|
/* png_uint_32 rowbytes; number of bytes in row */
|
||||||
|
/* png_byte color_type; color type of pixels */
|
||||||
|
/* png_byte bit_depth; bit depth of samples */
|
||||||
|
/* png_byte channels; number of channels (1-4) */
|
||||||
|
/* png_byte pixel_depth; bits per pixel (depth*channels) */
|
||||||
|
png_ptr->row_buf + 1); /* start of pixel data for row */
|
||||||
|
#endif
|
||||||
#if defined(PNG_WRITE_FILLER_SUPPORTED)
|
#if defined(PNG_WRITE_FILLER_SUPPORTED)
|
||||||
if (png_ptr->transformations & PNG_FILLER)
|
if (png_ptr->transformations & PNG_FILLER)
|
||||||
png_do_strip_filler(&(png_ptr->row_info), png_ptr->row_buf + 1,
|
png_do_strip_filler(&(png_ptr->row_info), png_ptr->row_buf + 1,
|
||||||
|
|||||||
32
pngwutil.c
32
pngwutil.c
@@ -1,12 +1,12 @@
|
|||||||
|
|
||||||
/* pngwutil.c - utilities to write a PNG file
|
/* pngwutil.c - utilities to write a PNG file
|
||||||
*
|
*
|
||||||
* libpng 0.99e
|
* libpng 1.0.1
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, Glenn Randers-Pehrson
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
* February 28, 1998
|
* March 9, 1998
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PNG_INTERNAL
|
#define PNG_INTERNAL
|
||||||
@@ -340,8 +340,8 @@ png_write_gAMA(png_structp png_ptr, double file_gamma)
|
|||||||
png_byte buf[4];
|
png_byte buf[4];
|
||||||
|
|
||||||
png_debug(1, "in png_write_gAMA\n");
|
png_debug(1, "in png_write_gAMA\n");
|
||||||
/* file_gamma is saved in 1/100,000ths */
|
/* file_gamma is saved in 1/1.0.100ths */
|
||||||
igamma = (png_uint_32)(file_gamma * 100000.0 + 0.5);
|
igamma = (png_uint_32)(file_gamma * 1.0.10.0 + 0.5);
|
||||||
png_save_uint_32(buf, igamma);
|
png_save_uint_32(buf, igamma);
|
||||||
png_write_chunk(png_ptr, png_gAMA, buf, (png_size_t)4);
|
png_write_chunk(png_ptr, png_gAMA, buf, (png_size_t)4);
|
||||||
}
|
}
|
||||||
@@ -426,16 +426,16 @@ png_write_cHRM(png_structp png_ptr, double white_x, double white_y,
|
|||||||
png_byte buf[32];
|
png_byte buf[32];
|
||||||
|
|
||||||
png_debug(1, "in png_write_cHRM\n");
|
png_debug(1, "in png_write_cHRM\n");
|
||||||
/* each value is saved int 1/100,000ths */
|
/* each value is saved int 1/1.0.100ths */
|
||||||
if (white_x < 0 || white_x > 0.8 || white_y < 0 || white_y > 0.8 ||
|
if (white_x < 0 || white_x > 0.8 || white_y < 0 || white_y > 0.8 ||
|
||||||
white_x + white_y > 1.0)
|
white_x + white_y > 1.0)
|
||||||
{
|
{
|
||||||
png_warning(png_ptr, "Invalid cHRM white point specified");
|
png_warning(png_ptr, "Invalid cHRM white point specified");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
itemp = (png_uint_32)(white_x * 100000.0 + 0.5);
|
itemp = (png_uint_32)(white_x * 1.0.10.0 + 0.5);
|
||||||
png_save_uint_32(buf, itemp);
|
png_save_uint_32(buf, itemp);
|
||||||
itemp = (png_uint_32)(white_y * 100000.0 + 0.5);
|
itemp = (png_uint_32)(white_y * 1.0.10.0 + 0.5);
|
||||||
png_save_uint_32(buf + 4, itemp);
|
png_save_uint_32(buf + 4, itemp);
|
||||||
|
|
||||||
if (red_x < 0 || red_x > 0.8 || red_y < 0 || red_y > 0.8 ||
|
if (red_x < 0 || red_x > 0.8 || red_y < 0 || red_y > 0.8 ||
|
||||||
@@ -444,9 +444,9 @@ png_write_cHRM(png_structp png_ptr, double white_x, double white_y,
|
|||||||
png_warning(png_ptr, "Invalid cHRM red point specified");
|
png_warning(png_ptr, "Invalid cHRM red point specified");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
itemp = (png_uint_32)(red_x * 100000.0 + 0.5);
|
itemp = (png_uint_32)(red_x * 1.0.10.0 + 0.5);
|
||||||
png_save_uint_32(buf + 8, itemp);
|
png_save_uint_32(buf + 8, itemp);
|
||||||
itemp = (png_uint_32)(red_y * 100000.0 + 0.5);
|
itemp = (png_uint_32)(red_y * 1.0.10.0 + 0.5);
|
||||||
png_save_uint_32(buf + 12, itemp);
|
png_save_uint_32(buf + 12, itemp);
|
||||||
|
|
||||||
if (green_x < 0 || green_x > 0.8 || green_y < 0 || green_y > 0.8 ||
|
if (green_x < 0 || green_x > 0.8 || green_y < 0 || green_y > 0.8 ||
|
||||||
@@ -455,9 +455,9 @@ png_write_cHRM(png_structp png_ptr, double white_x, double white_y,
|
|||||||
png_warning(png_ptr, "Invalid cHRM green point specified");
|
png_warning(png_ptr, "Invalid cHRM green point specified");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
itemp = (png_uint_32)(green_x * 100000.0 + 0.5);
|
itemp = (png_uint_32)(green_x * 1.0.10.0 + 0.5);
|
||||||
png_save_uint_32(buf + 16, itemp);
|
png_save_uint_32(buf + 16, itemp);
|
||||||
itemp = (png_uint_32)(green_y * 100000.0 + 0.5);
|
itemp = (png_uint_32)(green_y * 1.0.10.0 + 0.5);
|
||||||
png_save_uint_32(buf + 20, itemp);
|
png_save_uint_32(buf + 20, itemp);
|
||||||
|
|
||||||
if (blue_x < 0 || blue_x > 0.8 || blue_y < 0 || blue_y > 0.8 ||
|
if (blue_x < 0 || blue_x > 0.8 || blue_y < 0 || blue_y > 0.8 ||
|
||||||
@@ -466,9 +466,9 @@ png_write_cHRM(png_structp png_ptr, double white_x, double white_y,
|
|||||||
png_warning(png_ptr, "Invalid cHRM blue point specified");
|
png_warning(png_ptr, "Invalid cHRM blue point specified");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
itemp = (png_uint_32)(blue_x * 100000.0 + 0.5);
|
itemp = (png_uint_32)(blue_x * 1.0.10.0 + 0.5);
|
||||||
png_save_uint_32(buf + 24, itemp);
|
png_save_uint_32(buf + 24, itemp);
|
||||||
itemp = (png_uint_32)(blue_y * 100000.0 + 0.5);
|
itemp = (png_uint_32)(blue_y * 1.0.10.0 + 0.5);
|
||||||
png_save_uint_32(buf + 28, itemp);
|
png_save_uint_32(buf + 28, itemp);
|
||||||
|
|
||||||
png_write_chunk(png_ptr, png_cHRM, buf, (png_size_t)32);
|
png_write_chunk(png_ptr, png_cHRM, buf, (png_size_t)32);
|
||||||
@@ -1383,10 +1383,10 @@ png_do_write_interlace(png_row_infop row_info, png_bytep row, int pass)
|
|||||||
* been specified by the application, and then writes the row out with the
|
* been specified by the application, and then writes the row out with the
|
||||||
* chosen filter.
|
* chosen filter.
|
||||||
*/
|
*/
|
||||||
#define PNG_MAXSUM (png_uint_32)(~0x0UL >> 1)
|
#define PNG_MAXSUM (~((png_uint_32)0) >> 1)
|
||||||
#define PNG_HISHIFT 10
|
#define PNG_HISHIFT 10
|
||||||
#define PNG_LOMASK (png_uint_32)0xffffL
|
#define PNG_LOMASK ((png_uint_32)0xffffL)
|
||||||
#define PNG_HIMASK (png_uint_32)(~PNG_LOMASK >> PNG_HISHIFT)
|
#define PNG_HIMASK ((png_uint_32)(~PNG_LOMASK >> PNG_HISHIFT))
|
||||||
void
|
void
|
||||||
png_write_find_filter(png_structp png_ptr, png_row_infop row_info)
|
png_write_find_filter(png_structp png_ptr, png_row_infop row_info)
|
||||||
{
|
{
|
||||||
|
|||||||
7
scripts/SCOPTIONS.ppc
Normal file
7
scripts/SCOPTIONS.ppc
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
OPTIMIZE
|
||||||
|
OPTPEEP
|
||||||
|
OPTTIME
|
||||||
|
OPTSCHED
|
||||||
|
AUTOREGISTER
|
||||||
|
PARMS=REGISTERS
|
||||||
|
INCLUDEDIR=hlp:ppc/include
|
||||||
@@ -29,7 +29,7 @@ libpng.a: $(OBJS)
|
|||||||
$(RANLIB) $@
|
$(RANLIB) $@
|
||||||
|
|
||||||
pngtest: pngtest.o libpng.a
|
pngtest: pngtest.o libpng.a
|
||||||
$(CC) -o pngtest $(CCFLAGS) pngtest.o $(LDFLAGS)
|
$(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)
|
||||||
|
|
||||||
test: pngtest
|
test: pngtest
|
||||||
./pngtest
|
./pngtest
|
||||||
@@ -23,7 +23,7 @@ libpng.a: $(OBJS)
|
|||||||
$(RANLIB) $@
|
$(RANLIB) $@
|
||||||
|
|
||||||
pngtest: pngtest.o libpng.a
|
pngtest: pngtest.o libpng.a
|
||||||
$(CC) -o pngtest $(CCFLAGS) pngtest.o $(LDFLAGS)
|
$(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)
|
||||||
coff2exe pngtest
|
coff2exe pngtest
|
||||||
|
|
||||||
test: pngtest
|
test: pngtest
|
||||||
@@ -34,8 +34,8 @@ libpng.a: ansi2knr $(OBJS)
|
|||||||
ar rc $@ $(OBJS)
|
ar rc $@ $(OBJS)
|
||||||
$(RANLIB) $@
|
$(RANLIB) $@
|
||||||
|
|
||||||
pngtest: pngtest.o libpng.a ansi2knr
|
pngtest: pngtest.o libpng.a
|
||||||
cc -o pngtest $(CCFLAGS) pngtest.o $(LDFLAGS)
|
$(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)
|
||||||
|
|
||||||
test: pngtest
|
test: pngtest
|
||||||
./pngtest
|
./pngtest
|
||||||
@@ -21,8 +21,10 @@ LDFLAGS=-L. -Wl,-rpath,. -L$(ZLIBLIB) -Wl,-rpath,$(ZLIBLIB) -lpng -lz -lm
|
|||||||
RANLIB=ranlib
|
RANLIB=ranlib
|
||||||
#RANLIB=echo
|
#RANLIB=echo
|
||||||
|
|
||||||
|
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not
|
||||||
|
# have to change it.
|
||||||
PNGMAJ = 2
|
PNGMAJ = 2
|
||||||
PNGMIN = 0.99
|
PNGMIN = 1.0
|
||||||
PNGVER = $(PNGMAJ).$(PNGMIN)
|
PNGVER = $(PNGMAJ).$(PNGMIN)
|
||||||
|
|
||||||
# where make install puts libpng.a, libpng.so*, and png.h
|
# where make install puts libpng.a, libpng.so*, and png.h
|
||||||
@@ -54,7 +56,7 @@ libpng.so.$(PNGMAJ): libpng.so.$(PNGVER)
|
|||||||
ln -sf libpng.so.$(PNGVER) libpng.so.$(PNGMAJ)
|
ln -sf libpng.so.$(PNGVER) libpng.so.$(PNGMAJ)
|
||||||
|
|
||||||
libpng.so.$(PNGVER): $(OBJSDLL)
|
libpng.so.$(PNGVER): $(OBJSDLL)
|
||||||
gcc -shared -Wl,-soname,libpng.so.$(PNGMAJ) -o libpng.so.$(PNGVER) \
|
$(CC) -shared -Wl,-soname,libpng.so.$(PNGMAJ) -o libpng.so.$(PNGVER) \
|
||||||
$(OBJSDLL)
|
$(OBJSDLL)
|
||||||
|
|
||||||
pngtest: pngtest.o libpng.so
|
pngtest: pngtest.o libpng.so
|
||||||
@@ -24,7 +24,7 @@ libpng.a: $(OBJS)
|
|||||||
$(RANLIB) $@
|
$(RANLIB) $@
|
||||||
|
|
||||||
pngtest: pngtest.o libpng.a
|
pngtest: pngtest.o libpng.a
|
||||||
cc -o pngtest $(CCFLAGS) pngtest.o $(LDFLAGS)
|
$(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)
|
||||||
|
|
||||||
test: pngtest
|
test: pngtest
|
||||||
./pngtest
|
./pngtest
|
||||||
69
scripts/makefile.os2
Normal file
69
scripts/makefile.os2
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
# makefile for libpng on OS/2 with gcc
|
||||||
|
# For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
|
||||||
|
# Related files: pngos2.def
|
||||||
|
|
||||||
|
CC=gcc -Zomf -s
|
||||||
|
|
||||||
|
# Where the zlib library and include files are located
|
||||||
|
ZLIBLIB=../zlib
|
||||||
|
ZLIBINC=../zlib
|
||||||
|
|
||||||
|
WARNMORE=-Wwrite-strings -Wpointer-arith -Wshadow \
|
||||||
|
-Wmissing-declarations -Wtraditional -Wcast-align \
|
||||||
|
-Wstrict-prototypes -Wmissing-prototypes #-Wconversion
|
||||||
|
CFLAGS=-I$(ZLIBINC) -Wall -O6 -funroll-loops -malign-loops=2 \
|
||||||
|
-malign-functions=2 #$(WARNMORE) -g -DPNG_DEBUG=5
|
||||||
|
LDFLAGS=-L. -L$(ZLIBLIB) -lpng -lzdll -Zcrtdll
|
||||||
|
AR=emxomfar
|
||||||
|
|
||||||
|
PNGLIB=png.lib
|
||||||
|
IMPLIB=emximp
|
||||||
|
SHAREDLIB=png.dll
|
||||||
|
SHAREDLIBIMP=pngdll.lib
|
||||||
|
|
||||||
|
OBJS = png.o pngset.o pngget.o pngrutil.o pngtrans.o pngwutil.o \
|
||||||
|
pngread.o pngrio.o pngwio.o pngwrite.o pngrtran.o \
|
||||||
|
pngwtran.o pngmem.o pngerror.o pngpread.o
|
||||||
|
|
||||||
|
.SUFFIXES: .c .o
|
||||||
|
|
||||||
|
all: $(PNGLIB) $(SHAREDLIB) $(SHAREDLIBIMP)
|
||||||
|
|
||||||
|
$(PNGLIB): $(OBJS)
|
||||||
|
$(AR) rc $@ $(OBJS)
|
||||||
|
|
||||||
|
$(SHAREDLIB): $(OBJS) pngos2.def
|
||||||
|
$(CC) $(LDFLAGS) -Zdll -o $@ $^
|
||||||
|
|
||||||
|
$(SHAREDLIBIMP): pngos2.def
|
||||||
|
$(IMPLIB) -o $@ $^
|
||||||
|
|
||||||
|
pngtest.exe: pngtest.o png.dll pngdll.lib
|
||||||
|
$(CC) -o $@ $(CFLAGS) $< $(LDFLAGS)
|
||||||
|
|
||||||
|
test: pngtest.exe
|
||||||
|
./pngtest.exe
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.o $(PNGLIB) png.dll pngdll.lib pngtest.exe pngout.png
|
||||||
|
|
||||||
|
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||||
|
|
||||||
|
png.o png.pic.o: png.h pngconf.h
|
||||||
|
pngerror.o pngerror.pic.o: png.h pngconf.h
|
||||||
|
pngrio.o pngrio.pic.o: png.h pngconf.h
|
||||||
|
pngwio.o pngwio.pic.o: png.h pngconf.h
|
||||||
|
pngmem.o pngmem.pic.o: png.h pngconf.h
|
||||||
|
pngset.o pngset.pic.o: png.h pngconf.h
|
||||||
|
pngget.o pngget.pic.o: png.h pngconf.h
|
||||||
|
pngread.o pngread.pic.o: png.h pngconf.h
|
||||||
|
pngrtran.o pngrtran.pic.o: png.h pngconf.h
|
||||||
|
pngrutil.o pngrutil.pic.o: png.h pngconf.h
|
||||||
|
pngtrans.o pngtrans.pic.o: png.h pngconf.h
|
||||||
|
pngwrite.o pngwrite.pic.o: png.h pngconf.h
|
||||||
|
pngwtran.o pngwtran.pic.o: png.h pngconf.h
|
||||||
|
pngwutil.o pngwutil.pic.o: png.h pngconf.h
|
||||||
|
pngpread.o pngpread.pic.o: png.h pngconf.h
|
||||||
|
|
||||||
|
pngtest.o: png.h pngconf.h
|
||||||
98
scripts/makefile.s2x
Normal file
98
scripts/makefile.s2x
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
makefile for libpng on Solaris 2.x with gcc
|
||||||
|
# Contributed by William L. Sebok, based on makefile.lnx
|
||||||
|
# Copyright (C) 1996, 1997 Andreas Dilger
|
||||||
|
# Copyright (C) 1998 Greg Roelofs
|
||||||
|
# For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
|
||||||
|
CC=gcc
|
||||||
|
|
||||||
|
# Where the zlib library and include files are located
|
||||||
|
ZLIBLIB=/usr/local/lib
|
||||||
|
ZLIBINC=/usr/local/include
|
||||||
|
|
||||||
|
WARNMORE=-Wwrite-strings -Wpointer-arith -Wshadow \
|
||||||
|
-Wmissing-declarations -Wtraditional -Wcast-align \
|
||||||
|
-Wstrict-prototypes -Wmissing-prototypes #-Wconversion
|
||||||
|
CFLAGS=-I$(ZLIBINC) -Wall -O3 \
|
||||||
|
#$(WARNMORE) -g -DPNG_DEBUG=5
|
||||||
|
LDFLAGS=-L. -R. -L$(ZLIBLIB) -R$(ZLIBLIB) -lpng -lz -lm
|
||||||
|
|
||||||
|
#RANLIB=ranlib
|
||||||
|
RANLIB=echo
|
||||||
|
|
||||||
|
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not
|
||||||
|
# have to change it.
|
||||||
|
PNGMAJ = 2
|
||||||
|
PNGMIN = 1.0
|
||||||
|
PNGVER = $(PNGMAJ).$(PNGMIN)
|
||||||
|
|
||||||
|
# where make install puts libpng.a, libpng.so*, and png.h
|
||||||
|
prefix=/local
|
||||||
|
INCPATH=$(prefix)/include
|
||||||
|
LIBPATH=$(prefix)/lib
|
||||||
|
|
||||||
|
OBJS = png.o pngset.o pngget.o pngrutil.o pngtrans.o pngwutil.o \
|
||||||
|
pngread.o pngrio.o pngwio.o pngwrite.o pngrtran.o \
|
||||||
|
pngwtran.o pngmem.o pngerror.o pngpread.o
|
||||||
|
|
||||||
|
OBJSDLL = $(OBJS:.o=.pic.o)
|
||||||
|
|
||||||
|
.SUFFIXES: .c .o .pic.o
|
||||||
|
|
||||||
|
.c.pic.o:
|
||||||
|
$(CC) -c $(CFLAGS) -fPIC -o $@ $*.c
|
||||||
|
|
||||||
|
all: libpng.a libpng.so pngtest
|
||||||
|
|
||||||
|
libpng.a: $(OBJS)
|
||||||
|
ar rc $@ $(OBJS)
|
||||||
|
$(RANLIB) $@
|
||||||
|
|
||||||
|
libpng.so: libpng.so.$(PNGMAJ)
|
||||||
|
ln -sf libpng.so.$(PNGMAJ) libpng.so
|
||||||
|
|
||||||
|
libpng.so.$(PNGMAJ): libpng.so.$(PNGVER)
|
||||||
|
ln -sf libpng.so.$(PNGVER) libpng.so.$(PNGMAJ)
|
||||||
|
|
||||||
|
libpng.so.$(PNGVER): $(OBJSDLL)
|
||||||
|
$(LD) -G -L$(LIBPATH) -R$(LIBPATH) -h libpng.so.$(PNGMAJ) \
|
||||||
|
-o libpng.so.$(PNGVER) $(OBJSDLL) -lz
|
||||||
|
|
||||||
|
pngtest: pngtest.o libpng.so
|
||||||
|
$(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)
|
||||||
|
|
||||||
|
test: pngtest
|
||||||
|
./pngtest
|
||||||
|
|
||||||
|
install: libpng.a libpng.so.$(PNGVER)
|
||||||
|
-@mkdir $(INCPATH) $(LIBPATH)
|
||||||
|
cp png.h pngconf.h $(INCPATH)
|
||||||
|
chmod 644 $(INCPATH)/png.h $(INCPATH)/pngconf.h
|
||||||
|
cp libpng.a libpng.so.$(PNGVER) $(LIBPATH)
|
||||||
|
chmod 755 $(LIBPATH)/libpng.so.$(PNGVER)
|
||||||
|
-@/bin/rm -f $(LIBPATH)/libpng.so.$(PNGMAJ) $(LIBPATH)/libpng.so
|
||||||
|
(cd $(LIBPATH); ln -sf libpng.so.$(PNGVER) libpng.so.$(PNGMAJ); \
|
||||||
|
ln -sf libpng.so.$(PNGMAJ) libpng.so)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
/bin/rm -f *.o libpng.a libpng.so* pngtest pngout.png
|
||||||
|
|
||||||
|
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||||
|
|
||||||
|
png.o png.pic.o: png.h pngconf.h
|
||||||
|
pngerror.o pngerror.pic.o: png.h pngconf.h
|
||||||
|
pngrio.o pngrio.pic.o: png.h pngconf.h
|
||||||
|
pngwio.o pngwio.pic.o: png.h pngconf.h
|
||||||
|
pngmem.o pngmem.pic.o: png.h pngconf.h
|
||||||
|
pngset.o pngset.pic.o: png.h pngconf.h
|
||||||
|
pngget.o pngget.pic.o: png.h pngconf.h
|
||||||
|
pngread.o pngread.pic.o: png.h pngconf.h
|
||||||
|
pngrtran.o pngrtran.pic.o: png.h pngconf.h
|
||||||
|
pngrutil.o pngrutil.pic.o: png.h pngconf.h
|
||||||
|
pngtrans.o pngtrans.pic.o: png.h pngconf.h
|
||||||
|
pngwrite.o pngwrite.pic.o: png.h pngconf.h
|
||||||
|
pngwtran.o pngwtran.pic.o: png.h pngconf.h
|
||||||
|
pngwutil.o pngwutil.pic.o: png.h pngconf.h
|
||||||
|
pngpread.o pngpread.pic.o: png.h pngconf.h
|
||||||
|
|
||||||
|
pngtest.o: png.h pngconf.h
|
||||||
@@ -30,7 +30,7 @@ libpng.a: $(OBJS)
|
|||||||
$(RANLIB) $@
|
$(RANLIB) $@
|
||||||
|
|
||||||
pngtest: pngtest.o libpng.a
|
pngtest: pngtest.o libpng.a
|
||||||
$(CC) -o pngtest $(CCFLAGS) pngtest.o $(LDFLAGS)
|
$(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)
|
||||||
|
|
||||||
test: pngtest
|
test: pngtest
|
||||||
./pngtest
|
./pngtest
|
||||||
@@ -29,7 +29,7 @@ libpng.a: $(OBJS)
|
|||||||
$(RANLIB) $@
|
$(RANLIB) $@
|
||||||
|
|
||||||
pngtest: pngtest.o libpng.a
|
pngtest: pngtest.o libpng.a
|
||||||
$(CC) -o pngtest $(CCFLAGS) pngtest.o $(LDFLAGS)
|
$(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)
|
||||||
|
|
||||||
test: pngtest
|
test: pngtest
|
||||||
./pngtest
|
./pngtest
|
||||||
@@ -33,7 +33,7 @@ libpng.a: $(OBJS)
|
|||||||
$(RANLIB) $@
|
$(RANLIB) $@
|
||||||
|
|
||||||
pngtest: pngtest.o libpng.a
|
pngtest: pngtest.o libpng.a
|
||||||
$(CC) -o pngtest $(CCFLAGS) pngtest.o $(LDFLAGS)
|
$(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)
|
||||||
|
|
||||||
test: pngtest
|
test: pngtest
|
||||||
./pngtest
|
./pngtest
|
||||||
@@ -9,8 +9,9 @@ CFLAGS=-O2 -Z $(MODEL) -I..\zlib
|
|||||||
CC=tcc
|
CC=tcc
|
||||||
LD=tcc
|
LD=tcc
|
||||||
LIB=tlib
|
LIB=tlib
|
||||||
LDFLAGS=$(MODEL)
|
LDFLAGS=$(MODEL) -L..\zlib
|
||||||
O=.obj
|
O=.obj
|
||||||
|
E=.exe
|
||||||
|
|
||||||
# variables
|
# variables
|
||||||
OBJS1 = png$(O) pngset$(O) pngget$(O) pngrutil$(O) pngtrans$(O) pngwutil$(O)
|
OBJS1 = png$(O) pngset$(O) pngget$(O) pngrutil$(O) pngtrans$(O) pngwutil$(O)
|
||||||
@@ -20,7 +21,7 @@ OBJSL1 = +png$(O) +pngset$(O) +pngget$(O) +pngrutil$(O) +pngtrans$(O)
|
|||||||
OBJSL2 = +pngwutil$(O) +pngmem$(O) +pngpread$(O) +pngread$(O) +pngerror$(O)
|
OBJSL2 = +pngwutil$(O) +pngmem$(O) +pngpread$(O) +pngread$(O) +pngerror$(O)
|
||||||
OBJSL3 = +pngwrite$(O) +pngrtran$(O) +pngwtran$(O) +pngrio$(O) +pngwio$(O)
|
OBJSL3 = +pngwrite$(O) +pngrtran$(O) +pngwtran$(O) +pngrio$(O) +pngwio$(O)
|
||||||
|
|
||||||
all: libpng.lib
|
all: libpng.lib pngtest.exe
|
||||||
|
|
||||||
png$(O): png.h pngconf.h
|
png$(O): png.h pngconf.h
|
||||||
$(CC) -c $(CFLAGS) $*.c
|
$(CC) -c $(CFLAGS) $*.c
|
||||||
@@ -75,4 +76,7 @@ libpng.lib: $(OBJS1) $(OBJS2) $(OBJS3)
|
|||||||
$(LIB) libpng +$(OBJSL2)
|
$(LIB) libpng +$(OBJSL2)
|
||||||
$(LIB) libpng +$(OBJSL3)
|
$(LIB) libpng +$(OBJSL3)
|
||||||
|
|
||||||
|
pngtest$(E): pngtest$(O) libpng.lib
|
||||||
|
$(CC) $(LDFLAGS) pngtest.obj libpng.lib zlib.lib
|
||||||
|
|
||||||
# End of makefile for libpng
|
# End of makefile for libpng
|
||||||
88
scripts/makefile.wat
Normal file
88
scripts/makefile.wat
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
# Makefile for libpng
|
||||||
|
# Watcom 10a and later 32-bit protected mode flat memory model
|
||||||
|
|
||||||
|
# Adapted by Pawel Mrochen, based on makefile.msc
|
||||||
|
# For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
# Assumes that zlib.lib, zconf.h, and zlib.h have been copied to ..\zlib
|
||||||
|
|
||||||
|
# To use, do "wmake -f makefile.wat"
|
||||||
|
|
||||||
|
# ------------- Watcom 10a and later -------------
|
||||||
|
MODEL=-mf
|
||||||
|
CFLAGS= $(MODEL) -fpi87 -fp5 -5r -oaeilmnrt -s -zp4 -i=..\zlib
|
||||||
|
CC=wcc386
|
||||||
|
LD=wcl386
|
||||||
|
LIB=wlib -b -c
|
||||||
|
LDFLAGS=
|
||||||
|
O=.obj
|
||||||
|
|
||||||
|
#uncomment next to put error messages in a file
|
||||||
|
#ERRFILE= >> pngerrs
|
||||||
|
|
||||||
|
# variables
|
||||||
|
OBJS1 = png$(O) pngset$(O) pngget$(O) pngrutil$(O) pngtrans$(O) pngwutil$(O)
|
||||||
|
OBJS2 = pngmem$(O) pngpread$(O) pngread$(O) pngerror$(O) pngwrite$(O)
|
||||||
|
OBJS3 = pngrtran$(O) pngwtran$(O) pngrio$(O) pngwio$(O)
|
||||||
|
|
||||||
|
all: test
|
||||||
|
|
||||||
|
png$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngset$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngget$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngread$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngpread$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngrtran$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngrutil$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngerror$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngmem$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngrio$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngwio$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngtest$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngtrans$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngwrite$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngwtran$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngwutil$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
libpng.lib: $(OBJS1) $(OBJS2) $(OBJS3)
|
||||||
|
$(LIB) -n libpng.lib +$(OBJS1)
|
||||||
|
$(LIB) libpng.lib +$(OBJS2)
|
||||||
|
$(LIB) libpng.lib +$(OBJS3)
|
||||||
|
|
||||||
|
pngtest.exe: pngtest.obj libpng.lib
|
||||||
|
$(LD) $(LDFLAGS) pngtest.obj libpng.lib ..\zlib\zlib.lib
|
||||||
|
|
||||||
|
test: pngtest.exe
|
||||||
|
pngtest
|
||||||
|
|
||||||
|
# End of makefile for libpng
|
||||||
286
scripts/pngos2.def
Normal file
286
scripts/pngos2.def
Normal file
@@ -0,0 +1,286 @@
|
|||||||
|
;----------------------------------------
|
||||||
|
; PNGLIB module definition file for OS/2
|
||||||
|
;----------------------------------------
|
||||||
|
|
||||||
|
LIBRARY PNG
|
||||||
|
DESCRIPTION "PNG image compression library for OS/2"
|
||||||
|
CODE PRELOAD MOVEABLE DISCARDABLE
|
||||||
|
DATA PRELOAD MOVEABLE MULTIPLE
|
||||||
|
|
||||||
|
EXPORTS
|
||||||
|
png_set_sig_bytes
|
||||||
|
png_sig_cmp
|
||||||
|
png_check_sig
|
||||||
|
png_create_read_struct
|
||||||
|
png_create_write_struct
|
||||||
|
png_write_chunk
|
||||||
|
png_write_chunk_start
|
||||||
|
png_write_chunk_data
|
||||||
|
png_write_chunk_end
|
||||||
|
png_create_info_struct
|
||||||
|
png_info_init
|
||||||
|
png_write_info
|
||||||
|
png_read_info
|
||||||
|
png_convert_to_rfc1123
|
||||||
|
png_convert_from_struct_tm
|
||||||
|
png_convert_from_time_t
|
||||||
|
png_set_expand
|
||||||
|
png_set_bgr
|
||||||
|
png_set_gray_to_rgb
|
||||||
|
; png_set_rgb_to_gray
|
||||||
|
png_build_grayscale_palette
|
||||||
|
png_set_strip_alpha
|
||||||
|
png_set_swap_alpha
|
||||||
|
png_set_invert_alpha
|
||||||
|
png_set_filler
|
||||||
|
png_set_swap
|
||||||
|
png_set_packing
|
||||||
|
png_set_packswap
|
||||||
|
png_set_shift
|
||||||
|
png_set_interlace_handling
|
||||||
|
png_set_invert_mono
|
||||||
|
png_set_background
|
||||||
|
png_set_strip_16
|
||||||
|
png_set_dither
|
||||||
|
png_set_gamma
|
||||||
|
png_set_flush
|
||||||
|
png_write_flush
|
||||||
|
png_start_read_image
|
||||||
|
png_read_update_info
|
||||||
|
png_read_rows
|
||||||
|
png_read_row
|
||||||
|
png_read_image
|
||||||
|
png_write_row
|
||||||
|
png_write_rows
|
||||||
|
png_write_image
|
||||||
|
png_write_end
|
||||||
|
png_read_end
|
||||||
|
png_destroy_info_struct
|
||||||
|
png_destroy_read_struct
|
||||||
|
png_read_destroy
|
||||||
|
png_destroy_write_struct
|
||||||
|
; png_write_destroy_info
|
||||||
|
png_write_destroy
|
||||||
|
png_set_crc_action
|
||||||
|
png_set_filter
|
||||||
|
png_set_filter_heuristics
|
||||||
|
png_set_compression_level
|
||||||
|
png_set_compression_mem_level
|
||||||
|
png_set_compression_strategy
|
||||||
|
png_set_compression_window_bits
|
||||||
|
png_set_compression_method
|
||||||
|
png_init_io
|
||||||
|
png_set_error_fn
|
||||||
|
png_get_error_ptr
|
||||||
|
png_set_write_fn
|
||||||
|
png_set_read_fn
|
||||||
|
png_set_write_status_fn
|
||||||
|
png_set_read_status_fn
|
||||||
|
png_get_io_ptr
|
||||||
|
png_set_progressive_read_fn
|
||||||
|
png_set_read_status_fn
|
||||||
|
png_set_read_user_transform_fn
|
||||||
|
png_set_write_status_fn
|
||||||
|
png_set_write_user_transform_fn
|
||||||
|
png_get_progressive_ptr
|
||||||
|
png_process_data
|
||||||
|
png_progressive_combine_row
|
||||||
|
png_malloc
|
||||||
|
png_free
|
||||||
|
png_memcpy_check
|
||||||
|
png_memset_check
|
||||||
|
; png_debug_malloc
|
||||||
|
; png_debug_free
|
||||||
|
; png_far_to_near
|
||||||
|
png_error
|
||||||
|
png_chunk_error
|
||||||
|
png_warning
|
||||||
|
png_chunk_warning
|
||||||
|
png_get_valid
|
||||||
|
png_get_rowbytes
|
||||||
|
png_get_channels
|
||||||
|
png_get_image_width
|
||||||
|
png_get_image_height
|
||||||
|
png_get_bit_depth
|
||||||
|
png_get_color_type
|
||||||
|
png_get_filter_type
|
||||||
|
png_get_interlace_type
|
||||||
|
png_get_compression_type
|
||||||
|
png_get_pixels_per_meter
|
||||||
|
png_get_pixel_aspect_ratio
|
||||||
|
png_get_x_offset_pixels
|
||||||
|
png_get_y_offset_pixels
|
||||||
|
png_get_x_offset_microns
|
||||||
|
png_get_y_offset_microns
|
||||||
|
png_get_signature
|
||||||
|
png_get_bKGD
|
||||||
|
png_set_bKGD
|
||||||
|
png_get_cHRM
|
||||||
|
png_set_cHRM
|
||||||
|
png_get_gAMA
|
||||||
|
png_set_gAMA
|
||||||
|
png_get_hIST
|
||||||
|
png_set_hIST
|
||||||
|
png_get_IHDR
|
||||||
|
png_set_IHDR
|
||||||
|
png_get_oFFs
|
||||||
|
png_set_oFFs
|
||||||
|
png_get_pCAL
|
||||||
|
png_set_pCAL
|
||||||
|
png_get_pHYs
|
||||||
|
png_set_pHYs
|
||||||
|
png_get_PLTE
|
||||||
|
png_set_PLTE
|
||||||
|
png_get_sBIT
|
||||||
|
png_set_sBIT
|
||||||
|
png_get_sRGB
|
||||||
|
png_set_sRGB
|
||||||
|
png_set_sRGB_gAMA_and_cHRM
|
||||||
|
png_get_text
|
||||||
|
png_set_text
|
||||||
|
png_get_tIME
|
||||||
|
png_set_tIME
|
||||||
|
png_get_tRNS
|
||||||
|
png_set_tRNS
|
||||||
|
|
||||||
|
png_create_struct
|
||||||
|
png_destroy_struct
|
||||||
|
png_info_destroy
|
||||||
|
png_zalloc
|
||||||
|
png_zfree
|
||||||
|
png_reset_crc
|
||||||
|
png_write_data
|
||||||
|
png_read_data
|
||||||
|
png_crc_read
|
||||||
|
png_crc_finish
|
||||||
|
png_crc_error
|
||||||
|
png_calculate_crc
|
||||||
|
png_flush
|
||||||
|
png_save_uint_32
|
||||||
|
png_save_int_32
|
||||||
|
png_save_uint_16
|
||||||
|
png_write_sig
|
||||||
|
png_write_IHDR
|
||||||
|
png_write_PLTE
|
||||||
|
png_write_IDAT
|
||||||
|
png_write_IEND
|
||||||
|
png_write_gAMA
|
||||||
|
png_write_sBIT
|
||||||
|
png_write_cHRM
|
||||||
|
png_write_sRGB
|
||||||
|
png_write_tRNS
|
||||||
|
png_write_bKGD
|
||||||
|
png_write_hIST
|
||||||
|
png_check_keyword
|
||||||
|
png_write_tEXt
|
||||||
|
png_write_zTXt
|
||||||
|
png_write_oFFs
|
||||||
|
png_write_pCAL
|
||||||
|
png_write_pHYs
|
||||||
|
png_write_tIME
|
||||||
|
png_write_finish_row
|
||||||
|
png_write_start_row
|
||||||
|
png_build_gamma_table
|
||||||
|
png_combine_row
|
||||||
|
png_do_read_interlace
|
||||||
|
png_do_write_interlace
|
||||||
|
png_read_filter_row
|
||||||
|
png_write_find_filter
|
||||||
|
png_write_filtered_row
|
||||||
|
png_read_finish_row
|
||||||
|
png_read_start_row
|
||||||
|
png_read_transform_info
|
||||||
|
png_do_read_filler
|
||||||
|
png_do_read_swap_alpha
|
||||||
|
png_do_write_swap_alpha
|
||||||
|
png_do_read_invert_alpha
|
||||||
|
png_do_write_invert_alpha
|
||||||
|
png_do_strip_filler
|
||||||
|
png_do_swap
|
||||||
|
png_do_packswap
|
||||||
|
; png_do_rgb_to_gray
|
||||||
|
png_do_gray_to_rgb
|
||||||
|
png_do_unpack
|
||||||
|
png_do_unshift
|
||||||
|
png_do_invert
|
||||||
|
png_do_chop
|
||||||
|
png_do_dither
|
||||||
|
; png_correct_palette
|
||||||
|
png_do_bgr
|
||||||
|
png_do_pack
|
||||||
|
png_do_shift
|
||||||
|
png_do_background
|
||||||
|
png_do_gamma
|
||||||
|
png_do_expand_palette
|
||||||
|
png_do_expand
|
||||||
|
png_handle_IHDR
|
||||||
|
png_handle_PLTE
|
||||||
|
png_handle_IEND
|
||||||
|
png_handle_gAMA
|
||||||
|
png_handle_sBIT
|
||||||
|
png_handle_cHRM
|
||||||
|
png_handle_sRGB
|
||||||
|
png_handle_tRNS
|
||||||
|
png_handle_bKGD
|
||||||
|
png_handle_hIST
|
||||||
|
png_handle_oFFs
|
||||||
|
png_handle_pCAL
|
||||||
|
png_handle_pHYs
|
||||||
|
png_handle_tIME
|
||||||
|
png_handle_tEXt
|
||||||
|
png_handle_zTXt
|
||||||
|
png_handle_unknown
|
||||||
|
png_check_chunk_name
|
||||||
|
png_do_read_transformations
|
||||||
|
png_do_write_transformations
|
||||||
|
png_init_read_transformations
|
||||||
|
png_push_read_chunk
|
||||||
|
png_push_read_sig
|
||||||
|
; png_push_check_crc
|
||||||
|
png_push_crc_skip
|
||||||
|
png_push_crc_finish
|
||||||
|
png_push_fill_buffer
|
||||||
|
png_push_save_buffer
|
||||||
|
png_push_restore_buffer
|
||||||
|
png_push_read_IDAT
|
||||||
|
png_process_IDAT_data
|
||||||
|
png_push_process_row
|
||||||
|
png_push_handle_unknown
|
||||||
|
png_push_have_info
|
||||||
|
png_push_have_end
|
||||||
|
png_push_have_row
|
||||||
|
; png_push_read_end
|
||||||
|
png_process_some_data
|
||||||
|
png_read_push_finish_row
|
||||||
|
png_push_handle_tEXt
|
||||||
|
png_push_read_tEXt
|
||||||
|
png_push_handle_zTXt
|
||||||
|
png_push_read_zTXt
|
||||||
|
|
||||||
|
png_libpng_ver
|
||||||
|
png_pass_start
|
||||||
|
png_pass_inc
|
||||||
|
png_pass_ystart
|
||||||
|
png_pass_yinc
|
||||||
|
png_pass_mask
|
||||||
|
png_pass_dsp_mask
|
||||||
|
; png_pass_width
|
||||||
|
; png_pass_height
|
||||||
|
|
||||||
|
png_IHDR
|
||||||
|
png_IDAT
|
||||||
|
png_IEND
|
||||||
|
png_PLTE
|
||||||
|
png_bKGD
|
||||||
|
png_cHRM
|
||||||
|
png_gAMA
|
||||||
|
png_hIST
|
||||||
|
png_oFFs
|
||||||
|
png_pCAL
|
||||||
|
png_pHYs
|
||||||
|
png_sBIT
|
||||||
|
png_sRGB
|
||||||
|
png_tEXt
|
||||||
|
png_tIME
|
||||||
|
png_tRNS
|
||||||
|
png_zTXt
|
||||||
29
scripts/smakefile.ppc
Normal file
29
scripts/smakefile.ppc
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
# Amiga powerUP (TM) Makefile
|
||||||
|
# makefile for libpng and SAS C V6.58/7.00 PPC compiler
|
||||||
|
# Copyright (C) 1998 by Andreas R. Kleinert
|
||||||
|
|
||||||
|
CC = scppc
|
||||||
|
CFLAGS = NOSTKCHK NOSINT OPTIMIZE OPTGO OPTPEEP OPTINLOCAL OPTINL IDIR /zlib \
|
||||||
|
OPTLOOP OPTRDEP=8 OPTDEP=8 OPTCOMP=8
|
||||||
|
LIBNAME = libpng.a
|
||||||
|
AR = ppc-amigaos-ar
|
||||||
|
AR_FLAGS = cr
|
||||||
|
RANLIB = ppc-amigaos-ranlib
|
||||||
|
LDFLAGS = -r -o
|
||||||
|
LDLIBS = ../zlib/libzip.a LIB:scppc.a
|
||||||
|
LN = ppc-amigaos-ld
|
||||||
|
RM = delete quiet
|
||||||
|
MKDIR = makedir
|
||||||
|
|
||||||
|
OBJS = png.o pngset.o pngget.o pngrutil.o pngtrans.o pngwutil.o pngread.o \
|
||||||
|
pngerror.o pngpread.o pngwrite.o pngrtran.o pngwtran.o pngrio.o pngwio.o pngmem.o
|
||||||
|
|
||||||
|
all: $(LIBNAME) pngtest
|
||||||
|
|
||||||
|
$(LIBNAME): $(OBJS)
|
||||||
|
$(AR) $(AR_FLAGS) $@ $(OBJS)
|
||||||
|
$(RANLIB) $@
|
||||||
|
|
||||||
|
pngtest: pngtest.o $(LIBNAME)
|
||||||
|
$(LN) $(LDFLAGS) pngtest LIB:c_ppc.o pngtest.o $(LIBNAME) $(LDLIBS) \
|
||||||
|
LIB:end.o
|
||||||
Reference in New Issue
Block a user