Compare commits
1 Commits
libpng-1.5
...
v1.0.13
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
80b4f15ae3 |
74
ANNOUNCE
@@ -1,39 +1,51 @@
|
|||||||
|
|
||||||
Libpng 1.5.26 - December 17, 2015
|
Libpng 1.0.13 - April 15, 2002
|
||||||
|
|
||||||
This is a public release of libpng, intended for use in production codes.
|
This is a public release of libpng, intended for use in production codes.
|
||||||
|
|
||||||
Files available for download:
|
Changes since the last public release (1.2.1):
|
||||||
|
|
||||||
Source files with LF line endings (for Unix/Linux) and with a
|
Fixed a bug with reading the length of iCCP profiles (Larry Reeves).
|
||||||
"configure" script
|
Revised makefile.linux, makefile.gcmmx, and others to generate
|
||||||
|
libpng.a, libpngNN.so, libpng.so.NN, and libpngNN/png.h
|
||||||
|
Revised makefile.darwin to remove "-undefined suppress" option.
|
||||||
|
Added checks for gamma and chromaticity values over 21474.83, which exceed
|
||||||
|
the limit for PNG unsigned 32-bit integers when encoded.
|
||||||
|
Revised calls to png_create_read_struct() and png_create_write_struct()
|
||||||
|
for simpler debugging.
|
||||||
|
Revised png_zalloc() so zlib handles errors (uses PNG_FLAG_MALLOC_NULL_MEM_OK)
|
||||||
|
Check chunk_length and idat_size for invalid (over PNG_MAX_UINT) lengths.
|
||||||
|
Check for invalid image dimensions in png_get_IHDR.
|
||||||
|
Added install-shared and install-static targets to all makefiles that make
|
||||||
|
shared libraries.
|
||||||
|
Always do gamma compensation when image is partially transparent.
|
||||||
|
Modified shared-library makefiles to install pkgconfig/libpngNN.pc.
|
||||||
|
Export (with PNGAPI) png_zalloc, png_zfree, and png_handle_as_unknown
|
||||||
|
Removed unused png_write_destroy_info prototype from png.h
|
||||||
|
Eliminated incorrect use of width_mmx from pnggccrd.c in pixel_bytes == 8 case
|
||||||
|
Stopped a double free of palette, hist, and trans when not using free_me.
|
||||||
|
Added makefile.32sunu for Sun Ultra 32 and makefile.64sunu for Sun Ultra 64.
|
||||||
|
Compute background.gray and background_1.gray even when color_type is RGB
|
||||||
|
in case image gets reduced to gray later (Jason Summers).
|
||||||
|
Added PNG_1_0_X macro which can be used to build a 1.0.x-compatible library.
|
||||||
|
Added missing PNGAPI to several function definitions.
|
||||||
|
Check for invalid bit_depth or color_type in png_get_IHDR(), and
|
||||||
|
check for missing PLTE or IHDR in png_push_read_chunk() (Matthias Clasen).
|
||||||
|
Revised iTXt support to accept NULL for lang and lang_key.
|
||||||
|
Compute gamma for color components of background even when color_type is gray.
|
||||||
|
Revised makefiles to put png.h and pngconf.h only in $prefix/include/libpngNN
|
||||||
|
Revised makefiles to make symlink to libpng.so.NN in addition to libpngNN.so
|
||||||
|
Prevent png_zalloc() from trying to memset memory that it failed to acquire.
|
||||||
|
Add typecasts of PNG_MAX_UINT in pngset_cHRM_fixed() (Matt Holgate).
|
||||||
|
Ensure that the right function (user or default) is used to free the
|
||||||
|
png_struct after an error in png_create_read_struct_2().
|
||||||
|
Save the ebx register in pnggccrd.c (Sami Farin)
|
||||||
|
Add "mem_ptr = png_ptr->mem_ptr" in png_destroy_write_struct() (Paul Gardner).
|
||||||
|
Updated makefiles to put headers in include/libpng and remove old include/*.h.
|
||||||
|
Revised description of png_set_filter() in libpng.3/libpng.txt.
|
||||||
|
Revised makefile.netbsd and added makefile.neNNbsd and makefile.freebsd
|
||||||
|
|
||||||
libpng-1.5.26.tar.xz (LZMA-compressed, recommended)
|
Send comments/corrections/commendations to
|
||||||
libpng-1.5.26.tar.gz
|
png-implement@ccrc.wustl.edu or to randeg@alum.rpi.edu
|
||||||
|
|
||||||
Source files with CRLF line endings (for Windows), without the
|
|
||||||
"configure" script
|
|
||||||
|
|
||||||
lpng1526.7z (LZMA-compressed, recommended)
|
|
||||||
lpng1526.zip
|
|
||||||
|
|
||||||
Other information:
|
|
||||||
|
|
||||||
libpng-1.5.26-README.txt
|
|
||||||
libpng-1.5.26-LICENSE.txt
|
|
||||||
libpng-1.5.26-*.asc (armored detached GPG signatures)
|
|
||||||
|
|
||||||
Changes since the last public release (1.5.25):
|
|
||||||
Fixed an out-of-range read in png_check_keyword() (Bug report from
|
|
||||||
Qixue Xiao, CVE-2015-8540).
|
|
||||||
Corrected copyright dates in source files.
|
|
||||||
Moved png_check_keyword() from pngwutil.c to pngset.c
|
|
||||||
Added keyword checks to pngset.c (John Bowler).
|
|
||||||
|
|
||||||
Send comments/corrections/commendations to png-mng-implement at lists.sf.net
|
|
||||||
(subscription required; visit
|
|
||||||
https://lists.sourceforge.net/lists/listinfo/png-mng-implement
|
|
||||||
to subscribe)
|
|
||||||
or to glennrp at users.sourceforge.net
|
|
||||||
|
|
||||||
Glenn R-P
|
Glenn R-P
|
||||||
|
|||||||
337
CMakeLists.txt
@@ -1,337 +0,0 @@
|
|||||||
# CMakeLists.txt
|
|
||||||
|
|
||||||
# Copyright (C) 2007-2015 Glenn Randers-Pehrson
|
|
||||||
|
|
||||||
# This code is released under the libpng license.
|
|
||||||
# For conditions of distribution and use, see the disclaimer
|
|
||||||
# and license in png.h
|
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 2.4.4)
|
|
||||||
set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
|
|
||||||
|
|
||||||
set(CMAKE_CONFIGURATION_TYPES "Release;Debug;MinSizeRel;RelWithDebInfo")
|
|
||||||
|
|
||||||
project(libpng C)
|
|
||||||
enable_testing()
|
|
||||||
|
|
||||||
set(PNGLIB_MAJOR 1)
|
|
||||||
set(PNGLIB_MINOR 5)
|
|
||||||
set(PNGLIB_RELEASE 26)
|
|
||||||
set(PNGLIB_NAME libpng${PNGLIB_MAJOR}${PNGLIB_MINOR})
|
|
||||||
set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_RELEASE})
|
|
||||||
|
|
||||||
# needed packages
|
|
||||||
find_package(ZLIB REQUIRED)
|
|
||||||
include_directories(${ZLIB_INCLUDE_DIR})
|
|
||||||
|
|
||||||
if(NOT WIN32)
|
|
||||||
find_library(M_LIBRARY
|
|
||||||
NAMES m
|
|
||||||
PATHS /usr/lib /usr/local/lib
|
|
||||||
)
|
|
||||||
if(NOT M_LIBRARY)
|
|
||||||
message(STATUS "math lib 'libm' not found; floating point support disabled")
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
# not needed on windows
|
|
||||||
set(M_LIBRARY "")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# COMMAND LINE OPTIONS
|
|
||||||
option(PNG_SHARED "Build shared lib" ON)
|
|
||||||
option(PNG_STATIC "Build static lib" ON)
|
|
||||||
option(PNG_TESTS "Build libpng tests" ON)
|
|
||||||
|
|
||||||
# Many more configuration options could be added here
|
|
||||||
option(PNG_FRAMEWORK "Build OS X framework" OFF)
|
|
||||||
option(PNG_DEBUG "Build with debug output" OFF)
|
|
||||||
option(PNGARG "Disable ANSI-C prototypes" OFF)
|
|
||||||
|
|
||||||
# SET LIBNAME
|
|
||||||
set(PNG_LIB_NAME png${PNGLIB_MAJOR}${PNGLIB_MINOR})
|
|
||||||
|
|
||||||
# to distinguish between debug and release lib
|
|
||||||
set(CMAKE_DEBUG_POSTFIX "d")
|
|
||||||
|
|
||||||
# Use the prebuilt pnglibconf.h file from the scripts folder
|
|
||||||
# TODO: fix this by building with awk; without this no cmake build can be
|
|
||||||
# configured directly (to do so indirectly use your local awk to build a
|
|
||||||
# pnglibconf.h in the build directory.)
|
|
||||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h)
|
|
||||||
include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
|
||||||
|
|
||||||
# OUR SOURCES
|
|
||||||
set(libpng_public_hdrs
|
|
||||||
png.h
|
|
||||||
pngconf.h
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h
|
|
||||||
)
|
|
||||||
set(libpng_sources
|
|
||||||
${libpng_public_hdrs}
|
|
||||||
pngdebug.h
|
|
||||||
pnginfo.h
|
|
||||||
pngpriv.h
|
|
||||||
pngstruct.h
|
|
||||||
png.c
|
|
||||||
pngerror.c
|
|
||||||
pngget.c
|
|
||||||
pngmem.c
|
|
||||||
pngpread.c
|
|
||||||
pngread.c
|
|
||||||
pngrio.c
|
|
||||||
pngrtran.c
|
|
||||||
pngrutil.c
|
|
||||||
pngset.c
|
|
||||||
pngtrans.c
|
|
||||||
pngwio.c
|
|
||||||
pngwrite.c
|
|
||||||
pngwtran.c
|
|
||||||
pngwutil.c
|
|
||||||
)
|
|
||||||
set(pngtest_sources
|
|
||||||
pngtest.c
|
|
||||||
)
|
|
||||||
set(pngvalid_sources
|
|
||||||
contrib/libtests/pngvalid.c
|
|
||||||
)
|
|
||||||
# SOME NEEDED DEFINITIONS
|
|
||||||
|
|
||||||
if(MSVC)
|
|
||||||
add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
|
|
||||||
endif(MSVC)
|
|
||||||
|
|
||||||
if(PNG_DEBUG)
|
|
||||||
add_definitions(-DPNG_DEBUG)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# NOW BUILD OUR TARGET
|
|
||||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${ZLIB_INCLUDE_DIR})
|
|
||||||
|
|
||||||
unset(PNG_LIB_TARGETS)
|
|
||||||
|
|
||||||
if(PNG_SHARED)
|
|
||||||
add_library(${PNG_LIB_NAME} SHARED ${libpng_sources})
|
|
||||||
set(PNG_LIB_TARGETS ${PNG_LIB_NAME})
|
|
||||||
if(MSVC)
|
|
||||||
# msvc does not append 'lib' - do it here to have consistent name
|
|
||||||
set_target_properties(${PNG_LIB_NAME} PROPERTIES PREFIX "lib")
|
|
||||||
set_target_properties(${PNG_LIB_NAME} PROPERTIES IMPORT_PREFIX "lib")
|
|
||||||
endif()
|
|
||||||
target_link_libraries(${PNG_LIB_NAME} ${ZLIB_LIBRARY} ${M_LIBRARY})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(PNG_STATIC)
|
|
||||||
# does not work without changing name
|
|
||||||
set(PNG_LIB_NAME_STATIC ${PNG_LIB_NAME}_static)
|
|
||||||
add_library(${PNG_LIB_NAME_STATIC} STATIC ${libpng_sources})
|
|
||||||
list(APPEND PNG_LIB_TARGETS ${PNG_LIB_NAME_STATIC})
|
|
||||||
if(MSVC)
|
|
||||||
# msvc does not append 'lib' - do it here to have consistent name
|
|
||||||
set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES PREFIX "lib")
|
|
||||||
endif()
|
|
||||||
target_link_libraries(${PNG_LIB_NAME_STATIC} ${ZLIB_LIBRARY} ${M_LIBRARY})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(PNG_FRAMEWORK)
|
|
||||||
set(PNG_LIB_NAME_FRAMEWORK ${PNG_LIB_NAME}_framework)
|
|
||||||
add_library(${PNG_LIB_NAME_FRAMEWORK} SHARED ${libpng_sources})
|
|
||||||
list(APPEND PNG_LIB_TARGETS ${PNG_LIB_NAME_FRAMEWORK})
|
|
||||||
set_target_properties(${PNG_LIB_NAME_FRAMEWORK} PROPERTIES
|
|
||||||
FRAMEWORK TRUE
|
|
||||||
FRAMEWORK_VERSION ${PNGLIB_VERSION}
|
|
||||||
MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${PNGLIB_MAJOR}.${PNGLIB_MINOR}
|
|
||||||
MACOSX_FRAMEWORK_BUNDLE_VERSION ${PNGLIB_VERSION}
|
|
||||||
MACOSX_FRAMEWORK_IDENTIFIER org.libpng.libpng
|
|
||||||
XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
|
|
||||||
PUBLIC_HEADER "${libpng_public_hdrs}"
|
|
||||||
OUTPUT_NAME png)
|
|
||||||
target_link_libraries(${PNG_LIB_NAME_FRAMEWORK} ${ZLIB_LIBRARY} ${M_LIBRARY})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT PNG_LIB_TARGETS)
|
|
||||||
message(SEND_ERROR
|
|
||||||
"No library variant selected to build. "
|
|
||||||
"Please enable at least one of the following options: "
|
|
||||||
" PNG_STATIC, PNG_SHARED, PNG_FRAMEWORK")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(PNG_SHARED AND WIN32)
|
|
||||||
set_target_properties(${PNG_LIB_NAME} PROPERTIES DEFINE_SYMBOL PNG_BUILD_DLL)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(PNG_TESTS AND PNG_SHARED)
|
|
||||||
# does not work with msvc due to png_lib_ver issue
|
|
||||||
add_executable(pngtest ${pngtest_sources})
|
|
||||||
target_link_libraries(pngtest ${PNG_LIB_NAME})
|
|
||||||
add_test(pngtest ./pngtest ${CMAKE_CURRENT_SOURCE_DIR}/pngtest.png)
|
|
||||||
#
|
|
||||||
add_executable(pngvalid ${pngvalid_sources})
|
|
||||||
target_link_libraries(pngvalid ${PNG_LIB_NAME})
|
|
||||||
add_test(pngvalid ./pngvalid)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Ensure the CMAKE_LIBRARY_OUTPUT_DIRECTORY is set
|
|
||||||
IF(NOT CMAKE_LIBRARY_OUTPUT_DIRECTORY)
|
|
||||||
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY "lib")
|
|
||||||
ENDIF(NOT CMAKE_LIBRARY_OUTPUT_DIRECTORY)
|
|
||||||
|
|
||||||
# Set a variable with CMake code which:
|
|
||||||
# Creates a symlink from src to dest (if possible) or alternatively
|
|
||||||
# copies if different.
|
|
||||||
macro(CREATE_SYMLINK SRC_FILE DEST_FILE)
|
|
||||||
FILE(REMOVE ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE})
|
|
||||||
if(WIN32 AND NOT CYGWIN AND NOT MSYS)
|
|
||||||
ADD_CUSTOM_COMMAND(
|
|
||||||
OUTPUT ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE} ${CMAKE_CURRENT_BINARY_DIR}/${DEST_FILE}
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${SRC_FILE}" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE}
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${SRC_FILE}" ${CMAKE_CURRENT_BINARY_DIR}/${DEST_FILE}
|
|
||||||
DEPENDS ${PNG_LIB_TARGETS}
|
|
||||||
)
|
|
||||||
ADD_CUSTOM_TARGET(${DEST_FILE}_COPY ALL DEPENDS ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE})
|
|
||||||
else(WIN32 AND NOT CYGWIN AND NOT MSYS)
|
|
||||||
get_filename_component(LINK_TARGET "${SRC_FILE}" NAME)
|
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
|
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "${LINK_TARGET}" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "${LINK_TARGET}" ${DEST_FILE} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
|
||||||
endif(WIN32 AND NOT CYGWIN AND NOT MSYS)
|
|
||||||
endmacro()
|
|
||||||
|
|
||||||
# libpng is a library so default to 'lib'
|
|
||||||
if(NOT DEFINED CMAKE_INSTALL_LIBDIR)
|
|
||||||
set(CMAKE_INSTALL_LIBDIR lib)
|
|
||||||
endif(NOT DEFINED CMAKE_INSTALL_LIBDIR)
|
|
||||||
|
|
||||||
# CREATE PKGCONFIG FILES
|
|
||||||
# we use the same files like ./configure, so we have to set its vars
|
|
||||||
# Only do this on Windows for Cygwin - the files don't make much sense outside
|
|
||||||
# a UNIX look alike
|
|
||||||
if(NOT WIN32 OR CYGWIN OR MINGW)
|
|
||||||
set(prefix ${CMAKE_INSTALL_PREFIX})
|
|
||||||
set(exec_prefix ${CMAKE_INSTALL_PREFIX})
|
|
||||||
set(libdir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR})
|
|
||||||
set(includedir ${CMAKE_INSTALL_PREFIX}/include)
|
|
||||||
set(LIBS "-lz -lm")
|
|
||||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng.pc.in
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc @ONLY)
|
|
||||||
CREATE_SYMLINK(${PNGLIB_NAME}.pc libpng.pc)
|
|
||||||
|
|
||||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng-config.in
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config @ONLY)
|
|
||||||
CREATE_SYMLINK(${PNGLIB_NAME}-config libpng-config)
|
|
||||||
endif(NOT WIN32 OR CYGWIN OR MINGW)
|
|
||||||
|
|
||||||
# SET UP LINKS
|
|
||||||
if(PNG_SHARED)
|
|
||||||
set_target_properties(${PNG_LIB_NAME} PROPERTIES
|
|
||||||
# VERSION 15.${PNGLIB_RELEASE}.1.5.26
|
|
||||||
VERSION 15.${PNGLIB_RELEASE}.0
|
|
||||||
SOVERSION 15
|
|
||||||
CLEAN_DIRECT_OUTPUT 1)
|
|
||||||
endif()
|
|
||||||
if(PNG_STATIC)
|
|
||||||
# MSVC doesn't use a different file extension for shared vs. static
|
|
||||||
# libs. We are able to change OUTPUT_NAME to remove the _static
|
|
||||||
# for all other platforms.
|
|
||||||
if(NOT MSVC)
|
|
||||||
set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES
|
|
||||||
OUTPUT_NAME ${PNG_LIB_NAME}
|
|
||||||
CLEAN_DIRECT_OUTPUT 1)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# If CMake > 2.4.x, we set a variable used below to export
|
|
||||||
# targets to an export file.
|
|
||||||
# TODO: Use VERSION_GREATER after our cmake_minimum_required >= 2.6.2
|
|
||||||
if(CMAKE_MAJOR_VERSION GREATER 1 AND CMAKE_MINOR_VERSION GREATER 4)
|
|
||||||
set(PNG_EXPORT_RULE EXPORT libpng)
|
|
||||||
elseif(CMAKE_MAJOR_VERSION GREATER 2) # future proof
|
|
||||||
set(PNG_EXPORT_RULE EXPORT libpng)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# INSTALL
|
|
||||||
if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )
|
|
||||||
install(TARGETS ${PNG_LIB_TARGETS}
|
|
||||||
${PNG_EXPORT_RULE}
|
|
||||||
RUNTIME DESTINATION bin
|
|
||||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
||||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
||||||
FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
||||||
|
|
||||||
if(PNG_SHARED)
|
|
||||||
# Create a symlink for libpng.dll.a => libpng15.dll.a on Cygwin
|
|
||||||
if(CYGWIN OR MINGW)
|
|
||||||
get_target_property(BUILD_TARGET_LOCATION ${PNG_LIB_NAME} LOCATION_${CMAKE_BUILD_TYPE})
|
|
||||||
CREATE_SYMLINK(${BUILD_TARGET_LOCATION} libpng${CMAKE_IMPORT_LIBRARY_SUFFIX})
|
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_IMPORT_LIBRARY_SUFFIX}
|
|
||||||
DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
||||||
endif(CYGWIN OR MINGW)
|
|
||||||
|
|
||||||
if(NOT WIN32)
|
|
||||||
get_target_property(BUILD_TARGET_LOCATION ${PNG_LIB_NAME} LOCATION_${CMAKE_BUILD_TYPE})
|
|
||||||
CREATE_SYMLINK(${BUILD_TARGET_LOCATION} libpng${CMAKE_SHARED_LIBRARY_SUFFIX})
|
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_SHARED_LIBRARY_SUFFIX}
|
|
||||||
DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
||||||
endif(NOT WIN32)
|
|
||||||
endif(PNG_SHARED)
|
|
||||||
|
|
||||||
if(PNG_STATIC)
|
|
||||||
if(NOT WIN32 OR CYGWIN OR MINGW)
|
|
||||||
get_target_property(BUILD_TARGET_LOCATION ${PNG_LIB_NAME_STATIC} LOCATION_${CMAKE_BUILD_TYPE})
|
|
||||||
CREATE_SYMLINK(${BUILD_TARGET_LOCATION} libpng${CMAKE_STATIC_LIBRARY_SUFFIX})
|
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_STATIC_LIBRARY_SUFFIX}
|
|
||||||
DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
||||||
endif(NOT WIN32 OR CYGWIN OR MINGW)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL )
|
|
||||||
install(FILES ${libpng_public_hdrs} DESTINATION include)
|
|
||||||
install(FILES ${libpng_public_hdrs} DESTINATION include/${PNGLIB_NAME})
|
|
||||||
endif()
|
|
||||||
if(NOT SKIP_INSTALL_EXECUTABLES AND NOT SKIP_INSTALL_ALL )
|
|
||||||
if(NOT WIN32 OR CYGWIN OR MINGW)
|
|
||||||
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config DESTINATION bin)
|
|
||||||
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config
|
|
||||||
DESTINATION bin)
|
|
||||||
endif(NOT WIN32 OR CYGWIN OR MINGW)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL )
|
|
||||||
# Install man pages
|
|
||||||
if(NOT PNG_MAN_DIR)
|
|
||||||
set(PNG_MAN_DIR "share/man")
|
|
||||||
endif()
|
|
||||||
install(FILES libpng.3 libpngpf.3 DESTINATION ${PNG_MAN_DIR}/man3)
|
|
||||||
install(FILES png.5 DESTINATION ${PNG_MAN_DIR}/man5)
|
|
||||||
# Install pkg-config files
|
|
||||||
if(NOT WIN32 OR CYGWIN OR MINGW)
|
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng.pc
|
|
||||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
|
||||||
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config
|
|
||||||
DESTINATION bin)
|
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc
|
|
||||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
|
||||||
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config
|
|
||||||
DESTINATION bin)
|
|
||||||
endif(NOT WIN32 OR CYGWIN OR MINGW)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# On versions of CMake that support it, create an export file CMake
|
|
||||||
# users can include() to import our targets
|
|
||||||
if(PNG_EXPORT_RULE AND NOT SKIP_INSTALL_EXPORT AND NOT SKIP_INSTALL_ALL )
|
|
||||||
install(EXPORT libpng DESTINATION lib/libpng FILE lib${PNG_LIB_NAME}.cmake)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# what's with libpng-manual.txt and all the extra files?
|
|
||||||
|
|
||||||
# UNINSTALL
|
|
||||||
# do we need this?
|
|
||||||
|
|
||||||
# DIST
|
|
||||||
# do we need this?
|
|
||||||
|
|
||||||
# to create msvc import lib for mingw compiled shared lib
|
|
||||||
# pexports libpng.dll > libpng.def
|
|
||||||
# lib /def:libpng.def /machine:x86
|
|
||||||
|
|
||||||
448
INSTALL
@@ -1,114 +1,17 @@
|
|||||||
|
|
||||||
Installing libpng
|
Installing libpng version 1.0.13 - April 15, 2002
|
||||||
|
|
||||||
Contents
|
Before installing libpng, you must first install zlib. zlib
|
||||||
|
can usually be found wherever you got libpng. zlib can be
|
||||||
I. Simple installation
|
placed in another directory, at the same level as libpng.
|
||||||
II. Rebuilding the configure scripts
|
Note that your system might already have a preinstalled
|
||||||
III. Using scripts/makefile*
|
zlib, but you will still need to have access to the
|
||||||
IV. Using cmake
|
zlib.h and zconf.h include files that correspond to the
|
||||||
V. Directory structure
|
version of zlib that's installed.
|
||||||
VI. Building with project files
|
|
||||||
VII. Building with makefiles
|
|
||||||
VIII. Configuring libpng for 16-bit platforms
|
|
||||||
IX. Configuring for DOS
|
|
||||||
X. Configuring for Medium Model
|
|
||||||
XI. Omitted
|
|
||||||
XII. Configuring for compiler xxx:
|
|
||||||
XIII. Removing unwanted object code
|
|
||||||
XIV. Changes to the build and configuration of libpng in libpng-1.5.x
|
|
||||||
XV. Configuring libpng for multiprocessing
|
|
||||||
XVI. Other sources of information about libpng
|
|
||||||
|
|
||||||
I. Simple installation
|
|
||||||
|
|
||||||
On Unix/Linux and similar systems, you can simply type
|
|
||||||
|
|
||||||
./configure [--prefix=/path]
|
|
||||||
make check
|
|
||||||
make install
|
|
||||||
|
|
||||||
and ignore the rest of this document. "/path" is the path to the directory
|
|
||||||
where you want to install the libpng "lib", "include", and "bin"
|
|
||||||
subdirectories.
|
|
||||||
|
|
||||||
Note that "configure" is only included in the "*.tar" distributions and not
|
|
||||||
in the "*.zip" or "*.7z" distributions. If you downloaded one of those
|
|
||||||
distributions, see "Building with project files" or "Building with makefiles",
|
|
||||||
below.
|
|
||||||
|
|
||||||
II. Rebuilding the configure scripts
|
|
||||||
|
|
||||||
If configure does not work on your system, or if you have a need to
|
|
||||||
change configure.ac or Makefile.am, and you have a reasonably
|
|
||||||
up-to-date set of tools, running ./autogen.sh in a git clone before
|
|
||||||
running ./configure may fix the problem. To be really sure that you
|
|
||||||
aren't using any of the included pre-built scripts, you can do this:
|
|
||||||
|
|
||||||
./configure --enable-maintainer-mode
|
|
||||||
make maintainer-clean
|
|
||||||
./autogen.sh --maintainer --clean
|
|
||||||
./autogen.sh --maintainer
|
|
||||||
./configure [--prefix=/path] [other options]
|
|
||||||
make
|
|
||||||
make install
|
|
||||||
make check
|
|
||||||
|
|
||||||
III. Using scripts/makefile*
|
|
||||||
|
|
||||||
Instead, you can use one of the custom-built makefiles in the
|
|
||||||
"scripts" directory
|
|
||||||
|
|
||||||
cp scripts/pnglibconf.h.prebuilt pnglibconf.h
|
|
||||||
cp scripts/makefile.system makefile
|
|
||||||
make test
|
|
||||||
make install
|
|
||||||
|
|
||||||
The files that are presently available in the scripts directory
|
|
||||||
are listed and described in scripts/README.txt.
|
|
||||||
|
|
||||||
Or you can use one of the "projects" in the "projects" directory.
|
|
||||||
|
|
||||||
Before installing libpng, you must first install zlib, if it
|
|
||||||
is not already on your system. zlib can usually be found
|
|
||||||
wherever you got libpng; otherwise go to http://zlib.net. You can place
|
|
||||||
zlib in in the same directory as libpng or in another directory.
|
|
||||||
|
|
||||||
If your system already has a preinstalled zlib 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.
|
|
||||||
|
|
||||||
If you wish to test with a particular zlib that is not first in the
|
|
||||||
standard library search path, put ZLIBLIB, ZLIBINC, CPPFLAGS, LDFLAGS,
|
|
||||||
and LD_LIBRARY_PATH in your environment before running "make test"
|
|
||||||
or "make distcheck":
|
|
||||||
|
|
||||||
ZLIBLIB=/path/to/lib export ZLIBLIB
|
|
||||||
ZLIBINC=/path/to/include export ZLIBINC
|
|
||||||
CPPFLAGS="-I$ZLIBINC" export CPPFLAGS
|
|
||||||
LDFLAGS="-L$ZLIBLIB" export LDFLAGS
|
|
||||||
LD_LIBRARY_PATH="$ZLIBLIB:$LD_LIBRARY_PATH" export LD_LIBRARY_PATH
|
|
||||||
|
|
||||||
If you are using one of the makefile scripts, put ZLIBLIB and ZLIBINC
|
|
||||||
in your environment and type "make ZLIBLIB=$ZLIBLIB ZLIBINC=$ZLIBINC test".
|
|
||||||
|
|
||||||
IV. Using cmake
|
|
||||||
|
|
||||||
If you want to use "cmake" (see www.cmake.org), type
|
|
||||||
|
|
||||||
cmake . -DCMAKE_INSTALL_PREFIX=/path
|
|
||||||
make
|
|
||||||
make install
|
|
||||||
|
|
||||||
As when using the simple configure method described above, "/path" points to
|
|
||||||
the installation directory where you want to put the libpng "lib", "include",
|
|
||||||
and "bin" subdirectories.
|
|
||||||
|
|
||||||
V. Directory structure
|
|
||||||
|
|
||||||
You can rename the directories that you downloaded (they
|
You can rename the directories that you downloaded (they
|
||||||
might be called "libpng-x.y.z" or "libpngNN" and "zlib-1.2.8"
|
might be called "libpng-1.0.13" or "lpng109" and "zlib-1.1.3"
|
||||||
or "zlib128") so that you have directories called "zlib" and "libpng".
|
or "zlib113") so that you have directories called "zlib" and "libpng".
|
||||||
|
|
||||||
Your directory structure should look like this:
|
Your directory structure should look like this:
|
||||||
|
|
||||||
@@ -116,273 +19,128 @@ Your directory structure should look like this:
|
|||||||
libpng (this directory)
|
libpng (this directory)
|
||||||
INSTALL (this file)
|
INSTALL (this file)
|
||||||
README
|
README
|
||||||
*.h, *.c => libpng source files
|
*.h
|
||||||
CMakeLists.txt => "cmake" script
|
*.c
|
||||||
configuration files:
|
|
||||||
configure.ac, configure, Makefile.am, Makefile.in,
|
|
||||||
autogen.sh, config.guess, ltmain.sh, missing, libpng.pc.in,
|
|
||||||
libpng-config.in, aclocal.m4, config.h.in, config.sub,
|
|
||||||
depcomp, install-sh, mkinstalldirs, test-pngtest.sh
|
|
||||||
contrib
|
contrib
|
||||||
gregbook, libtests, pngminim, pngminus, pngsuite, visupng
|
gregbook
|
||||||
|
msvctest
|
||||||
|
pngminus
|
||||||
|
pngsuite
|
||||||
|
visupng
|
||||||
projects
|
projects
|
||||||
cbuilder5, owatcom, visualc71, vstudio, xcode
|
beos
|
||||||
|
borland
|
||||||
|
msvc
|
||||||
|
netware.txt
|
||||||
|
wince.txt
|
||||||
scripts
|
scripts
|
||||||
makefile.*
|
makefile.*
|
||||||
*.def (module definition files)
|
|
||||||
etc.
|
|
||||||
pngtest.png
|
pngtest.png
|
||||||
etc.
|
etc.
|
||||||
zlib
|
zlib
|
||||||
README, *.h, *.c contrib, etc.
|
README
|
||||||
|
*.h
|
||||||
|
*.c
|
||||||
|
contrib
|
||||||
|
etc.
|
||||||
|
|
||||||
If the line endings in the files look funny, you may wish to get the other
|
If the line endings in the files look funny, you may wish to get the other
|
||||||
distribution of libpng. It is available in both tar.gz (UNIX style line
|
distribution of libpng. It is available in both tar.gz (UNIX style line
|
||||||
endings) and zip (DOS style line endings) formats.
|
endings) and zip (DOS style line endings) formats.
|
||||||
|
|
||||||
VI. Building with project files
|
If you are building libpng with MSVC, you can enter the libpng\msvc directory
|
||||||
|
and follow the instructions in msvc\README.txt.
|
||||||
|
|
||||||
If you are building libpng with MSVC, you can enter the
|
You can build libpng for WindowsCE by entering the downloading and installing
|
||||||
libpng projects\visualc71 or vstudio directory and follow the instructions
|
the libpng\wince directory as instructed in the projects\wince.txt file, and
|
||||||
in README.txt.
|
then following the instructions in the README* files. Similarly, you can
|
||||||
|
build libpng for Netware as instructed in projects\netware.txt.
|
||||||
|
|
||||||
Otherwise enter the zlib directory and follow the instructions in zlib/README,
|
Else enter the zlib directory and follow the instructions in zlib/README,
|
||||||
then come back here and run "configure" or choose the appropriate
|
then come back here and choose the appropriate makefile.sys in the scripts
|
||||||
makefile.sys in the scripts directory.
|
directory.
|
||||||
|
|
||||||
VII. Building with makefiles
|
The files that are presently available in the scripts directory
|
||||||
|
include
|
||||||
|
|
||||||
|
makefile.std => Generic UNIX makefile (cc, creates static libpng.a)
|
||||||
|
makefile.linux => Linux/ELF makefile (gcc, creates libpng10.so.0.1.0.13)
|
||||||
|
makefile.gcmmx => Linux/ELF makefile (gcc, creates libpng10.so.0.1.0.13,
|
||||||
|
uses assembler code tuned for Intel MMX platform)
|
||||||
|
makefile.gcc => Generic makefile (gcc, creates static libpng.a)
|
||||||
|
makefile.knr => Archaic UNIX Makefile that converts files with
|
||||||
|
ansi2knr (Requires ansi2knr.c from
|
||||||
|
ftp://ftp.cs.wisc.edu/ghost)
|
||||||
|
makefile.aix => AIX makefile
|
||||||
|
makefile.cygwin => Cygwin/gcc makefile
|
||||||
|
makefile.darwin => Darwin makefile
|
||||||
|
makefile.dec => DEC Alpha UNIX makefile
|
||||||
|
makefile.hpgcc => HPUX makefile using gcc
|
||||||
|
makefile.hpux => HPUX (10.20 and 11.00) makefile
|
||||||
|
makefile.ibmc => IBM C/C++ version 3.x for Win32 and OS/2 (static)
|
||||||
|
makefile.intel => Intel C/C++ version 4.0 and later
|
||||||
|
libpng.icc => Project file for IBM VisualAge/C++ version 4.0 or later
|
||||||
|
makefile.macosx => MACOS X Makefile
|
||||||
|
makefile.netbsd => NetBSD/cc makefile, uses PNGGCCRD
|
||||||
|
makefile.openbsd => OpenBSD makefile
|
||||||
|
makefile.sgi => Silicon Graphics IRIX makefile (cc, creates static lib)
|
||||||
|
makefile.sggcc => Silicon Graphics (gcc, creates libpng10.so.0.1.0.13)
|
||||||
|
makefile.sunos => Sun makefile
|
||||||
|
makefile.solaris => Solaris 2.X makefile (gcc, creates libpng10.so.0.1.0.13)
|
||||||
|
makefile.so9 => Solaris 9 makefile (gcc, creates libpng10.so.0.1.0.13)
|
||||||
|
makefile.32sunu => Sun Ultra 32-bit makefile
|
||||||
|
makefile.64sunu => Sun Ultra 64-bit makefile
|
||||||
|
makefile.sco => For SCO OSr5 ELF and Unixware 7 with Native cc
|
||||||
|
makefile.mips => MIPS makefile
|
||||||
|
makefile.acorn => Acorn makefile
|
||||||
|
makefile.amiga => Amiga makefile
|
||||||
|
smakefile.ppc => AMIGA smakefile for SAS C V6.58/7.00 PPC compiler
|
||||||
|
(Requires SCOPTIONS, copied from scripts/SCOPTIONS.ppc)
|
||||||
|
makefile.atari => Atari makefile
|
||||||
|
makefile.beos => BEOS makefile for X86
|
||||||
|
makefile.bor => Borland makefile (uses bcc)
|
||||||
|
makefile.bc32 => 32-bit Borland C++ (all modules compiled in C mode)
|
||||||
|
makefile.bd32 => To make a png32bd.dll with Borland C++ 4.5
|
||||||
|
makefile.tc3 => Turbo C 3.0 makefile
|
||||||
|
makefile.dj2 => DJGPP 2 makefile
|
||||||
|
makefile.msc => Microsoft C makefile
|
||||||
|
makefile.vcawin32 => makefile for Microsoft Visual C++ 5.0 and later (uses
|
||||||
|
assembler code tuned for Intel MMX platform)
|
||||||
|
makefile.vcwin32 => makefile for Microsoft Visual C++ 4.0 and later (does
|
||||||
|
not use assembler code)
|
||||||
|
makefile.os2 => OS/2 Makefile (gcc and emx, requires pngos2.def)
|
||||||
|
pngos2.def => OS/2 module definition file used by makefile.os2
|
||||||
|
makefile.watcom => Watcom 10a+ Makefile, 32-bit flat memory model
|
||||||
|
makevms.com => VMS build script
|
||||||
|
descrip.mms => VMS makefile for MMS or MMK
|
||||||
|
pngdef.pas => Defines for a png32bd.dll with Borland C++ 4.5
|
||||||
|
SCOPTIONS.ppc => Used with smakefile.ppc
|
||||||
|
|
||||||
Copy the file (or files) that you need from the
|
Copy the file (or files) that you need from the
|
||||||
scripts directory into this directory, for example
|
scripts directory into this directory, for example
|
||||||
|
|
||||||
MSDOS example: copy scripts\makefile.msc makefile
|
MSDOS example: copy scripts\makefile.msc makefile
|
||||||
copy scripts\pnglibconf.h.prebuilt pnglibconf.h
|
UNIX example: cp scripts/makefile.std makefile
|
||||||
UNIX example: cp scripts/makefile.std makefile
|
|
||||||
cp scripts/pnglibconf.h.prebuilt pnglibconf.h
|
|
||||||
|
|
||||||
Read the makefile to see if you need to change any source or
|
Read the makefile to see if you need to change any source or
|
||||||
target directories to match your preferences.
|
target directories to match your preferences.
|
||||||
|
|
||||||
Then read pnglibconf.dfa to see if you want to make any configuration
|
Then read pngconf.h to see if you want to make any configuration
|
||||||
changes.
|
changes.
|
||||||
|
|
||||||
Then just run "make" which will create the libpng library in
|
Then just run "make test" which will create the libpng library in
|
||||||
this directory and "make test" which will run a quick test that reads
|
this directory and run a quick test that reads the "pngtest.png"
|
||||||
the "pngtest.png" file and writes a "pngout.png" file that should be
|
file and writes a "pngout.png" file that should be identical to it.
|
||||||
identical to it. Look for "9782 zero samples" in the output of the
|
Look for "9782 zero samples" in the output of the test. For more
|
||||||
test. For more confidence, you can run another test by typing
|
confidence, you can run another test by typing "pngtest pngnow.png"
|
||||||
"pngtest pngnow.png" and looking for "289 zero samples" in the output.
|
and looking for "289 zero samples" in the output. Also, you can
|
||||||
Also, you can run "pngtest -m contrib/pngsuite/*.png" and compare
|
run "pngtest -m *.png" in the "contrib/pngsuite" directory and compare
|
||||||
your output with the result shown in contrib/pngsuite/README.
|
your output with the result shown in contrib/pngsuite/README.
|
||||||
|
|
||||||
Most of the makefiles will allow you to run "make install" to
|
Most of the makefiles will allow you to run "make install" to
|
||||||
put the library in its final resting place (if you want 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).
|
do that, run "make install" in the zlib directory first if necessary).
|
||||||
Some also allow you to run "make test-installed" after you have
|
|
||||||
run "make install".
|
|
||||||
|
|
||||||
VIII. Configuring libpng for 16-bit platforms
|
|
||||||
|
|
||||||
You will want to look into zconf.h to tell zlib (and thus libpng) that
|
|
||||||
it cannot allocate more than 64K at a time. Even if you can, the memory
|
|
||||||
won't be accessible. So limit zlib and libpng to 64K by defining MAXSEG_64K.
|
|
||||||
|
|
||||||
IX. Configuring for DOS
|
|
||||||
|
|
||||||
For DOS users who only have access to the lower 640K, you will
|
|
||||||
have to limit zlib's memory usage via a png_set_compression_mem_level()
|
|
||||||
call. See zlib.h or zconf.h in the zlib library for more information.
|
|
||||||
|
|
||||||
X. Configuring for Medium Model
|
|
||||||
|
|
||||||
Libpng's support for medium model has been tested on most of the popular
|
|
||||||
compilers. Make sure MAXSEG_64K gets defined, USE_FAR_KEYWORD gets
|
|
||||||
defined, and FAR gets defined to far in pngconf.h, and you should be
|
|
||||||
all set. Everything in the library (except for zlib's structure) is
|
|
||||||
expecting far data. You must use the typedefs with the p or pp on
|
|
||||||
the end for pointers (or at least look at them and be careful). Make
|
|
||||||
note that the rows of data are defined as png_bytepp, which is
|
|
||||||
an "unsigned char far * far *".
|
|
||||||
|
|
||||||
XI. Omitted
|
|
||||||
|
|
||||||
XII. Configuring for compiler xxx:
|
|
||||||
|
|
||||||
All includes for libpng are in pngconf.h. If you need to add, change
|
|
||||||
or delete an include, this is the place to do it.
|
|
||||||
The includes that are not needed outside libpng are placed in pngpriv.h,
|
|
||||||
which is only used by the routines inside libpng itself.
|
|
||||||
The files in libpng proper only include pngpriv.h and png.h, which
|
|
||||||
in turn includes pngconf.h and, as of libpng-1.5.0, pnglibconf.h.
|
|
||||||
As of libpng-1.5.0, pngpriv.h also includes three other private header
|
|
||||||
files, pngstruct.h, pnginfo.h, and pngdebug.h, which contain material
|
|
||||||
that previously appeared in the public headers.
|
|
||||||
|
|
||||||
XIII. Removing unwanted object code
|
|
||||||
|
|
||||||
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
|
|
||||||
never going to use a capability, you can change the #define to #undef
|
|
||||||
before recompiling libpng and save yourself code and data space, or
|
|
||||||
you can turn off individual capabilities with defines that begin with
|
|
||||||
PNG_NO_.
|
|
||||||
|
|
||||||
In libpng-1.5.0 and later, the #define's are in pnglibconf.h instead.
|
|
||||||
|
|
||||||
You can also turn all of the transforms and ancillary chunk capabilities
|
|
||||||
off en masse with compiler directives that define
|
|
||||||
PNG_NO_READ[or WRITE]_TRANSFORMS, or PNG_NO_READ[or WRITE]_ANCILLARY_CHUNKS,
|
|
||||||
or all four, along with directives to turn on any of the capabilities that
|
|
||||||
you do want. The PNG_NO_READ[or WRITE]_TRANSFORMS directives disable the
|
|
||||||
extra transformations but still leave the library fully capable of reading
|
|
||||||
and writing PNG files with all known public chunks. Use of the
|
|
||||||
PNG_NO_READ[or WRITE]_ANCILLARY_CHUNKS directive 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_NO_PROGRESSIVE_READ (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
|
|
||||||
linker should only grab the files it needs. However, if you want to
|
|
||||||
make sure, or if you are building a stand alone library, all the
|
|
||||||
reading files start with "pngr" and all the writing files start with "pngw".
|
|
||||||
The files that don't match either (like png.c, pngtrans.c, etc.)
|
|
||||||
are used for both reading and writing, and always need to be included.
|
|
||||||
The progressive reader is in pngpread.c
|
|
||||||
|
|
||||||
If you are creating or distributing a dynamically linked library (a .so
|
|
||||||
or DLL file), you should not remove or disable any parts of the library,
|
|
||||||
as this will cause applications linked with different versions of the
|
|
||||||
library to fail if they call functions not available in your library.
|
|
||||||
The size of the library itself should not be an issue, because only
|
|
||||||
those sections that are actually used will be loaded into memory.
|
|
||||||
|
|
||||||
XIV. Changes to the build and configuration of libpng in libpng-1.5.x
|
|
||||||
|
|
||||||
Details of internal changes to the library code can be found in the CHANGES
|
|
||||||
file and in the GIT repository logs. These will be of no concern to the vast
|
|
||||||
majority of library users or builders; however, the few who configure libpng
|
|
||||||
to a non-default feature set may need to change how this is done.
|
|
||||||
|
|
||||||
There should be no need for library builders to alter build scripts if
|
|
||||||
these use the distributed build support - configure or the makefiles -
|
|
||||||
however, users of the makefiles may care to update their build scripts
|
|
||||||
to build pnglibconf.h where the corresponding makefile does not do so.
|
|
||||||
|
|
||||||
Building libpng with a non-default configuration has changed completely.
|
|
||||||
The old method using pngusr.h should still work correctly even though the
|
|
||||||
way pngusr.h is used in the build has been changed; however, library
|
|
||||||
builders will probably want to examine the changes to take advantage of
|
|
||||||
new capabilities and to simplify their build system.
|
|
||||||
|
|
||||||
A. Specific changes to library configuration capabilities
|
|
||||||
|
|
||||||
The exact mechanism used to control attributes of API functions has
|
|
||||||
changed. A single set of operating system independent macro definitions
|
|
||||||
is used and operating system specific directives are defined in
|
|
||||||
pnglibconf.h
|
|
||||||
|
|
||||||
As part of this the mechanism used to choose procedure call standards on
|
|
||||||
those systems that allow a choice has been changed. At present this only
|
|
||||||
affects certain Microsoft (DOS, Windows) and IBM (OS/2) operating systems
|
|
||||||
running on Intel processors. As before, PNGAPI is defined where required
|
|
||||||
to control the exported API functions; however, two new macros, PNGCBAPI
|
|
||||||
and PNGCAPI, are used instead for callback functions (PNGCBAPI) and
|
|
||||||
(PNGCAPI) for functions that must match a C library prototype (currently
|
|
||||||
only png_longjmp_ptr, which must match the C longjmp function.) The new
|
|
||||||
approach is documented in pngconf.h
|
|
||||||
|
|
||||||
Despite these changes, libpng 1.5.0 only supports the native C function
|
|
||||||
calling standard on those platforms tested so far (__cdecl on Microsoft
|
|
||||||
Windows). This is because the support requirements for alternative
|
|
||||||
calling conventions seem to no longer exist. Developers who find it
|
|
||||||
necessary to set PNG_API_RULE to 1 should advise the mailing list
|
|
||||||
(png-mng-implement) of this and library builders who use Openwatcom and
|
|
||||||
therefore set PNG_API_RULE to 2 should also contact the mailing list.
|
|
||||||
|
|
||||||
B. Changes to the configuration mechanism
|
|
||||||
|
|
||||||
Prior to libpng-1.5.0 library builders who needed to configure libpng
|
|
||||||
had either to modify the exported pngconf.h header file to add system
|
|
||||||
specific configuration or had to write feature selection macros into
|
|
||||||
pngusr.h and cause this to be included into pngconf.h by defining
|
|
||||||
PNG_USER_CONFIG. The latter mechanism had the disadvantage that an
|
|
||||||
application built without PNG_USER_CONFIG defined would see the
|
|
||||||
unmodified, default, libpng API and thus would probably fail to link.
|
|
||||||
|
|
||||||
These mechanisms still work in the configure build and in any makefile
|
|
||||||
build that builds pnglibconf.h, although the feature selection macros
|
|
||||||
have changed somewhat as described above. In 1.5.0, however, pngusr.h is
|
|
||||||
processed only once, at the time the exported header file pnglibconf.h is
|
|
||||||
built. pngconf.h no longer includes pngusr.h; therefore, pngusr.h is ignored
|
|
||||||
after the build of pnglibconf.h and it is never included in an application
|
|
||||||
build.
|
|
||||||
|
|
||||||
The formerly used alternative of adding a list of feature macros to the
|
|
||||||
CPPFLAGS setting in the build also still works; however, the macros will be
|
|
||||||
copied to pnglibconf.h and this may produce macro redefinition warnings
|
|
||||||
when the individual C files are compiled.
|
|
||||||
|
|
||||||
All configuration now only works if pnglibconf.h is built from
|
|
||||||
scripts/pnglibconf.dfa. This requires the program awk. Brian Kernighan
|
|
||||||
(the original author of awk) maintains C source code of that awk and this
|
|
||||||
and all known later implementations (often called by subtly different
|
|
||||||
names - nawk and gawk for example) are adequate to build pnglibconf.h.
|
|
||||||
The Sun Microsystems (now Oracle) program 'awk' is an earlier version
|
|
||||||
and does not work; this may also apply to other systems that have a
|
|
||||||
functioning awk called 'nawk'.
|
|
||||||
|
|
||||||
Configuration options are now documented in scripts/pnglibconf.dfa. This
|
|
||||||
file also includes dependency information that ensures a configuration is
|
|
||||||
consistent; that is, if a feature is switched off, dependent features are
|
|
||||||
also switched off. As a recommended alternative to using feature macros in
|
|
||||||
pngusr.h a system builder may also define equivalent options in pngusr.dfa
|
|
||||||
(or, indeed, any file) and add that to the configuration by setting
|
|
||||||
DFA_XTRA to the file name. The makefiles in contrib/pngminim illustrate
|
|
||||||
how to do this, and also illustrate a case where pngusr.h is still required.
|
|
||||||
|
|
||||||
After you have built libpng, the definitions that were recorded in
|
|
||||||
pnglibconf.h are available to your application (pnglibconf.h is included
|
|
||||||
in png.h and gets installed alongside png.h and pngconf.h in your
|
|
||||||
$PREFIX/include directory). Do not edit pnglibconf.h after you have built
|
|
||||||
libpng, because than the settings would not accurately reflect the settings
|
|
||||||
that were used to build libpng.
|
|
||||||
|
|
||||||
XV. Configuring libpng for multiprocessing
|
|
||||||
|
|
||||||
Libpng uses setjmp()/longjmp() for error handling. Unfortunately setjmp()
|
|
||||||
is known to be not thread-safe on some platforms and we don't know of
|
|
||||||
any platform where it is guaranteed to be thread-safe. Therefore, if
|
|
||||||
your application is going to be using multiple threads, you should
|
|
||||||
configure libpng with PNG_NO_SETJMP in your pngusr.dfa file, with
|
|
||||||
-DPNG_NO_SETJMP on your compile line, or with
|
|
||||||
|
|
||||||
#undef PNG_SETJMP_SUPPORTED
|
|
||||||
|
|
||||||
in your pnglibconf.h or pngusr.h.
|
|
||||||
|
|
||||||
XVI. Other sources of information about libpng:
|
|
||||||
|
|
||||||
Further information can be found in the README and libpng-manual.txt
|
|
||||||
files, in the individual makefiles, in png.h, and the manual pages
|
|
||||||
libpng.3 and png.5.
|
|
||||||
|
|
||||||
Using the ./configure script -- 16 December 2002.
|
|
||||||
=================================================
|
|
||||||
|
|
||||||
The ./configure script should work compatibly with what scripts/makefile.*
|
|
||||||
did, however there are some options you might need to add to configure
|
|
||||||
explicitly, which previously was done semi-automatically (if you didn't edit
|
|
||||||
scripts/makefile.* yourself, that is)
|
|
||||||
|
|
||||||
CFLAGS="-Wall -O -funroll-loops \
|
|
||||||
-malign-loops=2 -malign-functions=2" ./configure --prefix=/usr/include \
|
|
||||||
--with-pkgconfigdir=/usr/lib/pkgconfig --includedir=/usr/include
|
|
||||||
|
|
||||||
You can alternatively specify --includedir=/usr/include, /usr/local/include,
|
|
||||||
/usr/include/libpng15, or whatever.
|
|
||||||
|
|
||||||
If you find that the configure script is out-of-date or is not supporting
|
|
||||||
your platform properly, try running autogen.sh to regenerate "configure",
|
|
||||||
"Makefile.in", and the other configuration files. Then try configure again.
|
|
||||||
|
|
||||||
|
Further information can be found in the README and libpng.txt
|
||||||
|
files, in the individual makefiles, in png.h, in the README files in
|
||||||
|
subdirectories of the LIB directory, and the manual pages libpng.3 and png.5.
|
||||||
|
|||||||
9
KNOWNBUG
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
Known bugs in libpng version 1.0.13
|
||||||
|
|
||||||
|
1. April 22, 2001: pnggccrd.c has been reported to crash on NetBSD when
|
||||||
|
reading interlaced PNG files, when assembler code is enabled.
|
||||||
|
|
||||||
|
STATUS: Under investigation. The change to pnggccrd.c in libpng-1.2.1
|
||||||
|
fixed a problem under FreeBSD but not the problem with NetBSD.
|
||||||
|
|
||||||
51
LICENSE
@@ -8,18 +8,13 @@ COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
|
|||||||
If you modify libpng you may insert additional notices immediately following
|
If you modify libpng you may insert additional notices immediately following
|
||||||
this sentence.
|
this sentence.
|
||||||
|
|
||||||
This code is released under the libpng license.
|
libpng versions 1.0.7, July 1, 2000, through 1.0.13, April 15, 2002, are
|
||||||
|
Copyright (c) 2000-2002 Glenn Randers-Pehrson
|
||||||
libpng versions 1.0.7, July 1, 2000, through 1.5.26, December 17, 2015, are
|
and are distributed according to the same disclaimer and license as libpng-1.0.6
|
||||||
Copyright (c) 2000-2002, 2004, 2006-2015 Glenn Randers-Pehrson, are
|
with the following individuals added to the list of Contributing Authors
|
||||||
derived from libpng-1.0.6, and are distributed according to the same
|
|
||||||
disclaimer and license as libpng-1.0.6 with the following individuals
|
|
||||||
added to the list of Contributing Authors:
|
|
||||||
|
|
||||||
Simon-Pierre Cadieux
|
Simon-Pierre Cadieux
|
||||||
Eric S. Raymond
|
Eric S. Raymond
|
||||||
Mans Rullgard
|
|
||||||
Cosmin Truta
|
|
||||||
Gilles Vollant
|
Gilles Vollant
|
||||||
|
|
||||||
and with the following additions to the disclaimer:
|
and with the following additions to the disclaimer:
|
||||||
@@ -32,20 +27,18 @@ and with the following additions to the disclaimer:
|
|||||||
the user.
|
the user.
|
||||||
|
|
||||||
libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
|
libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
|
||||||
Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
|
Copyright (c) 1998, 1999 Glenn Randers-Pehrson, and are
|
||||||
libpng-0.96, and are distributed according to the same disclaimer and
|
distributed according to the same disclaimer and license as libpng-0.96,
|
||||||
license as libpng-0.96, with the following individuals added to the list
|
with the following individuals added to the list of Contributing Authors:
|
||||||
of Contributing Authors:
|
|
||||||
|
|
||||||
Tom Lane
|
Tom Lane
|
||||||
Glenn Randers-Pehrson
|
Glenn Randers-Pehrson
|
||||||
Willem van Schaik
|
Willem van Schaik
|
||||||
|
|
||||||
libpng versions 0.89, June 1996, through 0.96, May 1997, are
|
libpng versions 0.89, June 1996, through 0.96, May 1997, are
|
||||||
Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88,
|
Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
and are distributed according to the same disclaimer and license as
|
Distributed according to the same disclaimer and license as libpng-0.88,
|
||||||
libpng-0.88, with the following individuals added to the list of
|
with the following individuals added to the list of Contributing Authors:
|
||||||
Contributing Authors:
|
|
||||||
|
|
||||||
John Bowler
|
John Bowler
|
||||||
Kevin Bracey
|
Kevin Bracey
|
||||||
@@ -55,7 +48,7 @@ Contributing Authors:
|
|||||||
Tom Tanner
|
Tom Tanner
|
||||||
|
|
||||||
libpng versions 0.5, May 1995, through 0.88, January 1996, are
|
libpng versions 0.5, May 1995, through 0.88, January 1996, are
|
||||||
Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
|
Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
|
||||||
For the purposes of this copyright and license, "Contributing Authors"
|
For the purposes of this copyright and license, "Contributing Authors"
|
||||||
is defined as the following set of individuals:
|
is defined as the following set of individuals:
|
||||||
@@ -78,13 +71,13 @@ Permission is hereby granted to use, copy, modify, and distribute this
|
|||||||
source code, or portions hereof, for any purpose, without fee, subject
|
source code, or portions hereof, for any purpose, without fee, subject
|
||||||
to the following restrictions:
|
to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this source code must not be misrepresented.
|
1. The origin of this source code must not be misrepresented.
|
||||||
|
|
||||||
2. Altered versions must be plainly marked as such and must not
|
2. Altered versions must be plainly marked as such and must not
|
||||||
be misrepresented as being the original source.
|
be misrepresented as being the original source.
|
||||||
|
|
||||||
3. This Copyright notice may not be removed or altered from any
|
3. This Copyright notice may not be removed or altered from any
|
||||||
source or altered source distribution.
|
source or altered source distribution.
|
||||||
|
|
||||||
The Contributing Authors and Group 42, Inc. specifically permit, without
|
The Contributing Authors and Group 42, Inc. specifically permit, without
|
||||||
fee, and encourage the use of this source code as a component to
|
fee, and encourage the use of this source code as a component to
|
||||||
@@ -92,20 +85,18 @@ supporting the PNG file format in commercial products. If you use this
|
|||||||
source code in a product, acknowledgment is not required but would be
|
source code in a product, acknowledgment is not required but would be
|
||||||
appreciated.
|
appreciated.
|
||||||
|
|
||||||
END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.
|
|
||||||
|
|
||||||
A "png_get_copyright" function is available, for convenient use in "about"
|
A "png_get_copyright" function is available, for convenient use in "about"
|
||||||
boxes and the like:
|
boxes and the like:
|
||||||
|
|
||||||
printf("%s", png_get_copyright(NULL));
|
printf("%s",png_get_copyright(NULL));
|
||||||
|
|
||||||
Also, the PNG logo (in PNG format, of course) is supplied in the
|
Also, the PNG logo (in PNG format, of course) is supplied in the
|
||||||
files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
|
files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
|
||||||
|
|
||||||
Libpng is OSI Certified Open Source Software. OSI Certified Open Source is
|
Libpng is OSI Certified Open Source Software. OSI Certified Open Source is a
|
||||||
a certification mark of the Open Source Initiative. OSI has not addressed
|
certification mark of the Open Source Initiative.
|
||||||
the additional disclaimers inserted at version 1.0.7.
|
|
||||||
|
|
||||||
Glenn Randers-Pehrson
|
Glenn Randers-Pehrson
|
||||||
glennrp at users.sourceforge.net
|
randeg@alum.rpi.edu
|
||||||
December 17, 2015
|
April 15, 2002
|
||||||
|
|||||||
270
Makefile.am
@@ -1,270 +0,0 @@
|
|||||||
# Makefile.am:
|
|
||||||
# Source file for Makefile.in (and hence Makefile)
|
|
||||||
#
|
|
||||||
|
|
||||||
PNGLIB_BASENAME= libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@
|
|
||||||
|
|
||||||
# libpng does not follow GNU file name conventions
|
|
||||||
|
|
||||||
# "color-tests" requires automake 1.11.1 or later. Enable it if you like,
|
|
||||||
# to get red "FAIL" and green "PASS" notations during tests.
|
|
||||||
# AUTOMAKE_OPTIONS = foreign color-tests
|
|
||||||
AUTOMAKE_OPTIONS = foreign
|
|
||||||
|
|
||||||
# test programs - run on make check, make distcheck
|
|
||||||
TESTS_ENVIRONMENT= srcdir=$(srcdir)
|
|
||||||
check_PROGRAMS= pngtest
|
|
||||||
pngtest_SOURCES = pngtest.c
|
|
||||||
pngtest_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
|
|
||||||
TESTS = test-pngtest.sh
|
|
||||||
|
|
||||||
# Only do the following if the contrib directory is present.
|
|
||||||
check_PROGRAMS+= pngvalid
|
|
||||||
pngvalid_SOURCES = contrib/libtests/pngvalid.c
|
|
||||||
pngvalid_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
|
|
||||||
TESTS += test-pngvalid-simple.sh test-pngvalid-full.sh
|
|
||||||
|
|
||||||
# man pages
|
|
||||||
dist_man_MANS= libpng.3 libpngpf.3 png.5
|
|
||||||
|
|
||||||
# generate the -config scripts if required
|
|
||||||
binconfigs= libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@-config
|
|
||||||
EXTRA_SCRIPTS= libpng-config libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@-config
|
|
||||||
bin_SCRIPTS= @binconfigs@
|
|
||||||
|
|
||||||
# rules to build libpng, only build the old library on request
|
|
||||||
lib_LTLIBRARIES=libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
|
|
||||||
# EXTRA_LTLIBRARIES= libpng.la
|
|
||||||
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES = png.c pngerror.c\
|
|
||||||
pngget.c pngmem.c pngpread.c pngread.c pngrio.c pngrtran.c pngrutil.c\
|
|
||||||
pngset.c pngtrans.c pngwio.c pngwrite.c pngwtran.c pngwutil.c\
|
|
||||||
png.h pngconf.h pngdebug.h pnginfo.h pngpriv.h pngstruct.h pngusr.dfa
|
|
||||||
|
|
||||||
if PNG_ARM_NEON
|
|
||||||
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES += arm/arm_init.c\
|
|
||||||
arm/filter_neon.S
|
|
||||||
endif
|
|
||||||
|
|
||||||
nodist_libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES = pnglibconf.h
|
|
||||||
|
|
||||||
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_CPPFLAGS = @LIBPNG_DEFINES@
|
|
||||||
|
|
||||||
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LDFLAGS = -no-undefined -export-dynamic \
|
|
||||||
-version-number @PNGLIB_MAJOR@@PNGLIB_MINOR@:@PNGLIB_RELEASE@:0
|
|
||||||
|
|
||||||
if HAVE_LD_VERSION_SCRIPT
|
|
||||||
# Versioned symbols and restricted exports
|
|
||||||
if HAVE_SOLARIS_LD
|
|
||||||
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LDFLAGS += -Wl,-M -Wl,libpng.vers
|
|
||||||
else
|
|
||||||
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LDFLAGS += -Wl,--version-script=libpng.vers
|
|
||||||
endif
|
|
||||||
|
|
||||||
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_DEPENDENCIES = libpng.vers
|
|
||||||
else
|
|
||||||
# Only restricted exports when possible
|
|
||||||
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LDFLAGS += -export-symbols libpng.sym
|
|
||||||
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_DEPENDENCIES = libpng.sym
|
|
||||||
endif
|
|
||||||
|
|
||||||
#distribute headers in /usr/include/libpng/*
|
|
||||||
pkgincludedir= $(includedir)/$(PNGLIB_BASENAME)
|
|
||||||
pkginclude_HEADERS= png.h pngconf.h
|
|
||||||
nodist_pkginclude_HEADERS= pnglibconf.h
|
|
||||||
|
|
||||||
# pkg-config stuff, note that libpng.pc is always required in order
|
|
||||||
# to get the correct library
|
|
||||||
pkgconfigdir = @pkgconfigdir@
|
|
||||||
pkgconfig_DATA = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.pc
|
|
||||||
|
|
||||||
#extra source distribution files.
|
|
||||||
EXTRA_DIST= \
|
|
||||||
ANNOUNCE CHANGES INSTALL LICENSE README TODO \
|
|
||||||
pngtest.png pngbar.png pngnow.png pngbar.jpg autogen.sh \
|
|
||||||
${srcdir}/contrib ${srcdir}/projects ${srcdir}/scripts \
|
|
||||||
$(TESTS) \
|
|
||||||
CMakeLists.txt example.c libpng-manual.txt
|
|
||||||
|
|
||||||
SCRIPT_CLEANFILES=scripts/*.out scripts/*.chk
|
|
||||||
|
|
||||||
CLEANFILES= dfn.c dfn?.out *.out.? scripts/*.out.? pngout.png \
|
|
||||||
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.pc \
|
|
||||||
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@-config libpng.vers libpng.sym \
|
|
||||||
check.new pnglibconf.h symbols.new pngtest-log.txt \
|
|
||||||
pnglibconf.c pnglibconf.out pnglibconf.pre \
|
|
||||||
$(SCRIPT_CLEANFILES)
|
|
||||||
|
|
||||||
MAINTAINERCLEANFILES = Makefile.in aclocal.m4 config.guess config.h.in \
|
|
||||||
config.sub configure depcomp install-sh ltmain.sh missing
|
|
||||||
|
|
||||||
# DFNCPP is normally just CPP - the C preprocessor - but on Solaris and maybe
|
|
||||||
# other operating systems (NeXT?) the C preprocessor selected by configure
|
|
||||||
# checks input tokens for validity - effectively it performs part of the ANSI-C
|
|
||||||
# parsing - and therefore fails with the .df files. configure.ac has special
|
|
||||||
# checks for this and sets DFNCPP appropriately.
|
|
||||||
DFNCPP = @DFNCPP@
|
|
||||||
|
|
||||||
SUFFIXES = .chk .out
|
|
||||||
|
|
||||||
$(PNGLIB_BASENAME).pc: libpng.pc
|
|
||||||
cp libpng.pc $@
|
|
||||||
|
|
||||||
$(PNGLIB_BASENAME)-config: libpng-config
|
|
||||||
cp libpng-config $@
|
|
||||||
|
|
||||||
scripts/sym.out scripts/vers.out: png.h pngconf.h pnglibconf.h
|
|
||||||
scripts/symbols.out: png.h pngconf.h $(srcdir)/scripts/pnglibconf.h.prebuilt
|
|
||||||
|
|
||||||
libpng.sym: scripts/sym.out
|
|
||||||
rm -f $@
|
|
||||||
cp $? $@
|
|
||||||
libpng.vers: scripts/vers.out
|
|
||||||
rm -f $@
|
|
||||||
cp $? $@
|
|
||||||
pnglibconf.h: pnglibconf.out
|
|
||||||
rm -f $@
|
|
||||||
cp $? $@
|
|
||||||
$(srcdir)/scripts/pnglibconf.h.prebuilt:
|
|
||||||
@echo "Attempting to build $@" >&2
|
|
||||||
@echo "This is a machine generated file, but if you want to make" >&2
|
|
||||||
@echo "a new one simply make 'scripts/pnglibconf.out' and copy that" >&2
|
|
||||||
@exit 1
|
|
||||||
|
|
||||||
# The following is necessary to ensure that the local pnglibconf.h is used, not
|
|
||||||
# an installed one (this can happen immediately after on a clean system if
|
|
||||||
# 'make test' is the first thing the user does.)
|
|
||||||
contrib/libtests/pngvalid.o pngtest.o: pnglibconf.h
|
|
||||||
|
|
||||||
# We must use -DPNG_NO_USE_READ_MACROS here even when the library may actually
|
|
||||||
# be built with PNG_USE_READ_MACROS; this prevents the read macros from
|
|
||||||
# interfering with the symbol file format.
|
|
||||||
SYMBOL_CFLAGS = -DPNGLIB_LIBNAME='PNG@PNGLIB_MAJOR@@PNGLIB_MINOR@_0'\
|
|
||||||
-DPNGLIB_VERSION='@PNGLIB_VERSION@'\
|
|
||||||
-DSYMBOL_PREFIX='$(SYMBOL_PREFIX)'\
|
|
||||||
-DPNG_NO_USE_READ_MACROS -DPNG_BUILDING_SYMBOL_TABLE
|
|
||||||
|
|
||||||
.c.out:
|
|
||||||
rm -f $@ $*.tf[12]
|
|
||||||
test -d scripts || mkdir scripts || test -d scripts
|
|
||||||
$(DFNCPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)\
|
|
||||||
$(CPPFLAGS) $(SYMBOL_CFLAGS) $< > $*.tf1
|
|
||||||
$(AWK) -f "${srcdir}/scripts/dfn.awk" out="$*.tf2" $*.tf1 1>&2
|
|
||||||
rm -f $*.tf1
|
|
||||||
mv $*.tf2 $@
|
|
||||||
|
|
||||||
# The .c file for pnglibconf.h is machine generated
|
|
||||||
pnglibconf.c: scripts/pnglibconf.dfa scripts/options.awk pngconf.h pngusr.dfa $(DFA_XTRA)
|
|
||||||
|
|
||||||
rm -f $@ pnglibconf.pre $@.?
|
|
||||||
$(AWK) -f ${srcdir}/scripts/options.awk out="pnglibconf.pre"\
|
|
||||||
version=search ${srcdir}/pngconf.h ${srcdir}/scripts/pnglibconf.dfa\
|
|
||||||
${srcdir}/pngusr.dfa $(DFA_XTRA) 1>&2
|
|
||||||
$(AWK) -f ${srcdir}/scripts/options.awk out="$@.1" pnglibconf.pre 1>&2
|
|
||||||
mv $@.1 $@
|
|
||||||
|
|
||||||
# Symbol checks (.def and .out files should match)
|
|
||||||
scripts/symbols.chk: scripts/checksym.awk scripts/symbols.def scripts/symbols.out
|
|
||||||
.out.chk:
|
|
||||||
rm -f $@ symbols.new
|
|
||||||
$(AWK) -f ${srcdir}/scripts/checksym.awk ${srcdir}/scripts/${*F}.def\
|
|
||||||
$< >&2
|
|
||||||
mv symbols.new $@
|
|
||||||
|
|
||||||
# used on demand to regenerate the standard header, CPPFLAGS should
|
|
||||||
# be empty - no non-standard defines
|
|
||||||
scripts/pnglibconf.c: scripts/pnglibconf.dfa scripts/options.awk pngconf.h
|
|
||||||
rm -f $@ dfn?.out
|
|
||||||
test -z "$(CPPFLAGS)"
|
|
||||||
echo "com @PNGLIB_VERSION@ STANDARD API DEFINITION" |\
|
|
||||||
$(AWK) -f ${srcdir}/scripts/options.awk out=dfn1.out logunsupported=1\
|
|
||||||
version=search ${srcdir}/pngconf.h -\
|
|
||||||
${srcdir}/scripts/pnglibconf.dfa 1>&2
|
|
||||||
$(AWK) -f ${srcdir}/scripts/options.awk out=dfn2.out dfn1.out 1>&2
|
|
||||||
rm dfn1.out
|
|
||||||
mv dfn2.out $@
|
|
||||||
|
|
||||||
$(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_OBJECTS): png.h pngconf.h \
|
|
||||||
pnglibconf.h pngpriv.h pngdebug.h pnginfo.h pngstruct.h
|
|
||||||
|
|
||||||
test: check-am
|
|
||||||
|
|
||||||
# Extra checks
|
|
||||||
check: scripts/symbols.chk
|
|
||||||
|
|
||||||
# Don't distribute the generated script files
|
|
||||||
dist-hook:
|
|
||||||
cd '$(top_distdir)'; rm -f $(SCRIPT_CLEANFILES)
|
|
||||||
|
|
||||||
# Make links between installed files with release-specific names and the generic
|
|
||||||
# file names. If this install rule is run the generic names will be deleted and
|
|
||||||
# recreated - this has obvious issues for systems with multiple installations.
|
|
||||||
|
|
||||||
install-header-links:
|
|
||||||
@set -ex; cd '$(DESTDIR)$(includedir)'; for f in $(HEADERS); do \
|
|
||||||
rm -f "$$f"; $(LN_S) "$(PNGLIB_BASENAME)/$$f" "$$f"; done
|
|
||||||
|
|
||||||
uninstall-header-links:
|
|
||||||
cd '$(DESTDIR)$(includedir)'; rm -f $(HEADERS)
|
|
||||||
|
|
||||||
install-libpng-pc:
|
|
||||||
@set -ex; cd '$(DESTDIR)$(pkgconfigdir)'; rm -f libpng.pc; \
|
|
||||||
$(LN_S) '$(PNGLIB_BASENAME).pc' libpng.pc
|
|
||||||
|
|
||||||
uninstall-libpng-pc:
|
|
||||||
rm -f '$(DESTDIR)$(pkgconfigdir)/libpng.pc'
|
|
||||||
|
|
||||||
# EXT_LIST is a list of the possibly library directory extensions, this exists
|
|
||||||
# because we can't find a good way of discovering the file extensions that are
|
|
||||||
# actually installed on a given system, so instead we check for every extension
|
|
||||||
# we have seen.
|
|
||||||
|
|
||||||
EXT_LIST = a dll.a so so.@PNGLIB_MAJOR@@PNGLIB_MINOR@.@PNGLIB_RELEASE@ la sl dylib
|
|
||||||
|
|
||||||
install-library-links:
|
|
||||||
@set -x; cd '$(DESTDIR)$(libdir)';\
|
|
||||||
for ext in $(EXT_LIST); do\
|
|
||||||
rm -f "libpng.$$ext";\
|
|
||||||
if test -f "$(PNGLIB_BASENAME).$$ext"; then\
|
|
||||||
$(LN_S) "$(PNGLIB_BASENAME).$$ext" "libpng.$$ext" || exit 1;\
|
|
||||||
fi;\
|
|
||||||
done
|
|
||||||
|
|
||||||
uninstall-library-links:
|
|
||||||
@set -x; cd '$(DESTDIR)$(libdir)'; for ext in $(EXT_LIST); do\
|
|
||||||
rm -f "libpng.$$ext"; done
|
|
||||||
|
|
||||||
install-libpng-config:
|
|
||||||
@set -ex; cd '$(DESTDIR)$(bindir)'; rm -f libpng-config; \
|
|
||||||
$(LN_S) '$(PNGLIB_BASENAME)-config' libpng-config
|
|
||||||
|
|
||||||
uninstall-libpng-config:
|
|
||||||
rm -f '$(DESTDIR)$(bindir)/libpng-config'
|
|
||||||
|
|
||||||
if DO_INSTALL_LINKS
|
|
||||||
# If --enable-unversioned-links is specified the header and lib file links
|
|
||||||
# will be automatically made on a 'make install':
|
|
||||||
|
|
||||||
install-data-hook: install-header-links
|
|
||||||
uninstall-hook: uninstall-header-links
|
|
||||||
install-exec-hook: install-library-links
|
|
||||||
uninstall-hook: uninstall-library-links
|
|
||||||
endif
|
|
||||||
|
|
||||||
if DO_INSTALL_LIBPNG_PC
|
|
||||||
# Likewise, --install-pc causes libpng.pc to be constructed:
|
|
||||||
|
|
||||||
install-data-hook: install-libpng-pc
|
|
||||||
uninstall-hook: uninstall-libpng-pc
|
|
||||||
endif
|
|
||||||
|
|
||||||
if DO_INSTALL_LIBPNG_CONFIG
|
|
||||||
# And --install-config:
|
|
||||||
|
|
||||||
install-exec-hook: install-libpng-config
|
|
||||||
uninstall-hook: uninstall-libpng-config
|
|
||||||
endif
|
|
||||||
|
|
||||||
# The following addition ensures that 'make all' always builds the test programs
|
|
||||||
# too. It used to, but some change either in libpng or configure stopped this
|
|
||||||
# working.
|
|
||||||
all-am: $(check_PROGRAMS)
|
|
||||||
1690
Makefile.in
194
README
@@ -1,11 +1,11 @@
|
|||||||
README for libpng version 1.5.26 - December 17, 2015 (shared library 15.0)
|
README for libpng 1.0.13 - April 15, 2002 (shared library 2.1)
|
||||||
See the note about version numbers near the top of png.h
|
See the note about version numbers near the top of png.h
|
||||||
|
|
||||||
See INSTALL for instructions on how to install libpng.
|
See INSTALL for instructions on how to install libpng.
|
||||||
|
|
||||||
Libpng comes in several distribution formats. Get libpng-*.tar.gz or
|
Libpng comes in two distribution formats. Get libpng-*.tar.gz if you
|
||||||
libpng-*.tar.xz or if you want UNIX-style line endings in the text files,
|
want UNIX-style line endings in the text files, or lpng*.zip if you want
|
||||||
or lpng*.7z or lpng*.zip if you want DOS-style line endings.
|
DOS-style line endings.
|
||||||
|
|
||||||
Version 0.89 was the first official release of libpng. Don't let the
|
Version 0.89 was 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
|
fact that it's the first release fool you. The libpng library has been in
|
||||||
@@ -23,25 +23,18 @@ earlier versions if you are using a shared library. The type of the
|
|||||||
png_uint_32, which will affect shared-library applications that use
|
png_uint_32, which will affect shared-library applications that use
|
||||||
this function.
|
this function.
|
||||||
|
|
||||||
To avoid problems with changes to the internals of the png info_struct,
|
To avoid problems with changes to the internals of png_info_struct,
|
||||||
new APIs have been made available in 0.95 to avoid direct application
|
new APIs have been made available in 0.95 to avoid direct application
|
||||||
access to info_ptr. These functions are the png_set_<chunk> and
|
access to info_ptr. These functions are the png_set_<chunk> and
|
||||||
png_get_<chunk> functions. These functions should be used when
|
png_get_<chunk> functions. These functions should be used when
|
||||||
accessing/storing the info_struct data, rather than manipulating it
|
accessing/storing the info_struct data, rather than manipulating it
|
||||||
directly, to avoid such problems in the future.
|
directly, to avoid such problems in the future.
|
||||||
|
|
||||||
It is important to note that the APIs did not make current programs
|
It is important to note that the APIs do not make current programs
|
||||||
that access the info struct directly incompatible with the new
|
that access the info struct directly incompatible with the new
|
||||||
library, through libpng-1.2.x. In libpng-1.4.x, which was meant to
|
library. However, it is strongly suggested that new programs use
|
||||||
be a transitional release, members of the png_struct and the
|
the new APIs (as shown in example.c and pngtest.c), and older programs
|
||||||
info_struct can still be accessed, but the compiler will issue a
|
be converted to the new format, to facilitate upgrades in the future.
|
||||||
warning about deprecated usage. Since libpng-1.5.0, direct access
|
|
||||||
to these structs is not allowed, and the definitions of the structs
|
|
||||||
reside in private pngstruct.h and pnginfo.h header files that are not
|
|
||||||
accessible to applications. It is strongly suggested that new
|
|
||||||
programs use the new APIs (as shown in example.c and pngtest.c), and
|
|
||||||
older programs be converted to the new format, to facilitate upgrades
|
|
||||||
in the future.
|
|
||||||
****
|
****
|
||||||
|
|
||||||
Additions since 0.90 include the ability to compile libpng as a
|
Additions since 0.90 include the ability to compile libpng as a
|
||||||
@@ -61,11 +54,11 @@ to set different actions based on whether the CRC error occurred in a
|
|||||||
critical or an ancillary chunk.
|
critical or an ancillary chunk.
|
||||||
|
|
||||||
The changes made to the library, and bugs fixed are based on discussions
|
The changes made to the library, and bugs fixed are based on discussions
|
||||||
on the PNG-implement mailing list and not on material submitted
|
on the PNG implementation mailing list <png-implement@ccrc.wustl.edu>
|
||||||
privately to Guy, Andreas, or Glenn. They will forward any good
|
and not on material submitted privately to Guy, Andreas, or Glenn. They will
|
||||||
suggestions to the list.
|
forward any good suggestions to the list.
|
||||||
|
|
||||||
For a detailed description on using libpng, read libpng-manual.txt. For
|
For a detailed description on using libpng, read libpng.txt. For
|
||||||
examples of libpng in a program, see example.c and pngtest.c. For usage
|
examples of libpng in a program, see example.c and pngtest.c. For usage
|
||||||
information and restrictions (what little they are) on libpng, see
|
information and restrictions (what little they are) on libpng, see
|
||||||
png.h. For a description on using zlib (the compression library used by
|
png.h. For a description on using zlib (the compression library used by
|
||||||
@@ -84,21 +77,18 @@ compression library that is useful for more things than just PNG files.
|
|||||||
You can use zlib as a drop-in replacement for fread() and fwrite() if
|
You can use zlib as a drop-in replacement for fread() and fwrite() if
|
||||||
you are so inclined.
|
you are so inclined.
|
||||||
|
|
||||||
zlib should be available at the same place that libpng is, or at zlib.net.
|
zlib should be available at the same place that libpng is.
|
||||||
|
If not, it should be at ftp.uu.net in /graphics/png
|
||||||
|
Eventually, it will be at ftp.uu.net in /pub/archiving/zip/zlib
|
||||||
|
|
||||||
You may also want a copy of the PNG specification. It is available
|
You may also want a copy of the PNG specification. It is available
|
||||||
as an RFC, a W3C Recommendation, and an ISO/IEC Standard. You can find
|
as an RFC and a W3C Recommendation. Failing
|
||||||
these at http://www.libpng.org/pub/png/documents/
|
these resources you can try ftp.uu.net in the /graphics/png directory.
|
||||||
|
|
||||||
This code is currently being archived at libpng.sf.net in the
|
This code is currently being archived at ftp.uu.net in the
|
||||||
[DOWNLOAD] area, and at ftp://ftp.simplesystems.org. If you can't find it
|
/graphics/png directory, and on CompuServe, Lib 20 (PNG SUPPORT)
|
||||||
in any of those places, e-mail me, and I'll help you find it.
|
at GO GRAPHSUP. If you can't find it in any of those places,
|
||||||
|
e-mail me, and I'll help you find it.
|
||||||
I am not a lawyer, but I believe that the Export Control Classification
|
|
||||||
Number (ECCN) for libpng is EAR99, which means not subject to export
|
|
||||||
controls or International Traffic in Arms Regulations (ITAR) because it
|
|
||||||
is open source, publicly available software, that does not contain any
|
|
||||||
encryption software. See the EAR, paragraphs 734.3(b)(3) and 734.7(b).
|
|
||||||
|
|
||||||
If you have any code changes, requests, problems, etc., please e-mail
|
If you have any code changes, requests, problems, etc., please e-mail
|
||||||
them to me. Also, I'd appreciate any make files or project files,
|
them to me. Also, I'd appreciate any make files or project files,
|
||||||
@@ -112,32 +102,30 @@ Finally, if you get any warning messages when compiling libpng
|
|||||||
fix. Please mention "libpng" somewhere in the subject line. Thanks.
|
fix. Please mention "libpng" somewhere in the subject line. Thanks.
|
||||||
|
|
||||||
This release was created and will be supported by myself (of course
|
This release was created and will be supported by myself (of course
|
||||||
based in a large way on Guy's and Andreas' earlier work), and the PNG
|
based in a large way on Guy's and Andreas' earlier work), and the PNG group.
|
||||||
development group.
|
|
||||||
|
|
||||||
Send comments/corrections/commendations to png-mng-implement at
|
randeg@alum.rpi.edu
|
||||||
lists.sourceforge.net (subscription required; visit
|
png-implement@ccrc.wustl.edu
|
||||||
https://lists.sourceforge.net/lists/listinfo/png-mng-implement
|
|
||||||
to subscribe) or to glennrp at users.sourceforge.net
|
|
||||||
|
|
||||||
You can't reach Guy, the original libpng author, at the addresses
|
You can't reach Guy, the original libpng author, at the addresses
|
||||||
given in previous versions of this document. He and Andreas will
|
given in previous versions of this document. He and Andreas will read mail
|
||||||
read mail addressed to the png-implement list, however.
|
addressed to the png-implement list, however.
|
||||||
|
|
||||||
Please do not send general questions about PNG. Send them to
|
Please do not send general questions about PNG. Send them to
|
||||||
png-mng-misc at lists.sf.net (subscription required; visit
|
the address in the specification (png-group@w3.org). At the same
|
||||||
https://lists.sourceforge.net/lists/listinfo/png-mng-misc to
|
time, please do not send libpng questions to that address, send them to me
|
||||||
subscribe). If you have a question about something
|
or to png-implement@ccrc.wustl.edu. I'll
|
||||||
|
get them in the end anyway. If you have a question about something
|
||||||
in the PNG specification that is related to using libpng, send it
|
in the PNG specification that is related to using libpng, send it
|
||||||
to me. Send me any questions that start with "I was using libpng,
|
to me. Send me any questions that start with "I was using libpng,
|
||||||
and ...". If in doubt, send questions to me. I'll bounce them
|
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 twenty 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 immediately,
|
gladly listen. Even if your suggestion is not used for version
|
||||||
it may be used later.
|
1.0, it may be used later.
|
||||||
|
|
||||||
Files in this distribution:
|
Files in this distribution:
|
||||||
|
|
||||||
@@ -149,17 +137,14 @@ Files in this distribution:
|
|||||||
TODO => Things not implemented in the current library
|
TODO => Things not implemented in the current library
|
||||||
Y2KINFO => Statement of Y2K compliance
|
Y2KINFO => Statement of Y2K compliance
|
||||||
example.c => Example code for using libpng functions
|
example.c => Example code for using libpng functions
|
||||||
libpng.3 => manual page for libpng (includes libpng-manual.txt)
|
libpng.3 => manual page for libpng (includes libpng.txt)
|
||||||
libpng-manual.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
|
||||||
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 (public)
|
png.h => Library function and interface declarations
|
||||||
pngpriv.h => Library function and interface declarations (private)
|
pngconf.h => System specific library configuration
|
||||||
pngconf.h => System specific library configuration (public)
|
pngasmrd.h => Header file for assembler-coded functions
|
||||||
pngstruct.h => png_struct declaration (private)
|
|
||||||
pnginfo.h => png_info struct declaration (private)
|
|
||||||
pngdebug.h => debugging macros (private)
|
|
||||||
pngerror.c => Error/warning message I/O functions
|
pngerror.c => Error/warning message I/O functions
|
||||||
pngget.c => Functions for retrieving info from struct
|
pngget.c => Functions for retrieving info from struct
|
||||||
pngmem.c => Memory handling functions
|
pngmem.c => Memory handling functions
|
||||||
@@ -178,36 +163,95 @@ 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
|
||||||
arm => Contains optimized code for the ARM platform
|
|
||||||
contrib => Contributions
|
contrib => Contributions
|
||||||
gregbook => source code for PNG reading and writing, from
|
gregbook => source code for PNG reading and writing, from
|
||||||
Greg Roelofs' "PNG: The Definitive Guide",
|
Greg Roelofs' "PNG: The Definitive Guide",
|
||||||
O'Reilly, 1999
|
O'Reilly, 1999
|
||||||
libtests => Test programs
|
msvctest => Builds and runs pngtest using a MSVC workspace
|
||||||
pngminim => Minimal decoder, encoder, and progressive decoder
|
pngminus => Simple pnm2png and png2pnm programs
|
||||||
programs demonstrating use of pngusr.dfa
|
pngsuite => Test images
|
||||||
pngminus => Simple pnm2png and png2pnm programs
|
visupng => Contains a MSVC workspace for VisualPng
|
||||||
pngsuite => Test images
|
projects => Contains project files and workspaces for building DLL
|
||||||
visupng => Contains a MSVC workspace for VisualPng
|
beos => Contains a Beos workspace for building libpng
|
||||||
projects => Contains project files and workspaces for
|
borland => Contains a Borland workspace for building libpng
|
||||||
building a DLL
|
and zlib
|
||||||
owatcom => Contains a WATCOM project for building libpng
|
msvc => Contains a Microsoft Visual C++ (MSVC) workspace
|
||||||
visualc71 => Contains a Microsoft Visual C++ (MSVC)
|
for building libpng and zlib
|
||||||
workspace for building libpng and zlib
|
netware.txt => Contains instructions for downloading a set of
|
||||||
vstudio => Contains a Microsoft Visual C++ (MSVC)
|
project files for building libpng and zlib on
|
||||||
workspace for building libpng and zlib
|
Netware.
|
||||||
|
wince.txt => Contains instructions for downloading a Microsoft
|
||||||
|
Visual C++ (Windows CD Toolkit) workspace for
|
||||||
|
building libpng and zlib on WindowsCE
|
||||||
scripts => Directory containing scripts for building libpng:
|
scripts => Directory containing scripts for building libpng:
|
||||||
(see scripts/README.txt for the list of scripts)
|
descrip.mms => VMS makefile for MMS or MMK
|
||||||
|
makefile.std => Generic UNIX makefile (cc, creates static libpng.a)
|
||||||
|
makefile.linux => Linux/ELF makefile
|
||||||
|
(gcc, creates libpng10.so.0.1.0.13)
|
||||||
|
makefile.gcmmx => Linux/ELF makefile (gcc, creates
|
||||||
|
libpng10.so.0.1.0.13, uses assembler code
|
||||||
|
tuned for Intel MMX platform)
|
||||||
|
makefile.gcc => Generic makefile (gcc, creates static libpng.a)
|
||||||
|
makefile.knr => Archaic UNIX Makefile that converts files with
|
||||||
|
ansi2knr (Requires ansi2knr.c from
|
||||||
|
ftp://ftp.cs.wisc.edu/ghost)
|
||||||
|
makefile.aix => AIX makefile
|
||||||
|
makefile.cygwin => Cygwin/gcc makefile
|
||||||
|
makefile.darwin => Darwin makefile
|
||||||
|
makefile.dec => DEC Alpha UNIX makefile
|
||||||
|
makefile.hpgcc => HPUX makefile using gcc
|
||||||
|
makefile.hpux => HPUX (10.20 and 11.00) makefile
|
||||||
|
makefile.ibmc => IBM C/C++ version 3.x for Win32 and OS/2 (static)
|
||||||
|
makefile.intel => Intel C/C++ version 4.0 and later
|
||||||
|
libpng.icc => Project file, IBM VisualAge/C++ 4.0 or later
|
||||||
|
makefile.macosx => MACOS X Makefile
|
||||||
|
makefile.netbsd => NetBSD/cc makefile, uses PNGGCCRD
|
||||||
|
makefile.openbsd => OpenBSD makefile
|
||||||
|
makefile.sgi => Silicon Graphics IRIX (cc, creates static lib)
|
||||||
|
makefile.sggcc => Silicon Graphics (gcc, creates libpng10.so.0.1.0.13)
|
||||||
|
makefile.sunos => Sun makefile
|
||||||
|
makefile.solaris => Solaris 2.X makefile
|
||||||
|
(gcc, creates libpng10.so.0.1.0.13)
|
||||||
|
makefile.so9 => Solaris 9 makefile
|
||||||
|
(gcc, creates libpng10.so.0.1.0.13)
|
||||||
|
makefile.32sunu => Sun Ultra 32-bit makefile
|
||||||
|
makefile.64sunu => Sun Ultra 64-bit makefile
|
||||||
|
makefile.sco => For SCO OSr5 ELF and Unixware 7 with Native cc
|
||||||
|
makefile.mips => MIPS makefile
|
||||||
|
makefile.acorn => Acorn makefile
|
||||||
|
makefile.amiga => Amiga makefile
|
||||||
|
smakefile.ppc => AMIGA smakefile for SAS C V6.58/7.00 PPC
|
||||||
|
compiler (Requires SCOPTIONS, copied from
|
||||||
|
scripts/SCOPTIONS.ppc)
|
||||||
|
makefile.atari => Atari makefile
|
||||||
|
makefile.beos => BEOS makefile for X86
|
||||||
|
makefile.bor => Borland makefile (uses bcc)
|
||||||
|
makefile.bc32 => 32-bit Borland C++ (all modules compiled in C mode)
|
||||||
|
makefile.bd32 => To make a png32bd.dll with Borland C++ 4.5
|
||||||
|
makefile.tc3 => Turbo C 3.0 makefile
|
||||||
|
makefile.dj2 => DJGPP 2 makefile
|
||||||
|
makefile.msc => Microsoft C makefile
|
||||||
|
makefile.vcawin32 => makefile for Microsoft Visual C++ 5.0 and
|
||||||
|
later (uses assembler code tuned for Intel MMX
|
||||||
|
platform)
|
||||||
|
makefile.vcwin32 => makefile for Microsoft Visual C++ 4.0 and
|
||||||
|
later (does not use assembler code)
|
||||||
|
makefile.os2 => OS/2 Makefile (gcc and emx, requires pngos2.def)
|
||||||
|
pngos2.def => OS/2 module definition file used by makefile.os2
|
||||||
|
makefile.watcom => Watcom 10a+ Makefile, 32-bit flat memory model
|
||||||
|
makevms.com => VMS build script
|
||||||
|
pngdef.pas => Defines for a png32bd.dll with Borland C++ 4.5
|
||||||
|
SCOPTIONS.ppc => Used with smakefile.ppc
|
||||||
|
|
||||||
Good luck, and happy coding.
|
Good luck, and happy coding.
|
||||||
|
|
||||||
-Glenn Randers-Pehrson (current maintainer, since 1998)
|
-Glenn Randers-Pehrson
|
||||||
Internet: glennrp at users.sourceforge.net
|
Internet: randeg@alum.rpi.edu
|
||||||
|
|
||||||
-Andreas Eric Dilger (former maintainer, 1996-1997)
|
-Andreas Eric Dilger
|
||||||
Internet: adilger at enel.ucalgary.ca
|
Internet: adilger@enel.ucalgary.ca
|
||||||
Web: http://www-mddsp.enel.ucalgary.ca/People/adilger/
|
Web: http://www-mddsp.enel.ucalgary.ca/People/adilger/
|
||||||
|
|
||||||
-Guy Eric Schalnat (original author and former maintainer, 1995-1996)
|
-Guy Eric Schalnat
|
||||||
(formerly of Group 42, Inc)
|
(formerly of Group 42, Inc)
|
||||||
Internet: gschal at infinet.com
|
Internet: gschal@infinet.com
|
||||||
|
|||||||
14
TODO
@@ -1,12 +1,12 @@
|
|||||||
/*
|
|
||||||
TODO - list of things to do for libpng:
|
TODO - list of things to do for libpng:
|
||||||
|
|
||||||
Final bug fixes.
|
Final bug fixes.
|
||||||
|
Improve API by hiding the png_struct and png_info structs.
|
||||||
|
Finish work on the no-floating-point version (including gamma compensation)
|
||||||
Better C++ wrapper/full C++ implementation?
|
Better C++ wrapper/full C++ implementation?
|
||||||
Fix problem with C++ and EXTERN "C".
|
Fix problem with C++ and EXTERN "C".
|
||||||
cHRM transformation.
|
cHRM transformation.
|
||||||
Remove setjmp/longjmp usage in favor of returning error codes.
|
Improve setjmp/longjmp usage or remove it in favor of returning error codes.
|
||||||
Palette creation.
|
|
||||||
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.
|
||||||
@@ -17,12 +17,8 @@ Better filter selection
|
|||||||
(counting huffman bits/precompression? filter inertia? filter costs?).
|
(counting huffman bits/precompression? filter inertia? filter costs?).
|
||||||
Histogram creation.
|
Histogram creation.
|
||||||
Text conversion between different code pages (Latin-1 -> Mac and DOS).
|
Text conversion between different code pages (Latin-1 -> Mac and DOS).
|
||||||
Avoid building gamma tables whenever possible.
|
Should we always malloc 2^bit_depth PLTE/tRNS/hIST entries for safety?
|
||||||
|
Build gamma tables using fixed point (and do away with floating point entirely).
|
||||||
Use greater precision when changing to linear gamma for compositing against
|
Use greater precision when changing to linear gamma for compositing against
|
||||||
background and doing rgb-to-gray transformation.
|
background and doing rgb-to-gray transformation.
|
||||||
Investigate pre-incremented loop counters and other loop constructions.
|
Investigate pre-incremented loop counters and other loop constructions.
|
||||||
Add interpolated method of handling interlacing.
|
|
||||||
Switch to the simpler zlib (zlib/libpng) license if legally possible.
|
|
||||||
Extend pngvalid.c to validate more of the libpng transformations.
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|||||||
55
Y2KINFO
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
Y2K compliance in libpng:
|
||||||
|
=========================
|
||||||
|
|
||||||
|
April 15, 2002
|
||||||
|
|
||||||
|
Since the PNG Development group is an ad-hoc body, we can't make
|
||||||
|
an official declaration.
|
||||||
|
|
||||||
|
This is your unofficial assurance that libpng from version 0.71 and
|
||||||
|
upward through 1.0.13 are Y2K compliant. It is my belief that earlier
|
||||||
|
versions were also Y2K compliant.
|
||||||
|
|
||||||
|
Libpng only has three year fields. One is a 2-byte unsigned integer
|
||||||
|
that will hold years up to 65535. The other two hold the date in text
|
||||||
|
format, and will hold years up to 9999.
|
||||||
|
|
||||||
|
The integer is
|
||||||
|
"png_uint_16 year" in png_time_struct.
|
||||||
|
|
||||||
|
The strings are
|
||||||
|
"png_charp time_buffer" in png_struct and
|
||||||
|
"near_time_buffer", which is a local character string in png.c.
|
||||||
|
|
||||||
|
There are seven time-related functions:
|
||||||
|
|
||||||
|
png_convert_to_rfc_1123() in png.c
|
||||||
|
(formerly png_convert_to_rfc_1152() in error)
|
||||||
|
png_convert_from_struct_tm() in pngwrite.c, called in pngwrite.c
|
||||||
|
png_convert_from_time_t() in pngwrite.c
|
||||||
|
png_get_tIME() in pngget.c
|
||||||
|
png_handle_tIME() in pngrutil.c, called in pngread.c
|
||||||
|
png_set_tIME() in pngset.c
|
||||||
|
png_write_tIME() in pngwutil.c, called in pngwrite.c
|
||||||
|
|
||||||
|
All appear to handle dates properly in a Y2K environment. The
|
||||||
|
png_convert_from_time_t() function calls gmtime() to convert from system
|
||||||
|
clock time, which returns (year - 1900), which we properly convert to
|
||||||
|
the full 4-digit year. There is a possibility that applications using
|
||||||
|
libpng are not passing 4-digit years into the png_convert_to_rfc_1123()
|
||||||
|
function, or that they are incorrectly passing only a 2-digit year
|
||||||
|
instead of "year - 1900" into the png_convert_from_struct_tm() function,
|
||||||
|
but this is not under our control. The libpng documentation has always
|
||||||
|
stated that it works with 4-digit years, and the APIs have been
|
||||||
|
documented as such.
|
||||||
|
|
||||||
|
The tIME chunk itself is also Y2K compliant. It uses a 2-byte unsigned
|
||||||
|
integer to hold the year, and can hold years as large as 65535.
|
||||||
|
|
||||||
|
zlib, upon which libpng depends, is also Y2K compliant. It contains
|
||||||
|
no date-related code.
|
||||||
|
|
||||||
|
|
||||||
|
Glenn Randers-Pehrson
|
||||||
|
libpng maintainer
|
||||||
|
PNG Development Group
|
||||||
10237
aclocal.m4
vendored
232
arm/arm_init.c
@@ -1,232 +0,0 @@
|
|||||||
|
|
||||||
/* arm_init.c - NEON optimised filter functions
|
|
||||||
*
|
|
||||||
* Copyright (c) 2013 Glenn Randers-Pehrson
|
|
||||||
* Written by Mans Rullgard, 2011.
|
|
||||||
* Last changed in libpng 1.6.8 [December 19, 2013]
|
|
||||||
*
|
|
||||||
* This code is released under the libpng license.
|
|
||||||
* For conditions of distribution and use, see the disclaimer
|
|
||||||
* and license in png.h
|
|
||||||
*/
|
|
||||||
/* Below, after checking __linux__, various non-C90 POSIX 1003.1 functions are
|
|
||||||
* called.
|
|
||||||
*/
|
|
||||||
#define _POSIX_SOURCE 1
|
|
||||||
|
|
||||||
#include "../pngpriv.h"
|
|
||||||
|
|
||||||
#ifdef PNG_READ_SUPPORTED
|
|
||||||
#if PNG_ARM_NEON_OPT > 0
|
|
||||||
#ifdef PNG_ARM_NEON_CHECK_SUPPORTED /* Do run-time checks */
|
|
||||||
#include <signal.h> /* for sig_atomic_t */
|
|
||||||
|
|
||||||
#ifdef __ANDROID__
|
|
||||||
/* Linux provides access to information about CPU capabilites via
|
|
||||||
* /proc/self/auxv, however Android blocks this while still claiming to be
|
|
||||||
* Linux. The Andoid NDK, however, provides appropriate support.
|
|
||||||
*
|
|
||||||
* Documentation: http://www.kandroid.org/ndk/docs/CPU-ARM-NEON.html
|
|
||||||
*/
|
|
||||||
#include <cpu-features.h>
|
|
||||||
|
|
||||||
static int
|
|
||||||
png_have_neon(png_structp png_ptr)
|
|
||||||
{
|
|
||||||
/* This is a whole lot easier than the mess below, however it is probably
|
|
||||||
* implemented as below, therefore it is better to cache the result (these
|
|
||||||
* function calls may be slow!)
|
|
||||||
*/
|
|
||||||
PNG_UNUSED(png_ptr)
|
|
||||||
return android_getCpuFamily() == ANDROID_CPU_FAMILY_ARM &&
|
|
||||||
(android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON) != 0;
|
|
||||||
}
|
|
||||||
#elif defined(__linux__)
|
|
||||||
/* The generic __linux__ implementation requires reading /proc/self/auxv and
|
|
||||||
* looking at each element for one that records NEON capabilities.
|
|
||||||
*/
|
|
||||||
#include <unistd.h> /* for POSIX 1003.1 */
|
|
||||||
#include <errno.h> /* for EINTR */
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <elf.h>
|
|
||||||
#include <asm/hwcap.h>
|
|
||||||
|
|
||||||
/* A read call may be interrupted, in which case it returns -1 and sets errno to
|
|
||||||
* EINTR if nothing was done, otherwise (if something was done) a partial read
|
|
||||||
* may result.
|
|
||||||
*/
|
|
||||||
static size_t
|
|
||||||
safe_read(png_structp png_ptr, int fd, void *buffer_in, size_t nbytes)
|
|
||||||
{
|
|
||||||
size_t ntotal = 0;
|
|
||||||
char *buffer = png_voidcast(char*, buffer_in);
|
|
||||||
|
|
||||||
while (nbytes > 0)
|
|
||||||
{
|
|
||||||
unsigned int nread;
|
|
||||||
int iread;
|
|
||||||
|
|
||||||
/* Passing nread > INT_MAX to read is implementation defined in POSIX
|
|
||||||
* 1003.1, therefore despite the unsigned argument portable code must
|
|
||||||
* limit the value to INT_MAX!
|
|
||||||
*/
|
|
||||||
if (nbytes > INT_MAX)
|
|
||||||
nread = INT_MAX;
|
|
||||||
|
|
||||||
else
|
|
||||||
nread = (unsigned int)/*SAFE*/nbytes;
|
|
||||||
|
|
||||||
iread = read(fd, buffer, nread);
|
|
||||||
|
|
||||||
if (iread == -1)
|
|
||||||
{
|
|
||||||
/* This is the devil in the details, a read can terminate early with 0
|
|
||||||
* bytes read because of EINTR, yet it still returns -1 otherwise end
|
|
||||||
* of file cannot be distinguished.
|
|
||||||
*/
|
|
||||||
if (errno != EINTR)
|
|
||||||
{
|
|
||||||
png_warning(png_ptr, "/proc read failed");
|
|
||||||
return 0; /* I.e., a permanent failure */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (iread < 0)
|
|
||||||
{
|
|
||||||
/* Not a valid 'read' result: */
|
|
||||||
png_warning(png_ptr, "OS /proc read bug");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (iread > 0)
|
|
||||||
{
|
|
||||||
/* Continue reading until a permanent failure, or EOF */
|
|
||||||
buffer += iread;
|
|
||||||
nbytes -= (unsigned int)/*SAFE*/iread;
|
|
||||||
ntotal += (unsigned int)/*SAFE*/iread;
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
return ntotal;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ntotal; /* nbytes == 0 */
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
png_have_neon(png_structp png_ptr)
|
|
||||||
{
|
|
||||||
int fd = open("/proc/self/auxv", O_RDONLY);
|
|
||||||
Elf32_auxv_t aux;
|
|
||||||
|
|
||||||
/* Failsafe: failure to open means no NEON */
|
|
||||||
if (fd == -1)
|
|
||||||
{
|
|
||||||
png_warning(png_ptr, "/proc/self/auxv open failed");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (safe_read(png_ptr, fd, &aux, sizeof aux) == sizeof aux)
|
|
||||||
{
|
|
||||||
if (aux.a_type == AT_HWCAP && (aux.a_un.a_val & HWCAP_NEON) != 0)
|
|
||||||
{
|
|
||||||
close(fd);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
close(fd);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
/* We don't know how to do a run-time check on this system */
|
|
||||||
# error "no support for run-time ARM NEON checks"
|
|
||||||
#endif /* OS checks */
|
|
||||||
#endif /* PNG_ARM_NEON_CHECK_SUPPORTED */
|
|
||||||
|
|
||||||
#ifndef PNG_ALIGNED_MEMORY_SUPPORTED
|
|
||||||
# error "ALIGNED_MEMORY is required; set: -DPNG_ALIGNED_MEMORY_SUPPORTED"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void
|
|
||||||
png_init_filter_functions_neon(png_structp pp, unsigned int bpp)
|
|
||||||
{
|
|
||||||
/* The switch statement is compiled in for ARM_NEON_API, the call to
|
|
||||||
* png_have_neon is compiled in for ARM_NEON_CHECK. If both are defined
|
|
||||||
* the check is only performed if the API has not set the NEON option on
|
|
||||||
* or off explicitly. In this case the check controls what happens.
|
|
||||||
*
|
|
||||||
* If the CHECK is not compiled in and the option is UNSET the behavior prior
|
|
||||||
* to 1.6.7 was to use the NEON code - this was a bug caused by having the
|
|
||||||
* wrong order of the 'ON' and 'default' cases. UNSET now defaults to OFF,
|
|
||||||
* as documented in png.h
|
|
||||||
*/
|
|
||||||
#ifdef PNG_ARM_NEON_API_SUPPORTED
|
|
||||||
switch ((pp->options >> PNG_ARM_NEON) & 3)
|
|
||||||
{
|
|
||||||
case PNG_OPTION_UNSET:
|
|
||||||
/* Allow the run-time check to execute if it has been enabled -
|
|
||||||
* thus both API and CHECK can be turned on. If it isn't supported
|
|
||||||
* this case will fall through to the 'default' below, which just
|
|
||||||
* returns.
|
|
||||||
*/
|
|
||||||
#endif /* PNG_ARM_NEON_API_SUPPORTED */
|
|
||||||
#ifdef PNG_ARM_NEON_CHECK_SUPPORTED
|
|
||||||
{
|
|
||||||
static volatile sig_atomic_t no_neon = -1; /* not checked */
|
|
||||||
|
|
||||||
if (no_neon < 0)
|
|
||||||
no_neon = !png_have_neon(pp);
|
|
||||||
|
|
||||||
if (no_neon)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#ifdef PNG_ARM_NEON_API_SUPPORTED
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
#endif /* PNG_ARM_NEON_CHECK_SUPPORTED */
|
|
||||||
|
|
||||||
#ifdef PNG_ARM_NEON_API_SUPPORTED
|
|
||||||
default: /* OFF or INVALID */
|
|
||||||
return;
|
|
||||||
|
|
||||||
case PNG_OPTION_ON:
|
|
||||||
/* Option turned on */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* IMPORTANT: any new external functions used here must be declared using
|
|
||||||
* PNG_INTERNAL_FUNCTION in ../pngpriv.h. This is required so that the
|
|
||||||
* 'prefix' option to configure works:
|
|
||||||
*
|
|
||||||
* ./configure --with-libpng-prefix=foobar_
|
|
||||||
*
|
|
||||||
* Verify you have got this right by running the above command, doing a build
|
|
||||||
* and examining pngprefix.h; it must contain a #define for every external
|
|
||||||
* function you add. (Notice that this happens automatically for the
|
|
||||||
* initialization function.)
|
|
||||||
*/
|
|
||||||
pp->read_filter[PNG_FILTER_VALUE_UP-1] = png_read_filter_row_up_neon;
|
|
||||||
|
|
||||||
if (bpp == 3)
|
|
||||||
{
|
|
||||||
pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub3_neon;
|
|
||||||
pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg3_neon;
|
|
||||||
pp->read_filter[PNG_FILTER_VALUE_PAETH-1] =
|
|
||||||
png_read_filter_row_paeth3_neon;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (bpp == 4)
|
|
||||||
{
|
|
||||||
pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub4_neon;
|
|
||||||
pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg4_neon;
|
|
||||||
pp->read_filter[PNG_FILTER_VALUE_PAETH-1] =
|
|
||||||
png_read_filter_row_paeth4_neon;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif /* PNG_ARM_NEON_OPT > 0 */
|
|
||||||
#endif /* PNG_READ_SUPPORTED */
|
|
||||||
@@ -1,235 +0,0 @@
|
|||||||
|
|
||||||
/* filter_neon.S - NEON optimised filter functions
|
|
||||||
*
|
|
||||||
* Copyright (c) 2013 Glenn Randers-Pehrson
|
|
||||||
* Written by Mans Rullgard, 2011.
|
|
||||||
* Last changed in libpng 1.5.17 [June 27, 2013]
|
|
||||||
*
|
|
||||||
* This code is released under the libpng license.
|
|
||||||
* For conditions of distribution and use, see the disclaimer
|
|
||||||
* and license in png.h
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* This is required to get the symbol renames, which are #defines, and also
|
|
||||||
* includes the definition (or not) of PNG_ARM_NEON_OPT.
|
|
||||||
*/
|
|
||||||
#define PNG_VERSION_INFO_ONLY
|
|
||||||
#include "../pngpriv.h"
|
|
||||||
|
|
||||||
#if defined(__linux__) && defined(__ELF__)
|
|
||||||
.section .note.GNU-stack,"",%progbits /* mark stack as non-executable */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if PNG_ARM_NEON_OPT > 0
|
|
||||||
|
|
||||||
#ifdef __ELF__
|
|
||||||
# define ELF
|
|
||||||
#else
|
|
||||||
# define ELF @
|
|
||||||
#endif
|
|
||||||
|
|
||||||
.arch armv7-a
|
|
||||||
.fpu neon
|
|
||||||
|
|
||||||
.macro func name, export=0
|
|
||||||
.macro endfunc
|
|
||||||
ELF .size \name, . - \name
|
|
||||||
.endfunc
|
|
||||||
.purgem endfunc
|
|
||||||
.endm
|
|
||||||
.text
|
|
||||||
.if \export
|
|
||||||
.global \name
|
|
||||||
.endif
|
|
||||||
ELF .type \name, STT_FUNC
|
|
||||||
.func \name
|
|
||||||
\name:
|
|
||||||
.endm
|
|
||||||
|
|
||||||
func png_read_filter_row_sub4_neon, export=1
|
|
||||||
ldr r3, [r0, #4] @ rowbytes
|
|
||||||
vmov.i8 d3, #0
|
|
||||||
1:
|
|
||||||
vld4.32 {d4[],d5[],d6[],d7[]}, [r1,:128]
|
|
||||||
vadd.u8 d0, d3, d4
|
|
||||||
vadd.u8 d1, d0, d5
|
|
||||||
vadd.u8 d2, d1, d6
|
|
||||||
vadd.u8 d3, d2, d7
|
|
||||||
vst4.32 {d0[0],d1[0],d2[0],d3[0]},[r1,:128]!
|
|
||||||
subs r3, r3, #16
|
|
||||||
bgt 1b
|
|
||||||
|
|
||||||
bx lr
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
func png_read_filter_row_sub3_neon, export=1
|
|
||||||
ldr r3, [r0, #4] @ rowbytes
|
|
||||||
vmov.i8 d3, #0
|
|
||||||
mov r0, r1
|
|
||||||
mov r2, #3
|
|
||||||
mov r12, #12
|
|
||||||
vld1.8 {q11}, [r0], r12
|
|
||||||
1:
|
|
||||||
vext.8 d5, d22, d23, #3
|
|
||||||
vadd.u8 d0, d3, d22
|
|
||||||
vext.8 d6, d22, d23, #6
|
|
||||||
vadd.u8 d1, d0, d5
|
|
||||||
vext.8 d7, d23, d23, #1
|
|
||||||
vld1.8 {q11}, [r0], r12
|
|
||||||
vst1.32 {d0[0]}, [r1,:32], r2
|
|
||||||
vadd.u8 d2, d1, d6
|
|
||||||
vst1.32 {d1[0]}, [r1], r2
|
|
||||||
vadd.u8 d3, d2, d7
|
|
||||||
vst1.32 {d2[0]}, [r1], r2
|
|
||||||
vst1.32 {d3[0]}, [r1], r2
|
|
||||||
subs r3, r3, #12
|
|
||||||
bgt 1b
|
|
||||||
|
|
||||||
bx lr
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
func png_read_filter_row_up_neon, export=1
|
|
||||||
ldr r3, [r0, #4] @ rowbytes
|
|
||||||
1:
|
|
||||||
vld1.8 {q0}, [r1,:128]
|
|
||||||
vld1.8 {q1}, [r2,:128]!
|
|
||||||
vadd.u8 q0, q0, q1
|
|
||||||
vst1.8 {q0}, [r1,:128]!
|
|
||||||
subs r3, r3, #16
|
|
||||||
bgt 1b
|
|
||||||
|
|
||||||
bx lr
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
func png_read_filter_row_avg4_neon, export=1
|
|
||||||
ldr r12, [r0, #4] @ rowbytes
|
|
||||||
vmov.i8 d3, #0
|
|
||||||
1:
|
|
||||||
vld4.32 {d4[],d5[],d6[],d7[]}, [r1,:128]
|
|
||||||
vld4.32 {d16[],d17[],d18[],d19[]},[r2,:128]!
|
|
||||||
vhadd.u8 d0, d3, d16
|
|
||||||
vadd.u8 d0, d0, d4
|
|
||||||
vhadd.u8 d1, d0, d17
|
|
||||||
vadd.u8 d1, d1, d5
|
|
||||||
vhadd.u8 d2, d1, d18
|
|
||||||
vadd.u8 d2, d2, d6
|
|
||||||
vhadd.u8 d3, d2, d19
|
|
||||||
vadd.u8 d3, d3, d7
|
|
||||||
vst4.32 {d0[0],d1[0],d2[0],d3[0]},[r1,:128]!
|
|
||||||
subs r12, r12, #16
|
|
||||||
bgt 1b
|
|
||||||
|
|
||||||
bx lr
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
func png_read_filter_row_avg3_neon, export=1
|
|
||||||
push {r4,lr}
|
|
||||||
ldr r12, [r0, #4] @ rowbytes
|
|
||||||
vmov.i8 d3, #0
|
|
||||||
mov r0, r1
|
|
||||||
mov r4, #3
|
|
||||||
mov lr, #12
|
|
||||||
vld1.8 {q11}, [r0], lr
|
|
||||||
1:
|
|
||||||
vld1.8 {q10}, [r2], lr
|
|
||||||
vext.8 d5, d22, d23, #3
|
|
||||||
vhadd.u8 d0, d3, d20
|
|
||||||
vext.8 d17, d20, d21, #3
|
|
||||||
vadd.u8 d0, d0, d22
|
|
||||||
vext.8 d6, d22, d23, #6
|
|
||||||
vhadd.u8 d1, d0, d17
|
|
||||||
vext.8 d18, d20, d21, #6
|
|
||||||
vadd.u8 d1, d1, d5
|
|
||||||
vext.8 d7, d23, d23, #1
|
|
||||||
vld1.8 {q11}, [r0], lr
|
|
||||||
vst1.32 {d0[0]}, [r1,:32], r4
|
|
||||||
vhadd.u8 d2, d1, d18
|
|
||||||
vst1.32 {d1[0]}, [r1], r4
|
|
||||||
vext.8 d19, d21, d21, #1
|
|
||||||
vadd.u8 d2, d2, d6
|
|
||||||
vhadd.u8 d3, d2, d19
|
|
||||||
vst1.32 {d2[0]}, [r1], r4
|
|
||||||
vadd.u8 d3, d3, d7
|
|
||||||
vst1.32 {d3[0]}, [r1], r4
|
|
||||||
subs r12, r12, #12
|
|
||||||
bgt 1b
|
|
||||||
|
|
||||||
pop {r4,pc}
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
.macro paeth rx, ra, rb, rc
|
|
||||||
vaddl.u8 q12, \ra, \rb @ a + b
|
|
||||||
vaddl.u8 q15, \rc, \rc @ 2*c
|
|
||||||
vabdl.u8 q13, \rb, \rc @ pa
|
|
||||||
vabdl.u8 q14, \ra, \rc @ pb
|
|
||||||
vabd.u16 q15, q12, q15 @ pc
|
|
||||||
vcle.u16 q12, q13, q14 @ pa <= pb
|
|
||||||
vcle.u16 q13, q13, q15 @ pa <= pc
|
|
||||||
vcle.u16 q14, q14, q15 @ pb <= pc
|
|
||||||
vand q12, q12, q13 @ pa <= pb && pa <= pc
|
|
||||||
vmovn.u16 d28, q14
|
|
||||||
vmovn.u16 \rx, q12
|
|
||||||
vbsl d28, \rb, \rc
|
|
||||||
vbsl \rx, \ra, d28
|
|
||||||
.endm
|
|
||||||
|
|
||||||
func png_read_filter_row_paeth4_neon, export=1
|
|
||||||
ldr r12, [r0, #4] @ rowbytes
|
|
||||||
vmov.i8 d3, #0
|
|
||||||
vmov.i8 d20, #0
|
|
||||||
1:
|
|
||||||
vld4.32 {d4[],d5[],d6[],d7[]}, [r1,:128]
|
|
||||||
vld4.32 {d16[],d17[],d18[],d19[]},[r2,:128]!
|
|
||||||
paeth d0, d3, d16, d20
|
|
||||||
vadd.u8 d0, d0, d4
|
|
||||||
paeth d1, d0, d17, d16
|
|
||||||
vadd.u8 d1, d1, d5
|
|
||||||
paeth d2, d1, d18, d17
|
|
||||||
vadd.u8 d2, d2, d6
|
|
||||||
paeth d3, d2, d19, d18
|
|
||||||
vmov d20, d19
|
|
||||||
vadd.u8 d3, d3, d7
|
|
||||||
vst4.32 {d0[0],d1[0],d2[0],d3[0]},[r1,:128]!
|
|
||||||
subs r12, r12, #16
|
|
||||||
bgt 1b
|
|
||||||
|
|
||||||
bx lr
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
func png_read_filter_row_paeth3_neon, export=1
|
|
||||||
push {r4,lr}
|
|
||||||
ldr r12, [r0, #4] @ rowbytes
|
|
||||||
vmov.i8 d3, #0
|
|
||||||
vmov.i8 d4, #0
|
|
||||||
mov r0, r1
|
|
||||||
mov r4, #3
|
|
||||||
mov lr, #12
|
|
||||||
vld1.8 {q11}, [r0], lr
|
|
||||||
1:
|
|
||||||
vld1.8 {q10}, [r2], lr
|
|
||||||
paeth d0, d3, d20, d4
|
|
||||||
vext.8 d5, d22, d23, #3
|
|
||||||
vadd.u8 d0, d0, d22
|
|
||||||
vext.8 d17, d20, d21, #3
|
|
||||||
paeth d1, d0, d17, d20
|
|
||||||
vst1.32 {d0[0]}, [r1,:32], r4
|
|
||||||
vext.8 d6, d22, d23, #6
|
|
||||||
vadd.u8 d1, d1, d5
|
|
||||||
vext.8 d18, d20, d21, #6
|
|
||||||
paeth d2, d1, d18, d17
|
|
||||||
vext.8 d7, d23, d23, #1
|
|
||||||
vld1.8 {q11}, [r0], lr
|
|
||||||
vst1.32 {d1[0]}, [r1], r4
|
|
||||||
vadd.u8 d2, d2, d6
|
|
||||||
vext.8 d19, d21, d21, #1
|
|
||||||
paeth d3, d2, d19, d18
|
|
||||||
vst1.32 {d2[0]}, [r1], r4
|
|
||||||
vmov d4, d19
|
|
||||||
vadd.u8 d3, d3, d7
|
|
||||||
vst1.32 {d3[0]}, [r1], r4
|
|
||||||
subs r12, r12, #12
|
|
||||||
bgt 1b
|
|
||||||
|
|
||||||
pop {r4,pc}
|
|
||||||
endfunc
|
|
||||||
#endif /* PNG_ARM_NEON_OPT > 0 */
|
|
||||||
34
autogen.sh
@@ -1,34 +0,0 @@
|
|||||||
#! /bin/sh
|
|
||||||
# a quick hack script to generate necessary files from
|
|
||||||
# auto* tools.
|
|
||||||
#
|
|
||||||
# WARNING: if you run this you will change the versions
|
|
||||||
# of the tools which are used and, maybe, required!
|
|
||||||
|
|
||||||
# You can define your own replacements in your environment.
|
|
||||||
# $AUTOCONF, $AUTOMAKE, $AUTOHEADER, $AUTOPOINT, $ACLOCAL and $LIBTOOLIZE
|
|
||||||
|
|
||||||
touch Makefile.am configure.ac
|
|
||||||
{
|
|
||||||
LT=${LIBTOOLIZE-libtoolize}
|
|
||||||
echo "running $LT" >&2
|
|
||||||
$LT --force --copy --automake
|
|
||||||
} && {
|
|
||||||
AL=${ACLOCAL-aclocal}
|
|
||||||
echo "running $AL" >&2
|
|
||||||
$AL
|
|
||||||
} && {
|
|
||||||
AH=${AUTOHEADER-autoheader}
|
|
||||||
echo "running $AH [ignore the warnings]" >&2
|
|
||||||
$AH
|
|
||||||
} && {
|
|
||||||
AM=${AUTOMAKE-automake}
|
|
||||||
echo "running $AM" >&2
|
|
||||||
$AM --force-missing --foreign -a -c
|
|
||||||
} && {
|
|
||||||
AC=${AUTOCONF-autoconf}
|
|
||||||
echo "running $AC" >&2
|
|
||||||
$AC
|
|
||||||
} &&
|
|
||||||
echo "autogen complete" >&2 ||
|
|
||||||
echo "ERROR: autogen.sh failed, autogen is incomplete" >&2
|
|
||||||
347
compile
@@ -1,347 +0,0 @@
|
|||||||
#! /bin/sh
|
|
||||||
# Wrapper for compilers which do not understand '-c -o'.
|
|
||||||
|
|
||||||
scriptversion=2012-10-14.11; # UTC
|
|
||||||
|
|
||||||
# Copyright (C) 1999-2014 Free Software Foundation, Inc.
|
|
||||||
# Written by Tom Tromey <tromey@cygnus.com>.
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
# any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
# As a special exception to the GNU General Public License, if you
|
|
||||||
# distribute this file as part of a program that contains a
|
|
||||||
# configuration script generated by Autoconf, you may include it under
|
|
||||||
# the same distribution terms that you use for the rest of that program.
|
|
||||||
|
|
||||||
# This file is maintained in Automake, please report
|
|
||||||
# bugs to <bug-automake@gnu.org> or send patches to
|
|
||||||
# <automake-patches@gnu.org>.
|
|
||||||
|
|
||||||
nl='
|
|
||||||
'
|
|
||||||
|
|
||||||
# We need space, tab and new line, in precisely that order. Quoting is
|
|
||||||
# there to prevent tools from complaining about whitespace usage.
|
|
||||||
IFS=" "" $nl"
|
|
||||||
|
|
||||||
file_conv=
|
|
||||||
|
|
||||||
# func_file_conv build_file lazy
|
|
||||||
# Convert a $build file to $host form and store it in $file
|
|
||||||
# Currently only supports Windows hosts. If the determined conversion
|
|
||||||
# type is listed in (the comma separated) LAZY, no conversion will
|
|
||||||
# take place.
|
|
||||||
func_file_conv ()
|
|
||||||
{
|
|
||||||
file=$1
|
|
||||||
case $file in
|
|
||||||
/ | /[!/]*) # absolute file, and not a UNC file
|
|
||||||
if test -z "$file_conv"; then
|
|
||||||
# lazily determine how to convert abs files
|
|
||||||
case `uname -s` in
|
|
||||||
MINGW*)
|
|
||||||
file_conv=mingw
|
|
||||||
;;
|
|
||||||
CYGWIN*)
|
|
||||||
file_conv=cygwin
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
file_conv=wine
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
case $file_conv/,$2, in
|
|
||||||
*,$file_conv,*)
|
|
||||||
;;
|
|
||||||
mingw/*)
|
|
||||||
file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
|
|
||||||
;;
|
|
||||||
cygwin/*)
|
|
||||||
file=`cygpath -m "$file" || echo "$file"`
|
|
||||||
;;
|
|
||||||
wine/*)
|
|
||||||
file=`winepath -w "$file" || echo "$file"`
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
# func_cl_dashL linkdir
|
|
||||||
# Make cl look for libraries in LINKDIR
|
|
||||||
func_cl_dashL ()
|
|
||||||
{
|
|
||||||
func_file_conv "$1"
|
|
||||||
if test -z "$lib_path"; then
|
|
||||||
lib_path=$file
|
|
||||||
else
|
|
||||||
lib_path="$lib_path;$file"
|
|
||||||
fi
|
|
||||||
linker_opts="$linker_opts -LIBPATH:$file"
|
|
||||||
}
|
|
||||||
|
|
||||||
# func_cl_dashl library
|
|
||||||
# Do a library search-path lookup for cl
|
|
||||||
func_cl_dashl ()
|
|
||||||
{
|
|
||||||
lib=$1
|
|
||||||
found=no
|
|
||||||
save_IFS=$IFS
|
|
||||||
IFS=';'
|
|
||||||
for dir in $lib_path $LIB
|
|
||||||
do
|
|
||||||
IFS=$save_IFS
|
|
||||||
if $shared && test -f "$dir/$lib.dll.lib"; then
|
|
||||||
found=yes
|
|
||||||
lib=$dir/$lib.dll.lib
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
if test -f "$dir/$lib.lib"; then
|
|
||||||
found=yes
|
|
||||||
lib=$dir/$lib.lib
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
if test -f "$dir/lib$lib.a"; then
|
|
||||||
found=yes
|
|
||||||
lib=$dir/lib$lib.a
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
IFS=$save_IFS
|
|
||||||
|
|
||||||
if test "$found" != yes; then
|
|
||||||
lib=$lib.lib
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# func_cl_wrapper cl arg...
|
|
||||||
# Adjust compile command to suit cl
|
|
||||||
func_cl_wrapper ()
|
|
||||||
{
|
|
||||||
# Assume a capable shell
|
|
||||||
lib_path=
|
|
||||||
shared=:
|
|
||||||
linker_opts=
|
|
||||||
for arg
|
|
||||||
do
|
|
||||||
if test -n "$eat"; then
|
|
||||||
eat=
|
|
||||||
else
|
|
||||||
case $1 in
|
|
||||||
-o)
|
|
||||||
# configure might choose to run compile as 'compile cc -o foo foo.c'.
|
|
||||||
eat=1
|
|
||||||
case $2 in
|
|
||||||
*.o | *.[oO][bB][jJ])
|
|
||||||
func_file_conv "$2"
|
|
||||||
set x "$@" -Fo"$file"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
func_file_conv "$2"
|
|
||||||
set x "$@" -Fe"$file"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
-I)
|
|
||||||
eat=1
|
|
||||||
func_file_conv "$2" mingw
|
|
||||||
set x "$@" -I"$file"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
-I*)
|
|
||||||
func_file_conv "${1#-I}" mingw
|
|
||||||
set x "$@" -I"$file"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
-l)
|
|
||||||
eat=1
|
|
||||||
func_cl_dashl "$2"
|
|
||||||
set x "$@" "$lib"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
-l*)
|
|
||||||
func_cl_dashl "${1#-l}"
|
|
||||||
set x "$@" "$lib"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
-L)
|
|
||||||
eat=1
|
|
||||||
func_cl_dashL "$2"
|
|
||||||
;;
|
|
||||||
-L*)
|
|
||||||
func_cl_dashL "${1#-L}"
|
|
||||||
;;
|
|
||||||
-static)
|
|
||||||
shared=false
|
|
||||||
;;
|
|
||||||
-Wl,*)
|
|
||||||
arg=${1#-Wl,}
|
|
||||||
save_ifs="$IFS"; IFS=','
|
|
||||||
for flag in $arg; do
|
|
||||||
IFS="$save_ifs"
|
|
||||||
linker_opts="$linker_opts $flag"
|
|
||||||
done
|
|
||||||
IFS="$save_ifs"
|
|
||||||
;;
|
|
||||||
-Xlinker)
|
|
||||||
eat=1
|
|
||||||
linker_opts="$linker_opts $2"
|
|
||||||
;;
|
|
||||||
-*)
|
|
||||||
set x "$@" "$1"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
|
|
||||||
func_file_conv "$1"
|
|
||||||
set x "$@" -Tp"$file"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
|
|
||||||
func_file_conv "$1" mingw
|
|
||||||
set x "$@" "$file"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
set x "$@" "$1"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
if test -n "$linker_opts"; then
|
|
||||||
linker_opts="-link$linker_opts"
|
|
||||||
fi
|
|
||||||
exec "$@" $linker_opts
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
eat=
|
|
||||||
|
|
||||||
case $1 in
|
|
||||||
'')
|
|
||||||
echo "$0: No command. Try '$0 --help' for more information." 1>&2
|
|
||||||
exit 1;
|
|
||||||
;;
|
|
||||||
-h | --h*)
|
|
||||||
cat <<\EOF
|
|
||||||
Usage: compile [--help] [--version] PROGRAM [ARGS]
|
|
||||||
|
|
||||||
Wrapper for compilers which do not understand '-c -o'.
|
|
||||||
Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
|
|
||||||
arguments, and rename the output as expected.
|
|
||||||
|
|
||||||
If you are trying to build a whole package this is not the
|
|
||||||
right script to run: please start by reading the file 'INSTALL'.
|
|
||||||
|
|
||||||
Report bugs to <bug-automake@gnu.org>.
|
|
||||||
EOF
|
|
||||||
exit $?
|
|
||||||
;;
|
|
||||||
-v | --v*)
|
|
||||||
echo "compile $scriptversion"
|
|
||||||
exit $?
|
|
||||||
;;
|
|
||||||
cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
|
|
||||||
func_cl_wrapper "$@" # Doesn't return...
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
ofile=
|
|
||||||
cfile=
|
|
||||||
|
|
||||||
for arg
|
|
||||||
do
|
|
||||||
if test -n "$eat"; then
|
|
||||||
eat=
|
|
||||||
else
|
|
||||||
case $1 in
|
|
||||||
-o)
|
|
||||||
# configure might choose to run compile as 'compile cc -o foo foo.c'.
|
|
||||||
# So we strip '-o arg' only if arg is an object.
|
|
||||||
eat=1
|
|
||||||
case $2 in
|
|
||||||
*.o | *.obj)
|
|
||||||
ofile=$2
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
set x "$@" -o "$2"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
*.c)
|
|
||||||
cfile=$1
|
|
||||||
set x "$@" "$1"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
set x "$@" "$1"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
|
|
||||||
if test -z "$ofile" || test -z "$cfile"; then
|
|
||||||
# If no '-o' option was seen then we might have been invoked from a
|
|
||||||
# pattern rule where we don't need one. That is ok -- this is a
|
|
||||||
# normal compilation that the losing compiler can handle. If no
|
|
||||||
# '.c' file was seen then we are probably linking. That is also
|
|
||||||
# ok.
|
|
||||||
exec "$@"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Name of file we expect compiler to create.
|
|
||||||
cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
|
|
||||||
|
|
||||||
# Create the lock directory.
|
|
||||||
# Note: use '[/\\:.-]' here to ensure that we don't use the same name
|
|
||||||
# that we are using for the .o file. Also, base the name on the expected
|
|
||||||
# object file name, since that is what matters with a parallel build.
|
|
||||||
lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
|
|
||||||
while true; do
|
|
||||||
if mkdir "$lockdir" >/dev/null 2>&1; then
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
# FIXME: race condition here if user kills between mkdir and trap.
|
|
||||||
trap "rmdir '$lockdir'; exit 1" 1 2 15
|
|
||||||
|
|
||||||
# Run the compile.
|
|
||||||
"$@"
|
|
||||||
ret=$?
|
|
||||||
|
|
||||||
if test -f "$cofile"; then
|
|
||||||
test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
|
|
||||||
elif test -f "${cofile}bj"; then
|
|
||||||
test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
|
|
||||||
fi
|
|
||||||
|
|
||||||
rmdir "$lockdir"
|
|
||||||
exit $ret
|
|
||||||
|
|
||||||
# Local Variables:
|
|
||||||
# mode: shell-script
|
|
||||||
# sh-indentation: 2
|
|
||||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
|
||||||
# time-stamp-start: "scriptversion="
|
|
||||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
|
||||||
# time-stamp-time-zone: "UTC"
|
|
||||||
# time-stamp-end: "; # UTC"
|
|
||||||
# End:
|
|
||||||
1421
config.guess
vendored
111
config.h.in
@@ -1,111 +0,0 @@
|
|||||||
/* config.h.in. Generated from configure.ac by autoheader. */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
|
||||||
#undef HAVE_DLFCN_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `feenableexcept' function. */
|
|
||||||
#undef HAVE_FEENABLEEXCEPT
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
|
||||||
#undef HAVE_INTTYPES_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `m' library (-lm). */
|
|
||||||
#undef HAVE_LIBM
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `z' library (-lz). */
|
|
||||||
#undef HAVE_LIBZ
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <malloc.h> header file. */
|
|
||||||
#undef HAVE_MALLOC_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <memory.h> header file. */
|
|
||||||
#undef HAVE_MEMORY_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `memset' function. */
|
|
||||||
#undef HAVE_MEMSET
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `pow' function. */
|
|
||||||
#undef HAVE_POW
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <stdint.h> header file. */
|
|
||||||
#undef HAVE_STDINT_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
|
||||||
#undef HAVE_STDLIB_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <strings.h> header file. */
|
|
||||||
#undef HAVE_STRINGS_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <string.h> header file. */
|
|
||||||
#undef HAVE_STRING_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
|
||||||
#undef HAVE_SYS_STAT_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
|
||||||
#undef HAVE_SYS_TYPES_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <unistd.h> header file. */
|
|
||||||
#undef HAVE_UNISTD_H
|
|
||||||
|
|
||||||
/* Define to the sub-directory where libtool stores uninstalled libraries. */
|
|
||||||
#undef LT_OBJDIR
|
|
||||||
|
|
||||||
/* Name of package */
|
|
||||||
#undef PACKAGE
|
|
||||||
|
|
||||||
/* Define to the address where bug reports for this package should be sent. */
|
|
||||||
#undef PACKAGE_BUGREPORT
|
|
||||||
|
|
||||||
/* Define to the full name of this package. */
|
|
||||||
#undef PACKAGE_NAME
|
|
||||||
|
|
||||||
/* Define to the full name and version of this package. */
|
|
||||||
#undef PACKAGE_STRING
|
|
||||||
|
|
||||||
/* Define to the one symbol short name of this package. */
|
|
||||||
#undef PACKAGE_TARNAME
|
|
||||||
|
|
||||||
/* Define to the home page for this package. */
|
|
||||||
#undef PACKAGE_URL
|
|
||||||
|
|
||||||
/* Define to the version of this package. */
|
|
||||||
#undef PACKAGE_VERSION
|
|
||||||
|
|
||||||
/* Turn on ARM Neon optimizations at run-time */
|
|
||||||
#undef PNG_ARM_NEON_API_SUPPORTED
|
|
||||||
|
|
||||||
/* Check for ARM Neon support at run-time */
|
|
||||||
#undef PNG_ARM_NEON_CHECK_SUPPORTED
|
|
||||||
|
|
||||||
/* Enable ARM Neon optimizations */
|
|
||||||
#undef PNG_ARM_NEON_OPT
|
|
||||||
|
|
||||||
/* Define to 1 if you have the ANSI C header files. */
|
|
||||||
#undef STDC_HEADERS
|
|
||||||
|
|
||||||
/* Define to 1 if your <sys/time.h> declares `struct tm'. */
|
|
||||||
#undef TM_IN_SYS_TIME
|
|
||||||
|
|
||||||
/* Version number of package */
|
|
||||||
#undef VERSION
|
|
||||||
|
|
||||||
/* Define to empty if `const' does not conform to ANSI C. */
|
|
||||||
#undef const
|
|
||||||
|
|
||||||
/* Define to the equivalent of the C99 'restrict' keyword, or to
|
|
||||||
nothing if this is not supported. Do not define if restrict is
|
|
||||||
supported directly. */
|
|
||||||
#undef restrict
|
|
||||||
/* Work around a bug in Sun C++: it does not support _Restrict or
|
|
||||||
__restrict__, even though the corresponding Sun C compiler ends up with
|
|
||||||
"#define restrict _Restrict" or "#define restrict __restrict__" in the
|
|
||||||
previous line. Perhaps some future version of Sun C++ will work with
|
|
||||||
restrict; if so, hopefully it defines __RESTRICT like Sun C does. */
|
|
||||||
#if defined __SUNPRO_CC && !defined __RESTRICT
|
|
||||||
# define _Restrict
|
|
||||||
# define __restrict__
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Define to `unsigned int' if <sys/types.h> does not define. */
|
|
||||||
#undef size_t
|
|
||||||
1807
config.sub
vendored
264
configure.ac
@@ -1,264 +0,0 @@
|
|||||||
# configure.ac
|
|
||||||
|
|
||||||
dnl Process this file with autoconf to produce a configure script.
|
|
||||||
dnl
|
|
||||||
dnl Minor upgrades (compatible ABI): increment the package version
|
|
||||||
dnl (third field in two places below) and set the PNGLIB_RELEASE
|
|
||||||
dnl variable.
|
|
||||||
dnl
|
|
||||||
dnl Major upgrades (incompatible ABI): increment the package major
|
|
||||||
dnl version (second field, or first if desired), set the minor
|
|
||||||
dnl to 0, set PNGLIB_MAJOR below *and* follow the instructions in
|
|
||||||
dnl Makefile.am to upgrade the package name.
|
|
||||||
|
|
||||||
dnl This is here to prevent earlier autoconf from being used, it
|
|
||||||
dnl should not be necessary to regenerate configure if the time
|
|
||||||
dnl stamps are correct
|
|
||||||
AC_PREREQ(2.59)
|
|
||||||
|
|
||||||
dnl Version number stuff here:
|
|
||||||
|
|
||||||
AC_INIT([libpng], [1.5.26], [png-mng-implement@lists.sourceforge.net])
|
|
||||||
AM_INIT_AUTOMAKE([1.13 serial-tests subdir-objects])
|
|
||||||
dnl stop configure from automagically running automake
|
|
||||||
AM_MAINTAINER_MODE
|
|
||||||
|
|
||||||
PNGLIB_VERSION=1.5.26
|
|
||||||
PNGLIB_MAJOR=1
|
|
||||||
PNGLIB_MINOR=5
|
|
||||||
PNGLIB_RELEASE=26
|
|
||||||
|
|
||||||
dnl End of version number stuff
|
|
||||||
|
|
||||||
AC_CONFIG_SRCDIR([pngget.c])
|
|
||||||
AC_CONFIG_HEADERS([config.h])
|
|
||||||
|
|
||||||
# Checks for programs.
|
|
||||||
AC_LANG([C])
|
|
||||||
AC_PROG_CC
|
|
||||||
AM_PROG_AS
|
|
||||||
AC_PROG_LD
|
|
||||||
AC_PROG_CPP
|
|
||||||
AC_PROG_SED
|
|
||||||
AC_PROG_AWK
|
|
||||||
AC_PROG_INSTALL
|
|
||||||
AC_PROG_LN_S
|
|
||||||
AC_PROG_MAKE_SET
|
|
||||||
LT_INIT([win32-dll])
|
|
||||||
|
|
||||||
# Checks for header files.
|
|
||||||
AC_HEADER_STDC
|
|
||||||
AC_CHECK_HEADERS([malloc.h stdlib.h string.h strings.h])
|
|
||||||
|
|
||||||
# Checks for typedefs, structures, and compiler characteristics.
|
|
||||||
AC_C_CONST
|
|
||||||
AC_TYPE_SIZE_T
|
|
||||||
AC_STRUCT_TM
|
|
||||||
AC_C_RESTRICT
|
|
||||||
|
|
||||||
# This is a remnant of the old cc -E validation, where it may have been
|
|
||||||
# necessary to use a different preprocessor for .dfn files
|
|
||||||
DFNCPP="$CPP"
|
|
||||||
AC_SUBST(DFNCPP)
|
|
||||||
|
|
||||||
# Checks for library functions.
|
|
||||||
AC_FUNC_STRTOD
|
|
||||||
AC_CHECK_FUNCS([memset], , AC_ERROR([memset not found in libc]))
|
|
||||||
AC_CHECK_FUNCS([pow], , AC_CHECK_LIB(m, pow, , AC_ERROR([cannot find pow])) )
|
|
||||||
AC_ARG_WITH(zlib-prefix,
|
|
||||||
AC_HELP_STRING([--with-zlib-prefix],
|
|
||||||
[prefix that may have been used in installed zlib]),
|
|
||||||
[ZPREFIX=${withval}],
|
|
||||||
[ZPREFIX='z_'])
|
|
||||||
AC_CHECK_LIB(z, zlibVersion, ,
|
|
||||||
AC_CHECK_LIB(z, ${ZPREFIX}zlibVersion, ,
|
|
||||||
AC_ERROR([zlib not installed])))
|
|
||||||
|
|
||||||
# The following is for pngvalid, to ensure it catches FP errors even on
|
|
||||||
# platforms that don't enable FP exceptions, the function appears in the math
|
|
||||||
# library (typically), it's not an error if it is not found.
|
|
||||||
AC_CHECK_LIB([m], [feenableexcept])
|
|
||||||
AC_CHECK_FUNCS([feenableexcept])
|
|
||||||
|
|
||||||
LIBPNG_DEFINES=-DPNG_CONFIGURE_LIBPNG
|
|
||||||
LIBPNG_DEFINES=$LIBPNG_DEFINES
|
|
||||||
AC_SUBST(LIBPNG_DEFINES)
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([if using Solaris linker])
|
|
||||||
SLD=`$LD --version 2>&1 | grep Solaris`
|
|
||||||
if test "$SLD"; then
|
|
||||||
have_solaris_ld=yes
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
else
|
|
||||||
have_solaris_ld=no
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
fi
|
|
||||||
AM_CONDITIONAL(HAVE_SOLARIS_LD, test "$have_solaris_ld" = "yes")
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([if libraries can be versioned])
|
|
||||||
# Special case for PE/COFF platforms: ld reports
|
|
||||||
# support for version-script, but doesn't actually
|
|
||||||
# DO anything with it.
|
|
||||||
case $host in
|
|
||||||
*cygwin* | *mingw32* | *interix* )
|
|
||||||
have_ld_version_script=no
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
;;
|
|
||||||
* )
|
|
||||||
|
|
||||||
if test "$have_solaris_ld" = "yes"; then
|
|
||||||
GLD=`$LD --help < /dev/null 2>&1 | grep 'M mapfile'`
|
|
||||||
else
|
|
||||||
GLD=`$LD --help < /dev/null 2>/dev/null | grep version-script`
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$GLD"; then
|
|
||||||
have_ld_version_script=yes
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
else
|
|
||||||
have_ld_version_script=no
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
AC_MSG_WARN(*** You have not enabled versioned symbols.)
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes")
|
|
||||||
|
|
||||||
if test "$have_ld_version_script" = "yes"; then
|
|
||||||
AC_MSG_CHECKING([for symbol prefix])
|
|
||||||
SYMBOL_PREFIX=`echo "PREFIX=__USER_LABEL_PREFIX__" \
|
|
||||||
| ${DFNCPP-${CC-gcc} -E} - 2>&1 \
|
|
||||||
| ${EGREP-grep} "^PREFIX=" \
|
|
||||||
| ${SED-sed} -e "s:^PREFIX=::" -e "s:__USER_LABEL_PREFIX__::"`
|
|
||||||
AC_SUBST(SYMBOL_PREFIX)
|
|
||||||
AC_MSG_RESULT($SYMBOL_PREFIX)
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Substitutions for .in files
|
|
||||||
AC_SUBST(PNGLIB_VERSION)
|
|
||||||
AC_SUBST(PNGLIB_MAJOR)
|
|
||||||
AC_SUBST(PNGLIB_MINOR)
|
|
||||||
AC_SUBST(PNGLIB_RELEASE)
|
|
||||||
|
|
||||||
# Additional arguments (and substitutions)
|
|
||||||
# Allow the pkg-config directory to be set
|
|
||||||
AC_ARG_WITH(pkgconfigdir,
|
|
||||||
AC_HELP_STRING([--with-pkgconfigdir],
|
|
||||||
[Use the specified pkgconfig dir (default is libdir/pkgconfig)]),
|
|
||||||
[pkgconfigdir=${withval}],
|
|
||||||
[pkgconfigdir='${libdir}/pkgconfig'])
|
|
||||||
|
|
||||||
AC_SUBST([pkgconfigdir])
|
|
||||||
AC_MSG_NOTICE([pkgconfig directory is ${pkgconfigdir}])
|
|
||||||
|
|
||||||
# Make the *-config binary config scripts optional
|
|
||||||
AC_ARG_WITH(binconfigs,
|
|
||||||
AC_HELP_STRING([--with-binconfigs],
|
|
||||||
[Generate shell libpng-config scripts as well as pkg-config data]
|
|
||||||
[@<:@default=yes@:>@]),
|
|
||||||
[if test "${withval}" = no; then
|
|
||||||
binconfigs=
|
|
||||||
AC_MSG_NOTICE([libpng-config scripts will not be built])
|
|
||||||
else
|
|
||||||
binconfigs='${binconfigs}'
|
|
||||||
fi],
|
|
||||||
[binconfigs='${binconfigs}'])
|
|
||||||
AC_SUBST([binconfigs])
|
|
||||||
|
|
||||||
# Control over what links are made for installed files. Versioned files are
|
|
||||||
# always installed, when the following options are turned on corresponding
|
|
||||||
# unversioned links are also created (normally as symbolic links):
|
|
||||||
AC_ARG_ENABLE([unversioned-links],
|
|
||||||
AS_HELP_STRING([[[--enable-unversioned-links]]],
|
|
||||||
[Installed libpng header files are placed in a versioned subdirectory]
|
|
||||||
[and installed libpng library (including DLL) files are versioned.]
|
|
||||||
[If this option is enabled unversioned links will be created pointing to]
|
|
||||||
[the corresponding installed files. If you use libpng.pc or]
|
|
||||||
[libpng-config for all builds you do not need these links, but if you]
|
|
||||||
[compile programs directly they will typically #include <png.h> and]
|
|
||||||
[link with -lpng; in that case you need the links.]
|
|
||||||
[The links can be installed manually using 'make install-header-links']
|
|
||||||
[and 'make install-library-links' and can be removed using the]
|
|
||||||
[corresponding uninstall- targets. If you do enable this option every]
|
|
||||||
[libpng 'make install' will recreate the links to point to the just]
|
|
||||||
[installed version of libpng. The default is to create the links;]
|
|
||||||
[use --disable-unversioned-links to change this]))
|
|
||||||
|
|
||||||
# The AM_CONDITIONAL test is written so that the default is enabled;
|
|
||||||
# --disable-unversioned-links must be given to turn the option off.
|
|
||||||
AM_CONDITIONAL([DO_INSTALL_LINKS],[test "$enable_unversioned_links" != "no"])
|
|
||||||
|
|
||||||
AC_ARG_ENABLE([unversioned-libpng-pc],
|
|
||||||
AS_HELP_STRING([[[--enable-unversioned-libpng-pc]]],
|
|
||||||
[Install the configuration file 'libpng.pc' as a link to the versioned]
|
|
||||||
[version. This is done by default - use --disable-unversioned-libpng-pc]
|
|
||||||
[to change this.]))
|
|
||||||
AM_CONDITIONAL([DO_INSTALL_LIBPNG_PC],
|
|
||||||
[test "$enable_unversioned_libpng_pc" != "no"])
|
|
||||||
|
|
||||||
AC_ARG_ENABLE([unversioned-libpng-config],
|
|
||||||
AS_HELP_STRING([[[--enable-unversioned-libpng-config]]],
|
|
||||||
[Install the configuration file 'libpng-config' as a link to the]
|
|
||||||
[versioned version. This is done by default - use]
|
|
||||||
[--disable-unversioned-libpng-config to change this.]))
|
|
||||||
AM_CONDITIONAL([DO_INSTALL_LIBPNG_CONFIG],
|
|
||||||
[test "$enable_unversioned_libpng_config" != "no"])
|
|
||||||
|
|
||||||
# HOST SPECIFIC OPTIONS
|
|
||||||
# =====================
|
|
||||||
#
|
|
||||||
# ARM
|
|
||||||
# ===
|
|
||||||
#
|
|
||||||
# ARM NEON (SIMD) support.
|
|
||||||
|
|
||||||
AC_ARG_ENABLE([arm-neon],
|
|
||||||
AS_HELP_STRING([[[--enable-arm-neon]]],
|
|
||||||
[Enable ARM NEON optimizations: =no/off, check, api, yes/on:]
|
|
||||||
[no/off: disable the optimizations; check: use internal checking code]
|
|
||||||
[(deprecated and poorly supported); api: disable by default, enable by]
|
|
||||||
[a call to png_set_option; yes/on: turn on unconditionally.]
|
|
||||||
[If not specified: determined by the compiler.]),
|
|
||||||
[case "$enableval" in
|
|
||||||
no|off)
|
|
||||||
# disable the default enabling on __ARM_NEON__ systems:
|
|
||||||
AC_DEFINE([PNG_ARM_NEON_OPT], [0],
|
|
||||||
[Disable ARM Neon optimizations])
|
|
||||||
# Prevent inclusion of the assembler files below:
|
|
||||||
enable_arm_neon=no;;
|
|
||||||
check)
|
|
||||||
AC_DEFINE([PNG_ARM_NEON_CHECK_SUPPORTED], [],
|
|
||||||
[Check for ARM Neon support at run-time]);;
|
|
||||||
api)
|
|
||||||
AC_DEFINE([PNG_ARM_NEON_API_SUPPORTED], [],
|
|
||||||
[Turn on ARM Neon optimizations at run-time]);;
|
|
||||||
yes|on)
|
|
||||||
AC_DEFINE([PNG_ARM_NEON_OPT], [2],
|
|
||||||
[Enable ARM Neon optimizations])
|
|
||||||
AC_MSG_WARN([--enable-arm-neon: please specify 'check' or 'api', if]
|
|
||||||
[you want the optimizations unconditionally pass -mfpu=neon]
|
|
||||||
[to the compiler.]);;
|
|
||||||
*)
|
|
||||||
AC_MSG_ERROR([--enable-arm-neon=${enable_arm_neon}: invalid value])
|
|
||||||
esac])
|
|
||||||
|
|
||||||
# Add ARM specific files to all builds where the host_cpu is arm ('arm*') or
|
|
||||||
# where ARM optimizations were explicitly requested (this allows a fallback if a
|
|
||||||
# future host CPU does not match 'arm*')
|
|
||||||
|
|
||||||
AM_CONDITIONAL([PNG_ARM_NEON],
|
|
||||||
[test "$enable_arm_neon" != 'no' &&
|
|
||||||
case "$host_cpu" in
|
|
||||||
arm*) :;;
|
|
||||||
*) test "$enable_arm_neon" != '';;
|
|
||||||
esac])
|
|
||||||
|
|
||||||
AC_MSG_NOTICE([[Extra options for compiler: $PNG_COPTS]])
|
|
||||||
|
|
||||||
# Config files, substituting as above
|
|
||||||
AC_CONFIG_FILES([Makefile libpng.pc:libpng.pc.in])
|
|
||||||
AC_CONFIG_FILES([libpng-config:libpng-config.in],
|
|
||||||
[chmod +x libpng-config])
|
|
||||||
|
|
||||||
AC_OUTPUT
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
|
|
||||||
This "contrib" directory contains contributions which are not necessarily under
|
|
||||||
the libpng license, although all are open source. They are not part of
|
|
||||||
libpng proper and are not used for building the library.
|
|
||||||
@@ -1,340 +0,0 @@
|
|||||||
GNU GENERAL PUBLIC LICENSE
|
|
||||||
Version 2, June 1991
|
|
||||||
|
|
||||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
|
||||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
|
||||||
of this license document, but changing it is not allowed.
|
|
||||||
|
|
||||||
Preamble
|
|
||||||
|
|
||||||
The licenses for most software are designed to take away your
|
|
||||||
freedom to share and change it. By contrast, the GNU General Public
|
|
||||||
License is intended to guarantee your freedom to share and change free
|
|
||||||
software--to make sure the software is free for all its users. This
|
|
||||||
General Public License applies to most of the Free Software
|
|
||||||
Foundation's software and to any other program whose authors commit to
|
|
||||||
using it. (Some other Free Software Foundation software is covered by
|
|
||||||
the GNU Library General Public License instead.) You can apply it to
|
|
||||||
your programs, too.
|
|
||||||
|
|
||||||
When we speak of free software, we are referring to freedom, not
|
|
||||||
price. Our General Public Licenses are designed to make sure that you
|
|
||||||
have the freedom to distribute copies of free software (and charge for
|
|
||||||
this service if you wish), that you receive source code or can get it
|
|
||||||
if you want it, that you can change the software or use pieces of it
|
|
||||||
in new free programs; and that you know you can do these things.
|
|
||||||
|
|
||||||
To protect your rights, we need to make restrictions that forbid
|
|
||||||
anyone to deny you these rights or to ask you to surrender the rights.
|
|
||||||
These restrictions translate to certain responsibilities for you if you
|
|
||||||
distribute copies of the software, or if you modify it.
|
|
||||||
|
|
||||||
For example, if you distribute copies of such a program, whether
|
|
||||||
gratis or for a fee, you must give the recipients all the rights that
|
|
||||||
you have. You must make sure that they, too, receive or can get the
|
|
||||||
source code. And you must show them these terms so they know their
|
|
||||||
rights.
|
|
||||||
|
|
||||||
We protect your rights with two steps: (1) copyright the software, and
|
|
||||||
(2) offer you this license which gives you legal permission to copy,
|
|
||||||
distribute and/or modify the software.
|
|
||||||
|
|
||||||
Also, for each author's protection and ours, we want to make certain
|
|
||||||
that everyone understands that there is no warranty for this free
|
|
||||||
software. If the software is modified by someone else and passed on, we
|
|
||||||
want its recipients to know that what they have is not the original, so
|
|
||||||
that any problems introduced by others will not reflect on the original
|
|
||||||
authors' reputations.
|
|
||||||
|
|
||||||
Finally, any free program is threatened constantly by software
|
|
||||||
patents. We wish to avoid the danger that redistributors of a free
|
|
||||||
program will individually obtain patent licenses, in effect making the
|
|
||||||
program proprietary. To prevent this, we have made it clear that any
|
|
||||||
patent must be licensed for everyone's free use or not licensed at all.
|
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
|
||||||
modification follow.
|
|
||||||
|
|
||||||
GNU GENERAL PUBLIC LICENSE
|
|
||||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
|
||||||
|
|
||||||
0. This License applies to any program or other work which contains
|
|
||||||
a notice placed by the copyright holder saying it may be distributed
|
|
||||||
under the terms of this General Public License. The "Program", below,
|
|
||||||
refers to any such program or work, and a "work based on the Program"
|
|
||||||
means either the Program or any derivative work under copyright law:
|
|
||||||
that is to say, a work containing the Program or a portion of it,
|
|
||||||
either verbatim or with modifications and/or translated into another
|
|
||||||
language. (Hereinafter, translation is included without limitation in
|
|
||||||
the term "modification".) Each licensee is addressed as "you".
|
|
||||||
|
|
||||||
Activities other than copying, distribution and modification are not
|
|
||||||
covered by this License; they are outside its scope. The act of
|
|
||||||
running the Program is not restricted, and the output from the Program
|
|
||||||
is covered only if its contents constitute a work based on the
|
|
||||||
Program (independent of having been made by running the Program).
|
|
||||||
Whether that is true depends on what the Program does.
|
|
||||||
|
|
||||||
1. You may copy and distribute verbatim copies of the Program's
|
|
||||||
source code as you receive it, in any medium, provided that you
|
|
||||||
conspicuously and appropriately publish on each copy an appropriate
|
|
||||||
copyright notice and disclaimer of warranty; keep intact all the
|
|
||||||
notices that refer to this License and to the absence of any warranty;
|
|
||||||
and give any other recipients of the Program a copy of this License
|
|
||||||
along with the Program.
|
|
||||||
|
|
||||||
You may charge a fee for the physical act of transferring a copy, and
|
|
||||||
you may at your option offer warranty protection in exchange for a fee.
|
|
||||||
|
|
||||||
2. You may modify your copy or copies of the Program or any portion
|
|
||||||
of it, thus forming a work based on the Program, and copy and
|
|
||||||
distribute such modifications or work under the terms of Section 1
|
|
||||||
above, provided that you also meet all of these conditions:
|
|
||||||
|
|
||||||
a) You must cause the modified files to carry prominent notices
|
|
||||||
stating that you changed the files and the date of any change.
|
|
||||||
|
|
||||||
b) You must cause any work that you distribute or publish, that in
|
|
||||||
whole or in part contains or is derived from the Program or any
|
|
||||||
part thereof, to be licensed as a whole at no charge to all third
|
|
||||||
parties under the terms of this License.
|
|
||||||
|
|
||||||
c) If the modified program normally reads commands interactively
|
|
||||||
when run, you must cause it, when started running for such
|
|
||||||
interactive use in the most ordinary way, to print or display an
|
|
||||||
announcement including an appropriate copyright notice and a
|
|
||||||
notice that there is no warranty (or else, saying that you provide
|
|
||||||
a warranty) and that users may redistribute the program under
|
|
||||||
these conditions, and telling the user how to view a copy of this
|
|
||||||
License. (Exception: if the Program itself is interactive but
|
|
||||||
does not normally print such an announcement, your work based on
|
|
||||||
the Program is not required to print an announcement.)
|
|
||||||
|
|
||||||
These requirements apply to the modified work as a whole. If
|
|
||||||
identifiable sections of that work are not derived from the Program,
|
|
||||||
and can be reasonably considered independent and separate works in
|
|
||||||
themselves, then this License, and its terms, do not apply to those
|
|
||||||
sections when you distribute them as separate works. But when you
|
|
||||||
distribute the same sections as part of a whole which is a work based
|
|
||||||
on the Program, the distribution of the whole must be on the terms of
|
|
||||||
this License, whose permissions for other licensees extend to the
|
|
||||||
entire whole, and thus to each and every part regardless of who wrote it.
|
|
||||||
|
|
||||||
Thus, it is not the intent of this section to claim rights or contest
|
|
||||||
your rights to work written entirely by you; rather, the intent is to
|
|
||||||
exercise the right to control the distribution of derivative or
|
|
||||||
collective works based on the Program.
|
|
||||||
|
|
||||||
In addition, mere aggregation of another work not based on the Program
|
|
||||||
with the Program (or with a work based on the Program) on a volume of
|
|
||||||
a storage or distribution medium does not bring the other work under
|
|
||||||
the scope of this License.
|
|
||||||
|
|
||||||
3. You may copy and distribute the Program (or a work based on it,
|
|
||||||
under Section 2) in object code or executable form under the terms of
|
|
||||||
Sections 1 and 2 above provided that you also do one of the following:
|
|
||||||
|
|
||||||
a) Accompany it with the complete corresponding machine-readable
|
|
||||||
source code, which must be distributed under the terms of Sections
|
|
||||||
1 and 2 above on a medium customarily used for software interchange; or,
|
|
||||||
|
|
||||||
b) Accompany it with a written offer, valid for at least three
|
|
||||||
years, to give any third party, for a charge no more than your
|
|
||||||
cost of physically performing source distribution, a complete
|
|
||||||
machine-readable copy of the corresponding source code, to be
|
|
||||||
distributed under the terms of Sections 1 and 2 above on a medium
|
|
||||||
customarily used for software interchange; or,
|
|
||||||
|
|
||||||
c) Accompany it with the information you received as to the offer
|
|
||||||
to distribute corresponding source code. (This alternative is
|
|
||||||
allowed only for noncommercial distribution and only if you
|
|
||||||
received the program in object code or executable form with such
|
|
||||||
an offer, in accord with Subsection b above.)
|
|
||||||
|
|
||||||
The source code for a work means the preferred form of the work for
|
|
||||||
making modifications to it. For an executable work, complete source
|
|
||||||
code means all the source code for all modules it contains, plus any
|
|
||||||
associated interface definition files, plus the scripts used to
|
|
||||||
control compilation and installation of the executable. However, as a
|
|
||||||
special exception, the source code distributed need not include
|
|
||||||
anything that is normally distributed (in either source or binary
|
|
||||||
form) with the major components (compiler, kernel, and so on) of the
|
|
||||||
operating system on which the executable runs, unless that component
|
|
||||||
itself accompanies the executable.
|
|
||||||
|
|
||||||
If distribution of executable or object code is made by offering
|
|
||||||
access to copy from a designated place, then offering equivalent
|
|
||||||
access to copy the source code from the same place counts as
|
|
||||||
distribution of the source code, even though third parties are not
|
|
||||||
compelled to copy the source along with the object code.
|
|
||||||
|
|
||||||
4. You may not copy, modify, sublicense, or distribute the Program
|
|
||||||
except as expressly provided under this License. Any attempt
|
|
||||||
otherwise to copy, modify, sublicense or distribute the Program is
|
|
||||||
void, and will automatically terminate your rights under this License.
|
|
||||||
However, parties who have received copies, or rights, from you under
|
|
||||||
this License will not have their licenses terminated so long as such
|
|
||||||
parties remain in full compliance.
|
|
||||||
|
|
||||||
5. You are not required to accept this License, since you have not
|
|
||||||
signed it. However, nothing else grants you permission to modify or
|
|
||||||
distribute the Program or its derivative works. These actions are
|
|
||||||
prohibited by law if you do not accept this License. Therefore, by
|
|
||||||
modifying or distributing the Program (or any work based on the
|
|
||||||
Program), you indicate your acceptance of this License to do so, and
|
|
||||||
all its terms and conditions for copying, distributing or modifying
|
|
||||||
the Program or works based on it.
|
|
||||||
|
|
||||||
6. Each time you redistribute the Program (or any work based on the
|
|
||||||
Program), the recipient automatically receives a license from the
|
|
||||||
original licensor to copy, distribute or modify the Program subject to
|
|
||||||
these terms and conditions. You may not impose any further
|
|
||||||
restrictions on the recipients' exercise of the rights granted herein.
|
|
||||||
You are not responsible for enforcing compliance by third parties to
|
|
||||||
this License.
|
|
||||||
|
|
||||||
7. If, as a consequence of a court judgment or allegation of patent
|
|
||||||
infringement or for any other reason (not limited to patent issues),
|
|
||||||
conditions are imposed on you (whether by court order, agreement or
|
|
||||||
otherwise) that contradict the conditions of this License, they do not
|
|
||||||
excuse you from the conditions of this License. If you cannot
|
|
||||||
distribute so as to satisfy simultaneously your obligations under this
|
|
||||||
License and any other pertinent obligations, then as a consequence you
|
|
||||||
may not distribute the Program at all. For example, if a patent
|
|
||||||
license would not permit royalty-free redistribution of the Program by
|
|
||||||
all those who receive copies directly or indirectly through you, then
|
|
||||||
the only way you could satisfy both it and this License would be to
|
|
||||||
refrain entirely from distribution of the Program.
|
|
||||||
|
|
||||||
If any portion of this section is held invalid or unenforceable under
|
|
||||||
any particular circumstance, the balance of the section is intended to
|
|
||||||
apply and the section as a whole is intended to apply in other
|
|
||||||
circumstances.
|
|
||||||
|
|
||||||
It is not the purpose of this section to induce you to infringe any
|
|
||||||
patents or other property right claims or to contest validity of any
|
|
||||||
such claims; this section has the sole purpose of protecting the
|
|
||||||
integrity of the free software distribution system, which is
|
|
||||||
implemented by public license practices. Many people have made
|
|
||||||
generous contributions to the wide range of software distributed
|
|
||||||
through that system in reliance on consistent application of that
|
|
||||||
system; it is up to the author/donor to decide if he or she is willing
|
|
||||||
to distribute software through any other system and a licensee cannot
|
|
||||||
impose that choice.
|
|
||||||
|
|
||||||
This section is intended to make thoroughly clear what is believed to
|
|
||||||
be a consequence of the rest of this License.
|
|
||||||
|
|
||||||
8. If the distribution and/or use of the Program is restricted in
|
|
||||||
certain countries either by patents or by copyrighted interfaces, the
|
|
||||||
original copyright holder who places the Program under this License
|
|
||||||
may add an explicit geographical distribution limitation excluding
|
|
||||||
those countries, so that distribution is permitted only in or among
|
|
||||||
countries not thus excluded. In such case, this License incorporates
|
|
||||||
the limitation as if written in the body of this License.
|
|
||||||
|
|
||||||
9. The Free Software Foundation may publish revised and/or new versions
|
|
||||||
of the General Public License from time to time. Such new versions will
|
|
||||||
be similar in spirit to the present version, but may differ in detail to
|
|
||||||
address new problems or concerns.
|
|
||||||
|
|
||||||
Each version is given a distinguishing version number. If the Program
|
|
||||||
specifies a version number of this License which applies to it and "any
|
|
||||||
later version", you have the option of following the terms and conditions
|
|
||||||
either of that version or of any later version published by the Free
|
|
||||||
Software Foundation. If the Program does not specify a version number of
|
|
||||||
this License, you may choose any version ever published by the Free Software
|
|
||||||
Foundation.
|
|
||||||
|
|
||||||
10. If you wish to incorporate parts of the Program into other free
|
|
||||||
programs whose distribution conditions are different, write to the author
|
|
||||||
to ask for permission. For software which is copyrighted by the Free
|
|
||||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
|
||||||
make exceptions for this. Our decision will be guided by the two goals
|
|
||||||
of preserving the free status of all derivatives of our free software and
|
|
||||||
of promoting the sharing and reuse of software generally.
|
|
||||||
|
|
||||||
NO WARRANTY
|
|
||||||
|
|
||||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
|
||||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
|
||||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
|
||||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
|
||||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
|
||||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
|
||||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
|
||||||
REPAIR OR CORRECTION.
|
|
||||||
|
|
||||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
|
||||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
|
||||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
|
||||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
|
||||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
|
||||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
|
||||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
|
||||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
|
||||||
POSSIBILITY OF SUCH DAMAGES.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
How to Apply These Terms to Your New Programs
|
|
||||||
|
|
||||||
If you develop a new program, and you want it to be of the greatest
|
|
||||||
possible use to the public, the best way to achieve this is to make it
|
|
||||||
free software which everyone can redistribute and change under these terms.
|
|
||||||
|
|
||||||
To do so, attach the following notices to the program. It is safest
|
|
||||||
to attach them to the start of each source file to most effectively
|
|
||||||
convey the exclusion of warranty; and each file should have at least
|
|
||||||
the "copyright" line and a pointer to where the full notice is found.
|
|
||||||
|
|
||||||
<one line to give the program's name and a brief idea of what it does.>
|
|
||||||
Copyright (C) <year> <name of author>
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
|
||||||
|
|
||||||
If the program is interactive, make it output a short notice like this
|
|
||||||
when it starts in an interactive mode:
|
|
||||||
|
|
||||||
Gnomovision version 69, Copyright (C) year name of author
|
|
||||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
|
||||||
This is free software, and you are welcome to redistribute it
|
|
||||||
under certain conditions; type `show c' for details.
|
|
||||||
|
|
||||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
|
||||||
parts of the General Public License. Of course, the commands you use may
|
|
||||||
be called something other than `show w' and `show c'; they could even be
|
|
||||||
mouse-clicks or menu items--whatever suits your program.
|
|
||||||
|
|
||||||
You should also get your employer (if you work as a programmer) or your
|
|
||||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
|
||||||
necessary. Here is a sample; alter the names:
|
|
||||||
|
|
||||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
|
||||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
|
||||||
|
|
||||||
<signature of Ty Coon>, 1 April 1989
|
|
||||||
Ty Coon, President of Vice
|
|
||||||
|
|
||||||
This General Public License does not permit incorporating your program into
|
|
||||||
proprietary programs. If your program is a subroutine library, you may
|
|
||||||
consider it more useful to permit linking proprietary applications with the
|
|
||||||
library. If this is what you want to do, use the GNU Library General
|
|
||||||
Public License instead of this License.
|
|
||||||
@@ -1,19 +1,12 @@
|
|||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-2008 Greg Roelofs. All rights reserved.
|
Copyright (c) 1998-2001 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
be held liable for any damages arising in any way from the use of
|
be held liable for any damages arising in any way from the use of
|
||||||
this software.
|
this software.
|
||||||
|
|
||||||
The contents of this file are DUAL-LICENSED. You may modify and/or
|
|
||||||
redistribute this software according to the terms of one of the
|
|
||||||
following two licenses (at your option):
|
|
||||||
|
|
||||||
|
|
||||||
LICENSE 1 ("BSD-like with advertising clause"):
|
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute
|
including commercial applications, and to alter it and redistribute
|
||||||
it freely, subject to the following restrictions:
|
it freely, subject to the following restrictions:
|
||||||
@@ -30,21 +23,4 @@
|
|||||||
and contributors for the book, "PNG: The Definitive Guide,"
|
and contributors for the book, "PNG: The Definitive Guide,"
|
||||||
published by O'Reilly and Associates.
|
published by O'Reilly and Associates.
|
||||||
|
|
||||||
|
|
||||||
LICENSE 2 (GNU GPL v2 or later):
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -1,131 +0,0 @@
|
|||||||
# Sample makefile for rpng-win / rpng2-win / wpng using mingw32-gcc and make.
|
|
||||||
# Greg Roelofs
|
|
||||||
# Last modified: 2 June 2007
|
|
||||||
#
|
|
||||||
# The programs built by this makefile are described in the book,
|
|
||||||
# "PNG: The Definitive Guide," by Greg Roelofs (O'Reilly and
|
|
||||||
# Associates, 1999). Go buy a copy, eh? Well, OK, it's not
|
|
||||||
# generally for sale anymore, but it's the thought that counts,
|
|
||||||
# right? (Hint: http://www.libpng.org/pub/png/book/ )
|
|
||||||
#
|
|
||||||
# Invoke this makefile from a DOS-prompt window via:
|
|
||||||
#
|
|
||||||
# make -f Makefile.mingw32
|
|
||||||
#
|
|
||||||
# This makefile assumes libpng and zlib have already been built or downloaded
|
|
||||||
# and are in subdirectories at the same level as the current subdirectory
|
|
||||||
# (as indicated by the PNGDIR and ZDIR macros below). It makes no assumptions
|
|
||||||
# at all about the mingw32 installation tree (W32DIR). Edit as appropriate.
|
|
||||||
#
|
|
||||||
# Note that the names of the dynamic and static libpng and zlib libraries
|
|
||||||
# used below may change in later releases of the libraries. This makefile
|
|
||||||
# builds both statically and dynamically linked executables by default.
|
|
||||||
# (You need only one set, but for testing it can be handy to have both.)
|
|
||||||
|
|
||||||
|
|
||||||
# macros --------------------------------------------------------------------
|
|
||||||
|
|
||||||
#PNGDIR = ../..# for libpng-x.y.z/contrib/gregbook builds
|
|
||||||
PNGDIR = ../libpng-win32
|
|
||||||
PNGINC = -I$(PNGDIR)
|
|
||||||
PNGLIBd = $(PNGDIR)/libpng.dll.a # dynamically linked
|
|
||||||
PNGLIBs = $(PNGDIR)/libpng.a # statically linked, local libpng
|
|
||||||
|
|
||||||
#ZDIR = ../../../zlib-win32# for libpng-x.y.z/contrib/gregbook builds
|
|
||||||
ZDIR = ../zlib-win32
|
|
||||||
ZINC = -I$(ZDIR)
|
|
||||||
ZLIBd = $(ZDIR)/libzdll.a
|
|
||||||
ZLIBs = $(ZDIR)/libz.a
|
|
||||||
|
|
||||||
# change this to be the path where mingw32 installs its stuff:
|
|
||||||
W32DIR =
|
|
||||||
#W32DIR = /usr/local/cross-tools/i386-mingw32msvc
|
|
||||||
W32INC = -I$(W32DIR)/include
|
|
||||||
W32LIB = $(W32DIR)/lib/libuser32.a $(W32DIR)/lib/libgdi32.a
|
|
||||||
|
|
||||||
CC = gcc
|
|
||||||
#CC = i386-mingw32msvc-gcc # e.g., Linux -> Win32 cross-compilation
|
|
||||||
LD = $(CC)
|
|
||||||
RM = rm -f
|
|
||||||
CPPFLAGS = $(INCS)
|
|
||||||
CFLAGS = -O -Wall $(MINGW_CCFLAGS)
|
|
||||||
# [note that -Wall is a gcc-specific compilation flag ("most warnings on")]
|
|
||||||
# [-ansi, -pedantic and -W can also be used]
|
|
||||||
LDFLAGS = $(MINGW_LDFLAGS)
|
|
||||||
O = .o
|
|
||||||
E = .exe
|
|
||||||
|
|
||||||
INCS = $(PNGINC) $(ZINC) $(W32INC)
|
|
||||||
RLIBSd = $(PNGLIBd) $(ZLIBd) $(W32LIB) -lm
|
|
||||||
RLIBSs = $(PNGLIBs) $(ZLIBs) $(W32LIB) -lm
|
|
||||||
WLIBSd = $(PNGLIBd) $(ZLIBd)
|
|
||||||
WLIBSs = $(PNGLIBs) $(ZLIBs)
|
|
||||||
|
|
||||||
RPNG = rpng-win
|
|
||||||
RPNG2 = rpng2-win
|
|
||||||
WPNG = wpng
|
|
||||||
|
|
||||||
ROBJSd = $(RPNG)$(O) readpng.pic$(O)
|
|
||||||
ROBJS2d = $(RPNG2)$(O) readpng2.pic$(O)
|
|
||||||
WOBJSd = $(WPNG)$(O) writepng.pic$(O)
|
|
||||||
|
|
||||||
RPNGs = $(RPNG)-static
|
|
||||||
RPNG2s = $(RPNG2)-static
|
|
||||||
WPNGs = $(WPNG)-static
|
|
||||||
|
|
||||||
ROBJSs = $(RPNG)$(O) readpng$(O)
|
|
||||||
ROBJS2s = $(RPNG2)$(O) readpng2$(O)
|
|
||||||
WOBJSs = $(WPNG)$(O) writepng$(O)
|
|
||||||
|
|
||||||
STATIC_EXES = $(RPNGs)$(E) $(RPNG2s)$(E) $(WPNGs)$(E)
|
|
||||||
DYNAMIC_EXES = $(RPNG)$(E) $(RPNG2)$(E) $(WPNG)$(E)
|
|
||||||
|
|
||||||
EXES = $(STATIC_EXES) $(DYNAMIC_EXES)
|
|
||||||
|
|
||||||
|
|
||||||
# implicit make rules -------------------------------------------------------
|
|
||||||
|
|
||||||
.c$(O):
|
|
||||||
$(CC) -c $(CPPFLAGS) $(CFLAGS) $<
|
|
||||||
|
|
||||||
%.pic$(O): %.c
|
|
||||||
$(CC) -c $(CPPFLAGS) $(CFLAGS) -DPNG_BUILD_DLL -o $@ $<
|
|
||||||
|
|
||||||
|
|
||||||
# dependencies --------------------------------------------------------------
|
|
||||||
|
|
||||||
all: $(EXES)
|
|
||||||
|
|
||||||
$(RPNGs)$(E): $(ROBJSs)
|
|
||||||
$(LD) $(LDFLAGS) -o $@ $(ROBJSs) $(RLIBSs)
|
|
||||||
|
|
||||||
$(RPNG)$(E): $(ROBJSd)
|
|
||||||
$(LD) $(LDFLAGS) -o $@ $(ROBJSd) $(RLIBSd)
|
|
||||||
|
|
||||||
$(RPNG2s)$(E): $(ROBJS2s)
|
|
||||||
$(LD) $(LDFLAGS) -o $@ $(ROBJS2s) $(RLIBSs)
|
|
||||||
|
|
||||||
$(RPNG2)$(E): $(ROBJS2d)
|
|
||||||
$(LD) $(LDFLAGS) -o $@ $(ROBJS2d) $(RLIBSd)
|
|
||||||
|
|
||||||
$(WPNGs)$(E): $(WOBJSs)
|
|
||||||
$(LD) $(LDFLAGS) -o $@ $(WOBJSs) $(WLIBSs)
|
|
||||||
|
|
||||||
$(WPNG)$(E): $(WOBJSd)
|
|
||||||
$(LD) $(LDFLAGS) -o $@ $(WOBJSd) $(WLIBSd)
|
|
||||||
|
|
||||||
$(RPNG)$(O): $(RPNG).c readpng.h
|
|
||||||
$(RPNG2)$(O): $(RPNG2).c readpng2.h
|
|
||||||
$(WPNG)$(O): $(WPNG).c writepng.h
|
|
||||||
|
|
||||||
readpng$(O) readpng.pic$(O): readpng.c readpng.h
|
|
||||||
readpng2$(O) readpng2.pic$(O): readpng2.c readpng2.h
|
|
||||||
writepng$(O) writepng.pic$(O): writepng.c writepng.h
|
|
||||||
|
|
||||||
|
|
||||||
# maintenance ---------------------------------------------------------------
|
|
||||||
|
|
||||||
clean:
|
|
||||||
$(RM) $(EXES)
|
|
||||||
$(RM) $(ROBJSs) $(ROBJS2s) $(WOBJSs)
|
|
||||||
$(RM) $(ROBJSd) $(ROBJS2d) $(WOBJSd)
|
|
||||||
@@ -23,9 +23,9 @@
|
|||||||
|
|
||||||
# macros --------------------------------------------------------------------
|
# macros --------------------------------------------------------------------
|
||||||
|
|
||||||
PNGINC = -I/usr/local/include/libpng15
|
PNGINC = -I/usr/local/include/libpng10
|
||||||
PNGLIB = -L/usr/local/lib -lpng15 # dynamically linked against libpng
|
PNGLIB = -L/usr/local/lib -lpng10 # dynamically linked against libpng
|
||||||
#PNGLIB = /usr/local/lib/libpng15.a # statically linked against libpng
|
#PNGLIB = /usr/local/lib/libpng10.a # statically linked against libpng
|
||||||
# or:
|
# or:
|
||||||
#PNGINC = -I../..
|
#PNGINC = -I../..
|
||||||
#PNGLIB = -L../.. -lpng
|
#PNGLIB = -L../.. -lpng
|
||||||
@@ -52,11 +52,8 @@ WLIBS = $(PNGLIB) $(ZLIB)
|
|||||||
CC = cc
|
CC = cc
|
||||||
LD = cc
|
LD = cc
|
||||||
RM = rm -f
|
RM = rm -f
|
||||||
# ABI must be the same as that used to build libpng.
|
CFLAGS = -O -fullwarn $(INCS)
|
||||||
ABI =
|
LDFLAGS =
|
||||||
CPPFLAGS =
|
|
||||||
CFLAGS = $(ABI) -O -fullwarn $(INCS)
|
|
||||||
LDFLAGS = $(ABI)
|
|
||||||
O = .o
|
O = .o
|
||||||
E =
|
E =
|
||||||
|
|
||||||
@@ -74,7 +71,7 @@ EXES = $(RPNG)$(E) $(RPNG2)$(E) $(WPNG)$(E)
|
|||||||
# implicit make rules -------------------------------------------------------
|
# implicit make rules -------------------------------------------------------
|
||||||
|
|
||||||
.c$(O):
|
.c$(O):
|
||||||
$(CC) -c $(CPPFLAGS) $(CFLAGS) $<
|
$(CC) -c $(CFLAGS) $<
|
||||||
|
|
||||||
|
|
||||||
# dependencies --------------------------------------------------------------
|
# dependencies --------------------------------------------------------------
|
||||||
|
|||||||
@@ -1,122 +1,93 @@
|
|||||||
# Sample makefile for rpng-x / rpng2-x / wpng using gcc and make.
|
# Sample makefile for rpng-x / rpng2-x / wpng using gcc and make.
|
||||||
# Greg Roelofs
|
# Greg Roelofs
|
||||||
# Last modified: 2 June 2007
|
# Last modified: 7 March 2002
|
||||||
#
|
#
|
||||||
# The programs built by this makefile are described in the book,
|
# The programs built by this makefile are described in the book,
|
||||||
# "PNG: The Definitive Guide," by Greg Roelofs (O'Reilly and
|
# "PNG: The Definitive Guide," by Greg Roelofs (O'Reilly and
|
||||||
# Associates, 1999). Go buy a copy, eh? Well, OK, it's not
|
# Associates, 1999). Go buy a copy, eh? Buy some for friends
|
||||||
# generally for sale anymore, but it's the thought that counts,
|
# and family, too. (Not that this is a blatant plug or anything.)
|
||||||
# right? (Hint: http://www.libpng.org/pub/png/book/ )
|
|
||||||
#
|
#
|
||||||
# Invoke this makefile from a shell prompt in the usual way; for example:
|
# Invoke this makefile from a shell prompt in the usual way; for example:
|
||||||
#
|
#
|
||||||
# make -f Makefile.unx
|
# make -f Makefile.unx
|
||||||
#
|
#
|
||||||
# This makefile assumes libpng and zlib have already been built or downloaded
|
# This makefile assumes libpng and zlib have already been built or downloaded
|
||||||
# and are installed in /usr/local/{include,lib} or as otherwise indicated by
|
# and are both installed in /usr/local/{include,lib} (as indicated by the
|
||||||
# the PNG* and Z* macros below. Edit as appropriate--choose only ONE each of
|
# PNG* and Z* macros below). Edit as appropriate--choose only ONE each of
|
||||||
# the PNGINC, PNGLIBd, PNGLIBs, ZINC, ZLIBd and ZLIBs lines.
|
# the PNGINC, PNGLIB, ZINC and ZLIB lines.
|
||||||
#
|
#
|
||||||
# This makefile builds both dynamically and statically linked executables
|
# This makefile builds statically linked executables (against libpng and zlib,
|
||||||
# (against libpng and zlib, that is), but that can be changed by modifying
|
# that is), but that can be changed by uncommenting the appropriate PNGLIB and
|
||||||
# the "EXES =" line. (You need only one set, but for testing it can be handy
|
# ZLIB lines.
|
||||||
# to have both.)
|
|
||||||
|
|
||||||
|
|
||||||
# macros --------------------------------------------------------------------
|
# macros --------------------------------------------------------------------
|
||||||
|
|
||||||
#PNGDIR = /usr/local/lib
|
PNGINC = -I/usr/local/include/libpng10
|
||||||
#PNGINC = -I/usr/local/include/libpng15
|
#PNGLIB = -L/usr/local/lib -lpng10 # dynamically linked against libpng
|
||||||
#PNGLIBd = -L$(PNGDIR) -lpng15 # dynamically linked, installed libpng
|
PNGLIB = /usr/local/lib/libpng10.a # statically linked against libpng
|
||||||
#PNGLIBs = $(PNGDIR)/libpng15.a # statically linked, installed libpng
|
|
||||||
# or:
|
# or:
|
||||||
PNGDIR = ../..# this one is for libpng-x.y.z/contrib/gregbook builds
|
#PNGINC = -I../libpng
|
||||||
#PNGDIR = ../libpng
|
#PNGLIB = -L../libpng -lpng
|
||||||
PNGINC = -I$(PNGDIR)
|
#PNGLIB = ../libpng/libpng.a
|
||||||
PNGLIBd = -Wl,-rpath,$(PNGDIR) -L$(PNGDIR) -lpng15 # dynamically linked
|
|
||||||
PNGLIBs = $(PNGDIR)/libpng.a # statically linked, local libpng
|
|
||||||
|
|
||||||
ZDIR = /usr/local/lib
|
|
||||||
#ZDIR = /usr/lib64
|
|
||||||
ZINC = -I/usr/local/include
|
ZINC = -I/usr/local/include
|
||||||
ZLIBd = -L$(ZDIR) -lz # dynamically linked against zlib
|
#ZLIB = -L/usr/local/lib -lz # dynamically linked against zlib
|
||||||
ZLIBs = $(ZDIR)/libz.a # statically linked against zlib
|
ZLIB = /usr/local/lib/libz.a # statically linked against zlib
|
||||||
# or:
|
#ZINC = -I../zlib
|
||||||
#ZDIR = ../zlib
|
#ZLIB = -L../zlib -lz
|
||||||
#ZINC = -I$(ZDIR)
|
#ZLIB = ../zlib/libz.a
|
||||||
#ZLIBd = -Wl,-rpath,$(ZDIR) -L$(ZDIR) -lz # -rpath allows in-place testing
|
|
||||||
#ZLIBs = $(ZDIR)/libz.a
|
|
||||||
|
|
||||||
#XINC = -I/usr/include # old-style, stock X distributions
|
#XINC = -I/usr/include # old-style, stock X distributions
|
||||||
#XLIB = -L/usr/lib/X11 -lX11 # (including SGI IRIX)
|
#XLIB = -L/usr/lib/X11 -lX11
|
||||||
#XINC = -I/usr/openwin/include # Sun workstations (OpenWindows)
|
#XINC = -I/usr/openwin/include # Sun workstations (OpenWindows)
|
||||||
#XLIB = -L/usr/openwin/lib -lX11
|
#XLIB = -L/usr/openwin/lib -lX11
|
||||||
XINC = -I/usr/X11R6/include # new X distributions (X.org, etc.)
|
XINC = -I/usr/X11R6/include # new X distributions (XFree86, etc.)
|
||||||
XLIB = -L/usr/X11R6/lib -lX11
|
XLIB = -L/usr/X11R6/lib -lX11
|
||||||
#XLIB = -L/usr/X11R6/lib64 -lX11 # e.g., Red Hat on AMD64
|
|
||||||
|
|
||||||
INCS = $(PNGINC) $(ZINC) $(XINC)
|
INCS = $(PNGINC) $(ZINC) $(XINC)
|
||||||
RLIBSd = $(PNGLIBd) $(ZLIBd) $(XLIB) -lm
|
RLIBS = $(PNGLIB) $(ZLIB) $(XLIB) -lm
|
||||||
RLIBSs = $(PNGLIBs) $(ZLIBs) $(XLIB) -lm
|
WLIBS = $(PNGLIB) $(ZLIB)
|
||||||
WLIBSd = $(PNGLIBd) $(ZLIBd) -lm
|
|
||||||
WLIBSs = $(PNGLIBs) $(ZLIBs)
|
|
||||||
|
|
||||||
CC = gcc
|
CC = gcc
|
||||||
LD = gcc
|
LD = gcc
|
||||||
RM = rm -f
|
RM = rm -f
|
||||||
CPPFLAGS = $(INCS) -DFEATURE_LOOP
|
CFLAGS = -O -Wall $(INCS)
|
||||||
CFLAGS = -O -Wall
|
|
||||||
# [note that -Wall is a gcc-specific compilation flag ("most warnings on")]
|
# [note that -Wall is a gcc-specific compilation flag ("most warnings on")]
|
||||||
# [-ansi, -pedantic and -W can also be used]
|
# [-ansi, -pedantic and -W can also be used]
|
||||||
LDFLAGS =
|
LDFLAGS =
|
||||||
O = .o
|
O = .o
|
||||||
E =
|
E =
|
||||||
|
|
||||||
RPNG = rpng-x
|
RPNG = rpng-x
|
||||||
RPNG2 = rpng2-x
|
RPNG2 = rpng2-x
|
||||||
WPNG = wpng
|
WPNG = wpng
|
||||||
|
|
||||||
RPNGs = $(RPNG)-static
|
|
||||||
RPNG2s = $(RPNG2)-static
|
|
||||||
WPNGs = $(WPNG)-static
|
|
||||||
|
|
||||||
ROBJS = $(RPNG)$(O) readpng$(O)
|
ROBJS = $(RPNG)$(O) readpng$(O)
|
||||||
ROBJS2 = $(RPNG2)$(O) readpng2$(O)
|
ROBJS2 = $(RPNG2)$(O) readpng2$(O)
|
||||||
WOBJS = $(WPNG)$(O) writepng$(O)
|
WOBJS = $(WPNG)$(O) writepng$(O)
|
||||||
|
|
||||||
STATIC_EXES = $(RPNGs)$(E) $(RPNG2s)$(E) $(WPNGs)$(E)
|
EXES = $(RPNG)$(E) $(RPNG2)$(E) $(WPNG)$(E)
|
||||||
DYNAMIC_EXES = $(RPNG)$(E) $(RPNG2)$(E) $(WPNG)$(E)
|
|
||||||
|
|
||||||
EXES = $(STATIC_EXES) $(DYNAMIC_EXES)
|
|
||||||
|
|
||||||
|
|
||||||
# implicit make rules -------------------------------------------------------
|
# implicit make rules -------------------------------------------------------
|
||||||
|
|
||||||
.c$(O):
|
.c$(O):
|
||||||
$(CC) -c $(CPPFLAGS) $(CFLAGS) $<
|
$(CC) -c $(CFLAGS) $<
|
||||||
|
|
||||||
|
|
||||||
# dependencies --------------------------------------------------------------
|
# dependencies --------------------------------------------------------------
|
||||||
|
|
||||||
all: $(EXES)
|
all: $(EXES)
|
||||||
|
|
||||||
$(RPNGs)$(E): $(ROBJS)
|
|
||||||
$(LD) $(LDFLAGS) -o $@ $(ROBJS) $(RLIBSs)
|
|
||||||
|
|
||||||
$(RPNG)$(E): $(ROBJS)
|
$(RPNG)$(E): $(ROBJS)
|
||||||
$(LD) $(LDFLAGS) -o $@ $(ROBJS) $(RLIBSd)
|
$(LD) $(LDFLAGS) -o $@ $(ROBJS) $(RLIBS)
|
||||||
|
|
||||||
$(RPNG2s)$(E): $(ROBJS2)
|
|
||||||
$(LD) $(LDFLAGS) -o $@ $(ROBJS2) $(RLIBSs)
|
|
||||||
|
|
||||||
$(RPNG2)$(E): $(ROBJS2)
|
$(RPNG2)$(E): $(ROBJS2)
|
||||||
$(LD) $(LDFLAGS) -o $@ $(ROBJS2) $(RLIBSd)
|
$(LD) $(LDFLAGS) -o $@ $(ROBJS2) $(RLIBS)
|
||||||
|
|
||||||
$(WPNGs)$(E): $(WOBJS)
|
|
||||||
$(LD) $(LDFLAGS) -o $@ $(WOBJS) $(WLIBSs)
|
|
||||||
|
|
||||||
$(WPNG)$(E): $(WOBJS)
|
$(WPNG)$(E): $(WOBJS)
|
||||||
$(LD) $(LDFLAGS) -o $@ $(WOBJS) $(WLIBSd)
|
$(LD) $(LDFLAGS) -o $@ $(WOBJS) $(WLIBS)
|
||||||
|
|
||||||
$(RPNG)$(O): $(RPNG).c readpng.h
|
$(RPNG)$(O): $(RPNG).c readpng.h
|
||||||
$(RPNG2)$(O): $(RPNG2).c readpng2.h
|
$(RPNG2)$(O): $(RPNG2).c readpng2.h
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
# Sample makefile for rpng-win / rpng2-win / wpng using MSVC and NMAKE.
|
# Sample makefile for rpng-win / rpng2-win / wpng using MSVC and NMAKE.
|
||||||
# Greg Roelofs
|
# Greg Roelofs
|
||||||
# Last modified: 2 June 2007
|
# Last modified: 16 February 1999
|
||||||
#
|
#
|
||||||
# The programs built by this makefile are described in the book,
|
# The programs built by this makefile are described in the book,
|
||||||
# "PNG: The Definitive Guide," by Greg Roelofs (O'Reilly and
|
# "PNG: The Definitive Guide," by Greg Roelofs (O'Reilly and
|
||||||
# Associates, 1999). Go buy a copy, eh? Well, OK, it's not
|
# Associates, 1999). Go buy a copy, eh? Buy some for friends
|
||||||
# generally for sale anymore, but it's the thought that counts,
|
# and family, too. (Not that this is a blatant plug or anything.)
|
||||||
# right? (Hint: http://www.libpng.org/pub/png/book/ )
|
|
||||||
#
|
#
|
||||||
# Invoke this makefile from a DOS prompt window via:
|
# Invoke this makefile from a DOS prompt window via:
|
||||||
#
|
#
|
||||||
@@ -53,9 +52,8 @@ WLIBS = $(PNGLIB) $(ZLIB)
|
|||||||
CC = cl
|
CC = cl
|
||||||
LD = link
|
LD = link
|
||||||
RM = del
|
RM = del
|
||||||
CPPFLAGS = $(INCS)
|
CFLAGS = -nologo -O -W3 $(INCS) $(cvars)
|
||||||
CFLAGS = -nologo -O -W3 $(cvars)
|
# [note that -Wall is an MSVC-specific compilation flag ("all warnings on")]
|
||||||
# [note that -W3 is an MSVC-specific compilation flag ("all warnings on")]
|
|
||||||
# [see %devstudio%\vc\include\win32.mak for cvars macro definition]
|
# [see %devstudio%\vc\include\win32.mak for cvars macro definition]
|
||||||
O = .obj
|
O = .obj
|
||||||
E = .exe
|
E = .exe
|
||||||
@@ -77,7 +75,7 @@ EXES = $(RPNG)$(E) $(RPNG2)$(E) $(WPNG)$(E)
|
|||||||
# implicit make rules -------------------------------------------------------
|
# implicit make rules -------------------------------------------------------
|
||||||
|
|
||||||
.c$(O):
|
.c$(O):
|
||||||
$(CC) -c $(CPPFLAGS) $(CFLAGS) $<
|
$(CC) -c $(CFLAGS) $<
|
||||||
|
|
||||||
|
|
||||||
# dependencies --------------------------------------------------------------
|
# dependencies --------------------------------------------------------------
|
||||||
|
|||||||
@@ -22,8 +22,7 @@ below.
|
|||||||
Files:
|
Files:
|
||||||
|
|
||||||
README this file
|
README this file
|
||||||
LICENSE terms of distribution and reuse (BSD-like or GNU GPL)
|
LICENSE terms of distribution and reuse (BSD-like)
|
||||||
COPYING GNU General Public License (GPL)
|
|
||||||
|
|
||||||
Makefile.unx Unix makefile
|
Makefile.unx Unix makefile
|
||||||
Makefile.w32 Windows (MSVC) makefile
|
Makefile.w32 Windows (MSVC) makefile
|
||||||
@@ -55,17 +54,17 @@ mation and links to the latest version of the source code, and Chapters
|
|||||||
13-15 of the book for detailed discussion of the three programs.
|
13-15 of the book for detailed discussion of the three programs.
|
||||||
|
|
||||||
Greg Roelofs
|
Greg Roelofs
|
||||||
http://pobox.com/~newt/greg_contact.html
|
newt@pobox.com
|
||||||
16 March 2008
|
30 June 2001
|
||||||
|
|
||||||
|
|
||||||
BUILD INSTRUCTIONS
|
BUILD INSTRUCTIONS
|
||||||
|
|
||||||
- Prerequisites (in order of compilation):
|
- Prerequisites (in order of compilation):
|
||||||
|
|
||||||
- zlib http://zlib.net/
|
- zlib http://www.gzip.org/zlib/
|
||||||
- libpng http://www.libpng.org/pub/png/libpng.html
|
- libpng http://www.libpng.org/pub/png/libpng.html
|
||||||
- pngbook http://www.libpng.org/pub/png/book/sources.html
|
- pngbook http://www.libpng.org/pub/png/book/sources.html
|
||||||
|
|
||||||
The pngbook demo programs are explicitly designed to demonstrate proper
|
The pngbook demo programs are explicitly designed to demonstrate proper
|
||||||
coding techniques for using the libpng reference library. As a result,
|
coding techniques for using the libpng reference library. As a result,
|
||||||
@@ -151,9 +150,9 @@ BUILD INSTRUCTIONS
|
|||||||
To run the programs, they probably first need to be set up as "foreign
|
To run the programs, they probably first need to be set up as "foreign
|
||||||
symbols," with "disk" and "dir" set appropriately:
|
symbols," with "disk" and "dir" set appropriately:
|
||||||
|
|
||||||
$ rpng == "$disk:[dir]rpng-x.exe"
|
$ rpng == "$disk:[dir]rpng-x.exe"
|
||||||
$ rpng2 == "$disk:[dir]rpng2-x.exe"
|
$ rpng2 == "$disk:[dir]rpng2-x.exe"
|
||||||
$ wpng == "$disk:[dir]wpng.exe"
|
$ wpng == "$disk:[dir]wpng.exe"
|
||||||
|
|
||||||
All three will print a basic usage screen when run without any command-
|
All three will print a basic usage screen when run without any command-
|
||||||
line arguments; see the book for more details. Note that the options
|
line arguments; see the book for more details. Note that the options
|
||||||
@@ -165,19 +164,19 @@ RUNNING THE PROGRAMS: (VERY) BRIEF INTRO
|
|||||||
rpng is a simple PNG viewer that can display transparent PNGs with a
|
rpng is a simple PNG viewer that can display transparent PNGs with a
|
||||||
specified background color; for example,
|
specified background color; for example,
|
||||||
|
|
||||||
rpng -bgcolor \#ff0000 toucan.png
|
rpng -bgcolor #ff0000 toucan.png
|
||||||
|
|
||||||
would display the image with a red background. rpng2 is a progressive
|
would display the image with a red background. rpng2 is a progressive
|
||||||
viewer that simulates a web browser in some respects; it can display
|
viewer that simulates a web browser in some respects; it can display
|
||||||
images against either a background color or a dynamically generated
|
images against either a background color or a dynamically generated
|
||||||
background image. For example:
|
background image. For example:
|
||||||
|
|
||||||
rpng2 -bgpat 16 toucan.png
|
rpng2 -bgpat 16 toucan.png
|
||||||
|
|
||||||
wpng is a purely command-line image converter from binary PBMPLUS/NetPBM
|
wpng is a purely command-line image converter from binary PBMPLUS/NetPBM
|
||||||
format (.pgm or .ppm) to PNG; for example,
|
format (.pgm or .ppm) to PNG; for example,
|
||||||
|
|
||||||
wpng -time < toucan-notrans.ppm > toucan-notrans.png
|
wpng -time < toucan.ppm > toucan.png
|
||||||
|
|
||||||
would convert the specified PPM file (using redirection) to PNG, auto-
|
would convert the specified PPM file (using redirection) to PNG, auto-
|
||||||
matically setting the PNG modification-time chunk.
|
matically setting the PNG modification-time chunk.
|
||||||
|
|||||||
@@ -4,20 +4,13 @@
|
|||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-2007 Greg Roelofs. All rights reserved.
|
Copyright (c) 1998-2000 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
be held liable for any damages arising in any way from the use of
|
be held liable for any damages arising in any way from the use of
|
||||||
this software.
|
this software.
|
||||||
|
|
||||||
The contents of this file are DUAL-LICENSED. You may modify and/or
|
|
||||||
redistribute this software according to the terms of one of the
|
|
||||||
following two licenses (at your option):
|
|
||||||
|
|
||||||
|
|
||||||
LICENSE 1 ("BSD-like with advertising clause"):
|
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute
|
including commercial applications, and to alter it and redistribute
|
||||||
it freely, subject to the following restrictions:
|
it freely, subject to the following restrictions:
|
||||||
@@ -34,30 +27,12 @@
|
|||||||
and contributors for the book, "PNG: The Definitive Guide,"
|
and contributors for the book, "PNG: The Definitive Guide,"
|
||||||
published by O'Reilly and Associates.
|
published by O'Reilly and Associates.
|
||||||
|
|
||||||
|
|
||||||
LICENSE 2 (GNU GPL v2 or later):
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------*/
|
---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <zlib.h>
|
|
||||||
|
|
||||||
#include "png.h" /* libpng header */
|
#include "png.h" /* libpng header; includes zlib.h */
|
||||||
#include "readpng.h" /* typedefs, common macros, public prototypes */
|
#include "readpng.h" /* typedefs, common macros, public prototypes */
|
||||||
|
|
||||||
/* future versions of libpng will provide this macro: */
|
/* future versions of libpng will provide this macro: */
|
||||||
@@ -94,7 +69,7 @@ int readpng_init(FILE *infile, ulg *pWidth, ulg *pHeight)
|
|||||||
* have used slightly more general png_sig_cmp() function instead */
|
* have used slightly more general png_sig_cmp() function instead */
|
||||||
|
|
||||||
fread(sig, 1, 8, infile);
|
fread(sig, 1, 8, infile);
|
||||||
if (png_sig_cmp(sig, 0, 8))
|
if (!png_check_sig(sig, 8))
|
||||||
return 1; /* bad signature */
|
return 1; /* bad signature */
|
||||||
|
|
||||||
|
|
||||||
@@ -215,10 +190,6 @@ uch *readpng_get_image(double display_exponent, int *pChannels, ulg *pRowbytes)
|
|||||||
* libpng function */
|
* libpng function */
|
||||||
|
|
||||||
if (setjmp(png_jmpbuf(png_ptr))) {
|
if (setjmp(png_jmpbuf(png_ptr))) {
|
||||||
free(image_data);
|
|
||||||
image_data = NULL;
|
|
||||||
free(row_pointers);
|
|
||||||
row_pointers = NULL;
|
|
||||||
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
|
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -234,14 +205,8 @@ uch *readpng_get_image(double display_exponent, int *pChannels, ulg *pRowbytes)
|
|||||||
png_set_expand(png_ptr);
|
png_set_expand(png_ptr);
|
||||||
if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS))
|
if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS))
|
||||||
png_set_expand(png_ptr);
|
png_set_expand(png_ptr);
|
||||||
#ifdef PNG_READ_16_TO_8_SUPPORTED
|
|
||||||
if (bit_depth == 16)
|
if (bit_depth == 16)
|
||||||
# ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
|
|
||||||
png_set_scale_16(png_ptr);
|
|
||||||
# else
|
|
||||||
png_set_strip_16(png_ptr);
|
png_set_strip_16(png_ptr);
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
if (color_type == PNG_COLOR_TYPE_GRAY ||
|
if (color_type == PNG_COLOR_TYPE_GRAY ||
|
||||||
color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
|
color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
|
||||||
png_set_gray_to_rgb(png_ptr);
|
png_set_gray_to_rgb(png_ptr);
|
||||||
@@ -274,8 +239,7 @@ uch *readpng_get_image(double display_exponent, int *pChannels, ulg *pRowbytes)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
Trace((stderr, "readpng_get_image: channels = %d, rowbytes = %ld, height = %ld\n",
|
Trace((stderr, "readpng_get_image: channels = %d, rowbytes = %ld, height = %ld\n", *pChannels, rowbytes, height));
|
||||||
*pChannels, rowbytes, height));
|
|
||||||
|
|
||||||
|
|
||||||
/* set the individual row_pointers to point at the correct offsets */
|
/* set the individual row_pointers to point at the correct offsets */
|
||||||
|
|||||||
@@ -4,20 +4,13 @@
|
|||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-2007 Greg Roelofs. All rights reserved.
|
Copyright (c) 1998-2000 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
be held liable for any damages arising in any way from the use of
|
be held liable for any damages arising in any way from the use of
|
||||||
this software.
|
this software.
|
||||||
|
|
||||||
The contents of this file are DUAL-LICENSED. You may modify and/or
|
|
||||||
redistribute this software according to the terms of one of the
|
|
||||||
following two licenses (at your option):
|
|
||||||
|
|
||||||
|
|
||||||
LICENSE 1 ("BSD-like with advertising clause"):
|
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute
|
including commercial applications, and to alter it and redistribute
|
||||||
it freely, subject to the following restrictions:
|
it freely, subject to the following restrictions:
|
||||||
@@ -34,23 +27,6 @@
|
|||||||
and contributors for the book, "PNG: The Definitive Guide,"
|
and contributors for the book, "PNG: The Definitive Guide,"
|
||||||
published by O'Reilly and Associates.
|
published by O'Reilly and Associates.
|
||||||
|
|
||||||
|
|
||||||
LICENSE 2 (GNU GPL v2 or later):
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------*/
|
---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#ifndef TRUE
|
#ifndef TRUE
|
||||||
|
|||||||
@@ -4,20 +4,13 @@
|
|||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-2007 Greg Roelofs. All rights reserved.
|
Copyright (c) 1998-2001 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
be held liable for any damages arising in any way from the use of
|
be held liable for any damages arising in any way from the use of
|
||||||
this software.
|
this software.
|
||||||
|
|
||||||
The contents of this file are DUAL-LICENSED. You may modify and/or
|
|
||||||
redistribute this software according to the terms of one of the
|
|
||||||
following two licenses (at your option):
|
|
||||||
|
|
||||||
|
|
||||||
LICENSE 1 ("BSD-like with advertising clause"):
|
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute
|
including commercial applications, and to alter it and redistribute
|
||||||
it freely, subject to the following restrictions:
|
it freely, subject to the following restrictions:
|
||||||
@@ -34,31 +27,12 @@
|
|||||||
and contributors for the book, "PNG: The Definitive Guide,"
|
and contributors for the book, "PNG: The Definitive Guide,"
|
||||||
published by O'Reilly and Associates.
|
published by O'Reilly and Associates.
|
||||||
|
|
||||||
|
|
||||||
LICENSE 2 (GNU GPL v2 or later):
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------*/
|
---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
#include <stdlib.h> /* for exit() prototype */
|
#include <stdlib.h> /* for exit() prototype */
|
||||||
#include <setjmp.h>
|
|
||||||
|
|
||||||
#include <zlib.h>
|
#include "png.h" /* libpng header; includes zlib.h and setjmp.h */
|
||||||
#include "png.h" /* libpng header from the local directory */
|
|
||||||
#include "readpng2.h" /* typedefs, common macros, public prototypes */
|
#include "readpng2.h" /* typedefs, common macros, public prototypes */
|
||||||
|
|
||||||
|
|
||||||
@@ -75,10 +49,79 @@ static void readpng2_error_handler(png_structp png_ptr, png_const_charp msg);
|
|||||||
|
|
||||||
void readpng2_version_info(void)
|
void readpng2_version_info(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, " Compiled with libpng %s; using libpng %s\n",
|
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED) && \
|
||||||
PNG_LIBPNG_VER_STRING, png_libpng_ver);
|
(defined(__i386__) || defined(_M_IX86)) && \
|
||||||
|
defined(PNG_LIBPNG_VER) && (PNG_LIBPNG_VER >= 10200)
|
||||||
|
/*
|
||||||
|
* WARNING: This preprocessor approach means that the following code
|
||||||
|
* cannot be used with a libpng DLL older than 1.2.0--the
|
||||||
|
* compiled-in symbols for the new functions will not exist.
|
||||||
|
* (Could use dlopen() and dlsym() on Unix and corresponding
|
||||||
|
* calls for Windows, but not portable...)
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
int mmxsupport = png_mmx_support();
|
||||||
|
if (mmxsupport < 0)
|
||||||
|
fprintf(stderr, " Compiled with libpng %s; using libpng %s "
|
||||||
|
"without MMX support.\n", PNG_LIBPNG_VER_STRING, png_libpng_ver);
|
||||||
|
else {
|
||||||
|
int compilerID;
|
||||||
|
png_uint_32 mmx_mask = png_get_mmx_flagmask(
|
||||||
|
PNG_SELECT_READ | PNG_SELECT_WRITE, &compilerID);
|
||||||
|
|
||||||
fprintf(stderr, " and with zlib %s; using zlib %s.\n",
|
fprintf(stderr, " Compiled with libpng %s; using libpng %s "
|
||||||
|
"with MMX support\n (%s version).", PNG_LIBPNG_VER_STRING,
|
||||||
|
png_libpng_ver, compilerID == 1? "MSVC++" :
|
||||||
|
(compilerID == 2? "GNU C" : "unknown"));
|
||||||
|
fprintf(stderr, " Processor %s MMX instructions.\n",
|
||||||
|
mmxsupport? "supports" : "does not support");
|
||||||
|
if (mmxsupport > 0) {
|
||||||
|
int num_optims = 0;
|
||||||
|
|
||||||
|
fprintf(stderr,
|
||||||
|
" Potential MMX optimizations supported by libpng:\n");
|
||||||
|
if (mmx_mask & PNG_ASM_FLAG_MMX_READ_FILTER_SUB)
|
||||||
|
++num_optims;
|
||||||
|
if (mmx_mask & PNG_ASM_FLAG_MMX_READ_FILTER_UP)
|
||||||
|
++num_optims;
|
||||||
|
if (mmx_mask & PNG_ASM_FLAG_MMX_READ_FILTER_AVG)
|
||||||
|
++num_optims;
|
||||||
|
if (mmx_mask & PNG_ASM_FLAG_MMX_READ_FILTER_PAETH)
|
||||||
|
++num_optims;
|
||||||
|
if (num_optims)
|
||||||
|
fprintf(stderr,
|
||||||
|
" decoding %s row filters (reading)\n",
|
||||||
|
(num_optims == 4)? "all non-trivial" : "some");
|
||||||
|
if (mmx_mask & PNG_ASM_FLAG_MMX_READ_COMBINE_ROW) {
|
||||||
|
fprintf(stderr, " combining rows (reading)\n");
|
||||||
|
++num_optims;
|
||||||
|
}
|
||||||
|
if (mmx_mask & PNG_ASM_FLAG_MMX_READ_INTERLACE) {
|
||||||
|
fprintf(stderr,
|
||||||
|
" expanding interlacing (reading)\n");
|
||||||
|
++num_optims;
|
||||||
|
}
|
||||||
|
mmx_mask &= ~( PNG_ASM_FLAG_MMX_READ_COMBINE_ROW \
|
||||||
|
| PNG_ASM_FLAG_MMX_READ_INTERLACE \
|
||||||
|
| PNG_ASM_FLAG_MMX_READ_FILTER_SUB \
|
||||||
|
| PNG_ASM_FLAG_MMX_READ_FILTER_UP \
|
||||||
|
| PNG_ASM_FLAG_MMX_READ_FILTER_AVG \
|
||||||
|
| PNG_ASM_FLAG_MMX_READ_FILTER_PAETH );
|
||||||
|
if (mmx_mask) {
|
||||||
|
fprintf(stderr, " other (unknown)\n");
|
||||||
|
++num_optims;
|
||||||
|
}
|
||||||
|
if (num_optims == 0)
|
||||||
|
fprintf(stderr, " (none)\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
fprintf(stderr, " Compiled with libpng %s; using libpng %s "
|
||||||
|
"without MMX support.\n", PNG_LIBPNG_VER_STRING, png_libpng_ver);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
fprintf(stderr, " Compiled with zlib %s; using zlib %s.\n",
|
||||||
ZLIB_VERSION, zlib_version);
|
ZLIB_VERSION, zlib_version);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,7 +130,7 @@ void readpng2_version_info(void)
|
|||||||
|
|
||||||
int readpng2_check_sig(uch *sig, int num)
|
int readpng2_check_sig(uch *sig, int num)
|
||||||
{
|
{
|
||||||
return !png_sig_cmp(sig, 0, num);
|
return png_check_sig(sig, num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -131,38 +174,6 @@ int readpng2_init(mainprog_info *mainprog_ptr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
|
|
||||||
/* prepare the reader to ignore all recognized chunks whose data won't be
|
|
||||||
* used, i.e., all chunks recognized by libpng except for IHDR, PLTE, IDAT,
|
|
||||||
* IEND, tRNS, bKGD, gAMA, and sRGB (small performance improvement) */
|
|
||||||
{
|
|
||||||
/* These byte strings were copied from png.h. If a future libpng
|
|
||||||
* version recognizes more chunks, add them to this list. If a
|
|
||||||
* future version of readpng2.c recognizes more chunks, delete them
|
|
||||||
* from this list. */
|
|
||||||
static /* const */ png_byte chunks_to_ignore[] = {
|
|
||||||
99, 72, 82, 77, '\0', /* cHRM */
|
|
||||||
104, 73, 83, 84, '\0', /* hIST */
|
|
||||||
105, 67, 67, 80, '\0', /* iCCP */
|
|
||||||
105, 84, 88, 116, '\0', /* iTXt */
|
|
||||||
111, 70, 70, 115, '\0', /* oFFs */
|
|
||||||
112, 67, 65, 76, '\0', /* pCAL */
|
|
||||||
112, 72, 89, 115, '\0', /* pHYs */
|
|
||||||
115, 66, 73, 84, '\0', /* sBIT */
|
|
||||||
115, 67, 65, 76, '\0', /* sCAL */
|
|
||||||
115, 80, 76, 84, '\0', /* sPLT */
|
|
||||||
115, 84, 69, 82, '\0', /* sTER */
|
|
||||||
116, 69, 88, 116, '\0', /* tEXt */
|
|
||||||
116, 73, 77, 69, '\0', /* tIME */
|
|
||||||
122, 84, 88, 116, '\0' /* zTXt */
|
|
||||||
};
|
|
||||||
|
|
||||||
png_set_keep_unknown_chunks(png_ptr, 1 /* PNG_HANDLE_CHUNK_NEVER */,
|
|
||||||
chunks_to_ignore, sizeof(chunks_to_ignore)/5);
|
|
||||||
}
|
|
||||||
#endif /* PNG_HANDLE_AS_UNKNOWN_SUPPORTED */
|
|
||||||
|
|
||||||
|
|
||||||
/* instead of doing png_init_io() here, now we set up our callback
|
/* instead of doing png_init_io() here, now we set up our callback
|
||||||
* functions for progressive decoding */
|
* functions for progressive decoding */
|
||||||
|
|
||||||
@@ -170,6 +181,96 @@ int readpng2_init(mainprog_info *mainprog_ptr)
|
|||||||
readpng2_info_callback, readpng2_row_callback, readpng2_end_callback);
|
readpng2_info_callback, readpng2_row_callback, readpng2_end_callback);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* may as well enable or disable MMX routines here, if supported;
|
||||||
|
*
|
||||||
|
* to enable all: mask = png_get_mmx_flagmask (
|
||||||
|
* PNG_SELECT_READ | PNG_SELECT_WRITE, &compilerID);
|
||||||
|
* flags = png_get_asm_flags (png_ptr);
|
||||||
|
* flags |= mask;
|
||||||
|
* png_set_asm_flags (png_ptr, flags);
|
||||||
|
*
|
||||||
|
* to disable all: mask = png_get_mmx_flagmask (
|
||||||
|
* PNG_SELECT_READ | PNG_SELECT_WRITE, &compilerID);
|
||||||
|
* flags = png_get_asm_flags (png_ptr);
|
||||||
|
* flags &= ~mask;
|
||||||
|
* png_set_asm_flags (png_ptr, flags);
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if (defined(__i386__) || defined(_M_IX86)) && \
|
||||||
|
defined(PNG_LIBPNG_VER) && (PNG_LIBPNG_VER >= 10200)
|
||||||
|
/*
|
||||||
|
* WARNING: This preprocessor approach means that the following code
|
||||||
|
* cannot be used with a libpng DLL older than 1.2.0--the
|
||||||
|
* compiled-in symbols for the new functions will not exist.
|
||||||
|
* (Could use dlopen() and dlsym() on Unix and corresponding
|
||||||
|
* calls for Windows, but not portable...)
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
#ifdef PNG_ASSEMBLER_CODE_SUPPORTED
|
||||||
|
png_uint_32 mmx_disable_mask = 0;
|
||||||
|
png_uint_32 asm_flags, mmx_mask;
|
||||||
|
int compilerID;
|
||||||
|
|
||||||
|
if (mainprog_ptr->nommxfilters)
|
||||||
|
mmx_disable_mask |= ( PNG_ASM_FLAG_MMX_READ_FILTER_SUB \
|
||||||
|
| PNG_ASM_FLAG_MMX_READ_FILTER_UP \
|
||||||
|
| PNG_ASM_FLAG_MMX_READ_FILTER_AVG \
|
||||||
|
| PNG_ASM_FLAG_MMX_READ_FILTER_PAETH );
|
||||||
|
if (mainprog_ptr->nommxcombine)
|
||||||
|
mmx_disable_mask |= PNG_ASM_FLAG_MMX_READ_COMBINE_ROW;
|
||||||
|
if (mainprog_ptr->nommxinterlace)
|
||||||
|
mmx_disable_mask |= PNG_ASM_FLAG_MMX_READ_INTERLACE;
|
||||||
|
asm_flags = png_get_asm_flags(png_ptr);
|
||||||
|
png_set_asm_flags(png_ptr, asm_flags & ~mmx_disable_mask);
|
||||||
|
|
||||||
|
|
||||||
|
/* Now query libpng's asm settings, just for yuks. Note that this
|
||||||
|
* differs from the querying of its *potential* MMX capabilities
|
||||||
|
* in readpng2_version_info(); this is true runtime verification. */
|
||||||
|
|
||||||
|
asm_flags = png_get_asm_flags(png_ptr);
|
||||||
|
mmx_mask = png_get_mmx_flagmask(PNG_SELECT_READ | PNG_SELECT_WRITE,
|
||||||
|
&compilerID);
|
||||||
|
if (asm_flags & PNG_ASM_FLAG_MMX_SUPPORT_COMPILED)
|
||||||
|
fprintf(stderr,
|
||||||
|
" MMX support (%s version) is compiled into libpng\n",
|
||||||
|
compilerID == 1? "MSVC++" :
|
||||||
|
(compilerID == 2? "GNU C" : "unknown"));
|
||||||
|
else
|
||||||
|
fprintf(stderr, " MMX support is not compiled into libpng\n");
|
||||||
|
fprintf(stderr, " MMX instructions are %ssupported by CPU\n",
|
||||||
|
(asm_flags & PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU)? "" : "not ");
|
||||||
|
fprintf(stderr, " MMX read support for combining rows is %sabled\n",
|
||||||
|
(asm_flags & PNG_ASM_FLAG_MMX_READ_COMBINE_ROW)? "en" : "dis");
|
||||||
|
fprintf(stderr,
|
||||||
|
" MMX read support for expanding interlacing is %sabled\n",
|
||||||
|
(asm_flags & PNG_ASM_FLAG_MMX_READ_INTERLACE)? "en" : "dis");
|
||||||
|
fprintf(stderr, " MMX read support for \"sub\" filter is %sabled\n",
|
||||||
|
(asm_flags & PNG_ASM_FLAG_MMX_READ_FILTER_SUB)? "en" : "dis");
|
||||||
|
fprintf(stderr, " MMX read support for \"up\" filter is %sabled\n",
|
||||||
|
(asm_flags & PNG_ASM_FLAG_MMX_READ_FILTER_UP)? "en" : "dis");
|
||||||
|
fprintf(stderr, " MMX read support for \"avg\" filter is %sabled\n",
|
||||||
|
(asm_flags & PNG_ASM_FLAG_MMX_READ_FILTER_AVG)? "en" : "dis");
|
||||||
|
fprintf(stderr, " MMX read support for \"Paeth\" filter is %sabled\n",
|
||||||
|
(asm_flags & PNG_ASM_FLAG_MMX_READ_FILTER_PAETH)? "en" : "dis");
|
||||||
|
asm_flags &= (mmx_mask & ~( PNG_ASM_FLAG_MMX_READ_COMBINE_ROW \
|
||||||
|
| PNG_ASM_FLAG_MMX_READ_INTERLACE \
|
||||||
|
| PNG_ASM_FLAG_MMX_READ_FILTER_SUB \
|
||||||
|
| PNG_ASM_FLAG_MMX_READ_FILTER_UP \
|
||||||
|
| PNG_ASM_FLAG_MMX_READ_FILTER_AVG \
|
||||||
|
| PNG_ASM_FLAG_MMX_READ_FILTER_PAETH ));
|
||||||
|
if (asm_flags)
|
||||||
|
fprintf(stderr,
|
||||||
|
" additional MMX support is also enabled (0x%02lx)\n",
|
||||||
|
asm_flags);
|
||||||
|
#else /* !PNG_ASSEMBLER_CODE_SUPPORTED */
|
||||||
|
fprintf(stderr, " MMX querying is disabled in libpng.\n");
|
||||||
|
#endif /* ?PNG_ASSEMBLER_CODE_SUPPORTED */
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* make sure we save our pointers for use in readpng2_decode_data() */
|
/* make sure we save our pointers for use in readpng2_decode_data() */
|
||||||
|
|
||||||
mainprog_ptr->png_ptr = png_ptr;
|
mainprog_ptr->png_ptr = png_ptr;
|
||||||
@@ -217,12 +318,7 @@ static void readpng2_info_callback(png_structp png_ptr, png_infop info_ptr)
|
|||||||
{
|
{
|
||||||
mainprog_info *mainprog_ptr;
|
mainprog_info *mainprog_ptr;
|
||||||
int color_type, bit_depth;
|
int color_type, bit_depth;
|
||||||
png_uint_32 width, height;
|
|
||||||
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
|
||||||
double gamma;
|
double gamma;
|
||||||
#else
|
|
||||||
png_fixed_point gamma;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* setjmp() doesn't make sense here, because we'd either have to exit(),
|
/* setjmp() doesn't make sense here, because we'd either have to exit(),
|
||||||
@@ -257,10 +353,8 @@ static void readpng2_info_callback(png_structp png_ptr, png_infop info_ptr)
|
|||||||
|
|
||||||
/* this is just like in the non-progressive case */
|
/* this is just like in the non-progressive case */
|
||||||
|
|
||||||
png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type,
|
png_get_IHDR(png_ptr, info_ptr, &mainprog_ptr->width,
|
||||||
NULL, NULL, NULL);
|
&mainprog_ptr->height, &bit_depth, &color_type, NULL, NULL, NULL);
|
||||||
mainprog_ptr->width = (ulg)width;
|
|
||||||
mainprog_ptr->height = (ulg)height;
|
|
||||||
|
|
||||||
|
|
||||||
/* since we know we've read all of the PNG file's "header" (i.e., up
|
/* since we know we've read all of the PNG file's "header" (i.e., up
|
||||||
@@ -311,14 +405,8 @@ static void readpng2_info_callback(png_structp png_ptr, png_infop info_ptr)
|
|||||||
png_set_expand(png_ptr);
|
png_set_expand(png_ptr);
|
||||||
if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS))
|
if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS))
|
||||||
png_set_expand(png_ptr);
|
png_set_expand(png_ptr);
|
||||||
#ifdef PNG_READ_16_TO_8_SUPPORTED
|
|
||||||
if (bit_depth == 16)
|
if (bit_depth == 16)
|
||||||
# ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
|
|
||||||
png_set_scale_16(png_ptr);
|
|
||||||
# else
|
|
||||||
png_set_strip_16(png_ptr);
|
png_set_strip_16(png_ptr);
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
if (color_type == PNG_COLOR_TYPE_GRAY ||
|
if (color_type == PNG_COLOR_TYPE_GRAY ||
|
||||||
color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
|
color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
|
||||||
png_set_gray_to_rgb(png_ptr);
|
png_set_gray_to_rgb(png_ptr);
|
||||||
@@ -339,19 +427,11 @@ static void readpng2_info_callback(png_structp png_ptr, png_infop info_ptr)
|
|||||||
* "gamma" value for the entire display system, i.e., the product of
|
* "gamma" value for the entire display system, i.e., the product of
|
||||||
* LUT_exponent and CRT_exponent. */
|
* LUT_exponent and CRT_exponent. */
|
||||||
|
|
||||||
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
|
||||||
if (png_get_gAMA(png_ptr, info_ptr, &gamma))
|
if (png_get_gAMA(png_ptr, info_ptr, &gamma))
|
||||||
png_set_gamma(png_ptr, mainprog_ptr->display_exponent, gamma);
|
png_set_gamma(png_ptr, mainprog_ptr->display_exponent, gamma);
|
||||||
else
|
else
|
||||||
png_set_gamma(png_ptr, mainprog_ptr->display_exponent, 0.45455);
|
png_set_gamma(png_ptr, mainprog_ptr->display_exponent, 0.45455);
|
||||||
#else
|
|
||||||
if (png_get_gAMA_fixed(png_ptr, info_ptr, &gamma))
|
|
||||||
png_set_gamma_fixed(png_ptr,
|
|
||||||
(png_fixed_point)(100000*mainprog_ptr->display_exponent+.5), gamma);
|
|
||||||
else
|
|
||||||
png_set_gamma_fixed(png_ptr,
|
|
||||||
(png_fixed_point)(100000*mainprog_ptr->display_exponent+.5), 45455);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* we'll let libpng expand interlaced images, too */
|
/* we'll let libpng expand interlaced images, too */
|
||||||
|
|
||||||
@@ -500,12 +580,5 @@ static void readpng2_error_handler(png_structp png_ptr, png_const_charp msg)
|
|||||||
exit(99);
|
exit(99);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now we have our data structure we can use the information in it
|
|
||||||
* to return control to our own higher level code (all the points
|
|
||||||
* where 'setjmp' is called in this file.) This will work with other
|
|
||||||
* error handling mechanisms as well - libpng always calls png_error
|
|
||||||
* when it can proceed no further, thus, so long as the error handler
|
|
||||||
* is intercepted, application code can do its own error recovery.
|
|
||||||
*/
|
|
||||||
longjmp(mainprog_ptr->jmpbuf, 1);
|
longjmp(mainprog_ptr->jmpbuf, 1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,20 +4,13 @@
|
|||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-2008 Greg Roelofs. All rights reserved.
|
Copyright (c) 1998-2001 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
be held liable for any damages arising in any way from the use of
|
be held liable for any damages arising in any way from the use of
|
||||||
this software.
|
this software.
|
||||||
|
|
||||||
The contents of this file are DUAL-LICENSED. You may modify and/or
|
|
||||||
redistribute this software according to the terms of one of the
|
|
||||||
following two licenses (at your option):
|
|
||||||
|
|
||||||
|
|
||||||
LICENSE 1 ("BSD-like with advertising clause"):
|
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute
|
including commercial applications, and to alter it and redistribute
|
||||||
it freely, subject to the following restrictions:
|
it freely, subject to the following restrictions:
|
||||||
@@ -34,23 +27,6 @@
|
|||||||
and contributors for the book, "PNG: The Definitive Guide,"
|
and contributors for the book, "PNG: The Definitive Guide,"
|
||||||
published by O'Reilly and Associates.
|
published by O'Reilly and Associates.
|
||||||
|
|
||||||
|
|
||||||
LICENSE 2 (GNU GPL v2 or later):
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------*/
|
---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#ifndef TRUE
|
#ifndef TRUE
|
||||||
@@ -69,12 +45,6 @@
|
|||||||
# define Trace(x) ;
|
# define Trace(x) ;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
enum rpng2_states {
|
|
||||||
kPreInit = 0,
|
|
||||||
kWindowInit,
|
|
||||||
kDone
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef unsigned char uch;
|
typedef unsigned char uch;
|
||||||
typedef unsigned short ush;
|
typedef unsigned short ush;
|
||||||
typedef unsigned long ulg;
|
typedef unsigned long ulg;
|
||||||
@@ -96,7 +66,12 @@ typedef struct _mainprog_info {
|
|||||||
int rowbytes;
|
int rowbytes;
|
||||||
int channels;
|
int channels;
|
||||||
int need_bgcolor;
|
int need_bgcolor;
|
||||||
int state;
|
#if (defined(__i386__) || defined(_M_IX86))
|
||||||
|
int nommxfilters;
|
||||||
|
int nommxcombine;
|
||||||
|
int nommxinterlace;
|
||||||
|
#endif
|
||||||
|
int done;
|
||||||
uch bg_red;
|
uch bg_red;
|
||||||
uch bg_green;
|
uch bg_green;
|
||||||
uch bg_blue;
|
uch bg_blue;
|
||||||
|
|||||||
@@ -1,179 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
rpng - simple PNG display program readppm.c
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
This is a special-purpose replacement for readpng.c that allows binary
|
|
||||||
PPM files to be used in place of PNG images.
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Copyright (c) 1998-2007 Greg Roelofs. All rights reserved.
|
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
|
||||||
express or implied. In no event shall the author or contributors
|
|
||||||
be held liable for any damages arising in any way from the use of
|
|
||||||
this software.
|
|
||||||
|
|
||||||
The contents of this file are DUAL-LICENSED. You may modify and/or
|
|
||||||
redistribute this software according to the terms of one of the
|
|
||||||
following two licenses (at your option):
|
|
||||||
|
|
||||||
|
|
||||||
LICENSE 1 ("BSD-like with advertising clause"):
|
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
|
||||||
including commercial applications, and to alter it and redistribute
|
|
||||||
it freely, subject to the following restrictions:
|
|
||||||
|
|
||||||
1. Redistributions of source code must retain the above copyright
|
|
||||||
notice, disclaimer, and this list of conditions.
|
|
||||||
2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, disclaimer, and this list of conditions in the documenta-
|
|
||||||
tion and/or other materials provided with the distribution.
|
|
||||||
3. All advertising materials mentioning features or use of this
|
|
||||||
software must display the following acknowledgment:
|
|
||||||
|
|
||||||
This product includes software developed by Greg Roelofs
|
|
||||||
and contributors for the book, "PNG: The Definitive Guide,"
|
|
||||||
published by O'Reilly and Associates.
|
|
||||||
|
|
||||||
|
|
||||||
LICENSE 2 (GNU GPL v2 or later):
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#include "readpng.h" /* typedefs, common macros, public prototypes */
|
|
||||||
|
|
||||||
|
|
||||||
ulg width, height;
|
|
||||||
int bit_depth, color_type, channels;
|
|
||||||
uch *image_data = NULL;
|
|
||||||
FILE *saved_infile;
|
|
||||||
|
|
||||||
|
|
||||||
void readpng_version_info()
|
|
||||||
{
|
|
||||||
fprintf(stderr, " Compiled without libpng, zlib or PBMPLUS/NetPBM.\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* return value = 0 for success, 1 for bad sig, 2 for bad IHDR, 4 for no mem */
|
|
||||||
|
|
||||||
int readpng_init(FILE *infile, ulg *pWidth, ulg *pHeight)
|
|
||||||
{
|
|
||||||
static uch ppmline[256];
|
|
||||||
int maxval;
|
|
||||||
|
|
||||||
|
|
||||||
saved_infile = infile;
|
|
||||||
|
|
||||||
fgets(ppmline, 256, infile);
|
|
||||||
if (ppmline[0] != 'P' || ppmline[1] != '6') {
|
|
||||||
fprintf(stderr, "ERROR: not a PPM file\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
/* possible color types: P5 = grayscale (0), P6 = RGB (2), P8 = RGBA (6) */
|
|
||||||
if (ppmline[1] == '6') {
|
|
||||||
color_type = 2;
|
|
||||||
channels = 3;
|
|
||||||
} else if (ppmline[1] == '8') {
|
|
||||||
color_type = 6;
|
|
||||||
channels = 4;
|
|
||||||
} else /* if (ppmline[1] == '5') */ {
|
|
||||||
color_type = 0;
|
|
||||||
channels = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
do {
|
|
||||||
fgets(ppmline, 256, infile);
|
|
||||||
} while (ppmline[0] == '#');
|
|
||||||
sscanf(ppmline, "%lu %lu", &width, &height);
|
|
||||||
|
|
||||||
do {
|
|
||||||
fgets(ppmline, 256, infile);
|
|
||||||
} while (ppmline[0] == '#');
|
|
||||||
sscanf(ppmline, "%d", &maxval);
|
|
||||||
if (maxval != 255) {
|
|
||||||
fprintf(stderr, "ERROR: maxval = %d\n", maxval);
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
bit_depth = 8;
|
|
||||||
|
|
||||||
*pWidth = width;
|
|
||||||
*pHeight = height;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* returns 0 if succeeds, 1 if fails due to no bKGD chunk, 2 if libpng error;
|
|
||||||
* scales values to 8-bit if necessary */
|
|
||||||
|
|
||||||
int readpng_get_bgcolor(uch *red, uch *green, uch *blue)
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* display_exponent == LUT_exponent * CRT_exponent */
|
|
||||||
|
|
||||||
uch *readpng_get_image(double display_exponent, int *pChannels, ulg *pRowbytes)
|
|
||||||
{
|
|
||||||
ulg rowbytes;
|
|
||||||
|
|
||||||
|
|
||||||
/* expand palette images to RGB, low-bit-depth grayscale images to 8 bits,
|
|
||||||
* transparency chunks to full alpha channel; strip 16-bit-per-sample
|
|
||||||
* images to 8 bits per sample; and convert grayscale to RGB[A] */
|
|
||||||
|
|
||||||
/* GRR WARNING: grayscale needs to be expanded and channels reset! */
|
|
||||||
|
|
||||||
*pRowbytes = rowbytes = channels*width;
|
|
||||||
*pChannels = channels;
|
|
||||||
|
|
||||||
if ((image_data = (uch *)malloc(rowbytes*height)) == NULL) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
Trace((stderr, "readpng_get_image: rowbytes = %ld, height = %ld\n", rowbytes, height));
|
|
||||||
|
|
||||||
|
|
||||||
/* now we can go ahead and just read the whole image */
|
|
||||||
|
|
||||||
fread(image_data, 1L, rowbytes*height, saved_infile);
|
|
||||||
|
|
||||||
|
|
||||||
return image_data;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void readpng_cleanup(int free_image_data)
|
|
||||||
{
|
|
||||||
if (free_image_data && image_data) {
|
|
||||||
free(image_data);
|
|
||||||
image_data = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -22,25 +22,16 @@
|
|||||||
- 1.02: added extra set of parentheses to png_jmpbuf() macro; fixed
|
- 1.02: added extra set of parentheses to png_jmpbuf() macro; fixed
|
||||||
command-line parsing bug
|
command-line parsing bug
|
||||||
- 1.10: enabled "message window"/console (thanks to David Geldreich)
|
- 1.10: enabled "message window"/console (thanks to David Geldreich)
|
||||||
- 2.00: dual-licensed (added GNU GPL)
|
|
||||||
- 2.01: fixed improper display of usage screen on PNG error(s)
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-2008 Greg Roelofs. All rights reserved.
|
Copyright (c) 1998-2001 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
be held liable for any damages arising in any way from the use of
|
be held liable for any damages arising in any way from the use of
|
||||||
this software.
|
this software.
|
||||||
|
|
||||||
The contents of this file are DUAL-LICENSED. You may modify and/or
|
|
||||||
redistribute this software according to the terms of one of the
|
|
||||||
following two licenses (at your option):
|
|
||||||
|
|
||||||
|
|
||||||
LICENSE 1 ("BSD-like with advertising clause"):
|
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute
|
including commercial applications, and to alter it and redistribute
|
||||||
it freely, subject to the following restrictions:
|
it freely, subject to the following restrictions:
|
||||||
@@ -57,61 +48,18 @@
|
|||||||
and contributors for the book, "PNG: The Definitive Guide,"
|
and contributors for the book, "PNG: The Definitive Guide,"
|
||||||
published by O'Reilly and Associates.
|
published by O'Reilly and Associates.
|
||||||
|
|
||||||
|
|
||||||
LICENSE 2 (GNU GPL v2 or later):
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------*/
|
---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#define PROGNAME "rpng-win"
|
#define PROGNAME "rpng-win"
|
||||||
#define LONGNAME "Simple PNG Viewer for Windows"
|
#define LONGNAME "Simple PNG Viewer for Windows"
|
||||||
#define VERSION "2.01 of 16 March 2008"
|
#define VERSION "1.20 of 28 May 2001"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#ifdef __CYGWIN__
|
|
||||||
/* getch replacement. Turns out, we don't really need this,
|
|
||||||
* but leave it here if we ever enable any of the uses of
|
|
||||||
* _getch in the main code
|
|
||||||
*/
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <termio.h>
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
int repl_getch( void )
|
|
||||||
{
|
|
||||||
char ch;
|
|
||||||
int fd = fileno(stdin);
|
|
||||||
struct termio old_tty, new_tty;
|
|
||||||
|
|
||||||
ioctl(fd, TCGETA, &old_tty);
|
|
||||||
new_tty = old_tty;
|
|
||||||
new_tty.c_lflag &= ~(ICANON | ECHO | ISIG);
|
|
||||||
ioctl(fd, TCSETA, &new_tty);
|
|
||||||
fread(&ch, 1, sizeof(ch), stdin);
|
|
||||||
ioctl(fd, TCSETA, &old_tty);
|
|
||||||
|
|
||||||
return ch;
|
|
||||||
}
|
|
||||||
#define _getch repl_getch
|
|
||||||
#else
|
|
||||||
#include <conio.h> /* only for _getch() */
|
#include <conio.h> /* only for _getch() */
|
||||||
#endif
|
|
||||||
|
|
||||||
/* #define DEBUG : this enables the Trace() macros */
|
/* #define DEBUG : this enables the Trace() macros */
|
||||||
|
|
||||||
@@ -137,9 +85,10 @@ static void rpng_win_cleanup(void);
|
|||||||
LRESULT CALLBACK rpng_win_wndproc(HWND, UINT, WPARAM, LPARAM);
|
LRESULT CALLBACK rpng_win_wndproc(HWND, UINT, WPARAM, LPARAM);
|
||||||
|
|
||||||
|
|
||||||
static char titlebar[1024];
|
static char titlebar[1024], *window_name = titlebar;
|
||||||
static char *progname = PROGNAME;
|
static char *progname = PROGNAME;
|
||||||
static char *appname = LONGNAME;
|
static char *appname = LONGNAME;
|
||||||
|
static char *icon_name = PROGNAME; /* GRR: not (yet) used */
|
||||||
static char *filename;
|
static char *filename;
|
||||||
static FILE *infile;
|
static FILE *infile;
|
||||||
|
|
||||||
@@ -179,7 +128,7 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
|||||||
|
|
||||||
filename = (char *)NULL;
|
filename = (char *)NULL;
|
||||||
|
|
||||||
#ifndef __CYGWIN__
|
|
||||||
/* First reenable console output, which normally goes to the bit bucket
|
/* First reenable console output, which normally goes to the bit bucket
|
||||||
* for windowed apps. Closing the console window will terminate the
|
* for windowed apps. Closing the console window will terminate the
|
||||||
* app. Thanks to David.Geldreich@realviz.com for supplying the magical
|
* app. Thanks to David.Geldreich@realviz.com for supplying the magical
|
||||||
@@ -188,7 +137,6 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
|||||||
AllocConsole();
|
AllocConsole();
|
||||||
freopen("CONOUT$", "a", stderr);
|
freopen("CONOUT$", "a", stderr);
|
||||||
freopen("CONOUT$", "a", stdout);
|
freopen("CONOUT$", "a", stdout);
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Next set the default value for our display-system exponent, i.e.,
|
/* Next set the default value for our display-system exponent, i.e.,
|
||||||
@@ -299,43 +247,9 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!filename)
|
if (!filename) {
|
||||||
++error;
|
++error;
|
||||||
|
} else if (!(infile = fopen(filename, "rb"))) {
|
||||||
|
|
||||||
/* print usage screen if any errors up to this point */
|
|
||||||
|
|
||||||
if (error) {
|
|
||||||
#ifndef __CYGWIN__
|
|
||||||
int ch;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
fprintf(stderr, "\n%s %s: %s\n\n", PROGNAME, VERSION, appname);
|
|
||||||
readpng_version_info();
|
|
||||||
fprintf(stderr, "\n"
|
|
||||||
"Usage: %s [-gamma exp] [-bgcolor bg] file.png\n"
|
|
||||||
" exp \ttransfer-function exponent (``gamma'') of the display\n"
|
|
||||||
"\t\t system in floating-point format (e.g., ``%.1f''); equal\n"
|
|
||||||
"\t\t to the product of the lookup-table exponent (varies)\n"
|
|
||||||
"\t\t and the CRT exponent (usually 2.2); must be positive\n"
|
|
||||||
" bg \tdesired background color in 7-character hex RGB format\n"
|
|
||||||
"\t\t (e.g., ``#ff7700'' for orange: same as HTML colors);\n"
|
|
||||||
"\t\t used with transparent images\n"
|
|
||||||
"\nPress Q, Esc or mouse button 1 after image is displayed to quit.\n"
|
|
||||||
#ifndef __CYGWIN__
|
|
||||||
"Press Q or Esc to quit this usage screen.\n"
|
|
||||||
#endif
|
|
||||||
"\n", PROGNAME, default_display_exponent);
|
|
||||||
#ifndef __CYGWIN__
|
|
||||||
do
|
|
||||||
ch = _getch();
|
|
||||||
while (ch != 'q' && ch != 'Q' && ch != 0x1B);
|
|
||||||
#endif
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (!(infile = fopen(filename, "rb"))) {
|
|
||||||
fprintf(stderr, PROGNAME ": can't open PNG file [%s]\n", filename);
|
fprintf(stderr, PROGNAME ": can't open PNG file [%s]\n", filename);
|
||||||
++error;
|
++error;
|
||||||
} else {
|
} else {
|
||||||
@@ -348,7 +262,8 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
|||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
fprintf(stderr, PROGNAME
|
fprintf(stderr, PROGNAME
|
||||||
": [%s] has bad IHDR (libpng longjmp)\n", filename);
|
": [%s] has bad IHDR (libpng longjmp)\n",
|
||||||
|
filename);
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
fprintf(stderr, PROGNAME ": insufficient memory\n");
|
fprintf(stderr, PROGNAME ": insufficient memory\n");
|
||||||
@@ -365,25 +280,34 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (error) {
|
/* usage screen */
|
||||||
#ifndef __CYGWIN__
|
|
||||||
int ch;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
fprintf(stderr, PROGNAME ": aborting.\n");
|
if (error) {
|
||||||
#ifndef __CYGWIN__
|
int ch;
|
||||||
|
|
||||||
|
fprintf(stderr, "\n%s %s: %s\n\n", PROGNAME, VERSION, appname);
|
||||||
|
readpng_version_info();
|
||||||
|
fprintf(stderr, "\n"
|
||||||
|
"Usage: %s [-gamma exp] [-bgcolor bg] file.png\n"
|
||||||
|
" exp \ttransfer-function exponent (``gamma'') of the display\n"
|
||||||
|
"\t\t system in floating-point format (e.g., ``%.1f''); equal\n"
|
||||||
|
"\t\t to the product of the lookup-table exponent (varies)\n"
|
||||||
|
"\t\t and the CRT exponent (usually 2.2); must be positive\n"
|
||||||
|
" bg \tdesired background color in 7-character hex RGB format\n"
|
||||||
|
"\t\t (e.g., ``#ff7700'' for orange: same as HTML colors);\n"
|
||||||
|
"\t\t used with transparent images\n"
|
||||||
|
"\nPress Q, Esc or mouse button 1 after image is displayed to quit.\n"
|
||||||
|
"Press Q or Esc to quit this usage screen.\n"
|
||||||
|
"\n", PROGNAME, default_display_exponent);
|
||||||
do
|
do
|
||||||
ch = _getch();
|
ch = _getch();
|
||||||
while (ch != 'q' && ch != 'Q' && ch != 0x1B);
|
while (ch != 'q' && ch != 'Q' && ch != 0x1B);
|
||||||
#endif
|
exit(1);
|
||||||
exit(2);
|
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "\n%s %s: %s\n", PROGNAME, VERSION, appname);
|
fprintf(stderr, "\n%s %s: %s\n", PROGNAME, VERSION, appname);
|
||||||
#ifndef __CYGWIN__
|
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"\n [console window: closing this window will terminate %s]\n\n",
|
"\n [console window: closing this window will terminate %s]\n\n",
|
||||||
PROGNAME);
|
PROGNAME);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -401,14 +325,9 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
|||||||
* check for one in the PNG file--if not, the initialized values of 0
|
* check for one in the PNG file--if not, the initialized values of 0
|
||||||
* (black) will be used */
|
* (black) will be used */
|
||||||
|
|
||||||
if (have_bg) {
|
if (have_bg)
|
||||||
unsigned r, g, b; /* this approach quiets compiler warnings */
|
sscanf(bgstr+1, "%2x%2x%2x", &bg_red, &bg_green, &bg_blue);
|
||||||
|
else if (readpng_get_bgcolor(&bg_red, &bg_green, &bg_blue) > 1) {
|
||||||
sscanf(bgstr+1, "%2x%2x%2x", &r, &g, &b);
|
|
||||||
bg_red = (uch)r;
|
|
||||||
bg_green = (uch)g;
|
|
||||||
bg_blue = (uch)b;
|
|
||||||
} else if (readpng_get_bgcolor(&bg_red, &bg_green, &bg_blue) > 1) {
|
|
||||||
readpng_cleanup(TRUE);
|
readpng_cleanup(TRUE);
|
||||||
fprintf(stderr, PROGNAME
|
fprintf(stderr, PROGNAME
|
||||||
": libpng error while checking for background color\n");
|
": libpng error while checking for background color\n");
|
||||||
@@ -456,12 +375,7 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
|||||||
/* wait for the user to tell us when to quit */
|
/* wait for the user to tell us when to quit */
|
||||||
|
|
||||||
printf(
|
printf(
|
||||||
#ifndef __CYGWIN__
|
"Done. Press Q, Esc or mouse button 1 (within image window) to quit.\n");
|
||||||
"Done. Press Q, Esc or mouse button 1 (within image window) to quit.\n"
|
|
||||||
#else
|
|
||||||
"Done. Press mouse button 1 (within image window) to quit.\n"
|
|
||||||
#endif
|
|
||||||
);
|
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
|
||||||
while (GetMessage(&msg, NULL, 0, 0)) {
|
while (GetMessage(&msg, NULL, 0, 0)) {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
by Martin Zinser under OpenVMS; may work under OS/2 with some tweaking).
|
by Martin Zinser under OpenVMS; may work under OS/2 with some tweaking).
|
||||||
|
|
||||||
to do:
|
to do:
|
||||||
- 8-bit (colormapped) X support
|
- 8-bit support
|
||||||
- use %.1023s to simplify truncation of title-bar string?
|
- use %.1023s to simplify truncation of title-bar string?
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
@@ -21,28 +21,18 @@
|
|||||||
- 1.10: added support for non-default visuals; fixed X pixel-conversion
|
- 1.10: added support for non-default visuals; fixed X pixel-conversion
|
||||||
- 1.11: added extra set of parentheses to png_jmpbuf() macro; fixed
|
- 1.11: added extra set of parentheses to png_jmpbuf() macro; fixed
|
||||||
command-line parsing bug
|
command-line parsing bug
|
||||||
- 1.12: fixed some small X memory leaks (thanks to Fran<EFBFBD>ois Petitjean)
|
- 1.12: fixed small X memory leak (thanks to Francois Petitjean)
|
||||||
- 1.13: fixed XFreeGC() crash bug (thanks to Patrick Welche)
|
- 1.13: fixed XFreeGC() crash bug
|
||||||
- 1.14: added support for X resources (thanks to Gerhard Niklasch)
|
|
||||||
- 2.00: dual-licensed (added GNU GPL)
|
|
||||||
- 2.01: fixed improper display of usage screen on PNG error(s)
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-2008 Greg Roelofs. All rights reserved.
|
Copyright (c) 1998-2001 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
be held liable for any damages arising in any way from the use of
|
be held liable for any damages arising in any way from the use of
|
||||||
this software.
|
this software.
|
||||||
|
|
||||||
The contents of this file are DUAL-LICENSED. You may modify and/or
|
|
||||||
redistribute this software according to the terms of one of the
|
|
||||||
following two licenses (at your option):
|
|
||||||
|
|
||||||
|
|
||||||
LICENSE 1 ("BSD-like with advertising clause"):
|
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute
|
including commercial applications, and to alter it and redistribute
|
||||||
it freely, subject to the following restrictions:
|
it freely, subject to the following restrictions:
|
||||||
@@ -59,30 +49,11 @@
|
|||||||
and contributors for the book, "PNG: The Definitive Guide,"
|
and contributors for the book, "PNG: The Definitive Guide,"
|
||||||
published by O'Reilly and Associates.
|
published by O'Reilly and Associates.
|
||||||
|
|
||||||
|
|
||||||
LICENSE 2 (GNU GPL v2 or later):
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------*/
|
---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#define PROGNAME "rpng-x"
|
#define PROGNAME "rpng-x"
|
||||||
#define LONGNAME "Simple PNG Viewer for X"
|
#define LONGNAME "Simple PNG Viewer for X"
|
||||||
#define VERSION "2.01 of 16 March 2008"
|
#define VERSION "1.13 of 16 August 2001"
|
||||||
#define RESNAME "rpng" /* our X resource application name */
|
|
||||||
#define RESCLASS "Rpng" /* our X resource class name */
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -120,8 +91,6 @@ static int rpng_x_msb(ulg u32val);
|
|||||||
static char titlebar[1024], *window_name = titlebar;
|
static char titlebar[1024], *window_name = titlebar;
|
||||||
static char *appname = LONGNAME;
|
static char *appname = LONGNAME;
|
||||||
static char *icon_name = PROGNAME;
|
static char *icon_name = PROGNAME;
|
||||||
static char *res_name = RESNAME;
|
|
||||||
static char *res_class = RESCLASS;
|
|
||||||
static char *filename;
|
static char *filename;
|
||||||
static FILE *infile;
|
static FILE *infile;
|
||||||
|
|
||||||
@@ -266,33 +235,9 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!filename)
|
if (!filename) {
|
||||||
++error;
|
++error;
|
||||||
|
} else if (!(infile = fopen(filename, "rb"))) {
|
||||||
|
|
||||||
/* print usage screen if any errors up to this point */
|
|
||||||
|
|
||||||
if (error) {
|
|
||||||
fprintf(stderr, "\n%s %s: %s\n", PROGNAME, VERSION, appname);
|
|
||||||
readpng_version_info();
|
|
||||||
fprintf(stderr, "\n"
|
|
||||||
"Usage: %s [-display xdpy] [-gamma exp] [-bgcolor bg] file.png\n"
|
|
||||||
" xdpy\tname of the target X display (e.g., ``hostname:0'')\n"
|
|
||||||
" exp \ttransfer-function exponent (``gamma'') of the display\n"
|
|
||||||
"\t\t system in floating-point format (e.g., ``%.1f''); equal\n"
|
|
||||||
"\t\t to the product of the lookup-table exponent (varies)\n"
|
|
||||||
"\t\t and the CRT exponent (usually 2.2); must be positive\n"
|
|
||||||
" bg \tdesired background color in 7-character hex RGB format\n"
|
|
||||||
"\t\t (e.g., ``#ff7700'' for orange: same as HTML colors);\n"
|
|
||||||
"\t\t used with transparent images\n"
|
|
||||||
"\nPress Q, Esc or mouse button 1 (within image window, after image\n"
|
|
||||||
"is displayed) to quit.\n"
|
|
||||||
"\n", PROGNAME, default_display_exponent);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (!(infile = fopen(filename, "rb"))) {
|
|
||||||
fprintf(stderr, PROGNAME ": can't open PNG file [%s]\n", filename);
|
fprintf(stderr, PROGNAME ": can't open PNG file [%s]\n", filename);
|
||||||
++error;
|
++error;
|
||||||
} else {
|
} else {
|
||||||
@@ -305,7 +250,8 @@ int main(int argc, char **argv)
|
|||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
fprintf(stderr, PROGNAME
|
fprintf(stderr, PROGNAME
|
||||||
": [%s] has bad IHDR (libpng longjmp)\n", filename);
|
": [%s] has bad IHDR (libpng longjmp)\n",
|
||||||
|
filename);
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
fprintf(stderr, PROGNAME ": insufficient memory\n");
|
fprintf(stderr, PROGNAME ": insufficient memory\n");
|
||||||
@@ -330,9 +276,25 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* usage screen */
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
fprintf(stderr, PROGNAME ": aborting.\n");
|
fprintf(stderr, "\n%s %s: %s\n", PROGNAME, VERSION, appname);
|
||||||
exit(2);
|
readpng_version_info();
|
||||||
|
fprintf(stderr, "\n"
|
||||||
|
"Usage: %s [-display xdpy] [-gamma exp] [-bgcolor bg] file.png\n"
|
||||||
|
" xdpy\tname of the target X display (e.g., ``hostname:0'')\n"
|
||||||
|
" exp \ttransfer-function exponent (``gamma'') of the display\n"
|
||||||
|
"\t\t system in floating-point format (e.g., ``%.1f''); equal\n"
|
||||||
|
"\t\t to the product of the lookup-table exponent (varies)\n"
|
||||||
|
"\t\t and the CRT exponent (usually 2.2); must be positive\n"
|
||||||
|
" bg \tdesired background color in 7-character hex RGB format\n"
|
||||||
|
"\t\t (e.g., ``#ff7700'' for orange: same as HTML colors);\n"
|
||||||
|
"\t\t used with transparent images\n"
|
||||||
|
"\nPress Q, Esc or mouse button 1 (within image window, after image\n"
|
||||||
|
"is displayed) to quit.\n"
|
||||||
|
"\n", PROGNAME, default_display_exponent);
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -437,12 +399,11 @@ static int rpng_x_create_window(void)
|
|||||||
XEvent e;
|
XEvent e;
|
||||||
XGCValues gcvalues;
|
XGCValues gcvalues;
|
||||||
XSetWindowAttributes attr;
|
XSetWindowAttributes attr;
|
||||||
|
XSizeHints *size_hints;
|
||||||
XTextProperty windowName, *pWindowName = &windowName;
|
XTextProperty windowName, *pWindowName = &windowName;
|
||||||
XTextProperty iconName, *pIconName = &iconName;
|
XTextProperty iconName, *pIconName = &iconName;
|
||||||
XVisualInfo visual_info;
|
XVisualInfo visual_info;
|
||||||
XSizeHints *size_hints;
|
|
||||||
XWMHints *wm_hints;
|
XWMHints *wm_hints;
|
||||||
XClassHint *class_hints;
|
|
||||||
|
|
||||||
|
|
||||||
screen = DefaultScreen(display);
|
screen = DefaultScreen(display);
|
||||||
@@ -565,7 +526,7 @@ static int rpng_x_create_window(void)
|
|||||||
if (!XStringListToTextProperty(&icon_name, 1, pIconName))
|
if (!XStringListToTextProperty(&icon_name, 1, pIconName))
|
||||||
pIconName = NULL;
|
pIconName = NULL;
|
||||||
|
|
||||||
/* OK if any hints allocation fails; XSetWMProperties() allows NULLs */
|
/* OK if either hints allocation fails; XSetWMProperties() allows NULLs */
|
||||||
|
|
||||||
if ((size_hints = XAllocSizeHints()) != NULL) {
|
if ((size_hints = XAllocSizeHints()) != NULL) {
|
||||||
/* window will not be resizable */
|
/* window will not be resizable */
|
||||||
@@ -581,13 +542,8 @@ static int rpng_x_create_window(void)
|
|||||||
wm_hints->flags = StateHint | InputHint /* | IconPixmapHint */ ;
|
wm_hints->flags = StateHint | InputHint /* | IconPixmapHint */ ;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((class_hints = XAllocClassHint()) != NULL) {
|
|
||||||
class_hints->res_name = res_name;
|
|
||||||
class_hints->res_class = res_class;
|
|
||||||
}
|
|
||||||
|
|
||||||
XSetWMProperties(display, window, pWindowName, pIconName, NULL, 0,
|
XSetWMProperties(display, window, pWindowName, pIconName, NULL, 0,
|
||||||
size_hints, wm_hints, class_hints);
|
size_hints, wm_hints, NULL);
|
||||||
|
|
||||||
/* various properties and hints no longer needed; free memory */
|
/* various properties and hints no longer needed; free memory */
|
||||||
if (pWindowName)
|
if (pWindowName)
|
||||||
@@ -598,8 +554,6 @@ static int rpng_x_create_window(void)
|
|||||||
XFree(size_hints);
|
XFree(size_hints);
|
||||||
if (wm_hints)
|
if (wm_hints)
|
||||||
XFree(wm_hints);
|
XFree(wm_hints);
|
||||||
if (class_hints)
|
|
||||||
XFree(class_hints);
|
|
||||||
|
|
||||||
XMapWindow(display, window);
|
XMapWindow(display, window);
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
tweaking (or maybe not). Thanks to Adam Costello and Pieter S. van der
|
tweaking (or maybe not). Thanks to Adam Costello and Pieter S. van der
|
||||||
Meulen for the "diamond" and "radial waves" patterns, respectively.
|
Meulen for the "diamond" and "radial waves" patterns, respectively.
|
||||||
|
|
||||||
to do (someday, maybe):
|
to do:
|
||||||
- handle quoted command-line args (especially filenames with spaces)
|
- handle quoted command-line args (especially filenames with spaces)
|
||||||
- finish resizable checkerboard-gradient (sizes 4-128?)
|
- finish resizable checkerboard-gradient (sizes 4-128?)
|
||||||
- use %.1023s to simplify truncation of title-bar string?
|
- use %.1023s to simplify truncation of title-bar string?
|
||||||
@@ -27,29 +27,16 @@
|
|||||||
- 1.10: enabled "message window"/console (thanks to David Geldreich)
|
- 1.10: enabled "message window"/console (thanks to David Geldreich)
|
||||||
- 1.20: added runtime MMX-enabling/disabling and new -mmx* options
|
- 1.20: added runtime MMX-enabling/disabling and new -mmx* options
|
||||||
- 1.21: made minor tweak to usage screen to fit within 25-line console
|
- 1.21: made minor tweak to usage screen to fit within 25-line console
|
||||||
- 1.22: added AMD64/EM64T support (__x86_64__)
|
|
||||||
- 2.00: dual-licensed (added GNU GPL)
|
|
||||||
- 2.01: fixed 64-bit typo in readpng2.c
|
|
||||||
- 2.02: fixed improper display of usage screen on PNG error(s); fixed
|
|
||||||
unexpected-EOF and file-read-error cases
|
|
||||||
- 2.03: removed runtime MMX-enabling/disabling and obsolete -mmx* options
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-2008 Greg Roelofs. All rights reserved.
|
Copyright (c) 1998-2001 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
be held liable for any damages arising in any way from the use of
|
be held liable for any damages arising in any way from the use of
|
||||||
this software.
|
this software.
|
||||||
|
|
||||||
The contents of this file are DUAL-LICENSED. You may modify and/or
|
|
||||||
redistribute this software according to the terms of one of the
|
|
||||||
following two licenses (at your option):
|
|
||||||
|
|
||||||
|
|
||||||
LICENSE 1 ("BSD-like with advertising clause"):
|
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute
|
including commercial applications, and to alter it and redistribute
|
||||||
it freely, subject to the following restrictions:
|
it freely, subject to the following restrictions:
|
||||||
@@ -66,28 +53,11 @@
|
|||||||
and contributors for the book, "PNG: The Definitive Guide,"
|
and contributors for the book, "PNG: The Definitive Guide,"
|
||||||
published by O'Reilly and Associates.
|
published by O'Reilly and Associates.
|
||||||
|
|
||||||
|
|
||||||
LICENSE 2 (GNU GPL v2 or later):
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------*/
|
---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#define PROGNAME "rpng2-win"
|
#define PROGNAME "rpng2-win"
|
||||||
#define LONGNAME "Progressive PNG Viewer for Windows"
|
#define LONGNAME "Progressive PNG Viewer for Windows"
|
||||||
#define VERSION "2.02 of 16 March 2008"
|
#define VERSION "1.21 of 29 June 2001"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -96,33 +66,7 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <math.h> /* only for PvdM background code */
|
#include <math.h> /* only for PvdM background code */
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#ifdef __CYGWIN__
|
|
||||||
/* getch replacement. Turns out, we don't really need this,
|
|
||||||
* but leave it here if we ever enable any of the uses of
|
|
||||||
* _getch in the main code
|
|
||||||
*/
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <termio.h>
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
int repl_getch( void )
|
|
||||||
{
|
|
||||||
char ch;
|
|
||||||
int fd = fileno(stdin);
|
|
||||||
struct termio old_tty, new_tty;
|
|
||||||
|
|
||||||
ioctl(fd, TCGETA, &old_tty);
|
|
||||||
new_tty = old_tty;
|
|
||||||
new_tty.c_lflag &= ~(ICANON | ECHO | ISIG);
|
|
||||||
ioctl(fd, TCSETA, &new_tty);
|
|
||||||
fread(&ch, 1, sizeof(ch), stdin);
|
|
||||||
ioctl(fd, TCSETA, &old_tty);
|
|
||||||
|
|
||||||
return ch;
|
|
||||||
}
|
|
||||||
#define _getch repl_getch
|
|
||||||
#else
|
|
||||||
#include <conio.h> /* only for _getch() */
|
#include <conio.h> /* only for _getch() */
|
||||||
#endif
|
|
||||||
|
|
||||||
/* all for PvdM background code: */
|
/* all for PvdM background code: */
|
||||||
#ifndef PI
|
#ifndef PI
|
||||||
@@ -175,9 +119,10 @@ static void rpng2_win_cleanup(void);
|
|||||||
LRESULT CALLBACK rpng2_win_wndproc(HWND, UINT, WPARAM, LPARAM);
|
LRESULT CALLBACK rpng2_win_wndproc(HWND, UINT, WPARAM, LPARAM);
|
||||||
|
|
||||||
|
|
||||||
static char titlebar[1024];
|
static char titlebar[1024], *window_name = titlebar;
|
||||||
static char *progname = PROGNAME;
|
static char *progname = PROGNAME;
|
||||||
static char *appname = LONGNAME;
|
static char *appname = LONGNAME;
|
||||||
|
static char *icon_name = PROGNAME; /* GRR: not (yet) used */
|
||||||
static char *filename;
|
static char *filename;
|
||||||
static FILE *infile;
|
static FILE *infile;
|
||||||
|
|
||||||
@@ -296,7 +241,7 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
|||||||
filename = (char *)NULL;
|
filename = (char *)NULL;
|
||||||
memset(&rpng2_info, 0, sizeof(mainprog_info));
|
memset(&rpng2_info, 0, sizeof(mainprog_info));
|
||||||
|
|
||||||
#ifndef __CYGWIN__
|
|
||||||
/* Next reenable console output, which normally goes to the bit bucket
|
/* Next reenable console output, which normally goes to the bit bucket
|
||||||
* for windowed apps. Closing the console window will terminate the
|
* for windowed apps. Closing the console window will terminate the
|
||||||
* app. Thanks to David.Geldreich@realviz.com for supplying the magical
|
* app. Thanks to David.Geldreich@realviz.com for supplying the magical
|
||||||
@@ -305,7 +250,7 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
|||||||
AllocConsole();
|
AllocConsole();
|
||||||
freopen("CONOUT$", "a", stderr);
|
freopen("CONOUT$", "a", stderr);
|
||||||
freopen("CONOUT$", "a", stdout);
|
freopen("CONOUT$", "a", stdout);
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Set the default value for our display-system exponent, i.e., the
|
/* Set the default value for our display-system exponent, i.e., the
|
||||||
* product of the CRT exponent and the exponent corresponding to
|
* product of the CRT exponent and the exponent corresponding to
|
||||||
@@ -422,6 +367,18 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
|||||||
}
|
}
|
||||||
} else if (!strncmp(*argv, "-timing", 2)) {
|
} else if (!strncmp(*argv, "-timing", 2)) {
|
||||||
timing = TRUE;
|
timing = TRUE;
|
||||||
|
#if (defined(__i386__) || defined(_M_IX86))
|
||||||
|
} else if (!strncmp(*argv, "-nommxfilters", 7)) {
|
||||||
|
rpng2_info.nommxfilters = TRUE;
|
||||||
|
} else if (!strncmp(*argv, "-nommxcombine", 7)) {
|
||||||
|
rpng2_info.nommxcombine = TRUE;
|
||||||
|
} else if (!strncmp(*argv, "-nommxinterlace", 7)) {
|
||||||
|
rpng2_info.nommxinterlace = TRUE;
|
||||||
|
} else if (!strcmp(*argv, "-nommx")) {
|
||||||
|
rpng2_info.nommxfilters = TRUE;
|
||||||
|
rpng2_info.nommxcombine = TRUE;
|
||||||
|
rpng2_info.nommxinterlace = TRUE;
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
if (**argv != '-') {
|
if (**argv != '-') {
|
||||||
filename = *argv;
|
filename = *argv;
|
||||||
@@ -432,56 +389,9 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!filename)
|
if (!filename) {
|
||||||
++error;
|
++error;
|
||||||
|
} else if (!(infile = fopen(filename, "rb"))) {
|
||||||
|
|
||||||
/* print usage screen if any errors up to this point */
|
|
||||||
|
|
||||||
if (error) {
|
|
||||||
#ifndef __CYGWIN__
|
|
||||||
int ch;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
fprintf(stderr, "\n%s %s: %s\n\n", PROGNAME, VERSION, appname);
|
|
||||||
readpng2_version_info();
|
|
||||||
fprintf(stderr, "\n"
|
|
||||||
"Usage: %s [-gamma exp] [-bgcolor bg | -bgpat pat] [-timing]\n"
|
|
||||||
" %*s file.png\n\n"
|
|
||||||
" exp \ttransfer-function exponent (``gamma'') of the display\n"
|
|
||||||
"\t\t system in floating-point format (e.g., ``%.1f''); equal\n"
|
|
||||||
"\t\t to the product of the lookup-table exponent (varies)\n"
|
|
||||||
"\t\t and the CRT exponent (usually 2.2); must be positive\n"
|
|
||||||
" bg \tdesired background color in 7-character hex RGB format\n"
|
|
||||||
"\t\t (e.g., ``#ff7700'' for orange: same as HTML colors);\n"
|
|
||||||
"\t\t used with transparent images; overrides -bgpat option\n"
|
|
||||||
" pat \tdesired background pattern number (1-%d); used with\n"
|
|
||||||
"\t\t transparent images; overrides -bgcolor option\n"
|
|
||||||
" -timing\tenables delay for every block read, to simulate modem\n"
|
|
||||||
"\t\t download of image (~36 Kbps)\n"
|
|
||||||
"\nPress Q, Esc or mouse button 1 after image is displayed to quit.\n"
|
|
||||||
#ifndef __CYGWIN__
|
|
||||||
"Press Q or Esc to quit this usage screen. ",
|
|
||||||
#else
|
|
||||||
,
|
|
||||||
#endif
|
|
||||||
PROGNAME,
|
|
||||||
#if (defined(__i386__) || defined(_M_IX86) || defined(__x86_64__)) && \
|
|
||||||
!(defined(__CYGWIN__) || defined(__MINGW32__))
|
|
||||||
(int)strlen(PROGNAME), " ",
|
|
||||||
#endif
|
|
||||||
(int)strlen(PROGNAME), " ", default_display_exponent, num_bgpat);
|
|
||||||
fflush(stderr);
|
|
||||||
#ifndef __CYGWIN__
|
|
||||||
do
|
|
||||||
ch = _getch();
|
|
||||||
while (ch != 'q' && ch != 'Q' && ch != 0x1B);
|
|
||||||
#endif
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (!(infile = fopen(filename, "rb"))) {
|
|
||||||
fprintf(stderr, PROGNAME ": can't open PNG file [%s]\n", filename);
|
fprintf(stderr, PROGNAME ": can't open PNG file [%s]\n", filename);
|
||||||
++error;
|
++error;
|
||||||
} else {
|
} else {
|
||||||
@@ -495,7 +405,8 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
|||||||
switch (rc) {
|
switch (rc) {
|
||||||
case 2:
|
case 2:
|
||||||
fprintf(stderr, PROGNAME
|
fprintf(stderr, PROGNAME
|
||||||
": [%s] has bad IHDR (libpng longjmp)\n", filename);
|
": [%s] has bad IHDR (libpng longjmp)\n",
|
||||||
|
filename);
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
fprintf(stderr, PROGNAME ": insufficient memory\n");
|
fprintf(stderr, PROGNAME ": insufficient memory\n");
|
||||||
@@ -512,25 +423,51 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (error) {
|
/* usage screen */
|
||||||
#ifndef __CYGWIN__
|
|
||||||
int ch;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
fprintf(stderr, PROGNAME ": aborting.\n");
|
if (error) {
|
||||||
#ifndef __CYGWIN__
|
int ch;
|
||||||
|
|
||||||
|
fprintf(stderr, "\n%s %s: %s\n\n", PROGNAME, VERSION, appname);
|
||||||
|
readpng2_version_info();
|
||||||
|
fprintf(stderr, "\n"
|
||||||
|
"Usage: %s [-gamma exp] [-bgcolor bg | -bgpat pat] [-timing]\n"
|
||||||
|
#if (defined(__i386__) || defined(_M_IX86))
|
||||||
|
" %*s [[-nommxfilters] [-nommxcombine] [-nommxinterlace] | -nommx]\n"
|
||||||
|
#endif
|
||||||
|
" %*s file.png\n\n"
|
||||||
|
" exp \ttransfer-function exponent (``gamma'') of the display\n"
|
||||||
|
"\t\t system in floating-point format (e.g., ``%.1f''); equal\n"
|
||||||
|
"\t\t to the product of the lookup-table exponent (varies)\n"
|
||||||
|
"\t\t and the CRT exponent (usually 2.2); must be positive\n"
|
||||||
|
" bg \tdesired background color in 7-character hex RGB format\n"
|
||||||
|
"\t\t (e.g., ``#ff7700'' for orange: same as HTML colors);\n"
|
||||||
|
"\t\t used with transparent images; overrides -bgpat option\n"
|
||||||
|
" pat \tdesired background pattern number (1-%d); used with\n"
|
||||||
|
"\t\t transparent images; overrides -bgcolor option\n"
|
||||||
|
" -timing\tenables delay for every block read, to simulate modem\n"
|
||||||
|
"\t\t download of image (~36 Kbps)\n"
|
||||||
|
#if (defined(__i386__) || defined(_M_IX86))
|
||||||
|
" -nommx*\tdisable optimized MMX routines for decoding row filters,\n"
|
||||||
|
"\t\t combining rows, and expanding interlacing, respectively\n"
|
||||||
|
#endif
|
||||||
|
"\nPress Q, Esc or mouse button 1 after image is displayed to quit.\n"
|
||||||
|
"Press Q or Esc to quit this usage screen. ",
|
||||||
|
PROGNAME,
|
||||||
|
#if (defined(__i386__) || defined(_M_IX86))
|
||||||
|
strlen(PROGNAME), " ",
|
||||||
|
#endif
|
||||||
|
strlen(PROGNAME), " ", default_display_exponent, num_bgpat);
|
||||||
|
fflush(stderr);
|
||||||
do
|
do
|
||||||
ch = _getch();
|
ch = _getch();
|
||||||
while (ch != 'q' && ch != 'Q' && ch != 0x1B);
|
while (ch != 'q' && ch != 'Q' && ch != 0x1B);
|
||||||
#endif
|
exit(1);
|
||||||
exit(2);
|
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "\n%s %s: %s\n", PROGNAME, VERSION, appname);
|
fprintf(stderr, "\n%s %s: %s\n", PROGNAME, VERSION, appname);
|
||||||
#ifndef __CYGWIN__
|
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"\n [console window: closing this window will terminate %s]\n\n",
|
"\n [console window: closing this window will terminate %s]\n\n",
|
||||||
PROGNAME);
|
PROGNAME);
|
||||||
#endif
|
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -557,7 +494,7 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
|||||||
} else
|
} else
|
||||||
rpng2_info.need_bgcolor = TRUE;
|
rpng2_info.need_bgcolor = TRUE;
|
||||||
|
|
||||||
rpng2_info.state = kPreInit;
|
rpng2_info.done = FALSE;
|
||||||
rpng2_info.mainprog_init = rpng2_win_init;
|
rpng2_info.mainprog_init = rpng2_win_init;
|
||||||
rpng2_info.mainprog_display_row = rpng2_win_display_row;
|
rpng2_info.mainprog_display_row = rpng2_win_display_row;
|
||||||
rpng2_info.mainprog_finish_display = rpng2_win_finish_display;
|
rpng2_info.mainprog_finish_display = rpng2_win_finish_display;
|
||||||
@@ -577,27 +514,10 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
|||||||
if (readpng2_decode_data(&rpng2_info, inbuf, incount))
|
if (readpng2_decode_data(&rpng2_info, inbuf, incount))
|
||||||
++error;
|
++error;
|
||||||
Trace((stderr, "done with readpng2_decode_data()\n"))
|
Trace((stderr, "done with readpng2_decode_data()\n"))
|
||||||
|
if (error || feof(infile) || rpng2_info.done)
|
||||||
if (error || incount != INBUFSIZE || rpng2_info.state == kDone) {
|
|
||||||
if (rpng2_info.state == kDone) {
|
|
||||||
Trace((stderr, "done decoding PNG image\n"))
|
|
||||||
} else if (ferror(infile)) {
|
|
||||||
fprintf(stderr, PROGNAME
|
|
||||||
": error while reading PNG image file\n");
|
|
||||||
exit(3);
|
|
||||||
} else if (feof(infile)) {
|
|
||||||
fprintf(stderr, PROGNAME ": end of file reached "
|
|
||||||
"(unexpectedly) while reading PNG image file\n");
|
|
||||||
exit(3);
|
|
||||||
} else /* if (error) */ {
|
|
||||||
/* will print error message below */
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
if (timing)
|
if (timing)
|
||||||
Sleep(1000L);
|
Sleep(1000L);
|
||||||
|
|
||||||
incount = fread(inbuf, 1, INBUFSIZE, infile);
|
incount = fread(inbuf, 1, INBUFSIZE, infile);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -644,7 +564,7 @@ static void rpng2_win_init()
|
|||||||
ulg rowbytes = rpng2_info.rowbytes;
|
ulg rowbytes = rpng2_info.rowbytes;
|
||||||
|
|
||||||
Trace((stderr, "beginning rpng2_win_init()\n"))
|
Trace((stderr, "beginning rpng2_win_init()\n"))
|
||||||
Trace((stderr, " rowbytes = %d\n", rpng2_info.rowbytes))
|
Trace((stderr, " rowbytes = %ld\n", rpng2_info.rowbytes))
|
||||||
Trace((stderr, " width = %ld\n", rpng2_info.width))
|
Trace((stderr, " width = %ld\n", rpng2_info.width))
|
||||||
Trace((stderr, " height = %ld\n", rpng2_info.height))
|
Trace((stderr, " height = %ld\n", rpng2_info.height))
|
||||||
|
|
||||||
@@ -674,8 +594,6 @@ static void rpng2_win_init()
|
|||||||
readpng2_cleanup(&rpng2_info);
|
readpng2_cleanup(&rpng2_info);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
rpng2_info.state = kWindowInit;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1171,14 +1089,9 @@ static void rpng2_win_finish_display()
|
|||||||
* we have nothing to do here except set a flag and let the user know
|
* we have nothing to do here except set a flag and let the user know
|
||||||
* that the image is done */
|
* that the image is done */
|
||||||
|
|
||||||
rpng2_info.state = kDone;
|
rpng2_info.done = TRUE;
|
||||||
printf(
|
printf(
|
||||||
#ifndef __CYGWIN__
|
"Done. Press Q, Esc or mouse button 1 (within image window) to quit.\n");
|
||||||
"Done. Press Q, Esc or mouse button 1 (within image window) to quit.\n"
|
|
||||||
#else
|
|
||||||
"Done. Press mouse button 1 (within image window) to quit.\n"
|
|
||||||
#endif
|
|
||||||
);
|
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 12 KiB |
@@ -5,10 +5,8 @@
|
|||||||
This program converts certain NetPBM binary files (grayscale and RGB,
|
This program converts certain NetPBM binary files (grayscale and RGB,
|
||||||
maxval = 255) to PNG. Non-interlaced PNGs are written progressively;
|
maxval = 255) to PNG. Non-interlaced PNGs are written progressively;
|
||||||
interlaced PNGs are read and written in one memory-intensive blast.
|
interlaced PNGs are read and written in one memory-intensive blast.
|
||||||
|
|
||||||
Thanks to Jean-loup Gailly for providing the necessary trick to read
|
Thanks to Jean-loup Gailly for providing the necessary trick to read
|
||||||
interactive text from the keyboard while stdin is redirected. Thanks
|
interactive text from the keyboard while stdin is redirected.
|
||||||
to Cosmin Truta for Cygwin fixes.
|
|
||||||
|
|
||||||
NOTE: includes provisional support for PNM type "8" (portable alphamap)
|
NOTE: includes provisional support for PNM type "8" (portable alphamap)
|
||||||
images, presumed to be a 32-bit interleaved RGBA format; no pro-
|
images, presumed to be a 32-bit interleaved RGBA format; no pro-
|
||||||
@@ -26,32 +24,16 @@
|
|||||||
- 1.02: modified to allow abbreviated options
|
- 1.02: modified to allow abbreviated options
|
||||||
- 1.03: removed extraneous character from usage screen; fixed bug in
|
- 1.03: removed extraneous character from usage screen; fixed bug in
|
||||||
command-line parsing
|
command-line parsing
|
||||||
- 1.04: fixed DOS/OS2/Win32 detection, including partial Cygwin fix
|
|
||||||
(see http://home.att.net/~perlspinr/diffs/GregBook_cygwin.diff)
|
|
||||||
- 2.00: dual-licensed (added GNU GPL)
|
|
||||||
|
|
||||||
[REPORTED BUG (win32 only): "contrib/gregbook/wpng.c - cmd line
|
|
||||||
dose not work! In order to do something useful I needed to redirect
|
|
||||||
both input and output, with cygwin and with bcc32 as well. Under
|
|
||||||
Linux, the same wpng appears to work fine. I don't know what is
|
|
||||||
the problem."]
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-2007 Greg Roelofs. All rights reserved.
|
Copyright (c) 1998-2000 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
be held liable for any damages arising in any way from the use of
|
be held liable for any damages arising in any way from the use of
|
||||||
this software.
|
this software.
|
||||||
|
|
||||||
The contents of this file are DUAL-LICENSED. You may modify and/or
|
|
||||||
redistribute this software according to the terms of one of the
|
|
||||||
following two licenses (at your option):
|
|
||||||
|
|
||||||
|
|
||||||
LICENSE 1 ("BSD-like with advertising clause"):
|
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute
|
including commercial applications, and to alter it and redistribute
|
||||||
it freely, subject to the following restrictions:
|
it freely, subject to the following restrictions:
|
||||||
@@ -68,35 +50,16 @@
|
|||||||
and contributors for the book, "PNG: The Definitive Guide,"
|
and contributors for the book, "PNG: The Definitive Guide,"
|
||||||
published by O'Reilly and Associates.
|
published by O'Reilly and Associates.
|
||||||
|
|
||||||
|
|
||||||
LICENSE 2 (GNU GPL v2 or later):
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------*/
|
---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#define PROGNAME "wpng"
|
#define PROGNAME "wpng"
|
||||||
#define VERSION "2.00 of 2 June 2007"
|
#define VERSION "1.03 of 19 March 2000"
|
||||||
#define APPNAME "Simple PGM/PPM/PAM to PNG Converter"
|
#define APPNAME "Simple PGM/PPM/PAM to PNG Converter"
|
||||||
|
|
||||||
#if defined(__MSDOS__) || defined(__OS2__)
|
#if defined(__MSDOS__) || defined(__OS2__)
|
||||||
# define DOS_OS2_W32
|
# define DOS_OS2_W32
|
||||||
#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__)
|
#elif defined(_WIN32) || defined(__WIN32__)
|
||||||
# ifndef __GNUC__ /* treat Win32 native ports of gcc as Unix environments */
|
# define DOS_OS2_W32
|
||||||
# define DOS_OS2_W32
|
|
||||||
# endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|||||||
@@ -4,20 +4,13 @@
|
|||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-2007 Greg Roelofs. All rights reserved.
|
Copyright (c) 1998-2000 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
be held liable for any damages arising in any way from the use of
|
be held liable for any damages arising in any way from the use of
|
||||||
this software.
|
this software.
|
||||||
|
|
||||||
The contents of this file are DUAL-LICENSED. You may modify and/or
|
|
||||||
redistribute this software according to the terms of one of the
|
|
||||||
following two licenses (at your option):
|
|
||||||
|
|
||||||
|
|
||||||
LICENSE 1 ("BSD-like with advertising clause"):
|
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute
|
including commercial applications, and to alter it and redistribute
|
||||||
it freely, subject to the following restrictions:
|
it freely, subject to the following restrictions:
|
||||||
@@ -34,30 +27,12 @@
|
|||||||
and contributors for the book, "PNG: The Definitive Guide,"
|
and contributors for the book, "PNG: The Definitive Guide,"
|
||||||
published by O'Reilly and Associates.
|
published by O'Reilly and Associates.
|
||||||
|
|
||||||
|
|
||||||
LICENSE 2 (GNU GPL v2 or later):
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------*/
|
---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
#include <stdlib.h> /* for exit() prototype */
|
#include <stdlib.h> /* for exit() prototype */
|
||||||
#include <zlib.h>
|
|
||||||
|
|
||||||
#include "png.h" /* libpng header, includes setjmp.h */
|
#include "png.h" /* libpng header; includes zlib.h and setjmp.h */
|
||||||
#include "writepng.h" /* typedefs, common macros, public prototypes */
|
#include "writepng.h" /* typedefs, common macros, public prototypes */
|
||||||
|
|
||||||
|
|
||||||
@@ -105,8 +80,7 @@ int writepng_init(mainprog_info *mainprog_ptr)
|
|||||||
/* setjmp() must be called in every function that calls a PNG-writing
|
/* setjmp() must be called in every function that calls a PNG-writing
|
||||||
* libpng function, unless an alternate error handler was installed--
|
* libpng function, unless an alternate error handler was installed--
|
||||||
* but compatible error handlers must either use longjmp() themselves
|
* but compatible error handlers must either use longjmp() themselves
|
||||||
* (as in this program) or some other method to return control to
|
* (as in this program) or exit immediately, so here we go: */
|
||||||
* application code, so here we go: */
|
|
||||||
|
|
||||||
if (setjmp(mainprog_ptr->jmpbuf)) {
|
if (setjmp(mainprog_ptr->jmpbuf)) {
|
||||||
png_destroy_write_struct(&png_ptr, &info_ptr);
|
png_destroy_write_struct(&png_ptr, &info_ptr);
|
||||||
@@ -390,12 +364,5 @@ static void writepng_error_handler(png_structp png_ptr, png_const_charp msg)
|
|||||||
exit(99);
|
exit(99);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now we have our data structure we can use the information in it
|
|
||||||
* to return control to our own higher level code (all the points
|
|
||||||
* where 'setjmp' is called in this file.) This will work with other
|
|
||||||
* error handling mechanisms as well - libpng always calls png_error
|
|
||||||
* when it can proceed no further, thus, so long as the error handler
|
|
||||||
* is intercepted, application code can do its own error recovery.
|
|
||||||
*/
|
|
||||||
longjmp(mainprog_ptr->jmpbuf, 1);
|
longjmp(mainprog_ptr->jmpbuf, 1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,20 +4,13 @@
|
|||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-2007 Greg Roelofs. All rights reserved.
|
Copyright (c) 1998-2000 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
be held liable for any damages arising in any way from the use of
|
be held liable for any damages arising in any way from the use of
|
||||||
this software.
|
this software.
|
||||||
|
|
||||||
The contents of this file are DUAL-LICENSED. You may modify and/or
|
|
||||||
redistribute this software according to the terms of one of the
|
|
||||||
following two licenses (at your option):
|
|
||||||
|
|
||||||
|
|
||||||
LICENSE 1 ("BSD-like with advertising clause"):
|
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute
|
including commercial applications, and to alter it and redistribute
|
||||||
it freely, subject to the following restrictions:
|
it freely, subject to the following restrictions:
|
||||||
@@ -34,23 +27,6 @@
|
|||||||
and contributors for the book, "PNG: The Definitive Guide,"
|
and contributors for the book, "PNG: The Definitive Guide,"
|
||||||
published by O'Reilly and Associates.
|
published by O'Reilly and Associates.
|
||||||
|
|
||||||
|
|
||||||
LICENSE 2 (GNU GPL v2 or later):
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------*/
|
---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#ifndef TRUE
|
#ifndef TRUE
|
||||||
|
|||||||
22
contrib/msvctest/README.txt
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
Microsoft Developer Studio Build File, Format Version 6.00 for
|
||||||
|
msvctest
|
||||||
|
|
||||||
|
Assumes that libpng DLLs and LIBs are in ..\..\projects\msvc\win32\libpng
|
||||||
|
Assumes that zlib DLLs and LIBs are in ..\..\projects\msvc\win32\zlib
|
||||||
|
|
||||||
|
To build:
|
||||||
|
|
||||||
|
1) On the main menu Select "Build|Set Active configuration".
|
||||||
|
Choose the configuration that corresponds to the library you want to test.
|
||||||
|
This library must have been built using the libpng MS project located in
|
||||||
|
the "mscv" subdirectory.
|
||||||
|
|
||||||
|
2) Select "Build|Clean"
|
||||||
|
|
||||||
|
3) Select "Build|Rebuild All"
|
||||||
|
|
||||||
|
4) The test results should appear in the "Build" pane of the Output Window.
|
||||||
|
|
||||||
|
|
||||||
|
Simon-Pierre Cadieux
|
||||||
|
Methodex Computer Systems Inc.
|
||||||
247
contrib/msvctest/msvctest.dsp
Normal file
@@ -0,0 +1,247 @@
|
|||||||
|
# Microsoft Developer Studio Project File - Name="msvctest" - Package Owner=<4>
|
||||||
|
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||||
|
# ** DO NOT EDIT **
|
||||||
|
|
||||||
|
# TARGTYPE "Win32 (x86) Console Application" 0x0103
|
||||||
|
|
||||||
|
CFG=msvctest - Win32 Debug DLL
|
||||||
|
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||||
|
!MESSAGE use the Export Makefile command and run
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "msvctest.mak".
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE You can specify a configuration when running NMAKE
|
||||||
|
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "msvctest.mak" CFG="msvctest - Win32 Debug DLL"
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE Possible choices for configuration are:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE "msvctest - Win32 DLL" (based on "Win32 (x86) Console Application")
|
||||||
|
!MESSAGE "msvctest - Win32 Debug DLL" (based on "Win32 (x86) Console Application")
|
||||||
|
!MESSAGE "msvctest - Win32 ASM DLL" (based on "Win32 (x86) Console Application")
|
||||||
|
!MESSAGE "msvctest - Win32 Debug ASM DLL" (based on "Win32 (x86) Console Application")
|
||||||
|
!MESSAGE "msvctest - Win32 LIB" (based on "Win32 (x86) Console Application")
|
||||||
|
!MESSAGE "msvctest - Win32 Debug LIB" (based on "Win32 (x86) Console Application")
|
||||||
|
!MESSAGE
|
||||||
|
|
||||||
|
# Begin Project
|
||||||
|
# PROP AllowPerConfigDependencies 0
|
||||||
|
# PROP Scc_ProjName ""
|
||||||
|
# PROP Scc_LocalPath ""
|
||||||
|
CPP=cl.exe
|
||||||
|
RSC=rc.exe
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "msvctest - Win32 DLL"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 0
|
||||||
|
# PROP BASE Output_Dir "dll"
|
||||||
|
# PROP BASE Intermediate_Dir "dll"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 0
|
||||||
|
# PROP Output_Dir "dll"
|
||||||
|
# PROP Intermediate_Dir "dll"
|
||||||
|
# PROP Ignore_Export_Lib 0
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /W3 /O1 /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /FD /c
|
||||||
|
# ADD CPP /nologo /MD /W3 /O1 /I "..\..\..\zlib" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "PNG_DLL" /D "PNG_NO_STDIO" /D "PNG_NO_GLOBAL_ARRAYS" /FD /c
|
||||||
|
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||||
|
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 /nologo /subsystem:console /machine:I386
|
||||||
|
# ADD LINK32 ..\..\projects\msvc\win32\libpng\dll\libpng10.lib /nologo /subsystem:console /machine:I386
|
||||||
|
# Begin Special Build Tool
|
||||||
|
OutDir=.\dll
|
||||||
|
SOURCE="$(InputPath)"
|
||||||
|
PostBuild_Desc=[Run Test]
|
||||||
|
PostBuild_Cmds=set path=..\..\projects\msvc\win32\libpng\dll;..\..\projects\msvc\win32\zlib\dll; $(outdir)\msvctest.exe ..\..\pngtest.png
|
||||||
|
# End Special Build Tool
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "msvctest - Win32 Debug DLL"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "dll_dbg"
|
||||||
|
# PROP BASE Intermediate_Dir "dll_dbg"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 1
|
||||||
|
# PROP Output_Dir "dll_dbg"
|
||||||
|
# PROP Intermediate_Dir "dll_dbg"
|
||||||
|
# PROP Ignore_Export_Lib 0
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /W3 /Zi /Od /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
||||||
|
# ADD CPP /nologo /MDd /W3 /Zi /Od /I "..\..\..\zlib" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "PNG_DLL" /D "PNG_NO_STDIO" /D "PNG_NO_GLOBAL_ARRAYS" /FD /GZ /c
|
||||||
|
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||||
|
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||||
|
# ADD LINK32 ..\..\projects\msvc\win32\libpng\dll_dbg\libpng10d.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||||
|
# Begin Special Build Tool
|
||||||
|
OutDir=.\dll_dbg
|
||||||
|
SOURCE="$(InputPath)"
|
||||||
|
PostBuild_Desc=[Run Test]
|
||||||
|
PostBuild_Cmds=set path=..\..\projects\msvc\win32\libpng\dll_dbg;..\..\projects\msvc\win32\zlib\dll_dbg; $(outdir)\msvctest.exe ..\..\pngtest.png
|
||||||
|
# End Special Build Tool
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "msvctest - Win32 ASM DLL"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 0
|
||||||
|
# PROP BASE Output_Dir "dll_asm"
|
||||||
|
# PROP BASE Intermediate_Dir "dll_asm"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 0
|
||||||
|
# PROP Output_Dir "dll_asm"
|
||||||
|
# PROP Intermediate_Dir "dll_asm"
|
||||||
|
# PROP Ignore_Export_Lib 0
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /W3 /O1 /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /FD /c
|
||||||
|
# ADD CPP /nologo /MD /W3 /O1 /I "..\..\..\zlib" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "PNG_DLL" /D "PNG_NO_STDIO" /D "PNG_NO_GLOBAL_ARRAYS" /FD /c
|
||||||
|
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||||
|
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 /nologo /subsystem:console /machine:I386
|
||||||
|
# ADD LINK32 ..\..\projects\msvc\win32\libpng\dll_asm\libpng10a.lib /nologo /subsystem:console /machine:I386
|
||||||
|
# Begin Special Build Tool
|
||||||
|
OutDir=.\dll_asm
|
||||||
|
SOURCE="$(InputPath)"
|
||||||
|
PostBuild_Desc=[Run Test]
|
||||||
|
PostBuild_Cmds=set path=..\..\projects\msvc\win32\libpng\dll_asm;..\..\projects\msvc\win32\zlib\dll_asm; $(outdir)\msvctest.exe ..\..\pngtest.png
|
||||||
|
# End Special Build Tool
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "msvctest - Win32 Debug ASM DLL"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "dll_dbga"
|
||||||
|
# PROP BASE Intermediate_Dir "dll_dbga"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 1
|
||||||
|
# PROP Output_Dir "dll_dbga"
|
||||||
|
# PROP Intermediate_Dir "dll_dbga"
|
||||||
|
# PROP Ignore_Export_Lib 0
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /W3 /Zi /Od /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
||||||
|
# ADD CPP /nologo /MDd /W3 /Zi /Od /I "..\..\..\zlib" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "PNG_DLL" /D "PNG_NO_STDIO" /D "PNG_NO_GLOBAL_ARRAYS" /FD /GZ /c
|
||||||
|
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||||
|
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||||
|
# ADD LINK32 ..\..\projects\msvc\win32\libpng\dll_dbga\libpng10b.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||||
|
# Begin Special Build Tool
|
||||||
|
OutDir=.\dll_dbga
|
||||||
|
SOURCE="$(InputPath)"
|
||||||
|
PostBuild_Desc=[Run Test]
|
||||||
|
PostBuild_Cmds=set path=..\..\projects\msvc\win32\libpng\dll_dbga;..\..\projects\msvc\win32\zlib\dll_dbga; $(outdir)\msvctest.exe ..\..\pngtest.png
|
||||||
|
# End Special Build Tool
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "msvctest - Win32 LIB"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 0
|
||||||
|
# PROP BASE Output_Dir "lib"
|
||||||
|
# PROP BASE Intermediate_Dir "lib"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 0
|
||||||
|
# PROP Output_Dir "lib"
|
||||||
|
# PROP Intermediate_Dir "lib"
|
||||||
|
# PROP Ignore_Export_Lib 0
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /W3 /O1 /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /FD /c
|
||||||
|
# ADD CPP /nologo /W3 /O1 /I "..\..\..\zlib" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /FD /c
|
||||||
|
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||||
|
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 /nologo /subsystem:console /machine:I386
|
||||||
|
# ADD LINK32 ..\..\projects\msvc\win32\libpng\lib\libpng.lib /nologo /subsystem:console /machine:I386
|
||||||
|
# Begin Special Build Tool
|
||||||
|
OutDir=.\lib
|
||||||
|
SOURCE="$(InputPath)"
|
||||||
|
PostBuild_Desc=[Run Test]
|
||||||
|
PostBuild_Cmds=$(outdir)\msvctest.exe ..\..\pngtest.png
|
||||||
|
# End Special Build Tool
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "msvctest - Win32 Debug LIB"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "lib_dbg"
|
||||||
|
# PROP BASE Intermediate_Dir "lib_dbg"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 1
|
||||||
|
# PROP Output_Dir "lib_dbg"
|
||||||
|
# PROP Intermediate_Dir "lib_dbg"
|
||||||
|
# PROP Ignore_Export_Lib 0
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /W3 /Zi /Od /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
||||||
|
# ADD CPP /nologo /W3 /Zi /Od /I "..\..\..\zlib" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c
|
||||||
|
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||||
|
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||||
|
# ADD LINK32 ..\..\projects\msvc\win32\libpng\lib_dbg\libpng.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||||
|
# Begin Special Build Tool
|
||||||
|
OutDir=.\lib_dbg
|
||||||
|
SOURCE="$(InputPath)"
|
||||||
|
PostBuild_Desc=[Run Test]
|
||||||
|
PostBuild_Cmds=$(outdir)\msvctest.exe ..\..\pngtest.png
|
||||||
|
# End Special Build Tool
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# Begin Target
|
||||||
|
|
||||||
|
# Name "msvctest - Win32 DLL"
|
||||||
|
# Name "msvctest - Win32 Debug DLL"
|
||||||
|
# Name "msvctest - Win32 ASM DLL"
|
||||||
|
# Name "msvctest - Win32 Debug ASM DLL"
|
||||||
|
# Name "msvctest - Win32 LIB"
|
||||||
|
# Name "msvctest - Win32 Debug LIB"
|
||||||
|
# Begin Group "Source Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\pngtest.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\README.txt
|
||||||
|
# PROP Exclude_From_Build 1
|
||||||
|
# End Source File
|
||||||
|
# End Group
|
||||||
|
# Begin Group "Header Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||||
|
# End Group
|
||||||
|
# Begin Group "Resource Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||||
|
# End Group
|
||||||
|
# End Target
|
||||||
|
# End Project
|
||||||
29
contrib/msvctest/msvctest.dsw
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
Microsoft Developer Studio Workspace File, Format Version 6.00
|
||||||
|
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Project: "msvctest"=.\msvctest.dsp - Package Owner=<4>
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<4>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Global:
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<3>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
This demonstrates the use of PNG_USER_CONFIG, pngusr.h and pngusr.dfa
|
|
||||||
to build minimal decoder, encoder, and progressive reader applications.
|
|
||||||
|
|
||||||
See the individual README and pngusr.dfa files for more explanation.
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
This demonstrates the use of PNG_USER_CONFIG, pngusr.h and pngusr.dfa
|
|
||||||
|
|
||||||
The makefile builds a minimal read-only decoder with embedded libpng
|
|
||||||
and zlib.
|
|
||||||
|
|
||||||
Specify the location of the zlib source (1.2.1 or later) as ZLIBSRC
|
|
||||||
on the make command line.
|
|
||||||
|
|
||||||
If you prefer to use the shared libraries, go to contrib/pngminus
|
|
||||||
and build the png2pnm application there.
|
|
||||||
@@ -1,151 +0,0 @@
|
|||||||
# Makefile for PngMinus (pngm2pnm)
|
|
||||||
# Linux / Unix
|
|
||||||
|
|
||||||
#CC=cc
|
|
||||||
CC=gcc
|
|
||||||
LD=$(CC)
|
|
||||||
|
|
||||||
# If awk fails try
|
|
||||||
# make AWK=nawk
|
|
||||||
|
|
||||||
# If cpp fails try
|
|
||||||
# make CPP=/lib/cpp
|
|
||||||
|
|
||||||
RM=rm -f
|
|
||||||
COPY=cp
|
|
||||||
|
|
||||||
CPPFLAGS=-I. -DPNG_USER_CONFIG -DNO_GZCOMPRESS -DZ_SOLO -DNO_GZIP
|
|
||||||
CFLAGS=-O1 -Wall
|
|
||||||
|
|
||||||
C=.c
|
|
||||||
O=.o
|
|
||||||
L=.a
|
|
||||||
E=
|
|
||||||
|
|
||||||
# Where to find the source code:
|
|
||||||
PNGSRC =../../..
|
|
||||||
ZLIBSRC=$(PNGSRC)/../zlib
|
|
||||||
PROGSRC=$(PNGSRC)/contrib/pngminus
|
|
||||||
|
|
||||||
# Zlib (minimal inflate requirements - crc32 is used by libpng)
|
|
||||||
# zutil can be eliminated if you provide your own zcalloc and zcfree
|
|
||||||
ZSRCS = adler32$(C) crc32$(C) \
|
|
||||||
inffast$(C) inflate$(C) inftrees$(C) \
|
|
||||||
zutil$(C)
|
|
||||||
|
|
||||||
# Standard headers
|
|
||||||
ZH = zlib.h crc32.h inffast.h inffixed.h \
|
|
||||||
inflate.h inftrees.h zutil.h
|
|
||||||
|
|
||||||
# Machine generated headers
|
|
||||||
ZCONF = zconf.h
|
|
||||||
|
|
||||||
# Headers callers use
|
|
||||||
ZINC = zlib.h $(ZCONF)
|
|
||||||
|
|
||||||
# Headers the Zlib source uses
|
|
||||||
ZHDRS = $(ZH) $(ZCONF)
|
|
||||||
|
|
||||||
ZOBJS = adler32$(O) crc32$(O) \
|
|
||||||
inffast$(O) inflate$(O) inftrees$(O) \
|
|
||||||
zutil$(O)
|
|
||||||
|
|
||||||
# libpng
|
|
||||||
PNGSRCS=png$(C) pngerror$(C) pngget$(C) pngmem$(C) \
|
|
||||||
pngread$(C) pngrio$(C) pngrtran$(C) pngrutil$(C) \
|
|
||||||
pngset$(C) pngtrans$(C)
|
|
||||||
|
|
||||||
# Standard headers
|
|
||||||
PNGH =png.h pngconf.h pngdebug.h pnginfo.h pngpriv.h pngstruct.h
|
|
||||||
|
|
||||||
# Machine generated headers
|
|
||||||
PNGCONF=pnglibconf.h
|
|
||||||
|
|
||||||
# Headers callers use
|
|
||||||
PNGINC= png.h pngconf.h pngusr.h $(PNGCONF)
|
|
||||||
|
|
||||||
# Headers the PNG library uses
|
|
||||||
PNGHDRS=$(PNGH) $(PNGCONF) pngusr.h
|
|
||||||
|
|
||||||
PNGOBJS=png$(O) pngerror$(O) pngget$(O) pngmem$(O) \
|
|
||||||
pngread$(O) pngrio$(O) pngrtran$(O) pngrutil$(O) \
|
|
||||||
pngset$(O) pngtrans$(O)
|
|
||||||
|
|
||||||
PROGSRCS= pngm2pnm$(C)
|
|
||||||
PROGHDRS=
|
|
||||||
PROGDOCS=
|
|
||||||
PROGOBJS= pngm2pnm$(O)
|
|
||||||
|
|
||||||
OBJS = $(PROGOBJS) $(PNGOBJS) $(ZOBJS)
|
|
||||||
|
|
||||||
# implicit make rules -------------------------------------------------------
|
|
||||||
|
|
||||||
# note: dependencies do not work on implicit rule lines
|
|
||||||
.c$(O):
|
|
||||||
$(CC) $(CPPFLAGS) -c $(CFLAGS) $<
|
|
||||||
|
|
||||||
# dependencies
|
|
||||||
|
|
||||||
all: pngm2pnm$(E)
|
|
||||||
|
|
||||||
pngm2pnm$(E): $(OBJS)
|
|
||||||
$(LD) -o pngm2pnm$(E) $(OBJS)
|
|
||||||
|
|
||||||
# The DFA_XTRA setting turns all libpng options off then
|
|
||||||
# turns on those required for this minimal build.
|
|
||||||
# The CPP_FLAGS setting causes pngusr.h to be included in
|
|
||||||
# both the build of pnglibconf.h and, subsequently, when
|
|
||||||
# building libpng itself.
|
|
||||||
$(PNGCONF): $(PNGSRC)/scripts/pnglibconf.mak $(ZH)\
|
|
||||||
$(PNGSRC)/scripts/pnglibconf.dfa \
|
|
||||||
$(PNGSRC)/scripts/options.awk pngusr.h pngusr.dfa
|
|
||||||
$(RM) pnglibconf.h pnglibconf.dfn
|
|
||||||
$(MAKE) $(MAKEFLAGS) -f $(PNGSRC)/scripts/pnglibconf.mak\
|
|
||||||
srcdir=$(PNGSRC) CPPFLAGS="-DPNG_USER_CONFIG -I."\
|
|
||||||
DFA_XTRA="pngusr.dfa" $@
|
|
||||||
|
|
||||||
clean:
|
|
||||||
$(MAKE) $(MAKEFLAGS) -f $(PNGSRC)/scripts/pnglibconf.mak\
|
|
||||||
srcdir=$(PNGSRC) clean
|
|
||||||
$(RM) pngm2pnm$(O)
|
|
||||||
$(RM) pngm2pnm$(E)
|
|
||||||
$(RM) $(OBJS)
|
|
||||||
|
|
||||||
# distclean also removes the copied source and headers
|
|
||||||
distclean: clean
|
|
||||||
$(RM) -r scripts # historical reasons
|
|
||||||
$(RM) $(PNGSRCS) $(PNGH)
|
|
||||||
$(RM) $(ZSRCS) $(ZH) $(ZCONF)
|
|
||||||
$(RM) $(PROGSRCS) $(PROGHDRS) $(PROGDOCS)
|
|
||||||
|
|
||||||
# Header file dependencies:
|
|
||||||
$(PROGOBJS): $(PROGHDRS) $(PNGINC) $(ZINC)
|
|
||||||
$(PNGOBJS): $(PNGHDRS) $(ZINC)
|
|
||||||
$(ZOBJS): $(ZHDRS)
|
|
||||||
|
|
||||||
# Gather the source code from the respective directories
|
|
||||||
$(PNGSRCS) $(PNGH): $(PNGSRC)/$@
|
|
||||||
$(RM) $@
|
|
||||||
$(COPY) $(PNGSRC)/$@ $@
|
|
||||||
|
|
||||||
# No dependency on the ZLIBSRC target so that it only needs
|
|
||||||
# to be specified once.
|
|
||||||
$(ZSRCS) $(ZH):
|
|
||||||
$(RM) $@
|
|
||||||
$(COPY) $(ZLIBSRC)/$@ $@
|
|
||||||
|
|
||||||
# The unconfigured zconf.h varies in name according to the
|
|
||||||
# zlib release
|
|
||||||
$(ZCONF):
|
|
||||||
$(RM) $@
|
|
||||||
@for f in zconf.h.in zconf.in.h zconf.h; do\
|
|
||||||
test -r $(ZLIBSRC)/$$f &&\
|
|
||||||
echo $(COPY) $(ZLIBSRC)/$$f $@ &&\
|
|
||||||
$(COPY) $(ZLIBSRC)/$$f $@ && exit 0;\
|
|
||||||
done; echo copy: $(ZLIBSRC)/zconf.h not found; exit 1
|
|
||||||
|
|
||||||
pngm2pnm.c: $(PROGSRC)/png2pnm.c
|
|
||||||
$(RM) $@
|
|
||||||
$(COPY) $(PROGSRC)/png2pnm.c $@
|
|
||||||
|
|
||||||
# End of makefile for pngm2pnm
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
# pngminim/decoder/pngusr.dfa
|
|
||||||
#
|
|
||||||
# Copyright (c) 2010-2011 Glenn Randers-Pehrson
|
|
||||||
#
|
|
||||||
# This code is released under the libpng license.
|
|
||||||
# For conditions of distribution and use, see the disclaimer
|
|
||||||
# and license in png.h
|
|
||||||
|
|
||||||
# First all the build options off:
|
|
||||||
|
|
||||||
everything = off
|
|
||||||
|
|
||||||
# All that is required is some read code. This example switches
|
|
||||||
# on the sequential read code (see ../preader for a progressive
|
|
||||||
# read example).
|
|
||||||
|
|
||||||
option SEQUENTIAL_READ on
|
|
||||||
|
|
||||||
# You must choose fixed or floating point arithmetic:
|
|
||||||
# option FLOATING_POINT on
|
|
||||||
|
|
||||||
option FIXED_POINT on
|
|
||||||
|
|
||||||
# You must chose the internal fixed point implementation or to
|
|
||||||
# use the system floating point. The latter is considerably
|
|
||||||
# smaller (by about 1kbyte on an x86 system):
|
|
||||||
# option FLOATING_ARITHMETIC on
|
|
||||||
|
|
||||||
option FLOATING_ARITHMETIC off
|
|
||||||
|
|
||||||
# Your program will probably need other options. The example
|
|
||||||
# program here, pngm2pnm, requires the following. Take a look
|
|
||||||
# at pnglibconf.h to find out the full set of what has to be
|
|
||||||
# enabled to make the following work.
|
|
||||||
|
|
||||||
option SETJMP on
|
|
||||||
option STDIO on
|
|
||||||
option READ_EXPAND on
|
|
||||||
option READ_STRIP_16_TO_8 on
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
/* minrdpngconf.h: headers to make a minimal png-read-only library
|
|
||||||
*
|
|
||||||
* Copyright (c) 2007, 2010-2011 Glenn Randers-Pehrson
|
|
||||||
*
|
|
||||||
* This code is released under the libpng license.
|
|
||||||
* For conditions of distribution and use, see the disclaimer
|
|
||||||
* and license in png.h
|
|
||||||
*
|
|
||||||
* Derived from pngcrush.h, Copyright 1998-2007, Glenn Randers-Pehrson
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef MINRDPNGCONF_H
|
|
||||||
#define MINRDPNGCONF_H
|
|
||||||
|
|
||||||
/* To include pngusr.h set -DPNG_USER_CONFIG in CPPFLAGS */
|
|
||||||
|
|
||||||
/* List options to turn off features of the build that do not
|
|
||||||
* affect the API (so are not recorded in pnglibconf.h)
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define PNG_NO_WARNINGS
|
|
||||||
#define PNG_ALIGN_TYPE PNG_ALIGN_NONE
|
|
||||||
|
|
||||||
#endif /* MINRDPNGCONF_H */
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
This demonstrates the use of PNG_USER_CONFIG and pngusr.h
|
|
||||||
|
|
||||||
The makefile builds a minimal write-only encoder with embedded libpng
|
|
||||||
and zlib.
|
|
||||||
|
|
||||||
Specify the location of the zlib source (1.2.1 or later) as ZLIBSRC
|
|
||||||
on the make command line.
|
|
||||||
|
|
||||||
If you prefer to use the shared libraries, go to contrib/pngminus
|
|
||||||
and build the pnm2png application there.
|
|
||||||
@@ -1,150 +0,0 @@
|
|||||||
# Makefile for PngMinus (pnm2pngm)
|
|
||||||
# Linux / Unix
|
|
||||||
|
|
||||||
#CC=cc
|
|
||||||
CC=gcc
|
|
||||||
LD=$(CC)
|
|
||||||
|
|
||||||
# If awk fails try
|
|
||||||
# make AWK=nawk
|
|
||||||
|
|
||||||
# If cpp fails try
|
|
||||||
# make CPP=/lib/cpp
|
|
||||||
|
|
||||||
RM=rm -f
|
|
||||||
COPY=cp
|
|
||||||
|
|
||||||
CPPFLAGS=-I. -DPNG_USER_CONFIG -DNO_GZCOMPRESS -DZ_SOLO -DNO_GZIP
|
|
||||||
CFLAGS=-O1 -Wall
|
|
||||||
|
|
||||||
C=.c
|
|
||||||
O=.o
|
|
||||||
L=.a
|
|
||||||
E=
|
|
||||||
|
|
||||||
# Where to find the source code:
|
|
||||||
PNGSRC =../../..
|
|
||||||
ZLIBSRC=$(PNGSRC)/../zlib
|
|
||||||
PROGSRC=$(PNGSRC)/contrib/pngminus
|
|
||||||
|
|
||||||
# Zlib
|
|
||||||
ZSRCS = adler32$(C) compress$(C) crc32$(C) deflate$(C) \
|
|
||||||
trees$(C) zutil$(C)
|
|
||||||
|
|
||||||
# Standard headers
|
|
||||||
#ZH = zlib.h crc32.h deflate.h trees.h zutil.h
|
|
||||||
ZH = zlib.h crc32.h deflate.h trees.h zutil.h
|
|
||||||
|
|
||||||
# Machine generated headers
|
|
||||||
ZCONF = zconf.h
|
|
||||||
|
|
||||||
# Headers callers use
|
|
||||||
ZINC = zlib.h $(ZCONF)
|
|
||||||
|
|
||||||
# Headers the Zlib source uses
|
|
||||||
ZHDRS = $(ZH) $(ZCONF)
|
|
||||||
|
|
||||||
# compress is not required; it is needed to link the zlib
|
|
||||||
# code because deflate defines an unused API function deflateBound
|
|
||||||
# which itself calls compressBound from compress.
|
|
||||||
ZOBJS = adler32$(O) compress$(O) crc32$(O) deflate$(O) \
|
|
||||||
trees$(O) zutil$(O)
|
|
||||||
|
|
||||||
# libpng
|
|
||||||
PNGSRCS=png$(C) pngerror$(C) pngget$(C) pngmem$(C) \
|
|
||||||
pngset$(C) pngtrans$(C) pngwio$(C) pngwrite$(C) \
|
|
||||||
pngwtran$(C) pngwutil$(C)
|
|
||||||
|
|
||||||
# Standard headers
|
|
||||||
PNGH =png.h pngconf.h pngdebug.h pnginfo.h pngpriv.h pngstruct.h
|
|
||||||
|
|
||||||
# Machine generated headers
|
|
||||||
PNGCONF=pnglibconf.h
|
|
||||||
|
|
||||||
# Headers callers use
|
|
||||||
PNGINC= png.h pngconf.h pngusr.h $(PNGCONF)
|
|
||||||
|
|
||||||
# Headers the PNG library uses
|
|
||||||
PNGHDRS=$(PNGH) $(PNGCONF) pngusr.h
|
|
||||||
|
|
||||||
PNGOBJS=png$(O) pngerror$(O) pngget$(O) pngmem$(O) \
|
|
||||||
pngset$(O) pngtrans$(O) pngwio$(O) pngwrite$(O) \
|
|
||||||
pngwtran$(O) pngwutil$(O)
|
|
||||||
|
|
||||||
PROGSRCS= pnm2pngm$(C)
|
|
||||||
PROGHDRS=
|
|
||||||
PROGDOCS=
|
|
||||||
PROGOBJS= pnm2pngm$(O)
|
|
||||||
|
|
||||||
OBJS = $(PROGOBJS) $(PNGOBJS) $(ZOBJS)
|
|
||||||
|
|
||||||
# implicit make rules -------------------------------------------------------
|
|
||||||
|
|
||||||
.c$(O):
|
|
||||||
$(CC) $(CPPFLAGS) -c $(CFLAGS) $<
|
|
||||||
|
|
||||||
# dependencies
|
|
||||||
|
|
||||||
all: pnm2pngm$(E)
|
|
||||||
|
|
||||||
pnm2pngm$(E): $(OBJS)
|
|
||||||
$(LD) -o pnm2pngm$(E) $(OBJS)
|
|
||||||
|
|
||||||
# The DFA_XTRA setting turns all libpng options off then
|
|
||||||
# turns on those required for this minimal build.
|
|
||||||
# The CPP_FLAGS setting causes pngusr.h to be included in
|
|
||||||
# both the build of pnglibconf.h and, subsequently, when
|
|
||||||
# building libpng itself.
|
|
||||||
$(PNGCONF): $(PNGSRC)/scripts/pnglibconf.mak $(ZH)\
|
|
||||||
$(PNGSRC)/scripts/pnglibconf.dfa \
|
|
||||||
$(PNGSRC)/scripts/options.awk pngusr.h pngusr.dfa
|
|
||||||
$(RM) pnglibconf.h pnglibconf.dfn
|
|
||||||
$(MAKE) $(MAKEFLAGS) -f $(PNGSRC)/scripts/pnglibconf.mak\
|
|
||||||
srcdir=$(PNGSRC) CPPFLAGS="-DPNG_USER_CONFIG -I."\
|
|
||||||
DFA_XTRA="pngusr.dfa" $@
|
|
||||||
|
|
||||||
clean:
|
|
||||||
$(MAKE) $(MAKEFLAGS) -f $(PNGSRC)/scripts/pnglibconf.mak\
|
|
||||||
srcdir=$(PNGSRC) clean
|
|
||||||
$(RM) pnm2pngm$(O)
|
|
||||||
$(RM) pnm2pngm$(E)
|
|
||||||
$(RM) $(OBJS)
|
|
||||||
|
|
||||||
# distclean also removes the copied source and headers
|
|
||||||
distclean: clean
|
|
||||||
$(RM) -r scripts # historical reasons
|
|
||||||
$(RM) $(PNGSRCS) $(PNGH)
|
|
||||||
$(RM) $(ZSRCS) $(ZH) $(ZCONF)
|
|
||||||
$(RM) $(PROGSRCS) $(PROGHDRS) $(PROGDOCS)
|
|
||||||
|
|
||||||
# Header file dependencies:
|
|
||||||
$(PROGOBJS): $(PROGHDRS) $(PNGINC) $(ZINC)
|
|
||||||
$(PNGOBJS): $(PNGHDRS) $(ZINC)
|
|
||||||
$(ZOBJS): $(ZHDRS)
|
|
||||||
|
|
||||||
# Gather the source code from the respective directories
|
|
||||||
$(PNGSRCS) $(PNGH): $(PNGSRC)/$@
|
|
||||||
$(RM) $@
|
|
||||||
$(COPY) $(PNGSRC)/$@ $@
|
|
||||||
|
|
||||||
# No dependency on the ZLIBSRC target so that it only needs
|
|
||||||
# to be specified once.
|
|
||||||
$(ZSRCS) $(ZH):
|
|
||||||
$(RM) $@
|
|
||||||
$(COPY) $(ZLIBSRC)/$@ $@
|
|
||||||
|
|
||||||
# The unconfigured zconf.h varies in name according to the
|
|
||||||
# zlib release
|
|
||||||
$(ZCONF):
|
|
||||||
$(RM) $@
|
|
||||||
@for f in zconf.h.in zconf.in.h zconf.h; do\
|
|
||||||
test -r $(ZLIBSRC)/$$f &&\
|
|
||||||
echo $(COPY) $(ZLIBSRC)/$$f $@ &&\
|
|
||||||
$(COPY) $(ZLIBSRC)/$$f $@ && exit 0;\
|
|
||||||
done; echo copy: $(ZLIBSRC)/zconf.h not found; exit 1
|
|
||||||
|
|
||||||
pnm2pngm.c: $(PROGSRC)/pnm2png.c
|
|
||||||
$(RM) $@
|
|
||||||
$(COPY) $(PROGSRC)/pnm2png.c $@
|
|
||||||
|
|
||||||
# End of makefile for pnm2pngm
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
# pngminim/encoder/pngusr.dfa
|
|
||||||
#
|
|
||||||
# Copyright (c) 2010-2013 Glenn Randers-Pehrson
|
|
||||||
#
|
|
||||||
# This code is released under the libpng license.
|
|
||||||
# For conditions of distribution and use, see the disclaimer
|
|
||||||
# and license in png.h
|
|
||||||
|
|
||||||
# First all the build options off:
|
|
||||||
|
|
||||||
everything = off
|
|
||||||
|
|
||||||
# Switch on the write code - this makes a minimalist encoder
|
|
||||||
|
|
||||||
option WRITE on
|
|
||||||
# These 2 options are required if you need to read PGM (P1 or P4) PGM files.
|
|
||||||
option WRITE_INVERT on
|
|
||||||
option WRITE_PACK on
|
|
||||||
|
|
||||||
# You must choose fixed or floating point arithmetic:
|
|
||||||
# option FLOATING_POINT on
|
|
||||||
|
|
||||||
option FIXED_POINT on
|
|
||||||
|
|
||||||
# You must chose the internal fixed point implementation or to
|
|
||||||
# use the system floating point. The latter is considerably
|
|
||||||
# smaller (by about 1kbyte on an x86 system):
|
|
||||||
# option FLOATING_ARITHMETIC on
|
|
||||||
|
|
||||||
option FLOATING_ARITHMETIC off
|
|
||||||
|
|
||||||
# Your program will probably need other options. The example
|
|
||||||
# program here, pnm2pngm, requires the following. Take a look
|
|
||||||
# at pnglibconf.h to find out the full set of what has to be
|
|
||||||
# enabled to make the following work.
|
|
||||||
|
|
||||||
option SETJMP on
|
|
||||||
option STDIO on
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
/* minwrpngconf.h: headers to make a minimal png-write-only library
|
|
||||||
*
|
|
||||||
* Copyright (c) 2007, 2010-2011 Glenn Randers-Pehrson
|
|
||||||
*
|
|
||||||
* This code is released under the libpng license.
|
|
||||||
* For conditions of distribution and use, see the disclaimer
|
|
||||||
* and license in png.h
|
|
||||||
*
|
|
||||||
* Derived from pngcrush.h, Copyright 1998-2007, Glenn Randers-Pehrson
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef MINWRPNGCONF_H
|
|
||||||
#define MINWRPNGCONF_H
|
|
||||||
|
|
||||||
/* To include pngusr.h set -DPNG_USER_CONFIG in CPPFLAGS */
|
|
||||||
|
|
||||||
/* List options to turn off features of the build that do not
|
|
||||||
* affect the API (so are not recorded in pnglibconf.h)
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define PNG_NO_WARNINGS
|
|
||||||
#define PNG_ALIGN_TYPE PNG_ALIGN_NONE
|
|
||||||
|
|
||||||
#endif /* MINWRPNGCONF_H */
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
This demonstrates the use of PNG_USER_CONFIG and pngusr.h
|
|
||||||
|
|
||||||
The makefile builds a minimal read-only progressive decoder with
|
|
||||||
embedded libpng, zlib and your system's X library.
|
|
||||||
|
|
||||||
Specify the location of the zlib source (1.2.1 or later) as ZLIBSRC
|
|
||||||
on the make command line.
|
|
||||||
|
|
||||||
Edit makefile if required, to find your X library and include files,
|
|
||||||
then
|
|
||||||
|
|
||||||
make ZLIBSRC=directory
|
|
||||||
|
|
||||||
If you prefer to use the shared libraries, go to contrib/gregbook
|
|
||||||
and build the rpng2-x application there.
|
|
||||||
@@ -1,166 +0,0 @@
|
|||||||
# Makefile for PngMinus (rpng2)
|
|
||||||
# Linux / Unix
|
|
||||||
|
|
||||||
#CC=cc
|
|
||||||
CC=gcc
|
|
||||||
LD=$(CC)
|
|
||||||
|
|
||||||
# If awk fails try
|
|
||||||
# make AWK=nawk
|
|
||||||
|
|
||||||
# If cpp fails try
|
|
||||||
# make CPP=/lib/cpp
|
|
||||||
|
|
||||||
RM=rm -f
|
|
||||||
COPY=cp
|
|
||||||
|
|
||||||
#XINC = -I/usr/include # old-style, stock X distributions
|
|
||||||
#XLIB = -L/usr/lib/X11 -lX11 # (including SGI IRIX)
|
|
||||||
|
|
||||||
#XINC = -I/usr/openwin/include # Sun workstations (OpenWindows)
|
|
||||||
#XLIB = -L/usr/openwin/lib -lX11
|
|
||||||
|
|
||||||
XINC = -I/usr/X11R6/include # new X distributions (X.org, etc.)
|
|
||||||
XLIB = -L/usr/X11R6/lib -lX11
|
|
||||||
#XLIB = -L/usr/X11R6/lib64 -lX11 # e.g., Red Hat on AMD64
|
|
||||||
|
|
||||||
#XINC = -I/usr/local/include # FreeBSD
|
|
||||||
#XLIB = -L/usr/local/lib -lX11
|
|
||||||
|
|
||||||
#LIBS = $(XLIB)
|
|
||||||
LIBS = $(XLIB) -lm #platforms that need libm
|
|
||||||
|
|
||||||
CPPFLAGS=-I. $(XINC) -DPNG_USER_CONFIG -DNO_GZCOMPRESS -DZ_SOLO -DNO_GZIP
|
|
||||||
CFLAGS=-O1 -Wall
|
|
||||||
|
|
||||||
C=.c
|
|
||||||
O=.o
|
|
||||||
L=.a
|
|
||||||
E=
|
|
||||||
|
|
||||||
# Where to find the source code:
|
|
||||||
PNGSRC =../../..
|
|
||||||
ZLIBSRC=$(PNGSRC)/../zlib
|
|
||||||
PROGSRC=$(PNGSRC)/contrib/gregbook
|
|
||||||
|
|
||||||
# Zlib (minimal inflate requirements - crc32 is used by libpng)
|
|
||||||
# zutil can be eliminated if you provide your own zcalloc and zcfree
|
|
||||||
ZSRCS = adler32$(C) crc32$(C) \
|
|
||||||
inffast$(C) inflate$(C) inftrees$(C) \
|
|
||||||
zutil$(C)
|
|
||||||
|
|
||||||
# Standard headers
|
|
||||||
ZH = zlib.h crc32.h inffast.h inffixed.h \
|
|
||||||
inflate.h inftrees.h zutil.h
|
|
||||||
|
|
||||||
# Machine generated headers
|
|
||||||
ZCONF = zconf.h
|
|
||||||
|
|
||||||
# Headers callers use
|
|
||||||
ZINC = zlib.h $(ZCONF)
|
|
||||||
|
|
||||||
# Headers the Zlib source uses
|
|
||||||
ZHDRS = $(ZH) $(ZCONF)
|
|
||||||
|
|
||||||
ZOBJS = adler32$(O) crc32$(O) \
|
|
||||||
inffast$(O) inflate$(O) inftrees$(O) \
|
|
||||||
zutil$(O)
|
|
||||||
|
|
||||||
# libpng
|
|
||||||
PNGSRCS=png$(C) pngerror$(C) pngget$(C) pngmem$(C) \
|
|
||||||
pngpread$(C) pngread$(C) pngrio$(C) pngrtran$(C) pngrutil$(C) \
|
|
||||||
pngset$(C) pngtrans$(C)
|
|
||||||
|
|
||||||
# Standard headers
|
|
||||||
PNGH =png.h pngconf.h pngdebug.h pnginfo.h pngpriv.h pngstruct.h
|
|
||||||
|
|
||||||
# Machine generated headers
|
|
||||||
PNGCONF=pnglibconf.h
|
|
||||||
|
|
||||||
# Headers callers use
|
|
||||||
PNGINC= png.h pngconf.h pngusr.h $(PNGCONF)
|
|
||||||
|
|
||||||
# Headers the PNG library uses
|
|
||||||
PNGHDRS=$(PNGH) $(PNGCONF) pngusr.h
|
|
||||||
|
|
||||||
PNGOBJS=png$(O) pngerror$(O) pngget$(O) pngmem$(O) \
|
|
||||||
pngpread$(O) pngread$(O) pngrio$(O) pngrtran$(O) pngrutil$(O) \
|
|
||||||
pngset$(O) pngtrans$(O)
|
|
||||||
|
|
||||||
PROGSRCS= rpng2-x$(C) readpng2$(C)
|
|
||||||
PROGHDRS= readpng2.h
|
|
||||||
PROGDOCS= COPYING LICENSE
|
|
||||||
PROGOBJS= rpng2-x$(O) readpng2$(O)
|
|
||||||
|
|
||||||
OBJS = $(PROGOBJS) $(PNGOBJS) $(ZOBJS)
|
|
||||||
|
|
||||||
# implicit make rules -------------------------------------------------------
|
|
||||||
|
|
||||||
.c$(O):
|
|
||||||
$(CC) $(CPPFLAGS) -c $(CFLAGS) $<
|
|
||||||
|
|
||||||
# dependencies
|
|
||||||
|
|
||||||
all: $(PROGDOCS) rpng2-x$(E)
|
|
||||||
|
|
||||||
rpng2-x$(E): $(OBJS)
|
|
||||||
$(LD) -o rpng2-x$(E) $(OBJS) $(LIBS)
|
|
||||||
|
|
||||||
# The DFA_XTRA setting turns all libpng options off then
|
|
||||||
# turns on those required for this minimal build.
|
|
||||||
# The CPP_FLAGS setting causes pngusr.h to be included in
|
|
||||||
# both the build of pnglibconf.h and, subsequently, when
|
|
||||||
# building libpng itself.
|
|
||||||
$(PNGCONF): $(PNGSRC)/scripts/pnglibconf.mak $(ZH)\
|
|
||||||
$(PNGSRC)/scripts/pnglibconf.dfa \
|
|
||||||
$(PNGSRC)/scripts/options.awk pngusr.h pngusr.dfa
|
|
||||||
$(RM) pnglibconf.h pnglibconf.dfn
|
|
||||||
$(MAKE) $(MAKEFLAGS) -f $(PNGSRC)/scripts/pnglibconf.mak\
|
|
||||||
srcdir=$(PNGSRC) CPPFLAGS="-DPNG_USER_CONFIG -I."\
|
|
||||||
DFA_XTRA="pngusr.dfa" $@
|
|
||||||
|
|
||||||
clean:
|
|
||||||
$(MAKE) $(MAKEFLAGS) -f $(PNGSRC)/scripts/pnglibconf.mak\
|
|
||||||
srcdir=$(PNGSRC) clean
|
|
||||||
$(RM) rpng2-x$(O)
|
|
||||||
$(RM) rpng2-x$(E)
|
|
||||||
$(RM) $(OBJS)
|
|
||||||
|
|
||||||
# distclean also removes the copied source and headers
|
|
||||||
distclean: clean
|
|
||||||
$(RM) -r scripts # historical reasons
|
|
||||||
$(RM) $(PNGSRCS) $(PNGH)
|
|
||||||
$(RM) $(ZSRCS) $(ZH) $(ZCONF)
|
|
||||||
$(RM) $(PROGSRCS) $(PROGHDRS) $(PROGDOCS)
|
|
||||||
|
|
||||||
# Header file dependencies:
|
|
||||||
$(PROGOBJS): $(PROGHDRS) $(PNGINC) $(ZINC)
|
|
||||||
$(PNGOBJS): $(PNGHDRS) $(ZINC)
|
|
||||||
$(ZOBJS): $(ZHDRS)
|
|
||||||
|
|
||||||
# Gather the source code from the respective directories
|
|
||||||
$(PNGSRCS) $(PNGH): $(PNGSRC)/$@
|
|
||||||
$(RM) $@
|
|
||||||
$(COPY) $(PNGSRC)/$@ $@
|
|
||||||
|
|
||||||
# No dependency on the ZLIBSRC target so that it only needs
|
|
||||||
# to be specified once.
|
|
||||||
$(ZSRCS) $(ZH):
|
|
||||||
$(RM) $@
|
|
||||||
$(COPY) $(ZLIBSRC)/$@ $@
|
|
||||||
|
|
||||||
# The unconfigured zconf.h varies in name according to the
|
|
||||||
# zlib release
|
|
||||||
$(ZCONF):
|
|
||||||
$(RM) $@
|
|
||||||
@for f in zconf.h.in zconf.in.h zconf.h; do\
|
|
||||||
test -r $(ZLIBSRC)/$$f &&\
|
|
||||||
echo $(COPY) $(ZLIBSRC)/$$f $@ &&\
|
|
||||||
$(COPY) $(ZLIBSRC)/$$f $@ && exit 0;\
|
|
||||||
done; echo copy: $(ZLIBSRC)/zconf.h not found; exit 1
|
|
||||||
|
|
||||||
$(PROGSRCS) $(PROGHDRS) $(PROGDOCS): $(PROGSRC)/$@
|
|
||||||
$(RM) $@
|
|
||||||
$(COPY) $(PROGSRC)/$@ $@
|
|
||||||
|
|
||||||
# End of makefile for rpng2-x
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
# pngminim/preader/pngusr.dfa
|
|
||||||
#
|
|
||||||
# Copyright (c) 2010-2011 Glenn Randers-Pehrson
|
|
||||||
#
|
|
||||||
# This code is released under the libpng license.
|
|
||||||
# For conditions of distribution and use, see the disclaimer
|
|
||||||
# and license in png.h
|
|
||||||
|
|
||||||
# First all the build options off:
|
|
||||||
|
|
||||||
everything = off
|
|
||||||
|
|
||||||
# Just switch on the progressive read code
|
|
||||||
|
|
||||||
option PROGRESSIVE_READ on
|
|
||||||
|
|
||||||
# You may choose fixed or floating point APIs:
|
|
||||||
# option FLOATING_POINT on
|
|
||||||
|
|
||||||
option FIXED_POINT on
|
|
||||||
|
|
||||||
# You must chose the internal fixed point implementation or to
|
|
||||||
# use the system floating point. The latter is considerably
|
|
||||||
# smaller (by about 1kbyte on an x86 system):
|
|
||||||
|
|
||||||
option FLOATING_ARITHMETIC on
|
|
||||||
# option FLOATING_ARITHMETIC off
|
|
||||||
|
|
||||||
# Your program will probably need other options. The example
|
|
||||||
# program here, rpng2-x, requires the following. Take a look
|
|
||||||
# at pnglibconf.h to find out the full set of what has to be
|
|
||||||
# enabled to make the following work.
|
|
||||||
|
|
||||||
option SETJMP on
|
|
||||||
option STDIO on
|
|
||||||
option READ_bKGD on
|
|
||||||
option READ_GAMMA on
|
|
||||||
option READ_EXPAND on
|
|
||||||
option READ_STRIP_16_TO_8 on
|
|
||||||
option READ_GRAY_TO_RGB on
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
/* minrdpngconf.h: headers to make a minimal png-read-only library
|
|
||||||
*
|
|
||||||
* Copyright (c) 2009, 2010-2011 Glenn Randers-Pehrson
|
|
||||||
*
|
|
||||||
* This code is released under the libpng license.
|
|
||||||
* For conditions of distribution and use, see the disclaimer
|
|
||||||
* and license in png.h
|
|
||||||
*
|
|
||||||
* Derived from pngcrush.h, Copyright 1998-2007, Glenn Randers-Pehrson
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef MINPRDPNGCONF_H
|
|
||||||
#define MINPRDPNGCONF_H
|
|
||||||
|
|
||||||
/* To include pngusr.h set -DPNG_USER_CONFIG in CPPFLAGS */
|
|
||||||
|
|
||||||
/* List options to turn off features of the build that do not
|
|
||||||
* affect the API (so are not recorded in pnglibconf.h)
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define PNG_NO_WARNINGS
|
|
||||||
#define PNG_ALIGN_TYPE PNG_ALIGN_NONE
|
|
||||||
|
|
||||||
#endif /* MINPRDPNGCONF_H */
|
|
||||||
@@ -20,7 +20,7 @@ Soon after the creation of PNG in 1995, the need was felt for a set of
|
|||||||
pnmtopng / pngtopnm utilities. Independantly Alexander Lehmann and I
|
pnmtopng / pngtopnm utilities. Independantly Alexander Lehmann and I
|
||||||
(Willem van Schaik) started such a project. Luckily we discovered this
|
(Willem van Schaik) started such a project. Luckily we discovered this
|
||||||
and merged the two together into pnmtopng.tar.gz, which is available
|
and merged the two together into pnmtopng.tar.gz, which is available
|
||||||
from a/o ftp://ftp.simplesystems.org/pub/libpng/png/.
|
from a/o ftp://swrinde.nde.swri.edu/pub/png/.
|
||||||
|
|
||||||
These two utilities have many, many options and make use of most of the
|
These two utilities have many, many options and make use of most of the
|
||||||
features of PNG, like gamma, alpha, sbit, text-chunks, etc. This makes
|
features of PNG, like gamma, alpha, sbit, text-chunks, etc. This makes
|
||||||
|
|||||||
@@ -8,9 +8,9 @@ LD=$(CC)
|
|||||||
RM=rm -f
|
RM=rm -f
|
||||||
|
|
||||||
#PNGPATH = /usr/local
|
#PNGPATH = /usr/local
|
||||||
#PNGINC = -I$(PNGPATH)/include/libpng15
|
#PNGINC = -I$(PNGPATH)/include/libpng10
|
||||||
#PNGLIB = -L$(PNGPATH)/lib -lpng15
|
#PNGLIB = -L$(PNGPATH)/lib -lpng10
|
||||||
#PNGLIBS = $(PNGPATH)/lib/libpng15.a
|
#PNGLIBS = $(PNGPATH)/lib/libpng10.a
|
||||||
PNGINC = -I../..
|
PNGINC = -I../..
|
||||||
PNGLIB = -L../.. -lpng
|
PNGLIB = -L../.. -lpng
|
||||||
PNGLIBS = ../../libpng.a
|
PNGLIBS = ../../libpng.a
|
||||||
@@ -23,9 +23,9 @@ ZINC = -I../../../zlib
|
|||||||
ZLIB = -L../../../zlib -lz
|
ZLIB = -L../../../zlib -lz
|
||||||
ZLIBS = ../../../zlib/libz.a
|
ZLIBS = ../../../zlib/libz.a
|
||||||
|
|
||||||
CFLAGS=$(PNGINC) $(ZINC)
|
CFLAGS=-O3 $(PNGINC) $(ZINC)
|
||||||
LDLIBS=$(PNGLIB) $(ZLIB)
|
LDFLAGS=$(PNGLIB) $(ZLIB)
|
||||||
LDLIBSS=$(PNGLIBS) $(ZLIBS)
|
LDFLAGSS=$(PNGLIBS) $(ZLIBS)
|
||||||
C=.c
|
C=.c
|
||||||
O=.o
|
O=.o
|
||||||
L=.a
|
L=.a
|
||||||
@@ -40,19 +40,19 @@ png2pnm$(O): png2pnm$(C)
|
|||||||
$(CC) -c $(CFLAGS) png2pnm$(C)
|
$(CC) -c $(CFLAGS) png2pnm$(C)
|
||||||
|
|
||||||
png2pnm$(E): png2pnm$(O)
|
png2pnm$(E): png2pnm$(O)
|
||||||
$(LD) $(LDFLAGS) -o png2pnm$(E) png2pnm$(O) $(LDLIBS) -lm
|
$(LD) -o png2pnm$(E) png2pnm$(O) $(LDFLAGS) -lm
|
||||||
|
|
||||||
png2pnm-static$(E): png2pnm$(O)
|
png2pnm-static$(E): png2pnm$(O)
|
||||||
$(LD) $(LDFLAGS) -o png2pnm-static$(E) png2pnm$(O) $(LDLIBSS) -lm
|
$(LD) -o png2pnm-static$(E) png2pnm$(O) $(LDFLAGSS) -lm
|
||||||
|
|
||||||
pnm2png$(O): pnm2png$(C)
|
pnm2png$(O): pnm2png$(C)
|
||||||
$(CC) -c $(CFLAGS) pnm2png$(C)
|
$(CC) -c $(CFLAGS) pnm2png$(C)
|
||||||
|
|
||||||
pnm2png$(E): pnm2png$(O)
|
pnm2png$(E): pnm2png$(O)
|
||||||
$(LD) $(LDFLAGS) -o pnm2png$(E) pnm2png$(O) $(LDLIBS) -lm
|
$(LD) -o pnm2png$(E) pnm2png$(O) $(LDFLAGS) -lm
|
||||||
|
|
||||||
pnm2png-static$(E): pnm2png$(O)
|
pnm2png-static$(E): pnm2png$(O)
|
||||||
$(LD) $(LDFLAGS) -o pnm2png-static$(E) pnm2png$(O) $(LDLIBSS) -lm
|
$(LD) -o pnm2png-static$(E) pnm2png$(O) $(LDFLAGSS) -lm
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(RM) png2pnm$(O)
|
$(RM) png2pnm$(O)
|
||||||
|
|||||||
@@ -144,7 +144,7 @@ int main(int argc, char *argv[])
|
|||||||
if (png2pnm (fp_rd, fp_wr, fp_al, raw, alpha) == FALSE)
|
if (png2pnm (fp_rd, fp_wr, fp_al, raw, alpha) == FALSE)
|
||||||
{
|
{
|
||||||
fprintf (stderr, "PNG2PNM\n");
|
fprintf (stderr, "PNG2PNM\n");
|
||||||
fprintf (stderr, "Error: unsuccessful conversion of PNG-image\n");
|
fprintf (stderr, "Error: unsuccessful convertion of PNG-image\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,7 +188,7 @@ void usage()
|
|||||||
BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file, BOOL raw, BOOL alpha)
|
BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file, BOOL raw, BOOL alpha)
|
||||||
{
|
{
|
||||||
png_struct *png_ptr = NULL;
|
png_struct *png_ptr = NULL;
|
||||||
png_info *info_ptr = NULL;
|
png_info *info_ptr = NULL;
|
||||||
png_byte buf[8];
|
png_byte buf[8];
|
||||||
png_byte *png_pixels = NULL;
|
png_byte *png_pixels = NULL;
|
||||||
png_byte **row_pointers = NULL;
|
png_byte **row_pointers = NULL;
|
||||||
@@ -211,8 +211,8 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file, BOOL raw, BOOL a
|
|||||||
if (ret != 8)
|
if (ret != 8)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
ret = png_sig_cmp (buf, 0, 8);
|
ret = png_check_sig (buf, 8);
|
||||||
if (ret)
|
if (!ret)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
/* create png and info structures */
|
/* create png and info structures */
|
||||||
@@ -381,7 +381,7 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file, BOOL raw, BOOL a
|
|||||||
fputc ((int) *pix_ptr++ , pnm_file);
|
fputc ((int) *pix_ptr++ , pnm_file);
|
||||||
else
|
else
|
||||||
if (bit_depth == 16){
|
if (bit_depth == 16){
|
||||||
dep_16 = (long) *pix_ptr++;
|
dep_16 = (long) *pix_ptr++;
|
||||||
fprintf (pnm_file, "%ld ", (dep_16 << 8) + ((long) *pix_ptr++));
|
fprintf (pnm_file, "%ld ", (dep_16 << 8) + ((long) *pix_ptr++));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -401,9 +401,9 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file, BOOL raw, BOOL a
|
|||||||
fputc ((int) *pix_ptr++ , alpha_file);
|
fputc ((int) *pix_ptr++ , alpha_file);
|
||||||
else
|
else
|
||||||
if (bit_depth == 16){
|
if (bit_depth == 16){
|
||||||
dep_16 = (long) *pix_ptr++;
|
dep_16 = (long) *pix_ptr++;
|
||||||
fprintf (alpha_file, "%ld ", (dep_16 << 8) + (long) *pix_ptr++);
|
fprintf (alpha_file, "%ld ", (dep_16 << 8) + (long) *pix_ptr++);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
fprintf (alpha_file, "%ld ", (long) *pix_ptr++);
|
fprintf (alpha_file, "%ld ", (long) *pix_ptr++);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
#!/bin/sh
|
|
||||||
# -- grayscale
|
# -- grayscale
|
||||||
./png2pnm -noraw ../pngsuite/basn0g01.png basn0g01.pgm
|
./png2pnm -noraw ../pngsuite/basn0g01.png basn0g01.pgm
|
||||||
./png2pnm -noraw ../pngsuite/basn0g02.png basn0g02.pgm
|
./png2pnm -noraw ../pngsuite/basn0g02.png basn0g02.pgm
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
#!/bin/sh
|
|
||||||
make -f makefile.std
|
make -f makefile.std
|
||||||
sh png2pnm.sh
|
sh png2pnm.sh
|
||||||
sh pnm2png.sh
|
sh pnm2png.sh
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
* copyright (C) 1999 by Willem van Schaik <willem@schaik.com>
|
* copyright (C) 1999 by Willem van Schaik <willem@schaik.com>
|
||||||
*
|
*
|
||||||
* version 1.0 - 1999.10.15 - First version.
|
* version 1.0 - 1999.10.15 - First version.
|
||||||
* version 1.1 - 2015.07.29 - Fixed leaks (Glenn Randers-Pehrson)
|
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this software and
|
* Permission to use, copy, modify, and distribute this software and
|
||||||
* its documentation for any purpose and without fee is hereby granted,
|
* its documentation for any purpose and without fee is hereby granted,
|
||||||
@@ -19,7 +18,6 @@
|
|||||||
#include <mem.h>
|
#include <mem.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#endif
|
#endif
|
||||||
#include <zlib.h>
|
|
||||||
|
|
||||||
#ifndef BOOL
|
#ifndef BOOL
|
||||||
#define BOOL unsigned char
|
#define BOOL unsigned char
|
||||||
@@ -51,8 +49,7 @@
|
|||||||
|
|
||||||
int main (int argc, char *argv[]);
|
int main (int argc, char *argv[]);
|
||||||
void usage ();
|
void usage ();
|
||||||
BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
|
BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace, BOOL alpha);
|
||||||
BOOL alpha);
|
|
||||||
void get_token(FILE *pnm_file, char *token);
|
void get_token(FILE *pnm_file, char *token);
|
||||||
png_uint_32 get_data (FILE *pnm_file, int depth);
|
png_uint_32 get_data (FILE *pnm_file, int depth);
|
||||||
png_uint_32 get_value (FILE *pnm_file, int depth);
|
png_uint_32 get_value (FILE *pnm_file, int depth);
|
||||||
@@ -178,8 +175,7 @@ void usage()
|
|||||||
fprintf (stderr, " or: ... | pnm2png [options]\n");
|
fprintf (stderr, " or: ... | pnm2png [options]\n");
|
||||||
fprintf (stderr, "Options:\n");
|
fprintf (stderr, "Options:\n");
|
||||||
fprintf (stderr, " -i[nterlace] write png-file with interlacing on\n");
|
fprintf (stderr, " -i[nterlace] write png-file with interlacing on\n");
|
||||||
fprintf (stderr,
|
fprintf (stderr, " -a[lpha] <file>.pgm read PNG alpha channel as pgm-file\n");
|
||||||
" -a[lpha] <file>.pgm read PNG alpha channel as pgm-file\n");
|
|
||||||
fprintf (stderr, " -h | -? print this help-information\n");
|
fprintf (stderr, " -h | -? print this help-information\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -187,36 +183,29 @@ void usage()
|
|||||||
* pnm2png
|
* pnm2png
|
||||||
*/
|
*/
|
||||||
|
|
||||||
BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
|
BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace, BOOL alpha)
|
||||||
BOOL alpha)
|
|
||||||
{
|
{
|
||||||
png_struct *png_ptr = NULL;
|
png_struct *png_ptr = NULL;
|
||||||
png_info *info_ptr = NULL;
|
png_info *info_ptr = NULL;
|
||||||
png_byte *png_pixels = NULL;
|
png_byte *png_pixels = NULL;
|
||||||
png_byte **row_pointers = NULL;
|
png_byte **row_pointers = NULL;
|
||||||
png_byte *pix_ptr = NULL;
|
png_byte *pix_ptr = NULL;
|
||||||
volatile png_uint_32 row_bytes;
|
png_uint_32 row_bytes;
|
||||||
|
|
||||||
char type_token[16];
|
char type_token[16];
|
||||||
char width_token[16];
|
char width_token[16];
|
||||||
char height_token[16];
|
char height_token[16];
|
||||||
char maxval_token[16];
|
char maxval_token[16];
|
||||||
volatile int color_type=1;
|
int color_type;
|
||||||
unsigned long ul_width=0, ul_alpha_width=0;
|
png_uint_32 width, alpha_width;
|
||||||
unsigned long ul_height=0, ul_alpha_height=0;
|
png_uint_32 height, alpha_height;
|
||||||
unsigned long ul_maxval=0;
|
|
||||||
volatile png_uint_32 width=0, height=0;
|
|
||||||
volatile png_uint_32 alpha_width=0, alpha_height=0;
|
|
||||||
png_uint_32 maxval;
|
png_uint_32 maxval;
|
||||||
volatile int bit_depth = 0;
|
int bit_depth = 0;
|
||||||
int channels=0;
|
int channels;
|
||||||
int alpha_depth = 0;
|
int alpha_depth = 0;
|
||||||
int alpha_present=0;
|
int alpha_present;
|
||||||
int row, col;
|
int row, col;
|
||||||
BOOL raw, alpha_raw = FALSE;
|
BOOL raw, alpha_raw = FALSE;
|
||||||
#if defined(PNG_WRITE_INVERT_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
|
|
||||||
BOOL packed_bitmap = FALSE;
|
|
||||||
#endif
|
|
||||||
png_uint_32 tmp16;
|
png_uint_32 tmp16;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -229,36 +218,20 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
|
|||||||
}
|
}
|
||||||
else if ((type_token[1] == '1') || (type_token[1] == '4'))
|
else if ((type_token[1] == '1') || (type_token[1] == '4'))
|
||||||
{
|
{
|
||||||
#if defined(PNG_WRITE_INVERT_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
|
|
||||||
raw = (type_token[1] == '4');
|
raw = (type_token[1] == '4');
|
||||||
color_type = PNG_COLOR_TYPE_GRAY;
|
color_type = PNG_COLOR_TYPE_GRAY;
|
||||||
get_token(pnm_file, width_token);
|
|
||||||
sscanf (width_token, "%lu", &ul_width);
|
|
||||||
width = (png_uint_32) ul_width;
|
|
||||||
get_token(pnm_file, height_token);
|
|
||||||
sscanf (height_token, "%lu", &ul_height);
|
|
||||||
height = (png_uint_32) ul_height;
|
|
||||||
bit_depth = 1;
|
bit_depth = 1;
|
||||||
packed_bitmap = TRUE;
|
|
||||||
#else
|
|
||||||
fprintf (stderr, "PNM2PNG built without PNG_WRITE_INVERT_SUPPORTED and \n");
|
|
||||||
fprintf (stderr, "PNG_WRITE_PACK_SUPPORTED can't read PBM (P1,P4) files\n");
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else if ((type_token[1] == '2') || (type_token[1] == '5'))
|
else if ((type_token[1] == '2') || (type_token[1] == '5'))
|
||||||
{
|
{
|
||||||
raw = (type_token[1] == '5');
|
raw = (type_token[1] == '5');
|
||||||
color_type = PNG_COLOR_TYPE_GRAY;
|
color_type = PNG_COLOR_TYPE_GRAY;
|
||||||
get_token(pnm_file, width_token);
|
get_token(pnm_file, width_token);
|
||||||
sscanf (width_token, "%lu", &ul_width);
|
sscanf (width_token, "%lu", &width);
|
||||||
width = (png_uint_32) ul_width;
|
|
||||||
get_token(pnm_file, height_token);
|
get_token(pnm_file, height_token);
|
||||||
sscanf (height_token, "%lu", &ul_height);
|
sscanf (height_token, "%lu", &height);
|
||||||
height = (png_uint_32) ul_height;
|
|
||||||
get_token(pnm_file, maxval_token);
|
get_token(pnm_file, maxval_token);
|
||||||
sscanf (maxval_token, "%lu", &ul_maxval);
|
sscanf (maxval_token, "%lu", &maxval);
|
||||||
maxval = (png_uint_32) ul_maxval;
|
|
||||||
|
|
||||||
if (maxval <= 1)
|
if (maxval <= 1)
|
||||||
bit_depth = 1;
|
bit_depth = 1;
|
||||||
else if (maxval <= 3)
|
else if (maxval <= 3)
|
||||||
@@ -275,14 +248,11 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
|
|||||||
raw = (type_token[1] == '6');
|
raw = (type_token[1] == '6');
|
||||||
color_type = PNG_COLOR_TYPE_RGB;
|
color_type = PNG_COLOR_TYPE_RGB;
|
||||||
get_token(pnm_file, width_token);
|
get_token(pnm_file, width_token);
|
||||||
sscanf (width_token, "%lu", &ul_width);
|
sscanf (width_token, "%lu", &width);
|
||||||
width = (png_uint_32) ul_width;
|
|
||||||
get_token(pnm_file, height_token);
|
get_token(pnm_file, height_token);
|
||||||
sscanf (height_token, "%lu", &ul_height);
|
sscanf (height_token, "%lu", &height);
|
||||||
height = (png_uint_32) ul_height;
|
|
||||||
get_token(pnm_file, maxval_token);
|
get_token(pnm_file, maxval_token);
|
||||||
sscanf (maxval_token, "%lu", &ul_maxval);
|
sscanf (maxval_token, "%lu", &maxval);
|
||||||
maxval = (png_uint_32) ul_maxval;
|
|
||||||
if (maxval <= 1)
|
if (maxval <= 1)
|
||||||
bit_depth = 1;
|
bit_depth = 1;
|
||||||
else if (maxval <= 3)
|
else if (maxval <= 3)
|
||||||
@@ -317,18 +287,15 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
|
|||||||
{
|
{
|
||||||
alpha_raw = (type_token[1] == '5');
|
alpha_raw = (type_token[1] == '5');
|
||||||
get_token(alpha_file, width_token);
|
get_token(alpha_file, width_token);
|
||||||
sscanf (width_token, "%lu", &ul_alpha_width);
|
sscanf (width_token, "%lu", &alpha_width);
|
||||||
alpha_width=(png_uint_32) ul_alpha_width;
|
|
||||||
if (alpha_width != width)
|
if (alpha_width != width)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
get_token(alpha_file, height_token);
|
get_token(alpha_file, height_token);
|
||||||
sscanf (height_token, "%lu", &ul_alpha_height);
|
sscanf (height_token, "%lu", &alpha_height);
|
||||||
alpha_height = (png_uint_32) ul_alpha_height;
|
|
||||||
if (alpha_height != height)
|
if (alpha_height != height)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
get_token(alpha_file, maxval_token);
|
get_token(alpha_file, maxval_token);
|
||||||
sscanf (maxval_token, "%lu", &ul_maxval);
|
sscanf (maxval_token, "%lu", &maxval);
|
||||||
maxval = (png_uint_32) ul_maxval;
|
|
||||||
if (maxval <= 1)
|
if (maxval <= 1)
|
||||||
alpha_depth = 1;
|
alpha_depth = 1;
|
||||||
else if (maxval <= 3)
|
else if (maxval <= 3)
|
||||||
@@ -357,108 +324,76 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
|
|||||||
channels = 3;
|
channels = 3;
|
||||||
else if (color_type == PNG_COLOR_TYPE_RGB_ALPHA)
|
else if (color_type == PNG_COLOR_TYPE_RGB_ALPHA)
|
||||||
channels = 4;
|
channels = 4;
|
||||||
#if 0
|
|
||||||
else
|
else
|
||||||
channels = 0; /* cannot happen */
|
channels = 0; /* should not happen */
|
||||||
#endif
|
|
||||||
|
|
||||||
alpha_present = (channels - 1) % 2;
|
alpha_present = (channels - 1) % 2;
|
||||||
|
|
||||||
#if defined(PNG_WRITE_INVERT_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
|
/* row_bytes is the width x number of channels x (bit-depth / 8) */
|
||||||
if (packed_bitmap)
|
row_bytes = width * channels * ((bit_depth <= 8) ? 1 : 2);
|
||||||
/* row data is as many bytes as can fit width x channels x bit_depth */
|
|
||||||
row_bytes = (width * channels * bit_depth + 7) / 8;
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
/* row_bytes is the width x number of channels x (bit-depth / 8) */
|
|
||||||
row_bytes = width * channels * ((bit_depth <= 8) ? 1 : 2);
|
|
||||||
|
|
||||||
if ((png_pixels = (png_byte *)
|
if ((png_pixels = (png_byte *) malloc (row_bytes * height * sizeof (png_byte))) == NULL)
|
||||||
malloc (row_bytes * height * sizeof (png_byte))) == NULL)
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
/* read data from PNM file */
|
/* read data from PNM file */
|
||||||
pix_ptr = png_pixels;
|
pix_ptr = png_pixels;
|
||||||
|
|
||||||
for (row = 0; row < (int) height; row++)
|
for (row = 0; row < height; row++)
|
||||||
{
|
{
|
||||||
#if defined(PNG_WRITE_INVERT_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
|
for (col = 0; col < width; col++)
|
||||||
if (packed_bitmap) {
|
|
||||||
for (i = 0; i < (int) row_bytes; i++)
|
|
||||||
/* png supports this format natively so no conversion is needed */
|
|
||||||
*pix_ptr++ = get_data (pnm_file, 8);
|
|
||||||
} else
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
for (col = 0; col < (int) width; col++)
|
for (i = 0; i < (channels - alpha_present); i++)
|
||||||
{
|
{
|
||||||
for (i = 0; i < (channels - alpha_present); i++)
|
if (raw)
|
||||||
{
|
*pix_ptr++ = get_data (pnm_file, bit_depth);
|
||||||
if (raw)
|
else
|
||||||
*pix_ptr++ = get_data (pnm_file, bit_depth);
|
if (bit_depth <= 8)
|
||||||
|
*pix_ptr++ = get_value (pnm_file, bit_depth);
|
||||||
else
|
else
|
||||||
if (bit_depth <= 8)
|
{
|
||||||
*pix_ptr++ = get_value (pnm_file, bit_depth);
|
tmp16 = get_value (pnm_file, bit_depth);
|
||||||
else
|
*pix_ptr = (png_byte) ((tmp16 >> 8) & 0xFF);
|
||||||
{
|
pix_ptr++;
|
||||||
tmp16 = get_value (pnm_file, bit_depth);
|
*pix_ptr = (png_byte) (tmp16 & 0xFF);
|
||||||
*pix_ptr = (png_byte) ((tmp16 >> 8) & 0xFF);
|
pix_ptr++;
|
||||||
pix_ptr++;
|
}
|
||||||
*pix_ptr = (png_byte) (tmp16 & 0xFF);
|
}
|
||||||
pix_ptr++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (alpha) /* read alpha-channel from pgm file */
|
if (alpha) /* read alpha-channel from pgm file */
|
||||||
{
|
{
|
||||||
if (alpha_raw)
|
if (alpha_raw)
|
||||||
*pix_ptr++ = get_data (alpha_file, alpha_depth);
|
*pix_ptr++ = get_data (alpha_file, alpha_depth);
|
||||||
|
else
|
||||||
|
if (alpha_depth <= 8)
|
||||||
|
*pix_ptr++ = get_value (alpha_file, bit_depth);
|
||||||
else
|
else
|
||||||
if (alpha_depth <= 8)
|
{
|
||||||
*pix_ptr++ = get_value (alpha_file, bit_depth);
|
tmp16 = get_value (alpha_file, bit_depth);
|
||||||
else
|
*pix_ptr++ = (png_byte) ((tmp16 >> 8) & 0xFF);
|
||||||
{
|
*pix_ptr++ = (png_byte) (tmp16 & 0xFF);
|
||||||
tmp16 = get_value (alpha_file, bit_depth);
|
}
|
||||||
*pix_ptr++ = (png_byte) ((tmp16 >> 8) & 0xFF);
|
} /* if alpha */
|
||||||
*pix_ptr++ = (png_byte) (tmp16 & 0xFF);
|
|
||||||
}
|
|
||||||
} /* if alpha */
|
|
||||||
} /* if packed_bitmap */
|
|
||||||
} /* end for col */
|
} /* end for col */
|
||||||
} /* end for row */
|
} /* end for row */
|
||||||
|
|
||||||
/* prepare the standard PNG structures */
|
/* prepare the standard PNG structures */
|
||||||
png_ptr = png_create_write_struct (png_get_libpng_ver(NULL), NULL, NULL,
|
png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
|
||||||
NULL);
|
|
||||||
if (!png_ptr)
|
if (!png_ptr)
|
||||||
{
|
{
|
||||||
free (png_pixels);
|
|
||||||
png_pixels = NULL;
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
info_ptr = png_create_info_struct (png_ptr);
|
info_ptr = png_create_info_struct (png_ptr);
|
||||||
if (!info_ptr)
|
if (!info_ptr)
|
||||||
{
|
{
|
||||||
png_destroy_write_struct (&png_ptr, (png_infopp) NULL);
|
png_destroy_write_struct (&png_ptr, (png_infopp) NULL);
|
||||||
free (png_pixels);
|
|
||||||
png_pixels = NULL;
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(PNG_WRITE_INVERT_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
|
|
||||||
if (packed_bitmap == TRUE)
|
|
||||||
{
|
|
||||||
png_set_packing (png_ptr);
|
|
||||||
png_set_invert_mono (png_ptr);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* setjmp() must be called in every function that calls a PNG-reading libpng function */
|
/* setjmp() must be called in every function that calls a PNG-reading libpng function */
|
||||||
if (setjmp (png_jmpbuf(png_ptr)))
|
if (setjmp (png_jmpbuf(png_ptr)))
|
||||||
{
|
{
|
||||||
png_destroy_write_struct (&png_ptr, &info_ptr);
|
png_destroy_write_struct (&png_ptr, (png_infopp) NULL);
|
||||||
free (png_pixels);
|
|
||||||
png_pixels = NULL;
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -476,28 +411,25 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
|
|||||||
/* if needed we will allocate memory for an new array of row-pointers */
|
/* if needed we will allocate memory for an new array of row-pointers */
|
||||||
if (row_pointers == (unsigned char**) NULL)
|
if (row_pointers == (unsigned char**) NULL)
|
||||||
{
|
{
|
||||||
if ((row_pointers = (png_byte **)
|
if ((row_pointers = (png_byte **) malloc (height * sizeof (png_bytep))) == NULL)
|
||||||
malloc (height * sizeof (png_bytep))) == NULL)
|
|
||||||
{
|
{
|
||||||
png_destroy_write_struct (&png_ptr, &info_ptr);
|
png_destroy_write_struct (&png_ptr, (png_infopp) NULL);
|
||||||
free (png_pixels);
|
|
||||||
png_pixels = NULL;
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* set the individual row_pointers to point at the correct offsets */
|
/* set the individual row_pointers to point at the correct offsets */
|
||||||
for (i = 0; i < (int) height; i++)
|
for (i = 0; i < (height); i++)
|
||||||
row_pointers[i] = png_pixels + i * row_bytes;
|
row_pointers[i] = png_pixels + i * row_bytes;
|
||||||
|
|
||||||
/* write out the entire image data in one call */
|
/* write out the entire image data in one call */
|
||||||
png_write_image (png_ptr, row_pointers);
|
png_write_image (png_ptr, row_pointers);
|
||||||
|
|
||||||
/* write the additional chunks to the PNG file (not really needed) */
|
/* write the additional chuncks to the PNG file (not really needed) */
|
||||||
png_write_end (png_ptr, info_ptr);
|
png_write_end (png_ptr, info_ptr);
|
||||||
|
|
||||||
/* clean up after the write, and free any memory allocated */
|
/* clean up after the write, and free any memory allocated */
|
||||||
png_destroy_write_struct (&png_ptr, &info_ptr);
|
png_destroy_write_struct (&png_ptr, (png_infopp) NULL);
|
||||||
|
|
||||||
if (row_pointers != (unsigned char**) NULL)
|
if (row_pointers != (unsigned char**) NULL)
|
||||||
free (row_pointers);
|
free (row_pointers);
|
||||||
@@ -514,32 +446,19 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
|
|||||||
void get_token(FILE *pnm_file, char *token)
|
void get_token(FILE *pnm_file, char *token)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
int ret;
|
|
||||||
|
|
||||||
/* remove white-space and comment lines */
|
/* remove white-space */
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
ret = fgetc(pnm_file);
|
token[i] = (unsigned char) fgetc (pnm_file);
|
||||||
if (ret == '#') {
|
|
||||||
/* the rest of this line is a comment */
|
|
||||||
do
|
|
||||||
{
|
|
||||||
ret = fgetc(pnm_file);
|
|
||||||
}
|
|
||||||
while ((ret != '\n') && (ret != '\r') && (ret != EOF));
|
|
||||||
}
|
|
||||||
if (ret == EOF) break;
|
|
||||||
token[i] = (unsigned char) ret;
|
|
||||||
}
|
}
|
||||||
while ((token[i] == '\n') || (token[i] == '\r') || (token[i] == ' '));
|
while ((token[i] == '\n') || (token[i] == '\r') || (token[i] == ' '));
|
||||||
|
|
||||||
/* read string */
|
/* read string */
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
ret = fgetc(pnm_file);
|
|
||||||
if (ret == EOF) break;
|
|
||||||
i++;
|
i++;
|
||||||
token[i] = (unsigned char) ret;
|
token[i] = (unsigned char) fgetc (pnm_file);
|
||||||
}
|
}
|
||||||
while ((token[i] != '\n') && (token[i] != '\r') && (token[i] != ' '));
|
while ((token[i] != '\n') && (token[i] != '\r') && (token[i] != ' '));
|
||||||
|
|
||||||
@@ -591,7 +510,6 @@ png_uint_32 get_value (FILE *pnm_file, int depth)
|
|||||||
{
|
{
|
||||||
static png_uint_32 mask = 0;
|
static png_uint_32 mask = 0;
|
||||||
png_byte token[16];
|
png_byte token[16];
|
||||||
unsigned long ul_ret_value;
|
|
||||||
png_uint_32 ret_value;
|
png_uint_32 ret_value;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
@@ -600,8 +518,7 @@ png_uint_32 get_value (FILE *pnm_file, int depth)
|
|||||||
mask = (mask << 1) | 0x01;
|
mask = (mask << 1) | 0x01;
|
||||||
|
|
||||||
get_token (pnm_file, (char *) token);
|
get_token (pnm_file, (char *) token);
|
||||||
sscanf ((const char *) token, "%lu", &ul_ret_value);
|
sscanf ((const char *) token, "%lu", &ret_value);
|
||||||
ret_value = (png_uint_32) ul_ret_value;
|
|
||||||
|
|
||||||
ret_value &= mask;
|
ret_value &= mask;
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
#!/bin/sh
|
|
||||||
# -- grayscale
|
# -- grayscale
|
||||||
./pnm2png basn0g01.pgm basn0g01.png
|
./pnm2png basn0g01.pgm basn0g01.png
|
||||||
./pnm2png basn0g02.pgm basn0g02.png
|
./pnm2png basn0g02.pgm basn0g02.png
|
||||||
|
|||||||
@@ -1,61 +1,41 @@
|
|||||||
|
|
||||||
pngsuite
|
pngsuite
|
||||||
--------
|
--------
|
||||||
(c) Willem van Schaik, 1999, 2011, 2012
|
(c) Willem van Schaik, 1999
|
||||||
Two images are by Glenn Randers-Pehrson, 2012
|
|
||||||
|
|
||||||
Permission to use, copy, modify, and distribute these images for any
|
Permission to use, copy, and distribute these images for any purpose and
|
||||||
purpose and without fee is hereby granted.
|
without fee is hereby granted.
|
||||||
|
|
||||||
The 15 "bas*.png" images are part of the much larger PngSuite test-set of
|
These 15 images are part of the much larger PngSuite test-set of
|
||||||
images, available for developers of PNG supporting software. The
|
images, available for developers of PNG supporting software. The
|
||||||
complete set, available at http:/www.schaik.com/pngsuite/, contains
|
complete set, available at http:/www.schaik.com/pngsuite/, contains
|
||||||
a variety of images to test interlacing, gamma settings, ancillary
|
a variety of images to test interlacing, gamma settings, ancillary
|
||||||
chunks, etc.
|
chunks, etc.
|
||||||
|
|
||||||
The "ft*.png" images are "free/libre" replacements for the transparent
|
|
||||||
corresponding t*.png images in the PngSuite.
|
|
||||||
|
|
||||||
The images in this directory represent the basic PNG color-types:
|
The images in this directory represent the basic PNG color-types:
|
||||||
grayscale (1-16 bit deep), full color (8 or 16 bit), paletted
|
grayscale (1-16 bit deep), full color (8 or 16 bit), paletted
|
||||||
(1-8 bit) and grayscale or color images with alpha channel. You
|
(1-8 bit) and grayscale or color images with alpha channel. You
|
||||||
can use them to test the proper functioning of PNG software.
|
can use them to test the proper functioning of PNG software.
|
||||||
|
|
||||||
filename depth type
|
filename depth type
|
||||||
------------ ------ --------------
|
------------ ------ --------------
|
||||||
basn0g01.png 1-bit grayscale
|
basn0g01.png 1-bit grayscale
|
||||||
basn0g02.png 2-bit grayscale
|
basn0g02.png 2-bit grayscale
|
||||||
basn0g04.png 4-bit grayscale
|
basn0g04.png 4-bit grayscale
|
||||||
basn0g08.png 8-bit grayscale
|
basn0g08.png 8-bit grayscale
|
||||||
basn0g16.png 16-bit grayscale
|
basn0g16.png 16-bit grayscale
|
||||||
basn2c08.png 8-bit truecolor
|
basn2c08.png 8-bit truecolor
|
||||||
basn2c16.png 16-bit truecolor
|
basn2c16.png 16-bit truecolor
|
||||||
basn3p01.png 1-bit paletted
|
basn3p01.png 1-bit paletted
|
||||||
basn3p02.png 2-bit paletted
|
basn3p02.png 2-bit paletted
|
||||||
basn3p04.png 4-bit paletted
|
basn3p04.png 4-bit paletted
|
||||||
basn3p08.png 8-bit paletted
|
basn3p08.png 8-bit paletted
|
||||||
basn4a08.png 8-bit gray with alpha
|
basn4a08.png 8-bit gray with alpha
|
||||||
basn4a16.png 16-bit gray with alpha
|
basn4a16.png 16-bit gray with alpha
|
||||||
basn6a08.png 8-bit RGBA
|
basn6a08.png 8-bit RGBA
|
||||||
basn6a16.png 16-bit RGBA
|
basn6a16.png 16-bit RGBA
|
||||||
|
|
||||||
ftbbn0g01.png 1-bit grayscale, black bKGD
|
Here is the correct result of typing "pngtest -m *.png" in
|
||||||
ftbbn0g02.png 2-bit grayscale, black bKGD
|
|
||||||
ftbbn0g04.png 4-bit grayscale, black bKGD
|
|
||||||
ftbbn2c16.png 16-bit truecolor, black bKGD
|
|
||||||
ftbbn3p08.png 8-bit paletted, black bKGD
|
|
||||||
ftbgn2c16.png 16-bit truecolor, gray bKGD
|
|
||||||
ftbgn3p08.png 8-bit paletted, gray bKGD
|
|
||||||
ftbrn2c08.png 8-bit truecolor, red bKGD
|
|
||||||
ftbwn0g16.png 16-bit gray, white bKGD
|
|
||||||
ftbwn3p08.png 8-bit paletted, white bKGD
|
|
||||||
ftbyn3p08.png 8-bit paletted, yellow bKGD
|
|
||||||
ftp0n0g08.png 8-bit grayscale, opaque
|
|
||||||
ftp0n2c08.png 8-bit truecolor, opaque
|
|
||||||
ftp0n3p08.png 8-bit paletted, opaque
|
|
||||||
ftp1n3p08.png 8-bit paletted, no bKGD
|
|
||||||
|
|
||||||
Here is the correct result of typing "pngtest -m bas*.png" in
|
|
||||||
this directory:
|
this directory:
|
||||||
|
|
||||||
Testing basn0g01.png: PASS (524 zero samples)
|
Testing basn0g01.png: PASS (524 zero samples)
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 164 B After Width: | Height: | Size: 164 B |
|
Before Width: | Height: | Size: 104 B After Width: | Height: | Size: 104 B |
|
Before Width: | Height: | Size: 145 B After Width: | Height: | Size: 145 B |
|
Before Width: | Height: | Size: 138 B After Width: | Height: | Size: 138 B |
|
Before Width: | Height: | Size: 167 B After Width: | Height: | Size: 167 B |
|
Before Width: | Height: | Size: 145 B After Width: | Height: | Size: 145 B |
|
Before Width: | Height: | Size: 302 B After Width: | Height: | Size: 302 B |
|
Before Width: | Height: | Size: 112 B After Width: | Height: | Size: 112 B |
|
Before Width: | Height: | Size: 146 B After Width: | Height: | Size: 146 B |
|
Before Width: | Height: | Size: 216 B After Width: | Height: | Size: 216 B |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 126 B After Width: | Height: | Size: 126 B |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 184 B After Width: | Height: | Size: 184 B |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 176 B |
|
Before Width: | Height: | Size: 197 B |
|
Before Width: | Height: | Size: 429 B |
|
Before Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 719 B |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
@@ -1,19 +1,14 @@
|
|||||||
/*-------------------------------------
|
//-------------------------------------
|
||||||
* PNGFILE.C -- Image File Functions
|
// PNGFILE.C -- Image File Functions
|
||||||
*-------------------------------------
|
//-------------------------------------
|
||||||
*
|
|
||||||
* Copyright 2000, Willem van Schaik.
|
// Copyright 2000, Willem van Schaik. For conditions of distribution and
|
||||||
*
|
// use, see the copyright/license/disclaimer notice in png.h
|
||||||
* This code is released under the libpng license.
|
|
||||||
* For conditions of distribution and use, see the disclaimer
|
|
||||||
* and license in png.h
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <commdlg.h>
|
#include <commdlg.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <zlib.h>
|
|
||||||
|
|
||||||
#include "png.h"
|
#include "png.h"
|
||||||
#include "pngfile.h"
|
#include "pngfile.h"
|
||||||
@@ -30,14 +25,14 @@ static png_structp png_ptr = NULL;
|
|||||||
static png_infop info_ptr = NULL;
|
static png_infop info_ptr = NULL;
|
||||||
|
|
||||||
|
|
||||||
/* cexcept interface */
|
// cexcept interface
|
||||||
|
|
||||||
static void
|
static void
|
||||||
png_cexcept_error(png_structp png_ptr, png_const_charp msg)
|
png_cexcept_error(png_structp png_ptr, png_const_charp msg)
|
||||||
{
|
{
|
||||||
if(png_ptr)
|
if(png_ptr)
|
||||||
;
|
;
|
||||||
#ifdef PNG_CONSOLE_IO_SUPPORTED
|
#ifndef PNG_NO_CONSOLE_IO
|
||||||
fprintf(stderr, "libpng error: %s\n", msg);
|
fprintf(stderr, "libpng error: %s\n", msg);
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
@@ -45,7 +40,7 @@ png_cexcept_error(png_structp png_ptr, png_const_charp msg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Windows open-file functions */
|
// Windows open-file functions
|
||||||
|
|
||||||
void PngFileInitialize (HWND hwnd)
|
void PngFileInitialize (HWND hwnd)
|
||||||
{
|
{
|
||||||
@@ -59,13 +54,13 @@ void PngFileInitialize (HWND hwnd)
|
|||||||
ofn.lpstrCustomFilter = NULL;
|
ofn.lpstrCustomFilter = NULL;
|
||||||
ofn.nMaxCustFilter = 0;
|
ofn.nMaxCustFilter = 0;
|
||||||
ofn.nFilterIndex = 0;
|
ofn.nFilterIndex = 0;
|
||||||
ofn.lpstrFile = NULL; /* Set in Open and Close functions */
|
ofn.lpstrFile = NULL; // Set in Open and Close functions
|
||||||
ofn.nMaxFile = MAX_PATH;
|
ofn.nMaxFile = MAX_PATH;
|
||||||
ofn.lpstrFileTitle = NULL; /* Set in Open and Close functions */
|
ofn.lpstrFileTitle = NULL; // Set in Open and Close functions
|
||||||
ofn.nMaxFileTitle = MAX_PATH;
|
ofn.nMaxFileTitle = MAX_PATH;
|
||||||
ofn.lpstrInitialDir = NULL;
|
ofn.lpstrInitialDir = NULL;
|
||||||
ofn.lpstrTitle = NULL;
|
ofn.lpstrTitle = NULL;
|
||||||
ofn.Flags = 0; /* Set in Open and Close functions */
|
ofn.Flags = 0; // Set in Open and Close functions
|
||||||
ofn.nFileOffset = 0;
|
ofn.nFileOffset = 0;
|
||||||
ofn.nFileExtension = 0;
|
ofn.nFileExtension = 0;
|
||||||
ofn.lpstrDefExt = TEXT ("png");
|
ofn.lpstrDefExt = TEXT ("png");
|
||||||
@@ -94,7 +89,7 @@ BOOL PngFileSaveDlg (HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName)
|
|||||||
return GetSaveFileName (&ofn);
|
return GetSaveFileName (&ofn);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* PNG image handler functions */
|
// PNG image handler functions
|
||||||
|
|
||||||
BOOL PngLoadImage (PTSTR pstrFileName, png_byte **ppbImageData,
|
BOOL PngLoadImage (PTSTR pstrFileName, png_byte **ppbImageData,
|
||||||
int *piWidth, int *piHeight, int *piChannels, png_color *pBkgColor)
|
int *piWidth, int *piHeight, int *piChannels, png_color *pBkgColor)
|
||||||
@@ -111,7 +106,7 @@ BOOL PngLoadImage (PTSTR pstrFileName, png_byte **ppbImageData,
|
|||||||
static png_byte **ppbRowPointers = NULL;
|
static png_byte **ppbRowPointers = NULL;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* open the PNG input file */
|
// open the PNG input file
|
||||||
|
|
||||||
if (!pstrFileName)
|
if (!pstrFileName)
|
||||||
{
|
{
|
||||||
@@ -125,16 +120,16 @@ BOOL PngLoadImage (PTSTR pstrFileName, png_byte **ppbImageData,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* first check the eight byte PNG signature */
|
// first check the eight byte PNG signature
|
||||||
|
|
||||||
fread(pbSig, 1, 8, pfFile);
|
fread(pbSig, 1, 8, pfFile);
|
||||||
if (png_sig_cmp(pbSig, 0, 8))
|
if (!png_check_sig(pbSig, 8))
|
||||||
{
|
{
|
||||||
*ppbImageData = pbImageData = NULL;
|
*ppbImageData = pbImageData = NULL;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* create the two png(-info) structures */
|
// create the two png(-info) structures
|
||||||
|
|
||||||
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL,
|
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL,
|
||||||
(png_error_ptr)png_cexcept_error, (png_error_ptr)NULL);
|
(png_error_ptr)png_cexcept_error, (png_error_ptr)NULL);
|
||||||
@@ -155,9 +150,9 @@ BOOL PngLoadImage (PTSTR pstrFileName, png_byte **ppbImageData,
|
|||||||
Try
|
Try
|
||||||
{
|
{
|
||||||
|
|
||||||
/* initialize the png structure */
|
// initialize the png structure
|
||||||
|
|
||||||
#ifdef PNG_STDIO_SUPPORTED
|
#if !defined(PNG_NO_STDIO)
|
||||||
png_init_io(png_ptr, pfFile);
|
png_init_io(png_ptr, pfFile);
|
||||||
#else
|
#else
|
||||||
png_set_read_fn(png_ptr, (png_voidp)pfFile, png_read_data);
|
png_set_read_fn(png_ptr, (png_voidp)pfFile, png_read_data);
|
||||||
@@ -165,26 +160,20 @@ BOOL PngLoadImage (PTSTR pstrFileName, png_byte **ppbImageData,
|
|||||||
|
|
||||||
png_set_sig_bytes(png_ptr, 8);
|
png_set_sig_bytes(png_ptr, 8);
|
||||||
|
|
||||||
/* read all PNG info up to image data */
|
// read all PNG info up to image data
|
||||||
|
|
||||||
png_read_info(png_ptr, info_ptr);
|
png_read_info(png_ptr, info_ptr);
|
||||||
|
|
||||||
/* get width, height, bit-depth and color-type */
|
// get width, height, bit-depth and color-type
|
||||||
|
|
||||||
png_get_IHDR(png_ptr, info_ptr, piWidth, piHeight, &iBitDepth,
|
png_get_IHDR(png_ptr, info_ptr, piWidth, piHeight, &iBitDepth,
|
||||||
&iColorType, NULL, NULL, NULL);
|
&iColorType, NULL, NULL, NULL);
|
||||||
|
|
||||||
/* expand images of all color-type and bit-depth to 3x8-bit RGB */
|
// expand images of all color-type and bit-depth to 3x8 bit RGB images
|
||||||
/* let the library process alpha, transparency, background, etc. */
|
// let the library process things like alpha, transparency, background
|
||||||
|
|
||||||
#ifdef PNG_READ_16_TO_8_SUPPORTED
|
if (iBitDepth == 16)
|
||||||
if (iBitDepth == 16)
|
png_set_strip_16(png_ptr);
|
||||||
# ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
|
|
||||||
png_set_scale_16(png_ptr);
|
|
||||||
# else
|
|
||||||
png_set_strip_16(png_ptr);
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
if (iColorType == PNG_COLOR_TYPE_PALETTE)
|
if (iColorType == PNG_COLOR_TYPE_PALETTE)
|
||||||
png_set_expand(png_ptr);
|
png_set_expand(png_ptr);
|
||||||
if (iBitDepth < 8)
|
if (iBitDepth < 8)
|
||||||
@@ -195,7 +184,7 @@ BOOL PngLoadImage (PTSTR pstrFileName, png_byte **ppbImageData,
|
|||||||
iColorType == PNG_COLOR_TYPE_GRAY_ALPHA)
|
iColorType == PNG_COLOR_TYPE_GRAY_ALPHA)
|
||||||
png_set_gray_to_rgb(png_ptr);
|
png_set_gray_to_rgb(png_ptr);
|
||||||
|
|
||||||
/* set the background color to draw transparent and alpha images over */
|
// set the background color to draw transparent and alpha images over.
|
||||||
if (png_get_bKGD(png_ptr, info_ptr, &pBackground))
|
if (png_get_bKGD(png_ptr, info_ptr, &pBackground))
|
||||||
{
|
{
|
||||||
png_set_background(png_ptr, pBackground, PNG_BACKGROUND_GAMMA_FILE, 1, 1.0);
|
png_set_background(png_ptr, pBackground, PNG_BACKGROUND_GAMMA_FILE, 1, 1.0);
|
||||||
@@ -208,28 +197,28 @@ BOOL PngLoadImage (PTSTR pstrFileName, png_byte **ppbImageData,
|
|||||||
pBkgColor = NULL;
|
pBkgColor = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if required set gamma conversion */
|
// if required set gamma conversion
|
||||||
if (png_get_gAMA(png_ptr, info_ptr, &dGamma))
|
if (png_get_gAMA(png_ptr, info_ptr, &dGamma))
|
||||||
png_set_gamma(png_ptr, (double) 2.2, dGamma);
|
png_set_gamma(png_ptr, (double) 2.2, dGamma);
|
||||||
|
|
||||||
/* after the transformations are registered, update info_ptr data */
|
// after the transformations have been registered update info_ptr data
|
||||||
|
|
||||||
png_read_update_info(png_ptr, info_ptr);
|
png_read_update_info(png_ptr, info_ptr);
|
||||||
|
|
||||||
/* get again width, height and the new bit-depth and color-type */
|
// get again width, height and the new bit-depth and color-type
|
||||||
|
|
||||||
png_get_IHDR(png_ptr, info_ptr, piWidth, piHeight, &iBitDepth,
|
png_get_IHDR(png_ptr, info_ptr, piWidth, piHeight, &iBitDepth,
|
||||||
&iColorType, NULL, NULL, NULL);
|
&iColorType, NULL, NULL, NULL);
|
||||||
|
|
||||||
|
|
||||||
/* row_bytes is the width x number of channels */
|
// row_bytes is the width x number of channels
|
||||||
|
|
||||||
ulRowBytes = png_get_rowbytes(png_ptr, info_ptr);
|
ulRowBytes = png_get_rowbytes(png_ptr, info_ptr);
|
||||||
ulChannels = png_get_channels(png_ptr, info_ptr);
|
ulChannels = png_get_channels(png_ptr, info_ptr);
|
||||||
|
|
||||||
*piChannels = ulChannels;
|
*piChannels = ulChannels;
|
||||||
|
|
||||||
/* now we can allocate memory to store the image */
|
// now we can allocate memory to store the image
|
||||||
|
|
||||||
if (pbImageData)
|
if (pbImageData)
|
||||||
{
|
{
|
||||||
@@ -243,7 +232,7 @@ BOOL PngLoadImage (PTSTR pstrFileName, png_byte **ppbImageData,
|
|||||||
}
|
}
|
||||||
*ppbImageData = pbImageData;
|
*ppbImageData = pbImageData;
|
||||||
|
|
||||||
/* and allocate memory for an array of row-pointers */
|
// and allocate memory for an array of row-pointers
|
||||||
|
|
||||||
if ((ppbRowPointers = (png_bytepp) malloc((*piHeight)
|
if ((ppbRowPointers = (png_bytepp) malloc((*piHeight)
|
||||||
* sizeof(png_bytep))) == NULL)
|
* sizeof(png_bytep))) == NULL)
|
||||||
@@ -251,25 +240,25 @@ BOOL PngLoadImage (PTSTR pstrFileName, png_byte **ppbImageData,
|
|||||||
png_error(png_ptr, "Visual PNG: out of memory");
|
png_error(png_ptr, "Visual PNG: out of memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* set the individual row-pointers to point at the correct offsets */
|
// set the individual row-pointers to point at the correct offsets
|
||||||
|
|
||||||
for (i = 0; i < (*piHeight); i++)
|
for (i = 0; i < (*piHeight); i++)
|
||||||
ppbRowPointers[i] = pbImageData + i * ulRowBytes;
|
ppbRowPointers[i] = pbImageData + i * ulRowBytes;
|
||||||
|
|
||||||
/* now we can go ahead and just read the whole image */
|
// now we can go ahead and just read the whole image
|
||||||
|
|
||||||
png_read_image(png_ptr, ppbRowPointers);
|
png_read_image(png_ptr, ppbRowPointers);
|
||||||
|
|
||||||
/* read the additional chunks in the PNG file (not really needed) */
|
// read the additional chunks in the PNG file (not really needed)
|
||||||
|
|
||||||
png_read_end(png_ptr, NULL);
|
png_read_end(png_ptr, NULL);
|
||||||
|
|
||||||
/* and we're done */
|
// and we're done
|
||||||
|
|
||||||
free (ppbRowPointers);
|
free (ppbRowPointers);
|
||||||
ppbRowPointers = NULL;
|
ppbRowPointers = NULL;
|
||||||
|
|
||||||
/* yepp, done */
|
// yepp, done
|
||||||
}
|
}
|
||||||
|
|
||||||
Catch (msg)
|
Catch (msg)
|
||||||
@@ -303,7 +292,7 @@ BOOL PngSaveImage (PTSTR pstrFileName, png_byte *pDiData,
|
|||||||
static png_byte **ppbRowPointers = NULL;
|
static png_byte **ppbRowPointers = NULL;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* open the PNG output file */
|
// open the PNG output file
|
||||||
|
|
||||||
if (!pstrFileName)
|
if (!pstrFileName)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@@ -311,7 +300,7 @@ BOOL PngSaveImage (PTSTR pstrFileName, png_byte *pDiData,
|
|||||||
if (!(pfFile = fopen(pstrFileName, "wb")))
|
if (!(pfFile = fopen(pstrFileName, "wb")))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
/* prepare the standard PNG structures */
|
// prepare the standard PNG structures
|
||||||
|
|
||||||
png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL,
|
png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL,
|
||||||
(png_error_ptr)png_cexcept_error, (png_error_ptr)NULL);
|
(png_error_ptr)png_cexcept_error, (png_error_ptr)NULL);
|
||||||
@@ -330,60 +319,60 @@ BOOL PngSaveImage (PTSTR pstrFileName, png_byte *pDiData,
|
|||||||
|
|
||||||
Try
|
Try
|
||||||
{
|
{
|
||||||
/* initialize the png structure */
|
// initialize the png structure
|
||||||
|
|
||||||
#ifdef PNG_STDIO_SUPPORTED
|
#if !defined(PNG_NO_STDIO)
|
||||||
png_init_io(png_ptr, pfFile);
|
png_init_io(png_ptr, pfFile);
|
||||||
#else
|
#else
|
||||||
png_set_write_fn(png_ptr, (png_voidp)pfFile, png_write_data, png_flush);
|
png_set_write_fn(png_ptr, (png_voidp)pfFile, png_write_data, png_flush);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* we're going to write a very simple 3x8-bit RGB image */
|
// we're going to write a very simple 3x8 bit RGB image
|
||||||
|
|
||||||
png_set_IHDR(png_ptr, info_ptr, iWidth, iHeight, ciBitDepth,
|
png_set_IHDR(png_ptr, info_ptr, iWidth, iHeight, ciBitDepth,
|
||||||
PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE,
|
PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE,
|
||||||
PNG_FILTER_TYPE_BASE);
|
PNG_FILTER_TYPE_BASE);
|
||||||
|
|
||||||
/* write the file header information */
|
// write the file header information
|
||||||
|
|
||||||
png_write_info(png_ptr, info_ptr);
|
png_write_info(png_ptr, info_ptr);
|
||||||
|
|
||||||
/* swap the BGR pixels in the DiData structure to RGB */
|
// swap the BGR pixels in the DiData structure to RGB
|
||||||
|
|
||||||
png_set_bgr(png_ptr);
|
png_set_bgr(png_ptr);
|
||||||
|
|
||||||
/* row_bytes is the width x number of channels */
|
// row_bytes is the width x number of channels
|
||||||
|
|
||||||
ulRowBytes = iWidth * ciChannels;
|
ulRowBytes = iWidth * ciChannels;
|
||||||
|
|
||||||
/* we can allocate memory for an array of row-pointers */
|
// we can allocate memory for an array of row-pointers
|
||||||
|
|
||||||
if ((ppbRowPointers = (png_bytepp) malloc(iHeight * sizeof(png_bytep))) == NULL)
|
if ((ppbRowPointers = (png_bytepp) malloc(iHeight * sizeof(png_bytep))) == NULL)
|
||||||
Throw "Visualpng: Out of memory";
|
Throw "Visualpng: Out of memory";
|
||||||
|
|
||||||
/* set the individual row-pointers to point at the correct offsets */
|
// set the individual row-pointers to point at the correct offsets
|
||||||
|
|
||||||
for (i = 0; i < iHeight; i++)
|
for (i = 0; i < iHeight; i++)
|
||||||
ppbRowPointers[i] = pDiData + i * (((ulRowBytes + 3) >> 2) << 2);
|
ppbRowPointers[i] = pDiData + i * (((ulRowBytes + 3) >> 2) << 2);
|
||||||
|
|
||||||
/* write out the entire image data in one call */
|
// write out the entire image data in one call
|
||||||
|
|
||||||
png_write_image (png_ptr, ppbRowPointers);
|
png_write_image (png_ptr, ppbRowPointers);
|
||||||
|
|
||||||
/* write the additional chunks to the PNG file (not really needed) */
|
// write the additional chunks to the PNG file (not really needed)
|
||||||
|
|
||||||
png_write_end(png_ptr, info_ptr);
|
png_write_end(png_ptr, info_ptr);
|
||||||
|
|
||||||
/* and we're done */
|
// and we're done
|
||||||
|
|
||||||
free (ppbRowPointers);
|
free (ppbRowPointers);
|
||||||
ppbRowPointers = NULL;
|
ppbRowPointers = NULL;
|
||||||
|
|
||||||
/* clean up after the write, and free any memory allocated */
|
// clean up after the write, and free any memory allocated
|
||||||
|
|
||||||
png_destroy_write_struct(&png_ptr, (png_infopp) NULL);
|
png_destroy_write_struct(&png_ptr, (png_infopp) NULL);
|
||||||
|
|
||||||
/* yepp, done */
|
// yepp, done
|
||||||
}
|
}
|
||||||
|
|
||||||
Catch (msg)
|
Catch (msg)
|
||||||
@@ -403,7 +392,7 @@ BOOL PngSaveImage (PTSTR pstrFileName, png_byte *pDiData,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef PNG_STDIO_SUPPORTED
|
#ifdef PNG_NO_STDIO
|
||||||
|
|
||||||
static void
|
static void
|
||||||
png_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
png_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
||||||
@@ -445,7 +434,6 @@ png_flush(png_structp png_ptr)
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*-----------------
|
//-----------------
|
||||||
* end of source
|
// end of source
|
||||||
*-----------------
|
//-----------------
|
||||||
*/
|
|
||||||
|
|||||||
@@ -1,12 +1,9 @@
|
|||||||
/*------------------------------------------*/
|
//------------------------------------------
|
||||||
/* PNGFILE.H -- Header File for pngfile.c*/
|
// PNGFILE.H -- Header File for pngfile.c
|
||||||
/*------------------------------------------*/
|
//------------------------------------------
|
||||||
|
|
||||||
/* Copyright 2000, Willem van Schaik.*/
|
// Copyright 2000, Willem van Schaik. For conditions of distribution and
|
||||||
|
// use, see the copyright/license/disclaimer notice in png.h
|
||||||
/* This code is released under the libpng license.*/
|
|
||||||
/* For conditions of distribution and use, see the disclaimer*/
|
|
||||||
/* and license in png.h*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -22,7 +19,7 @@ BOOL PngLoadImage (PTSTR pstrFileName, png_byte **ppbImageData,
|
|||||||
BOOL PngSaveImage (PTSTR pstrFileName, png_byte *pDiData,
|
BOOL PngSaveImage (PTSTR pstrFileName, png_byte *pDiData,
|
||||||
int iWidth, int iHeight, png_color BkgColor);
|
int iWidth, int iHeight, png_color BkgColor);
|
||||||
|
|
||||||
#ifndef PNG_STDIO_SUPPORTED
|
#if defined(PNG_NO_STDIO)
|
||||||
static void png_read_data(png_structp png_ptr, png_bytep data, png_size_t length);
|
static void png_read_data(png_structp png_ptr, png_bytep data, png_size_t length);
|
||||||
static void png_write_data(png_structp png_ptr, png_bytep data, png_size_t length);
|
static void png_write_data(png_structp png_ptr, png_bytep data, png_size_t length);
|
||||||
static void png_flush(png_structp png_ptr);
|
static void png_flush(png_structp png_ptr);
|
||||||
|
|||||||
@@ -1,11 +1,8 @@
|
|||||||
Microsoft Developer Studio Build File, Format Version 6.00 for VisualPng
|
Microsoft Developer Studio Build File, Format Version 6.00 for VisualPng
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright 2000, Willem van Schaik.
|
Copyright 2000, Willem van Schaik. For conditions of distribution and
|
||||||
|
use, see the copyright/license/disclaimer notice in png.h
|
||||||
This code is released under the libpng license.
|
|
||||||
For conditions of distribution and use, see the disclaimer
|
|
||||||
and license in png.h
|
|
||||||
|
|
||||||
As a PNG .dll demo VisualPng is finished. More features would only hinder
|
As a PNG .dll demo VisualPng is finished. More features would only hinder
|
||||||
the program's objective. However, further extensions (like support for other
|
the program's objective. However, further extensions (like support for other
|
||||||
|
|||||||